diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -8,7 +8,7 @@
 
 ## Version
 
-`0.1.0`
+`0.1.1`
 
 
 ## Description
diff --git a/gen/Network/Google/AndroidEnterprise.hs b/gen/Network/Google/AndroidEnterprise.hs
--- a/gen/Network/Google/AndroidEnterprise.hs
+++ b/gen/Network/Google/AndroidEnterprise.hs
@@ -74,15 +74,30 @@
     -- ** androidenterprise.devices.setState
     , module Network.Google.Resource.AndroidEnterprise.Devices.SetState
 
+    -- ** androidenterprise.enterprises.acknowledgeNotificationSet
+    , module Network.Google.Resource.AndroidEnterprise.Enterprises.AcknowledgeNotificationSet
+
+    -- ** androidenterprise.enterprises.completeSignup
+    , module Network.Google.Resource.AndroidEnterprise.Enterprises.CompleteSignup
+
+    -- ** androidenterprise.enterprises.createWebToken
+    , module Network.Google.Resource.AndroidEnterprise.Enterprises.CreateWebToken
+
     -- ** androidenterprise.enterprises.delete
     , module Network.Google.Resource.AndroidEnterprise.Enterprises.Delete
 
     -- ** androidenterprise.enterprises.enroll
     , module Network.Google.Resource.AndroidEnterprise.Enterprises.Enroll
 
+    -- ** androidenterprise.enterprises.generateSignupUrl
+    , module Network.Google.Resource.AndroidEnterprise.Enterprises.GenerateSignupURL
+
     -- ** androidenterprise.enterprises.get
     , module Network.Google.Resource.AndroidEnterprise.Enterprises.Get
 
+    -- ** androidenterprise.enterprises.getServiceAccount
+    , module Network.Google.Resource.AndroidEnterprise.Enterprises.GetServiceAccount
+
     -- ** androidenterprise.enterprises.getStoreLayout
     , module Network.Google.Resource.AndroidEnterprise.Enterprises.GetStoreLayout
 
@@ -92,6 +107,9 @@
     -- ** androidenterprise.enterprises.list
     , module Network.Google.Resource.AndroidEnterprise.Enterprises.List
 
+    -- ** androidenterprise.enterprises.pullNotificationSet
+    , module Network.Google.Resource.AndroidEnterprise.Enterprises.PullNotificationSet
+
     -- ** androidenterprise.enterprises.sendTestPushNotification
     , module Network.Google.Resource.AndroidEnterprise.Enterprises.SendTestPushNotification
 
@@ -143,6 +161,36 @@
     -- ** androidenterprise.installs.update
     , module Network.Google.Resource.AndroidEnterprise.Installs.Update
 
+    -- ** androidenterprise.managedconfigurationsfordevice.delete
+    , module Network.Google.Resource.AndroidEnterprise.ManagedConfigurationsforDevice.Delete
+
+    -- ** androidenterprise.managedconfigurationsfordevice.get
+    , module Network.Google.Resource.AndroidEnterprise.ManagedConfigurationsforDevice.Get
+
+    -- ** androidenterprise.managedconfigurationsfordevice.list
+    , module Network.Google.Resource.AndroidEnterprise.ManagedConfigurationsforDevice.List
+
+    -- ** androidenterprise.managedconfigurationsfordevice.patch
+    , module Network.Google.Resource.AndroidEnterprise.ManagedConfigurationsforDevice.Patch
+
+    -- ** androidenterprise.managedconfigurationsfordevice.update
+    , module Network.Google.Resource.AndroidEnterprise.ManagedConfigurationsforDevice.Update
+
+    -- ** androidenterprise.managedconfigurationsforuser.delete
+    , module Network.Google.Resource.AndroidEnterprise.ManagedConfigurationsforUser.Delete
+
+    -- ** androidenterprise.managedconfigurationsforuser.get
+    , module Network.Google.Resource.AndroidEnterprise.ManagedConfigurationsforUser.Get
+
+    -- ** androidenterprise.managedconfigurationsforuser.list
+    , module Network.Google.Resource.AndroidEnterprise.ManagedConfigurationsforUser.List
+
+    -- ** androidenterprise.managedconfigurationsforuser.patch
+    , module Network.Google.Resource.AndroidEnterprise.ManagedConfigurationsforUser.Patch
+
+    -- ** androidenterprise.managedconfigurationsforuser.update
+    , module Network.Google.Resource.AndroidEnterprise.ManagedConfigurationsforUser.Update
+
     -- ** androidenterprise.permissions.get
     , module Network.Google.Resource.AndroidEnterprise.Permissions.Get
 
@@ -164,9 +212,21 @@
     -- ** androidenterprise.products.list
     , module Network.Google.Resource.AndroidEnterprise.Products.List
 
+    -- ** androidenterprise.products.unapprove
+    , module Network.Google.Resource.AndroidEnterprise.Products.UnApprove
+
     -- ** androidenterprise.products.updatePermissions
     , module Network.Google.Resource.AndroidEnterprise.Products.UpdatePermissions
 
+    -- ** androidenterprise.serviceaccountkeys.delete
+    , module Network.Google.Resource.AndroidEnterprise.ServiceAccountkeys.Delete
+
+    -- ** androidenterprise.serviceaccountkeys.insert
+    , module Network.Google.Resource.AndroidEnterprise.ServiceAccountkeys.Insert
+
+    -- ** androidenterprise.serviceaccountkeys.list
+    , module Network.Google.Resource.AndroidEnterprise.ServiceAccountkeys.List
+
     -- ** androidenterprise.storelayoutclusters.delete
     , module Network.Google.Resource.AndroidEnterprise.Storelayoutclusters.Delete
 
@@ -203,6 +263,12 @@
     -- ** androidenterprise.storelayoutpages.update
     , module Network.Google.Resource.AndroidEnterprise.Storelayoutpages.Update
 
+    -- ** androidenterprise.users.delete
+    , module Network.Google.Resource.AndroidEnterprise.Users.Delete
+
+    -- ** androidenterprise.users.generateAuthenticationToken
+    , module Network.Google.Resource.AndroidEnterprise.Users.GenerateAuthenticationToken
+
     -- ** androidenterprise.users.generateToken
     , module Network.Google.Resource.AndroidEnterprise.Users.GenerateToken
 
@@ -212,15 +278,24 @@
     -- ** androidenterprise.users.getAvailableProductSet
     , module Network.Google.Resource.AndroidEnterprise.Users.GetAvailableProductSet
 
+    -- ** androidenterprise.users.insert
+    , module Network.Google.Resource.AndroidEnterprise.Users.Insert
+
     -- ** androidenterprise.users.list
     , module Network.Google.Resource.AndroidEnterprise.Users.List
 
+    -- ** androidenterprise.users.patch
+    , module Network.Google.Resource.AndroidEnterprise.Users.Patch
+
     -- ** androidenterprise.users.revokeToken
     , module Network.Google.Resource.AndroidEnterprise.Users.RevokeToken
 
     -- ** androidenterprise.users.setAvailableProductSet
     , module Network.Google.Resource.AndroidEnterprise.Users.SetAvailableProductSet
 
+    -- ** androidenterprise.users.update
+    , module Network.Google.Resource.AndroidEnterprise.Users.Update
+
     -- * Types
 
     -- ** GroupLicense
@@ -284,12 +359,30 @@
     , auiApprovalURL
     , auiKind
 
+    -- ** ManagedProperty
+    , ManagedProperty
+    , managedProperty
+    , mpValueStringArray
+    , mpValueBool
+    , mpKey
+    , mpValueBundle
+    , mpValueInteger
+    , mpValueBundleArray
+    , mpValueString
+
     -- ** StoreLayoutClustersListResponse
     , StoreLayoutClustersListResponse
     , storeLayoutClustersListResponse
     , slclrCluster
     , slclrKind
 
+    -- ** ManagedConfiguration
+    , ManagedConfiguration
+    , managedConfiguration
+    , mcManagedProperty
+    , mcKind
+    , mcProductId
+
     -- ** StoreCluster
     , StoreCluster
     , storeCluster
@@ -299,6 +392,25 @@
     , scId
     , scProductId
 
+    -- ** AdministratorWebTokenSpec
+    , AdministratorWebTokenSpec
+    , administratorWebTokenSpec
+    , awtsParent
+    , awtsKind
+    , awtsPermission
+
+    -- ** Notification
+    , Notification
+    , notification
+    , nEnterpriseId
+    , nNewPermissionsEvent
+    , nProductApprovalEvent
+    , nProductAvailabilityChangeEvent
+    , nAppUpdateEvent
+    , nInstallFailureEvent
+    , nAppRestrictionsSchemaChangeEvent
+    , nTimestampMillis
+
     -- ** PageInfo
     , PageInfo
     , pageInfo
@@ -312,6 +424,25 @@
     , ppState
     , ppPermissionId
 
+    -- ** NewPermissionsEvent
+    , NewPermissionsEvent
+    , newPermissionsEvent
+    , npeRequestedPermissions
+    , npeApprovedPermissions
+    , npeProductId
+
+    -- ** ProductAvailabilityChangeEvent
+    , ProductAvailabilityChangeEvent
+    , productAvailabilityChangeEvent
+    , paceAvailabilityStatus
+    , paceProductId
+
+    -- ** ProductApprovalEvent
+    , ProductApprovalEvent
+    , productApprovalEvent
+    , paeApproved
+    , paeProductId
+
     -- ** Device
     , Device
     , device
@@ -319,6 +450,14 @@
     , dManagementType
     , dAndroidId
 
+    -- ** ServiceAccountKey
+    , ServiceAccountKey
+    , serviceAccountKey
+    , sakKind
+    , sakData
+    , sakId
+    , sakType
+
     -- ** InstallsListResponse
     , InstallsListResponse
     , installsListResponse
@@ -335,19 +474,39 @@
     , arsrDefaultValue
     , arsrTitle
     , arsrDescription
+    , arsrNestedRestriction
 
+    -- ** Administrator
+    , Administrator
+    , administrator
+    , aEmail
+
     -- ** UsersListResponse
     , UsersListResponse
     , usersListResponse
     , ulrKind
     , ulrUser
 
+    -- ** AuthenticationToken
+    , AuthenticationToken
+    , authenticationToken
+    , atKind
+    , atToken
+
     -- ** AppVersion
     , AppVersion
     , appVersion
     , avVersionCode
     , avVersionString
 
+    -- ** EnterprisesPullNotificationSetRequestMode
+    , EnterprisesPullNotificationSetRequestMode (..)
+
+    -- ** ManagedPropertyBundle
+    , ManagedPropertyBundle
+    , managedPropertyBundle
+    , mpbManagedProperty
+
     -- ** GroupLicensesListResponse
     , GroupLicensesListResponse
     , groupLicensesListResponse
@@ -367,6 +526,7 @@
     , ProductSet
     , productSet
     , psKind
+    , psProductSetBehavior
     , psProductId
 
     -- ** Install
@@ -377,13 +537,28 @@
     , iInstallState
     , iProductId
 
+    -- ** ServiceAccountKeysListResponse
+    , ServiceAccountKeysListResponse
+    , serviceAccountKeysListResponse
+    , saklrServiceAccountKey
+
     -- ** User
     , User
     , user
+    , uAccountIdentifier
     , uKind
+    , uDisplayName
     , uId
     , uPrimaryEmail
+    , uManagementType
+    , uAccountType
 
+    -- ** ManagedConfigurationsForDeviceListResponse
+    , ManagedConfigurationsForDeviceListResponse
+    , managedConfigurationsForDeviceListResponse
+    , mcfdlrKind
+    , mcfdlrManagedConfigurationForDevice
+
     -- ** ProductsGenerateApprovalURLResponse
     , ProductsGenerateApprovalURLResponse
     , productsGenerateApprovalURLResponse
@@ -403,12 +578,31 @@
     , estpnrTopicName
     , estpnrMessageId
 
+    -- ** ServiceAccount
+    , ServiceAccount
+    , serviceAccount
+    , saKind
+    , saKey
+    , saName
+
+    -- ** AppUpdateEvent
+    , AppUpdateEvent
+    , appUpdateEvent
+    , aueProductId
+
     -- ** EnterprisesListResponse
     , EnterprisesListResponse
     , enterprisesListResponse
     , elrKind
     , elrEnterprise
 
+    -- ** NotificationSet
+    , NotificationSet
+    , notificationSet
+    , nsNotificationSetId
+    , nsNotification
+    , nsKind
+
     -- ** AppRestrictionsSchema
     , AppRestrictionsSchema
     , appRestrictionsSchema
@@ -438,16 +632,51 @@
     , Enterprise
     , enterprise
     , eKind
+    , eAdministrator
     , ePrimaryDomain
     , eName
     , eId
 
+    -- ** InstallFailureEvent
+    , InstallFailureEvent
+    , installFailureEvent
+    , ifeFailureReason
+    , ifeFailureDetails
+    , ifeUserId
+    , ifeDeviceId
+    , ifeProductId
+
+    -- ** ManagedConfigurationsForUserListResponse
+    , ManagedConfigurationsForUserListResponse
+    , managedConfigurationsForUserListResponse
+    , mcfulrManagedConfigurationForUser
+    , mcfulrKind
+
     -- ** StoreLayout
     , StoreLayout
     , storeLayout
+    , slStoreLayoutType
     , slKind
     , slHomepageId
 
+    -- ** AppRestrictionsSchemaChangeEvent
+    , AppRestrictionsSchemaChangeEvent
+    , appRestrictionsSchemaChangeEvent
+    , arsceProductId
+
+    -- ** AdministratorWebToken
+    , AdministratorWebToken
+    , administratorWebToken
+    , awtKind
+    , awtToken
+
+    -- ** SignupInfo
+    , SignupInfo
+    , signupInfo
+    , siCompletionToken
+    , siKind
+    , siURL
+
     -- ** Product
     , Product
     , product
@@ -470,6 +699,9 @@
     , entKind
     , entEntitlement
 
+    -- ** EnterprisesGetServiceAccountKeyType
+    , EnterprisesGetServiceAccountKeyType (..)
+
     -- ** ProductPermissions
     , ProductPermissions
     , productPermissions
@@ -529,12 +761,18 @@
 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.AcknowledgeNotificationSet
+import           Network.Google.Resource.AndroidEnterprise.Enterprises.CompleteSignup
+import           Network.Google.Resource.AndroidEnterprise.Enterprises.CreateWebToken
 import           Network.Google.Resource.AndroidEnterprise.Enterprises.Delete
 import           Network.Google.Resource.AndroidEnterprise.Enterprises.Enroll
+import           Network.Google.Resource.AndroidEnterprise.Enterprises.GenerateSignupURL
 import           Network.Google.Resource.AndroidEnterprise.Enterprises.Get
+import           Network.Google.Resource.AndroidEnterprise.Enterprises.GetServiceAccount
 import           Network.Google.Resource.AndroidEnterprise.Enterprises.GetStoreLayout
 import           Network.Google.Resource.AndroidEnterprise.Enterprises.Insert
 import           Network.Google.Resource.AndroidEnterprise.Enterprises.List
+import           Network.Google.Resource.AndroidEnterprise.Enterprises.PullNotificationSet
 import           Network.Google.Resource.AndroidEnterprise.Enterprises.SendTestPushNotification
 import           Network.Google.Resource.AndroidEnterprise.Enterprises.SetAccount
 import           Network.Google.Resource.AndroidEnterprise.Enterprises.SetStoreLayout
@@ -552,6 +790,16 @@
 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.ManagedConfigurationsforDevice.Delete
+import           Network.Google.Resource.AndroidEnterprise.ManagedConfigurationsforDevice.Get
+import           Network.Google.Resource.AndroidEnterprise.ManagedConfigurationsforDevice.List
+import           Network.Google.Resource.AndroidEnterprise.ManagedConfigurationsforDevice.Patch
+import           Network.Google.Resource.AndroidEnterprise.ManagedConfigurationsforDevice.Update
+import           Network.Google.Resource.AndroidEnterprise.ManagedConfigurationsforUser.Delete
+import           Network.Google.Resource.AndroidEnterprise.ManagedConfigurationsforUser.Get
+import           Network.Google.Resource.AndroidEnterprise.ManagedConfigurationsforUser.List
+import           Network.Google.Resource.AndroidEnterprise.ManagedConfigurationsforUser.Patch
+import           Network.Google.Resource.AndroidEnterprise.ManagedConfigurationsforUser.Update
 import           Network.Google.Resource.AndroidEnterprise.Permissions.Get
 import           Network.Google.Resource.AndroidEnterprise.Products.Approve
 import           Network.Google.Resource.AndroidEnterprise.Products.GenerateApprovalURL
@@ -559,7 +807,11 @@
 import           Network.Google.Resource.AndroidEnterprise.Products.GetAppRestrictionsSchema
 import           Network.Google.Resource.AndroidEnterprise.Products.GetPermissions
 import           Network.Google.Resource.AndroidEnterprise.Products.List
+import           Network.Google.Resource.AndroidEnterprise.Products.UnApprove
 import           Network.Google.Resource.AndroidEnterprise.Products.UpdatePermissions
+import           Network.Google.Resource.AndroidEnterprise.ServiceAccountkeys.Delete
+import           Network.Google.Resource.AndroidEnterprise.ServiceAccountkeys.Insert
+import           Network.Google.Resource.AndroidEnterprise.ServiceAccountkeys.List
 import           Network.Google.Resource.AndroidEnterprise.Storelayoutclusters.Delete
 import           Network.Google.Resource.AndroidEnterprise.Storelayoutclusters.Get
 import           Network.Google.Resource.AndroidEnterprise.Storelayoutclusters.Insert
@@ -572,12 +824,17 @@
 import           Network.Google.Resource.AndroidEnterprise.Storelayoutpages.List
 import           Network.Google.Resource.AndroidEnterprise.Storelayoutpages.Patch
 import           Network.Google.Resource.AndroidEnterprise.Storelayoutpages.Update
+import           Network.Google.Resource.AndroidEnterprise.Users.Delete
+import           Network.Google.Resource.AndroidEnterprise.Users.GenerateAuthenticationToken
 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.Insert
 import           Network.Google.Resource.AndroidEnterprise.Users.List
+import           Network.Google.Resource.AndroidEnterprise.Users.Patch
 import           Network.Google.Resource.AndroidEnterprise.Users.RevokeToken
 import           Network.Google.Resource.AndroidEnterprise.Users.SetAvailableProductSet
+import           Network.Google.Resource.AndroidEnterprise.Users.Update
 
 {- $resources
 TODO
@@ -596,12 +853,17 @@
        :<|> CollectionviewersGetResource
        :<|> CollectionviewersDeleteResource
        :<|> CollectionviewersUpdateResource
+       :<|> UsersInsertResource
        :<|> UsersListResource
        :<|> UsersGenerateTokenResource
+       :<|> UsersGenerateAuthenticationTokenResource
+       :<|> UsersPatchResource
        :<|> UsersGetResource
        :<|> UsersSetAvailableProductSetResource
        :<|> UsersRevokeTokenResource
        :<|> UsersGetAvailableProductSetResource
+       :<|> UsersDeleteResource
+       :<|> UsersUpdateResource
        :<|> InstallsListResource
        :<|> InstallsPatchResource
        :<|> InstallsGetResource
@@ -619,16 +881,30 @@
        :<|> CollectionsGetResource
        :<|> CollectionsDeleteResource
        :<|> CollectionsUpdateResource
+       :<|> ServiceAccountkeysInsertResource
+       :<|> ServiceAccountkeysListResource
+       :<|> ServiceAccountkeysDeleteResource
+       :<|> EnterprisesCompleteSignupResource
+       :<|> EnterprisesCreateWebTokenResource
        :<|> EnterprisesInsertResource
+       :<|> EnterprisesGetServiceAccountResource
        :<|> EnterprisesListResource
        :<|> EnterprisesUnenrollResource
        :<|> EnterprisesGetStoreLayoutResource
        :<|> EnterprisesSetAccountResource
        :<|> EnterprisesEnrollResource
        :<|> EnterprisesGetResource
+       :<|> EnterprisesGenerateSignupURLResource
        :<|> EnterprisesSendTestPushNotificationResource
        :<|> EnterprisesSetStoreLayoutResource
+       :<|> EnterprisesAcknowledgeNotificationSetResource
+       :<|> EnterprisesPullNotificationSetResource
        :<|> EnterprisesDeleteResource
+       :<|> ManagedConfigurationsforUserListResource
+       :<|> ManagedConfigurationsforUserPatchResource
+       :<|> ManagedConfigurationsforUserGetResource
+       :<|> ManagedConfigurationsforUserDeleteResource
+       :<|> ManagedConfigurationsforUserUpdateResource
        :<|> GrouplicensesListResource
        :<|> GrouplicensesGetResource
        :<|> EntitlementsListResource
@@ -636,11 +912,17 @@
        :<|> EntitlementsGetResource
        :<|> EntitlementsDeleteResource
        :<|> EntitlementsUpdateResource
+       :<|> ManagedConfigurationsforDeviceListResource
+       :<|> ManagedConfigurationsforDevicePatchResource
+       :<|> ManagedConfigurationsforDeviceGetResource
+       :<|> ManagedConfigurationsforDeviceDeleteResource
+       :<|> ManagedConfigurationsforDeviceUpdateResource
        :<|> PermissionsGetResource
        :<|> ProductsGenerateApprovalURLResource
        :<|> ProductsListResource
        :<|> ProductsGetResource
        :<|> ProductsGetAppRestrictionsSchemaResource
+       :<|> ProductsUnApproveResource
        :<|> ProductsApproveResource
        :<|> ProductsGetPermissionsResource
        :<|> ProductsUpdatePermissionsResource
diff --git a/gen/Network/Google/AndroidEnterprise/Types.hs b/gen/Network/Google/AndroidEnterprise/Types.hs
--- a/gen/Network/Google/AndroidEnterprise/Types.hs
+++ b/gen/Network/Google/AndroidEnterprise/Types.hs
@@ -83,12 +83,30 @@
     , auiApprovalURL
     , auiKind
 
+    -- * ManagedProperty
+    , ManagedProperty
+    , managedProperty
+    , mpValueStringArray
+    , mpValueBool
+    , mpKey
+    , mpValueBundle
+    , mpValueInteger
+    , mpValueBundleArray
+    , mpValueString
+
     -- * StoreLayoutClustersListResponse
     , StoreLayoutClustersListResponse
     , storeLayoutClustersListResponse
     , slclrCluster
     , slclrKind
 
+    -- * ManagedConfiguration
+    , ManagedConfiguration
+    , managedConfiguration
+    , mcManagedProperty
+    , mcKind
+    , mcProductId
+
     -- * StoreCluster
     , StoreCluster
     , storeCluster
@@ -98,6 +116,25 @@
     , scId
     , scProductId
 
+    -- * AdministratorWebTokenSpec
+    , AdministratorWebTokenSpec
+    , administratorWebTokenSpec
+    , awtsParent
+    , awtsKind
+    , awtsPermission
+
+    -- * Notification
+    , Notification
+    , notification
+    , nEnterpriseId
+    , nNewPermissionsEvent
+    , nProductApprovalEvent
+    , nProductAvailabilityChangeEvent
+    , nAppUpdateEvent
+    , nInstallFailureEvent
+    , nAppRestrictionsSchemaChangeEvent
+    , nTimestampMillis
+
     -- * PageInfo
     , PageInfo
     , pageInfo
@@ -111,6 +148,25 @@
     , ppState
     , ppPermissionId
 
+    -- * NewPermissionsEvent
+    , NewPermissionsEvent
+    , newPermissionsEvent
+    , npeRequestedPermissions
+    , npeApprovedPermissions
+    , npeProductId
+
+    -- * ProductAvailabilityChangeEvent
+    , ProductAvailabilityChangeEvent
+    , productAvailabilityChangeEvent
+    , paceAvailabilityStatus
+    , paceProductId
+
+    -- * ProductApprovalEvent
+    , ProductApprovalEvent
+    , productApprovalEvent
+    , paeApproved
+    , paeProductId
+
     -- * Device
     , Device
     , device
@@ -118,6 +174,14 @@
     , dManagementType
     , dAndroidId
 
+    -- * ServiceAccountKey
+    , ServiceAccountKey
+    , serviceAccountKey
+    , sakKind
+    , sakData
+    , sakId
+    , sakType
+
     -- * InstallsListResponse
     , InstallsListResponse
     , installsListResponse
@@ -134,19 +198,39 @@
     , arsrDefaultValue
     , arsrTitle
     , arsrDescription
+    , arsrNestedRestriction
 
+    -- * Administrator
+    , Administrator
+    , administrator
+    , aEmail
+
     -- * UsersListResponse
     , UsersListResponse
     , usersListResponse
     , ulrKind
     , ulrUser
 
+    -- * AuthenticationToken
+    , AuthenticationToken
+    , authenticationToken
+    , atKind
+    , atToken
+
     -- * AppVersion
     , AppVersion
     , appVersion
     , avVersionCode
     , avVersionString
 
+    -- * EnterprisesPullNotificationSetRequestMode
+    , EnterprisesPullNotificationSetRequestMode (..)
+
+    -- * ManagedPropertyBundle
+    , ManagedPropertyBundle
+    , managedPropertyBundle
+    , mpbManagedProperty
+
     -- * GroupLicensesListResponse
     , GroupLicensesListResponse
     , groupLicensesListResponse
@@ -166,6 +250,7 @@
     , ProductSet
     , productSet
     , psKind
+    , psProductSetBehavior
     , psProductId
 
     -- * Install
@@ -176,13 +261,28 @@
     , iInstallState
     , iProductId
 
+    -- * ServiceAccountKeysListResponse
+    , ServiceAccountKeysListResponse
+    , serviceAccountKeysListResponse
+    , saklrServiceAccountKey
+
     -- * User
     , User
     , user
+    , uAccountIdentifier
     , uKind
+    , uDisplayName
     , uId
     , uPrimaryEmail
+    , uManagementType
+    , uAccountType
 
+    -- * ManagedConfigurationsForDeviceListResponse
+    , ManagedConfigurationsForDeviceListResponse
+    , managedConfigurationsForDeviceListResponse
+    , mcfdlrKind
+    , mcfdlrManagedConfigurationForDevice
+
     -- * ProductsGenerateApprovalURLResponse
     , ProductsGenerateApprovalURLResponse
     , productsGenerateApprovalURLResponse
@@ -202,12 +302,31 @@
     , estpnrTopicName
     , estpnrMessageId
 
+    -- * ServiceAccount
+    , ServiceAccount
+    , serviceAccount
+    , saKind
+    , saKey
+    , saName
+
+    -- * AppUpdateEvent
+    , AppUpdateEvent
+    , appUpdateEvent
+    , aueProductId
+
     -- * EnterprisesListResponse
     , EnterprisesListResponse
     , enterprisesListResponse
     , elrKind
     , elrEnterprise
 
+    -- * NotificationSet
+    , NotificationSet
+    , notificationSet
+    , nsNotificationSetId
+    , nsNotification
+    , nsKind
+
     -- * AppRestrictionsSchema
     , AppRestrictionsSchema
     , appRestrictionsSchema
@@ -237,16 +356,51 @@
     , Enterprise
     , enterprise
     , eKind
+    , eAdministrator
     , ePrimaryDomain
     , eName
     , eId
 
+    -- * InstallFailureEvent
+    , InstallFailureEvent
+    , installFailureEvent
+    , ifeFailureReason
+    , ifeFailureDetails
+    , ifeUserId
+    , ifeDeviceId
+    , ifeProductId
+
+    -- * ManagedConfigurationsForUserListResponse
+    , ManagedConfigurationsForUserListResponse
+    , managedConfigurationsForUserListResponse
+    , mcfulrManagedConfigurationForUser
+    , mcfulrKind
+
     -- * StoreLayout
     , StoreLayout
     , storeLayout
+    , slStoreLayoutType
     , slKind
     , slHomepageId
 
+    -- * AppRestrictionsSchemaChangeEvent
+    , AppRestrictionsSchemaChangeEvent
+    , appRestrictionsSchemaChangeEvent
+    , arsceProductId
+
+    -- * AdministratorWebToken
+    , AdministratorWebToken
+    , administratorWebToken
+    , awtKind
+    , awtToken
+
+    -- * SignupInfo
+    , SignupInfo
+    , signupInfo
+    , siCompletionToken
+    , siKind
+    , siURL
+
     -- * Product
     , Product
     , product
@@ -268,6 +422,9 @@
     , entitlementsListResponse
     , entKind
     , entEntitlement
+
+    -- * EnterprisesGetServiceAccountKeyType
+    , EnterprisesGetServiceAccountKeyType (..)
 
     -- * ProductPermissions
     , ProductPermissions
diff --git a/gen/Network/Google/AndroidEnterprise/Types/Product.hs b/gen/Network/Google/AndroidEnterprise/Types/Product.hs
--- a/gen/Network/Google/AndroidEnterprise/Types/Product.hs
+++ b/gen/Network/Google/AndroidEnterprise/Types/Product.hs
@@ -600,1652 +600,3088 @@
                  [("approvalUrl" .=) <$> _auiApprovalURL,
                   Just ("kind" .= _auiKind)])
 
--- | The store page resources for the enterprise.
---
--- /See:/ 'storeLayoutClustersListResponse' smart constructor.
-data StoreLayoutClustersListResponse = StoreLayoutClustersListResponse'
-    { _slclrCluster :: !(Maybe [StoreCluster])
-    , _slclrKind    :: !Text
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'StoreLayoutClustersListResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'slclrCluster'
---
--- * 'slclrKind'
-storeLayoutClustersListResponse
-    :: StoreLayoutClustersListResponse
-storeLayoutClustersListResponse =
-    StoreLayoutClustersListResponse'
-    { _slclrCluster = Nothing
-    , _slclrKind = "androidenterprise#storeLayoutClustersListResponse"
-    }
-
--- | A store cluster of an enterprise.
-slclrCluster :: Lens' StoreLayoutClustersListResponse [StoreCluster]
-slclrCluster
-  = lens _slclrCluster (\ s a -> s{_slclrCluster = a})
-      . _Default
-      . _Coerce
-
--- | Identifies what kind of resource this is. Value: the fixed string
--- \"androidenterprise#storeLayoutClustersListResponse\".
-slclrKind :: Lens' StoreLayoutClustersListResponse Text
-slclrKind
-  = lens _slclrKind (\ s a -> s{_slclrKind = a})
-
-instance FromJSON StoreLayoutClustersListResponse
-         where
-        parseJSON
-          = withObject "StoreLayoutClustersListResponse"
-              (\ o ->
-                 StoreLayoutClustersListResponse' <$>
-                   (o .:? "cluster" .!= mempty) <*>
-                     (o .:? "kind" .!=
-                        "androidenterprise#storeLayoutClustersListResponse"))
-
-instance ToJSON StoreLayoutClustersListResponse where
-        toJSON StoreLayoutClustersListResponse'{..}
-          = object
-              (catMaybes
-                 [("cluster" .=) <$> _slclrCluster,
-                  Just ("kind" .= _slclrKind)])
-
--- | Definition of a Google Play for Work store cluster, a list of products
--- displayed as part of a store page.
---
--- /See:/ 'storeCluster' smart constructor.
-data StoreCluster = StoreCluster'
-    { _scKind        :: !Text
-    , _scName        :: !(Maybe [LocalizedText])
-    , _scOrderInPage :: !(Maybe Text)
-    , _scId          :: !(Maybe Text)
-    , _scProductId   :: !(Maybe [Text])
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'StoreCluster' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'scKind'
---
--- * 'scName'
---
--- * 'scOrderInPage'
---
--- * 'scId'
---
--- * 'scProductId'
-storeCluster
-    :: StoreCluster
-storeCluster =
-    StoreCluster'
-    { _scKind = "androidenterprise#storeCluster"
-    , _scName = Nothing
-    , _scOrderInPage = Nothing
-    , _scId = Nothing
-    , _scProductId = Nothing
-    }
-
--- | Identifies what kind of resource this is. Value: the fixed string
--- \"androidenterprise#storeCluster\".
-scKind :: Lens' StoreCluster Text
-scKind = lens _scKind (\ s a -> s{_scKind = a})
-
--- | Ordered list of localized strings giving the name of this page. The text
--- displayed is the one that best matches the user locale, or the first
--- entry if there is no good match. There needs to be at least one entry.
-scName :: Lens' StoreCluster [LocalizedText]
-scName
-  = lens _scName (\ s a -> s{_scName = a}) . _Default .
-      _Coerce
-
--- | String (US-ASCII only) used to determine order of this cluster within
--- the parent page\'s elements. Page elements are sorted in lexicographic
--- order of this field. Duplicated values are allowed, but ordering between
--- elements with duplicate order is undefined. The value of this field is
--- never visible to a user, it is used solely for the purpose of defining
--- an ordering. Maximum length is 256 characters.
-scOrderInPage :: Lens' StoreCluster (Maybe Text)
-scOrderInPage
-  = lens _scOrderInPage
-      (\ s a -> s{_scOrderInPage = a})
-
--- | Unique ID of this cluster. Assigned by the server. Immutable once
--- assigned.
-scId :: Lens' StoreCluster (Maybe Text)
-scId = lens _scId (\ s a -> s{_scId = a})
-
--- | List of products in the order they are displayed in the cluster. There
--- should not be duplicates within a cluster.
-scProductId :: Lens' StoreCluster [Text]
-scProductId
-  = lens _scProductId (\ s a -> s{_scProductId = a}) .
-      _Default
-      . _Coerce
-
-instance FromJSON StoreCluster where
-        parseJSON
-          = withObject "StoreCluster"
-              (\ o ->
-                 StoreCluster' <$>
-                   (o .:? "kind" .!= "androidenterprise#storeCluster")
-                     <*> (o .:? "name" .!= mempty)
-                     <*> (o .:? "orderInPage")
-                     <*> (o .:? "id")
-                     <*> (o .:? "productId" .!= mempty))
-
-instance ToJSON StoreCluster where
-        toJSON StoreCluster'{..}
-          = object
-              (catMaybes
-                 [Just ("kind" .= _scKind), ("name" .=) <$> _scName,
-                  ("orderInPage" .=) <$> _scOrderInPage,
-                  ("id" .=) <$> _scId,
-                  ("productId" .=) <$> _scProductId])
-
---
--- /See:/ 'pageInfo' smart constructor.
-data PageInfo = PageInfo'
-    { _piResultPerPage :: !(Maybe (Textual Int32))
-    , _piTotalResults  :: !(Maybe (Textual Int32))
-    , _piStartIndex    :: !(Maybe (Textual Int32))
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'PageInfo' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'piResultPerPage'
---
--- * 'piTotalResults'
---
--- * 'piStartIndex'
-pageInfo
-    :: PageInfo
-pageInfo =
-    PageInfo'
-    { _piResultPerPage = Nothing
-    , _piTotalResults = Nothing
-    , _piStartIndex = Nothing
-    }
-
-piResultPerPage :: Lens' PageInfo (Maybe Int32)
-piResultPerPage
-  = lens _piResultPerPage
-      (\ s a -> s{_piResultPerPage = a})
-      . mapping _Coerce
-
-piTotalResults :: Lens' PageInfo (Maybe Int32)
-piTotalResults
-  = lens _piTotalResults
-      (\ s a -> s{_piTotalResults = a})
-      . mapping _Coerce
-
-piStartIndex :: Lens' PageInfo (Maybe Int32)
-piStartIndex
-  = lens _piStartIndex (\ s a -> s{_piStartIndex = a})
-      . mapping _Coerce
-
-instance FromJSON PageInfo where
-        parseJSON
-          = withObject "PageInfo"
-              (\ o ->
-                 PageInfo' <$>
-                   (o .:? "resultPerPage") <*> (o .:? "totalResults")
-                     <*> (o .:? "startIndex"))
-
-instance ToJSON PageInfo where
-        toJSON PageInfo'{..}
-          = object
-              (catMaybes
-                 [("resultPerPage" .=) <$> _piResultPerPage,
-                  ("totalResults" .=) <$> _piTotalResults,
-                  ("startIndex" .=) <$> _piStartIndex])
-
--- | 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 EMM 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 EMM.
--- \"managedDevice\" means that the EMM\'s app is a device owner.
--- \"managedProfile\" means that the EMM\'s app is the profile owner (and
--- there is a separate personal profile which is not managed).
--- \"containerApp\" means that the EMM\'s app is managing the Android for
--- Work container app on the device. ?unmanagedProfile? means that the
--- EMM?s app is managing a managed user on an unmanaged 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 the EMM\'s DPC 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])
-
--- | Definition of a Google Play for Work store page, made of a localized
--- name and links to other pages. A page also contains clusters defined as
--- a subcollection.
---
--- /See:/ 'storePage' smart constructor.
-data StorePage = StorePage'
-    { _spKind :: !Text
-    , _spLink :: !(Maybe [Text])
-    , _spName :: !(Maybe [LocalizedText])
-    , _spId   :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'StorePage' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'spKind'
---
--- * 'spLink'
---
--- * 'spName'
---
--- * 'spId'
-storePage
-    :: StorePage
-storePage =
-    StorePage'
-    { _spKind = "androidenterprise#storePage"
-    , _spLink = Nothing
-    , _spName = Nothing
-    , _spId = Nothing
-    }
-
--- | Identifies what kind of resource this is. Value: the fixed string
--- \"androidenterprise#storePage\".
-spKind :: Lens' StorePage Text
-spKind = lens _spKind (\ s a -> s{_spKind = a})
-
--- | Ordered list of pages a user should be able to reach from this page. The
--- pages must exist, must not be this page, and once a link is created the
--- page linked to cannot be deleted until all links to it are removed. It
--- is recommended that the basic pages are created first, before adding the
--- links between pages. No attempt is made to verify that all pages are
--- reachable from the homepage.
-spLink :: Lens' StorePage [Text]
-spLink
-  = lens _spLink (\ s a -> s{_spLink = a}) . _Default .
-      _Coerce
-
--- | Ordered list of localized strings giving the name of this page. The text
--- displayed is the one that best matches the user locale, or the first
--- entry if there is no good match. There needs to be at least one entry.
-spName :: Lens' StorePage [LocalizedText]
-spName
-  = lens _spName (\ s a -> s{_spName = a}) . _Default .
-      _Coerce
-
--- | Unique ID of this page. Assigned by the server. Immutable once assigned.
-spId :: Lens' StorePage (Maybe Text)
-spId = lens _spId (\ s a -> s{_spId = a})
-
-instance FromJSON StorePage where
-        parseJSON
-          = withObject "StorePage"
-              (\ o ->
-                 StorePage' <$>
-                   (o .:? "kind" .!= "androidenterprise#storePage") <*>
-                     (o .:? "link" .!= mempty)
-                     <*> (o .:? "name" .!= mempty)
-                     <*> (o .:? "id"))
-
-instance ToJSON StorePage where
-        toJSON StorePage'{..}
-          = object
-              (catMaybes
-                 [Just ("kind" .= _spKind), ("link" .=) <$> _spLink,
-                  ("name" .=) <$> _spName, ("id" .=) <$> _spId])
-
---
--- /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 localized string with its locale.
---
--- /See:/ 'localizedText' smart constructor.
-data LocalizedText = LocalizedText'
-    { _ltText   :: !(Maybe Text)
-    , _ltLocale :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'LocalizedText' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'ltText'
---
--- * 'ltLocale'
-localizedText
-    :: LocalizedText
-localizedText =
-    LocalizedText'
-    { _ltText = Nothing
-    , _ltLocale = Nothing
-    }
-
--- | The text localized in the associated locale.
-ltText :: Lens' LocalizedText (Maybe Text)
-ltText = lens _ltText (\ s a -> s{_ltText = a})
-
--- | The BCP47 tag for a locale. (e.g. \"en-US\", \"de\").
-ltLocale :: Lens' LocalizedText (Maybe Text)
-ltLocale = lens _ltLocale (\ s a -> s{_ltLocale = a})
-
-instance FromJSON LocalizedText where
-        parseJSON
-          = withObject "LocalizedText"
-              (\ o ->
-                 LocalizedText' <$>
-                   (o .:? "text") <*> (o .:? "locale"))
-
-instance ToJSON LocalizedText where
-        toJSON LocalizedText'{..}
-          = object
-              (catMaybes
-                 [("text" .=) <$> _ltText,
-                  ("locale" .=) <$> _ltLocale])
-
--- | 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 EMM 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 organization and
--- their EMM. 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 EMM, who then supplies it to
--- the enroll method. Until this is done the EMM will not have any access
--- to the enterprise. After calling enroll the EMM 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
--- EMM 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 EMM\'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])
-
--- | General setting for the Google Play for Work store layout, currently
--- only specifying the page to display the first time the store is opened.
---
--- /See:/ 'storeLayout' smart constructor.
-data StoreLayout = StoreLayout'
-    { _slKind       :: !Text
-    , _slHomepageId :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'StoreLayout' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'slKind'
---
--- * 'slHomepageId'
-storeLayout
-    :: StoreLayout
-storeLayout =
-    StoreLayout'
-    { _slKind = "androidenterprise#storeLayout"
-    , _slHomepageId = Nothing
-    }
-
--- | Identifies what kind of resource this is. Value: the fixed string
--- \"androidenterprise#storeLayout\".
-slKind :: Lens' StoreLayout Text
-slKind = lens _slKind (\ s a -> s{_slKind = a})
-
--- | The ID of the store page to be used as the homepage. The homepage will
--- be used as the first page shown in the Google Play for Work store. If
--- there is no homepage set, an empty store is shown. The homepage can be
--- unset (by not specifying it) to empty the store. If there exists at
--- least one page, this field must be set to the ID of a valid page.
-slHomepageId :: Lens' StoreLayout (Maybe Text)
-slHomepageId
-  = lens _slHomepageId (\ s a -> s{_slHomepageId = a})
-
-instance FromJSON StoreLayout where
-        parseJSON
-          = withObject "StoreLayout"
-              (\ o ->
-                 StoreLayout' <$>
-                   (o .:? "kind" .!= "androidenterprise#storeLayout")
-                     <*> (o .:? "homepageId"))
-
-instance ToJSON StoreLayout where
-        toJSON StoreLayout'{..}
-          = object
-              (catMaybes
-                 [Just ("kind" .= _slKind),
-                  ("homepageId" .=) <$> _slHomepageId])
-
--- | 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 EMM
--- user interface.
---
--- /See:/ 'product' smart constructor.
-data Product = Product'
-    { _pSmallIconURL         :: !(Maybe Text)
-    , _pAuthorName           :: !(Maybe Text)
-    , _pKind                 :: !Text
-    , _pWorkDetailsURL       :: !(Maybe Text)
-    , _pRequiresContainerApp :: !(Maybe Bool)
-    , _pAppVersion           :: !(Maybe [AppVersion])
-    , _pProductPricing       :: !(Maybe Text)
-    , _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:
---
--- * 'pSmallIconURL'
---
--- * 'pAuthorName'
---
--- * 'pKind'
---
--- * 'pWorkDetailsURL'
---
--- * 'pRequiresContainerApp'
---
--- * 'pAppVersion'
---
--- * 'pProductPricing'
---
--- * 'pDistributionChannel'
---
--- * 'pIconURL'
---
--- * 'pTitle'
---
--- * 'pProductId'
---
--- * 'pDetailsURL'
-product
-    :: Product
-product =
-    Product'
-    { _pSmallIconURL = Nothing
-    , _pAuthorName = Nothing
-    , _pKind = "androidenterprise#product"
-    , _pWorkDetailsURL = Nothing
-    , _pRequiresContainerApp = Nothing
-    , _pAppVersion = Nothing
-    , _pProductPricing = Nothing
-    , _pDistributionChannel = Nothing
-    , _pIconURL = Nothing
-    , _pTitle = Nothing
-    , _pProductId = Nothing
-    , _pDetailsURL = Nothing
-    }
-
--- | A link to a smaller image that can be used as an icon for the product.
--- This image is suitable for use at up to 128px x 128px.
-pSmallIconURL :: Lens' Product (Maybe Text)
-pSmallIconURL
-  = lens _pSmallIconURL
-      (\ s a -> s{_pSmallIconURL = a})
-
--- | 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
-
--- | Whether this product is free, free with in-app purchases, or paid.
+-- | A managed property of a managed configuration. The property must match
+-- one of the properties in the app restrictions schema of the product.
+-- Exactly one of the value fields must be populated, and it must match the
+-- property\'s type in the app restrictions schema.
+--
+-- /See:/ 'managedProperty' smart constructor.
+data ManagedProperty = ManagedProperty'
+    { _mpValueStringArray :: !(Maybe [Text])
+    , _mpValueBool        :: !(Maybe Bool)
+    , _mpKey              :: !(Maybe Text)
+    , _mpValueBundle      :: !(Maybe ManagedPropertyBundle)
+    , _mpValueInteger     :: !(Maybe (Textual Int32))
+    , _mpValueBundleArray :: !(Maybe [ManagedPropertyBundle])
+    , _mpValueString      :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ManagedProperty' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'mpValueStringArray'
+--
+-- * 'mpValueBool'
+--
+-- * 'mpKey'
+--
+-- * 'mpValueBundle'
+--
+-- * 'mpValueInteger'
+--
+-- * 'mpValueBundleArray'
+--
+-- * 'mpValueString'
+managedProperty
+    :: ManagedProperty
+managedProperty =
+    ManagedProperty'
+    { _mpValueStringArray = Nothing
+    , _mpValueBool = Nothing
+    , _mpKey = Nothing
+    , _mpValueBundle = Nothing
+    , _mpValueInteger = Nothing
+    , _mpValueBundleArray = Nothing
+    , _mpValueString = Nothing
+    }
+
+-- | The list of string values - this will only be present if type of the
+-- property is multiselect.
+mpValueStringArray :: Lens' ManagedProperty [Text]
+mpValueStringArray
+  = lens _mpValueStringArray
+      (\ s a -> s{_mpValueStringArray = a})
+      . _Default
+      . _Coerce
+
+-- | The boolean value - this will only be present if type of the property is
+-- bool.
+mpValueBool :: Lens' ManagedProperty (Maybe Bool)
+mpValueBool
+  = lens _mpValueBool (\ s a -> s{_mpValueBool = a})
+
+-- | The unique key that identifies the property.
+mpKey :: Lens' ManagedProperty (Maybe Text)
+mpKey = lens _mpKey (\ s a -> s{_mpKey = a})
+
+-- | The bundle of managed properties - this will only be present if type of
+-- the property is bundle.
+mpValueBundle :: Lens' ManagedProperty (Maybe ManagedPropertyBundle)
+mpValueBundle
+  = lens _mpValueBundle
+      (\ s a -> s{_mpValueBundle = a})
+
+-- | The integer value - this will only be present if type of the property is
+-- integer.
+mpValueInteger :: Lens' ManagedProperty (Maybe Int32)
+mpValueInteger
+  = lens _mpValueInteger
+      (\ s a -> s{_mpValueInteger = a})
+      . mapping _Coerce
+
+-- | The list of bundles of properties - this will only be present if type of
+-- the property is bundle_array.
+mpValueBundleArray :: Lens' ManagedProperty [ManagedPropertyBundle]
+mpValueBundleArray
+  = lens _mpValueBundleArray
+      (\ s a -> s{_mpValueBundleArray = a})
+      . _Default
+      . _Coerce
+
+-- | The string value - this will only be present if type of the property is
+-- string, choice or hidden.
+mpValueString :: Lens' ManagedProperty (Maybe Text)
+mpValueString
+  = lens _mpValueString
+      (\ s a -> s{_mpValueString = a})
+
+instance FromJSON ManagedProperty where
+        parseJSON
+          = withObject "ManagedProperty"
+              (\ o ->
+                 ManagedProperty' <$>
+                   (o .:? "valueStringArray" .!= mempty) <*>
+                     (o .:? "valueBool")
+                     <*> (o .:? "key")
+                     <*> (o .:? "valueBundle")
+                     <*> (o .:? "valueInteger")
+                     <*> (o .:? "valueBundleArray" .!= mempty)
+                     <*> (o .:? "valueString"))
+
+instance ToJSON ManagedProperty where
+        toJSON ManagedProperty'{..}
+          = object
+              (catMaybes
+                 [("valueStringArray" .=) <$> _mpValueStringArray,
+                  ("valueBool" .=) <$> _mpValueBool,
+                  ("key" .=) <$> _mpKey,
+                  ("valueBundle" .=) <$> _mpValueBundle,
+                  ("valueInteger" .=) <$> _mpValueInteger,
+                  ("valueBundleArray" .=) <$> _mpValueBundleArray,
+                  ("valueString" .=) <$> _mpValueString])
+
+-- | The store page resources for the enterprise.
+--
+-- /See:/ 'storeLayoutClustersListResponse' smart constructor.
+data StoreLayoutClustersListResponse = StoreLayoutClustersListResponse'
+    { _slclrCluster :: !(Maybe [StoreCluster])
+    , _slclrKind    :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'StoreLayoutClustersListResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'slclrCluster'
+--
+-- * 'slclrKind'
+storeLayoutClustersListResponse
+    :: StoreLayoutClustersListResponse
+storeLayoutClustersListResponse =
+    StoreLayoutClustersListResponse'
+    { _slclrCluster = Nothing
+    , _slclrKind = "androidenterprise#storeLayoutClustersListResponse"
+    }
+
+-- | A store cluster of an enterprise.
+slclrCluster :: Lens' StoreLayoutClustersListResponse [StoreCluster]
+slclrCluster
+  = lens _slclrCluster (\ s a -> s{_slclrCluster = a})
+      . _Default
+      . _Coerce
+
+-- | Identifies what kind of resource this is. Value: the fixed string
+-- \"androidenterprise#storeLayoutClustersListResponse\".
+slclrKind :: Lens' StoreLayoutClustersListResponse Text
+slclrKind
+  = lens _slclrKind (\ s a -> s{_slclrKind = a})
+
+instance FromJSON StoreLayoutClustersListResponse
+         where
+        parseJSON
+          = withObject "StoreLayoutClustersListResponse"
+              (\ o ->
+                 StoreLayoutClustersListResponse' <$>
+                   (o .:? "cluster" .!= mempty) <*>
+                     (o .:? "kind" .!=
+                        "androidenterprise#storeLayoutClustersListResponse"))
+
+instance ToJSON StoreLayoutClustersListResponse where
+        toJSON StoreLayoutClustersListResponse'{..}
+          = object
+              (catMaybes
+                 [("cluster" .=) <$> _slclrCluster,
+                  Just ("kind" .= _slclrKind)])
+
+-- | A managed configuration resource contains the set of managed properties
+-- that have been configured for an Android app. The app\'s developer would
+-- have defined configurable properties in the managed configurations
+-- schema.
+--
+-- /See:/ 'managedConfiguration' smart constructor.
+data ManagedConfiguration = ManagedConfiguration'
+    { _mcManagedProperty :: !(Maybe [ManagedProperty])
+    , _mcKind            :: !Text
+    , _mcProductId       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ManagedConfiguration' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'mcManagedProperty'
+--
+-- * 'mcKind'
+--
+-- * 'mcProductId'
+managedConfiguration
+    :: ManagedConfiguration
+managedConfiguration =
+    ManagedConfiguration'
+    { _mcManagedProperty = Nothing
+    , _mcKind = "androidenterprise#managedConfiguration"
+    , _mcProductId = Nothing
+    }
+
+-- | The set of managed properties for this configuration.
+mcManagedProperty :: Lens' ManagedConfiguration [ManagedProperty]
+mcManagedProperty
+  = lens _mcManagedProperty
+      (\ s a -> s{_mcManagedProperty = a})
+      . _Default
+      . _Coerce
+
+-- | Identifies what kind of resource this is. Value: the fixed string
+-- \"androidenterprise#managedConfiguration\".
+mcKind :: Lens' ManagedConfiguration Text
+mcKind = lens _mcKind (\ s a -> s{_mcKind = a})
+
+-- | The ID of the product that the managed configuration is for, e.g.
+-- \"app:com.google.android.gm\".
+mcProductId :: Lens' ManagedConfiguration (Maybe Text)
+mcProductId
+  = lens _mcProductId (\ s a -> s{_mcProductId = a})
+
+instance FromJSON ManagedConfiguration where
+        parseJSON
+          = withObject "ManagedConfiguration"
+              (\ o ->
+                 ManagedConfiguration' <$>
+                   (o .:? "managedProperty" .!= mempty) <*>
+                     (o .:? "kind" .!=
+                        "androidenterprise#managedConfiguration")
+                     <*> (o .:? "productId"))
+
+instance ToJSON ManagedConfiguration where
+        toJSON ManagedConfiguration'{..}
+          = object
+              (catMaybes
+                 [("managedProperty" .=) <$> _mcManagedProperty,
+                  Just ("kind" .= _mcKind),
+                  ("productId" .=) <$> _mcProductId])
+
+-- | Definition of a Google Play for Work store cluster, a list of products
+-- displayed as part of a store page.
+--
+-- /See:/ 'storeCluster' smart constructor.
+data StoreCluster = StoreCluster'
+    { _scKind        :: !Text
+    , _scName        :: !(Maybe [LocalizedText])
+    , _scOrderInPage :: !(Maybe Text)
+    , _scId          :: !(Maybe Text)
+    , _scProductId   :: !(Maybe [Text])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'StoreCluster' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'scKind'
+--
+-- * 'scName'
+--
+-- * 'scOrderInPage'
+--
+-- * 'scId'
+--
+-- * 'scProductId'
+storeCluster
+    :: StoreCluster
+storeCluster =
+    StoreCluster'
+    { _scKind = "androidenterprise#storeCluster"
+    , _scName = Nothing
+    , _scOrderInPage = Nothing
+    , _scId = Nothing
+    , _scProductId = Nothing
+    }
+
+-- | Identifies what kind of resource this is. Value: the fixed string
+-- \"androidenterprise#storeCluster\".
+scKind :: Lens' StoreCluster Text
+scKind = lens _scKind (\ s a -> s{_scKind = a})
+
+-- | Ordered list of localized strings giving the name of this page. The text
+-- displayed is the one that best matches the user locale, or the first
+-- entry if there is no good match. There needs to be at least one entry.
+scName :: Lens' StoreCluster [LocalizedText]
+scName
+  = lens _scName (\ s a -> s{_scName = a}) . _Default .
+      _Coerce
+
+-- | String (US-ASCII only) used to determine order of this cluster within
+-- the parent page\'s elements. Page elements are sorted in lexicographic
+-- order of this field. Duplicated values are allowed, but ordering between
+-- elements with duplicate order is undefined. The value of this field is
+-- never visible to a user, it is used solely for the purpose of defining
+-- an ordering. Maximum length is 256 characters.
+scOrderInPage :: Lens' StoreCluster (Maybe Text)
+scOrderInPage
+  = lens _scOrderInPage
+      (\ s a -> s{_scOrderInPage = a})
+
+-- | Unique ID of this cluster. Assigned by the server. Immutable once
+-- assigned.
+scId :: Lens' StoreCluster (Maybe Text)
+scId = lens _scId (\ s a -> s{_scId = a})
+
+-- | List of products in the order they are displayed in the cluster. There
+-- should not be duplicates within a cluster.
+scProductId :: Lens' StoreCluster [Text]
+scProductId
+  = lens _scProductId (\ s a -> s{_scProductId = a}) .
+      _Default
+      . _Coerce
+
+instance FromJSON StoreCluster where
+        parseJSON
+          = withObject "StoreCluster"
+              (\ o ->
+                 StoreCluster' <$>
+                   (o .:? "kind" .!= "androidenterprise#storeCluster")
+                     <*> (o .:? "name" .!= mempty)
+                     <*> (o .:? "orderInPage")
+                     <*> (o .:? "id")
+                     <*> (o .:? "productId" .!= mempty))
+
+instance ToJSON StoreCluster where
+        toJSON StoreCluster'{..}
+          = object
+              (catMaybes
+                 [Just ("kind" .= _scKind), ("name" .=) <$> _scName,
+                  ("orderInPage" .=) <$> _scOrderInPage,
+                  ("id" .=) <$> _scId,
+                  ("productId" .=) <$> _scProductId])
+
+-- | Specification for a token used to generate iframes. The token specifies
+-- what data the admin is allowed to modify and the URI the iframe is
+-- allowed to communiate with.
+--
+-- /See:/ 'administratorWebTokenSpec' smart constructor.
+data AdministratorWebTokenSpec = AdministratorWebTokenSpec'
+    { _awtsParent     :: !(Maybe Text)
+    , _awtsKind       :: !Text
+    , _awtsPermission :: !(Maybe [Text])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'AdministratorWebTokenSpec' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'awtsParent'
+--
+-- * 'awtsKind'
+--
+-- * 'awtsPermission'
+administratorWebTokenSpec
+    :: AdministratorWebTokenSpec
+administratorWebTokenSpec =
+    AdministratorWebTokenSpec'
+    { _awtsParent = Nothing
+    , _awtsKind = "androidenterprise#administratorWebTokenSpec"
+    , _awtsPermission = Nothing
+    }
+
+-- | The URI of the parent frame hosting the iframe. To prevent XSS, the
+-- iframe may not be hosted at other URIs. This URI must be https.
+awtsParent :: Lens' AdministratorWebTokenSpec (Maybe Text)
+awtsParent
+  = lens _awtsParent (\ s a -> s{_awtsParent = a})
+
+-- | Identifies what kind of resource this is. Value: the fixed string
+-- \"androidenterprise#administratorWebTokenSpec\".
+awtsKind :: Lens' AdministratorWebTokenSpec Text
+awtsKind = lens _awtsKind (\ s a -> s{_awtsKind = a})
+
+-- | The list of permissions the admin is granted within the iframe. The
+-- admin will only be allowed to view an iframe if they have all of the
+-- permissions associated with it.
+awtsPermission :: Lens' AdministratorWebTokenSpec [Text]
+awtsPermission
+  = lens _awtsPermission
+      (\ s a -> s{_awtsPermission = a})
+      . _Default
+      . _Coerce
+
+instance FromJSON AdministratorWebTokenSpec where
+        parseJSON
+          = withObject "AdministratorWebTokenSpec"
+              (\ o ->
+                 AdministratorWebTokenSpec' <$>
+                   (o .:? "parent") <*>
+                     (o .:? "kind" .!=
+                        "androidenterprise#administratorWebTokenSpec")
+                     <*> (o .:? "permission" .!= mempty))
+
+instance ToJSON AdministratorWebTokenSpec where
+        toJSON AdministratorWebTokenSpec'{..}
+          = object
+              (catMaybes
+                 [("parent" .=) <$> _awtsParent,
+                  Just ("kind" .= _awtsKind),
+                  ("permission" .=) <$> _awtsPermission])
+
+-- | A notification of one event relating to an enterprise.
+--
+-- /See:/ 'notification' smart constructor.
+data Notification = Notification'
+    { _nEnterpriseId                     :: !(Maybe Text)
+    , _nNewPermissionsEvent              :: !(Maybe NewPermissionsEvent)
+    , _nProductApprovalEvent             :: !(Maybe ProductApprovalEvent)
+    , _nProductAvailabilityChangeEvent   :: !(Maybe ProductAvailabilityChangeEvent)
+    , _nAppUpdateEvent                   :: !(Maybe AppUpdateEvent)
+    , _nInstallFailureEvent              :: !(Maybe InstallFailureEvent)
+    , _nAppRestrictionsSchemaChangeEvent :: !(Maybe AppRestrictionsSchemaChangeEvent)
+    , _nTimestampMillis                  :: !(Maybe (Textual Int64))
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Notification' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'nEnterpriseId'
+--
+-- * 'nNewPermissionsEvent'
+--
+-- * 'nProductApprovalEvent'
+--
+-- * 'nProductAvailabilityChangeEvent'
+--
+-- * 'nAppUpdateEvent'
+--
+-- * 'nInstallFailureEvent'
+--
+-- * 'nAppRestrictionsSchemaChangeEvent'
+--
+-- * 'nTimestampMillis'
+notification
+    :: Notification
+notification =
+    Notification'
+    { _nEnterpriseId = Nothing
+    , _nNewPermissionsEvent = Nothing
+    , _nProductApprovalEvent = Nothing
+    , _nProductAvailabilityChangeEvent = Nothing
+    , _nAppUpdateEvent = Nothing
+    , _nInstallFailureEvent = Nothing
+    , _nAppRestrictionsSchemaChangeEvent = Nothing
+    , _nTimestampMillis = Nothing
+    }
+
+-- | The ID of the enterprise for which the notification is sent. This will
+-- always be present.
+nEnterpriseId :: Lens' Notification (Maybe Text)
+nEnterpriseId
+  = lens _nEnterpriseId
+      (\ s a -> s{_nEnterpriseId = a})
+
+-- | Notifications about new app permissions.
+nNewPermissionsEvent :: Lens' Notification (Maybe NewPermissionsEvent)
+nNewPermissionsEvent
+  = lens _nNewPermissionsEvent
+      (\ s a -> s{_nNewPermissionsEvent = a})
+
+-- | Notifications about changes to a product\'s approval status.
+nProductApprovalEvent :: Lens' Notification (Maybe ProductApprovalEvent)
+nProductApprovalEvent
+  = lens _nProductApprovalEvent
+      (\ s a -> s{_nProductApprovalEvent = a})
+
+-- | Notifications about product availability changes.
+nProductAvailabilityChangeEvent :: Lens' Notification (Maybe ProductAvailabilityChangeEvent)
+nProductAvailabilityChangeEvent
+  = lens _nProductAvailabilityChangeEvent
+      (\ s a -> s{_nProductAvailabilityChangeEvent = a})
+
+-- | Notifications about app updates.
+nAppUpdateEvent :: Lens' Notification (Maybe AppUpdateEvent)
+nAppUpdateEvent
+  = lens _nAppUpdateEvent
+      (\ s a -> s{_nAppUpdateEvent = a})
+
+-- | Notifications about an app installation failure.
+nInstallFailureEvent :: Lens' Notification (Maybe InstallFailureEvent)
+nInstallFailureEvent
+  = lens _nInstallFailureEvent
+      (\ s a -> s{_nInstallFailureEvent = a})
+
+-- | Notifications about new app restrictions schema changes.
+nAppRestrictionsSchemaChangeEvent :: Lens' Notification (Maybe AppRestrictionsSchemaChangeEvent)
+nAppRestrictionsSchemaChangeEvent
+  = lens _nAppRestrictionsSchemaChangeEvent
+      (\ s a -> s{_nAppRestrictionsSchemaChangeEvent = a})
+
+-- | The time when the notification was published in milliseconds since
+-- 1970-01-01T00:00:00Z. This will always be present.
+nTimestampMillis :: Lens' Notification (Maybe Int64)
+nTimestampMillis
+  = lens _nTimestampMillis
+      (\ s a -> s{_nTimestampMillis = a})
+      . mapping _Coerce
+
+instance FromJSON Notification where
+        parseJSON
+          = withObject "Notification"
+              (\ o ->
+                 Notification' <$>
+                   (o .:? "enterpriseId") <*>
+                     (o .:? "newPermissionsEvent")
+                     <*> (o .:? "productApprovalEvent")
+                     <*> (o .:? "productAvailabilityChangeEvent")
+                     <*> (o .:? "appUpdateEvent")
+                     <*> (o .:? "installFailureEvent")
+                     <*> (o .:? "appRestrictionsSchemaChangeEvent")
+                     <*> (o .:? "timestampMillis"))
+
+instance ToJSON Notification where
+        toJSON Notification'{..}
+          = object
+              (catMaybes
+                 [("enterpriseId" .=) <$> _nEnterpriseId,
+                  ("newPermissionsEvent" .=) <$> _nNewPermissionsEvent,
+                  ("productApprovalEvent" .=) <$>
+                    _nProductApprovalEvent,
+                  ("productAvailabilityChangeEvent" .=) <$>
+                    _nProductAvailabilityChangeEvent,
+                  ("appUpdateEvent" .=) <$> _nAppUpdateEvent,
+                  ("installFailureEvent" .=) <$> _nInstallFailureEvent,
+                  ("appRestrictionsSchemaChangeEvent" .=) <$>
+                    _nAppRestrictionsSchemaChangeEvent,
+                  ("timestampMillis" .=) <$> _nTimestampMillis])
+
+--
+-- /See:/ 'pageInfo' smart constructor.
+data PageInfo = PageInfo'
+    { _piResultPerPage :: !(Maybe (Textual Int32))
+    , _piTotalResults  :: !(Maybe (Textual Int32))
+    , _piStartIndex    :: !(Maybe (Textual Int32))
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'PageInfo' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'piResultPerPage'
+--
+-- * 'piTotalResults'
+--
+-- * 'piStartIndex'
+pageInfo
+    :: PageInfo
+pageInfo =
+    PageInfo'
+    { _piResultPerPage = Nothing
+    , _piTotalResults = Nothing
+    , _piStartIndex = Nothing
+    }
+
+piResultPerPage :: Lens' PageInfo (Maybe Int32)
+piResultPerPage
+  = lens _piResultPerPage
+      (\ s a -> s{_piResultPerPage = a})
+      . mapping _Coerce
+
+piTotalResults :: Lens' PageInfo (Maybe Int32)
+piTotalResults
+  = lens _piTotalResults
+      (\ s a -> s{_piTotalResults = a})
+      . mapping _Coerce
+
+piStartIndex :: Lens' PageInfo (Maybe Int32)
+piStartIndex
+  = lens _piStartIndex (\ s a -> s{_piStartIndex = a})
+      . mapping _Coerce
+
+instance FromJSON PageInfo where
+        parseJSON
+          = withObject "PageInfo"
+              (\ o ->
+                 PageInfo' <$>
+                   (o .:? "resultPerPage") <*> (o .:? "totalResults")
+                     <*> (o .:? "startIndex"))
+
+instance ToJSON PageInfo where
+        toJSON PageInfo'{..}
+          = object
+              (catMaybes
+                 [("resultPerPage" .=) <$> _piResultPerPage,
+                  ("totalResults" .=) <$> _piTotalResults,
+                  ("startIndex" .=) <$> _piStartIndex])
+
+-- | 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])
+
+-- | An event generated when new permissions are added to an app.
+--
+-- /See:/ 'newPermissionsEvent' smart constructor.
+data NewPermissionsEvent = NewPermissionsEvent'
+    { _npeRequestedPermissions :: !(Maybe [Text])
+    , _npeApprovedPermissions  :: !(Maybe [Text])
+    , _npeProductId            :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'NewPermissionsEvent' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'npeRequestedPermissions'
+--
+-- * 'npeApprovedPermissions'
+--
+-- * 'npeProductId'
+newPermissionsEvent
+    :: NewPermissionsEvent
+newPermissionsEvent =
+    NewPermissionsEvent'
+    { _npeRequestedPermissions = Nothing
+    , _npeApprovedPermissions = Nothing
+    , _npeProductId = Nothing
+    }
+
+-- | The set of permissions that the app is currently requesting. Use
+-- Permissions.Get on the EMM API to retrieve details about these
+-- permissions.
+npeRequestedPermissions :: Lens' NewPermissionsEvent [Text]
+npeRequestedPermissions
+  = lens _npeRequestedPermissions
+      (\ s a -> s{_npeRequestedPermissions = a})
+      . _Default
+      . _Coerce
+
+-- | The set of permissions that the enterprise admin has already approved
+-- for this application. Use Permissions.Get on the EMM API to retrieve
+-- details about these permissions.
+npeApprovedPermissions :: Lens' NewPermissionsEvent [Text]
+npeApprovedPermissions
+  = lens _npeApprovedPermissions
+      (\ s a -> s{_npeApprovedPermissions = a})
+      . _Default
+      . _Coerce
+
+-- | The id of the product (e.g. \"app:com.google.android.gm\") for which new
+-- permissions were added. This field will always be present.
+npeProductId :: Lens' NewPermissionsEvent (Maybe Text)
+npeProductId
+  = lens _npeProductId (\ s a -> s{_npeProductId = a})
+
+instance FromJSON NewPermissionsEvent where
+        parseJSON
+          = withObject "NewPermissionsEvent"
+              (\ o ->
+                 NewPermissionsEvent' <$>
+                   (o .:? "requestedPermissions" .!= mempty) <*>
+                     (o .:? "approvedPermissions" .!= mempty)
+                     <*> (o .:? "productId"))
+
+instance ToJSON NewPermissionsEvent where
+        toJSON NewPermissionsEvent'{..}
+          = object
+              (catMaybes
+                 [("requestedPermissions" .=) <$>
+                    _npeRequestedPermissions,
+                  ("approvedPermissions" .=) <$>
+                    _npeApprovedPermissions,
+                  ("productId" .=) <$> _npeProductId])
+
+-- | An event generated whenever a product\'s availability changes.
+--
+-- /See:/ 'productAvailabilityChangeEvent' smart constructor.
+data ProductAvailabilityChangeEvent = ProductAvailabilityChangeEvent'
+    { _paceAvailabilityStatus :: !(Maybe Text)
+    , _paceProductId          :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ProductAvailabilityChangeEvent' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'paceAvailabilityStatus'
+--
+-- * 'paceProductId'
+productAvailabilityChangeEvent
+    :: ProductAvailabilityChangeEvent
+productAvailabilityChangeEvent =
+    ProductAvailabilityChangeEvent'
+    { _paceAvailabilityStatus = Nothing
+    , _paceProductId = Nothing
+    }
+
+-- | The new state of the product. This field will always be present.
+paceAvailabilityStatus :: Lens' ProductAvailabilityChangeEvent (Maybe Text)
+paceAvailabilityStatus
+  = lens _paceAvailabilityStatus
+      (\ s a -> s{_paceAvailabilityStatus = a})
+
+-- | The id of the product (e.g. \"app:com.google.android.gm\") for which the
+-- product availability changed. This field will always be present.
+paceProductId :: Lens' ProductAvailabilityChangeEvent (Maybe Text)
+paceProductId
+  = lens _paceProductId
+      (\ s a -> s{_paceProductId = a})
+
+instance FromJSON ProductAvailabilityChangeEvent
+         where
+        parseJSON
+          = withObject "ProductAvailabilityChangeEvent"
+              (\ o ->
+                 ProductAvailabilityChangeEvent' <$>
+                   (o .:? "availabilityStatus") <*> (o .:? "productId"))
+
+instance ToJSON ProductAvailabilityChangeEvent where
+        toJSON ProductAvailabilityChangeEvent'{..}
+          = object
+              (catMaybes
+                 [("availabilityStatus" .=) <$>
+                    _paceAvailabilityStatus,
+                  ("productId" .=) <$> _paceProductId])
+
+-- | An event generated when a product\'s approval status is changed.
+--
+-- /See:/ 'productApprovalEvent' smart constructor.
+data ProductApprovalEvent = ProductApprovalEvent'
+    { _paeApproved  :: !(Maybe Text)
+    , _paeProductId :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ProductApprovalEvent' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'paeApproved'
+--
+-- * 'paeProductId'
+productApprovalEvent
+    :: ProductApprovalEvent
+productApprovalEvent =
+    ProductApprovalEvent'
+    { _paeApproved = Nothing
+    , _paeProductId = Nothing
+    }
+
+-- | Whether the product was approved or unapproved. This field will always
+-- be present.
+paeApproved :: Lens' ProductApprovalEvent (Maybe Text)
+paeApproved
+  = lens _paeApproved (\ s a -> s{_paeApproved = a})
+
+-- | The id of the product (e.g. \"app:com.google.android.gm\") for which the
+-- approval status has changed. This field will always be present.
+paeProductId :: Lens' ProductApprovalEvent (Maybe Text)
+paeProductId
+  = lens _paeProductId (\ s a -> s{_paeProductId = a})
+
+instance FromJSON ProductApprovalEvent where
+        parseJSON
+          = withObject "ProductApprovalEvent"
+              (\ o ->
+                 ProductApprovalEvent' <$>
+                   (o .:? "approved") <*> (o .:? "productId"))
+
+instance ToJSON ProductApprovalEvent where
+        toJSON ProductApprovalEvent'{..}
+          = object
+              (catMaybes
+                 [("approved" .=) <$> _paeApproved,
+                  ("productId" .=) <$> _paeProductId])
+
+-- | A device resource represents a mobile device managed by the EMM 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})
+
+-- | Identifies the extent to which the device is controlled by an Android
+-- for Work EMM in various deployment configurations. Possible values
+-- include: - \"managedDevice\", a device that has the EMM\'s device policy
+-- controller (DPC) as the device owner, - \"managedProfile\", a device
+-- that has a work profile managed by the DPC (DPC is profile owner) in
+-- addition to a separate, personal profile that is unavailable to the DPC,
+-- - \"containerApp\", a device running the Android for Work App. The
+-- Android for Work App is managed by the DPC, - \"unmanagedProfile\", a
+-- device that has been allowed (by the domain\'s admin, using the Admin
+-- Console to enable the privilege) to use Android for Work apps or Google
+-- Apps for Work, but the profile is itself not owned by a DPC.
+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])
+
+-- | Credentials that can be used to authenticate as a service account.
+--
+-- /See:/ 'serviceAccountKey' smart constructor.
+data ServiceAccountKey = ServiceAccountKey'
+    { _sakKind :: !Text
+    , _sakData :: !(Maybe Text)
+    , _sakId   :: !(Maybe Text)
+    , _sakType :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ServiceAccountKey' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'sakKind'
+--
+-- * 'sakData'
+--
+-- * 'sakId'
+--
+-- * 'sakType'
+serviceAccountKey
+    :: ServiceAccountKey
+serviceAccountKey =
+    ServiceAccountKey'
+    { _sakKind = "androidenterprise#serviceAccountKey"
+    , _sakData = Nothing
+    , _sakId = Nothing
+    , _sakType = Nothing
+    }
+
+-- | Identifies what kind of resource this is. Value: the fixed string
+-- \"androidenterprise#serviceAccountKey\".
+sakKind :: Lens' ServiceAccountKey Text
+sakKind = lens _sakKind (\ s a -> s{_sakKind = a})
+
+-- | The body of the private key credentials file, in string format. This is
+-- only populated when the ServiceAccountKey is created, and is not stored
+-- by Google.
+sakData :: Lens' ServiceAccountKey (Maybe Text)
+sakData = lens _sakData (\ s a -> s{_sakData = a})
+
+-- | An opaque, unique identifier for this ServiceAccountKey. Assigned by the
+-- server.
+sakId :: Lens' ServiceAccountKey (Maybe Text)
+sakId = lens _sakId (\ s a -> s{_sakId = a})
+
+-- | The file format of the generated key data.
+sakType :: Lens' ServiceAccountKey (Maybe Text)
+sakType = lens _sakType (\ s a -> s{_sakType = a})
+
+instance FromJSON ServiceAccountKey where
+        parseJSON
+          = withObject "ServiceAccountKey"
+              (\ o ->
+                 ServiceAccountKey' <$>
+                   (o .:? "kind" .!=
+                      "androidenterprise#serviceAccountKey")
+                     <*> (o .:? "data")
+                     <*> (o .:? "id")
+                     <*> (o .:? "type"))
+
+instance ToJSON ServiceAccountKey where
+        toJSON ServiceAccountKey'{..}
+          = object
+              (catMaybes
+                 [Just ("kind" .= _sakKind), ("data" .=) <$> _sakData,
+                  ("id" .=) <$> _sakId, ("type" .=) <$> _sakType])
+
+-- | 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)
+    , _arsrNestedRestriction :: !(Maybe [AppRestrictionsSchemaRestriction])
+    } 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'
+--
+-- * 'arsrNestedRestriction'
+appRestrictionsSchemaRestriction
+    :: AppRestrictionsSchemaRestriction
+appRestrictionsSchemaRestriction =
+    AppRestrictionsSchemaRestriction'
+    { _arsrRestrictionType = Nothing
+    , _arsrEntry = Nothing
+    , _arsrKey = Nothing
+    , _arsrEntryValue = Nothing
+    , _arsrDefaultValue = Nothing
+    , _arsrTitle = Nothing
+    , _arsrDescription = Nothing
+    , _arsrNestedRestriction = 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. These values should be used in the
+-- configuration, either as a single string value for a choice restriction
+-- or in a stringArray for a multiselect restriction.
+arsrEntryValue :: Lens' AppRestrictionsSchemaRestriction [Text]
+arsrEntryValue
+  = lens _arsrEntryValue
+      (\ s a -> s{_arsrEntryValue = a})
+      . _Default
+      . _Coerce
+
+-- | The default value of the restriction. bundle and bundleArray
+-- restrictions never have a default value.
+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})
+
+-- | For bundle or bundleArray restrictions, the list of nested restrictions.
+-- A bundle restriction is always nested within a bundleArray restriction,
+-- and a bundleArray restriction is at most two levels deep.
+arsrNestedRestriction :: Lens' AppRestrictionsSchemaRestriction [AppRestrictionsSchemaRestriction]
+arsrNestedRestriction
+  = lens _arsrNestedRestriction
+      (\ s a -> s{_arsrNestedRestriction = a})
+      . _Default
+      . _Coerce
+
+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")
+                     <*> (o .:? "nestedRestriction" .!= mempty))
+
+instance ToJSON AppRestrictionsSchemaRestriction
+         where
+        toJSON AppRestrictionsSchemaRestriction'{..}
+          = object
+              (catMaybes
+                 [("restrictionType" .=) <$> _arsrRestrictionType,
+                  ("entry" .=) <$> _arsrEntry, ("key" .=) <$> _arsrKey,
+                  ("entryValue" .=) <$> _arsrEntryValue,
+                  ("defaultValue" .=) <$> _arsrDefaultValue,
+                  ("title" .=) <$> _arsrTitle,
+                  ("description" .=) <$> _arsrDescription,
+                  ("nestedRestriction" .=) <$> _arsrNestedRestriction])
+
+-- | This represents an enterprise administrator who can manage the
+-- enterprise in the Google Play for Work Store.
+--
+-- /See:/ 'administrator' smart constructor.
+newtype Administrator = Administrator'
+    { _aEmail :: Maybe Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Administrator' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'aEmail'
+administrator
+    :: Administrator
+administrator =
+    Administrator'
+    { _aEmail = Nothing
+    }
+
+-- | The administrator\'s email address.
+aEmail :: Lens' Administrator (Maybe Text)
+aEmail = lens _aEmail (\ s a -> s{_aEmail = a})
+
+instance FromJSON Administrator where
+        parseJSON
+          = withObject "Administrator"
+              (\ o -> Administrator' <$> (o .:? "email"))
+
+instance ToJSON Administrator where
+        toJSON Administrator'{..}
+          = object (catMaybes [("email" .=) <$> _aEmail])
+
+-- | 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])
+
+-- | An AuthenticationToken is used by the EMM\'s device policy client on a
+-- device to provision the given EMM-managed user on that device.
+--
+-- /See:/ 'authenticationToken' smart constructor.
+data AuthenticationToken = AuthenticationToken'
+    { _atKind  :: !Text
+    , _atToken :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'AuthenticationToken' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'atKind'
+--
+-- * 'atToken'
+authenticationToken
+    :: AuthenticationToken
+authenticationToken =
+    AuthenticationToken'
+    { _atKind = "androidenterprise#authenticationToken"
+    , _atToken = Nothing
+    }
+
+-- | Identifies what kind of resource this is. Value: the fixed string
+-- \"androidenterprise#authenticationToken\".
+atKind :: Lens' AuthenticationToken Text
+atKind = lens _atKind (\ s a -> s{_atKind = a})
+
+-- | The authentication token to be passed to the device policy client on the
+-- device where it can be used to provision the account for which this
+-- token was generated.
+atToken :: Lens' AuthenticationToken (Maybe Text)
+atToken = lens _atToken (\ s a -> s{_atToken = a})
+
+instance FromJSON AuthenticationToken where
+        parseJSON
+          = withObject "AuthenticationToken"
+              (\ o ->
+                 AuthenticationToken' <$>
+                   (o .:? "kind" .!=
+                      "androidenterprise#authenticationToken")
+                     <*> (o .:? "token"))
+
+instance ToJSON AuthenticationToken where
+        toJSON AuthenticationToken'{..}
+          = object
+              (catMaybes
+                 [Just ("kind" .= _atKind),
+                  ("token" .=) <$> _atToken])
+
+-- | 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])
+
+-- | A bundle of managed properties.
+--
+-- /See:/ 'managedPropertyBundle' smart constructor.
+newtype ManagedPropertyBundle = ManagedPropertyBundle'
+    { _mpbManagedProperty :: Maybe [ManagedProperty]
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ManagedPropertyBundle' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'mpbManagedProperty'
+managedPropertyBundle
+    :: ManagedPropertyBundle
+managedPropertyBundle =
+    ManagedPropertyBundle'
+    { _mpbManagedProperty = Nothing
+    }
+
+-- | The list of managed properties.
+mpbManagedProperty :: Lens' ManagedPropertyBundle [ManagedProperty]
+mpbManagedProperty
+  = lens _mpbManagedProperty
+      (\ s a -> s{_mpbManagedProperty = a})
+      . _Default
+      . _Coerce
+
+instance FromJSON ManagedPropertyBundle where
+        parseJSON
+          = withObject "ManagedPropertyBundle"
+              (\ o ->
+                 ManagedPropertyBundle' <$>
+                   (o .:? "managedProperty" .!= mempty))
+
+instance ToJSON ManagedPropertyBundle where
+        toJSON ManagedPropertyBundle'{..}
+          = object
+              (catMaybes
+                 [("managedProperty" .=) <$> _mpbManagedProperty])
+
+-- | 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
+    , _psProductSetBehavior :: !(Maybe 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'
+--
+-- * 'psProductSetBehavior'
+--
+-- * 'psProductId'
+productSet
+    :: ProductSet
+productSet =
+    ProductSet'
+    { _psKind = "androidenterprise#productSet"
+    , _psProductSetBehavior = Nothing
+    , _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 interpretation of this product set. \"unknown\" should never be sent
+-- and ignored if received. \"whitelist\" means that this product set
+-- constitutes a whitelist. \"includeAll\" means that all products are
+-- accessible (the value of the productId field is therefore ignored). If a
+-- value is not supplied, it is interpreted to be \"whitelist\" for
+-- backwards compatibility.
+psProductSetBehavior :: Lens' ProductSet (Maybe Text)
+psProductSetBehavior
+  = lens _psProductSetBehavior
+      (\ s a -> s{_psProductSetBehavior = 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 .:? "productSetBehavior")
+                     <*> (o .:? "productId" .!= mempty))
+
+instance ToJSON ProductSet where
+        toJSON ProductSet'{..}
+          = object
+              (catMaybes
+                 [Just ("kind" .= _psKind),
+                  ("productSetBehavior" .=) <$> _psProductSetBehavior,
+                  ("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])
+
+--
+-- /See:/ 'serviceAccountKeysListResponse' smart constructor.
+newtype ServiceAccountKeysListResponse = ServiceAccountKeysListResponse'
+    { _saklrServiceAccountKey :: Maybe [ServiceAccountKey]
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ServiceAccountKeysListResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'saklrServiceAccountKey'
+serviceAccountKeysListResponse
+    :: ServiceAccountKeysListResponse
+serviceAccountKeysListResponse =
+    ServiceAccountKeysListResponse'
+    { _saklrServiceAccountKey = Nothing
+    }
+
+-- | The service account credentials.
+saklrServiceAccountKey :: Lens' ServiceAccountKeysListResponse [ServiceAccountKey]
+saklrServiceAccountKey
+  = lens _saklrServiceAccountKey
+      (\ s a -> s{_saklrServiceAccountKey = a})
+      . _Default
+      . _Coerce
+
+instance FromJSON ServiceAccountKeysListResponse
+         where
+        parseJSON
+          = withObject "ServiceAccountKeysListResponse"
+              (\ o ->
+                 ServiceAccountKeysListResponse' <$>
+                   (o .:? "serviceAccountKey" .!= mempty))
+
+instance ToJSON ServiceAccountKeysListResponse where
+        toJSON ServiceAccountKeysListResponse'{..}
+          = object
+              (catMaybes
+                 [("serviceAccountKey" .=) <$>
+                    _saklrServiceAccountKey])
+
+-- | A Users resource represents an account associated with an enterprise.
+-- The account may be specific to a device or to an individual user (who
+-- can then use the account across multiple devices). The account may
+-- provide access to Google Play for Work only, or to other Google
+-- services, depending on the identity model: - Google managed domain
+-- identity model requires synchronization to Google account sources (via
+-- primaryEmail). - Android for Work Accounts identity model provides a
+-- dynamic means for enterprises to create user or device accounts as
+-- needed. These accounts provide access to Google Play for Work only.
+--
+-- /See:/ 'user' smart constructor.
+data User = User'
+    { _uAccountIdentifier :: !(Maybe Text)
+    , _uKind              :: !Text
+    , _uDisplayName       :: !(Maybe Text)
+    , _uId                :: !(Maybe Text)
+    , _uPrimaryEmail      :: !(Maybe Text)
+    , _uManagementType    :: !(Maybe Text)
+    , _uAccountType       :: !(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:
+--
+-- * 'uAccountIdentifier'
+--
+-- * 'uKind'
+--
+-- * 'uDisplayName'
+--
+-- * 'uId'
+--
+-- * 'uPrimaryEmail'
+--
+-- * 'uManagementType'
+--
+-- * 'uAccountType'
+user
+    :: User
+user =
+    User'
+    { _uAccountIdentifier = Nothing
+    , _uKind = "androidenterprise#user"
+    , _uDisplayName = Nothing
+    , _uId = Nothing
+    , _uPrimaryEmail = Nothing
+    , _uManagementType = Nothing
+    , _uAccountType = Nothing
+    }
+
+-- | A unique identifier you create for this user, such as \"user342\" or
+-- \"asset#44418\". Do not use personally identifiable information (PII)
+-- for this property. Must always be set for EMM-managed users. Not set for
+-- Google-managed users.
+uAccountIdentifier :: Lens' User (Maybe Text)
+uAccountIdentifier
+  = lens _uAccountIdentifier
+      (\ s a -> s{_uAccountIdentifier = a})
+
+-- | 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 name that will appear in user interfaces. Setting this property is
+-- optional when creating EMM-managed users. If you do set this property,
+-- use something generic about the organization (such as \"Example, Inc.\")
+-- or your name (as EMM). Not used for Google-managed user accounts.
+uDisplayName :: Lens' User (Maybe Text)
+uDisplayName
+  = lens _uDisplayName (\ s a -> s{_uDisplayName = 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 address, for example, \"jsmith\'example.com\".
+-- Will always be set for Google managed users and not set for EMM managed
+-- users.
+uPrimaryEmail :: Lens' User (Maybe Text)
+uPrimaryEmail
+  = lens _uPrimaryEmail
+      (\ s a -> s{_uPrimaryEmail = a})
+
+-- | The entity that manages the user. With googleManaged users, the source
+-- of truth is Google so EMMs have to make sure a Google Account exists for
+-- the user. With emmManaged users, the EMM is in charge.
+uManagementType :: Lens' User (Maybe Text)
+uManagementType
+  = lens _uManagementType
+      (\ s a -> s{_uManagementType = a})
+
+-- | The type of account that this user represents. A userAccount can be
+-- installed on multiple devices, but a deviceAccount is specific to a
+-- single device. An EMM-managed user (emmManaged) can be either type
+-- (userAccount, deviceAccount), but a Google-managed user (googleManaged)
+-- is always a userAccount.
+uAccountType :: Lens' User (Maybe Text)
+uAccountType
+  = lens _uAccountType (\ s a -> s{_uAccountType = a})
+
+instance FromJSON User where
+        parseJSON
+          = withObject "User"
+              (\ o ->
+                 User' <$>
+                   (o .:? "accountIdentifier") <*>
+                     (o .:? "kind" .!= "androidenterprise#user")
+                     <*> (o .:? "displayName")
+                     <*> (o .:? "id")
+                     <*> (o .:? "primaryEmail")
+                     <*> (o .:? "managementType")
+                     <*> (o .:? "accountType"))
+
+instance ToJSON User where
+        toJSON User'{..}
+          = object
+              (catMaybes
+                 [("accountIdentifier" .=) <$> _uAccountIdentifier,
+                  Just ("kind" .= _uKind),
+                  ("displayName" .=) <$> _uDisplayName,
+                  ("id" .=) <$> _uId,
+                  ("primaryEmail" .=) <$> _uPrimaryEmail,
+                  ("managementType" .=) <$> _uManagementType,
+                  ("accountType" .=) <$> _uAccountType])
+
+-- | The managed configuration resources for the device.
+--
+-- /See:/ 'managedConfigurationsForDeviceListResponse' smart constructor.
+data ManagedConfigurationsForDeviceListResponse = ManagedConfigurationsForDeviceListResponse'
+    { _mcfdlrKind                          :: !Text
+    , _mcfdlrManagedConfigurationForDevice :: !(Maybe [ManagedConfiguration])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ManagedConfigurationsForDeviceListResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'mcfdlrKind'
+--
+-- * 'mcfdlrManagedConfigurationForDevice'
+managedConfigurationsForDeviceListResponse
+    :: ManagedConfigurationsForDeviceListResponse
+managedConfigurationsForDeviceListResponse =
+    ManagedConfigurationsForDeviceListResponse'
+    { _mcfdlrKind = "androidenterprise#managedConfigurationsForDeviceListResponse"
+    , _mcfdlrManagedConfigurationForDevice = Nothing
+    }
+
+-- | Identifies what kind of resource this is. Value: the fixed string
+-- \"androidenterprise#managedConfigurationsForDeviceListResponse\".
+mcfdlrKind :: Lens' ManagedConfigurationsForDeviceListResponse Text
+mcfdlrKind
+  = lens _mcfdlrKind (\ s a -> s{_mcfdlrKind = a})
+
+-- | A managed configuration for an app on a specific device.
+mcfdlrManagedConfigurationForDevice :: Lens' ManagedConfigurationsForDeviceListResponse [ManagedConfiguration]
+mcfdlrManagedConfigurationForDevice
+  = lens _mcfdlrManagedConfigurationForDevice
+      (\ s a ->
+         s{_mcfdlrManagedConfigurationForDevice = a})
+      . _Default
+      . _Coerce
+
+instance FromJSON
+         ManagedConfigurationsForDeviceListResponse where
+        parseJSON
+          = withObject
+              "ManagedConfigurationsForDeviceListResponse"
+              (\ o ->
+                 ManagedConfigurationsForDeviceListResponse' <$>
+                   (o .:? "kind" .!=
+                      "androidenterprise#managedConfigurationsForDeviceListResponse")
+                     <*>
+                     (o .:? "managedConfigurationForDevice" .!= mempty))
+
+instance ToJSON
+         ManagedConfigurationsForDeviceListResponse where
+        toJSON
+          ManagedConfigurationsForDeviceListResponse'{..}
+          = object
+              (catMaybes
+                 [Just ("kind" .= _mcfdlrKind),
+                  ("managedConfigurationForDevice" .=) <$>
+                    _mcfdlrManagedConfigurationForDevice])
+
+--
+-- /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])
+
+-- | Definition of a Google Play for Work store page, made of a localized
+-- name and links to other pages. A page also contains clusters defined as
+-- a subcollection.
+--
+-- /See:/ 'storePage' smart constructor.
+data StorePage = StorePage'
+    { _spKind :: !Text
+    , _spLink :: !(Maybe [Text])
+    , _spName :: !(Maybe [LocalizedText])
+    , _spId   :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'StorePage' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'spKind'
+--
+-- * 'spLink'
+--
+-- * 'spName'
+--
+-- * 'spId'
+storePage
+    :: StorePage
+storePage =
+    StorePage'
+    { _spKind = "androidenterprise#storePage"
+    , _spLink = Nothing
+    , _spName = Nothing
+    , _spId = Nothing
+    }
+
+-- | Identifies what kind of resource this is. Value: the fixed string
+-- \"androidenterprise#storePage\".
+spKind :: Lens' StorePage Text
+spKind = lens _spKind (\ s a -> s{_spKind = a})
+
+-- | Ordered list of pages a user should be able to reach from this page. The
+-- pages must exist, must not be this page, and once a link is created the
+-- page linked to cannot be deleted until all links to it are removed. It
+-- is recommended that the basic pages are created first, before adding the
+-- links between pages. No attempt is made to verify that all pages are
+-- reachable from the homepage.
+spLink :: Lens' StorePage [Text]
+spLink
+  = lens _spLink (\ s a -> s{_spLink = a}) . _Default .
+      _Coerce
+
+-- | Ordered list of localized strings giving the name of this page. The text
+-- displayed is the one that best matches the user locale, or the first
+-- entry if there is no good match. There needs to be at least one entry.
+spName :: Lens' StorePage [LocalizedText]
+spName
+  = lens _spName (\ s a -> s{_spName = a}) . _Default .
+      _Coerce
+
+-- | Unique ID of this page. Assigned by the server. Immutable once assigned.
+spId :: Lens' StorePage (Maybe Text)
+spId = lens _spId (\ s a -> s{_spId = a})
+
+instance FromJSON StorePage where
+        parseJSON
+          = withObject "StorePage"
+              (\ o ->
+                 StorePage' <$>
+                   (o .:? "kind" .!= "androidenterprise#storePage") <*>
+                     (o .:? "link" .!= mempty)
+                     <*> (o .:? "name" .!= mempty)
+                     <*> (o .:? "id"))
+
+instance ToJSON StorePage where
+        toJSON StorePage'{..}
+          = object
+              (catMaybes
+                 [Just ("kind" .= _spKind), ("link" .=) <$> _spLink,
+                  ("name" .=) <$> _spName, ("id" .=) <$> _spId])
+
+--
+-- /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])
+
+-- | A service account identity, including the name and credentials that can
+-- be used to authenticate as the service account.
+--
+-- /See:/ 'serviceAccount' smart constructor.
+data ServiceAccount = ServiceAccount'
+    { _saKind :: !Text
+    , _saKey  :: !(Maybe ServiceAccountKey)
+    , _saName :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ServiceAccount' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'saKind'
+--
+-- * 'saKey'
+--
+-- * 'saName'
+serviceAccount
+    :: ServiceAccount
+serviceAccount =
+    ServiceAccount'
+    { _saKind = "androidenterprise#serviceAccount"
+    , _saKey = Nothing
+    , _saName = Nothing
+    }
+
+-- | Identifies what kind of resource this is. Value: the fixed string
+-- \"androidenterprise#serviceAccount\".
+saKind :: Lens' ServiceAccount Text
+saKind = lens _saKind (\ s a -> s{_saKind = a})
+
+-- | Credentials that can be used to authenticate as this ServiceAccount.
+saKey :: Lens' ServiceAccount (Maybe ServiceAccountKey)
+saKey = lens _saKey (\ s a -> s{_saKey = a})
+
+-- | The account name of the service account, in the form of an email
+-- address. Assigned by the server.
+saName :: Lens' ServiceAccount (Maybe Text)
+saName = lens _saName (\ s a -> s{_saName = a})
+
+instance FromJSON ServiceAccount where
+        parseJSON
+          = withObject "ServiceAccount"
+              (\ o ->
+                 ServiceAccount' <$>
+                   (o .:? "kind" .!= "androidenterprise#serviceAccount")
+                     <*> (o .:? "key")
+                     <*> (o .:? "name"))
+
+instance ToJSON ServiceAccount where
+        toJSON ServiceAccount'{..}
+          = object
+              (catMaybes
+                 [Just ("kind" .= _saKind), ("key" .=) <$> _saKey,
+                  ("name" .=) <$> _saName])
+
+-- | An event generated when a new version of an app is uploaded to Google
+-- Play. Notifications are sent for new public versions only: alpha, beta,
+-- or canary versions do not generate this event. To fetch up-to-date
+-- version history for an app, use Products.Get on the EMM API.
+--
+-- /See:/ 'appUpdateEvent' smart constructor.
+newtype AppUpdateEvent = AppUpdateEvent'
+    { _aueProductId :: Maybe Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'AppUpdateEvent' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'aueProductId'
+appUpdateEvent
+    :: AppUpdateEvent
+appUpdateEvent =
+    AppUpdateEvent'
+    { _aueProductId = Nothing
+    }
+
+-- | The id of the product (e.g. \"app:com.google.android.gm\") that was
+-- updated. This field will always be present.
+aueProductId :: Lens' AppUpdateEvent (Maybe Text)
+aueProductId
+  = lens _aueProductId (\ s a -> s{_aueProductId = a})
+
+instance FromJSON AppUpdateEvent where
+        parseJSON
+          = withObject "AppUpdateEvent"
+              (\ o -> AppUpdateEvent' <$> (o .:? "productId"))
+
+instance ToJSON AppUpdateEvent where
+        toJSON AppUpdateEvent'{..}
+          = object
+              (catMaybes [("productId" .=) <$> _aueProductId])
+
+-- | 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])
+
+-- | A resource returned by the PullNotificationSet API, which contains a
+-- collection of notifications for enterprises associated with the service
+-- account authenticated for the request.
+--
+-- /See:/ 'notificationSet' smart constructor.
+data NotificationSet = NotificationSet'
+    { _nsNotificationSetId :: !(Maybe Text)
+    , _nsNotification      :: !(Maybe [Notification])
+    , _nsKind              :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'NotificationSet' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'nsNotificationSetId'
+--
+-- * 'nsNotification'
+--
+-- * 'nsKind'
+notificationSet
+    :: NotificationSet
+notificationSet =
+    NotificationSet'
+    { _nsNotificationSetId = Nothing
+    , _nsNotification = Nothing
+    , _nsKind = "androidenterprise#notificationSet"
+    }
+
+-- | The notification set ID, required to mark the notification as received
+-- with the Enterprises.AcknowledgeNotification API. This will be omitted
+-- if no notifications are present.
+nsNotificationSetId :: Lens' NotificationSet (Maybe Text)
+nsNotificationSetId
+  = lens _nsNotificationSetId
+      (\ s a -> s{_nsNotificationSetId = a})
+
+-- | The notifications received, or empty if no notifications are present.
+nsNotification :: Lens' NotificationSet [Notification]
+nsNotification
+  = lens _nsNotification
+      (\ s a -> s{_nsNotification = a})
+      . _Default
+      . _Coerce
+
+-- | Identifies what kind of resource this is. Value: the fixed string
+-- \"androidenterprise#notificationSet\".
+nsKind :: Lens' NotificationSet Text
+nsKind = lens _nsKind (\ s a -> s{_nsKind = a})
+
+instance FromJSON NotificationSet where
+        parseJSON
+          = withObject "NotificationSet"
+              (\ o ->
+                 NotificationSet' <$>
+                   (o .:? "notificationSetId") <*>
+                     (o .:? "notification" .!= mempty)
+                     <*>
+                     (o .:? "kind" .!=
+                        "androidenterprise#notificationSet"))
+
+instance ToJSON NotificationSet where
+        toJSON NotificationSet'{..}
+          = object
+              (catMaybes
+                 [("notificationSetId" .=) <$> _nsNotificationSetId,
+                  ("notification" .=) <$> _nsNotification,
+                  Just ("kind" .= _nsKind)])
+
+-- | 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 localized string with its locale.
+--
+-- /See:/ 'localizedText' smart constructor.
+data LocalizedText = LocalizedText'
+    { _ltText   :: !(Maybe Text)
+    , _ltLocale :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'LocalizedText' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ltText'
+--
+-- * 'ltLocale'
+localizedText
+    :: LocalizedText
+localizedText =
+    LocalizedText'
+    { _ltText = Nothing
+    , _ltLocale = Nothing
+    }
+
+-- | The text localized in the associated locale.
+ltText :: Lens' LocalizedText (Maybe Text)
+ltText = lens _ltText (\ s a -> s{_ltText = a})
+
+-- | The BCP47 tag for a locale. (e.g. \"en-US\", \"de\").
+ltLocale :: Lens' LocalizedText (Maybe Text)
+ltLocale = lens _ltLocale (\ s a -> s{_ltLocale = a})
+
+instance FromJSON LocalizedText where
+        parseJSON
+          = withObject "LocalizedText"
+              (\ o ->
+                 LocalizedText' <$>
+                   (o .:? "text") <*> (o .:? "locale"))
+
+instance ToJSON LocalizedText where
+        toJSON LocalizedText'{..}
+          = object
+              (catMaybes
+                 [("text" .=) <$> _ltText,
+                  ("locale" .=) <$> _ltLocale])
+
+-- | 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 EMM 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 Enterprises resource represents the binding between an EMM and a
+-- specific organization. That binding can be instantiated in one of two
+-- different ways using this API as follows: - For Google managed domain
+-- customers, the process involves using Enterprises.enroll and
+-- Enterprises.setAccount (in conjunction with artifacts obtained from the
+-- Admin console and the Google API Console) and submitted to the EMM
+-- through a more-or-less manual process. - For Android for Work Accounts
+-- customers, the process involves using Enterprises.generateSignupUrl and
+-- Enterprises.completeSignup in conjunction with the Android for Work
+-- Sign-up UI (Google-provided mechanism) to create the binding without
+-- manual steps. As an EMM, you can support either or both approaches in
+-- your EMM console. See Create an Enterprise for details.
+--
+-- /See:/ 'enterprise' smart constructor.
+data Enterprise = Enterprise'
+    { _eKind          :: !Text
+    , _eAdministrator :: !(Maybe [Administrator])
+    , _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'
+--
+-- * 'eAdministrator'
+--
+-- * 'ePrimaryDomain'
+--
+-- * 'eName'
+--
+-- * 'eId'
+enterprise
+    :: Enterprise
+enterprise =
+    Enterprise'
+    { _eKind = "androidenterprise#enterprise"
+    , _eAdministrator = Nothing
+    , _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})
+
+-- | Administrators of the enterprise. This is only supported for enterprises
+-- created via the EMM-initiated flow.
+eAdministrator :: Lens' Enterprise [Administrator]
+eAdministrator
+  = lens _eAdministrator
+      (\ s a -> s{_eAdministrator = a})
+      . _Default
+      . _Coerce
+
+-- | The enterprise\'s primary domain, such as \"example.com\".
+ePrimaryDomain :: Lens' Enterprise (Maybe Text)
+ePrimaryDomain
+  = lens _ePrimaryDomain
+      (\ s a -> s{_ePrimaryDomain = a})
+
+-- | The name of the enterprise, for example, \"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 .:? "administrator" .!= mempty)
+                     <*> (o .:? "primaryDomain")
+                     <*> (o .:? "name")
+                     <*> (o .:? "id"))
+
+instance ToJSON Enterprise where
+        toJSON Enterprise'{..}
+          = object
+              (catMaybes
+                 [Just ("kind" .= _eKind),
+                  ("administrator" .=) <$> _eAdministrator,
+                  ("primaryDomain" .=) <$> _ePrimaryDomain,
+                  ("name" .=) <$> _eName, ("id" .=) <$> _eId])
+
+-- | An event generated when an app installation failed on a device
+--
+-- /See:/ 'installFailureEvent' smart constructor.
+data InstallFailureEvent = InstallFailureEvent'
+    { _ifeFailureReason  :: !(Maybe Text)
+    , _ifeFailureDetails :: !(Maybe Text)
+    , _ifeUserId         :: !(Maybe Text)
+    , _ifeDeviceId       :: !(Maybe Text)
+    , _ifeProductId      :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'InstallFailureEvent' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ifeFailureReason'
+--
+-- * 'ifeFailureDetails'
+--
+-- * 'ifeUserId'
+--
+-- * 'ifeDeviceId'
+--
+-- * 'ifeProductId'
+installFailureEvent
+    :: InstallFailureEvent
+installFailureEvent =
+    InstallFailureEvent'
+    { _ifeFailureReason = Nothing
+    , _ifeFailureDetails = Nothing
+    , _ifeUserId = Nothing
+    , _ifeDeviceId = Nothing
+    , _ifeProductId = Nothing
+    }
+
+-- | The reason for the installation failure. This field will always be
+-- present.
+ifeFailureReason :: Lens' InstallFailureEvent (Maybe Text)
+ifeFailureReason
+  = lens _ifeFailureReason
+      (\ s a -> s{_ifeFailureReason = a})
+
+-- | Additional details on the failure if applicable.
+ifeFailureDetails :: Lens' InstallFailureEvent (Maybe Text)
+ifeFailureDetails
+  = lens _ifeFailureDetails
+      (\ s a -> s{_ifeFailureDetails = a})
+
+-- | The ID of the user. This field will always be present.
+ifeUserId :: Lens' InstallFailureEvent (Maybe Text)
+ifeUserId
+  = lens _ifeUserId (\ s a -> s{_ifeUserId = a})
+
+-- | The Android ID of the device. This field will always be present.
+ifeDeviceId :: Lens' InstallFailureEvent (Maybe Text)
+ifeDeviceId
+  = lens _ifeDeviceId (\ s a -> s{_ifeDeviceId = a})
+
+-- | The id of the product (e.g. \"app:com.google.android.gm\") for which the
+-- install failure event occured. This field will always be present.
+ifeProductId :: Lens' InstallFailureEvent (Maybe Text)
+ifeProductId
+  = lens _ifeProductId (\ s a -> s{_ifeProductId = a})
+
+instance FromJSON InstallFailureEvent where
+        parseJSON
+          = withObject "InstallFailureEvent"
+              (\ o ->
+                 InstallFailureEvent' <$>
+                   (o .:? "failureReason") <*> (o .:? "failureDetails")
+                     <*> (o .:? "userId")
+                     <*> (o .:? "deviceId")
+                     <*> (o .:? "productId"))
+
+instance ToJSON InstallFailureEvent where
+        toJSON InstallFailureEvent'{..}
+          = object
+              (catMaybes
+                 [("failureReason" .=) <$> _ifeFailureReason,
+                  ("failureDetails" .=) <$> _ifeFailureDetails,
+                  ("userId" .=) <$> _ifeUserId,
+                  ("deviceId" .=) <$> _ifeDeviceId,
+                  ("productId" .=) <$> _ifeProductId])
+
+-- | The managed configuration resources for the user.
+--
+-- /See:/ 'managedConfigurationsForUserListResponse' smart constructor.
+data ManagedConfigurationsForUserListResponse = ManagedConfigurationsForUserListResponse'
+    { _mcfulrManagedConfigurationForUser :: !(Maybe [ManagedConfiguration])
+    , _mcfulrKind                        :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ManagedConfigurationsForUserListResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'mcfulrManagedConfigurationForUser'
+--
+-- * 'mcfulrKind'
+managedConfigurationsForUserListResponse
+    :: ManagedConfigurationsForUserListResponse
+managedConfigurationsForUserListResponse =
+    ManagedConfigurationsForUserListResponse'
+    { _mcfulrManagedConfigurationForUser = Nothing
+    , _mcfulrKind = "androidenterprise#managedConfigurationsForUserListResponse"
+    }
+
+-- | A managed configuration for an app for a specific user.
+mcfulrManagedConfigurationForUser :: Lens' ManagedConfigurationsForUserListResponse [ManagedConfiguration]
+mcfulrManagedConfigurationForUser
+  = lens _mcfulrManagedConfigurationForUser
+      (\ s a -> s{_mcfulrManagedConfigurationForUser = a})
+      . _Default
+      . _Coerce
+
+-- | Identifies what kind of resource this is. Value: the fixed string
+-- \"androidenterprise#managedConfigurationsForUserListResponse\".
+mcfulrKind :: Lens' ManagedConfigurationsForUserListResponse Text
+mcfulrKind
+  = lens _mcfulrKind (\ s a -> s{_mcfulrKind = a})
+
+instance FromJSON
+         ManagedConfigurationsForUserListResponse where
+        parseJSON
+          = withObject
+              "ManagedConfigurationsForUserListResponse"
+              (\ o ->
+                 ManagedConfigurationsForUserListResponse' <$>
+                   (o .:? "managedConfigurationForUser" .!= mempty) <*>
+                     (o .:? "kind" .!=
+                        "androidenterprise#managedConfigurationsForUserListResponse"))
+
+instance ToJSON
+         ManagedConfigurationsForUserListResponse where
+        toJSON ManagedConfigurationsForUserListResponse'{..}
+          = object
+              (catMaybes
+                 [("managedConfigurationForUser" .=) <$>
+                    _mcfulrManagedConfigurationForUser,
+                  Just ("kind" .= _mcfulrKind)])
+
+-- | General setting for the Google Play for Work store layout, currently
+-- only specifying the page to display the first time the store is opened.
+--
+-- /See:/ 'storeLayout' smart constructor.
+data StoreLayout = StoreLayout'
+    { _slStoreLayoutType :: !(Maybe Text)
+    , _slKind            :: !Text
+    , _slHomepageId      :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'StoreLayout' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'slStoreLayoutType'
+--
+-- * 'slKind'
+--
+-- * 'slHomepageId'
+storeLayout
+    :: StoreLayout
+storeLayout =
+    StoreLayout'
+    { _slStoreLayoutType = Nothing
+    , _slKind = "androidenterprise#storeLayout"
+    , _slHomepageId = Nothing
+    }
+
+-- | Sets a store layout type. If set to \"custom\", \"homepageId\" must be
+-- specified. If set to \"basic\", the layout will consist of all approved
+-- apps accessible by the user, split in pages of 100 each; in this case,
+-- \"homepageId\" must not be specified. The \"basic\" setting takes
+-- precedence over any existing collections setup for this enterprise (if
+-- any). Should the enterprise use collectionViewers for controlling access
+-- rights, these will still be respected.
+slStoreLayoutType :: Lens' StoreLayout (Maybe Text)
+slStoreLayoutType
+  = lens _slStoreLayoutType
+      (\ s a -> s{_slStoreLayoutType = a})
+
+-- | Identifies what kind of resource this is. Value: the fixed string
+-- \"androidenterprise#storeLayout\".
+slKind :: Lens' StoreLayout Text
+slKind = lens _slKind (\ s a -> s{_slKind = a})
+
+-- | The ID of the store page to be used as the homepage. The homepage will
+-- be used as the first page shown in the Google Play for Work store. If a
+-- homepage has not been set, the Play store shown on devices will be
+-- empty. Not specifying a homepage on a store layout effectively empties
+-- the store. If there exists at least one page, this field must be set to
+-- the ID of a valid page.
+slHomepageId :: Lens' StoreLayout (Maybe Text)
+slHomepageId
+  = lens _slHomepageId (\ s a -> s{_slHomepageId = a})
+
+instance FromJSON StoreLayout where
+        parseJSON
+          = withObject "StoreLayout"
+              (\ o ->
+                 StoreLayout' <$>
+                   (o .:? "storeLayoutType") <*>
+                     (o .:? "kind" .!= "androidenterprise#storeLayout")
+                     <*> (o .:? "homepageId"))
+
+instance ToJSON StoreLayout where
+        toJSON StoreLayout'{..}
+          = object
+              (catMaybes
+                 [("storeLayoutType" .=) <$> _slStoreLayoutType,
+                  Just ("kind" .= _slKind),
+                  ("homepageId" .=) <$> _slHomepageId])
+
+-- | An event generated when a new app version is uploaded to Google Play and
+-- its app restrictions schema changed. To fetch the app restrictions
+-- schema for an app, use Products.getAppRestrictionsSchema on the EMM API.
+--
+-- /See:/ 'appRestrictionsSchemaChangeEvent' smart constructor.
+newtype AppRestrictionsSchemaChangeEvent = AppRestrictionsSchemaChangeEvent'
+    { _arsceProductId :: Maybe Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'AppRestrictionsSchemaChangeEvent' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'arsceProductId'
+appRestrictionsSchemaChangeEvent
+    :: AppRestrictionsSchemaChangeEvent
+appRestrictionsSchemaChangeEvent =
+    AppRestrictionsSchemaChangeEvent'
+    { _arsceProductId = Nothing
+    }
+
+-- | The id of the product (e.g. \"app:com.google.android.gm\") for which the
+-- app restriction schema changed. This field will always be present.
+arsceProductId :: Lens' AppRestrictionsSchemaChangeEvent (Maybe Text)
+arsceProductId
+  = lens _arsceProductId
+      (\ s a -> s{_arsceProductId = a})
+
+instance FromJSON AppRestrictionsSchemaChangeEvent
+         where
+        parseJSON
+          = withObject "AppRestrictionsSchemaChangeEvent"
+              (\ o ->
+                 AppRestrictionsSchemaChangeEvent' <$>
+                   (o .:? "productId"))
+
+instance ToJSON AppRestrictionsSchemaChangeEvent
+         where
+        toJSON AppRestrictionsSchemaChangeEvent'{..}
+          = object
+              (catMaybes [("productId" .=) <$> _arsceProductId])
+
+-- | A token authorizing an administrator to access an iframe.
+--
+-- /See:/ 'administratorWebToken' smart constructor.
+data AdministratorWebToken = AdministratorWebToken'
+    { _awtKind  :: !Text
+    , _awtToken :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'AdministratorWebToken' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'awtKind'
+--
+-- * 'awtToken'
+administratorWebToken
+    :: AdministratorWebToken
+administratorWebToken =
+    AdministratorWebToken'
+    { _awtKind = "androidenterprise#administratorWebToken"
+    , _awtToken = Nothing
+    }
+
+-- | Identifies what kind of resource this is. Value: the fixed string
+-- \"androidenterprise#administratorWebToken\".
+awtKind :: Lens' AdministratorWebToken Text
+awtKind = lens _awtKind (\ s a -> s{_awtKind = a})
+
+-- | An opaque token to be passed to the Play front-end to generate an
+-- iframe.
+awtToken :: Lens' AdministratorWebToken (Maybe Text)
+awtToken = lens _awtToken (\ s a -> s{_awtToken = a})
+
+instance FromJSON AdministratorWebToken where
+        parseJSON
+          = withObject "AdministratorWebToken"
+              (\ o ->
+                 AdministratorWebToken' <$>
+                   (o .:? "kind" .!=
+                      "androidenterprise#administratorWebToken")
+                     <*> (o .:? "token"))
+
+instance ToJSON AdministratorWebToken where
+        toJSON AdministratorWebToken'{..}
+          = object
+              (catMaybes
+                 [Just ("kind" .= _awtKind),
+                  ("token" .=) <$> _awtToken])
+
+-- | A resource returned by the GenerateSignupUrl API, which contains the
+-- Signup URL and Completion Token.
+--
+-- /See:/ 'signupInfo' smart constructor.
+data SignupInfo = SignupInfo'
+    { _siCompletionToken :: !(Maybe Text)
+    , _siKind            :: !Text
+    , _siURL             :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'SignupInfo' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'siCompletionToken'
+--
+-- * 'siKind'
+--
+-- * 'siURL'
+signupInfo
+    :: SignupInfo
+signupInfo =
+    SignupInfo'
+    { _siCompletionToken = Nothing
+    , _siKind = "androidenterprise#signupInfo"
+    , _siURL = Nothing
+    }
+
+-- | An opaque token that will be required, along with the Enterprise Token,
+-- for obtaining the enterprise resource from CompleteSignup.
+siCompletionToken :: Lens' SignupInfo (Maybe Text)
+siCompletionToken
+  = lens _siCompletionToken
+      (\ s a -> s{_siCompletionToken = a})
+
+-- | Identifies what kind of resource this is. Value: the fixed string
+-- \"androidenterprise#signupInfo\".
+siKind :: Lens' SignupInfo Text
+siKind = lens _siKind (\ s a -> s{_siKind = a})
+
+-- | A URL under which the Admin can sign up for an enterprise. The page
+-- pointed to cannot be rendered in an iframe.
+siURL :: Lens' SignupInfo (Maybe Text)
+siURL = lens _siURL (\ s a -> s{_siURL = a})
+
+instance FromJSON SignupInfo where
+        parseJSON
+          = withObject "SignupInfo"
+              (\ o ->
+                 SignupInfo' <$>
+                   (o .:? "completionToken") <*>
+                     (o .:? "kind" .!= "androidenterprise#signupInfo")
+                     <*> (o .:? "url"))
+
+instance ToJSON SignupInfo where
+        toJSON SignupInfo'{..}
+          = object
+              (catMaybes
+                 [("completionToken" .=) <$> _siCompletionToken,
+                  Just ("kind" .= _siKind), ("url" .=) <$> _siURL])
+
+-- | A Products resource 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 EMM user interface.
+--
+-- /See:/ 'product' smart constructor.
+data Product = Product'
+    { _pSmallIconURL         :: !(Maybe Text)
+    , _pAuthorName           :: !(Maybe Text)
+    , _pKind                 :: !Text
+    , _pWorkDetailsURL       :: !(Maybe Text)
+    , _pRequiresContainerApp :: !(Maybe Bool)
+    , _pAppVersion           :: !(Maybe [AppVersion])
+    , _pProductPricing       :: !(Maybe Text)
+    , _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:
+--
+-- * 'pSmallIconURL'
+--
+-- * 'pAuthorName'
+--
+-- * 'pKind'
+--
+-- * 'pWorkDetailsURL'
+--
+-- * 'pRequiresContainerApp'
+--
+-- * 'pAppVersion'
+--
+-- * 'pProductPricing'
+--
+-- * 'pDistributionChannel'
+--
+-- * 'pIconURL'
+--
+-- * 'pTitle'
+--
+-- * 'pProductId'
+--
+-- * 'pDetailsURL'
+product
+    :: Product
+product =
+    Product'
+    { _pSmallIconURL = Nothing
+    , _pAuthorName = Nothing
+    , _pKind = "androidenterprise#product"
+    , _pWorkDetailsURL = Nothing
+    , _pRequiresContainerApp = Nothing
+    , _pAppVersion = Nothing
+    , _pProductPricing = Nothing
+    , _pDistributionChannel = Nothing
+    , _pIconURL = Nothing
+    , _pTitle = Nothing
+    , _pProductId = Nothing
+    , _pDetailsURL = Nothing
+    }
+
+-- | A link to a smaller image that can be used as an icon for the product.
+-- This image is suitable for use at up to 128px x 128px.
+pSmallIconURL :: Lens' Product (Maybe Text)
+pSmallIconURL
+  = lens _pSmallIconURL
+      (\ s a -> s{_pSmallIconURL = a})
+
+-- | 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
+
+-- | Whether this product is free, free with in-app purchases, or paid. If
+-- the pricing is unknown, this means the product is not generally
+-- available anymore (even though it might still be available to people who
+-- own it).
 pProductPricing :: Lens' Product (Maybe Text)
 pProductPricing
   = lens _pProductPricing
diff --git a/gen/Network/Google/AndroidEnterprise/Types/Sum.hs b/gen/Network/Google/AndroidEnterprise/Types/Sum.hs
--- a/gen/Network/Google/AndroidEnterprise/Types/Sum.hs
+++ b/gen/Network/Google/AndroidEnterprise/Types/Sum.hs
@@ -17,3 +17,63 @@
 module Network.Google.AndroidEnterprise.Types.Sum where
 
 import           Network.Google.Prelude
+
+-- | The request mode for pulling notifications. Specifying
+-- waitForNotifications will cause the request to block and wait until one
+-- or more notifications are present, or return an empty notification list
+-- if no notifications are present after some time. Speciying
+-- returnImmediately will cause the request to immediately return the
+-- pending notifications, or an empty list if no notifications are present.
+-- If omitted, defaults to waitForNotifications.
+data EnterprisesPullNotificationSetRequestMode
+    = ReturnImmediately
+      -- ^ @returnImmediately@
+    | WaitForNotifications
+      -- ^ @waitForNotifications@
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable EnterprisesPullNotificationSetRequestMode
+
+instance FromHttpApiData EnterprisesPullNotificationSetRequestMode where
+    parseQueryParam = \case
+        "returnImmediately" -> Right ReturnImmediately
+        "waitForNotifications" -> Right WaitForNotifications
+        x -> Left ("Unable to parse EnterprisesPullNotificationSetRequestMode from: " <> x)
+
+instance ToHttpApiData EnterprisesPullNotificationSetRequestMode where
+    toQueryParam = \case
+        ReturnImmediately -> "returnImmediately"
+        WaitForNotifications -> "waitForNotifications"
+
+instance FromJSON EnterprisesPullNotificationSetRequestMode where
+    parseJSON = parseJSONText "EnterprisesPullNotificationSetRequestMode"
+
+instance ToJSON EnterprisesPullNotificationSetRequestMode where
+    toJSON = toJSONText
+
+-- | The type of credential to return with the service account. Required.
+data EnterprisesGetServiceAccountKeyType
+    = GoogleCredentials
+      -- ^ @googleCredentials@
+    | PKCS12
+      -- ^ @pkcs12@
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable EnterprisesGetServiceAccountKeyType
+
+instance FromHttpApiData EnterprisesGetServiceAccountKeyType where
+    parseQueryParam = \case
+        "googleCredentials" -> Right GoogleCredentials
+        "pkcs12" -> Right PKCS12
+        x -> Left ("Unable to parse EnterprisesGetServiceAccountKeyType from: " <> x)
+
+instance ToHttpApiData EnterprisesGetServiceAccountKeyType where
+    toQueryParam = \case
+        GoogleCredentials -> "googleCredentials"
+        PKCS12 -> "pkcs12"
+
+instance FromJSON EnterprisesGetServiceAccountKeyType where
+    parseJSON = parseJSONText "EnterprisesGetServiceAccountKeyType"
+
+instance ToJSON EnterprisesGetServiceAccountKeyType where
+    toJSON = toJSONText
diff --git a/gen/Network/Google/Resource/AndroidEnterprise/Devices/GetState.hs b/gen/Network/Google/Resource/AndroidEnterprise/Devices/GetState.hs
--- a/gen/Network/Google/Resource/AndroidEnterprise/Devices/GetState.hs
+++ b/gen/Network/Google/Resource/AndroidEnterprise/Devices/GetState.hs
@@ -20,11 +20,11 @@
 -- 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.
+-- Retrieves whether a device\'s access to Google services is enabled or
+-- disabled. 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. This is only supported for Google-managed users.
 --
 -- /See:/ <https://developers.google.com/android/work/play/emm-api Google Play EMM API Reference> for @androidenterprise.devices.getState@.
 module Network.Google.Resource.AndroidEnterprise.Devices.GetState
@@ -59,11 +59,11 @@
                      "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.
+-- | Retrieves whether a device\'s access to Google services is enabled or
+-- disabled. 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. This is only supported for Google-managed users.
 --
 -- /See:/ 'devicesGetState' smart constructor.
 data DevicesGetState = DevicesGetState'
diff --git a/gen/Network/Google/Resource/AndroidEnterprise/Devices/SetState.hs b/gen/Network/Google/Resource/AndroidEnterprise/Devices/SetState.hs
--- a/gen/Network/Google/Resource/AndroidEnterprise/Devices/SetState.hs
+++ b/gen/Network/Google/Resource/AndroidEnterprise/Devices/SetState.hs
@@ -20,11 +20,11 @@
 -- 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.
+-- Sets whether a device\'s access to Google services is enabled or
+-- disabled. 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. This is only supported for Google-managed users.
 --
 -- /See:/ <https://developers.google.com/android/work/play/emm-api Google Play EMM API Reference> for @androidenterprise.devices.setState@.
 module Network.Google.Resource.AndroidEnterprise.Devices.SetState
@@ -62,11 +62,11 @@
                          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.
+-- | Sets whether a device\'s access to Google services is enabled or
+-- disabled. 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. This is only supported for Google-managed users.
 --
 -- /See:/ 'devicesSetState' smart constructor.
 data DevicesSetState = DevicesSetState'
diff --git a/gen/Network/Google/Resource/AndroidEnterprise/Enterprises/AcknowledgeNotificationSet.hs b/gen/Network/Google/Resource/AndroidEnterprise/Enterprises/AcknowledgeNotificationSet.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/AndroidEnterprise/Enterprises/AcknowledgeNotificationSet.hs
@@ -0,0 +1,95 @@
+{-# 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.AcknowledgeNotificationSet
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Acknowledges notifications that were received from
+-- Enterprises.PullNotificationSet to prevent subsequent calls from
+-- returning the same notifications.
+--
+-- /See:/ <https://developers.google.com/android/work/play/emm-api Google Play EMM API Reference> for @androidenterprise.enterprises.acknowledgeNotificationSet@.
+module Network.Google.Resource.AndroidEnterprise.Enterprises.AcknowledgeNotificationSet
+    (
+    -- * REST Resource
+      EnterprisesAcknowledgeNotificationSetResource
+
+    -- * Creating a Request
+    , enterprisesAcknowledgeNotificationSet
+    , EnterprisesAcknowledgeNotificationSet
+
+    -- * Request Lenses
+    , eansNotificationSetId
+    ) where
+
+import           Network.Google.AndroidEnterprise.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @androidenterprise.enterprises.acknowledgeNotificationSet@ method which the
+-- 'EnterprisesAcknowledgeNotificationSet' request conforms to.
+type EnterprisesAcknowledgeNotificationSetResource =
+     "androidenterprise" :>
+       "v1" :>
+         "enterprises" :>
+           "acknowledgeNotificationSet" :>
+             QueryParam "notificationSetId" Text :>
+               QueryParam "alt" AltJSON :> Post '[JSON] ()
+
+-- | Acknowledges notifications that were received from
+-- Enterprises.PullNotificationSet to prevent subsequent calls from
+-- returning the same notifications.
+--
+-- /See:/ 'enterprisesAcknowledgeNotificationSet' smart constructor.
+newtype EnterprisesAcknowledgeNotificationSet = EnterprisesAcknowledgeNotificationSet'
+    { _eansNotificationSetId :: Maybe Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'EnterprisesAcknowledgeNotificationSet' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'eansNotificationSetId'
+enterprisesAcknowledgeNotificationSet
+    :: EnterprisesAcknowledgeNotificationSet
+enterprisesAcknowledgeNotificationSet =
+    EnterprisesAcknowledgeNotificationSet'
+    { _eansNotificationSetId = Nothing
+    }
+
+-- | The notification set ID as returned by Enterprises.PullNotificationSet.
+-- This must be provided.
+eansNotificationSetId :: Lens' EnterprisesAcknowledgeNotificationSet (Maybe Text)
+eansNotificationSetId
+  = lens _eansNotificationSetId
+      (\ s a -> s{_eansNotificationSetId = a})
+
+instance GoogleRequest
+         EnterprisesAcknowledgeNotificationSet where
+        type Rs EnterprisesAcknowledgeNotificationSet = ()
+        type Scopes EnterprisesAcknowledgeNotificationSet =
+             '["https://www.googleapis.com/auth/androidenterprise"]
+        requestClient
+          EnterprisesAcknowledgeNotificationSet'{..}
+          = go _eansNotificationSetId (Just AltJSON)
+              androidEnterpriseService
+          where go
+                  = buildClient
+                      (Proxy ::
+                         Proxy EnterprisesAcknowledgeNotificationSetResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/AndroidEnterprise/Enterprises/CompleteSignup.hs b/gen/Network/Google/Resource/AndroidEnterprise/Enterprises/CompleteSignup.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/AndroidEnterprise/Enterprises/CompleteSignup.hs
@@ -0,0 +1,105 @@
+{-# 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.CompleteSignup
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Completes the signup flow, by specifying the Completion token and
+-- Enterprise token. This request must not be called multiple times for a
+-- given Enterprise Token.
+--
+-- /See:/ <https://developers.google.com/android/work/play/emm-api Google Play EMM API Reference> for @androidenterprise.enterprises.completeSignup@.
+module Network.Google.Resource.AndroidEnterprise.Enterprises.CompleteSignup
+    (
+    -- * REST Resource
+      EnterprisesCompleteSignupResource
+
+    -- * Creating a Request
+    , enterprisesCompleteSignup
+    , EnterprisesCompleteSignup
+
+    -- * Request Lenses
+    , ecsCompletionToken
+    , ecsEnterpriseToken
+    ) where
+
+import           Network.Google.AndroidEnterprise.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @androidenterprise.enterprises.completeSignup@ method which the
+-- 'EnterprisesCompleteSignup' request conforms to.
+type EnterprisesCompleteSignupResource =
+     "androidenterprise" :>
+       "v1" :>
+         "enterprises" :>
+           "completeSignup" :>
+             QueryParam "completionToken" Text :>
+               QueryParam "enterpriseToken" Text :>
+                 QueryParam "alt" AltJSON :> Post '[JSON] Enterprise
+
+-- | Completes the signup flow, by specifying the Completion token and
+-- Enterprise token. This request must not be called multiple times for a
+-- given Enterprise Token.
+--
+-- /See:/ 'enterprisesCompleteSignup' smart constructor.
+data EnterprisesCompleteSignup = EnterprisesCompleteSignup'
+    { _ecsCompletionToken :: !(Maybe Text)
+    , _ecsEnterpriseToken :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'EnterprisesCompleteSignup' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ecsCompletionToken'
+--
+-- * 'ecsEnterpriseToken'
+enterprisesCompleteSignup
+    :: EnterprisesCompleteSignup
+enterprisesCompleteSignup =
+    EnterprisesCompleteSignup'
+    { _ecsCompletionToken = Nothing
+    , _ecsEnterpriseToken = Nothing
+    }
+
+-- | The Completion token initially returned by GenerateSignupUrl.
+ecsCompletionToken :: Lens' EnterprisesCompleteSignup (Maybe Text)
+ecsCompletionToken
+  = lens _ecsCompletionToken
+      (\ s a -> s{_ecsCompletionToken = a})
+
+-- | The Enterprise token appended to the Callback URL.
+ecsEnterpriseToken :: Lens' EnterprisesCompleteSignup (Maybe Text)
+ecsEnterpriseToken
+  = lens _ecsEnterpriseToken
+      (\ s a -> s{_ecsEnterpriseToken = a})
+
+instance GoogleRequest EnterprisesCompleteSignup
+         where
+        type Rs EnterprisesCompleteSignup = Enterprise
+        type Scopes EnterprisesCompleteSignup =
+             '["https://www.googleapis.com/auth/androidenterprise"]
+        requestClient EnterprisesCompleteSignup'{..}
+          = go _ecsCompletionToken _ecsEnterpriseToken
+              (Just AltJSON)
+              androidEnterpriseService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy EnterprisesCompleteSignupResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/AndroidEnterprise/Enterprises/CreateWebToken.hs b/gen/Network/Google/Resource/AndroidEnterprise/Enterprises/CreateWebToken.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/AndroidEnterprise/Enterprises/CreateWebToken.hs
@@ -0,0 +1,109 @@
+{-# 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.CreateWebToken
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns a unique token to access an embeddable UI. To generate a web UI,
+-- pass the generated token into the Play for Work javascript API. Each
+-- token may only be used to start one UI session. See the javascript API
+-- documentation for further information.
+--
+-- /See:/ <https://developers.google.com/android/work/play/emm-api Google Play EMM API Reference> for @androidenterprise.enterprises.createWebToken@.
+module Network.Google.Resource.AndroidEnterprise.Enterprises.CreateWebToken
+    (
+    -- * REST Resource
+      EnterprisesCreateWebTokenResource
+
+    -- * Creating a Request
+    , enterprisesCreateWebToken
+    , EnterprisesCreateWebToken
+
+    -- * Request Lenses
+    , ecwtEnterpriseId
+    , ecwtPayload
+    ) where
+
+import           Network.Google.AndroidEnterprise.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @androidenterprise.enterprises.createWebToken@ method which the
+-- 'EnterprisesCreateWebToken' request conforms to.
+type EnterprisesCreateWebTokenResource =
+     "androidenterprise" :>
+       "v1" :>
+         "enterprises" :>
+           Capture "enterpriseId" Text :>
+             "createWebToken" :>
+               QueryParam "alt" AltJSON :>
+                 ReqBody '[JSON] AdministratorWebTokenSpec :>
+                   Post '[JSON] AdministratorWebToken
+
+-- | Returns a unique token to access an embeddable UI. To generate a web UI,
+-- pass the generated token into the Play for Work javascript API. Each
+-- token may only be used to start one UI session. See the javascript API
+-- documentation for further information.
+--
+-- /See:/ 'enterprisesCreateWebToken' smart constructor.
+data EnterprisesCreateWebToken = EnterprisesCreateWebToken'
+    { _ecwtEnterpriseId :: !Text
+    , _ecwtPayload      :: !AdministratorWebTokenSpec
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'EnterprisesCreateWebToken' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ecwtEnterpriseId'
+--
+-- * 'ecwtPayload'
+enterprisesCreateWebToken
+    :: Text -- ^ 'ecwtEnterpriseId'
+    -> AdministratorWebTokenSpec -- ^ 'ecwtPayload'
+    -> EnterprisesCreateWebToken
+enterprisesCreateWebToken pEcwtEnterpriseId_ pEcwtPayload_ =
+    EnterprisesCreateWebToken'
+    { _ecwtEnterpriseId = pEcwtEnterpriseId_
+    , _ecwtPayload = pEcwtPayload_
+    }
+
+-- | The ID of the enterprise.
+ecwtEnterpriseId :: Lens' EnterprisesCreateWebToken Text
+ecwtEnterpriseId
+  = lens _ecwtEnterpriseId
+      (\ s a -> s{_ecwtEnterpriseId = a})
+
+-- | Multipart request metadata.
+ecwtPayload :: Lens' EnterprisesCreateWebToken AdministratorWebTokenSpec
+ecwtPayload
+  = lens _ecwtPayload (\ s a -> s{_ecwtPayload = a})
+
+instance GoogleRequest EnterprisesCreateWebToken
+         where
+        type Rs EnterprisesCreateWebToken =
+             AdministratorWebToken
+        type Scopes EnterprisesCreateWebToken =
+             '["https://www.googleapis.com/auth/androidenterprise"]
+        requestClient EnterprisesCreateWebToken'{..}
+          = go _ecwtEnterpriseId (Just AltJSON) _ecwtPayload
+              androidEnterpriseService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy EnterprisesCreateWebTokenResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/AndroidEnterprise/Enterprises/GenerateSignupURL.hs b/gen/Network/Google/Resource/AndroidEnterprise/Enterprises/GenerateSignupURL.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/AndroidEnterprise/Enterprises/GenerateSignupURL.hs
@@ -0,0 +1,95 @@
+{-# 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.GenerateSignupURL
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Generates a sign-up URL.
+--
+-- /See:/ <https://developers.google.com/android/work/play/emm-api Google Play EMM API Reference> for @androidenterprise.enterprises.generateSignupUrl@.
+module Network.Google.Resource.AndroidEnterprise.Enterprises.GenerateSignupURL
+    (
+    -- * REST Resource
+      EnterprisesGenerateSignupURLResource
+
+    -- * Creating a Request
+    , enterprisesGenerateSignupURL
+    , EnterprisesGenerateSignupURL
+
+    -- * Request Lenses
+    , egsuCallbackURL
+    ) where
+
+import           Network.Google.AndroidEnterprise.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @androidenterprise.enterprises.generateSignupUrl@ method which the
+-- 'EnterprisesGenerateSignupURL' request conforms to.
+type EnterprisesGenerateSignupURLResource =
+     "androidenterprise" :>
+       "v1" :>
+         "enterprises" :>
+           "signupUrl" :>
+             QueryParam "callbackUrl" Text :>
+               QueryParam "alt" AltJSON :> Post '[JSON] SignupInfo
+
+-- | Generates a sign-up URL.
+--
+-- /See:/ 'enterprisesGenerateSignupURL' smart constructor.
+newtype EnterprisesGenerateSignupURL = EnterprisesGenerateSignupURL'
+    { _egsuCallbackURL :: Maybe Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'EnterprisesGenerateSignupURL' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'egsuCallbackURL'
+enterprisesGenerateSignupURL
+    :: EnterprisesGenerateSignupURL
+enterprisesGenerateSignupURL =
+    EnterprisesGenerateSignupURL'
+    { _egsuCallbackURL = Nothing
+    }
+
+-- | The callback URL to which the Admin will be redirected after
+-- successfully creating an enterprise. Before redirecting there the system
+-- will add a single query parameter to this URL named \"enterpriseToken\"
+-- which will contain an opaque token to be used for the CompleteSignup
+-- request. Beware that this means that the URL will be parsed, the
+-- parameter added and then a new URL formatted, i.e. there may be some
+-- minor formatting changes and, more importantly, the URL must be
+-- well-formed so that it can be parsed.
+egsuCallbackURL :: Lens' EnterprisesGenerateSignupURL (Maybe Text)
+egsuCallbackURL
+  = lens _egsuCallbackURL
+      (\ s a -> s{_egsuCallbackURL = a})
+
+instance GoogleRequest EnterprisesGenerateSignupURL
+         where
+        type Rs EnterprisesGenerateSignupURL = SignupInfo
+        type Scopes EnterprisesGenerateSignupURL =
+             '["https://www.googleapis.com/auth/androidenterprise"]
+        requestClient EnterprisesGenerateSignupURL'{..}
+          = go _egsuCallbackURL (Just AltJSON)
+              androidEnterpriseService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy EnterprisesGenerateSignupURLResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/AndroidEnterprise/Enterprises/GetServiceAccount.hs b/gen/Network/Google/Resource/AndroidEnterprise/Enterprises/GetServiceAccount.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/AndroidEnterprise/Enterprises/GetServiceAccount.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.Enterprises.GetServiceAccount
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns a service account and credentials. The service account can be
+-- bound to the enterprise by calling setAccount. The service account is
+-- unique to this enterprise and EMM, and will be deleted if the enterprise
+-- is unbound. The credentials contain private key data and are not stored
+-- server-side. This method can only be called after calling
+-- Enterprises.Enroll or Enterprises.CompleteSignup, and before
+-- Enterprises.SetAccount; at other times it will return an error.
+-- Subsequent calls after the first will generate a new, unique set of
+-- credentials, and invalidate the previously generated credentials. Once
+-- the service account is bound to the enterprise, it can be managed using
+-- the serviceAccountKeys resource.
+--
+-- /See:/ <https://developers.google.com/android/work/play/emm-api Google Play EMM API Reference> for @androidenterprise.enterprises.getServiceAccount@.
+module Network.Google.Resource.AndroidEnterprise.Enterprises.GetServiceAccount
+    (
+    -- * REST Resource
+      EnterprisesGetServiceAccountResource
+
+    -- * Creating a Request
+    , enterprisesGetServiceAccount
+    , EnterprisesGetServiceAccount
+
+    -- * Request Lenses
+    , egsaKeyType
+    , egsaEnterpriseId
+    ) where
+
+import           Network.Google.AndroidEnterprise.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @androidenterprise.enterprises.getServiceAccount@ method which the
+-- 'EnterprisesGetServiceAccount' request conforms to.
+type EnterprisesGetServiceAccountResource =
+     "androidenterprise" :>
+       "v1" :>
+         "enterprises" :>
+           Capture "enterpriseId" Text :>
+             "serviceAccount" :>
+               QueryParam "keyType"
+                 EnterprisesGetServiceAccountKeyType
+                 :>
+                 QueryParam "alt" AltJSON :>
+                   Get '[JSON] ServiceAccount
+
+-- | Returns a service account and credentials. The service account can be
+-- bound to the enterprise by calling setAccount. The service account is
+-- unique to this enterprise and EMM, and will be deleted if the enterprise
+-- is unbound. The credentials contain private key data and are not stored
+-- server-side. This method can only be called after calling
+-- Enterprises.Enroll or Enterprises.CompleteSignup, and before
+-- Enterprises.SetAccount; at other times it will return an error.
+-- Subsequent calls after the first will generate a new, unique set of
+-- credentials, and invalidate the previously generated credentials. Once
+-- the service account is bound to the enterprise, it can be managed using
+-- the serviceAccountKeys resource.
+--
+-- /See:/ 'enterprisesGetServiceAccount' smart constructor.
+data EnterprisesGetServiceAccount = EnterprisesGetServiceAccount'
+    { _egsaKeyType      :: !(Maybe EnterprisesGetServiceAccountKeyType)
+    , _egsaEnterpriseId :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'EnterprisesGetServiceAccount' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'egsaKeyType'
+--
+-- * 'egsaEnterpriseId'
+enterprisesGetServiceAccount
+    :: Text -- ^ 'egsaEnterpriseId'
+    -> EnterprisesGetServiceAccount
+enterprisesGetServiceAccount pEgsaEnterpriseId_ =
+    EnterprisesGetServiceAccount'
+    { _egsaKeyType = Nothing
+    , _egsaEnterpriseId = pEgsaEnterpriseId_
+    }
+
+-- | The type of credential to return with the service account. Required.
+egsaKeyType :: Lens' EnterprisesGetServiceAccount (Maybe EnterprisesGetServiceAccountKeyType)
+egsaKeyType
+  = lens _egsaKeyType (\ s a -> s{_egsaKeyType = a})
+
+-- | The ID of the enterprise.
+egsaEnterpriseId :: Lens' EnterprisesGetServiceAccount Text
+egsaEnterpriseId
+  = lens _egsaEnterpriseId
+      (\ s a -> s{_egsaEnterpriseId = a})
+
+instance GoogleRequest EnterprisesGetServiceAccount
+         where
+        type Rs EnterprisesGetServiceAccount = ServiceAccount
+        type Scopes EnterprisesGetServiceAccount =
+             '["https://www.googleapis.com/auth/androidenterprise"]
+        requestClient EnterprisesGetServiceAccount'{..}
+          = go _egsaEnterpriseId _egsaKeyType (Just AltJSON)
+              androidEnterpriseService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy EnterprisesGetServiceAccountResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/AndroidEnterprise/Enterprises/GetStoreLayout.hs b/gen/Network/Google/Resource/AndroidEnterprise/Enterprises/GetStoreLayout.hs
--- a/gen/Network/Google/Resource/AndroidEnterprise/Enterprises/GetStoreLayout.hs
+++ b/gen/Network/Google/Resource/AndroidEnterprise/Enterprises/GetStoreLayout.hs
@@ -20,7 +20,9 @@
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Returns the store layout resource.
+-- Returns the store layout for the enterprise. If the store layout has not
+-- been set, or if the store layout has no homepageId set, returns a
+-- NOT_FOUND error.
 --
 -- /See:/ <https://developers.google.com/android/work/play/emm-api Google Play EMM API Reference> for @androidenterprise.enterprises.getStoreLayout@.
 module Network.Google.Resource.AndroidEnterprise.Enterprises.GetStoreLayout
@@ -49,7 +51,9 @@
              "storeLayout" :>
                QueryParam "alt" AltJSON :> Get '[JSON] StoreLayout
 
--- | Returns the store layout resource.
+-- | Returns the store layout for the enterprise. If the store layout has not
+-- been set, or if the store layout has no homepageId set, returns a
+-- NOT_FOUND error.
 --
 -- /See:/ 'enterprisesGetStoreLayout' smart constructor.
 newtype EnterprisesGetStoreLayout = EnterprisesGetStoreLayout'
diff --git a/gen/Network/Google/Resource/AndroidEnterprise/Enterprises/List.hs b/gen/Network/Google/Resource/AndroidEnterprise/Enterprises/List.hs
--- a/gen/Network/Google/Resource/AndroidEnterprise/Enterprises/List.hs
+++ b/gen/Network/Google/Resource/AndroidEnterprise/Enterprises/List.hs
@@ -20,7 +20,11 @@
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Looks up an enterprise by domain name.
+-- Looks up an enterprise by domain name. This is only supported for
+-- enterprises created via the Google-initiated creation flow. Lookup of
+-- the id is not needed for enterprises created via the EMM-initiated flow
+-- since the EMM learns the enterprise ID in the callback specified in the
+-- Enterprises.generateSignupUrl call.
 --
 -- /See:/ <https://developers.google.com/android/work/play/emm-api Google Play EMM API Reference> for @androidenterprise.enterprises.list@.
 module Network.Google.Resource.AndroidEnterprise.Enterprises.List
@@ -49,7 +53,11 @@
              QueryParam "alt" AltJSON :>
                Get '[JSON] EnterprisesListResponse
 
--- | Looks up an enterprise by domain name.
+-- | Looks up an enterprise by domain name. This is only supported for
+-- enterprises created via the Google-initiated creation flow. Lookup of
+-- the id is not needed for enterprises created via the EMM-initiated flow
+-- since the EMM learns the enterprise ID in the callback specified in the
+-- Enterprises.generateSignupUrl call.
 --
 -- /See:/ 'enterprisesList' smart constructor.
 newtype EnterprisesList = EnterprisesList'
diff --git a/gen/Network/Google/Resource/AndroidEnterprise/Enterprises/PullNotificationSet.hs b/gen/Network/Google/Resource/AndroidEnterprise/Enterprises/PullNotificationSet.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/AndroidEnterprise/Enterprises/PullNotificationSet.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.Enterprises.PullNotificationSet
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Pulls and returns a notification set for the enterprises associated with
+-- the service account authenticated for the request. The notification set
+-- may be empty if no notification are pending. A notification set returned
+-- needs to be acknowledged within 20 seconds by calling
+-- Enterprises​.AcknowledgeNotificationSet, unless the notification set is
+-- empty. Notifications that are not acknowledged within the 20 seconds
+-- will eventually be included again in the response to another
+-- PullNotificationSet request, and those that are never acknowledged will
+-- ultimately be deleted according to the Google Cloud Platform Pub\/Sub
+-- system policy. Multiple requests might be performed concurrently to
+-- retrieve notifications, in which case the pending notifications (if any)
+-- will be split among each caller, if any are pending. If no notifications
+-- are present, an empty notification list is returned. Subsequent requests
+-- may return more notifications once they become available.
+--
+-- /See:/ <https://developers.google.com/android/work/play/emm-api Google Play EMM API Reference> for @androidenterprise.enterprises.pullNotificationSet@.
+module Network.Google.Resource.AndroidEnterprise.Enterprises.PullNotificationSet
+    (
+    -- * REST Resource
+      EnterprisesPullNotificationSetResource
+
+    -- * Creating a Request
+    , enterprisesPullNotificationSet
+    , EnterprisesPullNotificationSet
+
+    -- * Request Lenses
+    , epnsRequestMode
+    ) where
+
+import           Network.Google.AndroidEnterprise.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @androidenterprise.enterprises.pullNotificationSet@ method which the
+-- 'EnterprisesPullNotificationSet' request conforms to.
+type EnterprisesPullNotificationSetResource =
+     "androidenterprise" :>
+       "v1" :>
+         "enterprises" :>
+           "pullNotificationSet" :>
+             QueryParam "requestMode"
+               EnterprisesPullNotificationSetRequestMode
+               :>
+               QueryParam "alt" AltJSON :>
+                 Post '[JSON] NotificationSet
+
+-- | Pulls and returns a notification set for the enterprises associated with
+-- the service account authenticated for the request. The notification set
+-- may be empty if no notification are pending. A notification set returned
+-- needs to be acknowledged within 20 seconds by calling
+-- Enterprises​.AcknowledgeNotificationSet, unless the notification set is
+-- empty. Notifications that are not acknowledged within the 20 seconds
+-- will eventually be included again in the response to another
+-- PullNotificationSet request, and those that are never acknowledged will
+-- ultimately be deleted according to the Google Cloud Platform Pub\/Sub
+-- system policy. Multiple requests might be performed concurrently to
+-- retrieve notifications, in which case the pending notifications (if any)
+-- will be split among each caller, if any are pending. If no notifications
+-- are present, an empty notification list is returned. Subsequent requests
+-- may return more notifications once they become available.
+--
+-- /See:/ 'enterprisesPullNotificationSet' smart constructor.
+newtype EnterprisesPullNotificationSet = EnterprisesPullNotificationSet'
+    { _epnsRequestMode :: Maybe EnterprisesPullNotificationSetRequestMode
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'EnterprisesPullNotificationSet' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'epnsRequestMode'
+enterprisesPullNotificationSet
+    :: EnterprisesPullNotificationSet
+enterprisesPullNotificationSet =
+    EnterprisesPullNotificationSet'
+    { _epnsRequestMode = Nothing
+    }
+
+-- | The request mode for pulling notifications. Specifying
+-- waitForNotifications will cause the request to block and wait until one
+-- or more notifications are present, or return an empty notification list
+-- if no notifications are present after some time. Speciying
+-- returnImmediately will cause the request to immediately return the
+-- pending notifications, or an empty list if no notifications are present.
+-- If omitted, defaults to waitForNotifications.
+epnsRequestMode :: Lens' EnterprisesPullNotificationSet (Maybe EnterprisesPullNotificationSetRequestMode)
+epnsRequestMode
+  = lens _epnsRequestMode
+      (\ s a -> s{_epnsRequestMode = a})
+
+instance GoogleRequest EnterprisesPullNotificationSet
+         where
+        type Rs EnterprisesPullNotificationSet =
+             NotificationSet
+        type Scopes EnterprisesPullNotificationSet =
+             '["https://www.googleapis.com/auth/androidenterprise"]
+        requestClient EnterprisesPullNotificationSet'{..}
+          = go _epnsRequestMode (Just AltJSON)
+              androidEnterpriseService
+          where go
+                  = buildClient
+                      (Proxy ::
+                         Proxy EnterprisesPullNotificationSetResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/AndroidEnterprise/Enterprises/SetStoreLayout.hs b/gen/Network/Google/Resource/AndroidEnterprise/Enterprises/SetStoreLayout.hs
--- a/gen/Network/Google/Resource/AndroidEnterprise/Enterprises/SetStoreLayout.hs
+++ b/gen/Network/Google/Resource/AndroidEnterprise/Enterprises/SetStoreLayout.hs
@@ -20,7 +20,7 @@
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Sets the store layout resource.
+-- Sets the store layout for the enterprise.
 --
 -- /See:/ <https://developers.google.com/android/work/play/emm-api Google Play EMM API Reference> for @androidenterprise.enterprises.setStoreLayout@.
 module Network.Google.Resource.AndroidEnterprise.Enterprises.SetStoreLayout
@@ -52,7 +52,7 @@
                  ReqBody '[JSON] StoreLayout :>
                    Put '[JSON] StoreLayout
 
--- | Sets the store layout resource.
+-- | Sets the store layout for the enterprise.
 --
 -- /See:/ 'enterprisesSetStoreLayout' smart constructor.
 data EnterprisesSetStoreLayout = EnterprisesSetStoreLayout'
diff --git a/gen/Network/Google/Resource/AndroidEnterprise/ManagedConfigurationsforDevice/Delete.hs b/gen/Network/Google/Resource/AndroidEnterprise/ManagedConfigurationsforDevice/Delete.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/AndroidEnterprise/ManagedConfigurationsforDevice/Delete.hs
@@ -0,0 +1,136 @@
+{-# 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.ManagedConfigurationsforDevice.Delete
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Removes a per-device managed configuration for an app for the specified
+-- device.
+--
+-- /See:/ <https://developers.google.com/android/work/play/emm-api Google Play EMM API Reference> for @androidenterprise.managedconfigurationsfordevice.delete@.
+module Network.Google.Resource.AndroidEnterprise.ManagedConfigurationsforDevice.Delete
+    (
+    -- * REST Resource
+      ManagedConfigurationsforDeviceDeleteResource
+
+    -- * Creating a Request
+    , managedConfigurationsforDeviceDelete
+    , ManagedConfigurationsforDeviceDelete
+
+    -- * Request Lenses
+    , mcddEnterpriseId
+    , mcddUserId
+    , mcddDeviceId
+    , mcddManagedConfigurationForDeviceId
+    ) where
+
+import           Network.Google.AndroidEnterprise.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @androidenterprise.managedconfigurationsfordevice.delete@ method which the
+-- 'ManagedConfigurationsforDeviceDelete' request conforms to.
+type ManagedConfigurationsforDeviceDeleteResource =
+     "androidenterprise" :>
+       "v1" :>
+         "enterprises" :>
+           Capture "enterpriseId" Text :>
+             "users" :>
+               Capture "userId" Text :>
+                 "devices" :>
+                   Capture "deviceId" Text :>
+                     "managedConfigurationsForDevice" :>
+                       Capture "managedConfigurationForDeviceId" Text :>
+                         QueryParam "alt" AltJSON :> Delete '[JSON] ()
+
+-- | Removes a per-device managed configuration for an app for the specified
+-- device.
+--
+-- /See:/ 'managedConfigurationsforDeviceDelete' smart constructor.
+data ManagedConfigurationsforDeviceDelete = ManagedConfigurationsforDeviceDelete'
+    { _mcddEnterpriseId                    :: !Text
+    , _mcddUserId                          :: !Text
+    , _mcddDeviceId                        :: !Text
+    , _mcddManagedConfigurationForDeviceId :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ManagedConfigurationsforDeviceDelete' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'mcddEnterpriseId'
+--
+-- * 'mcddUserId'
+--
+-- * 'mcddDeviceId'
+--
+-- * 'mcddManagedConfigurationForDeviceId'
+managedConfigurationsforDeviceDelete
+    :: Text -- ^ 'mcddEnterpriseId'
+    -> Text -- ^ 'mcddUserId'
+    -> Text -- ^ 'mcddDeviceId'
+    -> Text -- ^ 'mcddManagedConfigurationForDeviceId'
+    -> ManagedConfigurationsforDeviceDelete
+managedConfigurationsforDeviceDelete pMcddEnterpriseId_ pMcddUserId_ pMcddDeviceId_ pMcddManagedConfigurationForDeviceId_ =
+    ManagedConfigurationsforDeviceDelete'
+    { _mcddEnterpriseId = pMcddEnterpriseId_
+    , _mcddUserId = pMcddUserId_
+    , _mcddDeviceId = pMcddDeviceId_
+    , _mcddManagedConfigurationForDeviceId = pMcddManagedConfigurationForDeviceId_
+    }
+
+-- | The ID of the enterprise.
+mcddEnterpriseId :: Lens' ManagedConfigurationsforDeviceDelete Text
+mcddEnterpriseId
+  = lens _mcddEnterpriseId
+      (\ s a -> s{_mcddEnterpriseId = a})
+
+-- | The ID of the user.
+mcddUserId :: Lens' ManagedConfigurationsforDeviceDelete Text
+mcddUserId
+  = lens _mcddUserId (\ s a -> s{_mcddUserId = a})
+
+-- | The Android ID of the device.
+mcddDeviceId :: Lens' ManagedConfigurationsforDeviceDelete Text
+mcddDeviceId
+  = lens _mcddDeviceId (\ s a -> s{_mcddDeviceId = a})
+
+-- | The ID of the managed configuration (a product ID), e.g.
+-- \"app:com.google.android.gm\".
+mcddManagedConfigurationForDeviceId :: Lens' ManagedConfigurationsforDeviceDelete Text
+mcddManagedConfigurationForDeviceId
+  = lens _mcddManagedConfigurationForDeviceId
+      (\ s a ->
+         s{_mcddManagedConfigurationForDeviceId = a})
+
+instance GoogleRequest
+         ManagedConfigurationsforDeviceDelete where
+        type Rs ManagedConfigurationsforDeviceDelete = ()
+        type Scopes ManagedConfigurationsforDeviceDelete =
+             '["https://www.googleapis.com/auth/androidenterprise"]
+        requestClient
+          ManagedConfigurationsforDeviceDelete'{..}
+          = go _mcddEnterpriseId _mcddUserId _mcddDeviceId
+              _mcddManagedConfigurationForDeviceId
+              (Just AltJSON)
+              androidEnterpriseService
+          where go
+                  = buildClient
+                      (Proxy ::
+                         Proxy ManagedConfigurationsforDeviceDeleteResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/AndroidEnterprise/ManagedConfigurationsforDevice/Get.hs b/gen/Network/Google/Resource/AndroidEnterprise/ManagedConfigurationsforDevice/Get.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/AndroidEnterprise/ManagedConfigurationsforDevice/Get.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.ManagedConfigurationsforDevice.Get
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Retrieves details of a per-device managed configuration.
+--
+-- /See:/ <https://developers.google.com/android/work/play/emm-api Google Play EMM API Reference> for @androidenterprise.managedconfigurationsfordevice.get@.
+module Network.Google.Resource.AndroidEnterprise.ManagedConfigurationsforDevice.Get
+    (
+    -- * REST Resource
+      ManagedConfigurationsforDeviceGetResource
+
+    -- * Creating a Request
+    , managedConfigurationsforDeviceGet
+    , ManagedConfigurationsforDeviceGet
+
+    -- * Request Lenses
+    , mcdgEnterpriseId
+    , mcdgUserId
+    , mcdgDeviceId
+    , mcdgManagedConfigurationForDeviceId
+    ) where
+
+import           Network.Google.AndroidEnterprise.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @androidenterprise.managedconfigurationsfordevice.get@ method which the
+-- 'ManagedConfigurationsforDeviceGet' request conforms to.
+type ManagedConfigurationsforDeviceGetResource =
+     "androidenterprise" :>
+       "v1" :>
+         "enterprises" :>
+           Capture "enterpriseId" Text :>
+             "users" :>
+               Capture "userId" Text :>
+                 "devices" :>
+                   Capture "deviceId" Text :>
+                     "managedConfigurationsForDevice" :>
+                       Capture "managedConfigurationForDeviceId" Text :>
+                         QueryParam "alt" AltJSON :>
+                           Get '[JSON] ManagedConfiguration
+
+-- | Retrieves details of a per-device managed configuration.
+--
+-- /See:/ 'managedConfigurationsforDeviceGet' smart constructor.
+data ManagedConfigurationsforDeviceGet = ManagedConfigurationsforDeviceGet'
+    { _mcdgEnterpriseId                    :: !Text
+    , _mcdgUserId                          :: !Text
+    , _mcdgDeviceId                        :: !Text
+    , _mcdgManagedConfigurationForDeviceId :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ManagedConfigurationsforDeviceGet' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'mcdgEnterpriseId'
+--
+-- * 'mcdgUserId'
+--
+-- * 'mcdgDeviceId'
+--
+-- * 'mcdgManagedConfigurationForDeviceId'
+managedConfigurationsforDeviceGet
+    :: Text -- ^ 'mcdgEnterpriseId'
+    -> Text -- ^ 'mcdgUserId'
+    -> Text -- ^ 'mcdgDeviceId'
+    -> Text -- ^ 'mcdgManagedConfigurationForDeviceId'
+    -> ManagedConfigurationsforDeviceGet
+managedConfigurationsforDeviceGet pMcdgEnterpriseId_ pMcdgUserId_ pMcdgDeviceId_ pMcdgManagedConfigurationForDeviceId_ =
+    ManagedConfigurationsforDeviceGet'
+    { _mcdgEnterpriseId = pMcdgEnterpriseId_
+    , _mcdgUserId = pMcdgUserId_
+    , _mcdgDeviceId = pMcdgDeviceId_
+    , _mcdgManagedConfigurationForDeviceId = pMcdgManagedConfigurationForDeviceId_
+    }
+
+-- | The ID of the enterprise.
+mcdgEnterpriseId :: Lens' ManagedConfigurationsforDeviceGet Text
+mcdgEnterpriseId
+  = lens _mcdgEnterpriseId
+      (\ s a -> s{_mcdgEnterpriseId = a})
+
+-- | The ID of the user.
+mcdgUserId :: Lens' ManagedConfigurationsforDeviceGet Text
+mcdgUserId
+  = lens _mcdgUserId (\ s a -> s{_mcdgUserId = a})
+
+-- | The Android ID of the device.
+mcdgDeviceId :: Lens' ManagedConfigurationsforDeviceGet Text
+mcdgDeviceId
+  = lens _mcdgDeviceId (\ s a -> s{_mcdgDeviceId = a})
+
+-- | The ID of the managed configuration (a product ID), e.g.
+-- \"app:com.google.android.gm\".
+mcdgManagedConfigurationForDeviceId :: Lens' ManagedConfigurationsforDeviceGet Text
+mcdgManagedConfigurationForDeviceId
+  = lens _mcdgManagedConfigurationForDeviceId
+      (\ s a ->
+         s{_mcdgManagedConfigurationForDeviceId = a})
+
+instance GoogleRequest
+         ManagedConfigurationsforDeviceGet where
+        type Rs ManagedConfigurationsforDeviceGet =
+             ManagedConfiguration
+        type Scopes ManagedConfigurationsforDeviceGet =
+             '["https://www.googleapis.com/auth/androidenterprise"]
+        requestClient ManagedConfigurationsforDeviceGet'{..}
+          = go _mcdgEnterpriseId _mcdgUserId _mcdgDeviceId
+              _mcdgManagedConfigurationForDeviceId
+              (Just AltJSON)
+              androidEnterpriseService
+          where go
+                  = buildClient
+                      (Proxy ::
+                         Proxy ManagedConfigurationsforDeviceGetResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/AndroidEnterprise/ManagedConfigurationsforDevice/List.hs b/gen/Network/Google/Resource/AndroidEnterprise/ManagedConfigurationsforDevice/List.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/AndroidEnterprise/ManagedConfigurationsforDevice/List.hs
@@ -0,0 +1,122 @@
+{-# 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.ManagedConfigurationsforDevice.List
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Lists all the per-device managed configurations for the specified
+-- device. Only the ID is set.
+--
+-- /See:/ <https://developers.google.com/android/work/play/emm-api Google Play EMM API Reference> for @androidenterprise.managedconfigurationsfordevice.list@.
+module Network.Google.Resource.AndroidEnterprise.ManagedConfigurationsforDevice.List
+    (
+    -- * REST Resource
+      ManagedConfigurationsforDeviceListResource
+
+    -- * Creating a Request
+    , managedConfigurationsforDeviceList
+    , ManagedConfigurationsforDeviceList
+
+    -- * Request Lenses
+    , mcdlEnterpriseId
+    , mcdlUserId
+    , mcdlDeviceId
+    ) where
+
+import           Network.Google.AndroidEnterprise.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @androidenterprise.managedconfigurationsfordevice.list@ method which the
+-- 'ManagedConfigurationsforDeviceList' request conforms to.
+type ManagedConfigurationsforDeviceListResource =
+     "androidenterprise" :>
+       "v1" :>
+         "enterprises" :>
+           Capture "enterpriseId" Text :>
+             "users" :>
+               Capture "userId" Text :>
+                 "devices" :>
+                   Capture "deviceId" Text :>
+                     "managedConfigurationsForDevice" :>
+                       QueryParam "alt" AltJSON :>
+                         Get '[JSON]
+                           ManagedConfigurationsForDeviceListResponse
+
+-- | Lists all the per-device managed configurations for the specified
+-- device. Only the ID is set.
+--
+-- /See:/ 'managedConfigurationsforDeviceList' smart constructor.
+data ManagedConfigurationsforDeviceList = ManagedConfigurationsforDeviceList'
+    { _mcdlEnterpriseId :: !Text
+    , _mcdlUserId       :: !Text
+    , _mcdlDeviceId     :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ManagedConfigurationsforDeviceList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'mcdlEnterpriseId'
+--
+-- * 'mcdlUserId'
+--
+-- * 'mcdlDeviceId'
+managedConfigurationsforDeviceList
+    :: Text -- ^ 'mcdlEnterpriseId'
+    -> Text -- ^ 'mcdlUserId'
+    -> Text -- ^ 'mcdlDeviceId'
+    -> ManagedConfigurationsforDeviceList
+managedConfigurationsforDeviceList pMcdlEnterpriseId_ pMcdlUserId_ pMcdlDeviceId_ =
+    ManagedConfigurationsforDeviceList'
+    { _mcdlEnterpriseId = pMcdlEnterpriseId_
+    , _mcdlUserId = pMcdlUserId_
+    , _mcdlDeviceId = pMcdlDeviceId_
+    }
+
+-- | The ID of the enterprise.
+mcdlEnterpriseId :: Lens' ManagedConfigurationsforDeviceList Text
+mcdlEnterpriseId
+  = lens _mcdlEnterpriseId
+      (\ s a -> s{_mcdlEnterpriseId = a})
+
+-- | The ID of the user.
+mcdlUserId :: Lens' ManagedConfigurationsforDeviceList Text
+mcdlUserId
+  = lens _mcdlUserId (\ s a -> s{_mcdlUserId = a})
+
+-- | The Android ID of the device.
+mcdlDeviceId :: Lens' ManagedConfigurationsforDeviceList Text
+mcdlDeviceId
+  = lens _mcdlDeviceId (\ s a -> s{_mcdlDeviceId = a})
+
+instance GoogleRequest
+         ManagedConfigurationsforDeviceList where
+        type Rs ManagedConfigurationsforDeviceList =
+             ManagedConfigurationsForDeviceListResponse
+        type Scopes ManagedConfigurationsforDeviceList =
+             '["https://www.googleapis.com/auth/androidenterprise"]
+        requestClient ManagedConfigurationsforDeviceList'{..}
+          = go _mcdlEnterpriseId _mcdlUserId _mcdlDeviceId
+              (Just AltJSON)
+              androidEnterpriseService
+          where go
+                  = buildClient
+                      (Proxy ::
+                         Proxy ManagedConfigurationsforDeviceListResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/AndroidEnterprise/ManagedConfigurationsforDevice/Patch.hs b/gen/Network/Google/Resource/AndroidEnterprise/ManagedConfigurationsforDevice/Patch.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/AndroidEnterprise/ManagedConfigurationsforDevice/Patch.hs
@@ -0,0 +1,151 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.AndroidEnterprise.ManagedConfigurationsforDevice.Patch
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Adds or updates a per-device managed configuration for an app for the
+-- specified device. This method supports patch semantics.
+--
+-- /See:/ <https://developers.google.com/android/work/play/emm-api Google Play EMM API Reference> for @androidenterprise.managedconfigurationsfordevice.patch@.
+module Network.Google.Resource.AndroidEnterprise.ManagedConfigurationsforDevice.Patch
+    (
+    -- * REST Resource
+      ManagedConfigurationsforDevicePatchResource
+
+    -- * Creating a Request
+    , managedConfigurationsforDevicePatch
+    , ManagedConfigurationsforDevicePatch
+
+    -- * Request Lenses
+    , mcdpEnterpriseId
+    , mcdpPayload
+    , mcdpUserId
+    , mcdpDeviceId
+    , mcdpManagedConfigurationForDeviceId
+    ) where
+
+import           Network.Google.AndroidEnterprise.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @androidenterprise.managedconfigurationsfordevice.patch@ method which the
+-- 'ManagedConfigurationsforDevicePatch' request conforms to.
+type ManagedConfigurationsforDevicePatchResource =
+     "androidenterprise" :>
+       "v1" :>
+         "enterprises" :>
+           Capture "enterpriseId" Text :>
+             "users" :>
+               Capture "userId" Text :>
+                 "devices" :>
+                   Capture "deviceId" Text :>
+                     "managedConfigurationsForDevice" :>
+                       Capture "managedConfigurationForDeviceId" Text :>
+                         QueryParam "alt" AltJSON :>
+                           ReqBody '[JSON] ManagedConfiguration :>
+                             Patch '[JSON] ManagedConfiguration
+
+-- | Adds or updates a per-device managed configuration for an app for the
+-- specified device. This method supports patch semantics.
+--
+-- /See:/ 'managedConfigurationsforDevicePatch' smart constructor.
+data ManagedConfigurationsforDevicePatch = ManagedConfigurationsforDevicePatch'
+    { _mcdpEnterpriseId                    :: !Text
+    , _mcdpPayload                         :: !ManagedConfiguration
+    , _mcdpUserId                          :: !Text
+    , _mcdpDeviceId                        :: !Text
+    , _mcdpManagedConfigurationForDeviceId :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ManagedConfigurationsforDevicePatch' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'mcdpEnterpriseId'
+--
+-- * 'mcdpPayload'
+--
+-- * 'mcdpUserId'
+--
+-- * 'mcdpDeviceId'
+--
+-- * 'mcdpManagedConfigurationForDeviceId'
+managedConfigurationsforDevicePatch
+    :: Text -- ^ 'mcdpEnterpriseId'
+    -> ManagedConfiguration -- ^ 'mcdpPayload'
+    -> Text -- ^ 'mcdpUserId'
+    -> Text -- ^ 'mcdpDeviceId'
+    -> Text -- ^ 'mcdpManagedConfigurationForDeviceId'
+    -> ManagedConfigurationsforDevicePatch
+managedConfigurationsforDevicePatch pMcdpEnterpriseId_ pMcdpPayload_ pMcdpUserId_ pMcdpDeviceId_ pMcdpManagedConfigurationForDeviceId_ =
+    ManagedConfigurationsforDevicePatch'
+    { _mcdpEnterpriseId = pMcdpEnterpriseId_
+    , _mcdpPayload = pMcdpPayload_
+    , _mcdpUserId = pMcdpUserId_
+    , _mcdpDeviceId = pMcdpDeviceId_
+    , _mcdpManagedConfigurationForDeviceId = pMcdpManagedConfigurationForDeviceId_
+    }
+
+-- | The ID of the enterprise.
+mcdpEnterpriseId :: Lens' ManagedConfigurationsforDevicePatch Text
+mcdpEnterpriseId
+  = lens _mcdpEnterpriseId
+      (\ s a -> s{_mcdpEnterpriseId = a})
+
+-- | Multipart request metadata.
+mcdpPayload :: Lens' ManagedConfigurationsforDevicePatch ManagedConfiguration
+mcdpPayload
+  = lens _mcdpPayload (\ s a -> s{_mcdpPayload = a})
+
+-- | The ID of the user.
+mcdpUserId :: Lens' ManagedConfigurationsforDevicePatch Text
+mcdpUserId
+  = lens _mcdpUserId (\ s a -> s{_mcdpUserId = a})
+
+-- | The Android ID of the device.
+mcdpDeviceId :: Lens' ManagedConfigurationsforDevicePatch Text
+mcdpDeviceId
+  = lens _mcdpDeviceId (\ s a -> s{_mcdpDeviceId = a})
+
+-- | The ID of the managed configuration (a product ID), e.g.
+-- \"app:com.google.android.gm\".
+mcdpManagedConfigurationForDeviceId :: Lens' ManagedConfigurationsforDevicePatch Text
+mcdpManagedConfigurationForDeviceId
+  = lens _mcdpManagedConfigurationForDeviceId
+      (\ s a ->
+         s{_mcdpManagedConfigurationForDeviceId = a})
+
+instance GoogleRequest
+         ManagedConfigurationsforDevicePatch where
+        type Rs ManagedConfigurationsforDevicePatch =
+             ManagedConfiguration
+        type Scopes ManagedConfigurationsforDevicePatch =
+             '["https://www.googleapis.com/auth/androidenterprise"]
+        requestClient
+          ManagedConfigurationsforDevicePatch'{..}
+          = go _mcdpEnterpriseId _mcdpUserId _mcdpDeviceId
+              _mcdpManagedConfigurationForDeviceId
+              (Just AltJSON)
+              _mcdpPayload
+              androidEnterpriseService
+          where go
+                  = buildClient
+                      (Proxy ::
+                         Proxy ManagedConfigurationsforDevicePatchResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/AndroidEnterprise/ManagedConfigurationsforDevice/Update.hs b/gen/Network/Google/Resource/AndroidEnterprise/ManagedConfigurationsforDevice/Update.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/AndroidEnterprise/ManagedConfigurationsforDevice/Update.hs
@@ -0,0 +1,151 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.AndroidEnterprise.ManagedConfigurationsforDevice.Update
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Adds or updates a per-device managed configuration for an app for the
+-- specified device.
+--
+-- /See:/ <https://developers.google.com/android/work/play/emm-api Google Play EMM API Reference> for @androidenterprise.managedconfigurationsfordevice.update@.
+module Network.Google.Resource.AndroidEnterprise.ManagedConfigurationsforDevice.Update
+    (
+    -- * REST Resource
+      ManagedConfigurationsforDeviceUpdateResource
+
+    -- * Creating a Request
+    , managedConfigurationsforDeviceUpdate
+    , ManagedConfigurationsforDeviceUpdate
+
+    -- * Request Lenses
+    , mcduEnterpriseId
+    , mcduPayload
+    , mcduUserId
+    , mcduDeviceId
+    , mcduManagedConfigurationForDeviceId
+    ) where
+
+import           Network.Google.AndroidEnterprise.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @androidenterprise.managedconfigurationsfordevice.update@ method which the
+-- 'ManagedConfigurationsforDeviceUpdate' request conforms to.
+type ManagedConfigurationsforDeviceUpdateResource =
+     "androidenterprise" :>
+       "v1" :>
+         "enterprises" :>
+           Capture "enterpriseId" Text :>
+             "users" :>
+               Capture "userId" Text :>
+                 "devices" :>
+                   Capture "deviceId" Text :>
+                     "managedConfigurationsForDevice" :>
+                       Capture "managedConfigurationForDeviceId" Text :>
+                         QueryParam "alt" AltJSON :>
+                           ReqBody '[JSON] ManagedConfiguration :>
+                             Put '[JSON] ManagedConfiguration
+
+-- | Adds or updates a per-device managed configuration for an app for the
+-- specified device.
+--
+-- /See:/ 'managedConfigurationsforDeviceUpdate' smart constructor.
+data ManagedConfigurationsforDeviceUpdate = ManagedConfigurationsforDeviceUpdate'
+    { _mcduEnterpriseId                    :: !Text
+    , _mcduPayload                         :: !ManagedConfiguration
+    , _mcduUserId                          :: !Text
+    , _mcduDeviceId                        :: !Text
+    , _mcduManagedConfigurationForDeviceId :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ManagedConfigurationsforDeviceUpdate' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'mcduEnterpriseId'
+--
+-- * 'mcduPayload'
+--
+-- * 'mcduUserId'
+--
+-- * 'mcduDeviceId'
+--
+-- * 'mcduManagedConfigurationForDeviceId'
+managedConfigurationsforDeviceUpdate
+    :: Text -- ^ 'mcduEnterpriseId'
+    -> ManagedConfiguration -- ^ 'mcduPayload'
+    -> Text -- ^ 'mcduUserId'
+    -> Text -- ^ 'mcduDeviceId'
+    -> Text -- ^ 'mcduManagedConfigurationForDeviceId'
+    -> ManagedConfigurationsforDeviceUpdate
+managedConfigurationsforDeviceUpdate pMcduEnterpriseId_ pMcduPayload_ pMcduUserId_ pMcduDeviceId_ pMcduManagedConfigurationForDeviceId_ =
+    ManagedConfigurationsforDeviceUpdate'
+    { _mcduEnterpriseId = pMcduEnterpriseId_
+    , _mcduPayload = pMcduPayload_
+    , _mcduUserId = pMcduUserId_
+    , _mcduDeviceId = pMcduDeviceId_
+    , _mcduManagedConfigurationForDeviceId = pMcduManagedConfigurationForDeviceId_
+    }
+
+-- | The ID of the enterprise.
+mcduEnterpriseId :: Lens' ManagedConfigurationsforDeviceUpdate Text
+mcduEnterpriseId
+  = lens _mcduEnterpriseId
+      (\ s a -> s{_mcduEnterpriseId = a})
+
+-- | Multipart request metadata.
+mcduPayload :: Lens' ManagedConfigurationsforDeviceUpdate ManagedConfiguration
+mcduPayload
+  = lens _mcduPayload (\ s a -> s{_mcduPayload = a})
+
+-- | The ID of the user.
+mcduUserId :: Lens' ManagedConfigurationsforDeviceUpdate Text
+mcduUserId
+  = lens _mcduUserId (\ s a -> s{_mcduUserId = a})
+
+-- | The Android ID of the device.
+mcduDeviceId :: Lens' ManagedConfigurationsforDeviceUpdate Text
+mcduDeviceId
+  = lens _mcduDeviceId (\ s a -> s{_mcduDeviceId = a})
+
+-- | The ID of the managed configuration (a product ID), e.g.
+-- \"app:com.google.android.gm\".
+mcduManagedConfigurationForDeviceId :: Lens' ManagedConfigurationsforDeviceUpdate Text
+mcduManagedConfigurationForDeviceId
+  = lens _mcduManagedConfigurationForDeviceId
+      (\ s a ->
+         s{_mcduManagedConfigurationForDeviceId = a})
+
+instance GoogleRequest
+         ManagedConfigurationsforDeviceUpdate where
+        type Rs ManagedConfigurationsforDeviceUpdate =
+             ManagedConfiguration
+        type Scopes ManagedConfigurationsforDeviceUpdate =
+             '["https://www.googleapis.com/auth/androidenterprise"]
+        requestClient
+          ManagedConfigurationsforDeviceUpdate'{..}
+          = go _mcduEnterpriseId _mcduUserId _mcduDeviceId
+              _mcduManagedConfigurationForDeviceId
+              (Just AltJSON)
+              _mcduPayload
+              androidEnterpriseService
+          where go
+                  = buildClient
+                      (Proxy ::
+                         Proxy ManagedConfigurationsforDeviceUpdateResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/AndroidEnterprise/ManagedConfigurationsforUser/Delete.hs b/gen/Network/Google/Resource/AndroidEnterprise/ManagedConfigurationsforUser/Delete.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/AndroidEnterprise/ManagedConfigurationsforUser/Delete.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.ManagedConfigurationsforUser.Delete
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Removes a per-user managed configuration for an app for the specified
+-- user.
+--
+-- /See:/ <https://developers.google.com/android/work/play/emm-api Google Play EMM API Reference> for @androidenterprise.managedconfigurationsforuser.delete@.
+module Network.Google.Resource.AndroidEnterprise.ManagedConfigurationsforUser.Delete
+    (
+    -- * REST Resource
+      ManagedConfigurationsforUserDeleteResource
+
+    -- * Creating a Request
+    , managedConfigurationsforUserDelete
+    , ManagedConfigurationsforUserDelete
+
+    -- * Request Lenses
+    , mcudEnterpriseId
+    , mcudUserId
+    , mcudManagedConfigurationForUserId
+    ) where
+
+import           Network.Google.AndroidEnterprise.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @androidenterprise.managedconfigurationsforuser.delete@ method which the
+-- 'ManagedConfigurationsforUserDelete' request conforms to.
+type ManagedConfigurationsforUserDeleteResource =
+     "androidenterprise" :>
+       "v1" :>
+         "enterprises" :>
+           Capture "enterpriseId" Text :>
+             "users" :>
+               Capture "userId" Text :>
+                 "managedConfigurationsForUser" :>
+                   Capture "managedConfigurationForUserId" Text :>
+                     QueryParam "alt" AltJSON :> Delete '[JSON] ()
+
+-- | Removes a per-user managed configuration for an app for the specified
+-- user.
+--
+-- /See:/ 'managedConfigurationsforUserDelete' smart constructor.
+data ManagedConfigurationsforUserDelete = ManagedConfigurationsforUserDelete'
+    { _mcudEnterpriseId                  :: !Text
+    , _mcudUserId                        :: !Text
+    , _mcudManagedConfigurationForUserId :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ManagedConfigurationsforUserDelete' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'mcudEnterpriseId'
+--
+-- * 'mcudUserId'
+--
+-- * 'mcudManagedConfigurationForUserId'
+managedConfigurationsforUserDelete
+    :: Text -- ^ 'mcudEnterpriseId'
+    -> Text -- ^ 'mcudUserId'
+    -> Text -- ^ 'mcudManagedConfigurationForUserId'
+    -> ManagedConfigurationsforUserDelete
+managedConfigurationsforUserDelete pMcudEnterpriseId_ pMcudUserId_ pMcudManagedConfigurationForUserId_ =
+    ManagedConfigurationsforUserDelete'
+    { _mcudEnterpriseId = pMcudEnterpriseId_
+    , _mcudUserId = pMcudUserId_
+    , _mcudManagedConfigurationForUserId = pMcudManagedConfigurationForUserId_
+    }
+
+-- | The ID of the enterprise.
+mcudEnterpriseId :: Lens' ManagedConfigurationsforUserDelete Text
+mcudEnterpriseId
+  = lens _mcudEnterpriseId
+      (\ s a -> s{_mcudEnterpriseId = a})
+
+-- | The ID of the user.
+mcudUserId :: Lens' ManagedConfigurationsforUserDelete Text
+mcudUserId
+  = lens _mcudUserId (\ s a -> s{_mcudUserId = a})
+
+-- | The ID of the managed configuration (a product ID), e.g.
+-- \"app:com.google.android.gm\".
+mcudManagedConfigurationForUserId :: Lens' ManagedConfigurationsforUserDelete Text
+mcudManagedConfigurationForUserId
+  = lens _mcudManagedConfigurationForUserId
+      (\ s a -> s{_mcudManagedConfigurationForUserId = a})
+
+instance GoogleRequest
+         ManagedConfigurationsforUserDelete where
+        type Rs ManagedConfigurationsforUserDelete = ()
+        type Scopes ManagedConfigurationsforUserDelete =
+             '["https://www.googleapis.com/auth/androidenterprise"]
+        requestClient ManagedConfigurationsforUserDelete'{..}
+          = go _mcudEnterpriseId _mcudUserId
+              _mcudManagedConfigurationForUserId
+              (Just AltJSON)
+              androidEnterpriseService
+          where go
+                  = buildClient
+                      (Proxy ::
+                         Proxy ManagedConfigurationsforUserDeleteResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/AndroidEnterprise/ManagedConfigurationsforUser/Get.hs b/gen/Network/Google/Resource/AndroidEnterprise/ManagedConfigurationsforUser/Get.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/AndroidEnterprise/ManagedConfigurationsforUser/Get.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.ManagedConfigurationsforUser.Get
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Retrieves details of a per-user managed configuration for an app for the
+-- specified user.
+--
+-- /See:/ <https://developers.google.com/android/work/play/emm-api Google Play EMM API Reference> for @androidenterprise.managedconfigurationsforuser.get@.
+module Network.Google.Resource.AndroidEnterprise.ManagedConfigurationsforUser.Get
+    (
+    -- * REST Resource
+      ManagedConfigurationsforUserGetResource
+
+    -- * Creating a Request
+    , managedConfigurationsforUserGet
+    , ManagedConfigurationsforUserGet
+
+    -- * Request Lenses
+    , mcugEnterpriseId
+    , mcugUserId
+    , mcugManagedConfigurationForUserId
+    ) where
+
+import           Network.Google.AndroidEnterprise.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @androidenterprise.managedconfigurationsforuser.get@ method which the
+-- 'ManagedConfigurationsforUserGet' request conforms to.
+type ManagedConfigurationsforUserGetResource =
+     "androidenterprise" :>
+       "v1" :>
+         "enterprises" :>
+           Capture "enterpriseId" Text :>
+             "users" :>
+               Capture "userId" Text :>
+                 "managedConfigurationsForUser" :>
+                   Capture "managedConfigurationForUserId" Text :>
+                     QueryParam "alt" AltJSON :>
+                       Get '[JSON] ManagedConfiguration
+
+-- | Retrieves details of a per-user managed configuration for an app for the
+-- specified user.
+--
+-- /See:/ 'managedConfigurationsforUserGet' smart constructor.
+data ManagedConfigurationsforUserGet = ManagedConfigurationsforUserGet'
+    { _mcugEnterpriseId                  :: !Text
+    , _mcugUserId                        :: !Text
+    , _mcugManagedConfigurationForUserId :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ManagedConfigurationsforUserGet' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'mcugEnterpriseId'
+--
+-- * 'mcugUserId'
+--
+-- * 'mcugManagedConfigurationForUserId'
+managedConfigurationsforUserGet
+    :: Text -- ^ 'mcugEnterpriseId'
+    -> Text -- ^ 'mcugUserId'
+    -> Text -- ^ 'mcugManagedConfigurationForUserId'
+    -> ManagedConfigurationsforUserGet
+managedConfigurationsforUserGet pMcugEnterpriseId_ pMcugUserId_ pMcugManagedConfigurationForUserId_ =
+    ManagedConfigurationsforUserGet'
+    { _mcugEnterpriseId = pMcugEnterpriseId_
+    , _mcugUserId = pMcugUserId_
+    , _mcugManagedConfigurationForUserId = pMcugManagedConfigurationForUserId_
+    }
+
+-- | The ID of the enterprise.
+mcugEnterpriseId :: Lens' ManagedConfigurationsforUserGet Text
+mcugEnterpriseId
+  = lens _mcugEnterpriseId
+      (\ s a -> s{_mcugEnterpriseId = a})
+
+-- | The ID of the user.
+mcugUserId :: Lens' ManagedConfigurationsforUserGet Text
+mcugUserId
+  = lens _mcugUserId (\ s a -> s{_mcugUserId = a})
+
+-- | The ID of the managed configuration (a product ID), e.g.
+-- \"app:com.google.android.gm\".
+mcugManagedConfigurationForUserId :: Lens' ManagedConfigurationsforUserGet Text
+mcugManagedConfigurationForUserId
+  = lens _mcugManagedConfigurationForUserId
+      (\ s a -> s{_mcugManagedConfigurationForUserId = a})
+
+instance GoogleRequest
+         ManagedConfigurationsforUserGet where
+        type Rs ManagedConfigurationsforUserGet =
+             ManagedConfiguration
+        type Scopes ManagedConfigurationsforUserGet =
+             '["https://www.googleapis.com/auth/androidenterprise"]
+        requestClient ManagedConfigurationsforUserGet'{..}
+          = go _mcugEnterpriseId _mcugUserId
+              _mcugManagedConfigurationForUserId
+              (Just AltJSON)
+              androidEnterpriseService
+          where go
+                  = buildClient
+                      (Proxy ::
+                         Proxy ManagedConfigurationsforUserGetResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/AndroidEnterprise/ManagedConfigurationsforUser/List.hs b/gen/Network/Google/Resource/AndroidEnterprise/ManagedConfigurationsforUser/List.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/AndroidEnterprise/ManagedConfigurationsforUser/List.hs
@@ -0,0 +1,107 @@
+{-# 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.ManagedConfigurationsforUser.List
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Lists all the per-user managed configurations for the specified user.
+-- Only the ID is set.
+--
+-- /See:/ <https://developers.google.com/android/work/play/emm-api Google Play EMM API Reference> for @androidenterprise.managedconfigurationsforuser.list@.
+module Network.Google.Resource.AndroidEnterprise.ManagedConfigurationsforUser.List
+    (
+    -- * REST Resource
+      ManagedConfigurationsforUserListResource
+
+    -- * Creating a Request
+    , managedConfigurationsforUserList
+    , ManagedConfigurationsforUserList
+
+    -- * Request Lenses
+    , mculEnterpriseId
+    , mculUserId
+    ) where
+
+import           Network.Google.AndroidEnterprise.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @androidenterprise.managedconfigurationsforuser.list@ method which the
+-- 'ManagedConfigurationsforUserList' request conforms to.
+type ManagedConfigurationsforUserListResource =
+     "androidenterprise" :>
+       "v1" :>
+         "enterprises" :>
+           Capture "enterpriseId" Text :>
+             "users" :>
+               Capture "userId" Text :>
+                 "managedConfigurationsForUser" :>
+                   QueryParam "alt" AltJSON :>
+                     Get '[JSON] ManagedConfigurationsForUserListResponse
+
+-- | Lists all the per-user managed configurations for the specified user.
+-- Only the ID is set.
+--
+-- /See:/ 'managedConfigurationsforUserList' smart constructor.
+data ManagedConfigurationsforUserList = ManagedConfigurationsforUserList'
+    { _mculEnterpriseId :: !Text
+    , _mculUserId       :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ManagedConfigurationsforUserList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'mculEnterpriseId'
+--
+-- * 'mculUserId'
+managedConfigurationsforUserList
+    :: Text -- ^ 'mculEnterpriseId'
+    -> Text -- ^ 'mculUserId'
+    -> ManagedConfigurationsforUserList
+managedConfigurationsforUserList pMculEnterpriseId_ pMculUserId_ =
+    ManagedConfigurationsforUserList'
+    { _mculEnterpriseId = pMculEnterpriseId_
+    , _mculUserId = pMculUserId_
+    }
+
+-- | The ID of the enterprise.
+mculEnterpriseId :: Lens' ManagedConfigurationsforUserList Text
+mculEnterpriseId
+  = lens _mculEnterpriseId
+      (\ s a -> s{_mculEnterpriseId = a})
+
+-- | The ID of the user.
+mculUserId :: Lens' ManagedConfigurationsforUserList Text
+mculUserId
+  = lens _mculUserId (\ s a -> s{_mculUserId = a})
+
+instance GoogleRequest
+         ManagedConfigurationsforUserList where
+        type Rs ManagedConfigurationsforUserList =
+             ManagedConfigurationsForUserListResponse
+        type Scopes ManagedConfigurationsforUserList =
+             '["https://www.googleapis.com/auth/androidenterprise"]
+        requestClient ManagedConfigurationsforUserList'{..}
+          = go _mculEnterpriseId _mculUserId (Just AltJSON)
+              androidEnterpriseService
+          where go
+                  = buildClient
+                      (Proxy ::
+                         Proxy ManagedConfigurationsforUserListResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/AndroidEnterprise/ManagedConfigurationsforUser/Patch.hs b/gen/Network/Google/Resource/AndroidEnterprise/ManagedConfigurationsforUser/Patch.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/AndroidEnterprise/ManagedConfigurationsforUser/Patch.hs
@@ -0,0 +1,136 @@
+{-# 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.ManagedConfigurationsforUser.Patch
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Adds or updates a per-user managed configuration for an app for the
+-- specified user. This method supports patch semantics.
+--
+-- /See:/ <https://developers.google.com/android/work/play/emm-api Google Play EMM API Reference> for @androidenterprise.managedconfigurationsforuser.patch@.
+module Network.Google.Resource.AndroidEnterprise.ManagedConfigurationsforUser.Patch
+    (
+    -- * REST Resource
+      ManagedConfigurationsforUserPatchResource
+
+    -- * Creating a Request
+    , managedConfigurationsforUserPatch
+    , ManagedConfigurationsforUserPatch
+
+    -- * Request Lenses
+    , mcupEnterpriseId
+    , mcupPayload
+    , mcupUserId
+    , mcupManagedConfigurationForUserId
+    ) where
+
+import           Network.Google.AndroidEnterprise.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @androidenterprise.managedconfigurationsforuser.patch@ method which the
+-- 'ManagedConfigurationsforUserPatch' request conforms to.
+type ManagedConfigurationsforUserPatchResource =
+     "androidenterprise" :>
+       "v1" :>
+         "enterprises" :>
+           Capture "enterpriseId" Text :>
+             "users" :>
+               Capture "userId" Text :>
+                 "managedConfigurationsForUser" :>
+                   Capture "managedConfigurationForUserId" Text :>
+                     QueryParam "alt" AltJSON :>
+                       ReqBody '[JSON] ManagedConfiguration :>
+                         Patch '[JSON] ManagedConfiguration
+
+-- | Adds or updates a per-user managed configuration for an app for the
+-- specified user. This method supports patch semantics.
+--
+-- /See:/ 'managedConfigurationsforUserPatch' smart constructor.
+data ManagedConfigurationsforUserPatch = ManagedConfigurationsforUserPatch'
+    { _mcupEnterpriseId                  :: !Text
+    , _mcupPayload                       :: !ManagedConfiguration
+    , _mcupUserId                        :: !Text
+    , _mcupManagedConfigurationForUserId :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ManagedConfigurationsforUserPatch' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'mcupEnterpriseId'
+--
+-- * 'mcupPayload'
+--
+-- * 'mcupUserId'
+--
+-- * 'mcupManagedConfigurationForUserId'
+managedConfigurationsforUserPatch
+    :: Text -- ^ 'mcupEnterpriseId'
+    -> ManagedConfiguration -- ^ 'mcupPayload'
+    -> Text -- ^ 'mcupUserId'
+    -> Text -- ^ 'mcupManagedConfigurationForUserId'
+    -> ManagedConfigurationsforUserPatch
+managedConfigurationsforUserPatch pMcupEnterpriseId_ pMcupPayload_ pMcupUserId_ pMcupManagedConfigurationForUserId_ =
+    ManagedConfigurationsforUserPatch'
+    { _mcupEnterpriseId = pMcupEnterpriseId_
+    , _mcupPayload = pMcupPayload_
+    , _mcupUserId = pMcupUserId_
+    , _mcupManagedConfigurationForUserId = pMcupManagedConfigurationForUserId_
+    }
+
+-- | The ID of the enterprise.
+mcupEnterpriseId :: Lens' ManagedConfigurationsforUserPatch Text
+mcupEnterpriseId
+  = lens _mcupEnterpriseId
+      (\ s a -> s{_mcupEnterpriseId = a})
+
+-- | Multipart request metadata.
+mcupPayload :: Lens' ManagedConfigurationsforUserPatch ManagedConfiguration
+mcupPayload
+  = lens _mcupPayload (\ s a -> s{_mcupPayload = a})
+
+-- | The ID of the user.
+mcupUserId :: Lens' ManagedConfigurationsforUserPatch Text
+mcupUserId
+  = lens _mcupUserId (\ s a -> s{_mcupUserId = a})
+
+-- | The ID of the managed configuration (a product ID), e.g.
+-- \"app:com.google.android.gm\".
+mcupManagedConfigurationForUserId :: Lens' ManagedConfigurationsforUserPatch Text
+mcupManagedConfigurationForUserId
+  = lens _mcupManagedConfigurationForUserId
+      (\ s a -> s{_mcupManagedConfigurationForUserId = a})
+
+instance GoogleRequest
+         ManagedConfigurationsforUserPatch where
+        type Rs ManagedConfigurationsforUserPatch =
+             ManagedConfiguration
+        type Scopes ManagedConfigurationsforUserPatch =
+             '["https://www.googleapis.com/auth/androidenterprise"]
+        requestClient ManagedConfigurationsforUserPatch'{..}
+          = go _mcupEnterpriseId _mcupUserId
+              _mcupManagedConfigurationForUserId
+              (Just AltJSON)
+              _mcupPayload
+              androidEnterpriseService
+          where go
+                  = buildClient
+                      (Proxy ::
+                         Proxy ManagedConfigurationsforUserPatchResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/AndroidEnterprise/ManagedConfigurationsforUser/Update.hs b/gen/Network/Google/Resource/AndroidEnterprise/ManagedConfigurationsforUser/Update.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/AndroidEnterprise/ManagedConfigurationsforUser/Update.hs
@@ -0,0 +1,136 @@
+{-# 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.ManagedConfigurationsforUser.Update
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Adds or updates a per-user managed configuration for an app for the
+-- specified user.
+--
+-- /See:/ <https://developers.google.com/android/work/play/emm-api Google Play EMM API Reference> for @androidenterprise.managedconfigurationsforuser.update@.
+module Network.Google.Resource.AndroidEnterprise.ManagedConfigurationsforUser.Update
+    (
+    -- * REST Resource
+      ManagedConfigurationsforUserUpdateResource
+
+    -- * Creating a Request
+    , managedConfigurationsforUserUpdate
+    , ManagedConfigurationsforUserUpdate
+
+    -- * Request Lenses
+    , mcuuEnterpriseId
+    , mcuuPayload
+    , mcuuUserId
+    , mcuuManagedConfigurationForUserId
+    ) where
+
+import           Network.Google.AndroidEnterprise.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @androidenterprise.managedconfigurationsforuser.update@ method which the
+-- 'ManagedConfigurationsforUserUpdate' request conforms to.
+type ManagedConfigurationsforUserUpdateResource =
+     "androidenterprise" :>
+       "v1" :>
+         "enterprises" :>
+           Capture "enterpriseId" Text :>
+             "users" :>
+               Capture "userId" Text :>
+                 "managedConfigurationsForUser" :>
+                   Capture "managedConfigurationForUserId" Text :>
+                     QueryParam "alt" AltJSON :>
+                       ReqBody '[JSON] ManagedConfiguration :>
+                         Put '[JSON] ManagedConfiguration
+
+-- | Adds or updates a per-user managed configuration for an app for the
+-- specified user.
+--
+-- /See:/ 'managedConfigurationsforUserUpdate' smart constructor.
+data ManagedConfigurationsforUserUpdate = ManagedConfigurationsforUserUpdate'
+    { _mcuuEnterpriseId                  :: !Text
+    , _mcuuPayload                       :: !ManagedConfiguration
+    , _mcuuUserId                        :: !Text
+    , _mcuuManagedConfigurationForUserId :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ManagedConfigurationsforUserUpdate' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'mcuuEnterpriseId'
+--
+-- * 'mcuuPayload'
+--
+-- * 'mcuuUserId'
+--
+-- * 'mcuuManagedConfigurationForUserId'
+managedConfigurationsforUserUpdate
+    :: Text -- ^ 'mcuuEnterpriseId'
+    -> ManagedConfiguration -- ^ 'mcuuPayload'
+    -> Text -- ^ 'mcuuUserId'
+    -> Text -- ^ 'mcuuManagedConfigurationForUserId'
+    -> ManagedConfigurationsforUserUpdate
+managedConfigurationsforUserUpdate pMcuuEnterpriseId_ pMcuuPayload_ pMcuuUserId_ pMcuuManagedConfigurationForUserId_ =
+    ManagedConfigurationsforUserUpdate'
+    { _mcuuEnterpriseId = pMcuuEnterpriseId_
+    , _mcuuPayload = pMcuuPayload_
+    , _mcuuUserId = pMcuuUserId_
+    , _mcuuManagedConfigurationForUserId = pMcuuManagedConfigurationForUserId_
+    }
+
+-- | The ID of the enterprise.
+mcuuEnterpriseId :: Lens' ManagedConfigurationsforUserUpdate Text
+mcuuEnterpriseId
+  = lens _mcuuEnterpriseId
+      (\ s a -> s{_mcuuEnterpriseId = a})
+
+-- | Multipart request metadata.
+mcuuPayload :: Lens' ManagedConfigurationsforUserUpdate ManagedConfiguration
+mcuuPayload
+  = lens _mcuuPayload (\ s a -> s{_mcuuPayload = a})
+
+-- | The ID of the user.
+mcuuUserId :: Lens' ManagedConfigurationsforUserUpdate Text
+mcuuUserId
+  = lens _mcuuUserId (\ s a -> s{_mcuuUserId = a})
+
+-- | The ID of the managed configuration (a product ID), e.g.
+-- \"app:com.google.android.gm\".
+mcuuManagedConfigurationForUserId :: Lens' ManagedConfigurationsforUserUpdate Text
+mcuuManagedConfigurationForUserId
+  = lens _mcuuManagedConfigurationForUserId
+      (\ s a -> s{_mcuuManagedConfigurationForUserId = a})
+
+instance GoogleRequest
+         ManagedConfigurationsforUserUpdate where
+        type Rs ManagedConfigurationsforUserUpdate =
+             ManagedConfiguration
+        type Scopes ManagedConfigurationsforUserUpdate =
+             '["https://www.googleapis.com/auth/androidenterprise"]
+        requestClient ManagedConfigurationsforUserUpdate'{..}
+          = go _mcuuEnterpriseId _mcuuUserId
+              _mcuuManagedConfigurationForUserId
+              (Just AltJSON)
+              _mcuuPayload
+              androidEnterpriseService
+          where go
+                  = buildClient
+                      (Proxy ::
+                         Proxy ManagedConfigurationsforUserUpdateResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/AndroidEnterprise/Products/GetAppRestrictionsSchema.hs b/gen/Network/Google/Resource/AndroidEnterprise/Products/GetAppRestrictionsSchema.hs
--- a/gen/Network/Google/Resource/AndroidEnterprise/Products/GetAppRestrictionsSchema.hs
+++ b/gen/Network/Google/Resource/AndroidEnterprise/Products/GetAppRestrictionsSchema.hs
@@ -20,9 +20,12 @@
 -- 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.
+-- Retrieves the schema that defines the configurable properties for this
+-- product. All products have a schema, but this schema may be empty if no
+-- managed configurations have been defined. This schema can be used to
+-- populate a UI that allows an administrator to configure the product. To
+-- apply a managed configuration based on the schema obtained using this
+-- API, see Managed Configurations through Play.
 --
 -- /See:/ <https://developers.google.com/android/work/play/emm-api Google Play EMM API Reference> for @androidenterprise.products.getAppRestrictionsSchema@.
 module Network.Google.Resource.AndroidEnterprise.Products.GetAppRestrictionsSchema
@@ -57,9 +60,12 @@
                      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.
+-- | Retrieves the schema that defines the configurable properties for this
+-- product. All products have a schema, but this schema may be empty if no
+-- managed configurations have been defined. This schema can be used to
+-- populate a UI that allows an administrator to configure the product. To
+-- apply a managed configuration based on the schema obtained using this
+-- API, see Managed Configurations through Play.
 --
 -- /See:/ 'productsGetAppRestrictionsSchema' smart constructor.
 data ProductsGetAppRestrictionsSchema = ProductsGetAppRestrictionsSchema'
diff --git a/gen/Network/Google/Resource/AndroidEnterprise/Products/List.hs b/gen/Network/Google/Resource/AndroidEnterprise/Products/List.hs
--- a/gen/Network/Google/Resource/AndroidEnterprise/Products/List.hs
+++ b/gen/Network/Google/Resource/AndroidEnterprise/Products/List.hs
@@ -20,7 +20,8 @@
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Finds approved products that match a query.
+-- Finds approved products that match a query, or all approved products if
+-- there is no query.
 --
 -- /See:/ <https://developers.google.com/android/work/play/emm-api Google Play EMM API Reference> for @androidenterprise.products.list@.
 module Network.Google.Resource.AndroidEnterprise.Products.List
@@ -60,7 +61,8 @@
                          QueryParam "alt" AltJSON :>
                            Get '[JSON] ProductsListResponse
 
--- | Finds approved products that match a query.
+-- | Finds approved products that match a query, or all approved products if
+-- there is no query.
 --
 -- /See:/ 'productsList' smart constructor.
 data ProductsList = ProductsList'
@@ -115,7 +117,8 @@
 
 -- | The search query as typed in the Google Play Store search box. If
 -- omitted, all approved apps will be returned (using the pagination
--- parameters).
+-- parameters), including apps that are not available in the store (e.g.
+-- unpublished apps).
 plQuery :: Lens' ProductsList (Maybe Text)
 plQuery = lens _plQuery (\ s a -> s{_plQuery = a})
 
diff --git a/gen/Network/Google/Resource/AndroidEnterprise/Products/UnApprove.hs b/gen/Network/Google/Resource/AndroidEnterprise/Products/UnApprove.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/AndroidEnterprise/Products/UnApprove.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.Products.UnApprove
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Unapproves the specified product (and the relevant app permissions, if
+-- any)
+--
+-- /See:/ <https://developers.google.com/android/work/play/emm-api Google Play EMM API Reference> for @androidenterprise.products.unapprove@.
+module Network.Google.Resource.AndroidEnterprise.Products.UnApprove
+    (
+    -- * REST Resource
+      ProductsUnApproveResource
+
+    -- * Creating a Request
+    , productsUnApprove
+    , ProductsUnApprove
+
+    -- * Request Lenses
+    , puaEnterpriseId
+    , puaProductId
+    ) where
+
+import           Network.Google.AndroidEnterprise.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @androidenterprise.products.unapprove@ method which the
+-- 'ProductsUnApprove' request conforms to.
+type ProductsUnApproveResource =
+     "androidenterprise" :>
+       "v1" :>
+         "enterprises" :>
+           Capture "enterpriseId" Text :>
+             "products" :>
+               Capture "productId" Text :>
+                 "unapprove" :>
+                   QueryParam "alt" AltJSON :> Post '[JSON] ()
+
+-- | Unapproves the specified product (and the relevant app permissions, if
+-- any)
+--
+-- /See:/ 'productsUnApprove' smart constructor.
+data ProductsUnApprove = ProductsUnApprove'
+    { _puaEnterpriseId :: !Text
+    , _puaProductId    :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ProductsUnApprove' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'puaEnterpriseId'
+--
+-- * 'puaProductId'
+productsUnApprove
+    :: Text -- ^ 'puaEnterpriseId'
+    -> Text -- ^ 'puaProductId'
+    -> ProductsUnApprove
+productsUnApprove pPuaEnterpriseId_ pPuaProductId_ =
+    ProductsUnApprove'
+    { _puaEnterpriseId = pPuaEnterpriseId_
+    , _puaProductId = pPuaProductId_
+    }
+
+-- | The ID of the enterprise.
+puaEnterpriseId :: Lens' ProductsUnApprove Text
+puaEnterpriseId
+  = lens _puaEnterpriseId
+      (\ s a -> s{_puaEnterpriseId = a})
+
+-- | The ID of the product.
+puaProductId :: Lens' ProductsUnApprove Text
+puaProductId
+  = lens _puaProductId (\ s a -> s{_puaProductId = a})
+
+instance GoogleRequest ProductsUnApprove where
+        type Rs ProductsUnApprove = ()
+        type Scopes ProductsUnApprove =
+             '["https://www.googleapis.com/auth/androidenterprise"]
+        requestClient ProductsUnApprove'{..}
+          = go _puaEnterpriseId _puaProductId (Just AltJSON)
+              androidEnterpriseService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy ProductsUnApproveResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/AndroidEnterprise/ServiceAccountkeys/Delete.hs b/gen/Network/Google/Resource/AndroidEnterprise/ServiceAccountkeys/Delete.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/AndroidEnterprise/ServiceAccountkeys/Delete.hs
@@ -0,0 +1,107 @@
+{-# 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.ServiceAccountkeys.Delete
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Removes and invalidates the specified credentials for the service
+-- account associated with this enterprise. The calling service account
+-- must have been retrieved by calling Enterprises.GetServiceAccount and
+-- must have been set as the enterprise service account by calling
+-- Enterprises.SetAccount.
+--
+-- /See:/ <https://developers.google.com/android/work/play/emm-api Google Play EMM API Reference> for @androidenterprise.serviceaccountkeys.delete@.
+module Network.Google.Resource.AndroidEnterprise.ServiceAccountkeys.Delete
+    (
+    -- * REST Resource
+      ServiceAccountkeysDeleteResource
+
+    -- * Creating a Request
+    , serviceAccountkeysDelete
+    , ServiceAccountkeysDelete
+
+    -- * Request Lenses
+    , sadKeyId
+    , sadEnterpriseId
+    ) where
+
+import           Network.Google.AndroidEnterprise.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @androidenterprise.serviceaccountkeys.delete@ method which the
+-- 'ServiceAccountkeysDelete' request conforms to.
+type ServiceAccountkeysDeleteResource =
+     "androidenterprise" :>
+       "v1" :>
+         "enterprises" :>
+           Capture "enterpriseId" Text :>
+             "serviceAccountKeys" :>
+               Capture "keyId" Text :>
+                 QueryParam "alt" AltJSON :> Delete '[JSON] ()
+
+-- | Removes and invalidates the specified credentials for the service
+-- account associated with this enterprise. The calling service account
+-- must have been retrieved by calling Enterprises.GetServiceAccount and
+-- must have been set as the enterprise service account by calling
+-- Enterprises.SetAccount.
+--
+-- /See:/ 'serviceAccountkeysDelete' smart constructor.
+data ServiceAccountkeysDelete = ServiceAccountkeysDelete'
+    { _sadKeyId        :: !Text
+    , _sadEnterpriseId :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ServiceAccountkeysDelete' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'sadKeyId'
+--
+-- * 'sadEnterpriseId'
+serviceAccountkeysDelete
+    :: Text -- ^ 'sadKeyId'
+    -> Text -- ^ 'sadEnterpriseId'
+    -> ServiceAccountkeysDelete
+serviceAccountkeysDelete pSadKeyId_ pSadEnterpriseId_ =
+    ServiceAccountkeysDelete'
+    { _sadKeyId = pSadKeyId_
+    , _sadEnterpriseId = pSadEnterpriseId_
+    }
+
+-- | The ID of the key.
+sadKeyId :: Lens' ServiceAccountkeysDelete Text
+sadKeyId = lens _sadKeyId (\ s a -> s{_sadKeyId = a})
+
+-- | The ID of the enterprise.
+sadEnterpriseId :: Lens' ServiceAccountkeysDelete Text
+sadEnterpriseId
+  = lens _sadEnterpriseId
+      (\ s a -> s{_sadEnterpriseId = a})
+
+instance GoogleRequest ServiceAccountkeysDelete where
+        type Rs ServiceAccountkeysDelete = ()
+        type Scopes ServiceAccountkeysDelete =
+             '["https://www.googleapis.com/auth/androidenterprise"]
+        requestClient ServiceAccountkeysDelete'{..}
+          = go _sadEnterpriseId _sadKeyId (Just AltJSON)
+              androidEnterpriseService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy ServiceAccountkeysDeleteResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/AndroidEnterprise/ServiceAccountkeys/Insert.hs b/gen/Network/Google/Resource/AndroidEnterprise/ServiceAccountkeys/Insert.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/AndroidEnterprise/ServiceAccountkeys/Insert.hs
@@ -0,0 +1,109 @@
+{-# 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.ServiceAccountkeys.Insert
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Generates new credentials for the service account associated with this
+-- enterprise. The calling service account must have been retrieved by
+-- calling Enterprises.GetServiceAccount and must have been set as the
+-- enterprise service account by calling Enterprises.SetAccount. Only the
+-- type of the key should be populated in the resource to be inserted.
+--
+-- /See:/ <https://developers.google.com/android/work/play/emm-api Google Play EMM API Reference> for @androidenterprise.serviceaccountkeys.insert@.
+module Network.Google.Resource.AndroidEnterprise.ServiceAccountkeys.Insert
+    (
+    -- * REST Resource
+      ServiceAccountkeysInsertResource
+
+    -- * Creating a Request
+    , serviceAccountkeysInsert
+    , ServiceAccountkeysInsert
+
+    -- * Request Lenses
+    , saiEnterpriseId
+    , saiPayload
+    ) where
+
+import           Network.Google.AndroidEnterprise.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @androidenterprise.serviceaccountkeys.insert@ method which the
+-- 'ServiceAccountkeysInsert' request conforms to.
+type ServiceAccountkeysInsertResource =
+     "androidenterprise" :>
+       "v1" :>
+         "enterprises" :>
+           Capture "enterpriseId" Text :>
+             "serviceAccountKeys" :>
+               QueryParam "alt" AltJSON :>
+                 ReqBody '[JSON] ServiceAccountKey :>
+                   Post '[JSON] ServiceAccountKey
+
+-- | Generates new credentials for the service account associated with this
+-- enterprise. The calling service account must have been retrieved by
+-- calling Enterprises.GetServiceAccount and must have been set as the
+-- enterprise service account by calling Enterprises.SetAccount. Only the
+-- type of the key should be populated in the resource to be inserted.
+--
+-- /See:/ 'serviceAccountkeysInsert' smart constructor.
+data ServiceAccountkeysInsert = ServiceAccountkeysInsert'
+    { _saiEnterpriseId :: !Text
+    , _saiPayload      :: !ServiceAccountKey
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ServiceAccountkeysInsert' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'saiEnterpriseId'
+--
+-- * 'saiPayload'
+serviceAccountkeysInsert
+    :: Text -- ^ 'saiEnterpriseId'
+    -> ServiceAccountKey -- ^ 'saiPayload'
+    -> ServiceAccountkeysInsert
+serviceAccountkeysInsert pSaiEnterpriseId_ pSaiPayload_ =
+    ServiceAccountkeysInsert'
+    { _saiEnterpriseId = pSaiEnterpriseId_
+    , _saiPayload = pSaiPayload_
+    }
+
+-- | The ID of the enterprise.
+saiEnterpriseId :: Lens' ServiceAccountkeysInsert Text
+saiEnterpriseId
+  = lens _saiEnterpriseId
+      (\ s a -> s{_saiEnterpriseId = a})
+
+-- | Multipart request metadata.
+saiPayload :: Lens' ServiceAccountkeysInsert ServiceAccountKey
+saiPayload
+  = lens _saiPayload (\ s a -> s{_saiPayload = a})
+
+instance GoogleRequest ServiceAccountkeysInsert where
+        type Rs ServiceAccountkeysInsert = ServiceAccountKey
+        type Scopes ServiceAccountkeysInsert =
+             '["https://www.googleapis.com/auth/androidenterprise"]
+        requestClient ServiceAccountkeysInsert'{..}
+          = go _saiEnterpriseId (Just AltJSON) _saiPayload
+              androidEnterpriseService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy ServiceAccountkeysInsertResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/AndroidEnterprise/ServiceAccountkeys/List.hs b/gen/Network/Google/Resource/AndroidEnterprise/ServiceAccountkeys/List.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/AndroidEnterprise/ServiceAccountkeys/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.ServiceAccountkeys.List
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Lists all active credentials for the service account associated with
+-- this enterprise. Only the ID and key type are returned. The calling
+-- service account must have been retrieved by calling
+-- Enterprises.GetServiceAccount and must have been set as the enterprise
+-- service account by calling Enterprises.SetAccount.
+--
+-- /See:/ <https://developers.google.com/android/work/play/emm-api Google Play EMM API Reference> for @androidenterprise.serviceaccountkeys.list@.
+module Network.Google.Resource.AndroidEnterprise.ServiceAccountkeys.List
+    (
+    -- * REST Resource
+      ServiceAccountkeysListResource
+
+    -- * Creating a Request
+    , serviceAccountkeysList
+    , ServiceAccountkeysList
+
+    -- * Request Lenses
+    , salEnterpriseId
+    ) where
+
+import           Network.Google.AndroidEnterprise.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @androidenterprise.serviceaccountkeys.list@ method which the
+-- 'ServiceAccountkeysList' request conforms to.
+type ServiceAccountkeysListResource =
+     "androidenterprise" :>
+       "v1" :>
+         "enterprises" :>
+           Capture "enterpriseId" Text :>
+             "serviceAccountKeys" :>
+               QueryParam "alt" AltJSON :>
+                 Get '[JSON] ServiceAccountKeysListResponse
+
+-- | Lists all active credentials for the service account associated with
+-- this enterprise. Only the ID and key type are returned. The calling
+-- service account must have been retrieved by calling
+-- Enterprises.GetServiceAccount and must have been set as the enterprise
+-- service account by calling Enterprises.SetAccount.
+--
+-- /See:/ 'serviceAccountkeysList' smart constructor.
+newtype ServiceAccountkeysList = ServiceAccountkeysList'
+    { _salEnterpriseId :: Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ServiceAccountkeysList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'salEnterpriseId'
+serviceAccountkeysList
+    :: Text -- ^ 'salEnterpriseId'
+    -> ServiceAccountkeysList
+serviceAccountkeysList pSalEnterpriseId_ =
+    ServiceAccountkeysList'
+    { _salEnterpriseId = pSalEnterpriseId_
+    }
+
+-- | The ID of the enterprise.
+salEnterpriseId :: Lens' ServiceAccountkeysList Text
+salEnterpriseId
+  = lens _salEnterpriseId
+      (\ s a -> s{_salEnterpriseId = a})
+
+instance GoogleRequest ServiceAccountkeysList where
+        type Rs ServiceAccountkeysList =
+             ServiceAccountKeysListResponse
+        type Scopes ServiceAccountkeysList =
+             '["https://www.googleapis.com/auth/androidenterprise"]
+        requestClient ServiceAccountkeysList'{..}
+          = go _salEnterpriseId (Just AltJSON)
+              androidEnterpriseService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy ServiceAccountkeysListResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/AndroidEnterprise/Users/Delete.hs b/gen/Network/Google/Resource/AndroidEnterprise/Users/Delete.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/AndroidEnterprise/Users/Delete.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.Users.Delete
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deleted an EMM-managed user.
+--
+-- /See:/ <https://developers.google.com/android/work/play/emm-api Google Play EMM API Reference> for @androidenterprise.users.delete@.
+module Network.Google.Resource.AndroidEnterprise.Users.Delete
+    (
+    -- * REST Resource
+      UsersDeleteResource
+
+    -- * Creating a Request
+    , usersDelete
+    , UsersDelete
+
+    -- * Request Lenses
+    , udEnterpriseId
+    , udUserId
+    ) where
+
+import           Network.Google.AndroidEnterprise.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @androidenterprise.users.delete@ method which the
+-- 'UsersDelete' request conforms to.
+type UsersDeleteResource =
+     "androidenterprise" :>
+       "v1" :>
+         "enterprises" :>
+           Capture "enterpriseId" Text :>
+             "users" :>
+               Capture "userId" Text :>
+                 QueryParam "alt" AltJSON :> Delete '[JSON] ()
+
+-- | Deleted an EMM-managed user.
+--
+-- /See:/ 'usersDelete' smart constructor.
+data UsersDelete = UsersDelete'
+    { _udEnterpriseId :: !Text
+    , _udUserId       :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'UsersDelete' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'udEnterpriseId'
+--
+-- * 'udUserId'
+usersDelete
+    :: Text -- ^ 'udEnterpriseId'
+    -> Text -- ^ 'udUserId'
+    -> UsersDelete
+usersDelete pUdEnterpriseId_ pUdUserId_ =
+    UsersDelete'
+    { _udEnterpriseId = pUdEnterpriseId_
+    , _udUserId = pUdUserId_
+    }
+
+-- | The ID of the enterprise.
+udEnterpriseId :: Lens' UsersDelete Text
+udEnterpriseId
+  = lens _udEnterpriseId
+      (\ s a -> s{_udEnterpriseId = a})
+
+-- | The ID of the user.
+udUserId :: Lens' UsersDelete Text
+udUserId = lens _udUserId (\ s a -> s{_udUserId = a})
+
+instance GoogleRequest UsersDelete where
+        type Rs UsersDelete = ()
+        type Scopes UsersDelete =
+             '["https://www.googleapis.com/auth/androidenterprise"]
+        requestClient UsersDelete'{..}
+          = go _udEnterpriseId _udUserId (Just AltJSON)
+              androidEnterpriseService
+          where go
+                  = buildClient (Proxy :: Proxy UsersDeleteResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/AndroidEnterprise/Users/GenerateAuthenticationToken.hs b/gen/Network/Google/Resource/AndroidEnterprise/Users/GenerateAuthenticationToken.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/AndroidEnterprise/Users/GenerateAuthenticationToken.hs
@@ -0,0 +1,111 @@
+{-# 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.GenerateAuthenticationToken
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Generates an authentication token which the device policy client can use
+-- to provision the given EMM-managed user account on a device. The
+-- generated token is single-use and expires after a few minutes. This call
+-- only works with EMM-managed accounts.
+--
+-- /See:/ <https://developers.google.com/android/work/play/emm-api Google Play EMM API Reference> for @androidenterprise.users.generateAuthenticationToken@.
+module Network.Google.Resource.AndroidEnterprise.Users.GenerateAuthenticationToken
+    (
+    -- * REST Resource
+      UsersGenerateAuthenticationTokenResource
+
+    -- * Creating a Request
+    , usersGenerateAuthenticationToken
+    , UsersGenerateAuthenticationToken
+
+    -- * Request Lenses
+    , ugatEnterpriseId
+    , ugatUserId
+    ) where
+
+import           Network.Google.AndroidEnterprise.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @androidenterprise.users.generateAuthenticationToken@ method which the
+-- 'UsersGenerateAuthenticationToken' request conforms to.
+type UsersGenerateAuthenticationTokenResource =
+     "androidenterprise" :>
+       "v1" :>
+         "enterprises" :>
+           Capture "enterpriseId" Text :>
+             "users" :>
+               Capture "userId" Text :>
+                 "authenticationToken" :>
+                   QueryParam "alt" AltJSON :>
+                     Post '[JSON] AuthenticationToken
+
+-- | Generates an authentication token which the device policy client can use
+-- to provision the given EMM-managed user account on a device. The
+-- generated token is single-use and expires after a few minutes. This call
+-- only works with EMM-managed accounts.
+--
+-- /See:/ 'usersGenerateAuthenticationToken' smart constructor.
+data UsersGenerateAuthenticationToken = UsersGenerateAuthenticationToken'
+    { _ugatEnterpriseId :: !Text
+    , _ugatUserId       :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'UsersGenerateAuthenticationToken' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ugatEnterpriseId'
+--
+-- * 'ugatUserId'
+usersGenerateAuthenticationToken
+    :: Text -- ^ 'ugatEnterpriseId'
+    -> Text -- ^ 'ugatUserId'
+    -> UsersGenerateAuthenticationToken
+usersGenerateAuthenticationToken pUgatEnterpriseId_ pUgatUserId_ =
+    UsersGenerateAuthenticationToken'
+    { _ugatEnterpriseId = pUgatEnterpriseId_
+    , _ugatUserId = pUgatUserId_
+    }
+
+-- | The ID of the enterprise.
+ugatEnterpriseId :: Lens' UsersGenerateAuthenticationToken Text
+ugatEnterpriseId
+  = lens _ugatEnterpriseId
+      (\ s a -> s{_ugatEnterpriseId = a})
+
+-- | The ID of the user.
+ugatUserId :: Lens' UsersGenerateAuthenticationToken Text
+ugatUserId
+  = lens _ugatUserId (\ s a -> s{_ugatUserId = a})
+
+instance GoogleRequest
+         UsersGenerateAuthenticationToken where
+        type Rs UsersGenerateAuthenticationToken =
+             AuthenticationToken
+        type Scopes UsersGenerateAuthenticationToken =
+             '["https://www.googleapis.com/auth/androidenterprise"]
+        requestClient UsersGenerateAuthenticationToken'{..}
+          = go _ugatEnterpriseId _ugatUserId (Just AltJSON)
+              androidEnterpriseService
+          where go
+                  = buildClient
+                      (Proxy ::
+                         Proxy UsersGenerateAuthenticationTokenResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/AndroidEnterprise/Users/Insert.hs b/gen/Network/Google/Resource/AndroidEnterprise/Users/Insert.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/AndroidEnterprise/Users/Insert.hs
@@ -0,0 +1,107 @@
+{-# 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.Insert
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates a new EMM-managed user. The Users resource passed in the body of
+-- the request should include an accountIdentifier and an accountType. If a
+-- corresponding user already exists with the same account identifier, the
+-- user will be updated with the resource. In this case only the
+-- displayName field can be changed.
+--
+-- /See:/ <https://developers.google.com/android/work/play/emm-api Google Play EMM API Reference> for @androidenterprise.users.insert@.
+module Network.Google.Resource.AndroidEnterprise.Users.Insert
+    (
+    -- * REST Resource
+      UsersInsertResource
+
+    -- * Creating a Request
+    , usersInsert
+    , UsersInsert
+
+    -- * Request Lenses
+    , uiEnterpriseId
+    , uiPayload
+    ) where
+
+import           Network.Google.AndroidEnterprise.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @androidenterprise.users.insert@ method which the
+-- 'UsersInsert' request conforms to.
+type UsersInsertResource =
+     "androidenterprise" :>
+       "v1" :>
+         "enterprises" :>
+           Capture "enterpriseId" Text :>
+             "users" :>
+               QueryParam "alt" AltJSON :>
+                 ReqBody '[JSON] User :> Post '[JSON] User
+
+-- | Creates a new EMM-managed user. The Users resource passed in the body of
+-- the request should include an accountIdentifier and an accountType. If a
+-- corresponding user already exists with the same account identifier, the
+-- user will be updated with the resource. In this case only the
+-- displayName field can be changed.
+--
+-- /See:/ 'usersInsert' smart constructor.
+data UsersInsert = UsersInsert'
+    { _uiEnterpriseId :: !Text
+    , _uiPayload      :: !User
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'UsersInsert' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'uiEnterpriseId'
+--
+-- * 'uiPayload'
+usersInsert
+    :: Text -- ^ 'uiEnterpriseId'
+    -> User -- ^ 'uiPayload'
+    -> UsersInsert
+usersInsert pUiEnterpriseId_ pUiPayload_ =
+    UsersInsert'
+    { _uiEnterpriseId = pUiEnterpriseId_
+    , _uiPayload = pUiPayload_
+    }
+
+-- | The ID of the enterprise.
+uiEnterpriseId :: Lens' UsersInsert Text
+uiEnterpriseId
+  = lens _uiEnterpriseId
+      (\ s a -> s{_uiEnterpriseId = a})
+
+-- | Multipart request metadata.
+uiPayload :: Lens' UsersInsert User
+uiPayload
+  = lens _uiPayload (\ s a -> s{_uiPayload = a})
+
+instance GoogleRequest UsersInsert where
+        type Rs UsersInsert = User
+        type Scopes UsersInsert =
+             '["https://www.googleapis.com/auth/androidenterprise"]
+        requestClient UsersInsert'{..}
+          = go _uiEnterpriseId (Just AltJSON) _uiPayload
+              androidEnterpriseService
+          where go
+                  = buildClient (Proxy :: Proxy UsersInsertResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/AndroidEnterprise/Users/List.hs b/gen/Network/Google/Resource/AndroidEnterprise/Users/List.hs
--- a/gen/Network/Google/Resource/AndroidEnterprise/Users/List.hs
+++ b/gen/Network/Google/Resource/AndroidEnterprise/Users/List.hs
@@ -20,7 +20,10 @@
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Looks up a user by their primary email address.
+-- Looks up a user by primary email address. This is only supported for
+-- Google-managed users. Lookup of the id is not needed for EMM-managed
+-- users because the id is already returned in the result of the
+-- Users.insert call.
 --
 -- /See:/ <https://developers.google.com/android/work/play/emm-api Google Play EMM API Reference> for @androidenterprise.users.list@.
 module Network.Google.Resource.AndroidEnterprise.Users.List
@@ -52,7 +55,10 @@
                  QueryParam "alt" AltJSON :>
                    Get '[JSON] UsersListResponse
 
--- | Looks up a user by their primary email address.
+-- | Looks up a user by primary email address. This is only supported for
+-- Google-managed users. Lookup of the id is not needed for EMM-managed
+-- users because the id is already returned in the result of the
+-- Users.insert call.
 --
 -- /See:/ 'usersList' smart constructor.
 data UsersList = UsersList'
diff --git a/gen/Network/Google/Resource/AndroidEnterprise/Users/Patch.hs b/gen/Network/Google/Resource/AndroidEnterprise/Users/Patch.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/AndroidEnterprise/Users/Patch.hs
@@ -0,0 +1,119 @@
+{-# 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.Patch
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Updates the details of an EMM-managed user. Can be used with EMM-managed
+-- users only (not Google managed users). Pass the new details in the Users
+-- resource in the request body. Only the displayName field can be changed.
+-- Other fields must either be unset or have the currently active value.
+-- This method supports patch semantics.
+--
+-- /See:/ <https://developers.google.com/android/work/play/emm-api Google Play EMM API Reference> for @androidenterprise.users.patch@.
+module Network.Google.Resource.AndroidEnterprise.Users.Patch
+    (
+    -- * REST Resource
+      UsersPatchResource
+
+    -- * Creating a Request
+    , usersPatch
+    , UsersPatch
+
+    -- * Request Lenses
+    , upEnterpriseId
+    , upPayload
+    , upUserId
+    ) where
+
+import           Network.Google.AndroidEnterprise.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @androidenterprise.users.patch@ method which the
+-- 'UsersPatch' request conforms to.
+type UsersPatchResource =
+     "androidenterprise" :>
+       "v1" :>
+         "enterprises" :>
+           Capture "enterpriseId" Text :>
+             "users" :>
+               Capture "userId" Text :>
+                 QueryParam "alt" AltJSON :>
+                   ReqBody '[JSON] User :> Patch '[JSON] User
+
+-- | Updates the details of an EMM-managed user. Can be used with EMM-managed
+-- users only (not Google managed users). Pass the new details in the Users
+-- resource in the request body. Only the displayName field can be changed.
+-- Other fields must either be unset or have the currently active value.
+-- This method supports patch semantics.
+--
+-- /See:/ 'usersPatch' smart constructor.
+data UsersPatch = UsersPatch'
+    { _upEnterpriseId :: !Text
+    , _upPayload      :: !User
+    , _upUserId       :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'UsersPatch' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'upEnterpriseId'
+--
+-- * 'upPayload'
+--
+-- * 'upUserId'
+usersPatch
+    :: Text -- ^ 'upEnterpriseId'
+    -> User -- ^ 'upPayload'
+    -> Text -- ^ 'upUserId'
+    -> UsersPatch
+usersPatch pUpEnterpriseId_ pUpPayload_ pUpUserId_ =
+    UsersPatch'
+    { _upEnterpriseId = pUpEnterpriseId_
+    , _upPayload = pUpPayload_
+    , _upUserId = pUpUserId_
+    }
+
+-- | The ID of the enterprise.
+upEnterpriseId :: Lens' UsersPatch Text
+upEnterpriseId
+  = lens _upEnterpriseId
+      (\ s a -> s{_upEnterpriseId = a})
+
+-- | Multipart request metadata.
+upPayload :: Lens' UsersPatch User
+upPayload
+  = lens _upPayload (\ s a -> s{_upPayload = a})
+
+-- | The ID of the user.
+upUserId :: Lens' UsersPatch Text
+upUserId = lens _upUserId (\ s a -> s{_upUserId = a})
+
+instance GoogleRequest UsersPatch where
+        type Rs UsersPatch = User
+        type Scopes UsersPatch =
+             '["https://www.googleapis.com/auth/androidenterprise"]
+        requestClient UsersPatch'{..}
+          = go _upEnterpriseId _upUserId (Just AltJSON)
+              _upPayload
+              androidEnterpriseService
+          where go
+                  = buildClient (Proxy :: Proxy UsersPatchResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/AndroidEnterprise/Users/Update.hs b/gen/Network/Google/Resource/AndroidEnterprise/Users/Update.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/AndroidEnterprise/Users/Update.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.Users.Update
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Updates the details of an EMM-managed user. Can be used with EMM-managed
+-- users only (not Google managed users). Pass the new details in the Users
+-- resource in the request body. Only the displayName field can be changed.
+-- Other fields must either be unset or have the currently active value.
+--
+-- /See:/ <https://developers.google.com/android/work/play/emm-api Google Play EMM API Reference> for @androidenterprise.users.update@.
+module Network.Google.Resource.AndroidEnterprise.Users.Update
+    (
+    -- * REST Resource
+      UsersUpdateResource
+
+    -- * Creating a Request
+    , usersUpdate
+    , UsersUpdate
+
+    -- * Request Lenses
+    , uuEnterpriseId
+    , uuPayload
+    , uuUserId
+    ) where
+
+import           Network.Google.AndroidEnterprise.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @androidenterprise.users.update@ method which the
+-- 'UsersUpdate' request conforms to.
+type UsersUpdateResource =
+     "androidenterprise" :>
+       "v1" :>
+         "enterprises" :>
+           Capture "enterpriseId" Text :>
+             "users" :>
+               Capture "userId" Text :>
+                 QueryParam "alt" AltJSON :>
+                   ReqBody '[JSON] User :> Put '[JSON] User
+
+-- | Updates the details of an EMM-managed user. Can be used with EMM-managed
+-- users only (not Google managed users). Pass the new details in the Users
+-- resource in the request body. Only the displayName field can be changed.
+-- Other fields must either be unset or have the currently active value.
+--
+-- /See:/ 'usersUpdate' smart constructor.
+data UsersUpdate = UsersUpdate'
+    { _uuEnterpriseId :: !Text
+    , _uuPayload      :: !User
+    , _uuUserId       :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'UsersUpdate' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'uuEnterpriseId'
+--
+-- * 'uuPayload'
+--
+-- * 'uuUserId'
+usersUpdate
+    :: Text -- ^ 'uuEnterpriseId'
+    -> User -- ^ 'uuPayload'
+    -> Text -- ^ 'uuUserId'
+    -> UsersUpdate
+usersUpdate pUuEnterpriseId_ pUuPayload_ pUuUserId_ =
+    UsersUpdate'
+    { _uuEnterpriseId = pUuEnterpriseId_
+    , _uuPayload = pUuPayload_
+    , _uuUserId = pUuUserId_
+    }
+
+-- | The ID of the enterprise.
+uuEnterpriseId :: Lens' UsersUpdate Text
+uuEnterpriseId
+  = lens _uuEnterpriseId
+      (\ s a -> s{_uuEnterpriseId = a})
+
+-- | Multipart request metadata.
+uuPayload :: Lens' UsersUpdate User
+uuPayload
+  = lens _uuPayload (\ s a -> s{_uuPayload = a})
+
+-- | The ID of the user.
+uuUserId :: Lens' UsersUpdate Text
+uuUserId = lens _uuUserId (\ s a -> s{_uuUserId = a})
+
+instance GoogleRequest UsersUpdate where
+        type Rs UsersUpdate = User
+        type Scopes UsersUpdate =
+             '["https://www.googleapis.com/auth/androidenterprise"]
+        requestClient UsersUpdate'{..}
+          = go _uuEnterpriseId _uuUserId (Just AltJSON)
+              _uuPayload
+              androidEnterpriseService
+          where go
+                  = buildClient (Proxy :: Proxy UsersUpdateResource)
+                      mempty
diff --git a/gogol-android-enterprise.cabal b/gogol-android-enterprise.cabal
--- a/gogol-android-enterprise.cabal
+++ b/gogol-android-enterprise.cabal
@@ -1,5 +1,5 @@
 name:                  gogol-android-enterprise
-version:               0.1.0
+version:               0.1.1
 synopsis:              Google Play EMM SDK.
 homepage:              https://github.com/brendanhay/gogol
 bug-reports:           https://github.com/brendanhay/gogol/issues
@@ -11,7 +11,7 @@
 category:              Network, Google, Cloud
 build-type:            Simple
 cabal-version:         >= 1.10
-extra-source-files:    README.md
+extra-source-files:    README.md src/.gitkeep
 
 description:
     Manages the deployment of apps to Android for Work users.
@@ -50,12 +50,18 @@
         , Network.Google.Resource.AndroidEnterprise.Devices.GetState
         , Network.Google.Resource.AndroidEnterprise.Devices.List
         , Network.Google.Resource.AndroidEnterprise.Devices.SetState
+        , Network.Google.Resource.AndroidEnterprise.Enterprises.AcknowledgeNotificationSet
+        , Network.Google.Resource.AndroidEnterprise.Enterprises.CompleteSignup
+        , Network.Google.Resource.AndroidEnterprise.Enterprises.CreateWebToken
         , Network.Google.Resource.AndroidEnterprise.Enterprises.Delete
         , Network.Google.Resource.AndroidEnterprise.Enterprises.Enroll
+        , Network.Google.Resource.AndroidEnterprise.Enterprises.GenerateSignupURL
         , Network.Google.Resource.AndroidEnterprise.Enterprises.Get
+        , Network.Google.Resource.AndroidEnterprise.Enterprises.GetServiceAccount
         , Network.Google.Resource.AndroidEnterprise.Enterprises.GetStoreLayout
         , Network.Google.Resource.AndroidEnterprise.Enterprises.Insert
         , Network.Google.Resource.AndroidEnterprise.Enterprises.List
+        , Network.Google.Resource.AndroidEnterprise.Enterprises.PullNotificationSet
         , Network.Google.Resource.AndroidEnterprise.Enterprises.SendTestPushNotification
         , Network.Google.Resource.AndroidEnterprise.Enterprises.SetAccount
         , Network.Google.Resource.AndroidEnterprise.Enterprises.SetStoreLayout
@@ -73,6 +79,16 @@
         , Network.Google.Resource.AndroidEnterprise.Installs.List
         , Network.Google.Resource.AndroidEnterprise.Installs.Patch
         , Network.Google.Resource.AndroidEnterprise.Installs.Update
+        , Network.Google.Resource.AndroidEnterprise.ManagedConfigurationsforDevice.Delete
+        , Network.Google.Resource.AndroidEnterprise.ManagedConfigurationsforDevice.Get
+        , Network.Google.Resource.AndroidEnterprise.ManagedConfigurationsforDevice.List
+        , Network.Google.Resource.AndroidEnterprise.ManagedConfigurationsforDevice.Patch
+        , Network.Google.Resource.AndroidEnterprise.ManagedConfigurationsforDevice.Update
+        , Network.Google.Resource.AndroidEnterprise.ManagedConfigurationsforUser.Delete
+        , Network.Google.Resource.AndroidEnterprise.ManagedConfigurationsforUser.Get
+        , Network.Google.Resource.AndroidEnterprise.ManagedConfigurationsforUser.List
+        , Network.Google.Resource.AndroidEnterprise.ManagedConfigurationsforUser.Patch
+        , Network.Google.Resource.AndroidEnterprise.ManagedConfigurationsforUser.Update
         , Network.Google.Resource.AndroidEnterprise.Permissions.Get
         , Network.Google.Resource.AndroidEnterprise.Products.Approve
         , Network.Google.Resource.AndroidEnterprise.Products.GenerateApprovalURL
@@ -80,7 +96,11 @@
         , Network.Google.Resource.AndroidEnterprise.Products.GetAppRestrictionsSchema
         , Network.Google.Resource.AndroidEnterprise.Products.GetPermissions
         , Network.Google.Resource.AndroidEnterprise.Products.List
+        , Network.Google.Resource.AndroidEnterprise.Products.UnApprove
         , Network.Google.Resource.AndroidEnterprise.Products.UpdatePermissions
+        , Network.Google.Resource.AndroidEnterprise.ServiceAccountkeys.Delete
+        , Network.Google.Resource.AndroidEnterprise.ServiceAccountkeys.Insert
+        , Network.Google.Resource.AndroidEnterprise.ServiceAccountkeys.List
         , Network.Google.Resource.AndroidEnterprise.Storelayoutclusters.Delete
         , Network.Google.Resource.AndroidEnterprise.Storelayoutclusters.Get
         , Network.Google.Resource.AndroidEnterprise.Storelayoutclusters.Insert
@@ -93,17 +113,22 @@
         , Network.Google.Resource.AndroidEnterprise.Storelayoutpages.List
         , Network.Google.Resource.AndroidEnterprise.Storelayoutpages.Patch
         , Network.Google.Resource.AndroidEnterprise.Storelayoutpages.Update
+        , Network.Google.Resource.AndroidEnterprise.Users.Delete
+        , Network.Google.Resource.AndroidEnterprise.Users.GenerateAuthenticationToken
         , Network.Google.Resource.AndroidEnterprise.Users.GenerateToken
         , Network.Google.Resource.AndroidEnterprise.Users.Get
         , Network.Google.Resource.AndroidEnterprise.Users.GetAvailableProductSet
+        , Network.Google.Resource.AndroidEnterprise.Users.Insert
         , Network.Google.Resource.AndroidEnterprise.Users.List
+        , Network.Google.Resource.AndroidEnterprise.Users.Patch
         , Network.Google.Resource.AndroidEnterprise.Users.RevokeToken
         , Network.Google.Resource.AndroidEnterprise.Users.SetAvailableProductSet
+        , Network.Google.Resource.AndroidEnterprise.Users.Update
 
     other-modules:
           Network.Google.AndroidEnterprise.Types.Product
         , Network.Google.AndroidEnterprise.Types.Sum
 
     build-depends:
-          gogol-core == 0.1.0.*
+          gogol-core == 0.1.1.*
         , base       >= 4.7 && < 5
diff --git a/src/.gitkeep b/src/.gitkeep
new file mode 100644
--- /dev/null
+++ b/src/.gitkeep
