diff --git a/LICENSE b/LICENSE
new file mode 100644
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,367 @@
+Mozilla Public License Version 2.0
+==================================
+
+1. Definitions
+--------------
+
+1.1. "Contributor"
+    means each individual or legal entity that creates, contributes to
+    the creation of, or owns Covered Software.
+
+1.2. "Contributor Version"
+    means the combination of the Contributions of others (if any) used
+    by a Contributor and that particular Contributor's Contribution.
+
+1.3. "Contribution"
+    means Covered Software of a particular Contributor.
+
+1.4. "Covered Software"
+    means Source Code Form to which the initial Contributor has attached
+    the notice in Exhibit A, the Executable Form of such Source Code
+    Form, and Modifications of such Source Code Form, in each case
+    including portions thereof.
+
+1.5. "Incompatible With Secondary Licenses"
+    means
+
+    (a) that the initial Contributor has attached the notice described
+        in Exhibit B to the Covered Software; or
+
+    (b) that the Covered Software was made available under the terms of
+        version 1.1 or earlier of the License, but not also under the
+        terms of a Secondary License.
+
+1.6. "Executable Form"
+    means any form of the work other than Source Code Form.
+
+1.7. "Larger Work"
+    means a work that combines Covered Software with other material, in
+    a separate file or files, that is not Covered Software.
+
+1.8. "License"
+    means this document.
+
+1.9. "Licensable"
+    means having the right to grant, to the maximum extent possible,
+    whether at the time of the initial grant or subsequently, any and
+    all of the rights conveyed by this License.
+
+1.10. "Modifications"
+    means any of the following:
+
+    (a) any file in Source Code Form that results from an addition to,
+        deletion from, or modification of the contents of Covered
+        Software; or
+
+    (b) any new file in Source Code Form that contains any Covered
+        Software.
+
+1.11. "Patent Claims" of a Contributor
+    means any patent claim(s), including without limitation, method,
+    process, and apparatus claims, in any patent Licensable by such
+    Contributor that would be infringed, but for the grant of the
+    License, by the making, using, selling, offering for sale, having
+    made, import, or transfer of either its Contributions or its
+    Contributor Version.
+
+1.12. "Secondary License"
+    means either the GNU General Public License, Version 2.0, the GNU
+    Lesser General Public License, Version 2.1, the GNU Affero General
+    Public License, Version 3.0, or any later versions of those
+    licenses.
+
+1.13. "Source Code Form"
+    means the form of the work preferred for making modifications.
+
+1.14. "You" (or "Your")
+    means an individual or a legal entity exercising rights under this
+    License. For legal entities, "You" includes any entity that
+    controls, is controlled by, or is under common control with You. For
+    purposes of this definition, "control" means (a) the power, direct
+    or indirect, to cause the direction or management of such entity,
+    whether by contract or otherwise, or (b) ownership of more than
+    fifty percent (50%) of the outstanding shares or beneficial
+    ownership of such entity.
+
+2. License Grants and Conditions
+--------------------------------
+
+2.1. Grants
+
+Each Contributor hereby grants You a world-wide, royalty-free,
+non-exclusive license:
+
+(a) under intellectual property rights (other than patent or trademark)
+    Licensable by such Contributor to use, reproduce, make available,
+    modify, display, perform, distribute, and otherwise exploit its
+    Contributions, either on an unmodified basis, with Modifications, or
+    as part of a Larger Work; and
+
+(b) under Patent Claims of such Contributor to make, use, sell, offer
+    for sale, have made, import, and otherwise transfer either its
+    Contributions or its Contributor Version.
+
+2.2. Effective Date
+
+The licenses granted in Section 2.1 with respect to any Contribution
+become effective for each Contribution on the date the Contributor first
+distributes such Contribution.
+
+2.3. Limitations on Grant Scope
+
+The licenses granted in this Section 2 are the only rights granted under
+this License. No additional rights or licenses will be implied from the
+distribution or licensing of Covered Software under this License.
+Notwithstanding Section 2.1(b) above, no patent license is granted by a
+Contributor:
+
+(a) for any code that a Contributor has removed from Covered Software;
+    or
+
+(b) for infringements caused by: (i) Your and any other third party's
+    modifications of Covered Software, or (ii) the combination of its
+    Contributions with other software (except as part of its Contributor
+    Version); or
+
+(c) under Patent Claims infringed by Covered Software in the absence of
+    its Contributions.
+
+This License does not grant any rights in the trademarks, service marks,
+or logos of any Contributor (except as may be necessary to comply with
+the notice requirements in Section 3.4).
+
+2.4. Subsequent Licenses
+
+No Contributor makes additional grants as a result of Your choice to
+distribute the Covered Software under a subsequent version of this
+License (see Section 10.2) or under the terms of a Secondary License (if
+permitted under the terms of Section 3.3).
+
+2.5. Representation
+
+Each Contributor represents that the Contributor believes its
+Contributions are its original creation(s) or it has sufficient rights
+to grant the rights to its Contributions conveyed by this License.
+
+2.6. Fair Use
+
+This License is not intended to limit any rights You have under
+applicable copyright doctrines of fair use, fair dealing, or other
+equivalents.
+
+2.7. Conditions
+
+Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted
+in Section 2.1.
+
+3. Responsibilities
+-------------------
+
+3.1. Distribution of Source Form
+
+All distribution of Covered Software in Source Code Form, including any
+Modifications that You create or to which You contribute, must be under
+the terms of this License. You must inform recipients that the Source
+Code Form of the Covered Software is governed by the terms of this
+License, and how they can obtain a copy of this License. You may not
+attempt to alter or restrict the recipients' rights in the Source Code
+Form.
+
+3.2. Distribution of Executable Form
+
+If You distribute Covered Software in Executable Form then:
+
+(a) such Covered Software must also be made available in Source Code
+    Form, as described in Section 3.1, and You must inform recipients of
+    the Executable Form how they can obtain a copy of such Source Code
+    Form by reasonable means in a timely manner, at a charge no more
+    than the cost of distribution to the recipient; and
+
+(b) You may distribute such Executable Form under the terms of this
+    License, or sublicense it under different terms, provided that the
+    license for the Executable Form does not attempt to limit or alter
+    the recipients' rights in the Source Code Form under this License.
+
+3.3. Distribution of a Larger Work
+
+You may create and distribute a Larger Work under terms of Your choice,
+provided that You also comply with the requirements of this License for
+the Covered Software. If the Larger Work is a combination of Covered
+Software with a work governed by one or more Secondary Licenses, and the
+Covered Software is not Incompatible With Secondary Licenses, this
+License permits You to additionally distribute such Covered Software
+under the terms of such Secondary License(s), so that the recipient of
+the Larger Work may, at their option, further distribute the Covered
+Software under the terms of either this License or such Secondary
+License(s).
+
+3.4. Notices
+
+You may not remove or alter the substance of any license notices
+(including copyright notices, patent notices, disclaimers of warranty,
+or limitations of liability) contained within the Source Code Form of
+the Covered Software, except that You may alter any license notices to
+the extent required to remedy known factual inaccuracies.
+
+3.5. Application of Additional Terms
+
+You may choose to offer, and to charge a fee for, warranty, support,
+indemnity or liability obligations to one or more recipients of Covered
+Software. However, You may do so only on Your own behalf, and not on
+behalf of any Contributor. You must make it absolutely clear that any
+such warranty, support, indemnity, or liability obligation is offered by
+You alone, and You hereby agree to indemnify every Contributor for any
+liability incurred by such Contributor as a result of warranty, support,
+indemnity or liability terms You offer. You may include additional
+disclaimers of warranty and limitations of liability specific to any
+jurisdiction.
+
+4. Inability to Comply Due to Statute or Regulation
+---------------------------------------------------
+
+If it is impossible for You to comply with any of the terms of this
+License with respect to some or all of the Covered Software due to
+statute, judicial order, or regulation then You must: (a) comply with
+the terms of this License to the maximum extent possible; and (b)
+describe the limitations and the code they affect. Such description must
+be placed in a text file included with all distributions of the Covered
+Software under this License. Except to the extent prohibited by statute
+or regulation, such description must be sufficiently detailed for a
+recipient of ordinary skill to be able to understand it.
+
+5. Termination
+--------------
+
+5.1. The rights granted under this License will terminate automatically
+if You fail to comply with any of its terms. However, if You become
+compliant, then the rights granted under this License from a particular
+Contributor are reinstated (a) provisionally, unless and until such
+Contributor explicitly and finally terminates Your grants, and (b) on an
+ongoing basis, if such Contributor fails to notify You of the
+non-compliance by some reasonable means prior to 60 days after You have
+come back into compliance. Moreover, Your grants from a particular
+Contributor are reinstated on an ongoing basis if such Contributor
+notifies You of the non-compliance by some reasonable means, this is the
+first time You have received notice of non-compliance with this License
+from such Contributor, and You become compliant prior to 30 days after
+Your receipt of the notice.
+
+5.2. If You initiate litigation against any entity by asserting a patent
+infringement claim (excluding declaratory judgment actions,
+counter-claims, and cross-claims) alleging that a Contributor Version
+directly or indirectly infringes any patent, then the rights granted to
+You by any and all Contributors for the Covered Software under Section
+2.1 of this License shall terminate.
+
+5.3. In the event of termination under Sections 5.1 or 5.2 above, all
+end user license agreements (excluding distributors and resellers) which
+have been validly granted by You or Your distributors under this License
+prior to termination shall survive termination.
+
+************************************************************************
+*                                                                      *
+*  6. Disclaimer of Warranty                                           *
+*  -------------------------                                           *
+*                                                                      *
+*  Covered Software is provided under this License on an "as is"       *
+*  basis, without warranty of any kind, either expressed, implied, or  *
+*  statutory, including, without limitation, warranties that the       *
+*  Covered Software is free of defects, merchantable, fit for a        *
+*  particular purpose or non-infringing. The entire risk as to the     *
+*  quality and performance of the Covered Software is with You.        *
+*  Should any Covered Software prove defective in any respect, You     *
+*  (not any Contributor) assume the cost of any necessary servicing,   *
+*  repair, or correction. This disclaimer of warranty constitutes an   *
+*  essential part of this License. No use of any Covered Software is   *
+*  authorized under this License except under this disclaimer.         *
+*                                                                      *
+************************************************************************
+
+************************************************************************
+*                                                                      *
+*  7. Limitation of Liability                                          *
+*  --------------------------                                          *
+*                                                                      *
+*  Under no circumstances and under no legal theory, whether tort      *
+*  (including negligence), contract, or otherwise, shall any           *
+*  Contributor, or anyone who distributes Covered Software as          *
+*  permitted above, be liable to You for any direct, indirect,         *
+*  special, incidental, or consequential damages of any character      *
+*  including, without limitation, damages for lost profits, loss of    *
+*  goodwill, work stoppage, computer failure or malfunction, or any    *
+*  and all other commercial damages or losses, even if such party      *
+*  shall have been informed of the possibility of such damages. This   *
+*  limitation of liability shall not apply to liability for death or   *
+*  personal injury resulting from such party's negligence to the       *
+*  extent applicable law prohibits such limitation. Some               *
+*  jurisdictions do not allow the exclusion or limitation of           *
+*  incidental or consequential damages, so this exclusion and          *
+*  limitation may not apply to You.                                    *
+*                                                                      *
+************************************************************************
+
+8. Litigation
+-------------
+
+Any litigation relating to this License may be brought only in the
+courts of a jurisdiction where the defendant maintains its principal
+place of business and such litigation shall be governed by laws of that
+jurisdiction, without reference to its conflict-of-law provisions.
+Nothing in this Section shall prevent a party's ability to bring
+cross-claims or counter-claims.
+
+9. Miscellaneous
+----------------
+
+This License represents the complete agreement concerning the subject
+matter hereof. If any provision of this License is held to be
+unenforceable, such provision shall be reformed only to the extent
+necessary to make it enforceable. Any law or regulation which provides
+that the language of a contract shall be construed against the drafter
+shall not be used to construe this License against a Contributor.
+
+10. Versions of the License
+---------------------------
+
+10.1. New Versions
+
+Mozilla Foundation is the license steward. Except as provided in Section
+10.3, no one other than the license steward has the right to modify or
+publish new versions of this License. Each version will be given a
+distinguishing version number.
+
+10.2. Effect of New Versions
+
+You may distribute the Covered Software under the terms of the version
+of the License under which You originally received the Covered Software,
+or under the terms of any subsequent version published by the license
+steward.
+
+10.3. Modified Versions
+
+If you create software not governed by this License, and you want to
+create a new license for such software, you may create and use a
+modified version of this License if you rename the license and remove
+any references to the name of the license steward (except to note that
+such modified license differs from this License).
+
+10.4. Distributing Source Code Form that is Incompatible With Secondary
+Licenses
+
+If You choose to distribute Source Code Form that is Incompatible With
+Secondary Licenses under the terms of this version of the License, the
+notice described in Exhibit B of this License must be attached.
+
+Exhibit A - Source Code Form License Notice
+-------------------------------------------
+
+  This Source Code Form is subject to the terms of the Mozilla Public
+  License, v. 2.0. If a copy of the MPL was not distributed with this
+  file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+If it is not possible or desirable to put the notice in a particular
+file, then You may include the notice in a location (such as a LICENSE
+file in a relevant directory) where a recipient would be likely to look
+for such a notice.
+
+You may add additional accurate notices of copyright ownership.
diff --git a/README.md b/README.md
new file mode 100644
--- /dev/null
+++ b/README.md
@@ -0,0 +1,28 @@
+# gogol-admin-directory
+
+* [Version](#version)
+* [Description](#description)
+* [Contribute](#contribute)
+* [Licence](#licence)
+
+
+## Version
+
+`0.0.1`
+
+
+## Description
+
+A client library for the Google Admin Directory.
+
+
+## Contribute
+
+For any problems, comments, or feedback please create an issue [here on GitHub](https://github.com/brendanhay/amazonka/issues).
+
+> _Note:_ this library is an auto-generated Haskell package. Please see `amazonka-gen` for more information.
+
+
+## Licence
+
+`gogol-admin-directory` is released under the [Mozilla Public License Version 2.0](http://www.mozilla.org/MPL/).
diff --git a/Setup.hs b/Setup.hs
new file mode 100644
--- /dev/null
+++ b/Setup.hs
@@ -0,0 +1,2 @@
+import           Distribution.Simple
+main = defaultMain
diff --git a/gen/Network/Google/Directory.hs b/gen/Network/Google/Directory.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Directory.hs
@@ -0,0 +1,1168 @@
+{-# LANGUAGE DataKinds         #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# LANGUAGE TypeOperators     #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+
+-- |
+-- Module      : Network.Google.Directory
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- The Admin SDK Directory API lets you view and manage enterprise
+-- resources such as users and groups, administrative notifications,
+-- security features, and more.
+--
+-- /See:/ <https://developers.google.com/admin-sdk/directory/ Admin Directory API Reference>
+module Network.Google.Directory
+    (
+    -- * Service Configuration
+      directoryService
+
+    -- * API Declaration
+    , DirectoryAPI
+
+    -- * Resources
+
+    -- ** admin.channels.stop
+    , module Network.Google.Resource.Admin.Channels.Stop
+
+    -- ** directory.asps.delete
+    , module Network.Google.Resource.Directory.Asps.Delete
+
+    -- ** directory.asps.get
+    , module Network.Google.Resource.Directory.Asps.Get
+
+    -- ** directory.asps.list
+    , module Network.Google.Resource.Directory.Asps.List
+
+    -- ** directory.chromeosdevices.get
+    , module Network.Google.Resource.Directory.ChromeosDevices.Get
+
+    -- ** directory.chromeosdevices.list
+    , module Network.Google.Resource.Directory.ChromeosDevices.List
+
+    -- ** directory.chromeosdevices.patch
+    , module Network.Google.Resource.Directory.ChromeosDevices.Patch
+
+    -- ** directory.chromeosdevices.update
+    , module Network.Google.Resource.Directory.ChromeosDevices.Update
+
+    -- ** directory.customers.get
+    , module Network.Google.Resource.Directory.Customers.Get
+
+    -- ** directory.customers.patch
+    , module Network.Google.Resource.Directory.Customers.Patch
+
+    -- ** directory.customers.update
+    , module Network.Google.Resource.Directory.Customers.Update
+
+    -- ** directory.domainAliases.delete
+    , module Network.Google.Resource.Directory.DomainAliases.Delete
+
+    -- ** directory.domainAliases.get
+    , module Network.Google.Resource.Directory.DomainAliases.Get
+
+    -- ** directory.domainAliases.insert
+    , module Network.Google.Resource.Directory.DomainAliases.Insert
+
+    -- ** directory.domainAliases.list
+    , module Network.Google.Resource.Directory.DomainAliases.List
+
+    -- ** directory.domains.delete
+    , module Network.Google.Resource.Directory.Domains.Delete
+
+    -- ** directory.domains.get
+    , module Network.Google.Resource.Directory.Domains.Get
+
+    -- ** directory.domains.insert
+    , module Network.Google.Resource.Directory.Domains.Insert
+
+    -- ** directory.domains.list
+    , module Network.Google.Resource.Directory.Domains.List
+
+    -- ** directory.groups.aliases.delete
+    , module Network.Google.Resource.Directory.Groups.Aliases.Delete
+
+    -- ** directory.groups.aliases.insert
+    , module Network.Google.Resource.Directory.Groups.Aliases.Insert
+
+    -- ** directory.groups.aliases.list
+    , module Network.Google.Resource.Directory.Groups.Aliases.List
+
+    -- ** directory.groups.delete
+    , module Network.Google.Resource.Directory.Groups.Delete
+
+    -- ** directory.groups.get
+    , module Network.Google.Resource.Directory.Groups.Get
+
+    -- ** directory.groups.insert
+    , module Network.Google.Resource.Directory.Groups.Insert
+
+    -- ** directory.groups.list
+    , module Network.Google.Resource.Directory.Groups.List
+
+    -- ** directory.groups.patch
+    , module Network.Google.Resource.Directory.Groups.Patch
+
+    -- ** directory.groups.update
+    , module Network.Google.Resource.Directory.Groups.Update
+
+    -- ** directory.members.delete
+    , module Network.Google.Resource.Directory.Members.Delete
+
+    -- ** directory.members.get
+    , module Network.Google.Resource.Directory.Members.Get
+
+    -- ** directory.members.insert
+    , module Network.Google.Resource.Directory.Members.Insert
+
+    -- ** directory.members.list
+    , module Network.Google.Resource.Directory.Members.List
+
+    -- ** directory.members.patch
+    , module Network.Google.Resource.Directory.Members.Patch
+
+    -- ** directory.members.update
+    , module Network.Google.Resource.Directory.Members.Update
+
+    -- ** directory.mobiledevices.action
+    , module Network.Google.Resource.Directory.MobileDevices.Action
+
+    -- ** directory.mobiledevices.delete
+    , module Network.Google.Resource.Directory.MobileDevices.Delete
+
+    -- ** directory.mobiledevices.get
+    , module Network.Google.Resource.Directory.MobileDevices.Get
+
+    -- ** directory.mobiledevices.list
+    , module Network.Google.Resource.Directory.MobileDevices.List
+
+    -- ** directory.notifications.delete
+    , module Network.Google.Resource.Directory.Notifications.Delete
+
+    -- ** directory.notifications.get
+    , module Network.Google.Resource.Directory.Notifications.Get
+
+    -- ** directory.notifications.list
+    , module Network.Google.Resource.Directory.Notifications.List
+
+    -- ** directory.notifications.patch
+    , module Network.Google.Resource.Directory.Notifications.Patch
+
+    -- ** directory.notifications.update
+    , module Network.Google.Resource.Directory.Notifications.Update
+
+    -- ** directory.orgunits.delete
+    , module Network.Google.Resource.Directory.OrgUnits.Delete
+
+    -- ** directory.orgunits.get
+    , module Network.Google.Resource.Directory.OrgUnits.Get
+
+    -- ** directory.orgunits.insert
+    , module Network.Google.Resource.Directory.OrgUnits.Insert
+
+    -- ** directory.orgunits.list
+    , module Network.Google.Resource.Directory.OrgUnits.List
+
+    -- ** directory.orgunits.patch
+    , module Network.Google.Resource.Directory.OrgUnits.Patch
+
+    -- ** directory.orgunits.update
+    , module Network.Google.Resource.Directory.OrgUnits.Update
+
+    -- ** directory.privileges.list
+    , module Network.Google.Resource.Directory.Privileges.List
+
+    -- ** directory.roleAssignments.delete
+    , module Network.Google.Resource.Directory.RoleAssignments.Delete
+
+    -- ** directory.roleAssignments.get
+    , module Network.Google.Resource.Directory.RoleAssignments.Get
+
+    -- ** directory.roleAssignments.insert
+    , module Network.Google.Resource.Directory.RoleAssignments.Insert
+
+    -- ** directory.roleAssignments.list
+    , module Network.Google.Resource.Directory.RoleAssignments.List
+
+    -- ** directory.roles.delete
+    , module Network.Google.Resource.Directory.Roles.Delete
+
+    -- ** directory.roles.get
+    , module Network.Google.Resource.Directory.Roles.Get
+
+    -- ** directory.roles.insert
+    , module Network.Google.Resource.Directory.Roles.Insert
+
+    -- ** directory.roles.list
+    , module Network.Google.Resource.Directory.Roles.List
+
+    -- ** directory.roles.patch
+    , module Network.Google.Resource.Directory.Roles.Patch
+
+    -- ** directory.roles.update
+    , module Network.Google.Resource.Directory.Roles.Update
+
+    -- ** directory.schemas.delete
+    , module Network.Google.Resource.Directory.Schemas.Delete
+
+    -- ** directory.schemas.get
+    , module Network.Google.Resource.Directory.Schemas.Get
+
+    -- ** directory.schemas.insert
+    , module Network.Google.Resource.Directory.Schemas.Insert
+
+    -- ** directory.schemas.list
+    , module Network.Google.Resource.Directory.Schemas.List
+
+    -- ** directory.schemas.patch
+    , module Network.Google.Resource.Directory.Schemas.Patch
+
+    -- ** directory.schemas.update
+    , module Network.Google.Resource.Directory.Schemas.Update
+
+    -- ** directory.tokens.delete
+    , module Network.Google.Resource.Directory.Tokens.Delete
+
+    -- ** directory.tokens.get
+    , module Network.Google.Resource.Directory.Tokens.Get
+
+    -- ** directory.tokens.list
+    , module Network.Google.Resource.Directory.Tokens.List
+
+    -- ** directory.users.aliases.delete
+    , module Network.Google.Resource.Directory.Users.Aliases.Delete
+
+    -- ** directory.users.aliases.insert
+    , module Network.Google.Resource.Directory.Users.Aliases.Insert
+
+    -- ** directory.users.aliases.list
+    , module Network.Google.Resource.Directory.Users.Aliases.List
+
+    -- ** directory.users.aliases.watch
+    , module Network.Google.Resource.Directory.Users.Aliases.Watch
+
+    -- ** directory.users.delete
+    , module Network.Google.Resource.Directory.Users.Delete
+
+    -- ** directory.users.get
+    , module Network.Google.Resource.Directory.Users.Get
+
+    -- ** directory.users.insert
+    , module Network.Google.Resource.Directory.Users.Insert
+
+    -- ** directory.users.list
+    , module Network.Google.Resource.Directory.Users.List
+
+    -- ** directory.users.makeAdmin
+    , module Network.Google.Resource.Directory.Users.MakeAdmin
+
+    -- ** directory.users.patch
+    , module Network.Google.Resource.Directory.Users.Patch
+
+    -- ** directory.users.photos.delete
+    , module Network.Google.Resource.Directory.Users.Photos.Delete
+
+    -- ** directory.users.photos.get
+    , module Network.Google.Resource.Directory.Users.Photos.Get
+
+    -- ** directory.users.photos.patch
+    , module Network.Google.Resource.Directory.Users.Photos.Patch
+
+    -- ** directory.users.photos.update
+    , module Network.Google.Resource.Directory.Users.Photos.Update
+
+    -- ** directory.users.undelete
+    , module Network.Google.Resource.Directory.Users.Undelete
+
+    -- ** directory.users.update
+    , module Network.Google.Resource.Directory.Users.Update
+
+    -- ** directory.users.watch
+    , module Network.Google.Resource.Directory.Users.Watch
+
+    -- ** directory.verificationCodes.generate
+    , module Network.Google.Resource.Directory.VerificationCodes.Generate
+
+    -- ** directory.verificationCodes.invalidate
+    , module Network.Google.Resource.Directory.VerificationCodes.Invalidate
+
+    -- ** directory.verificationCodes.list
+    , module Network.Google.Resource.Directory.VerificationCodes.List
+
+    -- * Types
+
+    -- ** VerificationCode
+    , VerificationCode
+    , verificationCode
+    , vcVerificationCode
+    , vcEtag
+    , vcKind
+    , vcUserId
+
+    -- ** OrgUnit
+    , OrgUnit
+    , orgUnit
+    , ouEtag
+    , ouParentOrgUnitPath
+    , ouKind
+    , ouOrgUnitPath
+    , ouName
+    , ouBlockInheritance
+    , ouParentOrgUnitId
+    , ouDescription
+    , ouOrgUnitId
+
+    -- ** UserMakeAdmin
+    , UserMakeAdmin
+    , userMakeAdmin
+    , umaStatus
+
+    -- ** UserAbout
+    , UserAbout
+    , userAbout
+    , uaValue
+    , uaContentType
+
+    -- ** UsersListEvent
+    , UsersListEvent (..)
+
+    -- ** Privileges
+    , Privileges
+    , privileges
+    , pEtag
+    , pKind
+    , pItems
+
+    -- ** Groups
+    , Groups
+    , groups
+    , gGroups
+    , gEtag
+    , gNextPageToken
+    , gKind
+
+    -- ** UsersAliasesListEvent
+    , UsersAliasesListEvent (..)
+
+    -- ** RoleAssignments
+    , RoleAssignments
+    , roleAssignments
+    , raEtag
+    , raNextPageToken
+    , raKind
+    , raItems
+
+    -- ** Privilege
+    , Privilege
+    , privilege
+    , priEtag
+    , priIsOuScopable
+    , priKind
+    , priServiceName
+    , priServiceId
+    , priPrivilegeName
+    , priChildPrivileges
+
+    -- ** UsersAliasesWatchEvent
+    , UsersAliasesWatchEvent (..)
+
+    -- ** Roles
+    , Roles
+    , roles
+    , rEtag
+    , rNextPageToken
+    , rKind
+    , rItems
+
+    -- ** UsersWatchEvent
+    , UsersWatchEvent (..)
+
+    -- ** UserAddress
+    , UserAddress
+    , userAddress
+    , uaStreetAddress
+    , uaPoBox
+    , uaCountry
+    , uaPostalCode
+    , uaFormatted
+    , uaExtendedAddress
+    , uaLocality
+    , uaPrimary
+    , uaCountryCode
+    , uaRegion
+    , uaType
+    , uaCustomType
+    , uaSourceIsStructured
+
+    -- ** CustomerPostalAddress
+    , CustomerPostalAddress
+    , customerPostalAddress
+    , cpaOrganizationName
+    , cpaPostalCode
+    , cpaAddressLine1
+    , cpaLocality
+    , cpaContactName
+    , cpaAddressLine2
+    , cpaCountryCode
+    , cpaRegion
+    , cpaAddressLine3
+
+    -- ** RoleAssignment
+    , RoleAssignment
+    , roleAssignment
+    , rolEtag
+    , rolScopeType
+    , rolKind
+    , rolAssignedTo
+    , rolRoleId
+    , rolRoleAssignmentId
+    , rolOrgUnitId
+
+    -- ** Group
+    , Group
+    , group'
+    , groEmail
+    , groEtag
+    , groDirectMembersCount
+    , groKind
+    , groAliases
+    , groNonEditableAliases
+    , groName
+    , groAdminCreated
+    , groId
+    , groDescription
+
+    -- ** ChromeOSDevice
+    , ChromeOSDevice
+    , chromeOSDevice
+    , codStatus
+    , codEtag
+    , codAnnotatedUser
+    , codPlatformVersion
+    , codLastSync
+    , codActiveTimeRanges
+    , codKind
+    , codEthernetMACAddress
+    , codLastEnrollmentTime
+    , codAnnotatedLocation
+    , codMACAddress
+    , codOrgUnitPath
+    , codRecentUsers
+    , codSupportEndDate
+    , codModel
+    , codWillAutoRenew
+    , codMeid
+    , codDeviceId
+    , codBootMode
+    , codOrderNumber
+    , codAnnotatedAssetId
+    , codNotes
+    , codSerialNumber
+    , codFirmwareVersion
+    , codOSVersion
+
+    -- ** ChromeosDevicesPatchProjection
+    , ChromeosDevicesPatchProjection (..)
+
+    -- ** ChromeosDevicesGetProjection
+    , ChromeosDevicesGetProjection (..)
+
+    -- ** Users
+    , Users
+    , users
+    , uEtag
+    , uNextPageToken
+    , uUsers
+    , uKind
+    , uTriggerEvent
+
+    -- ** Asp
+    , Asp
+    , asp
+    , aCreationTime
+    , aEtag
+    , aCodeId
+    , aKind
+    , aName
+    , aLastTimeUsed
+    , aUserKey
+
+    -- ** Schemas
+    , Schemas
+    , schemas
+    , sEtag
+    , sSchemas
+    , sKind
+
+    -- ** UsersListViewType
+    , UsersListViewType (..)
+
+    -- ** OrgUnitsListType
+    , OrgUnitsListType (..)
+
+    -- ** Notification
+    , Notification
+    , notification
+    , nSubject
+    , nEtag
+    , nKind
+    , nBody
+    , nFromAddress
+    , nIsUnread
+    , nNotificationId
+    , nSendTime
+
+    -- ** MobileDevicesListSortOrder
+    , MobileDevicesListSortOrder (..)
+
+    -- ** UserIm
+    , UserIm
+    , userIm
+    , uiIm
+    , uiProtocol
+    , uiPrimary
+    , uiCustomProtocol
+    , uiType
+    , uiCustomType
+
+    -- ** UsersListOrderBy
+    , UsersListOrderBy (..)
+
+    -- ** Tokens
+    , Tokens
+    , tokens
+    , tEtag
+    , tKind
+    , tItems
+
+    -- ** UserCustomSchemas
+    , UserCustomSchemas
+    , userCustomSchemas
+    , ucsAddtional
+
+    -- ** DomainAliases
+    , DomainAliases
+    , domainAliases
+    , daEtag
+    , daKind
+    , daDomainAliases
+
+    -- ** Aliases
+    , Aliases
+    , aliases
+    , aliEtag
+    , aliKind
+    , aliAliases
+
+    -- ** UserUndelete
+    , UserUndelete
+    , userUndelete
+    , uuOrgUnitPath
+
+    -- ** Members
+    , Members
+    , members
+    , mEtag
+    , mNextPageToken
+    , mKind
+    , mMembers
+
+    -- ** Channel
+    , Channel
+    , channel
+    , cResourceURI
+    , cResourceId
+    , cKind
+    , cExpiration
+    , cToken
+    , cAddress
+    , cPayload
+    , cParams
+    , cId
+    , cType
+
+    -- ** MobileDevices
+    , MobileDevices
+    , mobileDevices
+    , mdEtag
+    , mdNextPageToken
+    , mdKind
+    , mdMobileDevices
+
+    -- ** Token
+    , Token
+    , token
+    , tokClientId
+    , tokEtag
+    , tokDisplayText
+    , tokKind
+    , tokScopes
+    , tokNATiveApp
+    , tokAnonymous
+    , tokUserKey
+
+    -- ** UserName
+    , UserName
+    , userName
+    , unGivenName
+    , unFullName
+    , unFamilyName
+
+    -- ** UsersWatchViewType
+    , UsersWatchViewType (..)
+
+    -- ** ChromeOSDeviceRecentUsersItem
+    , ChromeOSDeviceRecentUsersItem
+    , chromeOSDeviceRecentUsersItem
+    , codruiEmail
+    , codruiType
+
+    -- ** DomainAlias
+    , DomainAlias
+    , domainAlias
+    , dCreationTime
+    , dEtag
+    , dKind
+    , dVerified
+    , dDomainAliasName
+    , dParentDomainName
+
+    -- ** Alias
+    , Alias
+    , alias
+    , aaEtag
+    , aaKind
+    , aaAlias
+    , aaId
+    , aaPrimaryEmail
+
+    -- ** UsersGetProjection
+    , UsersGetProjection (..)
+
+    -- ** Schema
+    , Schema
+    , schema
+    , schEtag
+    , schKind
+    , schSchemaName
+    , schSchemaId
+    , schFields
+
+    -- ** User
+    , User
+    , user
+    , useCreationTime
+    , useLastLoginTime
+    , useThumbnailPhotoEtag
+    , useEtag
+    , useIPWhiteListed
+    , useRelations
+    , useHashFunction
+    , useKind
+    , useChangePasswordAtNextLogin
+    , useWebsites
+    , useAddresses
+    , useAliases
+    , useThumbnailPhotoURL
+    , useExternalIds
+    , useSuspended
+    , useAgreedToTerms
+    , useDeletionTime
+    , useNonEditableAliases
+    , useOrgUnitPath
+    , useCustomerId
+    , useIncludeInGlobalAddressList
+    , usePhones
+    , useName
+    , usePassword
+    , useEmails
+    , useIms
+    , useIsAdmin
+    , useId
+    , useOrganizations
+    , usePrimaryEmail
+    , useNotes
+    , useIsDelegatedAdmin
+    , useIsMailboxSetup
+    , useCustomSchemas
+    , useSuspensionReason
+
+    -- ** MobileDevicesListProjection
+    , MobileDevicesListProjection (..)
+
+    -- ** Role
+    , Role
+    , role
+    , rrEtag
+    , rrKind
+    , rrRoleName
+    , rrIsSystemRole
+    , rrRoleId
+    , rrRoleDescription
+    , rrIsSuperAdminRole
+    , rrRolePrivileges
+
+    -- ** Customer
+    , Customer
+    , customer
+    , cusEtag
+    , cusKind
+    , cusAlternateEmail
+    , cusCustomerDomain
+    , cusPhoneNumber
+    , cusLanguage
+    , cusId
+    , cusCustomerCreationTime
+    , cusPostalAddress
+
+    -- ** MobileDeviceApplicationsItem
+    , MobileDeviceApplicationsItem
+    , mobileDeviceApplicationsItem
+    , mdaiVersionCode
+    , mdaiVersionName
+    , mdaiPackageName
+    , mdaiDisplayName
+    , mdaiPermission
+
+    -- ** MobileDevicesListOrderBy
+    , MobileDevicesListOrderBy (..)
+
+    -- ** UsersListSortOrder
+    , UsersListSortOrder (..)
+
+    -- ** OrgUnits
+    , OrgUnits
+    , orgUnits
+    , oEtag
+    , oKind
+    , oOrganizationUnits
+
+    -- ** VerificationCodes
+    , VerificationCodes
+    , verificationCodes
+    , vEtag
+    , vKind
+    , vItems
+
+    -- ** ChromeosDevicesListSortOrder
+    , ChromeosDevicesListSortOrder (..)
+
+    -- ** UserRelation
+    , UserRelation
+    , userRelation
+    , urValue
+    , urType
+    , urCustomType
+
+    -- ** UsersWatchSortOrder
+    , UsersWatchSortOrder (..)
+
+    -- ** ChannelParams
+    , ChannelParams
+    , channelParams
+    , cpAddtional
+
+    -- ** UserOrganization
+    , UserOrganization
+    , userOrganization
+    , uoDePartment
+    , uoLocation
+    , uoCostCenter
+    , uoDomain
+    , uoSymbol
+    , uoPrimary
+    , uoName
+    , uoTitle
+    , uoType
+    , uoCustomType
+    , uoDescription
+
+    -- ** UserWebsite
+    , UserWebsite
+    , userWebsite
+    , uwValue
+    , uwPrimary
+    , uwType
+    , uwCustomType
+
+    -- ** ChromeOSDeviceActiveTimeRangesItem
+    , ChromeOSDeviceActiveTimeRangesItem
+    , chromeOSDeviceActiveTimeRangesItem
+    , codatriDate
+    , codatriActiveTime
+
+    -- ** UserEmail
+    , UserEmail
+    , userEmail
+    , ueAddress
+    , uePrimary
+    , ueType
+    , ueCustomType
+
+    -- ** UserPhone
+    , UserPhone
+    , userPhone
+    , upValue
+    , upPrimary
+    , upType
+    , upCustomType
+
+    -- ** UserPhoto
+    , UserPhoto
+    , userPhoto
+    , upPhotoData
+    , upEtag
+    , upHeight
+    , upKind
+    , upWidth
+    , upMimeType
+    , upId
+    , upPrimaryEmail
+
+    -- ** UsersListProjection
+    , UsersListProjection (..)
+
+    -- ** ChromeosDevicesUpdateProjection
+    , ChromeosDevicesUpdateProjection (..)
+
+    -- ** MobileDevicesGetProjection
+    , MobileDevicesGetProjection (..)
+
+    -- ** MobileDevice
+    , MobileDevice
+    , mobileDevice
+    , mobEmail
+    , mobStatus
+    , mobEtag
+    , mobResourceId
+    , mobBuildNumber
+    , mobManagedAccountIsOnOwnerProFile
+    , mobLastSync
+    , mobOtherAccountsInfo
+    , mobKind
+    , mobAdbStatus
+    , mobNetworkOperator
+    , mobKernelVersion
+    , mobOS
+    , mobName
+    , mobModel
+    , mobDeveloperOptionsStatus
+    , mobUnknownSourcesStatus
+    , mobMeid
+    , mobDeviceId
+    , mobFirstSync
+    , mobUserAgent
+    , mobImei
+    , mobType
+    , mobWifiMACAddress
+    , mobSerialNumber
+    , mobHardwareId
+    , mobBasebandVersion
+    , mobSupportsWorkProFile
+    , mobDeviceCompromisedStatus
+    , mobApplications
+    , mobDefaultLanguage
+
+    -- ** Member
+    , Member
+    , member
+    , memEmail
+    , memEtag
+    , memKind
+    , memRole
+    , memId
+    , memType
+
+    -- ** UserCustomProperties
+    , UserCustomProperties
+    , userCustomProperties
+    , ucpAddtional
+
+    -- ** Domains
+    , Domains
+    , domains
+    , domCreationTime
+    , domEtag
+    , domKind
+    , domDomainAliases
+    , domVerified
+    , domDomainName
+    , domIsPrimary
+
+    -- ** ChromeosDevicesListOrderBy
+    , ChromeosDevicesListOrderBy (..)
+
+    -- ** UsersWatchProjection
+    , UsersWatchProjection (..)
+
+    -- ** UsersWatchOrderBy
+    , UsersWatchOrderBy (..)
+
+    -- ** Notifications
+    , Notifications
+    , notifications
+    , notEtag
+    , notNextPageToken
+    , notKind
+    , notItems
+    , notUnreadNotificationsCount
+
+    -- ** ChromeosDevicesListProjection
+    , ChromeosDevicesListProjection (..)
+
+    -- ** SchemaFieldSpecNumericIndexingSpec
+    , SchemaFieldSpecNumericIndexingSpec
+    , schemaFieldSpecNumericIndexingSpec
+    , sfsnisMaxValue
+    , sfsnisMinValue
+
+    -- ** MobileDeviceAction
+    , MobileDeviceAction
+    , mobileDeviceAction
+    , mdaAction
+
+    -- ** SchemaFieldSpec
+    , SchemaFieldSpec
+    , schemaFieldSpec
+    , sfsEtag
+    , sfsKind
+    , sfsNumericIndexingSpec
+    , sfsReadAccessType
+    , sfsFieldId
+    , sfsIndexed
+    , sfsFieldType
+    , sfsFieldName
+    , sfsMultiValued
+
+    -- ** ChromeOSDevices
+    , ChromeOSDevices
+    , chromeOSDevices
+    , cosdEtag
+    , cosdNextPageToken
+    , cosdKind
+    , cosdChromeosDevices
+
+    -- ** UserExternalId
+    , UserExternalId
+    , userExternalId
+    , ueiValue
+    , ueiType
+    , ueiCustomType
+
+    -- ** Asps
+    , Asps
+    , asps
+    , aspEtag
+    , aspKind
+    , aspItems
+
+    -- ** UsersGetViewType
+    , UsersGetViewType (..)
+
+    -- ** RoleRolePrivilegesItem
+    , RoleRolePrivilegesItem
+    , roleRolePrivilegesItem
+    , rrpiServiceId
+    , rrpiPrivilegeName
+
+    -- ** Domains2
+    , Domains2
+    , domains2
+    , ddEtag
+    , ddKind
+    , ddDomains
+    ) where
+
+import           Network.Google.Directory.Types
+import           Network.Google.Prelude
+import           Network.Google.Resource.Admin.Channels.Stop
+import           Network.Google.Resource.Directory.Asps.Delete
+import           Network.Google.Resource.Directory.Asps.Get
+import           Network.Google.Resource.Directory.Asps.List
+import           Network.Google.Resource.Directory.ChromeosDevices.Get
+import           Network.Google.Resource.Directory.ChromeosDevices.List
+import           Network.Google.Resource.Directory.ChromeosDevices.Patch
+import           Network.Google.Resource.Directory.ChromeosDevices.Update
+import           Network.Google.Resource.Directory.Customers.Get
+import           Network.Google.Resource.Directory.Customers.Patch
+import           Network.Google.Resource.Directory.Customers.Update
+import           Network.Google.Resource.Directory.DomainAliases.Delete
+import           Network.Google.Resource.Directory.DomainAliases.Get
+import           Network.Google.Resource.Directory.DomainAliases.Insert
+import           Network.Google.Resource.Directory.DomainAliases.List
+import           Network.Google.Resource.Directory.Domains.Delete
+import           Network.Google.Resource.Directory.Domains.Get
+import           Network.Google.Resource.Directory.Domains.Insert
+import           Network.Google.Resource.Directory.Domains.List
+import           Network.Google.Resource.Directory.Groups.Aliases.Delete
+import           Network.Google.Resource.Directory.Groups.Aliases.Insert
+import           Network.Google.Resource.Directory.Groups.Aliases.List
+import           Network.Google.Resource.Directory.Groups.Delete
+import           Network.Google.Resource.Directory.Groups.Get
+import           Network.Google.Resource.Directory.Groups.Insert
+import           Network.Google.Resource.Directory.Groups.List
+import           Network.Google.Resource.Directory.Groups.Patch
+import           Network.Google.Resource.Directory.Groups.Update
+import           Network.Google.Resource.Directory.Members.Delete
+import           Network.Google.Resource.Directory.Members.Get
+import           Network.Google.Resource.Directory.Members.Insert
+import           Network.Google.Resource.Directory.Members.List
+import           Network.Google.Resource.Directory.Members.Patch
+import           Network.Google.Resource.Directory.Members.Update
+import           Network.Google.Resource.Directory.MobileDevices.Action
+import           Network.Google.Resource.Directory.MobileDevices.Delete
+import           Network.Google.Resource.Directory.MobileDevices.Get
+import           Network.Google.Resource.Directory.MobileDevices.List
+import           Network.Google.Resource.Directory.Notifications.Delete
+import           Network.Google.Resource.Directory.Notifications.Get
+import           Network.Google.Resource.Directory.Notifications.List
+import           Network.Google.Resource.Directory.Notifications.Patch
+import           Network.Google.Resource.Directory.Notifications.Update
+import           Network.Google.Resource.Directory.OrgUnits.Delete
+import           Network.Google.Resource.Directory.OrgUnits.Get
+import           Network.Google.Resource.Directory.OrgUnits.Insert
+import           Network.Google.Resource.Directory.OrgUnits.List
+import           Network.Google.Resource.Directory.OrgUnits.Patch
+import           Network.Google.Resource.Directory.OrgUnits.Update
+import           Network.Google.Resource.Directory.Privileges.List
+import           Network.Google.Resource.Directory.RoleAssignments.Delete
+import           Network.Google.Resource.Directory.RoleAssignments.Get
+import           Network.Google.Resource.Directory.RoleAssignments.Insert
+import           Network.Google.Resource.Directory.RoleAssignments.List
+import           Network.Google.Resource.Directory.Roles.Delete
+import           Network.Google.Resource.Directory.Roles.Get
+import           Network.Google.Resource.Directory.Roles.Insert
+import           Network.Google.Resource.Directory.Roles.List
+import           Network.Google.Resource.Directory.Roles.Patch
+import           Network.Google.Resource.Directory.Roles.Update
+import           Network.Google.Resource.Directory.Schemas.Delete
+import           Network.Google.Resource.Directory.Schemas.Get
+import           Network.Google.Resource.Directory.Schemas.Insert
+import           Network.Google.Resource.Directory.Schemas.List
+import           Network.Google.Resource.Directory.Schemas.Patch
+import           Network.Google.Resource.Directory.Schemas.Update
+import           Network.Google.Resource.Directory.Tokens.Delete
+import           Network.Google.Resource.Directory.Tokens.Get
+import           Network.Google.Resource.Directory.Tokens.List
+import           Network.Google.Resource.Directory.Users.Aliases.Delete
+import           Network.Google.Resource.Directory.Users.Aliases.Insert
+import           Network.Google.Resource.Directory.Users.Aliases.List
+import           Network.Google.Resource.Directory.Users.Aliases.Watch
+import           Network.Google.Resource.Directory.Users.Delete
+import           Network.Google.Resource.Directory.Users.Get
+import           Network.Google.Resource.Directory.Users.Insert
+import           Network.Google.Resource.Directory.Users.List
+import           Network.Google.Resource.Directory.Users.MakeAdmin
+import           Network.Google.Resource.Directory.Users.Patch
+import           Network.Google.Resource.Directory.Users.Photos.Delete
+import           Network.Google.Resource.Directory.Users.Photos.Get
+import           Network.Google.Resource.Directory.Users.Photos.Patch
+import           Network.Google.Resource.Directory.Users.Photos.Update
+import           Network.Google.Resource.Directory.Users.Undelete
+import           Network.Google.Resource.Directory.Users.Update
+import           Network.Google.Resource.Directory.Users.Watch
+import           Network.Google.Resource.Directory.VerificationCodes.Generate
+import           Network.Google.Resource.Directory.VerificationCodes.Invalidate
+import           Network.Google.Resource.Directory.VerificationCodes.List
+
+{- $resources
+TODO
+-}
+
+-- | Represents the entirety of the methods and resources available for the Admin Directory API service.
+type DirectoryAPI =
+     PrivilegesListResource :<|>
+       GroupsAliasesInsertResource
+       :<|> GroupsAliasesListResource
+       :<|> GroupsAliasesDeleteResource
+       :<|> GroupsInsertResource
+       :<|> GroupsListResource
+       :<|> GroupsPatchResource
+       :<|> GroupsGetResource
+       :<|> GroupsDeleteResource
+       :<|> GroupsUpdateResource
+       :<|> RoleAssignmentsInsertResource
+       :<|> RoleAssignmentsListResource
+       :<|> RoleAssignmentsGetResource
+       :<|> RoleAssignmentsDeleteResource
+       :<|> RolesInsertResource
+       :<|> RolesListResource
+       :<|> RolesPatchResource
+       :<|> RolesGetResource
+       :<|> RolesDeleteResource
+       :<|> RolesUpdateResource
+       :<|> CustomersPatchResource
+       :<|> CustomersGetResource
+       :<|> CustomersUpdateResource
+       :<|> UsersAliasesInsertResource
+       :<|> UsersAliasesListResource
+       :<|> UsersAliasesDeleteResource
+       :<|> UsersAliasesWatchResource
+       :<|> UsersPhotosPatchResource
+       :<|> UsersPhotosGetResource
+       :<|> UsersPhotosDeleteResource
+       :<|> UsersPhotosUpdateResource
+       :<|> UsersInsertResource
+       :<|> UsersListResource
+       :<|> UsersUndeleteResource
+       :<|> UsersPatchResource
+       :<|> UsersGetResource
+       :<|> UsersMakeAdminResource
+       :<|> UsersDeleteResource
+       :<|> UsersUpdateResource
+       :<|> UsersWatchResource
+       :<|> SchemasInsertResource
+       :<|> SchemasListResource
+       :<|> SchemasPatchResource
+       :<|> SchemasGetResource
+       :<|> SchemasDeleteResource
+       :<|> SchemasUpdateResource
+       :<|> TokensListResource
+       :<|> TokensGetResource
+       :<|> TokensDeleteResource
+       :<|> DomainAliasesInsertResource
+       :<|> DomainAliasesListResource
+       :<|> DomainAliasesGetResource
+       :<|> DomainAliasesDeleteResource
+       :<|> ChannelsStopResource
+       :<|> MembersInsertResource
+       :<|> MembersListResource
+       :<|> MembersPatchResource
+       :<|> MembersGetResource
+       :<|> MembersDeleteResource
+       :<|> MembersUpdateResource
+       :<|> MobileDevicesListResource
+       :<|> MobileDevicesGetResource
+       :<|> MobileDevicesActionResource
+       :<|> MobileDevicesDeleteResource
+       :<|> OrgUnitsInsertResource
+       :<|> OrgUnitsListResource
+       :<|> OrgUnitsPatchResource
+       :<|> OrgUnitsGetResource
+       :<|> OrgUnitsDeleteResource
+       :<|> OrgUnitsUpdateResource
+       :<|> VerificationCodesListResource
+       :<|> VerificationCodesGenerateResource
+       :<|> VerificationCodesInvalidateResource
+       :<|> DomainsInsertResource
+       :<|> DomainsListResource
+       :<|> DomainsGetResource
+       :<|> DomainsDeleteResource
+       :<|> NotificationsListResource
+       :<|> NotificationsPatchResource
+       :<|> NotificationsGetResource
+       :<|> NotificationsDeleteResource
+       :<|> NotificationsUpdateResource
+       :<|> ChromeosDevicesListResource
+       :<|> ChromeosDevicesPatchResource
+       :<|> ChromeosDevicesGetResource
+       :<|> ChromeosDevicesUpdateResource
+       :<|> AspsListResource
+       :<|> AspsGetResource
+       :<|> AspsDeleteResource
diff --git a/gen/Network/Google/Directory/Types.hs b/gen/Network/Google/Directory/Types.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Directory/Types.hs
@@ -0,0 +1,838 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- |
+-- Module      : Network.Google.Directory.Types
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+module Network.Google.Directory.Types
+    (
+    -- * Service Configuration
+      directoryService
+
+    -- * OAuth Scopes
+    , adminDirectoryRolemanagementReadonlyScope
+    , adminDirectoryGroupReadonlyScope
+    , adminDirectoryDeviceChromeosReadonlyScope
+    , adminDirectoryDeviceChromeosScope
+    , adminDirectoryUserScope
+    , adminDirectoryGroupMemberReadonlyScope
+    , adminDirectoryUserAliasScope
+    , adminDirectoryDeviceMobileActionScope
+    , adminDirectoryDomainReadonlyScope
+    , adminDirectoryUserschemaScope
+    , adminDirectoryUserschemaReadonlyScope
+    , adminDirectoryDomainScope
+    , adminDirectoryRolemanagementScope
+    , adminDirectoryGroupScope
+    , adminDirectoryOrgunitReadonlyScope
+    , adminDirectoryCustomerScope
+    , adminDirectoryCustomerReadonlyScope
+    , adminDirectoryOrgunitScope
+    , adminDirectoryUserReadonlyScope
+    , adminDirectoryUserAliasReadonlyScope
+    , adminDirectoryUserSecurityScope
+    , adminDirectoryGroupMemberScope
+    , adminDirectoryNotificationsScope
+    , adminDirectoryDeviceMobileScope
+    , adminDirectoryDeviceMobileReadonlyScope
+
+    -- * VerificationCode
+    , VerificationCode
+    , verificationCode
+    , vcVerificationCode
+    , vcEtag
+    , vcKind
+    , vcUserId
+
+    -- * OrgUnit
+    , OrgUnit
+    , orgUnit
+    , ouEtag
+    , ouParentOrgUnitPath
+    , ouKind
+    , ouOrgUnitPath
+    , ouName
+    , ouBlockInheritance
+    , ouParentOrgUnitId
+    , ouDescription
+    , ouOrgUnitId
+
+    -- * UserMakeAdmin
+    , UserMakeAdmin
+    , userMakeAdmin
+    , umaStatus
+
+    -- * UserAbout
+    , UserAbout
+    , userAbout
+    , uaValue
+    , uaContentType
+
+    -- * UsersListEvent
+    , UsersListEvent (..)
+
+    -- * Privileges
+    , Privileges
+    , privileges
+    , pEtag
+    , pKind
+    , pItems
+
+    -- * Groups
+    , Groups
+    , groups
+    , gGroups
+    , gEtag
+    , gNextPageToken
+    , gKind
+
+    -- * UsersAliasesListEvent
+    , UsersAliasesListEvent (..)
+
+    -- * RoleAssignments
+    , RoleAssignments
+    , roleAssignments
+    , raEtag
+    , raNextPageToken
+    , raKind
+    , raItems
+
+    -- * Privilege
+    , Privilege
+    , privilege
+    , priEtag
+    , priIsOuScopable
+    , priKind
+    , priServiceName
+    , priServiceId
+    , priPrivilegeName
+    , priChildPrivileges
+
+    -- * UsersAliasesWatchEvent
+    , UsersAliasesWatchEvent (..)
+
+    -- * Roles
+    , Roles
+    , roles
+    , rEtag
+    , rNextPageToken
+    , rKind
+    , rItems
+
+    -- * UsersWatchEvent
+    , UsersWatchEvent (..)
+
+    -- * UserAddress
+    , UserAddress
+    , userAddress
+    , uaStreetAddress
+    , uaPoBox
+    , uaCountry
+    , uaPostalCode
+    , uaFormatted
+    , uaExtendedAddress
+    , uaLocality
+    , uaPrimary
+    , uaCountryCode
+    , uaRegion
+    , uaType
+    , uaCustomType
+    , uaSourceIsStructured
+
+    -- * CustomerPostalAddress
+    , CustomerPostalAddress
+    , customerPostalAddress
+    , cpaOrganizationName
+    , cpaPostalCode
+    , cpaAddressLine1
+    , cpaLocality
+    , cpaContactName
+    , cpaAddressLine2
+    , cpaCountryCode
+    , cpaRegion
+    , cpaAddressLine3
+
+    -- * RoleAssignment
+    , RoleAssignment
+    , roleAssignment
+    , rolEtag
+    , rolScopeType
+    , rolKind
+    , rolAssignedTo
+    , rolRoleId
+    , rolRoleAssignmentId
+    , rolOrgUnitId
+
+    -- * Group
+    , Group
+    , group'
+    , groEmail
+    , groEtag
+    , groDirectMembersCount
+    , groKind
+    , groAliases
+    , groNonEditableAliases
+    , groName
+    , groAdminCreated
+    , groId
+    , groDescription
+
+    -- * ChromeOSDevice
+    , ChromeOSDevice
+    , chromeOSDevice
+    , codStatus
+    , codEtag
+    , codAnnotatedUser
+    , codPlatformVersion
+    , codLastSync
+    , codActiveTimeRanges
+    , codKind
+    , codEthernetMACAddress
+    , codLastEnrollmentTime
+    , codAnnotatedLocation
+    , codMACAddress
+    , codOrgUnitPath
+    , codRecentUsers
+    , codSupportEndDate
+    , codModel
+    , codWillAutoRenew
+    , codMeid
+    , codDeviceId
+    , codBootMode
+    , codOrderNumber
+    , codAnnotatedAssetId
+    , codNotes
+    , codSerialNumber
+    , codFirmwareVersion
+    , codOSVersion
+
+    -- * ChromeosDevicesPatchProjection
+    , ChromeosDevicesPatchProjection (..)
+
+    -- * ChromeosDevicesGetProjection
+    , ChromeosDevicesGetProjection (..)
+
+    -- * Users
+    , Users
+    , users
+    , uEtag
+    , uNextPageToken
+    , uUsers
+    , uKind
+    , uTriggerEvent
+
+    -- * Asp
+    , Asp
+    , asp
+    , aCreationTime
+    , aEtag
+    , aCodeId
+    , aKind
+    , aName
+    , aLastTimeUsed
+    , aUserKey
+
+    -- * Schemas
+    , Schemas
+    , schemas
+    , sEtag
+    , sSchemas
+    , sKind
+
+    -- * UsersListViewType
+    , UsersListViewType (..)
+
+    -- * OrgUnitsListType
+    , OrgUnitsListType (..)
+
+    -- * Notification
+    , Notification
+    , notification
+    , nSubject
+    , nEtag
+    , nKind
+    , nBody
+    , nFromAddress
+    , nIsUnread
+    , nNotificationId
+    , nSendTime
+
+    -- * MobileDevicesListSortOrder
+    , MobileDevicesListSortOrder (..)
+
+    -- * UserIm
+    , UserIm
+    , userIm
+    , uiIm
+    , uiProtocol
+    , uiPrimary
+    , uiCustomProtocol
+    , uiType
+    , uiCustomType
+
+    -- * UsersListOrderBy
+    , UsersListOrderBy (..)
+
+    -- * Tokens
+    , Tokens
+    , tokens
+    , tEtag
+    , tKind
+    , tItems
+
+    -- * UserCustomSchemas
+    , UserCustomSchemas
+    , userCustomSchemas
+    , ucsAddtional
+
+    -- * DomainAliases
+    , DomainAliases
+    , domainAliases
+    , daEtag
+    , daKind
+    , daDomainAliases
+
+    -- * Aliases
+    , Aliases
+    , aliases
+    , aliEtag
+    , aliKind
+    , aliAliases
+
+    -- * UserUndelete
+    , UserUndelete
+    , userUndelete
+    , uuOrgUnitPath
+
+    -- * Members
+    , Members
+    , members
+    , mEtag
+    , mNextPageToken
+    , mKind
+    , mMembers
+
+    -- * Channel
+    , Channel
+    , channel
+    , cResourceURI
+    , cResourceId
+    , cKind
+    , cExpiration
+    , cToken
+    , cAddress
+    , cPayload
+    , cParams
+    , cId
+    , cType
+
+    -- * MobileDevices
+    , MobileDevices
+    , mobileDevices
+    , mdEtag
+    , mdNextPageToken
+    , mdKind
+    , mdMobileDevices
+
+    -- * Token
+    , Token
+    , token
+    , tokClientId
+    , tokEtag
+    , tokDisplayText
+    , tokKind
+    , tokScopes
+    , tokNATiveApp
+    , tokAnonymous
+    , tokUserKey
+
+    -- * UserName
+    , UserName
+    , userName
+    , unGivenName
+    , unFullName
+    , unFamilyName
+
+    -- * UsersWatchViewType
+    , UsersWatchViewType (..)
+
+    -- * ChromeOSDeviceRecentUsersItem
+    , ChromeOSDeviceRecentUsersItem
+    , chromeOSDeviceRecentUsersItem
+    , codruiEmail
+    , codruiType
+
+    -- * DomainAlias
+    , DomainAlias
+    , domainAlias
+    , dCreationTime
+    , dEtag
+    , dKind
+    , dVerified
+    , dDomainAliasName
+    , dParentDomainName
+
+    -- * Alias
+    , Alias
+    , alias
+    , aaEtag
+    , aaKind
+    , aaAlias
+    , aaId
+    , aaPrimaryEmail
+
+    -- * UsersGetProjection
+    , UsersGetProjection (..)
+
+    -- * Schema
+    , Schema
+    , schema
+    , schEtag
+    , schKind
+    , schSchemaName
+    , schSchemaId
+    , schFields
+
+    -- * User
+    , User
+    , user
+    , useCreationTime
+    , useLastLoginTime
+    , useThumbnailPhotoEtag
+    , useEtag
+    , useIPWhiteListed
+    , useRelations
+    , useHashFunction
+    , useKind
+    , useChangePasswordAtNextLogin
+    , useWebsites
+    , useAddresses
+    , useAliases
+    , useThumbnailPhotoURL
+    , useExternalIds
+    , useSuspended
+    , useAgreedToTerms
+    , useDeletionTime
+    , useNonEditableAliases
+    , useOrgUnitPath
+    , useCustomerId
+    , useIncludeInGlobalAddressList
+    , usePhones
+    , useName
+    , usePassword
+    , useEmails
+    , useIms
+    , useIsAdmin
+    , useId
+    , useOrganizations
+    , usePrimaryEmail
+    , useNotes
+    , useIsDelegatedAdmin
+    , useIsMailboxSetup
+    , useCustomSchemas
+    , useSuspensionReason
+
+    -- * MobileDevicesListProjection
+    , MobileDevicesListProjection (..)
+
+    -- * Role
+    , Role
+    , role
+    , rrEtag
+    , rrKind
+    , rrRoleName
+    , rrIsSystemRole
+    , rrRoleId
+    , rrRoleDescription
+    , rrIsSuperAdminRole
+    , rrRolePrivileges
+
+    -- * Customer
+    , Customer
+    , customer
+    , cusEtag
+    , cusKind
+    , cusAlternateEmail
+    , cusCustomerDomain
+    , cusPhoneNumber
+    , cusLanguage
+    , cusId
+    , cusCustomerCreationTime
+    , cusPostalAddress
+
+    -- * MobileDeviceApplicationsItem
+    , MobileDeviceApplicationsItem
+    , mobileDeviceApplicationsItem
+    , mdaiVersionCode
+    , mdaiVersionName
+    , mdaiPackageName
+    , mdaiDisplayName
+    , mdaiPermission
+
+    -- * MobileDevicesListOrderBy
+    , MobileDevicesListOrderBy (..)
+
+    -- * UsersListSortOrder
+    , UsersListSortOrder (..)
+
+    -- * OrgUnits
+    , OrgUnits
+    , orgUnits
+    , oEtag
+    , oKind
+    , oOrganizationUnits
+
+    -- * VerificationCodes
+    , VerificationCodes
+    , verificationCodes
+    , vEtag
+    , vKind
+    , vItems
+
+    -- * ChromeosDevicesListSortOrder
+    , ChromeosDevicesListSortOrder (..)
+
+    -- * UserRelation
+    , UserRelation
+    , userRelation
+    , urValue
+    , urType
+    , urCustomType
+
+    -- * UsersWatchSortOrder
+    , UsersWatchSortOrder (..)
+
+    -- * ChannelParams
+    , ChannelParams
+    , channelParams
+    , cpAddtional
+
+    -- * UserOrganization
+    , UserOrganization
+    , userOrganization
+    , uoDePartment
+    , uoLocation
+    , uoCostCenter
+    , uoDomain
+    , uoSymbol
+    , uoPrimary
+    , uoName
+    , uoTitle
+    , uoType
+    , uoCustomType
+    , uoDescription
+
+    -- * UserWebsite
+    , UserWebsite
+    , userWebsite
+    , uwValue
+    , uwPrimary
+    , uwType
+    , uwCustomType
+
+    -- * ChromeOSDeviceActiveTimeRangesItem
+    , ChromeOSDeviceActiveTimeRangesItem
+    , chromeOSDeviceActiveTimeRangesItem
+    , codatriDate
+    , codatriActiveTime
+
+    -- * UserEmail
+    , UserEmail
+    , userEmail
+    , ueAddress
+    , uePrimary
+    , ueType
+    , ueCustomType
+
+    -- * UserPhone
+    , UserPhone
+    , userPhone
+    , upValue
+    , upPrimary
+    , upType
+    , upCustomType
+
+    -- * UserPhoto
+    , UserPhoto
+    , userPhoto
+    , upPhotoData
+    , upEtag
+    , upHeight
+    , upKind
+    , upWidth
+    , upMimeType
+    , upId
+    , upPrimaryEmail
+
+    -- * UsersListProjection
+    , UsersListProjection (..)
+
+    -- * ChromeosDevicesUpdateProjection
+    , ChromeosDevicesUpdateProjection (..)
+
+    -- * MobileDevicesGetProjection
+    , MobileDevicesGetProjection (..)
+
+    -- * MobileDevice
+    , MobileDevice
+    , mobileDevice
+    , mobEmail
+    , mobStatus
+    , mobEtag
+    , mobResourceId
+    , mobBuildNumber
+    , mobManagedAccountIsOnOwnerProFile
+    , mobLastSync
+    , mobOtherAccountsInfo
+    , mobKind
+    , mobAdbStatus
+    , mobNetworkOperator
+    , mobKernelVersion
+    , mobOS
+    , mobName
+    , mobModel
+    , mobDeveloperOptionsStatus
+    , mobUnknownSourcesStatus
+    , mobMeid
+    , mobDeviceId
+    , mobFirstSync
+    , mobUserAgent
+    , mobImei
+    , mobType
+    , mobWifiMACAddress
+    , mobSerialNumber
+    , mobHardwareId
+    , mobBasebandVersion
+    , mobSupportsWorkProFile
+    , mobDeviceCompromisedStatus
+    , mobApplications
+    , mobDefaultLanguage
+
+    -- * Member
+    , Member
+    , member
+    , memEmail
+    , memEtag
+    , memKind
+    , memRole
+    , memId
+    , memType
+
+    -- * UserCustomProperties
+    , UserCustomProperties
+    , userCustomProperties
+    , ucpAddtional
+
+    -- * Domains
+    , Domains
+    , domains
+    , domCreationTime
+    , domEtag
+    , domKind
+    , domDomainAliases
+    , domVerified
+    , domDomainName
+    , domIsPrimary
+
+    -- * ChromeosDevicesListOrderBy
+    , ChromeosDevicesListOrderBy (..)
+
+    -- * UsersWatchProjection
+    , UsersWatchProjection (..)
+
+    -- * UsersWatchOrderBy
+    , UsersWatchOrderBy (..)
+
+    -- * Notifications
+    , Notifications
+    , notifications
+    , notEtag
+    , notNextPageToken
+    , notKind
+    , notItems
+    , notUnreadNotificationsCount
+
+    -- * ChromeosDevicesListProjection
+    , ChromeosDevicesListProjection (..)
+
+    -- * SchemaFieldSpecNumericIndexingSpec
+    , SchemaFieldSpecNumericIndexingSpec
+    , schemaFieldSpecNumericIndexingSpec
+    , sfsnisMaxValue
+    , sfsnisMinValue
+
+    -- * MobileDeviceAction
+    , MobileDeviceAction
+    , mobileDeviceAction
+    , mdaAction
+
+    -- * SchemaFieldSpec
+    , SchemaFieldSpec
+    , schemaFieldSpec
+    , sfsEtag
+    , sfsKind
+    , sfsNumericIndexingSpec
+    , sfsReadAccessType
+    , sfsFieldId
+    , sfsIndexed
+    , sfsFieldType
+    , sfsFieldName
+    , sfsMultiValued
+
+    -- * ChromeOSDevices
+    , ChromeOSDevices
+    , chromeOSDevices
+    , cosdEtag
+    , cosdNextPageToken
+    , cosdKind
+    , cosdChromeosDevices
+
+    -- * UserExternalId
+    , UserExternalId
+    , userExternalId
+    , ueiValue
+    , ueiType
+    , ueiCustomType
+
+    -- * Asps
+    , Asps
+    , asps
+    , aspEtag
+    , aspKind
+    , aspItems
+
+    -- * UsersGetViewType
+    , UsersGetViewType (..)
+
+    -- * RoleRolePrivilegesItem
+    , RoleRolePrivilegesItem
+    , roleRolePrivilegesItem
+    , rrpiServiceId
+    , rrpiPrivilegeName
+
+    -- * Domains2
+    , Domains2
+    , domains2
+    , ddEtag
+    , ddKind
+    , ddDomains
+    ) where
+
+import           Network.Google.Directory.Types.Product
+import           Network.Google.Directory.Types.Sum
+import           Network.Google.Prelude
+
+-- | Default request referring to version 'directory_v1' of the Admin Directory API. This contains the host and root path used as a starting point for constructing service requests.
+directoryService :: Service
+directoryService
+  = defaultService (ServiceId "admin:directory_v1")
+      "www.googleapis.com"
+
+-- | View delegated admin roles for your domain
+adminDirectoryRolemanagementReadonlyScope :: OAuthScope
+adminDirectoryRolemanagementReadonlyScope = "https://www.googleapis.com/auth/admin.directory.rolemanagement.readonly";
+
+-- | View groups on your domain
+adminDirectoryGroupReadonlyScope :: OAuthScope
+adminDirectoryGroupReadonlyScope = "https://www.googleapis.com/auth/admin.directory.group.readonly";
+
+-- | View your Chrome OS devices\' metadata
+adminDirectoryDeviceChromeosReadonlyScope :: OAuthScope
+adminDirectoryDeviceChromeosReadonlyScope = "https://www.googleapis.com/auth/admin.directory.device.chromeos.readonly";
+
+-- | View and manage your Chrome OS devices\' metadata
+adminDirectoryDeviceChromeosScope :: OAuthScope
+adminDirectoryDeviceChromeosScope = "https://www.googleapis.com/auth/admin.directory.device.chromeos";
+
+-- | View and manage the provisioning of users on your domain
+adminDirectoryUserScope :: OAuthScope
+adminDirectoryUserScope = "https://www.googleapis.com/auth/admin.directory.user";
+
+-- | View group subscriptions on your domain
+adminDirectoryGroupMemberReadonlyScope :: OAuthScope
+adminDirectoryGroupMemberReadonlyScope = "https://www.googleapis.com/auth/admin.directory.group.member.readonly";
+
+-- | View and manage user aliases on your domain
+adminDirectoryUserAliasScope :: OAuthScope
+adminDirectoryUserAliasScope = "https://www.googleapis.com/auth/admin.directory.user.alias";
+
+-- | Manage your mobile devices by performing administrative tasks
+adminDirectoryDeviceMobileActionScope :: OAuthScope
+adminDirectoryDeviceMobileActionScope = "https://www.googleapis.com/auth/admin.directory.device.mobile.action";
+
+-- | View domains related to your customers
+adminDirectoryDomainReadonlyScope :: OAuthScope
+adminDirectoryDomainReadonlyScope = "https://www.googleapis.com/auth/admin.directory.domain.readonly";
+
+-- | View and manage the provisioning of user schemas on your domain
+adminDirectoryUserschemaScope :: OAuthScope
+adminDirectoryUserschemaScope = "https://www.googleapis.com/auth/admin.directory.userschema";
+
+-- | View user schemas on your domain
+adminDirectoryUserschemaReadonlyScope :: OAuthScope
+adminDirectoryUserschemaReadonlyScope = "https://www.googleapis.com/auth/admin.directory.userschema.readonly";
+
+-- | View and manage the provisioning of domains for your customers
+adminDirectoryDomainScope :: OAuthScope
+adminDirectoryDomainScope = "https://www.googleapis.com/auth/admin.directory.domain";
+
+-- | Manage delegated admin roles for your domain
+adminDirectoryRolemanagementScope :: OAuthScope
+adminDirectoryRolemanagementScope = "https://www.googleapis.com/auth/admin.directory.rolemanagement";
+
+-- | View and manage the provisioning of groups on your domain
+adminDirectoryGroupScope :: OAuthScope
+adminDirectoryGroupScope = "https://www.googleapis.com/auth/admin.directory.group";
+
+-- | View organization units on your domain
+adminDirectoryOrgunitReadonlyScope :: OAuthScope
+adminDirectoryOrgunitReadonlyScope = "https://www.googleapis.com/auth/admin.directory.orgunit.readonly";
+
+-- | View and manage customer related information
+adminDirectoryCustomerScope :: OAuthScope
+adminDirectoryCustomerScope = "https://www.googleapis.com/auth/admin.directory.customer";
+
+-- | View customer related information
+adminDirectoryCustomerReadonlyScope :: OAuthScope
+adminDirectoryCustomerReadonlyScope = "https://www.googleapis.com/auth/admin.directory.customer.readonly";
+
+-- | View and manage organization units on your domain
+adminDirectoryOrgunitScope :: OAuthScope
+adminDirectoryOrgunitScope = "https://www.googleapis.com/auth/admin.directory.orgunit";
+
+-- | View users on your domain
+adminDirectoryUserReadonlyScope :: OAuthScope
+adminDirectoryUserReadonlyScope = "https://www.googleapis.com/auth/admin.directory.user.readonly";
+
+-- | View user aliases on your domain
+adminDirectoryUserAliasReadonlyScope :: OAuthScope
+adminDirectoryUserAliasReadonlyScope = "https://www.googleapis.com/auth/admin.directory.user.alias.readonly";
+
+-- | Manage data access permissions for users on your domain
+adminDirectoryUserSecurityScope :: OAuthScope
+adminDirectoryUserSecurityScope = "https://www.googleapis.com/auth/admin.directory.user.security";
+
+-- | View and manage group subscriptions on your domain
+adminDirectoryGroupMemberScope :: OAuthScope
+adminDirectoryGroupMemberScope = "https://www.googleapis.com/auth/admin.directory.group.member";
+
+-- | View and manage notifications received on your domain
+adminDirectoryNotificationsScope :: OAuthScope
+adminDirectoryNotificationsScope = "https://www.googleapis.com/auth/admin.directory.notifications";
+
+-- | View and manage your mobile devices\' metadata
+adminDirectoryDeviceMobileScope :: OAuthScope
+adminDirectoryDeviceMobileScope = "https://www.googleapis.com/auth/admin.directory.device.mobile";
+
+-- | View your mobile devices\' metadata
+adminDirectoryDeviceMobileReadonlyScope :: OAuthScope
+adminDirectoryDeviceMobileReadonlyScope = "https://www.googleapis.com/auth/admin.directory.device.mobile.readonly";
diff --git a/gen/Network/Google/Directory/Types/Product.hs b/gen/Network/Google/Directory/Types/Product.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Directory/Types/Product.hs
@@ -0,0 +1,5677 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- |
+-- Module      : Network.Google.Directory.Types.Product
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+module Network.Google.Directory.Types.Product where
+
+import           Network.Google.Directory.Types.Sum
+import           Network.Google.Prelude
+
+-- | JSON template for verification codes in Directory API.
+--
+-- /See:/ 'verificationCode' smart constructor.
+data VerificationCode = VerificationCode
+    { _vcVerificationCode :: !(Maybe Text)
+    , _vcEtag             :: !(Maybe Text)
+    , _vcKind             :: !Text
+    , _vcUserId           :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'VerificationCode' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'vcVerificationCode'
+--
+-- * 'vcEtag'
+--
+-- * 'vcKind'
+--
+-- * 'vcUserId'
+verificationCode
+    :: VerificationCode
+verificationCode =
+    VerificationCode
+    { _vcVerificationCode = Nothing
+    , _vcEtag = Nothing
+    , _vcKind = "admin#directory#verificationCode"
+    , _vcUserId = Nothing
+    }
+
+-- | A current verification code for the user. Invalidated or used
+-- verification codes are not returned as part of the result.
+vcVerificationCode :: Lens' VerificationCode (Maybe Text)
+vcVerificationCode
+  = lens _vcVerificationCode
+      (\ s a -> s{_vcVerificationCode = a})
+
+-- | ETag of the resource.
+vcEtag :: Lens' VerificationCode (Maybe Text)
+vcEtag = lens _vcEtag (\ s a -> s{_vcEtag = a})
+
+-- | The type of the resource. This is always
+-- admin#directory#verificationCode.
+vcKind :: Lens' VerificationCode Text
+vcKind = lens _vcKind (\ s a -> s{_vcKind = a})
+
+-- | The obfuscated unique ID of the user.
+vcUserId :: Lens' VerificationCode (Maybe Text)
+vcUserId = lens _vcUserId (\ s a -> s{_vcUserId = a})
+
+instance FromJSON VerificationCode where
+        parseJSON
+          = withObject "VerificationCode"
+              (\ o ->
+                 VerificationCode <$>
+                   (o .:? "verificationCode") <*> (o .:? "etag") <*>
+                     (o .:? "kind" .!= "admin#directory#verificationCode")
+                     <*> (o .:? "userId"))
+
+instance ToJSON VerificationCode where
+        toJSON VerificationCode{..}
+          = object
+              (catMaybes
+                 [("verificationCode" .=) <$> _vcVerificationCode,
+                  ("etag" .=) <$> _vcEtag, Just ("kind" .= _vcKind),
+                  ("userId" .=) <$> _vcUserId])
+
+-- | JSON template for Org Unit resource in Directory API.
+--
+-- /See:/ 'orgUnit' smart constructor.
+data OrgUnit = OrgUnit
+    { _ouEtag              :: !(Maybe Text)
+    , _ouParentOrgUnitPath :: !(Maybe Text)
+    , _ouKind              :: !Text
+    , _ouOrgUnitPath       :: !(Maybe Text)
+    , _ouName              :: !(Maybe Text)
+    , _ouBlockInheritance  :: !(Maybe Bool)
+    , _ouParentOrgUnitId   :: !(Maybe Text)
+    , _ouDescription       :: !(Maybe Text)
+    , _ouOrgUnitId         :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'OrgUnit' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ouEtag'
+--
+-- * 'ouParentOrgUnitPath'
+--
+-- * 'ouKind'
+--
+-- * 'ouOrgUnitPath'
+--
+-- * 'ouName'
+--
+-- * 'ouBlockInheritance'
+--
+-- * 'ouParentOrgUnitId'
+--
+-- * 'ouDescription'
+--
+-- * 'ouOrgUnitId'
+orgUnit
+    :: OrgUnit
+orgUnit =
+    OrgUnit
+    { _ouEtag = Nothing
+    , _ouParentOrgUnitPath = Nothing
+    , _ouKind = "admin#directory#orgUnit"
+    , _ouOrgUnitPath = Nothing
+    , _ouName = Nothing
+    , _ouBlockInheritance = Nothing
+    , _ouParentOrgUnitId = Nothing
+    , _ouDescription = Nothing
+    , _ouOrgUnitId = Nothing
+    }
+
+-- | ETag of the resource.
+ouEtag :: Lens' OrgUnit (Maybe Text)
+ouEtag = lens _ouEtag (\ s a -> s{_ouEtag = a})
+
+-- | Path of parent OrgUnit
+ouParentOrgUnitPath :: Lens' OrgUnit (Maybe Text)
+ouParentOrgUnitPath
+  = lens _ouParentOrgUnitPath
+      (\ s a -> s{_ouParentOrgUnitPath = a})
+
+-- | Kind of resource this is.
+ouKind :: Lens' OrgUnit Text
+ouKind = lens _ouKind (\ s a -> s{_ouKind = a})
+
+-- | Path of OrgUnit
+ouOrgUnitPath :: Lens' OrgUnit (Maybe Text)
+ouOrgUnitPath
+  = lens _ouOrgUnitPath
+      (\ s a -> s{_ouOrgUnitPath = a})
+
+-- | Name of OrgUnit
+ouName :: Lens' OrgUnit (Maybe Text)
+ouName = lens _ouName (\ s a -> s{_ouName = a})
+
+-- | Should block inheritance
+ouBlockInheritance :: Lens' OrgUnit (Maybe Bool)
+ouBlockInheritance
+  = lens _ouBlockInheritance
+      (\ s a -> s{_ouBlockInheritance = a})
+
+-- | Id of parent OrgUnit
+ouParentOrgUnitId :: Lens' OrgUnit (Maybe Text)
+ouParentOrgUnitId
+  = lens _ouParentOrgUnitId
+      (\ s a -> s{_ouParentOrgUnitId = a})
+
+-- | Description of OrgUnit
+ouDescription :: Lens' OrgUnit (Maybe Text)
+ouDescription
+  = lens _ouDescription
+      (\ s a -> s{_ouDescription = a})
+
+-- | Id of OrgUnit
+ouOrgUnitId :: Lens' OrgUnit (Maybe Text)
+ouOrgUnitId
+  = lens _ouOrgUnitId (\ s a -> s{_ouOrgUnitId = a})
+
+instance FromJSON OrgUnit where
+        parseJSON
+          = withObject "OrgUnit"
+              (\ o ->
+                 OrgUnit <$>
+                   (o .:? "etag") <*> (o .:? "parentOrgUnitPath") <*>
+                     (o .:? "kind" .!= "admin#directory#orgUnit")
+                     <*> (o .:? "orgUnitPath")
+                     <*> (o .:? "name")
+                     <*> (o .:? "blockInheritance")
+                     <*> (o .:? "parentOrgUnitId")
+                     <*> (o .:? "description")
+                     <*> (o .:? "orgUnitId"))
+
+instance ToJSON OrgUnit where
+        toJSON OrgUnit{..}
+          = object
+              (catMaybes
+                 [("etag" .=) <$> _ouEtag,
+                  ("parentOrgUnitPath" .=) <$> _ouParentOrgUnitPath,
+                  Just ("kind" .= _ouKind),
+                  ("orgUnitPath" .=) <$> _ouOrgUnitPath,
+                  ("name" .=) <$> _ouName,
+                  ("blockInheritance" .=) <$> _ouBlockInheritance,
+                  ("parentOrgUnitId" .=) <$> _ouParentOrgUnitId,
+                  ("description" .=) <$> _ouDescription,
+                  ("orgUnitId" .=) <$> _ouOrgUnitId])
+
+-- | JSON request template for setting\/revoking admin status of a user in
+-- Directory API.
+--
+-- /See:/ 'userMakeAdmin' smart constructor.
+newtype UserMakeAdmin = UserMakeAdmin
+    { _umaStatus :: Maybe Bool
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'UserMakeAdmin' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'umaStatus'
+userMakeAdmin
+    :: UserMakeAdmin
+userMakeAdmin =
+    UserMakeAdmin
+    { _umaStatus = Nothing
+    }
+
+-- | Boolean indicating new admin status of the user
+umaStatus :: Lens' UserMakeAdmin (Maybe Bool)
+umaStatus
+  = lens _umaStatus (\ s a -> s{_umaStatus = a})
+
+instance FromJSON UserMakeAdmin where
+        parseJSON
+          = withObject "UserMakeAdmin"
+              (\ o -> UserMakeAdmin <$> (o .:? "status"))
+
+instance ToJSON UserMakeAdmin where
+        toJSON UserMakeAdmin{..}
+          = object (catMaybes [("status" .=) <$> _umaStatus])
+
+-- | JSON template for About (notes) of a user in Directory API.
+--
+-- /See:/ 'userAbout' smart constructor.
+data UserAbout = UserAbout
+    { _uaValue       :: !(Maybe Text)
+    , _uaContentType :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'UserAbout' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'uaValue'
+--
+-- * 'uaContentType'
+userAbout
+    :: UserAbout
+userAbout =
+    UserAbout
+    { _uaValue = Nothing
+    , _uaContentType = Nothing
+    }
+
+-- | Actual value of notes.
+uaValue :: Lens' UserAbout (Maybe Text)
+uaValue = lens _uaValue (\ s a -> s{_uaValue = a})
+
+-- | About entry can have a type which indicates the content type. It can
+-- either be plain or html. By default, notes contents are assumed to
+-- contain plain text.
+uaContentType :: Lens' UserAbout (Maybe Text)
+uaContentType
+  = lens _uaContentType
+      (\ s a -> s{_uaContentType = a})
+
+instance FromJSON UserAbout where
+        parseJSON
+          = withObject "UserAbout"
+              (\ o ->
+                 UserAbout <$>
+                   (o .:? "value") <*> (o .:? "contentType"))
+
+instance ToJSON UserAbout where
+        toJSON UserAbout{..}
+          = object
+              (catMaybes
+                 [("value" .=) <$> _uaValue,
+                  ("contentType" .=) <$> _uaContentType])
+
+-- | JSON response template for List privileges operation in Directory API.
+--
+-- /See:/ 'privileges' smart constructor.
+data Privileges = Privileges
+    { _pEtag  :: !(Maybe Text)
+    , _pKind  :: !Text
+    , _pItems :: !(Maybe [Privilege])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Privileges' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pEtag'
+--
+-- * 'pKind'
+--
+-- * 'pItems'
+privileges
+    :: Privileges
+privileges =
+    Privileges
+    { _pEtag = Nothing
+    , _pKind = "admin#directory#privileges"
+    , _pItems = Nothing
+    }
+
+-- | ETag of the resource.
+pEtag :: Lens' Privileges (Maybe Text)
+pEtag = lens _pEtag (\ s a -> s{_pEtag = a})
+
+-- | The type of the API resource. This is always admin#directory#privileges.
+pKind :: Lens' Privileges Text
+pKind = lens _pKind (\ s a -> s{_pKind = a})
+
+-- | A list of Privilege resources.
+pItems :: Lens' Privileges [Privilege]
+pItems
+  = lens _pItems (\ s a -> s{_pItems = a}) . _Default .
+      _Coerce
+
+instance FromJSON Privileges where
+        parseJSON
+          = withObject "Privileges"
+              (\ o ->
+                 Privileges <$>
+                   (o .:? "etag") <*>
+                     (o .:? "kind" .!= "admin#directory#privileges")
+                     <*> (o .:? "items" .!= mempty))
+
+instance ToJSON Privileges where
+        toJSON Privileges{..}
+          = object
+              (catMaybes
+                 [("etag" .=) <$> _pEtag, Just ("kind" .= _pKind),
+                  ("items" .=) <$> _pItems])
+
+-- | JSON response template for List Groups operation in Directory API.
+--
+-- /See:/ 'groups' smart constructor.
+data Groups = Groups
+    { _gGroups        :: !(Maybe [Group])
+    , _gEtag          :: !(Maybe Text)
+    , _gNextPageToken :: !(Maybe Text)
+    , _gKind          :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Groups' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gGroups'
+--
+-- * 'gEtag'
+--
+-- * 'gNextPageToken'
+--
+-- * 'gKind'
+groups
+    :: Groups
+groups =
+    Groups
+    { _gGroups = Nothing
+    , _gEtag = Nothing
+    , _gNextPageToken = Nothing
+    , _gKind = "admin#directory#groups"
+    }
+
+-- | List of group objects.
+gGroups :: Lens' Groups [Group]
+gGroups
+  = lens _gGroups (\ s a -> s{_gGroups = a}) . _Default
+      . _Coerce
+
+-- | ETag of the resource.
+gEtag :: Lens' Groups (Maybe Text)
+gEtag = lens _gEtag (\ s a -> s{_gEtag = a})
+
+-- | Token used to access next page of this result.
+gNextPageToken :: Lens' Groups (Maybe Text)
+gNextPageToken
+  = lens _gNextPageToken
+      (\ s a -> s{_gNextPageToken = a})
+
+-- | Kind of resource this is.
+gKind :: Lens' Groups Text
+gKind = lens _gKind (\ s a -> s{_gKind = a})
+
+instance FromJSON Groups where
+        parseJSON
+          = withObject "Groups"
+              (\ o ->
+                 Groups <$>
+                   (o .:? "groups" .!= mempty) <*> (o .:? "etag") <*>
+                     (o .:? "nextPageToken")
+                     <*> (o .:? "kind" .!= "admin#directory#groups"))
+
+instance ToJSON Groups where
+        toJSON Groups{..}
+          = object
+              (catMaybes
+                 [("groups" .=) <$> _gGroups, ("etag" .=) <$> _gEtag,
+                  ("nextPageToken" .=) <$> _gNextPageToken,
+                  Just ("kind" .= _gKind)])
+
+-- | JSON response template for List roleAssignments operation in Directory
+-- API.
+--
+-- /See:/ 'roleAssignments' smart constructor.
+data RoleAssignments = RoleAssignments
+    { _raEtag          :: !(Maybe Text)
+    , _raNextPageToken :: !(Maybe Text)
+    , _raKind          :: !Text
+    , _raItems         :: !(Maybe [RoleAssignment])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'RoleAssignments' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'raEtag'
+--
+-- * 'raNextPageToken'
+--
+-- * 'raKind'
+--
+-- * 'raItems'
+roleAssignments
+    :: RoleAssignments
+roleAssignments =
+    RoleAssignments
+    { _raEtag = Nothing
+    , _raNextPageToken = Nothing
+    , _raKind = "admin#directory#roleAssignments"
+    , _raItems = Nothing
+    }
+
+-- | ETag of the resource.
+raEtag :: Lens' RoleAssignments (Maybe Text)
+raEtag = lens _raEtag (\ s a -> s{_raEtag = a})
+
+raNextPageToken :: Lens' RoleAssignments (Maybe Text)
+raNextPageToken
+  = lens _raNextPageToken
+      (\ s a -> s{_raNextPageToken = a})
+
+-- | The type of the API resource. This is always
+-- admin#directory#roleAssignments.
+raKind :: Lens' RoleAssignments Text
+raKind = lens _raKind (\ s a -> s{_raKind = a})
+
+-- | A list of RoleAssignment resources.
+raItems :: Lens' RoleAssignments [RoleAssignment]
+raItems
+  = lens _raItems (\ s a -> s{_raItems = a}) . _Default
+      . _Coerce
+
+instance FromJSON RoleAssignments where
+        parseJSON
+          = withObject "RoleAssignments"
+              (\ o ->
+                 RoleAssignments <$>
+                   (o .:? "etag") <*> (o .:? "nextPageToken") <*>
+                     (o .:? "kind" .!= "admin#directory#roleAssignments")
+                     <*> (o .:? "items" .!= mempty))
+
+instance ToJSON RoleAssignments where
+        toJSON RoleAssignments{..}
+          = object
+              (catMaybes
+                 [("etag" .=) <$> _raEtag,
+                  ("nextPageToken" .=) <$> _raNextPageToken,
+                  Just ("kind" .= _raKind), ("items" .=) <$> _raItems])
+
+-- | JSON template for privilege resource in Directory API.
+--
+-- /See:/ 'privilege' smart constructor.
+data Privilege = Privilege
+    { _priEtag            :: !(Maybe Text)
+    , _priIsOuScopable    :: !(Maybe Bool)
+    , _priKind            :: !Text
+    , _priServiceName     :: !(Maybe Text)
+    , _priServiceId       :: !(Maybe Text)
+    , _priPrivilegeName   :: !(Maybe Text)
+    , _priChildPrivileges :: !(Maybe [Privilege])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Privilege' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'priEtag'
+--
+-- * 'priIsOuScopable'
+--
+-- * 'priKind'
+--
+-- * 'priServiceName'
+--
+-- * 'priServiceId'
+--
+-- * 'priPrivilegeName'
+--
+-- * 'priChildPrivileges'
+privilege
+    :: Privilege
+privilege =
+    Privilege
+    { _priEtag = Nothing
+    , _priIsOuScopable = Nothing
+    , _priKind = "admin#directory#privilege"
+    , _priServiceName = Nothing
+    , _priServiceId = Nothing
+    , _priPrivilegeName = Nothing
+    , _priChildPrivileges = Nothing
+    }
+
+-- | ETag of the resource.
+priEtag :: Lens' Privilege (Maybe Text)
+priEtag = lens _priEtag (\ s a -> s{_priEtag = a})
+
+-- | If the privilege can be restricted to an organization unit.
+priIsOuScopable :: Lens' Privilege (Maybe Bool)
+priIsOuScopable
+  = lens _priIsOuScopable
+      (\ s a -> s{_priIsOuScopable = a})
+
+-- | The type of the API resource. This is always admin#directory#privilege.
+priKind :: Lens' Privilege Text
+priKind = lens _priKind (\ s a -> s{_priKind = a})
+
+-- | The name of the service this privilege is for.
+priServiceName :: Lens' Privilege (Maybe Text)
+priServiceName
+  = lens _priServiceName
+      (\ s a -> s{_priServiceName = a})
+
+-- | The obfuscated ID of the service this privilege is for.
+priServiceId :: Lens' Privilege (Maybe Text)
+priServiceId
+  = lens _priServiceId (\ s a -> s{_priServiceId = a})
+
+-- | The name of the privilege.
+priPrivilegeName :: Lens' Privilege (Maybe Text)
+priPrivilegeName
+  = lens _priPrivilegeName
+      (\ s a -> s{_priPrivilegeName = a})
+
+-- | A list of child privileges. Privileges for a service form a tree. Each
+-- privilege can have a list of child privileges; this list is empty for a
+-- leaf privilege.
+priChildPrivileges :: Lens' Privilege [Privilege]
+priChildPrivileges
+  = lens _priChildPrivileges
+      (\ s a -> s{_priChildPrivileges = a})
+      . _Default
+      . _Coerce
+
+instance FromJSON Privilege where
+        parseJSON
+          = withObject "Privilege"
+              (\ o ->
+                 Privilege <$>
+                   (o .:? "etag") <*> (o .:? "isOuScopable") <*>
+                     (o .:? "kind" .!= "admin#directory#privilege")
+                     <*> (o .:? "serviceName")
+                     <*> (o .:? "serviceId")
+                     <*> (o .:? "privilegeName")
+                     <*> (o .:? "childPrivileges" .!= mempty))
+
+instance ToJSON Privilege where
+        toJSON Privilege{..}
+          = object
+              (catMaybes
+                 [("etag" .=) <$> _priEtag,
+                  ("isOuScopable" .=) <$> _priIsOuScopable,
+                  Just ("kind" .= _priKind),
+                  ("serviceName" .=) <$> _priServiceName,
+                  ("serviceId" .=) <$> _priServiceId,
+                  ("privilegeName" .=) <$> _priPrivilegeName,
+                  ("childPrivileges" .=) <$> _priChildPrivileges])
+
+-- | JSON response template for List roles operation in Directory API.
+--
+-- /See:/ 'roles' smart constructor.
+data Roles = Roles
+    { _rEtag          :: !(Maybe Text)
+    , _rNextPageToken :: !(Maybe Text)
+    , _rKind          :: !Text
+    , _rItems         :: !(Maybe [Role])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Roles' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'rEtag'
+--
+-- * 'rNextPageToken'
+--
+-- * 'rKind'
+--
+-- * 'rItems'
+roles
+    :: Roles
+roles =
+    Roles
+    { _rEtag = Nothing
+    , _rNextPageToken = Nothing
+    , _rKind = "admin#directory#roles"
+    , _rItems = Nothing
+    }
+
+-- | ETag of the resource.
+rEtag :: Lens' Roles (Maybe Text)
+rEtag = lens _rEtag (\ s a -> s{_rEtag = a})
+
+rNextPageToken :: Lens' Roles (Maybe Text)
+rNextPageToken
+  = lens _rNextPageToken
+      (\ s a -> s{_rNextPageToken = a})
+
+-- | The type of the API resource. This is always admin#directory#roles.
+rKind :: Lens' Roles Text
+rKind = lens _rKind (\ s a -> s{_rKind = a})
+
+-- | A list of Role resources.
+rItems :: Lens' Roles [Role]
+rItems
+  = lens _rItems (\ s a -> s{_rItems = a}) . _Default .
+      _Coerce
+
+instance FromJSON Roles where
+        parseJSON
+          = withObject "Roles"
+              (\ o ->
+                 Roles <$>
+                   (o .:? "etag") <*> (o .:? "nextPageToken") <*>
+                     (o .:? "kind" .!= "admin#directory#roles")
+                     <*> (o .:? "items" .!= mempty))
+
+instance ToJSON Roles where
+        toJSON Roles{..}
+          = object
+              (catMaybes
+                 [("etag" .=) <$> _rEtag,
+                  ("nextPageToken" .=) <$> _rNextPageToken,
+                  Just ("kind" .= _rKind), ("items" .=) <$> _rItems])
+
+-- | JSON template for address.
+--
+-- /See:/ 'userAddress' smart constructor.
+data UserAddress = UserAddress
+    { _uaStreetAddress      :: !(Maybe Text)
+    , _uaPoBox              :: !(Maybe Text)
+    , _uaCountry            :: !(Maybe Text)
+    , _uaPostalCode         :: !(Maybe Text)
+    , _uaFormatted          :: !(Maybe Text)
+    , _uaExtendedAddress    :: !(Maybe Text)
+    , _uaLocality           :: !(Maybe Text)
+    , _uaPrimary            :: !(Maybe Bool)
+    , _uaCountryCode        :: !(Maybe Text)
+    , _uaRegion             :: !(Maybe Text)
+    , _uaType               :: !(Maybe Text)
+    , _uaCustomType         :: !(Maybe Text)
+    , _uaSourceIsStructured :: !(Maybe Bool)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'UserAddress' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'uaStreetAddress'
+--
+-- * 'uaPoBox'
+--
+-- * 'uaCountry'
+--
+-- * 'uaPostalCode'
+--
+-- * 'uaFormatted'
+--
+-- * 'uaExtendedAddress'
+--
+-- * 'uaLocality'
+--
+-- * 'uaPrimary'
+--
+-- * 'uaCountryCode'
+--
+-- * 'uaRegion'
+--
+-- * 'uaType'
+--
+-- * 'uaCustomType'
+--
+-- * 'uaSourceIsStructured'
+userAddress
+    :: UserAddress
+userAddress =
+    UserAddress
+    { _uaStreetAddress = Nothing
+    , _uaPoBox = Nothing
+    , _uaCountry = Nothing
+    , _uaPostalCode = Nothing
+    , _uaFormatted = Nothing
+    , _uaExtendedAddress = Nothing
+    , _uaLocality = Nothing
+    , _uaPrimary = Nothing
+    , _uaCountryCode = Nothing
+    , _uaRegion = Nothing
+    , _uaType = Nothing
+    , _uaCustomType = Nothing
+    , _uaSourceIsStructured = Nothing
+    }
+
+-- | Street.
+uaStreetAddress :: Lens' UserAddress (Maybe Text)
+uaStreetAddress
+  = lens _uaStreetAddress
+      (\ s a -> s{_uaStreetAddress = a})
+
+-- | Other parts of address.
+uaPoBox :: Lens' UserAddress (Maybe Text)
+uaPoBox = lens _uaPoBox (\ s a -> s{_uaPoBox = a})
+
+-- | Country.
+uaCountry :: Lens' UserAddress (Maybe Text)
+uaCountry
+  = lens _uaCountry (\ s a -> s{_uaCountry = a})
+
+-- | Postal code.
+uaPostalCode :: Lens' UserAddress (Maybe Text)
+uaPostalCode
+  = lens _uaPostalCode (\ s a -> s{_uaPostalCode = a})
+
+-- | Formatted address.
+uaFormatted :: Lens' UserAddress (Maybe Text)
+uaFormatted
+  = lens _uaFormatted (\ s a -> s{_uaFormatted = a})
+
+-- | Extended Address.
+uaExtendedAddress :: Lens' UserAddress (Maybe Text)
+uaExtendedAddress
+  = lens _uaExtendedAddress
+      (\ s a -> s{_uaExtendedAddress = a})
+
+-- | Locality.
+uaLocality :: Lens' UserAddress (Maybe Text)
+uaLocality
+  = lens _uaLocality (\ s a -> s{_uaLocality = a})
+
+-- | If this is user\'s primary address. Only one entry could be marked as
+-- primary.
+uaPrimary :: Lens' UserAddress (Maybe Bool)
+uaPrimary
+  = lens _uaPrimary (\ s a -> s{_uaPrimary = a})
+
+-- | Country code.
+uaCountryCode :: Lens' UserAddress (Maybe Text)
+uaCountryCode
+  = lens _uaCountryCode
+      (\ s a -> s{_uaCountryCode = a})
+
+-- | Region.
+uaRegion :: Lens' UserAddress (Maybe Text)
+uaRegion = lens _uaRegion (\ s a -> s{_uaRegion = a})
+
+-- | Each entry can have a type which indicates standard values of that
+-- entry. For example address could be of home, work etc. In addition to
+-- the standard type, an entry can have a custom type and can take any
+-- value. Such type should have the CUSTOM value as type and also have a
+-- customType value.
+uaType :: Lens' UserAddress (Maybe Text)
+uaType = lens _uaType (\ s a -> s{_uaType = a})
+
+-- | Custom type.
+uaCustomType :: Lens' UserAddress (Maybe Text)
+uaCustomType
+  = lens _uaCustomType (\ s a -> s{_uaCustomType = a})
+
+-- | User supplied address was structured. Structured addresses are NOT
+-- supported at this time. You might be able to write structured addresses,
+-- but any values will eventually be clobbered.
+uaSourceIsStructured :: Lens' UserAddress (Maybe Bool)
+uaSourceIsStructured
+  = lens _uaSourceIsStructured
+      (\ s a -> s{_uaSourceIsStructured = a})
+
+instance FromJSON UserAddress where
+        parseJSON
+          = withObject "UserAddress"
+              (\ o ->
+                 UserAddress <$>
+                   (o .:? "streetAddress") <*> (o .:? "poBox") <*>
+                     (o .:? "country")
+                     <*> (o .:? "postalCode")
+                     <*> (o .:? "formatted")
+                     <*> (o .:? "extendedAddress")
+                     <*> (o .:? "locality")
+                     <*> (o .:? "primary")
+                     <*> (o .:? "countryCode")
+                     <*> (o .:? "region")
+                     <*> (o .:? "type")
+                     <*> (o .:? "customType")
+                     <*> (o .:? "sourceIsStructured"))
+
+instance ToJSON UserAddress where
+        toJSON UserAddress{..}
+          = object
+              (catMaybes
+                 [("streetAddress" .=) <$> _uaStreetAddress,
+                  ("poBox" .=) <$> _uaPoBox,
+                  ("country" .=) <$> _uaCountry,
+                  ("postalCode" .=) <$> _uaPostalCode,
+                  ("formatted" .=) <$> _uaFormatted,
+                  ("extendedAddress" .=) <$> _uaExtendedAddress,
+                  ("locality" .=) <$> _uaLocality,
+                  ("primary" .=) <$> _uaPrimary,
+                  ("countryCode" .=) <$> _uaCountryCode,
+                  ("region" .=) <$> _uaRegion, ("type" .=) <$> _uaType,
+                  ("customType" .=) <$> _uaCustomType,
+                  ("sourceIsStructured" .=) <$> _uaSourceIsStructured])
+
+-- | JSON template for postal address of a customer.
+--
+-- /See:/ 'customerPostalAddress' smart constructor.
+data CustomerPostalAddress = CustomerPostalAddress
+    { _cpaOrganizationName :: !(Maybe Text)
+    , _cpaPostalCode       :: !(Maybe Text)
+    , _cpaAddressLine1     :: !(Maybe Text)
+    , _cpaLocality         :: !(Maybe Text)
+    , _cpaContactName      :: !(Maybe Text)
+    , _cpaAddressLine2     :: !(Maybe Text)
+    , _cpaCountryCode      :: !(Maybe Text)
+    , _cpaRegion           :: !(Maybe Text)
+    , _cpaAddressLine3     :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CustomerPostalAddress' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cpaOrganizationName'
+--
+-- * 'cpaPostalCode'
+--
+-- * 'cpaAddressLine1'
+--
+-- * 'cpaLocality'
+--
+-- * 'cpaContactName'
+--
+-- * 'cpaAddressLine2'
+--
+-- * 'cpaCountryCode'
+--
+-- * 'cpaRegion'
+--
+-- * 'cpaAddressLine3'
+customerPostalAddress
+    :: CustomerPostalAddress
+customerPostalAddress =
+    CustomerPostalAddress
+    { _cpaOrganizationName = Nothing
+    , _cpaPostalCode = Nothing
+    , _cpaAddressLine1 = Nothing
+    , _cpaLocality = Nothing
+    , _cpaContactName = Nothing
+    , _cpaAddressLine2 = Nothing
+    , _cpaCountryCode = Nothing
+    , _cpaRegion = Nothing
+    , _cpaAddressLine3 = Nothing
+    }
+
+-- | The company or company division name.
+cpaOrganizationName :: Lens' CustomerPostalAddress (Maybe Text)
+cpaOrganizationName
+  = lens _cpaOrganizationName
+      (\ s a -> s{_cpaOrganizationName = a})
+
+-- | The postal code. A postalCode example is a postal zip code such as
+-- 10009. This is in accordance with -
+-- http:\/\/portablecontacts.net\/draft-spec.html#address_element.
+cpaPostalCode :: Lens' CustomerPostalAddress (Maybe Text)
+cpaPostalCode
+  = lens _cpaPostalCode
+      (\ s a -> s{_cpaPostalCode = a})
+
+-- | A customer\'s physical address. The address can be composed of one to
+-- three lines.
+cpaAddressLine1 :: Lens' CustomerPostalAddress (Maybe Text)
+cpaAddressLine1
+  = lens _cpaAddressLine1
+      (\ s a -> s{_cpaAddressLine1 = a})
+
+-- | Name of the locality. An example of a locality value is the city of San
+-- Francisco.
+cpaLocality :: Lens' CustomerPostalAddress (Maybe Text)
+cpaLocality
+  = lens _cpaLocality (\ s a -> s{_cpaLocality = a})
+
+-- | The customer contact\'s name.
+cpaContactName :: Lens' CustomerPostalAddress (Maybe Text)
+cpaContactName
+  = lens _cpaContactName
+      (\ s a -> s{_cpaContactName = a})
+
+-- | Address line 2 of the address.
+cpaAddressLine2 :: Lens' CustomerPostalAddress (Maybe Text)
+cpaAddressLine2
+  = lens _cpaAddressLine2
+      (\ s a -> s{_cpaAddressLine2 = a})
+
+-- | This is a required property. For countryCode information see the ISO
+-- 3166 country code elements.
+cpaCountryCode :: Lens' CustomerPostalAddress (Maybe Text)
+cpaCountryCode
+  = lens _cpaCountryCode
+      (\ s a -> s{_cpaCountryCode = a})
+
+-- | Name of the region. An example of a region value is NY for the state of
+-- New York.
+cpaRegion :: Lens' CustomerPostalAddress (Maybe Text)
+cpaRegion
+  = lens _cpaRegion (\ s a -> s{_cpaRegion = a})
+
+-- | Address line 3 of the address.
+cpaAddressLine3 :: Lens' CustomerPostalAddress (Maybe Text)
+cpaAddressLine3
+  = lens _cpaAddressLine3
+      (\ s a -> s{_cpaAddressLine3 = a})
+
+instance FromJSON CustomerPostalAddress where
+        parseJSON
+          = withObject "CustomerPostalAddress"
+              (\ o ->
+                 CustomerPostalAddress <$>
+                   (o .:? "organizationName") <*> (o .:? "postalCode")
+                     <*> (o .:? "addressLine1")
+                     <*> (o .:? "locality")
+                     <*> (o .:? "contactName")
+                     <*> (o .:? "addressLine2")
+                     <*> (o .:? "countryCode")
+                     <*> (o .:? "region")
+                     <*> (o .:? "addressLine3"))
+
+instance ToJSON CustomerPostalAddress where
+        toJSON CustomerPostalAddress{..}
+          = object
+              (catMaybes
+                 [("organizationName" .=) <$> _cpaOrganizationName,
+                  ("postalCode" .=) <$> _cpaPostalCode,
+                  ("addressLine1" .=) <$> _cpaAddressLine1,
+                  ("locality" .=) <$> _cpaLocality,
+                  ("contactName" .=) <$> _cpaContactName,
+                  ("addressLine2" .=) <$> _cpaAddressLine2,
+                  ("countryCode" .=) <$> _cpaCountryCode,
+                  ("region" .=) <$> _cpaRegion,
+                  ("addressLine3" .=) <$> _cpaAddressLine3])
+
+-- | JSON template for roleAssignment resource in Directory API.
+--
+-- /See:/ 'roleAssignment' smart constructor.
+data RoleAssignment = RoleAssignment
+    { _rolEtag             :: !(Maybe Text)
+    , _rolScopeType        :: !(Maybe Text)
+    , _rolKind             :: !Text
+    , _rolAssignedTo       :: !(Maybe Text)
+    , _rolRoleId           :: !(Maybe (Textual Int64))
+    , _rolRoleAssignmentId :: !(Maybe (Textual Int64))
+    , _rolOrgUnitId        :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'RoleAssignment' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'rolEtag'
+--
+-- * 'rolScopeType'
+--
+-- * 'rolKind'
+--
+-- * 'rolAssignedTo'
+--
+-- * 'rolRoleId'
+--
+-- * 'rolRoleAssignmentId'
+--
+-- * 'rolOrgUnitId'
+roleAssignment
+    :: RoleAssignment
+roleAssignment =
+    RoleAssignment
+    { _rolEtag = Nothing
+    , _rolScopeType = Nothing
+    , _rolKind = "admin#directory#roleAssignment"
+    , _rolAssignedTo = Nothing
+    , _rolRoleId = Nothing
+    , _rolRoleAssignmentId = Nothing
+    , _rolOrgUnitId = Nothing
+    }
+
+-- | ETag of the resource.
+rolEtag :: Lens' RoleAssignment (Maybe Text)
+rolEtag = lens _rolEtag (\ s a -> s{_rolEtag = a})
+
+-- | The scope in which this role is assigned. Possible values are: -
+-- CUSTOMER - ORG_UNIT
+rolScopeType :: Lens' RoleAssignment (Maybe Text)
+rolScopeType
+  = lens _rolScopeType (\ s a -> s{_rolScopeType = a})
+
+-- | The type of the API resource. This is always
+-- admin#directory#roleAssignment.
+rolKind :: Lens' RoleAssignment Text
+rolKind = lens _rolKind (\ s a -> s{_rolKind = a})
+
+-- | The unique ID of the user this role is assigned to.
+rolAssignedTo :: Lens' RoleAssignment (Maybe Text)
+rolAssignedTo
+  = lens _rolAssignedTo
+      (\ s a -> s{_rolAssignedTo = a})
+
+-- | The ID of the role that is assigned.
+rolRoleId :: Lens' RoleAssignment (Maybe Int64)
+rolRoleId
+  = lens _rolRoleId (\ s a -> s{_rolRoleId = a}) .
+      mapping _Coerce
+
+-- | ID of this roleAssignment.
+rolRoleAssignmentId :: Lens' RoleAssignment (Maybe Int64)
+rolRoleAssignmentId
+  = lens _rolRoleAssignmentId
+      (\ s a -> s{_rolRoleAssignmentId = a})
+      . mapping _Coerce
+
+-- | If the role is restricted to an organization unit, this contains the ID
+-- for the organization unit the exercise of this role is restricted to.
+rolOrgUnitId :: Lens' RoleAssignment (Maybe Text)
+rolOrgUnitId
+  = lens _rolOrgUnitId (\ s a -> s{_rolOrgUnitId = a})
+
+instance FromJSON RoleAssignment where
+        parseJSON
+          = withObject "RoleAssignment"
+              (\ o ->
+                 RoleAssignment <$>
+                   (o .:? "etag") <*> (o .:? "scopeType") <*>
+                     (o .:? "kind" .!= "admin#directory#roleAssignment")
+                     <*> (o .:? "assignedTo")
+                     <*> (o .:? "roleId")
+                     <*> (o .:? "roleAssignmentId")
+                     <*> (o .:? "orgUnitId"))
+
+instance ToJSON RoleAssignment where
+        toJSON RoleAssignment{..}
+          = object
+              (catMaybes
+                 [("etag" .=) <$> _rolEtag,
+                  ("scopeType" .=) <$> _rolScopeType,
+                  Just ("kind" .= _rolKind),
+                  ("assignedTo" .=) <$> _rolAssignedTo,
+                  ("roleId" .=) <$> _rolRoleId,
+                  ("roleAssignmentId" .=) <$> _rolRoleAssignmentId,
+                  ("orgUnitId" .=) <$> _rolOrgUnitId])
+
+-- | JSON template for Group resource in Directory API.
+--
+-- /See:/ 'group'' smart constructor.
+data Group = Group
+    { _groEmail              :: !(Maybe Text)
+    , _groEtag               :: !(Maybe Text)
+    , _groDirectMembersCount :: !(Maybe (Textual Int64))
+    , _groKind               :: !Text
+    , _groAliases            :: !(Maybe [Text])
+    , _groNonEditableAliases :: !(Maybe [Text])
+    , _groName               :: !(Maybe Text)
+    , _groAdminCreated       :: !(Maybe Bool)
+    , _groId                 :: !(Maybe Text)
+    , _groDescription        :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Group' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'groEmail'
+--
+-- * 'groEtag'
+--
+-- * 'groDirectMembersCount'
+--
+-- * 'groKind'
+--
+-- * 'groAliases'
+--
+-- * 'groNonEditableAliases'
+--
+-- * 'groName'
+--
+-- * 'groAdminCreated'
+--
+-- * 'groId'
+--
+-- * 'groDescription'
+group'
+    :: Group
+group' =
+    Group
+    { _groEmail = Nothing
+    , _groEtag = Nothing
+    , _groDirectMembersCount = Nothing
+    , _groKind = "admin#directory#group"
+    , _groAliases = Nothing
+    , _groNonEditableAliases = Nothing
+    , _groName = Nothing
+    , _groAdminCreated = Nothing
+    , _groId = Nothing
+    , _groDescription = Nothing
+    }
+
+-- | Email of Group
+groEmail :: Lens' Group (Maybe Text)
+groEmail = lens _groEmail (\ s a -> s{_groEmail = a})
+
+-- | ETag of the resource.
+groEtag :: Lens' Group (Maybe Text)
+groEtag = lens _groEtag (\ s a -> s{_groEtag = a})
+
+-- | Group direct members count
+groDirectMembersCount :: Lens' Group (Maybe Int64)
+groDirectMembersCount
+  = lens _groDirectMembersCount
+      (\ s a -> s{_groDirectMembersCount = a})
+      . mapping _Coerce
+
+-- | Kind of resource this is.
+groKind :: Lens' Group Text
+groKind = lens _groKind (\ s a -> s{_groKind = a})
+
+-- | List of aliases (Read-only)
+groAliases :: Lens' Group [Text]
+groAliases
+  = lens _groAliases (\ s a -> s{_groAliases = a}) .
+      _Default
+      . _Coerce
+
+-- | List of non editable aliases (Read-only)
+groNonEditableAliases :: Lens' Group [Text]
+groNonEditableAliases
+  = lens _groNonEditableAliases
+      (\ s a -> s{_groNonEditableAliases = a})
+      . _Default
+      . _Coerce
+
+-- | Group name
+groName :: Lens' Group (Maybe Text)
+groName = lens _groName (\ s a -> s{_groName = a})
+
+-- | Is the group created by admin (Read-only) *
+groAdminCreated :: Lens' Group (Maybe Bool)
+groAdminCreated
+  = lens _groAdminCreated
+      (\ s a -> s{_groAdminCreated = a})
+
+-- | Unique identifier of Group (Read-only)
+groId :: Lens' Group (Maybe Text)
+groId = lens _groId (\ s a -> s{_groId = a})
+
+-- | Description of the group
+groDescription :: Lens' Group (Maybe Text)
+groDescription
+  = lens _groDescription
+      (\ s a -> s{_groDescription = a})
+
+instance FromJSON Group where
+        parseJSON
+          = withObject "Group"
+              (\ o ->
+                 Group <$>
+                   (o .:? "email") <*> (o .:? "etag") <*>
+                     (o .:? "directMembersCount")
+                     <*> (o .:? "kind" .!= "admin#directory#group")
+                     <*> (o .:? "aliases" .!= mempty)
+                     <*> (o .:? "nonEditableAliases" .!= mempty)
+                     <*> (o .:? "name")
+                     <*> (o .:? "adminCreated")
+                     <*> (o .:? "id")
+                     <*> (o .:? "description"))
+
+instance ToJSON Group where
+        toJSON Group{..}
+          = object
+              (catMaybes
+                 [("email" .=) <$> _groEmail,
+                  ("etag" .=) <$> _groEtag,
+                  ("directMembersCount" .=) <$> _groDirectMembersCount,
+                  Just ("kind" .= _groKind),
+                  ("aliases" .=) <$> _groAliases,
+                  ("nonEditableAliases" .=) <$> _groNonEditableAliases,
+                  ("name" .=) <$> _groName,
+                  ("adminCreated" .=) <$> _groAdminCreated,
+                  ("id" .=) <$> _groId,
+                  ("description" .=) <$> _groDescription])
+
+-- | JSON template for Chrome Os Device resource in Directory API.
+--
+-- /See:/ 'chromeOSDevice' smart constructor.
+data ChromeOSDevice = ChromeOSDevice
+    { _codStatus             :: !(Maybe Text)
+    , _codEtag               :: !(Maybe Text)
+    , _codAnnotatedUser      :: !(Maybe Text)
+    , _codPlatformVersion    :: !(Maybe Text)
+    , _codLastSync           :: !(Maybe DateTime')
+    , _codActiveTimeRanges   :: !(Maybe [ChromeOSDeviceActiveTimeRangesItem])
+    , _codKind               :: !Text
+    , _codEthernetMACAddress :: !(Maybe Text)
+    , _codLastEnrollmentTime :: !(Maybe DateTime')
+    , _codAnnotatedLocation  :: !(Maybe Text)
+    , _codMACAddress         :: !(Maybe Text)
+    , _codOrgUnitPath        :: !(Maybe Text)
+    , _codRecentUsers        :: !(Maybe [ChromeOSDeviceRecentUsersItem])
+    , _codSupportEndDate     :: !(Maybe DateTime')
+    , _codModel              :: !(Maybe Text)
+    , _codWillAutoRenew      :: !(Maybe Bool)
+    , _codMeid               :: !(Maybe Text)
+    , _codDeviceId           :: !(Maybe Text)
+    , _codBootMode           :: !(Maybe Text)
+    , _codOrderNumber        :: !(Maybe Text)
+    , _codAnnotatedAssetId   :: !(Maybe Text)
+    , _codNotes              :: !(Maybe Text)
+    , _codSerialNumber       :: !(Maybe Text)
+    , _codFirmwareVersion    :: !(Maybe Text)
+    , _codOSVersion          :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ChromeOSDevice' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'codStatus'
+--
+-- * 'codEtag'
+--
+-- * 'codAnnotatedUser'
+--
+-- * 'codPlatformVersion'
+--
+-- * 'codLastSync'
+--
+-- * 'codActiveTimeRanges'
+--
+-- * 'codKind'
+--
+-- * 'codEthernetMACAddress'
+--
+-- * 'codLastEnrollmentTime'
+--
+-- * 'codAnnotatedLocation'
+--
+-- * 'codMACAddress'
+--
+-- * 'codOrgUnitPath'
+--
+-- * 'codRecentUsers'
+--
+-- * 'codSupportEndDate'
+--
+-- * 'codModel'
+--
+-- * 'codWillAutoRenew'
+--
+-- * 'codMeid'
+--
+-- * 'codDeviceId'
+--
+-- * 'codBootMode'
+--
+-- * 'codOrderNumber'
+--
+-- * 'codAnnotatedAssetId'
+--
+-- * 'codNotes'
+--
+-- * 'codSerialNumber'
+--
+-- * 'codFirmwareVersion'
+--
+-- * 'codOSVersion'
+chromeOSDevice
+    :: ChromeOSDevice
+chromeOSDevice =
+    ChromeOSDevice
+    { _codStatus = Nothing
+    , _codEtag = Nothing
+    , _codAnnotatedUser = Nothing
+    , _codPlatformVersion = Nothing
+    , _codLastSync = Nothing
+    , _codActiveTimeRanges = Nothing
+    , _codKind = "admin#directory#chromeosdevice"
+    , _codEthernetMACAddress = Nothing
+    , _codLastEnrollmentTime = Nothing
+    , _codAnnotatedLocation = Nothing
+    , _codMACAddress = Nothing
+    , _codOrgUnitPath = Nothing
+    , _codRecentUsers = Nothing
+    , _codSupportEndDate = Nothing
+    , _codModel = Nothing
+    , _codWillAutoRenew = Nothing
+    , _codMeid = Nothing
+    , _codDeviceId = Nothing
+    , _codBootMode = Nothing
+    , _codOrderNumber = Nothing
+    , _codAnnotatedAssetId = Nothing
+    , _codNotes = Nothing
+    , _codSerialNumber = Nothing
+    , _codFirmwareVersion = Nothing
+    , _codOSVersion = Nothing
+    }
+
+-- | status of the device (Read-only)
+codStatus :: Lens' ChromeOSDevice (Maybe Text)
+codStatus
+  = lens _codStatus (\ s a -> s{_codStatus = a})
+
+-- | ETag of the resource.
+codEtag :: Lens' ChromeOSDevice (Maybe Text)
+codEtag = lens _codEtag (\ s a -> s{_codEtag = a})
+
+-- | User of the device
+codAnnotatedUser :: Lens' ChromeOSDevice (Maybe Text)
+codAnnotatedUser
+  = lens _codAnnotatedUser
+      (\ s a -> s{_codAnnotatedUser = a})
+
+-- | Chromebook platform version (Read-only)
+codPlatformVersion :: Lens' ChromeOSDevice (Maybe Text)
+codPlatformVersion
+  = lens _codPlatformVersion
+      (\ s a -> s{_codPlatformVersion = a})
+
+-- | Date and time the device was last synchronized with the policy settings
+-- in the Google Apps administrator control panel (Read-only)
+codLastSync :: Lens' ChromeOSDevice (Maybe UTCTime)
+codLastSync
+  = lens _codLastSync (\ s a -> s{_codLastSync = a}) .
+      mapping _DateTime
+
+-- | List of active time ranges (Read-only)
+codActiveTimeRanges :: Lens' ChromeOSDevice [ChromeOSDeviceActiveTimeRangesItem]
+codActiveTimeRanges
+  = lens _codActiveTimeRanges
+      (\ s a -> s{_codActiveTimeRanges = a})
+      . _Default
+      . _Coerce
+
+-- | Kind of resource this is.
+codKind :: Lens' ChromeOSDevice Text
+codKind = lens _codKind (\ s a -> s{_codKind = a})
+
+-- | Chromebook Mac Address on ethernet network interface (Read-only)
+codEthernetMACAddress :: Lens' ChromeOSDevice (Maybe Text)
+codEthernetMACAddress
+  = lens _codEthernetMACAddress
+      (\ s a -> s{_codEthernetMACAddress = a})
+
+-- | Date and time the device was last enrolled (Read-only)
+codLastEnrollmentTime :: Lens' ChromeOSDevice (Maybe UTCTime)
+codLastEnrollmentTime
+  = lens _codLastEnrollmentTime
+      (\ s a -> s{_codLastEnrollmentTime = a})
+      . mapping _DateTime
+
+-- | Address or location of the device as noted by the administrator
+codAnnotatedLocation :: Lens' ChromeOSDevice (Maybe Text)
+codAnnotatedLocation
+  = lens _codAnnotatedLocation
+      (\ s a -> s{_codAnnotatedLocation = a})
+
+-- | Chromebook Mac Address on wifi network interface (Read-only)
+codMACAddress :: Lens' ChromeOSDevice (Maybe Text)
+codMACAddress
+  = lens _codMACAddress
+      (\ s a -> s{_codMACAddress = a})
+
+-- | OrgUnit of the device
+codOrgUnitPath :: Lens' ChromeOSDevice (Maybe Text)
+codOrgUnitPath
+  = lens _codOrgUnitPath
+      (\ s a -> s{_codOrgUnitPath = a})
+
+-- | List of recent device users, in descending order by last login time
+-- (Read-only)
+codRecentUsers :: Lens' ChromeOSDevice [ChromeOSDeviceRecentUsersItem]
+codRecentUsers
+  = lens _codRecentUsers
+      (\ s a -> s{_codRecentUsers = a})
+      . _Default
+      . _Coerce
+
+-- | Final date the device will be supported (Read-only)
+codSupportEndDate :: Lens' ChromeOSDevice (Maybe UTCTime)
+codSupportEndDate
+  = lens _codSupportEndDate
+      (\ s a -> s{_codSupportEndDate = a})
+      . mapping _DateTime
+
+-- | Chromebook Model (Read-only)
+codModel :: Lens' ChromeOSDevice (Maybe Text)
+codModel = lens _codModel (\ s a -> s{_codModel = a})
+
+-- | Will Chromebook auto renew after support end date (Read-only)
+codWillAutoRenew :: Lens' ChromeOSDevice (Maybe Bool)
+codWillAutoRenew
+  = lens _codWillAutoRenew
+      (\ s a -> s{_codWillAutoRenew = a})
+
+-- | Mobile Equipment identifier for the 3G mobile card in the Chromebook
+-- (Read-only)
+codMeid :: Lens' ChromeOSDevice (Maybe Text)
+codMeid = lens _codMeid (\ s a -> s{_codMeid = a})
+
+-- | Unique identifier of Chrome OS Device (Read-only)
+codDeviceId :: Lens' ChromeOSDevice (Maybe Text)
+codDeviceId
+  = lens _codDeviceId (\ s a -> s{_codDeviceId = a})
+
+-- | Chromebook boot mode (Read-only)
+codBootMode :: Lens' ChromeOSDevice (Maybe Text)
+codBootMode
+  = lens _codBootMode (\ s a -> s{_codBootMode = a})
+
+-- | Chromebook order number (Read-only)
+codOrderNumber :: Lens' ChromeOSDevice (Maybe Text)
+codOrderNumber
+  = lens _codOrderNumber
+      (\ s a -> s{_codOrderNumber = a})
+
+-- | AssetId specified during enrollment or through later annotation
+codAnnotatedAssetId :: Lens' ChromeOSDevice (Maybe Text)
+codAnnotatedAssetId
+  = lens _codAnnotatedAssetId
+      (\ s a -> s{_codAnnotatedAssetId = a})
+
+-- | Notes added by the administrator
+codNotes :: Lens' ChromeOSDevice (Maybe Text)
+codNotes = lens _codNotes (\ s a -> s{_codNotes = a})
+
+-- | Chromebook serial number (Read-only)
+codSerialNumber :: Lens' ChromeOSDevice (Maybe Text)
+codSerialNumber
+  = lens _codSerialNumber
+      (\ s a -> s{_codSerialNumber = a})
+
+-- | Chromebook firmware version (Read-only)
+codFirmwareVersion :: Lens' ChromeOSDevice (Maybe Text)
+codFirmwareVersion
+  = lens _codFirmwareVersion
+      (\ s a -> s{_codFirmwareVersion = a})
+
+-- | Chromebook Os Version (Read-only)
+codOSVersion :: Lens' ChromeOSDevice (Maybe Text)
+codOSVersion
+  = lens _codOSVersion (\ s a -> s{_codOSVersion = a})
+
+instance FromJSON ChromeOSDevice where
+        parseJSON
+          = withObject "ChromeOSDevice"
+              (\ o ->
+                 ChromeOSDevice <$>
+                   (o .:? "status") <*> (o .:? "etag") <*>
+                     (o .:? "annotatedUser")
+                     <*> (o .:? "platformVersion")
+                     <*> (o .:? "lastSync")
+                     <*> (o .:? "activeTimeRanges" .!= mempty)
+                     <*>
+                     (o .:? "kind" .!= "admin#directory#chromeosdevice")
+                     <*> (o .:? "ethernetMacAddress")
+                     <*> (o .:? "lastEnrollmentTime")
+                     <*> (o .:? "annotatedLocation")
+                     <*> (o .:? "macAddress")
+                     <*> (o .:? "orgUnitPath")
+                     <*> (o .:? "recentUsers" .!= mempty)
+                     <*> (o .:? "supportEndDate")
+                     <*> (o .:? "model")
+                     <*> (o .:? "willAutoRenew")
+                     <*> (o .:? "meid")
+                     <*> (o .:? "deviceId")
+                     <*> (o .:? "bootMode")
+                     <*> (o .:? "orderNumber")
+                     <*> (o .:? "annotatedAssetId")
+                     <*> (o .:? "notes")
+                     <*> (o .:? "serialNumber")
+                     <*> (o .:? "firmwareVersion")
+                     <*> (o .:? "osVersion"))
+
+instance ToJSON ChromeOSDevice where
+        toJSON ChromeOSDevice{..}
+          = object
+              (catMaybes
+                 [("status" .=) <$> _codStatus,
+                  ("etag" .=) <$> _codEtag,
+                  ("annotatedUser" .=) <$> _codAnnotatedUser,
+                  ("platformVersion" .=) <$> _codPlatformVersion,
+                  ("lastSync" .=) <$> _codLastSync,
+                  ("activeTimeRanges" .=) <$> _codActiveTimeRanges,
+                  Just ("kind" .= _codKind),
+                  ("ethernetMacAddress" .=) <$> _codEthernetMACAddress,
+                  ("lastEnrollmentTime" .=) <$> _codLastEnrollmentTime,
+                  ("annotatedLocation" .=) <$> _codAnnotatedLocation,
+                  ("macAddress" .=) <$> _codMACAddress,
+                  ("orgUnitPath" .=) <$> _codOrgUnitPath,
+                  ("recentUsers" .=) <$> _codRecentUsers,
+                  ("supportEndDate" .=) <$> _codSupportEndDate,
+                  ("model" .=) <$> _codModel,
+                  ("willAutoRenew" .=) <$> _codWillAutoRenew,
+                  ("meid" .=) <$> _codMeid,
+                  ("deviceId" .=) <$> _codDeviceId,
+                  ("bootMode" .=) <$> _codBootMode,
+                  ("orderNumber" .=) <$> _codOrderNumber,
+                  ("annotatedAssetId" .=) <$> _codAnnotatedAssetId,
+                  ("notes" .=) <$> _codNotes,
+                  ("serialNumber" .=) <$> _codSerialNumber,
+                  ("firmwareVersion" .=) <$> _codFirmwareVersion,
+                  ("osVersion" .=) <$> _codOSVersion])
+
+-- | JSON response template for List Users operation in Apps Directory API.
+--
+-- /See:/ 'users' smart constructor.
+data Users = Users
+    { _uEtag          :: !(Maybe Text)
+    , _uNextPageToken :: !(Maybe Text)
+    , _uUsers         :: !(Maybe [User])
+    , _uKind          :: !Text
+    , _uTriggerEvent  :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Users' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'uEtag'
+--
+-- * 'uNextPageToken'
+--
+-- * 'uUsers'
+--
+-- * 'uKind'
+--
+-- * 'uTriggerEvent'
+users
+    :: Users
+users =
+    Users
+    { _uEtag = Nothing
+    , _uNextPageToken = Nothing
+    , _uUsers = Nothing
+    , _uKind = "admin#directory#users"
+    , _uTriggerEvent = Nothing
+    }
+
+-- | ETag of the resource.
+uEtag :: Lens' Users (Maybe Text)
+uEtag = lens _uEtag (\ s a -> s{_uEtag = a})
+
+-- | Token used to access next page of this result.
+uNextPageToken :: Lens' Users (Maybe Text)
+uNextPageToken
+  = lens _uNextPageToken
+      (\ s a -> s{_uNextPageToken = a})
+
+-- | List of user objects.
+uUsers :: Lens' Users [User]
+uUsers
+  = lens _uUsers (\ s a -> s{_uUsers = a}) . _Default .
+      _Coerce
+
+-- | Kind of resource this is.
+uKind :: Lens' Users Text
+uKind = lens _uKind (\ s a -> s{_uKind = a})
+
+-- | Event that triggered this response (only used in case of Push Response)
+uTriggerEvent :: Lens' Users (Maybe Text)
+uTriggerEvent
+  = lens _uTriggerEvent
+      (\ s a -> s{_uTriggerEvent = a})
+
+instance FromJSON Users where
+        parseJSON
+          = withObject "Users"
+              (\ o ->
+                 Users <$>
+                   (o .:? "etag") <*> (o .:? "nextPageToken") <*>
+                     (o .:? "users" .!= mempty)
+                     <*> (o .:? "kind" .!= "admin#directory#users")
+                     <*> (o .:? "trigger_event"))
+
+instance ToJSON Users where
+        toJSON Users{..}
+          = object
+              (catMaybes
+                 [("etag" .=) <$> _uEtag,
+                  ("nextPageToken" .=) <$> _uNextPageToken,
+                  ("users" .=) <$> _uUsers, Just ("kind" .= _uKind),
+                  ("trigger_event" .=) <$> _uTriggerEvent])
+
+-- | The template that returns individual ASP (Access Code) data.
+--
+-- /See:/ 'asp' smart constructor.
+data Asp = Asp
+    { _aCreationTime :: !(Maybe (Textual Int64))
+    , _aEtag         :: !(Maybe Text)
+    , _aCodeId       :: !(Maybe (Textual Int32))
+    , _aKind         :: !Text
+    , _aName         :: !(Maybe Text)
+    , _aLastTimeUsed :: !(Maybe (Textual Int64))
+    , _aUserKey      :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Asp' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'aCreationTime'
+--
+-- * 'aEtag'
+--
+-- * 'aCodeId'
+--
+-- * 'aKind'
+--
+-- * 'aName'
+--
+-- * 'aLastTimeUsed'
+--
+-- * 'aUserKey'
+asp
+    :: Asp
+asp =
+    Asp
+    { _aCreationTime = Nothing
+    , _aEtag = Nothing
+    , _aCodeId = Nothing
+    , _aKind = "admin#directory#asp"
+    , _aName = Nothing
+    , _aLastTimeUsed = Nothing
+    , _aUserKey = Nothing
+    }
+
+-- | The time when the ASP was created. Expressed in Unix time format.
+aCreationTime :: Lens' Asp (Maybe Int64)
+aCreationTime
+  = lens _aCreationTime
+      (\ s a -> s{_aCreationTime = a})
+      . mapping _Coerce
+
+-- | ETag of the ASP.
+aEtag :: Lens' Asp (Maybe Text)
+aEtag = lens _aEtag (\ s a -> s{_aEtag = a})
+
+-- | The unique ID of the ASP.
+aCodeId :: Lens' Asp (Maybe Int32)
+aCodeId
+  = lens _aCodeId (\ s a -> s{_aCodeId = a}) .
+      mapping _Coerce
+
+-- | The type of the API resource. This is always admin#directory#asp.
+aKind :: Lens' Asp Text
+aKind = lens _aKind (\ s a -> s{_aKind = a})
+
+-- | The name of the application that the user, represented by their userId,
+-- entered when the ASP was created.
+aName :: Lens' Asp (Maybe Text)
+aName = lens _aName (\ s a -> s{_aName = a})
+
+-- | The time when the ASP was last used. Expressed in Unix time format.
+aLastTimeUsed :: Lens' Asp (Maybe Int64)
+aLastTimeUsed
+  = lens _aLastTimeUsed
+      (\ s a -> s{_aLastTimeUsed = a})
+      . mapping _Coerce
+
+-- | The unique ID of the user who issued the ASP.
+aUserKey :: Lens' Asp (Maybe Text)
+aUserKey = lens _aUserKey (\ s a -> s{_aUserKey = a})
+
+instance FromJSON Asp where
+        parseJSON
+          = withObject "Asp"
+              (\ o ->
+                 Asp <$>
+                   (o .:? "creationTime") <*> (o .:? "etag") <*>
+                     (o .:? "codeId")
+                     <*> (o .:? "kind" .!= "admin#directory#asp")
+                     <*> (o .:? "name")
+                     <*> (o .:? "lastTimeUsed")
+                     <*> (o .:? "userKey"))
+
+instance ToJSON Asp where
+        toJSON Asp{..}
+          = object
+              (catMaybes
+                 [("creationTime" .=) <$> _aCreationTime,
+                  ("etag" .=) <$> _aEtag, ("codeId" .=) <$> _aCodeId,
+                  Just ("kind" .= _aKind), ("name" .=) <$> _aName,
+                  ("lastTimeUsed" .=) <$> _aLastTimeUsed,
+                  ("userKey" .=) <$> _aUserKey])
+
+-- | JSON response template for List Schema operation in Directory API.
+--
+-- /See:/ 'schemas' smart constructor.
+data Schemas = Schemas
+    { _sEtag    :: !(Maybe Text)
+    , _sSchemas :: !(Maybe [Schema])
+    , _sKind    :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Schemas' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'sEtag'
+--
+-- * 'sSchemas'
+--
+-- * 'sKind'
+schemas
+    :: Schemas
+schemas =
+    Schemas
+    { _sEtag = Nothing
+    , _sSchemas = Nothing
+    , _sKind = "admin#directory#schemas"
+    }
+
+-- | ETag of the resource.
+sEtag :: Lens' Schemas (Maybe Text)
+sEtag = lens _sEtag (\ s a -> s{_sEtag = a})
+
+-- | List of UserSchema objects.
+sSchemas :: Lens' Schemas [Schema]
+sSchemas
+  = lens _sSchemas (\ s a -> s{_sSchemas = a}) .
+      _Default
+      . _Coerce
+
+-- | Kind of resource this is.
+sKind :: Lens' Schemas Text
+sKind = lens _sKind (\ s a -> s{_sKind = a})
+
+instance FromJSON Schemas where
+        parseJSON
+          = withObject "Schemas"
+              (\ o ->
+                 Schemas <$>
+                   (o .:? "etag") <*> (o .:? "schemas" .!= mempty) <*>
+                     (o .:? "kind" .!= "admin#directory#schemas"))
+
+instance ToJSON Schemas where
+        toJSON Schemas{..}
+          = object
+              (catMaybes
+                 [("etag" .=) <$> _sEtag,
+                  ("schemas" .=) <$> _sSchemas,
+                  Just ("kind" .= _sKind)])
+
+-- | Template for a notification resource.
+--
+-- /See:/ 'notification' smart constructor.
+data Notification = Notification
+    { _nSubject        :: !(Maybe Text)
+    , _nEtag           :: !(Maybe Text)
+    , _nKind           :: !Text
+    , _nBody           :: !(Maybe Text)
+    , _nFromAddress    :: !(Maybe Text)
+    , _nIsUnread       :: !(Maybe Bool)
+    , _nNotificationId :: !(Maybe Text)
+    , _nSendTime       :: !(Maybe DateTime')
+    } 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:
+--
+-- * 'nSubject'
+--
+-- * 'nEtag'
+--
+-- * 'nKind'
+--
+-- * 'nBody'
+--
+-- * 'nFromAddress'
+--
+-- * 'nIsUnread'
+--
+-- * 'nNotificationId'
+--
+-- * 'nSendTime'
+notification
+    :: Notification
+notification =
+    Notification
+    { _nSubject = Nothing
+    , _nEtag = Nothing
+    , _nKind = "admin#directory#notification"
+    , _nBody = Nothing
+    , _nFromAddress = Nothing
+    , _nIsUnread = Nothing
+    , _nNotificationId = Nothing
+    , _nSendTime = Nothing
+    }
+
+-- | Subject of the notification (Read-only)
+nSubject :: Lens' Notification (Maybe Text)
+nSubject = lens _nSubject (\ s a -> s{_nSubject = a})
+
+-- | ETag of the resource.
+nEtag :: Lens' Notification (Maybe Text)
+nEtag = lens _nEtag (\ s a -> s{_nEtag = a})
+
+-- | The type of the resource.
+nKind :: Lens' Notification Text
+nKind = lens _nKind (\ s a -> s{_nKind = a})
+
+-- | Body of the notification (Read-only)
+nBody :: Lens' Notification (Maybe Text)
+nBody = lens _nBody (\ s a -> s{_nBody = a})
+
+-- | Address from which the notification is received (Read-only)
+nFromAddress :: Lens' Notification (Maybe Text)
+nFromAddress
+  = lens _nFromAddress (\ s a -> s{_nFromAddress = a})
+
+-- | Boolean indicating whether the notification is unread or not.
+nIsUnread :: Lens' Notification (Maybe Bool)
+nIsUnread
+  = lens _nIsUnread (\ s a -> s{_nIsUnread = a})
+
+nNotificationId :: Lens' Notification (Maybe Text)
+nNotificationId
+  = lens _nNotificationId
+      (\ s a -> s{_nNotificationId = a})
+
+-- | Time at which notification was sent (Read-only)
+nSendTime :: Lens' Notification (Maybe UTCTime)
+nSendTime
+  = lens _nSendTime (\ s a -> s{_nSendTime = a}) .
+      mapping _DateTime
+
+instance FromJSON Notification where
+        parseJSON
+          = withObject "Notification"
+              (\ o ->
+                 Notification <$>
+                   (o .:? "subject") <*> (o .:? "etag") <*>
+                     (o .:? "kind" .!= "admin#directory#notification")
+                     <*> (o .:? "body")
+                     <*> (o .:? "fromAddress")
+                     <*> (o .:? "isUnread")
+                     <*> (o .:? "notificationId")
+                     <*> (o .:? "sendTime"))
+
+instance ToJSON Notification where
+        toJSON Notification{..}
+          = object
+              (catMaybes
+                 [("subject" .=) <$> _nSubject,
+                  ("etag" .=) <$> _nEtag, Just ("kind" .= _nKind),
+                  ("body" .=) <$> _nBody,
+                  ("fromAddress" .=) <$> _nFromAddress,
+                  ("isUnread" .=) <$> _nIsUnread,
+                  ("notificationId" .=) <$> _nNotificationId,
+                  ("sendTime" .=) <$> _nSendTime])
+
+-- | JSON template for instant messenger of an user.
+--
+-- /See:/ 'userIm' smart constructor.
+data UserIm = UserIm
+    { _uiIm             :: !(Maybe Text)
+    , _uiProtocol       :: !(Maybe Text)
+    , _uiPrimary        :: !(Maybe Bool)
+    , _uiCustomProtocol :: !(Maybe Text)
+    , _uiType           :: !(Maybe Text)
+    , _uiCustomType     :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'UserIm' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'uiIm'
+--
+-- * 'uiProtocol'
+--
+-- * 'uiPrimary'
+--
+-- * 'uiCustomProtocol'
+--
+-- * 'uiType'
+--
+-- * 'uiCustomType'
+userIm
+    :: UserIm
+userIm =
+    UserIm
+    { _uiIm = Nothing
+    , _uiProtocol = Nothing
+    , _uiPrimary = Nothing
+    , _uiCustomProtocol = Nothing
+    , _uiType = Nothing
+    , _uiCustomType = Nothing
+    }
+
+-- | Instant messenger id.
+uiIm :: Lens' UserIm (Maybe Text)
+uiIm = lens _uiIm (\ s a -> s{_uiIm = a})
+
+-- | Protocol used in the instant messenger. It should be one of the values
+-- from ImProtocolTypes map. Similar to type, it can take a CUSTOM value
+-- and specify the custom name in customProtocol field.
+uiProtocol :: Lens' UserIm (Maybe Text)
+uiProtocol
+  = lens _uiProtocol (\ s a -> s{_uiProtocol = a})
+
+-- | If this is user\'s primary im. Only one entry could be marked as
+-- primary.
+uiPrimary :: Lens' UserIm (Maybe Bool)
+uiPrimary
+  = lens _uiPrimary (\ s a -> s{_uiPrimary = a})
+
+-- | Custom protocol.
+uiCustomProtocol :: Lens' UserIm (Maybe Text)
+uiCustomProtocol
+  = lens _uiCustomProtocol
+      (\ s a -> s{_uiCustomProtocol = a})
+
+-- | Each entry can have a type which indicates standard types of that entry.
+-- For example instant messengers could be of home, work etc. In addition
+-- to the standard type, an entry can have a custom type and can take any
+-- value. Such types should have the CUSTOM value as type and also have a
+-- customType value.
+uiType :: Lens' UserIm (Maybe Text)
+uiType = lens _uiType (\ s a -> s{_uiType = a})
+
+-- | Custom type.
+uiCustomType :: Lens' UserIm (Maybe Text)
+uiCustomType
+  = lens _uiCustomType (\ s a -> s{_uiCustomType = a})
+
+instance FromJSON UserIm where
+        parseJSON
+          = withObject "UserIm"
+              (\ o ->
+                 UserIm <$>
+                   (o .:? "im") <*> (o .:? "protocol") <*>
+                     (o .:? "primary")
+                     <*> (o .:? "customProtocol")
+                     <*> (o .:? "type")
+                     <*> (o .:? "customType"))
+
+instance ToJSON UserIm where
+        toJSON UserIm{..}
+          = object
+              (catMaybes
+                 [("im" .=) <$> _uiIm,
+                  ("protocol" .=) <$> _uiProtocol,
+                  ("primary" .=) <$> _uiPrimary,
+                  ("customProtocol" .=) <$> _uiCustomProtocol,
+                  ("type" .=) <$> _uiType,
+                  ("customType" .=) <$> _uiCustomType])
+
+-- | JSON response template for List tokens operation in Directory API.
+--
+-- /See:/ 'tokens' smart constructor.
+data Tokens = Tokens
+    { _tEtag  :: !(Maybe Text)
+    , _tKind  :: !Text
+    , _tItems :: !(Maybe [Token])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Tokens' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'tEtag'
+--
+-- * 'tKind'
+--
+-- * 'tItems'
+tokens
+    :: Tokens
+tokens =
+    Tokens
+    { _tEtag = Nothing
+    , _tKind = "admin#directory#tokenList"
+    , _tItems = Nothing
+    }
+
+-- | ETag of the resource.
+tEtag :: Lens' Tokens (Maybe Text)
+tEtag = lens _tEtag (\ s a -> s{_tEtag = a})
+
+-- | The type of the API resource. This is always admin#directory#tokenList.
+tKind :: Lens' Tokens Text
+tKind = lens _tKind (\ s a -> s{_tKind = a})
+
+-- | A list of Token resources.
+tItems :: Lens' Tokens [Token]
+tItems
+  = lens _tItems (\ s a -> s{_tItems = a}) . _Default .
+      _Coerce
+
+instance FromJSON Tokens where
+        parseJSON
+          = withObject "Tokens"
+              (\ o ->
+                 Tokens <$>
+                   (o .:? "etag") <*>
+                     (o .:? "kind" .!= "admin#directory#tokenList")
+                     <*> (o .:? "items" .!= mempty))
+
+instance ToJSON Tokens where
+        toJSON Tokens{..}
+          = object
+              (catMaybes
+                 [("etag" .=) <$> _tEtag, Just ("kind" .= _tKind),
+                  ("items" .=) <$> _tItems])
+
+-- | Custom fields of the user.
+--
+-- /See:/ 'userCustomSchemas' smart constructor.
+newtype UserCustomSchemas = UserCustomSchemas
+    { _ucsAddtional :: HashMap Text UserCustomProperties
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'UserCustomSchemas' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ucsAddtional'
+userCustomSchemas
+    :: HashMap Text UserCustomProperties -- ^ 'ucsAddtional'
+    -> UserCustomSchemas
+userCustomSchemas pUcsAddtional_ =
+    UserCustomSchemas
+    { _ucsAddtional = _Coerce # pUcsAddtional_
+    }
+
+ucsAddtional :: Lens' UserCustomSchemas (HashMap Text UserCustomProperties)
+ucsAddtional
+  = lens _ucsAddtional (\ s a -> s{_ucsAddtional = a})
+      . _Coerce
+
+instance FromJSON UserCustomSchemas where
+        parseJSON
+          = withObject "UserCustomSchemas"
+              (\ o -> UserCustomSchemas <$> (parseJSONObject o))
+
+instance ToJSON UserCustomSchemas where
+        toJSON = toJSON . _ucsAddtional
+
+-- | JSON response template to list domain aliases in Directory API.
+--
+-- /See:/ 'domainAliases' smart constructor.
+data DomainAliases = DomainAliases
+    { _daEtag          :: !(Maybe Text)
+    , _daKind          :: !Text
+    , _daDomainAliases :: !(Maybe [DomainAlias])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DomainAliases' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'daEtag'
+--
+-- * 'daKind'
+--
+-- * 'daDomainAliases'
+domainAliases
+    :: DomainAliases
+domainAliases =
+    DomainAliases
+    { _daEtag = Nothing
+    , _daKind = "admin#directory#domainAliases"
+    , _daDomainAliases = Nothing
+    }
+
+-- | ETag of the resource.
+daEtag :: Lens' DomainAliases (Maybe Text)
+daEtag = lens _daEtag (\ s a -> s{_daEtag = a})
+
+-- | Kind of resource this is.
+daKind :: Lens' DomainAliases Text
+daKind = lens _daKind (\ s a -> s{_daKind = a})
+
+-- | List of domain alias objects.
+daDomainAliases :: Lens' DomainAliases [DomainAlias]
+daDomainAliases
+  = lens _daDomainAliases
+      (\ s a -> s{_daDomainAliases = a})
+      . _Default
+      . _Coerce
+
+instance FromJSON DomainAliases where
+        parseJSON
+          = withObject "DomainAliases"
+              (\ o ->
+                 DomainAliases <$>
+                   (o .:? "etag") <*>
+                     (o .:? "kind" .!= "admin#directory#domainAliases")
+                     <*> (o .:? "domainAliases" .!= mempty))
+
+instance ToJSON DomainAliases where
+        toJSON DomainAliases{..}
+          = object
+              (catMaybes
+                 [("etag" .=) <$> _daEtag, Just ("kind" .= _daKind),
+                  ("domainAliases" .=) <$> _daDomainAliases])
+
+-- | JSON response template to list aliases in Directory API.
+--
+-- /See:/ 'aliases' smart constructor.
+data Aliases = Aliases
+    { _aliEtag    :: !(Maybe Text)
+    , _aliKind    :: !Text
+    , _aliAliases :: !(Maybe [Alias])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Aliases' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'aliEtag'
+--
+-- * 'aliKind'
+--
+-- * 'aliAliases'
+aliases
+    :: Aliases
+aliases =
+    Aliases
+    { _aliEtag = Nothing
+    , _aliKind = "admin#directory#aliases"
+    , _aliAliases = Nothing
+    }
+
+-- | ETag of the resource.
+aliEtag :: Lens' Aliases (Maybe Text)
+aliEtag = lens _aliEtag (\ s a -> s{_aliEtag = a})
+
+-- | Kind of resource this is.
+aliKind :: Lens' Aliases Text
+aliKind = lens _aliKind (\ s a -> s{_aliKind = a})
+
+-- | List of alias objects.
+aliAliases :: Lens' Aliases [Alias]
+aliAliases
+  = lens _aliAliases (\ s a -> s{_aliAliases = a}) .
+      _Default
+      . _Coerce
+
+instance FromJSON Aliases where
+        parseJSON
+          = withObject "Aliases"
+              (\ o ->
+                 Aliases <$>
+                   (o .:? "etag") <*>
+                     (o .:? "kind" .!= "admin#directory#aliases")
+                     <*> (o .:? "aliases" .!= mempty))
+
+instance ToJSON Aliases where
+        toJSON Aliases{..}
+          = object
+              (catMaybes
+                 [("etag" .=) <$> _aliEtag, Just ("kind" .= _aliKind),
+                  ("aliases" .=) <$> _aliAliases])
+
+-- | JSON request template to undelete a user in Directory API.
+--
+-- /See:/ 'userUndelete' smart constructor.
+newtype UserUndelete = UserUndelete
+    { _uuOrgUnitPath :: Maybe Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'UserUndelete' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'uuOrgUnitPath'
+userUndelete
+    :: UserUndelete
+userUndelete =
+    UserUndelete
+    { _uuOrgUnitPath = Nothing
+    }
+
+-- | OrgUnit of User
+uuOrgUnitPath :: Lens' UserUndelete (Maybe Text)
+uuOrgUnitPath
+  = lens _uuOrgUnitPath
+      (\ s a -> s{_uuOrgUnitPath = a})
+
+instance FromJSON UserUndelete where
+        parseJSON
+          = withObject "UserUndelete"
+              (\ o -> UserUndelete <$> (o .:? "orgUnitPath"))
+
+instance ToJSON UserUndelete where
+        toJSON UserUndelete{..}
+          = object
+              (catMaybes [("orgUnitPath" .=) <$> _uuOrgUnitPath])
+
+-- | JSON response template for List Members operation in Directory API.
+--
+-- /See:/ 'members' smart constructor.
+data Members = Members
+    { _mEtag          :: !(Maybe Text)
+    , _mNextPageToken :: !(Maybe Text)
+    , _mKind          :: !Text
+    , _mMembers       :: !(Maybe [Member])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Members' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'mEtag'
+--
+-- * 'mNextPageToken'
+--
+-- * 'mKind'
+--
+-- * 'mMembers'
+members
+    :: Members
+members =
+    Members
+    { _mEtag = Nothing
+    , _mNextPageToken = Nothing
+    , _mKind = "admin#directory#members"
+    , _mMembers = Nothing
+    }
+
+-- | ETag of the resource.
+mEtag :: Lens' Members (Maybe Text)
+mEtag = lens _mEtag (\ s a -> s{_mEtag = a})
+
+-- | Token used to access next page of this result.
+mNextPageToken :: Lens' Members (Maybe Text)
+mNextPageToken
+  = lens _mNextPageToken
+      (\ s a -> s{_mNextPageToken = a})
+
+-- | Kind of resource this is.
+mKind :: Lens' Members Text
+mKind = lens _mKind (\ s a -> s{_mKind = a})
+
+-- | List of member objects.
+mMembers :: Lens' Members [Member]
+mMembers
+  = lens _mMembers (\ s a -> s{_mMembers = a}) .
+      _Default
+      . _Coerce
+
+instance FromJSON Members where
+        parseJSON
+          = withObject "Members"
+              (\ o ->
+                 Members <$>
+                   (o .:? "etag") <*> (o .:? "nextPageToken") <*>
+                     (o .:? "kind" .!= "admin#directory#members")
+                     <*> (o .:? "members" .!= mempty))
+
+instance ToJSON Members where
+        toJSON Members{..}
+          = object
+              (catMaybes
+                 [("etag" .=) <$> _mEtag,
+                  ("nextPageToken" .=) <$> _mNextPageToken,
+                  Just ("kind" .= _mKind),
+                  ("members" .=) <$> _mMembers])
+
+-- | An notification channel used to watch for resource changes.
+--
+-- /See:/ 'channel' smart constructor.
+data Channel = Channel
+    { _cResourceURI :: !(Maybe Text)
+    , _cResourceId  :: !(Maybe Text)
+    , _cKind        :: !Text
+    , _cExpiration  :: !(Maybe (Textual Int64))
+    , _cToken       :: !(Maybe Text)
+    , _cAddress     :: !(Maybe Text)
+    , _cPayload     :: !(Maybe Bool)
+    , _cParams      :: !(Maybe ChannelParams)
+    , _cId          :: !(Maybe Text)
+    , _cType        :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Channel' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cResourceURI'
+--
+-- * 'cResourceId'
+--
+-- * 'cKind'
+--
+-- * 'cExpiration'
+--
+-- * 'cToken'
+--
+-- * 'cAddress'
+--
+-- * 'cPayload'
+--
+-- * 'cParams'
+--
+-- * 'cId'
+--
+-- * 'cType'
+channel
+    :: Channel
+channel =
+    Channel
+    { _cResourceURI = Nothing
+    , _cResourceId = Nothing
+    , _cKind = "api#channel"
+    , _cExpiration = Nothing
+    , _cToken = Nothing
+    , _cAddress = Nothing
+    , _cPayload = Nothing
+    , _cParams = Nothing
+    , _cId = Nothing
+    , _cType = Nothing
+    }
+
+-- | A version-specific identifier for the watched resource.
+cResourceURI :: Lens' Channel (Maybe Text)
+cResourceURI
+  = lens _cResourceURI (\ s a -> s{_cResourceURI = a})
+
+-- | An opaque ID that identifies the resource being watched on this channel.
+-- Stable across different API versions.
+cResourceId :: Lens' Channel (Maybe Text)
+cResourceId
+  = lens _cResourceId (\ s a -> s{_cResourceId = a})
+
+-- | Identifies this as a notification channel used to watch for changes to a
+-- resource. Value: the fixed string \"api#channel\".
+cKind :: Lens' Channel Text
+cKind = lens _cKind (\ s a -> s{_cKind = a})
+
+-- | Date and time of notification channel expiration, expressed as a Unix
+-- timestamp, in milliseconds. Optional.
+cExpiration :: Lens' Channel (Maybe Int64)
+cExpiration
+  = lens _cExpiration (\ s a -> s{_cExpiration = a}) .
+      mapping _Coerce
+
+-- | An arbitrary string delivered to the target address with each
+-- notification delivered over this channel. Optional.
+cToken :: Lens' Channel (Maybe Text)
+cToken = lens _cToken (\ s a -> s{_cToken = a})
+
+-- | The address where notifications are delivered for this channel.
+cAddress :: Lens' Channel (Maybe Text)
+cAddress = lens _cAddress (\ s a -> s{_cAddress = a})
+
+-- | A Boolean value to indicate whether payload is wanted. Optional.
+cPayload :: Lens' Channel (Maybe Bool)
+cPayload = lens _cPayload (\ s a -> s{_cPayload = a})
+
+-- | Additional parameters controlling delivery channel behavior. Optional.
+cParams :: Lens' Channel (Maybe ChannelParams)
+cParams = lens _cParams (\ s a -> s{_cParams = a})
+
+-- | A UUID or similar unique string that identifies this channel.
+cId :: Lens' Channel (Maybe Text)
+cId = lens _cId (\ s a -> s{_cId = a})
+
+-- | The type of delivery mechanism used for this channel.
+cType :: Lens' Channel (Maybe Text)
+cType = lens _cType (\ s a -> s{_cType = a})
+
+instance FromJSON Channel where
+        parseJSON
+          = withObject "Channel"
+              (\ o ->
+                 Channel <$>
+                   (o .:? "resourceUri") <*> (o .:? "resourceId") <*>
+                     (o .:? "kind" .!= "api#channel")
+                     <*> (o .:? "expiration")
+                     <*> (o .:? "token")
+                     <*> (o .:? "address")
+                     <*> (o .:? "payload")
+                     <*> (o .:? "params")
+                     <*> (o .:? "id")
+                     <*> (o .:? "type"))
+
+instance ToJSON Channel where
+        toJSON Channel{..}
+          = object
+              (catMaybes
+                 [("resourceUri" .=) <$> _cResourceURI,
+                  ("resourceId" .=) <$> _cResourceId,
+                  Just ("kind" .= _cKind),
+                  ("expiration" .=) <$> _cExpiration,
+                  ("token" .=) <$> _cToken,
+                  ("address" .=) <$> _cAddress,
+                  ("payload" .=) <$> _cPayload,
+                  ("params" .=) <$> _cParams, ("id" .=) <$> _cId,
+                  ("type" .=) <$> _cType])
+
+-- | JSON response template for List Mobile Devices operation in Directory
+-- API.
+--
+-- /See:/ 'mobileDevices' smart constructor.
+data MobileDevices = MobileDevices
+    { _mdEtag          :: !(Maybe Text)
+    , _mdNextPageToken :: !(Maybe Text)
+    , _mdKind          :: !Text
+    , _mdMobileDevices :: !(Maybe [MobileDevice])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'MobileDevices' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'mdEtag'
+--
+-- * 'mdNextPageToken'
+--
+-- * 'mdKind'
+--
+-- * 'mdMobileDevices'
+mobileDevices
+    :: MobileDevices
+mobileDevices =
+    MobileDevices
+    { _mdEtag = Nothing
+    , _mdNextPageToken = Nothing
+    , _mdKind = "admin#directory#mobiledevices"
+    , _mdMobileDevices = Nothing
+    }
+
+-- | ETag of the resource.
+mdEtag :: Lens' MobileDevices (Maybe Text)
+mdEtag = lens _mdEtag (\ s a -> s{_mdEtag = a})
+
+-- | Token used to access next page of this result.
+mdNextPageToken :: Lens' MobileDevices (Maybe Text)
+mdNextPageToken
+  = lens _mdNextPageToken
+      (\ s a -> s{_mdNextPageToken = a})
+
+-- | Kind of resource this is.
+mdKind :: Lens' MobileDevices Text
+mdKind = lens _mdKind (\ s a -> s{_mdKind = a})
+
+-- | List of Mobile Device objects.
+mdMobileDevices :: Lens' MobileDevices [MobileDevice]
+mdMobileDevices
+  = lens _mdMobileDevices
+      (\ s a -> s{_mdMobileDevices = a})
+      . _Default
+      . _Coerce
+
+instance FromJSON MobileDevices where
+        parseJSON
+          = withObject "MobileDevices"
+              (\ o ->
+                 MobileDevices <$>
+                   (o .:? "etag") <*> (o .:? "nextPageToken") <*>
+                     (o .:? "kind" .!= "admin#directory#mobiledevices")
+                     <*> (o .:? "mobiledevices" .!= mempty))
+
+instance ToJSON MobileDevices where
+        toJSON MobileDevices{..}
+          = object
+              (catMaybes
+                 [("etag" .=) <$> _mdEtag,
+                  ("nextPageToken" .=) <$> _mdNextPageToken,
+                  Just ("kind" .= _mdKind),
+                  ("mobiledevices" .=) <$> _mdMobileDevices])
+
+-- | JSON template for token resource in Directory API.
+--
+-- /See:/ 'token' smart constructor.
+data Token = Token
+    { _tokClientId    :: !(Maybe Text)
+    , _tokEtag        :: !(Maybe Text)
+    , _tokDisplayText :: !(Maybe Text)
+    , _tokKind        :: !Text
+    , _tokScopes      :: !(Maybe [Text])
+    , _tokNATiveApp   :: !(Maybe Bool)
+    , _tokAnonymous   :: !(Maybe Bool)
+    , _tokUserKey     :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Token' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'tokClientId'
+--
+-- * 'tokEtag'
+--
+-- * 'tokDisplayText'
+--
+-- * 'tokKind'
+--
+-- * 'tokScopes'
+--
+-- * 'tokNATiveApp'
+--
+-- * 'tokAnonymous'
+--
+-- * 'tokUserKey'
+token
+    :: Token
+token =
+    Token
+    { _tokClientId = Nothing
+    , _tokEtag = Nothing
+    , _tokDisplayText = Nothing
+    , _tokKind = "admin#directory#token"
+    , _tokScopes = Nothing
+    , _tokNATiveApp = Nothing
+    , _tokAnonymous = Nothing
+    , _tokUserKey = Nothing
+    }
+
+-- | The Client ID of the application the token is issued to.
+tokClientId :: Lens' Token (Maybe Text)
+tokClientId
+  = lens _tokClientId (\ s a -> s{_tokClientId = a})
+
+-- | ETag of the resource.
+tokEtag :: Lens' Token (Maybe Text)
+tokEtag = lens _tokEtag (\ s a -> s{_tokEtag = a})
+
+-- | The displayable name of the application the token is issued to.
+tokDisplayText :: Lens' Token (Maybe Text)
+tokDisplayText
+  = lens _tokDisplayText
+      (\ s a -> s{_tokDisplayText = a})
+
+-- | The type of the API resource. This is always admin#directory#token.
+tokKind :: Lens' Token Text
+tokKind = lens _tokKind (\ s a -> s{_tokKind = a})
+
+-- | A list of authorization scopes the application is granted.
+tokScopes :: Lens' Token [Text]
+tokScopes
+  = lens _tokScopes (\ s a -> s{_tokScopes = a}) .
+      _Default
+      . _Coerce
+
+-- | Whether the token is issued to an installed application. The value is
+-- true if the application is installed to a desktop or mobile device.
+tokNATiveApp :: Lens' Token (Maybe Bool)
+tokNATiveApp
+  = lens _tokNATiveApp (\ s a -> s{_tokNATiveApp = a})
+
+-- | Whether the application is registered with Google. The value is true if
+-- the application has an anonymous Client ID.
+tokAnonymous :: Lens' Token (Maybe Bool)
+tokAnonymous
+  = lens _tokAnonymous (\ s a -> s{_tokAnonymous = a})
+
+-- | The unique ID of the user that issued the token.
+tokUserKey :: Lens' Token (Maybe Text)
+tokUserKey
+  = lens _tokUserKey (\ s a -> s{_tokUserKey = a})
+
+instance FromJSON Token where
+        parseJSON
+          = withObject "Token"
+              (\ o ->
+                 Token <$>
+                   (o .:? "clientId") <*> (o .:? "etag") <*>
+                     (o .:? "displayText")
+                     <*> (o .:? "kind" .!= "admin#directory#token")
+                     <*> (o .:? "scopes" .!= mempty)
+                     <*> (o .:? "nativeApp")
+                     <*> (o .:? "anonymous")
+                     <*> (o .:? "userKey"))
+
+instance ToJSON Token where
+        toJSON Token{..}
+          = object
+              (catMaybes
+                 [("clientId" .=) <$> _tokClientId,
+                  ("etag" .=) <$> _tokEtag,
+                  ("displayText" .=) <$> _tokDisplayText,
+                  Just ("kind" .= _tokKind),
+                  ("scopes" .=) <$> _tokScopes,
+                  ("nativeApp" .=) <$> _tokNATiveApp,
+                  ("anonymous" .=) <$> _tokAnonymous,
+                  ("userKey" .=) <$> _tokUserKey])
+
+-- | JSON template for name of a user in Directory API.
+--
+-- /See:/ 'userName' smart constructor.
+data UserName = UserName
+    { _unGivenName  :: !(Maybe Text)
+    , _unFullName   :: !(Maybe Text)
+    , _unFamilyName :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'UserName' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'unGivenName'
+--
+-- * 'unFullName'
+--
+-- * 'unFamilyName'
+userName
+    :: UserName
+userName =
+    UserName
+    { _unGivenName = Nothing
+    , _unFullName = Nothing
+    , _unFamilyName = Nothing
+    }
+
+-- | First Name
+unGivenName :: Lens' UserName (Maybe Text)
+unGivenName
+  = lens _unGivenName (\ s a -> s{_unGivenName = a})
+
+-- | Full Name
+unFullName :: Lens' UserName (Maybe Text)
+unFullName
+  = lens _unFullName (\ s a -> s{_unFullName = a})
+
+-- | Last Name
+unFamilyName :: Lens' UserName (Maybe Text)
+unFamilyName
+  = lens _unFamilyName (\ s a -> s{_unFamilyName = a})
+
+instance FromJSON UserName where
+        parseJSON
+          = withObject "UserName"
+              (\ o ->
+                 UserName <$>
+                   (o .:? "givenName") <*> (o .:? "fullName") <*>
+                     (o .:? "familyName"))
+
+instance ToJSON UserName where
+        toJSON UserName{..}
+          = object
+              (catMaybes
+                 [("givenName" .=) <$> _unGivenName,
+                  ("fullName" .=) <$> _unFullName,
+                  ("familyName" .=) <$> _unFamilyName])
+
+--
+-- /See:/ 'chromeOSDeviceRecentUsersItem' smart constructor.
+data ChromeOSDeviceRecentUsersItem = ChromeOSDeviceRecentUsersItem
+    { _codruiEmail :: !(Maybe Text)
+    , _codruiType  :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ChromeOSDeviceRecentUsersItem' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'codruiEmail'
+--
+-- * 'codruiType'
+chromeOSDeviceRecentUsersItem
+    :: ChromeOSDeviceRecentUsersItem
+chromeOSDeviceRecentUsersItem =
+    ChromeOSDeviceRecentUsersItem
+    { _codruiEmail = Nothing
+    , _codruiType = Nothing
+    }
+
+-- | Email address of the user. Present only if the user type is managed
+codruiEmail :: Lens' ChromeOSDeviceRecentUsersItem (Maybe Text)
+codruiEmail
+  = lens _codruiEmail (\ s a -> s{_codruiEmail = a})
+
+-- | The type of the user
+codruiType :: Lens' ChromeOSDeviceRecentUsersItem (Maybe Text)
+codruiType
+  = lens _codruiType (\ s a -> s{_codruiType = a})
+
+instance FromJSON ChromeOSDeviceRecentUsersItem where
+        parseJSON
+          = withObject "ChromeOSDeviceRecentUsersItem"
+              (\ o ->
+                 ChromeOSDeviceRecentUsersItem <$>
+                   (o .:? "email") <*> (o .:? "type"))
+
+instance ToJSON ChromeOSDeviceRecentUsersItem where
+        toJSON ChromeOSDeviceRecentUsersItem{..}
+          = object
+              (catMaybes
+                 [("email" .=) <$> _codruiEmail,
+                  ("type" .=) <$> _codruiType])
+
+-- | JSON template for Domain Alias object in Directory API.
+--
+-- /See:/ 'domainAlias' smart constructor.
+data DomainAlias = DomainAlias
+    { _dCreationTime     :: !(Maybe (Textual Int64))
+    , _dEtag             :: !(Maybe Text)
+    , _dKind             :: !Text
+    , _dVerified         :: !(Maybe Bool)
+    , _dDomainAliasName  :: !(Maybe Text)
+    , _dParentDomainName :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DomainAlias' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dCreationTime'
+--
+-- * 'dEtag'
+--
+-- * 'dKind'
+--
+-- * 'dVerified'
+--
+-- * 'dDomainAliasName'
+--
+-- * 'dParentDomainName'
+domainAlias
+    :: DomainAlias
+domainAlias =
+    DomainAlias
+    { _dCreationTime = Nothing
+    , _dEtag = Nothing
+    , _dKind = "admin#directory#domainAlias"
+    , _dVerified = Nothing
+    , _dDomainAliasName = Nothing
+    , _dParentDomainName = Nothing
+    }
+
+-- | The creation time of the domain alias. (Read-only).
+dCreationTime :: Lens' DomainAlias (Maybe Int64)
+dCreationTime
+  = lens _dCreationTime
+      (\ s a -> s{_dCreationTime = a})
+      . mapping _Coerce
+
+-- | ETag of the resource.
+dEtag :: Lens' DomainAlias (Maybe Text)
+dEtag = lens _dEtag (\ s a -> s{_dEtag = a})
+
+-- | Kind of resource this is.
+dKind :: Lens' DomainAlias Text
+dKind = lens _dKind (\ s a -> s{_dKind = a})
+
+-- | Indicates the verification state of a domain alias. (Read-only)
+dVerified :: Lens' DomainAlias (Maybe Bool)
+dVerified
+  = lens _dVerified (\ s a -> s{_dVerified = a})
+
+-- | The domain alias name.
+dDomainAliasName :: Lens' DomainAlias (Maybe Text)
+dDomainAliasName
+  = lens _dDomainAliasName
+      (\ s a -> s{_dDomainAliasName = a})
+
+-- | The parent domain name that the domain alias is associated with. This
+-- can either be a primary or secondary domain name within a customer.
+dParentDomainName :: Lens' DomainAlias (Maybe Text)
+dParentDomainName
+  = lens _dParentDomainName
+      (\ s a -> s{_dParentDomainName = a})
+
+instance FromJSON DomainAlias where
+        parseJSON
+          = withObject "DomainAlias"
+              (\ o ->
+                 DomainAlias <$>
+                   (o .:? "creationTime") <*> (o .:? "etag") <*>
+                     (o .:? "kind" .!= "admin#directory#domainAlias")
+                     <*> (o .:? "verified")
+                     <*> (o .:? "domainAliasName")
+                     <*> (o .:? "parentDomainName"))
+
+instance ToJSON DomainAlias where
+        toJSON DomainAlias{..}
+          = object
+              (catMaybes
+                 [("creationTime" .=) <$> _dCreationTime,
+                  ("etag" .=) <$> _dEtag, Just ("kind" .= _dKind),
+                  ("verified" .=) <$> _dVerified,
+                  ("domainAliasName" .=) <$> _dDomainAliasName,
+                  ("parentDomainName" .=) <$> _dParentDomainName])
+
+-- | JSON template for Alias object in Directory API.
+--
+-- /See:/ 'alias' smart constructor.
+data Alias = Alias
+    { _aaEtag         :: !(Maybe Text)
+    , _aaKind         :: !Text
+    , _aaAlias        :: !(Maybe Text)
+    , _aaId           :: !(Maybe Text)
+    , _aaPrimaryEmail :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Alias' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'aaEtag'
+--
+-- * 'aaKind'
+--
+-- * 'aaAlias'
+--
+-- * 'aaId'
+--
+-- * 'aaPrimaryEmail'
+alias
+    :: Alias
+alias =
+    Alias
+    { _aaEtag = Nothing
+    , _aaKind = "admin#directory#alias"
+    , _aaAlias = Nothing
+    , _aaId = Nothing
+    , _aaPrimaryEmail = Nothing
+    }
+
+-- | ETag of the resource.
+aaEtag :: Lens' Alias (Maybe Text)
+aaEtag = lens _aaEtag (\ s a -> s{_aaEtag = a})
+
+-- | Kind of resource this is.
+aaKind :: Lens' Alias Text
+aaKind = lens _aaKind (\ s a -> s{_aaKind = a})
+
+-- | A alias email
+aaAlias :: Lens' Alias (Maybe Text)
+aaAlias = lens _aaAlias (\ s a -> s{_aaAlias = a})
+
+-- | Unique id of the group (Read-only) Unique id of the user (Read-only)
+aaId :: Lens' Alias (Maybe Text)
+aaId = lens _aaId (\ s a -> s{_aaId = a})
+
+-- | Group\'s primary email (Read-only) User\'s primary email (Read-only)
+aaPrimaryEmail :: Lens' Alias (Maybe Text)
+aaPrimaryEmail
+  = lens _aaPrimaryEmail
+      (\ s a -> s{_aaPrimaryEmail = a})
+
+instance FromJSON Alias where
+        parseJSON
+          = withObject "Alias"
+              (\ o ->
+                 Alias <$>
+                   (o .:? "etag") <*>
+                     (o .:? "kind" .!= "admin#directory#alias")
+                     <*> (o .:? "alias")
+                     <*> (o .:? "id")
+                     <*> (o .:? "primaryEmail"))
+
+instance ToJSON Alias where
+        toJSON Alias{..}
+          = object
+              (catMaybes
+                 [("etag" .=) <$> _aaEtag, Just ("kind" .= _aaKind),
+                  ("alias" .=) <$> _aaAlias, ("id" .=) <$> _aaId,
+                  ("primaryEmail" .=) <$> _aaPrimaryEmail])
+
+-- | JSON template for Schema resource in Directory API.
+--
+-- /See:/ 'schema' smart constructor.
+data Schema = Schema
+    { _schEtag       :: !(Maybe Text)
+    , _schKind       :: !Text
+    , _schSchemaName :: !(Maybe Text)
+    , _schSchemaId   :: !(Maybe Text)
+    , _schFields     :: !(Maybe [SchemaFieldSpec])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Schema' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'schEtag'
+--
+-- * 'schKind'
+--
+-- * 'schSchemaName'
+--
+-- * 'schSchemaId'
+--
+-- * 'schFields'
+schema
+    :: Schema
+schema =
+    Schema
+    { _schEtag = Nothing
+    , _schKind = "admin#directory#schema"
+    , _schSchemaName = Nothing
+    , _schSchemaId = Nothing
+    , _schFields = Nothing
+    }
+
+-- | ETag of the resource.
+schEtag :: Lens' Schema (Maybe Text)
+schEtag = lens _schEtag (\ s a -> s{_schEtag = a})
+
+-- | Kind of resource this is.
+schKind :: Lens' Schema Text
+schKind = lens _schKind (\ s a -> s{_schKind = a})
+
+-- | Schema name
+schSchemaName :: Lens' Schema (Maybe Text)
+schSchemaName
+  = lens _schSchemaName
+      (\ s a -> s{_schSchemaName = a})
+
+-- | Unique identifier of Schema (Read-only)
+schSchemaId :: Lens' Schema (Maybe Text)
+schSchemaId
+  = lens _schSchemaId (\ s a -> s{_schSchemaId = a})
+
+-- | Fields of Schema
+schFields :: Lens' Schema [SchemaFieldSpec]
+schFields
+  = lens _schFields (\ s a -> s{_schFields = a}) .
+      _Default
+      . _Coerce
+
+instance FromJSON Schema where
+        parseJSON
+          = withObject "Schema"
+              (\ o ->
+                 Schema <$>
+                   (o .:? "etag") <*>
+                     (o .:? "kind" .!= "admin#directory#schema")
+                     <*> (o .:? "schemaName")
+                     <*> (o .:? "schemaId")
+                     <*> (o .:? "fields" .!= mempty))
+
+instance ToJSON Schema where
+        toJSON Schema{..}
+          = object
+              (catMaybes
+                 [("etag" .=) <$> _schEtag, Just ("kind" .= _schKind),
+                  ("schemaName" .=) <$> _schSchemaName,
+                  ("schemaId" .=) <$> _schSchemaId,
+                  ("fields" .=) <$> _schFields])
+
+-- | JSON template for User object in Directory API.
+--
+-- /See:/ 'user' smart constructor.
+data User = User
+    { _useCreationTime               :: !(Maybe DateTime')
+    , _useLastLoginTime              :: !(Maybe DateTime')
+    , _useThumbnailPhotoEtag         :: !(Maybe Text)
+    , _useEtag                       :: !(Maybe Text)
+    , _useIPWhiteListed              :: !(Maybe Bool)
+    , _useRelations                  :: !(Maybe JSONValue)
+    , _useHashFunction               :: !(Maybe Text)
+    , _useKind                       :: !Text
+    , _useChangePasswordAtNextLogin  :: !(Maybe Bool)
+    , _useWebsites                   :: !(Maybe JSONValue)
+    , _useAddresses                  :: !(Maybe JSONValue)
+    , _useAliases                    :: !(Maybe [Text])
+    , _useThumbnailPhotoURL          :: !(Maybe Text)
+    , _useExternalIds                :: !(Maybe JSONValue)
+    , _useSuspended                  :: !(Maybe Bool)
+    , _useAgreedToTerms              :: !(Maybe Bool)
+    , _useDeletionTime               :: !(Maybe DateTime')
+    , _useNonEditableAliases         :: !(Maybe [Text])
+    , _useOrgUnitPath                :: !(Maybe Text)
+    , _useCustomerId                 :: !(Maybe Text)
+    , _useIncludeInGlobalAddressList :: !(Maybe Bool)
+    , _usePhones                     :: !(Maybe JSONValue)
+    , _useName                       :: !(Maybe UserName)
+    , _usePassword                   :: !(Maybe Text)
+    , _useEmails                     :: !(Maybe JSONValue)
+    , _useIms                        :: !(Maybe JSONValue)
+    , _useIsAdmin                    :: !(Maybe Bool)
+    , _useId                         :: !(Maybe Text)
+    , _useOrganizations              :: !(Maybe JSONValue)
+    , _usePrimaryEmail               :: !(Maybe Text)
+    , _useNotes                      :: !(Maybe JSONValue)
+    , _useIsDelegatedAdmin           :: !(Maybe Bool)
+    , _useIsMailboxSetup             :: !(Maybe Bool)
+    , _useCustomSchemas              :: !(Maybe UserCustomSchemas)
+    , _useSuspensionReason           :: !(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:
+--
+-- * 'useCreationTime'
+--
+-- * 'useLastLoginTime'
+--
+-- * 'useThumbnailPhotoEtag'
+--
+-- * 'useEtag'
+--
+-- * 'useIPWhiteListed'
+--
+-- * 'useRelations'
+--
+-- * 'useHashFunction'
+--
+-- * 'useKind'
+--
+-- * 'useChangePasswordAtNextLogin'
+--
+-- * 'useWebsites'
+--
+-- * 'useAddresses'
+--
+-- * 'useAliases'
+--
+-- * 'useThumbnailPhotoURL'
+--
+-- * 'useExternalIds'
+--
+-- * 'useSuspended'
+--
+-- * 'useAgreedToTerms'
+--
+-- * 'useDeletionTime'
+--
+-- * 'useNonEditableAliases'
+--
+-- * 'useOrgUnitPath'
+--
+-- * 'useCustomerId'
+--
+-- * 'useIncludeInGlobalAddressList'
+--
+-- * 'usePhones'
+--
+-- * 'useName'
+--
+-- * 'usePassword'
+--
+-- * 'useEmails'
+--
+-- * 'useIms'
+--
+-- * 'useIsAdmin'
+--
+-- * 'useId'
+--
+-- * 'useOrganizations'
+--
+-- * 'usePrimaryEmail'
+--
+-- * 'useNotes'
+--
+-- * 'useIsDelegatedAdmin'
+--
+-- * 'useIsMailboxSetup'
+--
+-- * 'useCustomSchemas'
+--
+-- * 'useSuspensionReason'
+user
+    :: User
+user =
+    User
+    { _useCreationTime = Nothing
+    , _useLastLoginTime = Nothing
+    , _useThumbnailPhotoEtag = Nothing
+    , _useEtag = Nothing
+    , _useIPWhiteListed = Nothing
+    , _useRelations = Nothing
+    , _useHashFunction = Nothing
+    , _useKind = "admin#directory#user"
+    , _useChangePasswordAtNextLogin = Nothing
+    , _useWebsites = Nothing
+    , _useAddresses = Nothing
+    , _useAliases = Nothing
+    , _useThumbnailPhotoURL = Nothing
+    , _useExternalIds = Nothing
+    , _useSuspended = Nothing
+    , _useAgreedToTerms = Nothing
+    , _useDeletionTime = Nothing
+    , _useNonEditableAliases = Nothing
+    , _useOrgUnitPath = Nothing
+    , _useCustomerId = Nothing
+    , _useIncludeInGlobalAddressList = Nothing
+    , _usePhones = Nothing
+    , _useName = Nothing
+    , _usePassword = Nothing
+    , _useEmails = Nothing
+    , _useIms = Nothing
+    , _useIsAdmin = Nothing
+    , _useId = Nothing
+    , _useOrganizations = Nothing
+    , _usePrimaryEmail = Nothing
+    , _useNotes = Nothing
+    , _useIsDelegatedAdmin = Nothing
+    , _useIsMailboxSetup = Nothing
+    , _useCustomSchemas = Nothing
+    , _useSuspensionReason = Nothing
+    }
+
+-- | User\'s Google account creation time. (Read-only)
+useCreationTime :: Lens' User (Maybe UTCTime)
+useCreationTime
+  = lens _useCreationTime
+      (\ s a -> s{_useCreationTime = a})
+      . mapping _DateTime
+
+-- | User\'s last login time. (Read-only)
+useLastLoginTime :: Lens' User (Maybe UTCTime)
+useLastLoginTime
+  = lens _useLastLoginTime
+      (\ s a -> s{_useLastLoginTime = a})
+      . mapping _DateTime
+
+-- | ETag of the user\'s photo (Read-only)
+useThumbnailPhotoEtag :: Lens' User (Maybe Text)
+useThumbnailPhotoEtag
+  = lens _useThumbnailPhotoEtag
+      (\ s a -> s{_useThumbnailPhotoEtag = a})
+
+-- | ETag of the resource.
+useEtag :: Lens' User (Maybe Text)
+useEtag = lens _useEtag (\ s a -> s{_useEtag = a})
+
+-- | Boolean indicating if ip is whitelisted
+useIPWhiteListed :: Lens' User (Maybe Bool)
+useIPWhiteListed
+  = lens _useIPWhiteListed
+      (\ s a -> s{_useIPWhiteListed = a})
+
+useRelations :: Lens' User (Maybe JSONValue)
+useRelations
+  = lens _useRelations (\ s a -> s{_useRelations = a})
+
+-- | Hash function name for password. Supported are MD5, SHA-1 and crypt
+useHashFunction :: Lens' User (Maybe Text)
+useHashFunction
+  = lens _useHashFunction
+      (\ s a -> s{_useHashFunction = a})
+
+-- | Kind of resource this is.
+useKind :: Lens' User Text
+useKind = lens _useKind (\ s a -> s{_useKind = a})
+
+-- | Boolean indicating if the user should change password in next login
+useChangePasswordAtNextLogin :: Lens' User (Maybe Bool)
+useChangePasswordAtNextLogin
+  = lens _useChangePasswordAtNextLogin
+      (\ s a -> s{_useChangePasswordAtNextLogin = a})
+
+useWebsites :: Lens' User (Maybe JSONValue)
+useWebsites
+  = lens _useWebsites (\ s a -> s{_useWebsites = a})
+
+useAddresses :: Lens' User (Maybe JSONValue)
+useAddresses
+  = lens _useAddresses (\ s a -> s{_useAddresses = a})
+
+-- | List of aliases (Read-only)
+useAliases :: Lens' User [Text]
+useAliases
+  = lens _useAliases (\ s a -> s{_useAliases = a}) .
+      _Default
+      . _Coerce
+
+-- | Photo Url of the user (Read-only)
+useThumbnailPhotoURL :: Lens' User (Maybe Text)
+useThumbnailPhotoURL
+  = lens _useThumbnailPhotoURL
+      (\ s a -> s{_useThumbnailPhotoURL = a})
+
+useExternalIds :: Lens' User (Maybe JSONValue)
+useExternalIds
+  = lens _useExternalIds
+      (\ s a -> s{_useExternalIds = a})
+
+-- | Indicates if user is suspended
+useSuspended :: Lens' User (Maybe Bool)
+useSuspended
+  = lens _useSuspended (\ s a -> s{_useSuspended = a})
+
+-- | Indicates if user has agreed to terms (Read-only)
+useAgreedToTerms :: Lens' User (Maybe Bool)
+useAgreedToTerms
+  = lens _useAgreedToTerms
+      (\ s a -> s{_useAgreedToTerms = a})
+
+useDeletionTime :: Lens' User (Maybe UTCTime)
+useDeletionTime
+  = lens _useDeletionTime
+      (\ s a -> s{_useDeletionTime = a})
+      . mapping _DateTime
+
+-- | List of non editable aliases (Read-only)
+useNonEditableAliases :: Lens' User [Text]
+useNonEditableAliases
+  = lens _useNonEditableAliases
+      (\ s a -> s{_useNonEditableAliases = a})
+      . _Default
+      . _Coerce
+
+-- | OrgUnit of User
+useOrgUnitPath :: Lens' User (Maybe Text)
+useOrgUnitPath
+  = lens _useOrgUnitPath
+      (\ s a -> s{_useOrgUnitPath = a})
+
+-- | CustomerId of User (Read-only)
+useCustomerId :: Lens' User (Maybe Text)
+useCustomerId
+  = lens _useCustomerId
+      (\ s a -> s{_useCustomerId = a})
+
+-- | Boolean indicating if user is included in Global Address List
+useIncludeInGlobalAddressList :: Lens' User (Maybe Bool)
+useIncludeInGlobalAddressList
+  = lens _useIncludeInGlobalAddressList
+      (\ s a -> s{_useIncludeInGlobalAddressList = a})
+
+usePhones :: Lens' User (Maybe JSONValue)
+usePhones
+  = lens _usePhones (\ s a -> s{_usePhones = a})
+
+-- | User\'s name
+useName :: Lens' User (Maybe UserName)
+useName = lens _useName (\ s a -> s{_useName = a})
+
+-- | User\'s password
+usePassword :: Lens' User (Maybe Text)
+usePassword
+  = lens _usePassword (\ s a -> s{_usePassword = a})
+
+useEmails :: Lens' User (Maybe JSONValue)
+useEmails
+  = lens _useEmails (\ s a -> s{_useEmails = a})
+
+useIms :: Lens' User (Maybe JSONValue)
+useIms = lens _useIms (\ s a -> s{_useIms = a})
+
+-- | Boolean indicating if the user is admin (Read-only)
+useIsAdmin :: Lens' User (Maybe Bool)
+useIsAdmin
+  = lens _useIsAdmin (\ s a -> s{_useIsAdmin = a})
+
+-- | Unique identifier of User (Read-only)
+useId :: Lens' User (Maybe Text)
+useId = lens _useId (\ s a -> s{_useId = a})
+
+useOrganizations :: Lens' User (Maybe JSONValue)
+useOrganizations
+  = lens _useOrganizations
+      (\ s a -> s{_useOrganizations = a})
+
+-- | username of User
+usePrimaryEmail :: Lens' User (Maybe Text)
+usePrimaryEmail
+  = lens _usePrimaryEmail
+      (\ s a -> s{_usePrimaryEmail = a})
+
+useNotes :: Lens' User (Maybe JSONValue)
+useNotes = lens _useNotes (\ s a -> s{_useNotes = a})
+
+-- | Boolean indicating if the user is delegated admin (Read-only)
+useIsDelegatedAdmin :: Lens' User (Maybe Bool)
+useIsDelegatedAdmin
+  = lens _useIsDelegatedAdmin
+      (\ s a -> s{_useIsDelegatedAdmin = a})
+
+-- | Is mailbox setup (Read-only)
+useIsMailboxSetup :: Lens' User (Maybe Bool)
+useIsMailboxSetup
+  = lens _useIsMailboxSetup
+      (\ s a -> s{_useIsMailboxSetup = a})
+
+-- | Custom fields of the user.
+useCustomSchemas :: Lens' User (Maybe UserCustomSchemas)
+useCustomSchemas
+  = lens _useCustomSchemas
+      (\ s a -> s{_useCustomSchemas = a})
+
+-- | Suspension reason if user is suspended (Read-only)
+useSuspensionReason :: Lens' User (Maybe Text)
+useSuspensionReason
+  = lens _useSuspensionReason
+      (\ s a -> s{_useSuspensionReason = a})
+
+instance FromJSON User where
+        parseJSON
+          = withObject "User"
+              (\ o ->
+                 User <$>
+                   (o .:? "creationTime") <*> (o .:? "lastLoginTime")
+                     <*> (o .:? "thumbnailPhotoEtag")
+                     <*> (o .:? "etag")
+                     <*> (o .:? "ipWhitelisted")
+                     <*> (o .:? "relations")
+                     <*> (o .:? "hashFunction")
+                     <*> (o .:? "kind" .!= "admin#directory#user")
+                     <*> (o .:? "changePasswordAtNextLogin")
+                     <*> (o .:? "websites")
+                     <*> (o .:? "addresses")
+                     <*> (o .:? "aliases" .!= mempty)
+                     <*> (o .:? "thumbnailPhotoUrl")
+                     <*> (o .:? "externalIds")
+                     <*> (o .:? "suspended")
+                     <*> (o .:? "agreedToTerms")
+                     <*> (o .:? "deletionTime")
+                     <*> (o .:? "nonEditableAliases" .!= mempty)
+                     <*> (o .:? "orgUnitPath")
+                     <*> (o .:? "customerId")
+                     <*> (o .:? "includeInGlobalAddressList")
+                     <*> (o .:? "phones")
+                     <*> (o .:? "name")
+                     <*> (o .:? "password")
+                     <*> (o .:? "emails")
+                     <*> (o .:? "ims")
+                     <*> (o .:? "isAdmin")
+                     <*> (o .:? "id")
+                     <*> (o .:? "organizations")
+                     <*> (o .:? "primaryEmail")
+                     <*> (o .:? "notes")
+                     <*> (o .:? "isDelegatedAdmin")
+                     <*> (o .:? "isMailboxSetup")
+                     <*> (o .:? "customSchemas")
+                     <*> (o .:? "suspensionReason"))
+
+instance ToJSON User where
+        toJSON User{..}
+          = object
+              (catMaybes
+                 [("creationTime" .=) <$> _useCreationTime,
+                  ("lastLoginTime" .=) <$> _useLastLoginTime,
+                  ("thumbnailPhotoEtag" .=) <$> _useThumbnailPhotoEtag,
+                  ("etag" .=) <$> _useEtag,
+                  ("ipWhitelisted" .=) <$> _useIPWhiteListed,
+                  ("relations" .=) <$> _useRelations,
+                  ("hashFunction" .=) <$> _useHashFunction,
+                  Just ("kind" .= _useKind),
+                  ("changePasswordAtNextLogin" .=) <$>
+                    _useChangePasswordAtNextLogin,
+                  ("websites" .=) <$> _useWebsites,
+                  ("addresses" .=) <$> _useAddresses,
+                  ("aliases" .=) <$> _useAliases,
+                  ("thumbnailPhotoUrl" .=) <$> _useThumbnailPhotoURL,
+                  ("externalIds" .=) <$> _useExternalIds,
+                  ("suspended" .=) <$> _useSuspended,
+                  ("agreedToTerms" .=) <$> _useAgreedToTerms,
+                  ("deletionTime" .=) <$> _useDeletionTime,
+                  ("nonEditableAliases" .=) <$> _useNonEditableAliases,
+                  ("orgUnitPath" .=) <$> _useOrgUnitPath,
+                  ("customerId" .=) <$> _useCustomerId,
+                  ("includeInGlobalAddressList" .=) <$>
+                    _useIncludeInGlobalAddressList,
+                  ("phones" .=) <$> _usePhones,
+                  ("name" .=) <$> _useName,
+                  ("password" .=) <$> _usePassword,
+                  ("emails" .=) <$> _useEmails, ("ims" .=) <$> _useIms,
+                  ("isAdmin" .=) <$> _useIsAdmin, ("id" .=) <$> _useId,
+                  ("organizations" .=) <$> _useOrganizations,
+                  ("primaryEmail" .=) <$> _usePrimaryEmail,
+                  ("notes" .=) <$> _useNotes,
+                  ("isDelegatedAdmin" .=) <$> _useIsDelegatedAdmin,
+                  ("isMailboxSetup" .=) <$> _useIsMailboxSetup,
+                  ("customSchemas" .=) <$> _useCustomSchemas,
+                  ("suspensionReason" .=) <$> _useSuspensionReason])
+
+-- | JSON template for role resource in Directory API.
+--
+-- /See:/ 'role' smart constructor.
+data Role = Role
+    { _rrEtag             :: !(Maybe Text)
+    , _rrKind             :: !Text
+    , _rrRoleName         :: !(Maybe Text)
+    , _rrIsSystemRole     :: !(Maybe Bool)
+    , _rrRoleId           :: !(Maybe (Textual Int64))
+    , _rrRoleDescription  :: !(Maybe Text)
+    , _rrIsSuperAdminRole :: !(Maybe Bool)
+    , _rrRolePrivileges   :: !(Maybe [RoleRolePrivilegesItem])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Role' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'rrEtag'
+--
+-- * 'rrKind'
+--
+-- * 'rrRoleName'
+--
+-- * 'rrIsSystemRole'
+--
+-- * 'rrRoleId'
+--
+-- * 'rrRoleDescription'
+--
+-- * 'rrIsSuperAdminRole'
+--
+-- * 'rrRolePrivileges'
+role
+    :: Role
+role =
+    Role
+    { _rrEtag = Nothing
+    , _rrKind = "admin#directory#role"
+    , _rrRoleName = Nothing
+    , _rrIsSystemRole = Nothing
+    , _rrRoleId = Nothing
+    , _rrRoleDescription = Nothing
+    , _rrIsSuperAdminRole = Nothing
+    , _rrRolePrivileges = Nothing
+    }
+
+-- | ETag of the resource.
+rrEtag :: Lens' Role (Maybe Text)
+rrEtag = lens _rrEtag (\ s a -> s{_rrEtag = a})
+
+-- | The type of the API resource. This is always admin#directory#role.
+rrKind :: Lens' Role Text
+rrKind = lens _rrKind (\ s a -> s{_rrKind = a})
+
+-- | Name of the role.
+rrRoleName :: Lens' Role (Maybe Text)
+rrRoleName
+  = lens _rrRoleName (\ s a -> s{_rrRoleName = a})
+
+-- | Returns true if this is a pre-defined system role.
+rrIsSystemRole :: Lens' Role (Maybe Bool)
+rrIsSystemRole
+  = lens _rrIsSystemRole
+      (\ s a -> s{_rrIsSystemRole = a})
+
+-- | ID of the role.
+rrRoleId :: Lens' Role (Maybe Int64)
+rrRoleId
+  = lens _rrRoleId (\ s a -> s{_rrRoleId = a}) .
+      mapping _Coerce
+
+-- | A short description of the role.
+rrRoleDescription :: Lens' Role (Maybe Text)
+rrRoleDescription
+  = lens _rrRoleDescription
+      (\ s a -> s{_rrRoleDescription = a})
+
+-- | Returns true if the role is a super admin role.
+rrIsSuperAdminRole :: Lens' Role (Maybe Bool)
+rrIsSuperAdminRole
+  = lens _rrIsSuperAdminRole
+      (\ s a -> s{_rrIsSuperAdminRole = a})
+
+-- | The set of privileges that are granted to this role.
+rrRolePrivileges :: Lens' Role [RoleRolePrivilegesItem]
+rrRolePrivileges
+  = lens _rrRolePrivileges
+      (\ s a -> s{_rrRolePrivileges = a})
+      . _Default
+      . _Coerce
+
+instance FromJSON Role where
+        parseJSON
+          = withObject "Role"
+              (\ o ->
+                 Role <$>
+                   (o .:? "etag") <*>
+                     (o .:? "kind" .!= "admin#directory#role")
+                     <*> (o .:? "roleName")
+                     <*> (o .:? "isSystemRole")
+                     <*> (o .:? "roleId")
+                     <*> (o .:? "roleDescription")
+                     <*> (o .:? "isSuperAdminRole")
+                     <*> (o .:? "rolePrivileges" .!= mempty))
+
+instance ToJSON Role where
+        toJSON Role{..}
+          = object
+              (catMaybes
+                 [("etag" .=) <$> _rrEtag, Just ("kind" .= _rrKind),
+                  ("roleName" .=) <$> _rrRoleName,
+                  ("isSystemRole" .=) <$> _rrIsSystemRole,
+                  ("roleId" .=) <$> _rrRoleId,
+                  ("roleDescription" .=) <$> _rrRoleDescription,
+                  ("isSuperAdminRole" .=) <$> _rrIsSuperAdminRole,
+                  ("rolePrivileges" .=) <$> _rrRolePrivileges])
+
+-- | JSON template for Customer Resource object in Directory API.
+--
+-- /See:/ 'customer' smart constructor.
+data Customer = Customer
+    { _cusEtag                 :: !(Maybe Text)
+    , _cusKind                 :: !Text
+    , _cusAlternateEmail       :: !(Maybe Text)
+    , _cusCustomerDomain       :: !(Maybe Text)
+    , _cusPhoneNumber          :: !(Maybe Text)
+    , _cusLanguage             :: !(Maybe Text)
+    , _cusId                   :: !(Maybe Text)
+    , _cusCustomerCreationTime :: !(Maybe DateTime')
+    , _cusPostalAddress        :: !(Maybe CustomerPostalAddress)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Customer' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cusEtag'
+--
+-- * 'cusKind'
+--
+-- * 'cusAlternateEmail'
+--
+-- * 'cusCustomerDomain'
+--
+-- * 'cusPhoneNumber'
+--
+-- * 'cusLanguage'
+--
+-- * 'cusId'
+--
+-- * 'cusCustomerCreationTime'
+--
+-- * 'cusPostalAddress'
+customer
+    :: Customer
+customer =
+    Customer
+    { _cusEtag = Nothing
+    , _cusKind = "admin#directory#customer"
+    , _cusAlternateEmail = Nothing
+    , _cusCustomerDomain = Nothing
+    , _cusPhoneNumber = Nothing
+    , _cusLanguage = Nothing
+    , _cusId = Nothing
+    , _cusCustomerCreationTime = Nothing
+    , _cusPostalAddress = Nothing
+    }
+
+-- | ETag of the resource.
+cusEtag :: Lens' Customer (Maybe Text)
+cusEtag = lens _cusEtag (\ s a -> s{_cusEtag = a})
+
+-- | Identifies the resource as a customer. Value: admin#directory#customer
+cusKind :: Lens' Customer Text
+cusKind = lens _cusKind (\ s a -> s{_cusKind = a})
+
+-- | The customer\'s secondary contact email address. This email address
+-- cannot be on the same domain as the customerDomain
+cusAlternateEmail :: Lens' Customer (Maybe Text)
+cusAlternateEmail
+  = lens _cusAlternateEmail
+      (\ s a -> s{_cusAlternateEmail = a})
+
+-- | The customer\'s primary domain name string. Do not include the www
+-- prefix when creating a new customer.
+cusCustomerDomain :: Lens' Customer (Maybe Text)
+cusCustomerDomain
+  = lens _cusCustomerDomain
+      (\ s a -> s{_cusCustomerDomain = a})
+
+-- | The customer\'s contact phone number in E.164 format.
+cusPhoneNumber :: Lens' Customer (Maybe Text)
+cusPhoneNumber
+  = lens _cusPhoneNumber
+      (\ s a -> s{_cusPhoneNumber = a})
+
+-- | The customer\'s ISO 639-2 language code. The default value is en-US
+cusLanguage :: Lens' Customer (Maybe Text)
+cusLanguage
+  = lens _cusLanguage (\ s a -> s{_cusLanguage = a})
+
+-- | The unique ID for the customer\'s Google account. (Readonly)
+cusId :: Lens' Customer (Maybe Text)
+cusId = lens _cusId (\ s a -> s{_cusId = a})
+
+-- | The customer\'s creation time (Readonly)
+cusCustomerCreationTime :: Lens' Customer (Maybe UTCTime)
+cusCustomerCreationTime
+  = lens _cusCustomerCreationTime
+      (\ s a -> s{_cusCustomerCreationTime = a})
+      . mapping _DateTime
+
+-- | The customer\'s postal address information.
+cusPostalAddress :: Lens' Customer (Maybe CustomerPostalAddress)
+cusPostalAddress
+  = lens _cusPostalAddress
+      (\ s a -> s{_cusPostalAddress = a})
+
+instance FromJSON Customer where
+        parseJSON
+          = withObject "Customer"
+              (\ o ->
+                 Customer <$>
+                   (o .:? "etag") <*>
+                     (o .:? "kind" .!= "admin#directory#customer")
+                     <*> (o .:? "alternateEmail")
+                     <*> (o .:? "customerDomain")
+                     <*> (o .:? "phoneNumber")
+                     <*> (o .:? "language")
+                     <*> (o .:? "id")
+                     <*> (o .:? "customerCreationTime")
+                     <*> (o .:? "postalAddress"))
+
+instance ToJSON Customer where
+        toJSON Customer{..}
+          = object
+              (catMaybes
+                 [("etag" .=) <$> _cusEtag, Just ("kind" .= _cusKind),
+                  ("alternateEmail" .=) <$> _cusAlternateEmail,
+                  ("customerDomain" .=) <$> _cusCustomerDomain,
+                  ("phoneNumber" .=) <$> _cusPhoneNumber,
+                  ("language" .=) <$> _cusLanguage,
+                  ("id" .=) <$> _cusId,
+                  ("customerCreationTime" .=) <$>
+                    _cusCustomerCreationTime,
+                  ("postalAddress" .=) <$> _cusPostalAddress])
+
+--
+-- /See:/ 'mobileDeviceApplicationsItem' smart constructor.
+data MobileDeviceApplicationsItem = MobileDeviceApplicationsItem
+    { _mdaiVersionCode :: !(Maybe (Textual Int32))
+    , _mdaiVersionName :: !(Maybe Text)
+    , _mdaiPackageName :: !(Maybe Text)
+    , _mdaiDisplayName :: !(Maybe Text)
+    , _mdaiPermission  :: !(Maybe [Text])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'MobileDeviceApplicationsItem' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'mdaiVersionCode'
+--
+-- * 'mdaiVersionName'
+--
+-- * 'mdaiPackageName'
+--
+-- * 'mdaiDisplayName'
+--
+-- * 'mdaiPermission'
+mobileDeviceApplicationsItem
+    :: MobileDeviceApplicationsItem
+mobileDeviceApplicationsItem =
+    MobileDeviceApplicationsItem
+    { _mdaiVersionCode = Nothing
+    , _mdaiVersionName = Nothing
+    , _mdaiPackageName = Nothing
+    , _mdaiDisplayName = Nothing
+    , _mdaiPermission = Nothing
+    }
+
+-- | Version code of application
+mdaiVersionCode :: Lens' MobileDeviceApplicationsItem (Maybe Int32)
+mdaiVersionCode
+  = lens _mdaiVersionCode
+      (\ s a -> s{_mdaiVersionCode = a})
+      . mapping _Coerce
+
+-- | Version name of application
+mdaiVersionName :: Lens' MobileDeviceApplicationsItem (Maybe Text)
+mdaiVersionName
+  = lens _mdaiVersionName
+      (\ s a -> s{_mdaiVersionName = a})
+
+-- | Package name of application
+mdaiPackageName :: Lens' MobileDeviceApplicationsItem (Maybe Text)
+mdaiPackageName
+  = lens _mdaiPackageName
+      (\ s a -> s{_mdaiPackageName = a})
+
+-- | Display name of application
+mdaiDisplayName :: Lens' MobileDeviceApplicationsItem (Maybe Text)
+mdaiDisplayName
+  = lens _mdaiDisplayName
+      (\ s a -> s{_mdaiDisplayName = a})
+
+-- | List of Permissions for application
+mdaiPermission :: Lens' MobileDeviceApplicationsItem [Text]
+mdaiPermission
+  = lens _mdaiPermission
+      (\ s a -> s{_mdaiPermission = a})
+      . _Default
+      . _Coerce
+
+instance FromJSON MobileDeviceApplicationsItem where
+        parseJSON
+          = withObject "MobileDeviceApplicationsItem"
+              (\ o ->
+                 MobileDeviceApplicationsItem <$>
+                   (o .:? "versionCode") <*> (o .:? "versionName") <*>
+                     (o .:? "packageName")
+                     <*> (o .:? "displayName")
+                     <*> (o .:? "permission" .!= mempty))
+
+instance ToJSON MobileDeviceApplicationsItem where
+        toJSON MobileDeviceApplicationsItem{..}
+          = object
+              (catMaybes
+                 [("versionCode" .=) <$> _mdaiVersionCode,
+                  ("versionName" .=) <$> _mdaiVersionName,
+                  ("packageName" .=) <$> _mdaiPackageName,
+                  ("displayName" .=) <$> _mdaiDisplayName,
+                  ("permission" .=) <$> _mdaiPermission])
+
+-- | JSON response template for List Organization Units operation in
+-- Directory API.
+--
+-- /See:/ 'orgUnits' smart constructor.
+data OrgUnits = OrgUnits
+    { _oEtag              :: !(Maybe Text)
+    , _oKind              :: !Text
+    , _oOrganizationUnits :: !(Maybe [OrgUnit])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'OrgUnits' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'oEtag'
+--
+-- * 'oKind'
+--
+-- * 'oOrganizationUnits'
+orgUnits
+    :: OrgUnits
+orgUnits =
+    OrgUnits
+    { _oEtag = Nothing
+    , _oKind = "admin#directory#orgUnits"
+    , _oOrganizationUnits = Nothing
+    }
+
+-- | ETag of the resource.
+oEtag :: Lens' OrgUnits (Maybe Text)
+oEtag = lens _oEtag (\ s a -> s{_oEtag = a})
+
+-- | Kind of resource this is.
+oKind :: Lens' OrgUnits Text
+oKind = lens _oKind (\ s a -> s{_oKind = a})
+
+-- | List of user objects.
+oOrganizationUnits :: Lens' OrgUnits [OrgUnit]
+oOrganizationUnits
+  = lens _oOrganizationUnits
+      (\ s a -> s{_oOrganizationUnits = a})
+      . _Default
+      . _Coerce
+
+instance FromJSON OrgUnits where
+        parseJSON
+          = withObject "OrgUnits"
+              (\ o ->
+                 OrgUnits <$>
+                   (o .:? "etag") <*>
+                     (o .:? "kind" .!= "admin#directory#orgUnits")
+                     <*> (o .:? "organizationUnits" .!= mempty))
+
+instance ToJSON OrgUnits where
+        toJSON OrgUnits{..}
+          = object
+              (catMaybes
+                 [("etag" .=) <$> _oEtag, Just ("kind" .= _oKind),
+                  ("organizationUnits" .=) <$> _oOrganizationUnits])
+
+-- | JSON response template for List verification codes operation in
+-- Directory API.
+--
+-- /See:/ 'verificationCodes' smart constructor.
+data VerificationCodes = VerificationCodes
+    { _vEtag  :: !(Maybe Text)
+    , _vKind  :: !Text
+    , _vItems :: !(Maybe [VerificationCode])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'VerificationCodes' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'vEtag'
+--
+-- * 'vKind'
+--
+-- * 'vItems'
+verificationCodes
+    :: VerificationCodes
+verificationCodes =
+    VerificationCodes
+    { _vEtag = Nothing
+    , _vKind = "admin#directory#verificationCodesList"
+    , _vItems = Nothing
+    }
+
+-- | ETag of the resource.
+vEtag :: Lens' VerificationCodes (Maybe Text)
+vEtag = lens _vEtag (\ s a -> s{_vEtag = a})
+
+-- | The type of the resource. This is always
+-- admin#directory#verificationCodesList.
+vKind :: Lens' VerificationCodes Text
+vKind = lens _vKind (\ s a -> s{_vKind = a})
+
+-- | A list of verification code resources.
+vItems :: Lens' VerificationCodes [VerificationCode]
+vItems
+  = lens _vItems (\ s a -> s{_vItems = a}) . _Default .
+      _Coerce
+
+instance FromJSON VerificationCodes where
+        parseJSON
+          = withObject "VerificationCodes"
+              (\ o ->
+                 VerificationCodes <$>
+                   (o .:? "etag") <*>
+                     (o .:? "kind" .!=
+                        "admin#directory#verificationCodesList")
+                     <*> (o .:? "items" .!= mempty))
+
+instance ToJSON VerificationCodes where
+        toJSON VerificationCodes{..}
+          = object
+              (catMaybes
+                 [("etag" .=) <$> _vEtag, Just ("kind" .= _vKind),
+                  ("items" .=) <$> _vItems])
+
+-- | JSON template for a relation entry.
+--
+-- /See:/ 'userRelation' smart constructor.
+data UserRelation = UserRelation
+    { _urValue      :: !(Maybe Text)
+    , _urType       :: !(Maybe Text)
+    , _urCustomType :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'UserRelation' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'urValue'
+--
+-- * 'urType'
+--
+-- * 'urCustomType'
+userRelation
+    :: UserRelation
+userRelation =
+    UserRelation
+    { _urValue = Nothing
+    , _urType = Nothing
+    , _urCustomType = Nothing
+    }
+
+-- | The name of the relation.
+urValue :: Lens' UserRelation (Maybe Text)
+urValue = lens _urValue (\ s a -> s{_urValue = a})
+
+-- | The relation of the user. Some of the possible values are mother,
+-- father, sister, brother, manager, assistant, partner.
+urType :: Lens' UserRelation (Maybe Text)
+urType = lens _urType (\ s a -> s{_urType = a})
+
+-- | Custom Type.
+urCustomType :: Lens' UserRelation (Maybe Text)
+urCustomType
+  = lens _urCustomType (\ s a -> s{_urCustomType = a})
+
+instance FromJSON UserRelation where
+        parseJSON
+          = withObject "UserRelation"
+              (\ o ->
+                 UserRelation <$>
+                   (o .:? "value") <*> (o .:? "type") <*>
+                     (o .:? "customType"))
+
+instance ToJSON UserRelation where
+        toJSON UserRelation{..}
+          = object
+              (catMaybes
+                 [("value" .=) <$> _urValue, ("type" .=) <$> _urType,
+                  ("customType" .=) <$> _urCustomType])
+
+-- | Additional parameters controlling delivery channel behavior. Optional.
+--
+-- /See:/ 'channelParams' smart constructor.
+newtype ChannelParams = ChannelParams
+    { _cpAddtional :: HashMap Text Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ChannelParams' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cpAddtional'
+channelParams
+    :: HashMap Text Text -- ^ 'cpAddtional'
+    -> ChannelParams
+channelParams pCpAddtional_ =
+    ChannelParams
+    { _cpAddtional = _Coerce # pCpAddtional_
+    }
+
+-- | Declares a new parameter by name.
+cpAddtional :: Lens' ChannelParams (HashMap Text Text)
+cpAddtional
+  = lens _cpAddtional (\ s a -> s{_cpAddtional = a}) .
+      _Coerce
+
+instance FromJSON ChannelParams where
+        parseJSON
+          = withObject "ChannelParams"
+              (\ o -> ChannelParams <$> (parseJSONObject o))
+
+instance ToJSON ChannelParams where
+        toJSON = toJSON . _cpAddtional
+
+-- | JSON template for an organization entry.
+--
+-- /See:/ 'userOrganization' smart constructor.
+data UserOrganization = UserOrganization
+    { _uoDePartment  :: !(Maybe Text)
+    , _uoLocation    :: !(Maybe Text)
+    , _uoCostCenter  :: !(Maybe Text)
+    , _uoDomain      :: !(Maybe Text)
+    , _uoSymbol      :: !(Maybe Text)
+    , _uoPrimary     :: !(Maybe Bool)
+    , _uoName        :: !(Maybe Text)
+    , _uoTitle       :: !(Maybe Text)
+    , _uoType        :: !(Maybe Text)
+    , _uoCustomType  :: !(Maybe Text)
+    , _uoDescription :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'UserOrganization' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'uoDePartment'
+--
+-- * 'uoLocation'
+--
+-- * 'uoCostCenter'
+--
+-- * 'uoDomain'
+--
+-- * 'uoSymbol'
+--
+-- * 'uoPrimary'
+--
+-- * 'uoName'
+--
+-- * 'uoTitle'
+--
+-- * 'uoType'
+--
+-- * 'uoCustomType'
+--
+-- * 'uoDescription'
+userOrganization
+    :: UserOrganization
+userOrganization =
+    UserOrganization
+    { _uoDePartment = Nothing
+    , _uoLocation = Nothing
+    , _uoCostCenter = Nothing
+    , _uoDomain = Nothing
+    , _uoSymbol = Nothing
+    , _uoPrimary = Nothing
+    , _uoName = Nothing
+    , _uoTitle = Nothing
+    , _uoType = Nothing
+    , _uoCustomType = Nothing
+    , _uoDescription = Nothing
+    }
+
+-- | Department within the organization.
+uoDePartment :: Lens' UserOrganization (Maybe Text)
+uoDePartment
+  = lens _uoDePartment (\ s a -> s{_uoDePartment = a})
+
+-- | Location of the organization. This need not be fully qualified address.
+uoLocation :: Lens' UserOrganization (Maybe Text)
+uoLocation
+  = lens _uoLocation (\ s a -> s{_uoLocation = a})
+
+-- | The cost center of the users department.
+uoCostCenter :: Lens' UserOrganization (Maybe Text)
+uoCostCenter
+  = lens _uoCostCenter (\ s a -> s{_uoCostCenter = a})
+
+-- | The domain to which the organization belongs to.
+uoDomain :: Lens' UserOrganization (Maybe Text)
+uoDomain = lens _uoDomain (\ s a -> s{_uoDomain = a})
+
+-- | Symbol of the organization.
+uoSymbol :: Lens' UserOrganization (Maybe Text)
+uoSymbol = lens _uoSymbol (\ s a -> s{_uoSymbol = a})
+
+-- | If it user\'s primary organization.
+uoPrimary :: Lens' UserOrganization (Maybe Bool)
+uoPrimary
+  = lens _uoPrimary (\ s a -> s{_uoPrimary = a})
+
+-- | Name of the organization
+uoName :: Lens' UserOrganization (Maybe Text)
+uoName = lens _uoName (\ s a -> s{_uoName = a})
+
+-- | Title (designation) of the user in the organization.
+uoTitle :: Lens' UserOrganization (Maybe Text)
+uoTitle = lens _uoTitle (\ s a -> s{_uoTitle = a})
+
+-- | Each entry can have a type which indicates standard types of that entry.
+-- For example organization could be of school, work etc. In addition to
+-- the standard type, an entry can have a custom type and can give it any
+-- name. Such types should have the CUSTOM value as type and also have a
+-- CustomType value.
+uoType :: Lens' UserOrganization (Maybe Text)
+uoType = lens _uoType (\ s a -> s{_uoType = a})
+
+-- | Custom type.
+uoCustomType :: Lens' UserOrganization (Maybe Text)
+uoCustomType
+  = lens _uoCustomType (\ s a -> s{_uoCustomType = a})
+
+-- | Description of the organization.
+uoDescription :: Lens' UserOrganization (Maybe Text)
+uoDescription
+  = lens _uoDescription
+      (\ s a -> s{_uoDescription = a})
+
+instance FromJSON UserOrganization where
+        parseJSON
+          = withObject "UserOrganization"
+              (\ o ->
+                 UserOrganization <$>
+                   (o .:? "department") <*> (o .:? "location") <*>
+                     (o .:? "costCenter")
+                     <*> (o .:? "domain")
+                     <*> (o .:? "symbol")
+                     <*> (o .:? "primary")
+                     <*> (o .:? "name")
+                     <*> (o .:? "title")
+                     <*> (o .:? "type")
+                     <*> (o .:? "customType")
+                     <*> (o .:? "description"))
+
+instance ToJSON UserOrganization where
+        toJSON UserOrganization{..}
+          = object
+              (catMaybes
+                 [("department" .=) <$> _uoDePartment,
+                  ("location" .=) <$> _uoLocation,
+                  ("costCenter" .=) <$> _uoCostCenter,
+                  ("domain" .=) <$> _uoDomain,
+                  ("symbol" .=) <$> _uoSymbol,
+                  ("primary" .=) <$> _uoPrimary,
+                  ("name" .=) <$> _uoName, ("title" .=) <$> _uoTitle,
+                  ("type" .=) <$> _uoType,
+                  ("customType" .=) <$> _uoCustomType,
+                  ("description" .=) <$> _uoDescription])
+
+-- | JSON template for a website entry.
+--
+-- /See:/ 'userWebsite' smart constructor.
+data UserWebsite = UserWebsite
+    { _uwValue      :: !(Maybe Text)
+    , _uwPrimary    :: !(Maybe Bool)
+    , _uwType       :: !(Maybe Text)
+    , _uwCustomType :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'UserWebsite' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'uwValue'
+--
+-- * 'uwPrimary'
+--
+-- * 'uwType'
+--
+-- * 'uwCustomType'
+userWebsite
+    :: UserWebsite
+userWebsite =
+    UserWebsite
+    { _uwValue = Nothing
+    , _uwPrimary = Nothing
+    , _uwType = Nothing
+    , _uwCustomType = Nothing
+    }
+
+-- | Website.
+uwValue :: Lens' UserWebsite (Maybe Text)
+uwValue = lens _uwValue (\ s a -> s{_uwValue = a})
+
+-- | If this is user\'s primary website or not.
+uwPrimary :: Lens' UserWebsite (Maybe Bool)
+uwPrimary
+  = lens _uwPrimary (\ s a -> s{_uwPrimary = a})
+
+-- | Each entry can have a type which indicates standard types of that entry.
+-- For example website could be of home, work, blog etc. In addition to the
+-- standard type, an entry can have a custom type and can give it any name.
+-- Such types should have the CUSTOM value as type and also have a
+-- customType value.
+uwType :: Lens' UserWebsite (Maybe Text)
+uwType = lens _uwType (\ s a -> s{_uwType = a})
+
+-- | Custom Type.
+uwCustomType :: Lens' UserWebsite (Maybe Text)
+uwCustomType
+  = lens _uwCustomType (\ s a -> s{_uwCustomType = a})
+
+instance FromJSON UserWebsite where
+        parseJSON
+          = withObject "UserWebsite"
+              (\ o ->
+                 UserWebsite <$>
+                   (o .:? "value") <*> (o .:? "primary") <*>
+                     (o .:? "type")
+                     <*> (o .:? "customType"))
+
+instance ToJSON UserWebsite where
+        toJSON UserWebsite{..}
+          = object
+              (catMaybes
+                 [("value" .=) <$> _uwValue,
+                  ("primary" .=) <$> _uwPrimary,
+                  ("type" .=) <$> _uwType,
+                  ("customType" .=) <$> _uwCustomType])
+
+--
+-- /See:/ 'chromeOSDeviceActiveTimeRangesItem' smart constructor.
+data ChromeOSDeviceActiveTimeRangesItem = ChromeOSDeviceActiveTimeRangesItem
+    { _codatriDate       :: !(Maybe Date')
+    , _codatriActiveTime :: !(Maybe (Textual Int32))
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ChromeOSDeviceActiveTimeRangesItem' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'codatriDate'
+--
+-- * 'codatriActiveTime'
+chromeOSDeviceActiveTimeRangesItem
+    :: ChromeOSDeviceActiveTimeRangesItem
+chromeOSDeviceActiveTimeRangesItem =
+    ChromeOSDeviceActiveTimeRangesItem
+    { _codatriDate = Nothing
+    , _codatriActiveTime = Nothing
+    }
+
+-- | Date of usage
+codatriDate :: Lens' ChromeOSDeviceActiveTimeRangesItem (Maybe Day)
+codatriDate
+  = lens _codatriDate (\ s a -> s{_codatriDate = a}) .
+      mapping _Date
+
+-- | Duration in milliseconds
+codatriActiveTime :: Lens' ChromeOSDeviceActiveTimeRangesItem (Maybe Int32)
+codatriActiveTime
+  = lens _codatriActiveTime
+      (\ s a -> s{_codatriActiveTime = a})
+      . mapping _Coerce
+
+instance FromJSON ChromeOSDeviceActiveTimeRangesItem
+         where
+        parseJSON
+          = withObject "ChromeOSDeviceActiveTimeRangesItem"
+              (\ o ->
+                 ChromeOSDeviceActiveTimeRangesItem <$>
+                   (o .:? "date") <*> (o .:? "activeTime"))
+
+instance ToJSON ChromeOSDeviceActiveTimeRangesItem
+         where
+        toJSON ChromeOSDeviceActiveTimeRangesItem{..}
+          = object
+              (catMaybes
+                 [("date" .=) <$> _codatriDate,
+                  ("activeTime" .=) <$> _codatriActiveTime])
+
+-- | JSON template for an email.
+--
+-- /See:/ 'userEmail' smart constructor.
+data UserEmail = UserEmail
+    { _ueAddress    :: !(Maybe Text)
+    , _uePrimary    :: !(Maybe Bool)
+    , _ueType       :: !(Maybe Text)
+    , _ueCustomType :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'UserEmail' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ueAddress'
+--
+-- * 'uePrimary'
+--
+-- * 'ueType'
+--
+-- * 'ueCustomType'
+userEmail
+    :: UserEmail
+userEmail =
+    UserEmail
+    { _ueAddress = Nothing
+    , _uePrimary = Nothing
+    , _ueType = Nothing
+    , _ueCustomType = Nothing
+    }
+
+-- | Email id of the user.
+ueAddress :: Lens' UserEmail (Maybe Text)
+ueAddress
+  = lens _ueAddress (\ s a -> s{_ueAddress = a})
+
+-- | If this is user\'s primary email. Only one entry could be marked as
+-- primary.
+uePrimary :: Lens' UserEmail (Maybe Bool)
+uePrimary
+  = lens _uePrimary (\ s a -> s{_uePrimary = a})
+
+-- | Each entry can have a type which indicates standard types of that entry.
+-- For example email could be of home, work etc. In addition to the
+-- standard type, an entry can have a custom type and can take any value
+-- Such types should have the CUSTOM value as type and also have a
+-- customType value.
+ueType :: Lens' UserEmail (Maybe Text)
+ueType = lens _ueType (\ s a -> s{_ueType = a})
+
+-- | Custom Type.
+ueCustomType :: Lens' UserEmail (Maybe Text)
+ueCustomType
+  = lens _ueCustomType (\ s a -> s{_ueCustomType = a})
+
+instance FromJSON UserEmail where
+        parseJSON
+          = withObject "UserEmail"
+              (\ o ->
+                 UserEmail <$>
+                   (o .:? "address") <*> (o .:? "primary") <*>
+                     (o .:? "type")
+                     <*> (o .:? "customType"))
+
+instance ToJSON UserEmail where
+        toJSON UserEmail{..}
+          = object
+              (catMaybes
+                 [("address" .=) <$> _ueAddress,
+                  ("primary" .=) <$> _uePrimary,
+                  ("type" .=) <$> _ueType,
+                  ("customType" .=) <$> _ueCustomType])
+
+-- | JSON template for a phone entry.
+--
+-- /See:/ 'userPhone' smart constructor.
+data UserPhone = UserPhone
+    { _upValue      :: !(Maybe Text)
+    , _upPrimary    :: !(Maybe Bool)
+    , _upType       :: !(Maybe Text)
+    , _upCustomType :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'UserPhone' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'upValue'
+--
+-- * 'upPrimary'
+--
+-- * 'upType'
+--
+-- * 'upCustomType'
+userPhone
+    :: UserPhone
+userPhone =
+    UserPhone
+    { _upValue = Nothing
+    , _upPrimary = Nothing
+    , _upType = Nothing
+    , _upCustomType = Nothing
+    }
+
+-- | Phone number.
+upValue :: Lens' UserPhone (Maybe Text)
+upValue = lens _upValue (\ s a -> s{_upValue = a})
+
+-- | If this is user\'s primary phone or not.
+upPrimary :: Lens' UserPhone (Maybe Bool)
+upPrimary
+  = lens _upPrimary (\ s a -> s{_upPrimary = a})
+
+-- | Each entry can have a type which indicates standard types of that entry.
+-- For example phone could be of home_fax, work, mobile etc. In addition to
+-- the standard type, an entry can have a custom type and can give it any
+-- name. Such types should have the CUSTOM value as type and also have a
+-- customType value.
+upType :: Lens' UserPhone (Maybe Text)
+upType = lens _upType (\ s a -> s{_upType = a})
+
+-- | Custom Type.
+upCustomType :: Lens' UserPhone (Maybe Text)
+upCustomType
+  = lens _upCustomType (\ s a -> s{_upCustomType = a})
+
+instance FromJSON UserPhone where
+        parseJSON
+          = withObject "UserPhone"
+              (\ o ->
+                 UserPhone <$>
+                   (o .:? "value") <*> (o .:? "primary") <*>
+                     (o .:? "type")
+                     <*> (o .:? "customType"))
+
+instance ToJSON UserPhone where
+        toJSON UserPhone{..}
+          = object
+              (catMaybes
+                 [("value" .=) <$> _upValue,
+                  ("primary" .=) <$> _upPrimary,
+                  ("type" .=) <$> _upType,
+                  ("customType" .=) <$> _upCustomType])
+
+-- | JSON template for Photo object in Directory API.
+--
+-- /See:/ 'userPhoto' smart constructor.
+data UserPhoto = UserPhoto
+    { _upPhotoData    :: !(Maybe (Textual Word8))
+    , _upEtag         :: !(Maybe Text)
+    , _upHeight       :: !(Maybe (Textual Int32))
+    , _upKind         :: !Text
+    , _upWidth        :: !(Maybe (Textual Int32))
+    , _upMimeType     :: !(Maybe Text)
+    , _upId           :: !(Maybe Text)
+    , _upPrimaryEmail :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'UserPhoto' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'upPhotoData'
+--
+-- * 'upEtag'
+--
+-- * 'upHeight'
+--
+-- * 'upKind'
+--
+-- * 'upWidth'
+--
+-- * 'upMimeType'
+--
+-- * 'upId'
+--
+-- * 'upPrimaryEmail'
+userPhoto
+    :: UserPhoto
+userPhoto =
+    UserPhoto
+    { _upPhotoData = Nothing
+    , _upEtag = Nothing
+    , _upHeight = Nothing
+    , _upKind = "admin#directory#user#photo"
+    , _upWidth = Nothing
+    , _upMimeType = Nothing
+    , _upId = Nothing
+    , _upPrimaryEmail = Nothing
+    }
+
+-- | Base64 encoded photo data
+upPhotoData :: Lens' UserPhoto (Maybe Word8)
+upPhotoData
+  = lens _upPhotoData (\ s a -> s{_upPhotoData = a}) .
+      mapping _Coerce
+
+-- | ETag of the resource.
+upEtag :: Lens' UserPhoto (Maybe Text)
+upEtag = lens _upEtag (\ s a -> s{_upEtag = a})
+
+-- | Height in pixels of the photo
+upHeight :: Lens' UserPhoto (Maybe Int32)
+upHeight
+  = lens _upHeight (\ s a -> s{_upHeight = a}) .
+      mapping _Coerce
+
+-- | Kind of resource this is.
+upKind :: Lens' UserPhoto Text
+upKind = lens _upKind (\ s a -> s{_upKind = a})
+
+-- | Width in pixels of the photo
+upWidth :: Lens' UserPhoto (Maybe Int32)
+upWidth
+  = lens _upWidth (\ s a -> s{_upWidth = a}) .
+      mapping _Coerce
+
+-- | Mime Type of the photo
+upMimeType :: Lens' UserPhoto (Maybe Text)
+upMimeType
+  = lens _upMimeType (\ s a -> s{_upMimeType = a})
+
+-- | Unique identifier of User (Read-only)
+upId :: Lens' UserPhoto (Maybe Text)
+upId = lens _upId (\ s a -> s{_upId = a})
+
+-- | Primary email of User (Read-only)
+upPrimaryEmail :: Lens' UserPhoto (Maybe Text)
+upPrimaryEmail
+  = lens _upPrimaryEmail
+      (\ s a -> s{_upPrimaryEmail = a})
+
+instance FromJSON UserPhoto where
+        parseJSON
+          = withObject "UserPhoto"
+              (\ o ->
+                 UserPhoto <$>
+                   (o .:? "photoData") <*> (o .:? "etag") <*>
+                     (o .:? "height")
+                     <*> (o .:? "kind" .!= "admin#directory#user#photo")
+                     <*> (o .:? "width")
+                     <*> (o .:? "mimeType")
+                     <*> (o .:? "id")
+                     <*> (o .:? "primaryEmail"))
+
+instance ToJSON UserPhoto where
+        toJSON UserPhoto{..}
+          = object
+              (catMaybes
+                 [("photoData" .=) <$> _upPhotoData,
+                  ("etag" .=) <$> _upEtag, ("height" .=) <$> _upHeight,
+                  Just ("kind" .= _upKind), ("width" .=) <$> _upWidth,
+                  ("mimeType" .=) <$> _upMimeType, ("id" .=) <$> _upId,
+                  ("primaryEmail" .=) <$> _upPrimaryEmail])
+
+-- | JSON template for Mobile Device resource in Directory API.
+--
+-- /See:/ 'mobileDevice' smart constructor.
+data MobileDevice = MobileDevice
+    { _mobEmail                          :: !(Maybe [Text])
+    , _mobStatus                         :: !(Maybe Text)
+    , _mobEtag                           :: !(Maybe Text)
+    , _mobResourceId                     :: !(Maybe Text)
+    , _mobBuildNumber                    :: !(Maybe Text)
+    , _mobManagedAccountIsOnOwnerProFile :: !(Maybe Bool)
+    , _mobLastSync                       :: !(Maybe DateTime')
+    , _mobOtherAccountsInfo              :: !(Maybe [Text])
+    , _mobKind                           :: !Text
+    , _mobAdbStatus                      :: !(Maybe Bool)
+    , _mobNetworkOperator                :: !(Maybe Text)
+    , _mobKernelVersion                  :: !(Maybe Text)
+    , _mobOS                             :: !(Maybe Text)
+    , _mobName                           :: !(Maybe [Text])
+    , _mobModel                          :: !(Maybe Text)
+    , _mobDeveloperOptionsStatus         :: !(Maybe Bool)
+    , _mobUnknownSourcesStatus           :: !(Maybe Bool)
+    , _mobMeid                           :: !(Maybe Text)
+    , _mobDeviceId                       :: !(Maybe Text)
+    , _mobFirstSync                      :: !(Maybe DateTime')
+    , _mobUserAgent                      :: !(Maybe Text)
+    , _mobImei                           :: !(Maybe Text)
+    , _mobType                           :: !(Maybe Text)
+    , _mobWifiMACAddress                 :: !(Maybe Text)
+    , _mobSerialNumber                   :: !(Maybe Text)
+    , _mobHardwareId                     :: !(Maybe Text)
+    , _mobBasebandVersion                :: !(Maybe Text)
+    , _mobSupportsWorkProFile            :: !(Maybe Bool)
+    , _mobDeviceCompromisedStatus        :: !(Maybe Text)
+    , _mobApplications                   :: !(Maybe [MobileDeviceApplicationsItem])
+    , _mobDefaultLanguage                :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'MobileDevice' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'mobEmail'
+--
+-- * 'mobStatus'
+--
+-- * 'mobEtag'
+--
+-- * 'mobResourceId'
+--
+-- * 'mobBuildNumber'
+--
+-- * 'mobManagedAccountIsOnOwnerProFile'
+--
+-- * 'mobLastSync'
+--
+-- * 'mobOtherAccountsInfo'
+--
+-- * 'mobKind'
+--
+-- * 'mobAdbStatus'
+--
+-- * 'mobNetworkOperator'
+--
+-- * 'mobKernelVersion'
+--
+-- * 'mobOS'
+--
+-- * 'mobName'
+--
+-- * 'mobModel'
+--
+-- * 'mobDeveloperOptionsStatus'
+--
+-- * 'mobUnknownSourcesStatus'
+--
+-- * 'mobMeid'
+--
+-- * 'mobDeviceId'
+--
+-- * 'mobFirstSync'
+--
+-- * 'mobUserAgent'
+--
+-- * 'mobImei'
+--
+-- * 'mobType'
+--
+-- * 'mobWifiMACAddress'
+--
+-- * 'mobSerialNumber'
+--
+-- * 'mobHardwareId'
+--
+-- * 'mobBasebandVersion'
+--
+-- * 'mobSupportsWorkProFile'
+--
+-- * 'mobDeviceCompromisedStatus'
+--
+-- * 'mobApplications'
+--
+-- * 'mobDefaultLanguage'
+mobileDevice
+    :: MobileDevice
+mobileDevice =
+    MobileDevice
+    { _mobEmail = Nothing
+    , _mobStatus = Nothing
+    , _mobEtag = Nothing
+    , _mobResourceId = Nothing
+    , _mobBuildNumber = Nothing
+    , _mobManagedAccountIsOnOwnerProFile = Nothing
+    , _mobLastSync = Nothing
+    , _mobOtherAccountsInfo = Nothing
+    , _mobKind = "admin#directory#mobiledevice"
+    , _mobAdbStatus = Nothing
+    , _mobNetworkOperator = Nothing
+    , _mobKernelVersion = Nothing
+    , _mobOS = Nothing
+    , _mobName = Nothing
+    , _mobModel = Nothing
+    , _mobDeveloperOptionsStatus = Nothing
+    , _mobUnknownSourcesStatus = Nothing
+    , _mobMeid = Nothing
+    , _mobDeviceId = Nothing
+    , _mobFirstSync = Nothing
+    , _mobUserAgent = Nothing
+    , _mobImei = Nothing
+    , _mobType = Nothing
+    , _mobWifiMACAddress = Nothing
+    , _mobSerialNumber = Nothing
+    , _mobHardwareId = Nothing
+    , _mobBasebandVersion = Nothing
+    , _mobSupportsWorkProFile = Nothing
+    , _mobDeviceCompromisedStatus = Nothing
+    , _mobApplications = Nothing
+    , _mobDefaultLanguage = Nothing
+    }
+
+-- | List of owner user\'s email addresses (Read-only)
+mobEmail :: Lens' MobileDevice [Text]
+mobEmail
+  = lens _mobEmail (\ s a -> s{_mobEmail = a}) .
+      _Default
+      . _Coerce
+
+-- | Status of the device (Read-only)
+mobStatus :: Lens' MobileDevice (Maybe Text)
+mobStatus
+  = lens _mobStatus (\ s a -> s{_mobStatus = a})
+
+-- | ETag of the resource.
+mobEtag :: Lens' MobileDevice (Maybe Text)
+mobEtag = lens _mobEtag (\ s a -> s{_mobEtag = a})
+
+-- | Unique identifier of Mobile Device (Read-only)
+mobResourceId :: Lens' MobileDevice (Maybe Text)
+mobResourceId
+  = lens _mobResourceId
+      (\ s a -> s{_mobResourceId = a})
+
+-- | Mobile Device Build number (Read-only)
+mobBuildNumber :: Lens' MobileDevice (Maybe Text)
+mobBuildNumber
+  = lens _mobBuildNumber
+      (\ s a -> s{_mobBuildNumber = a})
+
+-- | Boolean indicating if this account is on owner\/primary profile or not
+-- (Read-only)
+mobManagedAccountIsOnOwnerProFile :: Lens' MobileDevice (Maybe Bool)
+mobManagedAccountIsOnOwnerProFile
+  = lens _mobManagedAccountIsOnOwnerProFile
+      (\ s a -> s{_mobManagedAccountIsOnOwnerProFile = a})
+
+-- | Date and time the device was last synchronized with the policy settings
+-- in the Google Apps administrator control panel (Read-only)
+mobLastSync :: Lens' MobileDevice (Maybe UTCTime)
+mobLastSync
+  = lens _mobLastSync (\ s a -> s{_mobLastSync = a}) .
+      mapping _DateTime
+
+-- | List of accounts added on device (Read-only)
+mobOtherAccountsInfo :: Lens' MobileDevice [Text]
+mobOtherAccountsInfo
+  = lens _mobOtherAccountsInfo
+      (\ s a -> s{_mobOtherAccountsInfo = a})
+      . _Default
+      . _Coerce
+
+-- | Kind of resource this is.
+mobKind :: Lens' MobileDevice Text
+mobKind = lens _mobKind (\ s a -> s{_mobKind = a})
+
+-- | Adb (USB debugging) enabled or disabled on device (Read-only)
+mobAdbStatus :: Lens' MobileDevice (Maybe Bool)
+mobAdbStatus
+  = lens _mobAdbStatus (\ s a -> s{_mobAdbStatus = a})
+
+-- | Mobile Device mobile or network operator (if available) (Read-only)
+mobNetworkOperator :: Lens' MobileDevice (Maybe Text)
+mobNetworkOperator
+  = lens _mobNetworkOperator
+      (\ s a -> s{_mobNetworkOperator = a})
+
+-- | Mobile Device Kernel version (Read-only)
+mobKernelVersion :: Lens' MobileDevice (Maybe Text)
+mobKernelVersion
+  = lens _mobKernelVersion
+      (\ s a -> s{_mobKernelVersion = a})
+
+-- | Name of the mobile operating system
+mobOS :: Lens' MobileDevice (Maybe Text)
+mobOS = lens _mobOS (\ s a -> s{_mobOS = a})
+
+-- | List of owner user\'s names (Read-only)
+mobName :: Lens' MobileDevice [Text]
+mobName
+  = lens _mobName (\ s a -> s{_mobName = a}) . _Default
+      . _Coerce
+
+-- | Name of the model of the device
+mobModel :: Lens' MobileDevice (Maybe Text)
+mobModel = lens _mobModel (\ s a -> s{_mobModel = a})
+
+-- | Developer options enabled or disabled on device (Read-only)
+mobDeveloperOptionsStatus :: Lens' MobileDevice (Maybe Bool)
+mobDeveloperOptionsStatus
+  = lens _mobDeveloperOptionsStatus
+      (\ s a -> s{_mobDeveloperOptionsStatus = a})
+
+-- | Unknown sources enabled or disabled on device (Read-only)
+mobUnknownSourcesStatus :: Lens' MobileDevice (Maybe Bool)
+mobUnknownSourcesStatus
+  = lens _mobUnknownSourcesStatus
+      (\ s a -> s{_mobUnknownSourcesStatus = a})
+
+-- | Mobile Device MEID number (Read-only)
+mobMeid :: Lens' MobileDevice (Maybe Text)
+mobMeid = lens _mobMeid (\ s a -> s{_mobMeid = a})
+
+-- | Mobile Device serial number (Read-only)
+mobDeviceId :: Lens' MobileDevice (Maybe Text)
+mobDeviceId
+  = lens _mobDeviceId (\ s a -> s{_mobDeviceId = a})
+
+-- | Date and time the device was first synchronized with the policy settings
+-- in the Google Apps administrator control panel (Read-only)
+mobFirstSync :: Lens' MobileDevice (Maybe UTCTime)
+mobFirstSync
+  = lens _mobFirstSync (\ s a -> s{_mobFirstSync = a})
+      . mapping _DateTime
+
+-- | Mobile Device user agent
+mobUserAgent :: Lens' MobileDevice (Maybe Text)
+mobUserAgent
+  = lens _mobUserAgent (\ s a -> s{_mobUserAgent = a})
+
+-- | Mobile Device IMEI number (Read-only)
+mobImei :: Lens' MobileDevice (Maybe Text)
+mobImei = lens _mobImei (\ s a -> s{_mobImei = a})
+
+-- | The type of device (Read-only)
+mobType :: Lens' MobileDevice (Maybe Text)
+mobType = lens _mobType (\ s a -> s{_mobType = a})
+
+-- | Mobile Device WiFi MAC address (Read-only)
+mobWifiMACAddress :: Lens' MobileDevice (Maybe Text)
+mobWifiMACAddress
+  = lens _mobWifiMACAddress
+      (\ s a -> s{_mobWifiMACAddress = a})
+
+-- | Mobile Device SSN or Serial Number (Read-only)
+mobSerialNumber :: Lens' MobileDevice (Maybe Text)
+mobSerialNumber
+  = lens _mobSerialNumber
+      (\ s a -> s{_mobSerialNumber = a})
+
+-- | Mobile Device Hardware Id (Read-only)
+mobHardwareId :: Lens' MobileDevice (Maybe Text)
+mobHardwareId
+  = lens _mobHardwareId
+      (\ s a -> s{_mobHardwareId = a})
+
+-- | Mobile Device Baseband version (Read-only)
+mobBasebandVersion :: Lens' MobileDevice (Maybe Text)
+mobBasebandVersion
+  = lens _mobBasebandVersion
+      (\ s a -> s{_mobBasebandVersion = a})
+
+-- | Work profile supported on device (Read-only)
+mobSupportsWorkProFile :: Lens' MobileDevice (Maybe Bool)
+mobSupportsWorkProFile
+  = lens _mobSupportsWorkProFile
+      (\ s a -> s{_mobSupportsWorkProFile = a})
+
+-- | Mobile Device compromised status (Read-only)
+mobDeviceCompromisedStatus :: Lens' MobileDevice (Maybe Text)
+mobDeviceCompromisedStatus
+  = lens _mobDeviceCompromisedStatus
+      (\ s a -> s{_mobDeviceCompromisedStatus = a})
+
+-- | List of applications installed on Mobile Device
+mobApplications :: Lens' MobileDevice [MobileDeviceApplicationsItem]
+mobApplications
+  = lens _mobApplications
+      (\ s a -> s{_mobApplications = a})
+      . _Default
+      . _Coerce
+
+-- | The default locale used on the Mobile Device (Read-only)
+mobDefaultLanguage :: Lens' MobileDevice (Maybe Text)
+mobDefaultLanguage
+  = lens _mobDefaultLanguage
+      (\ s a -> s{_mobDefaultLanguage = a})
+
+instance FromJSON MobileDevice where
+        parseJSON
+          = withObject "MobileDevice"
+              (\ o ->
+                 MobileDevice <$>
+                   (o .:? "email" .!= mempty) <*> (o .:? "status") <*>
+                     (o .:? "etag")
+                     <*> (o .:? "resourceId")
+                     <*> (o .:? "buildNumber")
+                     <*> (o .:? "managedAccountIsOnOwnerProfile")
+                     <*> (o .:? "lastSync")
+                     <*> (o .:? "otherAccountsInfo" .!= mempty)
+                     <*> (o .:? "kind" .!= "admin#directory#mobiledevice")
+                     <*> (o .:? "adbStatus")
+                     <*> (o .:? "networkOperator")
+                     <*> (o .:? "kernelVersion")
+                     <*> (o .:? "os")
+                     <*> (o .:? "name" .!= mempty)
+                     <*> (o .:? "model")
+                     <*> (o .:? "developerOptionsStatus")
+                     <*> (o .:? "unknownSourcesStatus")
+                     <*> (o .:? "meid")
+                     <*> (o .:? "deviceId")
+                     <*> (o .:? "firstSync")
+                     <*> (o .:? "userAgent")
+                     <*> (o .:? "imei")
+                     <*> (o .:? "type")
+                     <*> (o .:? "wifiMacAddress")
+                     <*> (o .:? "serialNumber")
+                     <*> (o .:? "hardwareId")
+                     <*> (o .:? "basebandVersion")
+                     <*> (o .:? "supportsWorkProfile")
+                     <*> (o .:? "deviceCompromisedStatus")
+                     <*> (o .:? "applications" .!= mempty)
+                     <*> (o .:? "defaultLanguage"))
+
+instance ToJSON MobileDevice where
+        toJSON MobileDevice{..}
+          = object
+              (catMaybes
+                 [("email" .=) <$> _mobEmail,
+                  ("status" .=) <$> _mobStatus,
+                  ("etag" .=) <$> _mobEtag,
+                  ("resourceId" .=) <$> _mobResourceId,
+                  ("buildNumber" .=) <$> _mobBuildNumber,
+                  ("managedAccountIsOnOwnerProfile" .=) <$>
+                    _mobManagedAccountIsOnOwnerProFile,
+                  ("lastSync" .=) <$> _mobLastSync,
+                  ("otherAccountsInfo" .=) <$> _mobOtherAccountsInfo,
+                  Just ("kind" .= _mobKind),
+                  ("adbStatus" .=) <$> _mobAdbStatus,
+                  ("networkOperator" .=) <$> _mobNetworkOperator,
+                  ("kernelVersion" .=) <$> _mobKernelVersion,
+                  ("os" .=) <$> _mobOS, ("name" .=) <$> _mobName,
+                  ("model" .=) <$> _mobModel,
+                  ("developerOptionsStatus" .=) <$>
+                    _mobDeveloperOptionsStatus,
+                  ("unknownSourcesStatus" .=) <$>
+                    _mobUnknownSourcesStatus,
+                  ("meid" .=) <$> _mobMeid,
+                  ("deviceId" .=) <$> _mobDeviceId,
+                  ("firstSync" .=) <$> _mobFirstSync,
+                  ("userAgent" .=) <$> _mobUserAgent,
+                  ("imei" .=) <$> _mobImei, ("type" .=) <$> _mobType,
+                  ("wifiMacAddress" .=) <$> _mobWifiMACAddress,
+                  ("serialNumber" .=) <$> _mobSerialNumber,
+                  ("hardwareId" .=) <$> _mobHardwareId,
+                  ("basebandVersion" .=) <$> _mobBasebandVersion,
+                  ("supportsWorkProfile" .=) <$>
+                    _mobSupportsWorkProFile,
+                  ("deviceCompromisedStatus" .=) <$>
+                    _mobDeviceCompromisedStatus,
+                  ("applications" .=) <$> _mobApplications,
+                  ("defaultLanguage" .=) <$> _mobDefaultLanguage])
+
+-- | JSON template for Member resource in Directory API.
+--
+-- /See:/ 'member' smart constructor.
+data Member = Member
+    { _memEmail :: !(Maybe Text)
+    , _memEtag  :: !(Maybe Text)
+    , _memKind  :: !Text
+    , _memRole  :: !(Maybe Text)
+    , _memId    :: !(Maybe Text)
+    , _memType  :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Member' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'memEmail'
+--
+-- * 'memEtag'
+--
+-- * 'memKind'
+--
+-- * 'memRole'
+--
+-- * 'memId'
+--
+-- * 'memType'
+member
+    :: Member
+member =
+    Member
+    { _memEmail = Nothing
+    , _memEtag = Nothing
+    , _memKind = "admin#directory#member"
+    , _memRole = Nothing
+    , _memId = Nothing
+    , _memType = Nothing
+    }
+
+-- | Email of member (Read-only)
+memEmail :: Lens' Member (Maybe Text)
+memEmail = lens _memEmail (\ s a -> s{_memEmail = a})
+
+-- | ETag of the resource.
+memEtag :: Lens' Member (Maybe Text)
+memEtag = lens _memEtag (\ s a -> s{_memEtag = a})
+
+-- | Kind of resource this is.
+memKind :: Lens' Member Text
+memKind = lens _memKind (\ s a -> s{_memKind = a})
+
+-- | Role of member
+memRole :: Lens' Member (Maybe Text)
+memRole = lens _memRole (\ s a -> s{_memRole = a})
+
+-- | Unique identifier of customer member (Read-only) Unique identifier of
+-- group (Read-only) Unique identifier of member (Read-only)
+memId :: Lens' Member (Maybe Text)
+memId = lens _memId (\ s a -> s{_memId = a})
+
+-- | Type of member (Immutable)
+memType :: Lens' Member (Maybe Text)
+memType = lens _memType (\ s a -> s{_memType = a})
+
+instance FromJSON Member where
+        parseJSON
+          = withObject "Member"
+              (\ o ->
+                 Member <$>
+                   (o .:? "email") <*> (o .:? "etag") <*>
+                     (o .:? "kind" .!= "admin#directory#member")
+                     <*> (o .:? "role")
+                     <*> (o .:? "id")
+                     <*> (o .:? "type"))
+
+instance ToJSON Member where
+        toJSON Member{..}
+          = object
+              (catMaybes
+                 [("email" .=) <$> _memEmail,
+                  ("etag" .=) <$> _memEtag, Just ("kind" .= _memKind),
+                  ("role" .=) <$> _memRole, ("id" .=) <$> _memId,
+                  ("type" .=) <$> _memType])
+
+-- | JSON template for a set of custom properties (i.e. all fields in a
+-- particular schema)
+--
+-- /See:/ 'userCustomProperties' smart constructor.
+newtype UserCustomProperties = UserCustomProperties
+    { _ucpAddtional :: HashMap Text JSONValue
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'UserCustomProperties' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ucpAddtional'
+userCustomProperties
+    :: HashMap Text JSONValue -- ^ 'ucpAddtional'
+    -> UserCustomProperties
+userCustomProperties pUcpAddtional_ =
+    UserCustomProperties
+    { _ucpAddtional = _Coerce # pUcpAddtional_
+    }
+
+ucpAddtional :: Lens' UserCustomProperties (HashMap Text JSONValue)
+ucpAddtional
+  = lens _ucpAddtional (\ s a -> s{_ucpAddtional = a})
+      . _Coerce
+
+instance FromJSON UserCustomProperties where
+        parseJSON
+          = withObject "UserCustomProperties"
+              (\ o -> UserCustomProperties <$> (parseJSONObject o))
+
+instance ToJSON UserCustomProperties where
+        toJSON = toJSON . _ucpAddtional
+
+-- | JSON template for Domain object in Directory API.
+--
+-- /See:/ 'domains' smart constructor.
+data Domains = Domains
+    { _domCreationTime  :: !(Maybe (Textual Int64))
+    , _domEtag          :: !(Maybe Text)
+    , _domKind          :: !Text
+    , _domDomainAliases :: !(Maybe [DomainAlias])
+    , _domVerified      :: !(Maybe Bool)
+    , _domDomainName    :: !(Maybe Text)
+    , _domIsPrimary     :: !(Maybe Bool)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Domains' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'domCreationTime'
+--
+-- * 'domEtag'
+--
+-- * 'domKind'
+--
+-- * 'domDomainAliases'
+--
+-- * 'domVerified'
+--
+-- * 'domDomainName'
+--
+-- * 'domIsPrimary'
+domains
+    :: Domains
+domains =
+    Domains
+    { _domCreationTime = Nothing
+    , _domEtag = Nothing
+    , _domKind = "admin#directory#domain"
+    , _domDomainAliases = Nothing
+    , _domVerified = Nothing
+    , _domDomainName = Nothing
+    , _domIsPrimary = Nothing
+    }
+
+-- | Creation time of the domain. (Read-only).
+domCreationTime :: Lens' Domains (Maybe Int64)
+domCreationTime
+  = lens _domCreationTime
+      (\ s a -> s{_domCreationTime = a})
+      . mapping _Coerce
+
+-- | ETag of the resource.
+domEtag :: Lens' Domains (Maybe Text)
+domEtag = lens _domEtag (\ s a -> s{_domEtag = a})
+
+-- | Kind of resource this is.
+domKind :: Lens' Domains Text
+domKind = lens _domKind (\ s a -> s{_domKind = a})
+
+-- | List of domain alias objects. (Read-only)
+domDomainAliases :: Lens' Domains [DomainAlias]
+domDomainAliases
+  = lens _domDomainAliases
+      (\ s a -> s{_domDomainAliases = a})
+      . _Default
+      . _Coerce
+
+-- | Indicates the verification state of a domain. (Read-only).
+domVerified :: Lens' Domains (Maybe Bool)
+domVerified
+  = lens _domVerified (\ s a -> s{_domVerified = a})
+
+-- | The domain name of the customer.
+domDomainName :: Lens' Domains (Maybe Text)
+domDomainName
+  = lens _domDomainName
+      (\ s a -> s{_domDomainName = a})
+
+-- | Indicates if the domain is a primary domain (Read-only).
+domIsPrimary :: Lens' Domains (Maybe Bool)
+domIsPrimary
+  = lens _domIsPrimary (\ s a -> s{_domIsPrimary = a})
+
+instance FromJSON Domains where
+        parseJSON
+          = withObject "Domains"
+              (\ o ->
+                 Domains <$>
+                   (o .:? "creationTime") <*> (o .:? "etag") <*>
+                     (o .:? "kind" .!= "admin#directory#domain")
+                     <*> (o .:? "domainAliases" .!= mempty)
+                     <*> (o .:? "verified")
+                     <*> (o .:? "domainName")
+                     <*> (o .:? "isPrimary"))
+
+instance ToJSON Domains where
+        toJSON Domains{..}
+          = object
+              (catMaybes
+                 [("creationTime" .=) <$> _domCreationTime,
+                  ("etag" .=) <$> _domEtag, Just ("kind" .= _domKind),
+                  ("domainAliases" .=) <$> _domDomainAliases,
+                  ("verified" .=) <$> _domVerified,
+                  ("domainName" .=) <$> _domDomainName,
+                  ("isPrimary" .=) <$> _domIsPrimary])
+
+-- | Template for notifications list response.
+--
+-- /See:/ 'notifications' smart constructor.
+data Notifications = Notifications
+    { _notEtag                     :: !(Maybe Text)
+    , _notNextPageToken            :: !(Maybe Text)
+    , _notKind                     :: !Text
+    , _notItems                    :: !(Maybe [Notification])
+    , _notUnreadNotificationsCount :: !(Maybe (Textual Int32))
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Notifications' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'notEtag'
+--
+-- * 'notNextPageToken'
+--
+-- * 'notKind'
+--
+-- * 'notItems'
+--
+-- * 'notUnreadNotificationsCount'
+notifications
+    :: Notifications
+notifications =
+    Notifications
+    { _notEtag = Nothing
+    , _notNextPageToken = Nothing
+    , _notKind = "admin#directory#notifications"
+    , _notItems = Nothing
+    , _notUnreadNotificationsCount = Nothing
+    }
+
+-- | ETag of the resource.
+notEtag :: Lens' Notifications (Maybe Text)
+notEtag = lens _notEtag (\ s a -> s{_notEtag = a})
+
+-- | Token for fetching the next page of notifications.
+notNextPageToken :: Lens' Notifications (Maybe Text)
+notNextPageToken
+  = lens _notNextPageToken
+      (\ s a -> s{_notNextPageToken = a})
+
+-- | The type of the resource.
+notKind :: Lens' Notifications Text
+notKind = lens _notKind (\ s a -> s{_notKind = a})
+
+-- | List of notifications in this page.
+notItems :: Lens' Notifications [Notification]
+notItems
+  = lens _notItems (\ s a -> s{_notItems = a}) .
+      _Default
+      . _Coerce
+
+-- | Number of unread notification for the domain.
+notUnreadNotificationsCount :: Lens' Notifications (Maybe Int32)
+notUnreadNotificationsCount
+  = lens _notUnreadNotificationsCount
+      (\ s a -> s{_notUnreadNotificationsCount = a})
+      . mapping _Coerce
+
+instance FromJSON Notifications where
+        parseJSON
+          = withObject "Notifications"
+              (\ o ->
+                 Notifications <$>
+                   (o .:? "etag") <*> (o .:? "nextPageToken") <*>
+                     (o .:? "kind" .!= "admin#directory#notifications")
+                     <*> (o .:? "items" .!= mempty)
+                     <*> (o .:? "unreadNotificationsCount"))
+
+instance ToJSON Notifications where
+        toJSON Notifications{..}
+          = object
+              (catMaybes
+                 [("etag" .=) <$> _notEtag,
+                  ("nextPageToken" .=) <$> _notNextPageToken,
+                  Just ("kind" .= _notKind),
+                  ("items" .=) <$> _notItems,
+                  ("unreadNotificationsCount" .=) <$>
+                    _notUnreadNotificationsCount])
+
+-- | Indexing spec for a numeric field. By default, only exact match queries
+-- will be supported for numeric fields. Setting the numericIndexingSpec
+-- allows range queries to be supported.
+--
+-- /See:/ 'schemaFieldSpecNumericIndexingSpec' smart constructor.
+data SchemaFieldSpecNumericIndexingSpec = SchemaFieldSpecNumericIndexingSpec
+    { _sfsnisMaxValue :: !(Maybe (Textual Double))
+    , _sfsnisMinValue :: !(Maybe (Textual Double))
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'SchemaFieldSpecNumericIndexingSpec' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'sfsnisMaxValue'
+--
+-- * 'sfsnisMinValue'
+schemaFieldSpecNumericIndexingSpec
+    :: SchemaFieldSpecNumericIndexingSpec
+schemaFieldSpecNumericIndexingSpec =
+    SchemaFieldSpecNumericIndexingSpec
+    { _sfsnisMaxValue = Nothing
+    , _sfsnisMinValue = Nothing
+    }
+
+-- | Maximum value of this field. This is meant to be indicative rather than
+-- enforced. Values outside this range will still be indexed, but search
+-- may not be as performant.
+sfsnisMaxValue :: Lens' SchemaFieldSpecNumericIndexingSpec (Maybe Double)
+sfsnisMaxValue
+  = lens _sfsnisMaxValue
+      (\ s a -> s{_sfsnisMaxValue = a})
+      . mapping _Coerce
+
+-- | Minimum value of this field. This is meant to be indicative rather than
+-- enforced. Values outside this range will still be indexed, but search
+-- may not be as performant.
+sfsnisMinValue :: Lens' SchemaFieldSpecNumericIndexingSpec (Maybe Double)
+sfsnisMinValue
+  = lens _sfsnisMinValue
+      (\ s a -> s{_sfsnisMinValue = a})
+      . mapping _Coerce
+
+instance FromJSON SchemaFieldSpecNumericIndexingSpec
+         where
+        parseJSON
+          = withObject "SchemaFieldSpecNumericIndexingSpec"
+              (\ o ->
+                 SchemaFieldSpecNumericIndexingSpec <$>
+                   (o .:? "maxValue") <*> (o .:? "minValue"))
+
+instance ToJSON SchemaFieldSpecNumericIndexingSpec
+         where
+        toJSON SchemaFieldSpecNumericIndexingSpec{..}
+          = object
+              (catMaybes
+                 [("maxValue" .=) <$> _sfsnisMaxValue,
+                  ("minValue" .=) <$> _sfsnisMinValue])
+
+-- | JSON request template for firing commands on Mobile Device in Directory
+-- Devices API.
+--
+-- /See:/ 'mobileDeviceAction' smart constructor.
+newtype MobileDeviceAction = MobileDeviceAction
+    { _mdaAction :: Maybe Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'MobileDeviceAction' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'mdaAction'
+mobileDeviceAction
+    :: MobileDeviceAction
+mobileDeviceAction =
+    MobileDeviceAction
+    { _mdaAction = Nothing
+    }
+
+-- | Action to be taken on the Mobile Device
+mdaAction :: Lens' MobileDeviceAction (Maybe Text)
+mdaAction
+  = lens _mdaAction (\ s a -> s{_mdaAction = a})
+
+instance FromJSON MobileDeviceAction where
+        parseJSON
+          = withObject "MobileDeviceAction"
+              (\ o -> MobileDeviceAction <$> (o .:? "action"))
+
+instance ToJSON MobileDeviceAction where
+        toJSON MobileDeviceAction{..}
+          = object (catMaybes [("action" .=) <$> _mdaAction])
+
+-- | JSON template for FieldSpec resource for Schemas in Directory API.
+--
+-- /See:/ 'schemaFieldSpec' smart constructor.
+data SchemaFieldSpec = SchemaFieldSpec
+    { _sfsEtag                :: !(Maybe Text)
+    , _sfsKind                :: !Text
+    , _sfsNumericIndexingSpec :: !(Maybe SchemaFieldSpecNumericIndexingSpec)
+    , _sfsReadAccessType      :: !Text
+    , _sfsFieldId             :: !(Maybe Text)
+    , _sfsIndexed             :: !Bool
+    , _sfsFieldType           :: !(Maybe Text)
+    , _sfsFieldName           :: !(Maybe Text)
+    , _sfsMultiValued         :: !(Maybe Bool)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'SchemaFieldSpec' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'sfsEtag'
+--
+-- * 'sfsKind'
+--
+-- * 'sfsNumericIndexingSpec'
+--
+-- * 'sfsReadAccessType'
+--
+-- * 'sfsFieldId'
+--
+-- * 'sfsIndexed'
+--
+-- * 'sfsFieldType'
+--
+-- * 'sfsFieldName'
+--
+-- * 'sfsMultiValued'
+schemaFieldSpec
+    :: SchemaFieldSpec
+schemaFieldSpec =
+    SchemaFieldSpec
+    { _sfsEtag = Nothing
+    , _sfsKind = "admin#directory#schema#fieldspec"
+    , _sfsNumericIndexingSpec = Nothing
+    , _sfsReadAccessType = "ALL_DOMAIN_USERS"
+    , _sfsFieldId = Nothing
+    , _sfsIndexed = True
+    , _sfsFieldType = Nothing
+    , _sfsFieldName = Nothing
+    , _sfsMultiValued = Nothing
+    }
+
+-- | ETag of the resource.
+sfsEtag :: Lens' SchemaFieldSpec (Maybe Text)
+sfsEtag = lens _sfsEtag (\ s a -> s{_sfsEtag = a})
+
+-- | Kind of resource this is.
+sfsKind :: Lens' SchemaFieldSpec Text
+sfsKind = lens _sfsKind (\ s a -> s{_sfsKind = a})
+
+-- | Indexing spec for a numeric field. By default, only exact match queries
+-- will be supported for numeric fields. Setting the numericIndexingSpec
+-- allows range queries to be supported.
+sfsNumericIndexingSpec :: Lens' SchemaFieldSpec (Maybe SchemaFieldSpecNumericIndexingSpec)
+sfsNumericIndexingSpec
+  = lens _sfsNumericIndexingSpec
+      (\ s a -> s{_sfsNumericIndexingSpec = a})
+
+-- | Read ACLs on the field specifying who can view values of this field.
+-- Valid values are \"ALL_DOMAIN_USERS\" and \"ADMINS_AND_SELF\".
+sfsReadAccessType :: Lens' SchemaFieldSpec Text
+sfsReadAccessType
+  = lens _sfsReadAccessType
+      (\ s a -> s{_sfsReadAccessType = a})
+
+-- | Unique identifier of Field (Read-only)
+sfsFieldId :: Lens' SchemaFieldSpec (Maybe Text)
+sfsFieldId
+  = lens _sfsFieldId (\ s a -> s{_sfsFieldId = a})
+
+-- | Boolean specifying whether the field is indexed or not.
+sfsIndexed :: Lens' SchemaFieldSpec Bool
+sfsIndexed
+  = lens _sfsIndexed (\ s a -> s{_sfsIndexed = a})
+
+-- | Type of the field.
+sfsFieldType :: Lens' SchemaFieldSpec (Maybe Text)
+sfsFieldType
+  = lens _sfsFieldType (\ s a -> s{_sfsFieldType = a})
+
+-- | Name of the field.
+sfsFieldName :: Lens' SchemaFieldSpec (Maybe Text)
+sfsFieldName
+  = lens _sfsFieldName (\ s a -> s{_sfsFieldName = a})
+
+-- | Boolean specifying whether this is a multi-valued field or not.
+sfsMultiValued :: Lens' SchemaFieldSpec (Maybe Bool)
+sfsMultiValued
+  = lens _sfsMultiValued
+      (\ s a -> s{_sfsMultiValued = a})
+
+instance FromJSON SchemaFieldSpec where
+        parseJSON
+          = withObject "SchemaFieldSpec"
+              (\ o ->
+                 SchemaFieldSpec <$>
+                   (o .:? "etag") <*>
+                     (o .:? "kind" .!= "admin#directory#schema#fieldspec")
+                     <*> (o .:? "numericIndexingSpec")
+                     <*> (o .:? "readAccessType" .!= "ALL_DOMAIN_USERS")
+                     <*> (o .:? "fieldId")
+                     <*> (o .:? "indexed" .!= True)
+                     <*> (o .:? "fieldType")
+                     <*> (o .:? "fieldName")
+                     <*> (o .:? "multiValued"))
+
+instance ToJSON SchemaFieldSpec where
+        toJSON SchemaFieldSpec{..}
+          = object
+              (catMaybes
+                 [("etag" .=) <$> _sfsEtag, Just ("kind" .= _sfsKind),
+                  ("numericIndexingSpec" .=) <$>
+                    _sfsNumericIndexingSpec,
+                  Just ("readAccessType" .= _sfsReadAccessType),
+                  ("fieldId" .=) <$> _sfsFieldId,
+                  Just ("indexed" .= _sfsIndexed),
+                  ("fieldType" .=) <$> _sfsFieldType,
+                  ("fieldName" .=) <$> _sfsFieldName,
+                  ("multiValued" .=) <$> _sfsMultiValued])
+
+-- | JSON response template for List Chrome OS Devices operation in Directory
+-- API.
+--
+-- /See:/ 'chromeOSDevices' smart constructor.
+data ChromeOSDevices = ChromeOSDevices
+    { _cosdEtag            :: !(Maybe Text)
+    , _cosdNextPageToken   :: !(Maybe Text)
+    , _cosdKind            :: !Text
+    , _cosdChromeosDevices :: !(Maybe [ChromeOSDevice])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ChromeOSDevices' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cosdEtag'
+--
+-- * 'cosdNextPageToken'
+--
+-- * 'cosdKind'
+--
+-- * 'cosdChromeosDevices'
+chromeOSDevices
+    :: ChromeOSDevices
+chromeOSDevices =
+    ChromeOSDevices
+    { _cosdEtag = Nothing
+    , _cosdNextPageToken = Nothing
+    , _cosdKind = "admin#directory#chromeosdevices"
+    , _cosdChromeosDevices = Nothing
+    }
+
+-- | ETag of the resource.
+cosdEtag :: Lens' ChromeOSDevices (Maybe Text)
+cosdEtag = lens _cosdEtag (\ s a -> s{_cosdEtag = a})
+
+-- | Token used to access next page of this result.
+cosdNextPageToken :: Lens' ChromeOSDevices (Maybe Text)
+cosdNextPageToken
+  = lens _cosdNextPageToken
+      (\ s a -> s{_cosdNextPageToken = a})
+
+-- | Kind of resource this is.
+cosdKind :: Lens' ChromeOSDevices Text
+cosdKind = lens _cosdKind (\ s a -> s{_cosdKind = a})
+
+-- | List of Chrome OS Device objects.
+cosdChromeosDevices :: Lens' ChromeOSDevices [ChromeOSDevice]
+cosdChromeosDevices
+  = lens _cosdChromeosDevices
+      (\ s a -> s{_cosdChromeosDevices = a})
+      . _Default
+      . _Coerce
+
+instance FromJSON ChromeOSDevices where
+        parseJSON
+          = withObject "ChromeOSDevices"
+              (\ o ->
+                 ChromeOSDevices <$>
+                   (o .:? "etag") <*> (o .:? "nextPageToken") <*>
+                     (o .:? "kind" .!= "admin#directory#chromeosdevices")
+                     <*> (o .:? "chromeosdevices" .!= mempty))
+
+instance ToJSON ChromeOSDevices where
+        toJSON ChromeOSDevices{..}
+          = object
+              (catMaybes
+                 [("etag" .=) <$> _cosdEtag,
+                  ("nextPageToken" .=) <$> _cosdNextPageToken,
+                  Just ("kind" .= _cosdKind),
+                  ("chromeosdevices" .=) <$> _cosdChromeosDevices])
+
+-- | JSON template for an externalId entry.
+--
+-- /See:/ 'userExternalId' smart constructor.
+data UserExternalId = UserExternalId
+    { _ueiValue      :: !(Maybe Text)
+    , _ueiType       :: !(Maybe Text)
+    , _ueiCustomType :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'UserExternalId' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ueiValue'
+--
+-- * 'ueiType'
+--
+-- * 'ueiCustomType'
+userExternalId
+    :: UserExternalId
+userExternalId =
+    UserExternalId
+    { _ueiValue = Nothing
+    , _ueiType = Nothing
+    , _ueiCustomType = Nothing
+    }
+
+-- | The value of the id.
+ueiValue :: Lens' UserExternalId (Maybe Text)
+ueiValue = lens _ueiValue (\ s a -> s{_ueiValue = a})
+
+-- | The type of the Id.
+ueiType :: Lens' UserExternalId (Maybe Text)
+ueiType = lens _ueiType (\ s a -> s{_ueiType = a})
+
+-- | Custom type.
+ueiCustomType :: Lens' UserExternalId (Maybe Text)
+ueiCustomType
+  = lens _ueiCustomType
+      (\ s a -> s{_ueiCustomType = a})
+
+instance FromJSON UserExternalId where
+        parseJSON
+          = withObject "UserExternalId"
+              (\ o ->
+                 UserExternalId <$>
+                   (o .:? "value") <*> (o .:? "type") <*>
+                     (o .:? "customType"))
+
+instance ToJSON UserExternalId where
+        toJSON UserExternalId{..}
+          = object
+              (catMaybes
+                 [("value" .=) <$> _ueiValue,
+                  ("type" .=) <$> _ueiType,
+                  ("customType" .=) <$> _ueiCustomType])
+
+--
+-- /See:/ 'asps' smart constructor.
+data Asps = Asps
+    { _aspEtag  :: !(Maybe Text)
+    , _aspKind  :: !Text
+    , _aspItems :: !(Maybe [Asp])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Asps' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'aspEtag'
+--
+-- * 'aspKind'
+--
+-- * 'aspItems'
+asps
+    :: Asps
+asps =
+    Asps
+    { _aspEtag = Nothing
+    , _aspKind = "admin#directory#aspList"
+    , _aspItems = Nothing
+    }
+
+-- | ETag of the resource.
+aspEtag :: Lens' Asps (Maybe Text)
+aspEtag = lens _aspEtag (\ s a -> s{_aspEtag = a})
+
+-- | The type of the API resource. This is always admin#directory#aspList.
+aspKind :: Lens' Asps Text
+aspKind = lens _aspKind (\ s a -> s{_aspKind = a})
+
+-- | A list of ASP resources.
+aspItems :: Lens' Asps [Asp]
+aspItems
+  = lens _aspItems (\ s a -> s{_aspItems = a}) .
+      _Default
+      . _Coerce
+
+instance FromJSON Asps where
+        parseJSON
+          = withObject "Asps"
+              (\ o ->
+                 Asps <$>
+                   (o .:? "etag") <*>
+                     (o .:? "kind" .!= "admin#directory#aspList")
+                     <*> (o .:? "items" .!= mempty))
+
+instance ToJSON Asps where
+        toJSON Asps{..}
+          = object
+              (catMaybes
+                 [("etag" .=) <$> _aspEtag, Just ("kind" .= _aspKind),
+                  ("items" .=) <$> _aspItems])
+
+--
+-- /See:/ 'roleRolePrivilegesItem' smart constructor.
+data RoleRolePrivilegesItem = RoleRolePrivilegesItem
+    { _rrpiServiceId     :: !(Maybe Text)
+    , _rrpiPrivilegeName :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'RoleRolePrivilegesItem' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'rrpiServiceId'
+--
+-- * 'rrpiPrivilegeName'
+roleRolePrivilegesItem
+    :: RoleRolePrivilegesItem
+roleRolePrivilegesItem =
+    RoleRolePrivilegesItem
+    { _rrpiServiceId = Nothing
+    , _rrpiPrivilegeName = Nothing
+    }
+
+-- | The obfuscated ID of the service this privilege is for.
+rrpiServiceId :: Lens' RoleRolePrivilegesItem (Maybe Text)
+rrpiServiceId
+  = lens _rrpiServiceId
+      (\ s a -> s{_rrpiServiceId = a})
+
+-- | The name of the privilege.
+rrpiPrivilegeName :: Lens' RoleRolePrivilegesItem (Maybe Text)
+rrpiPrivilegeName
+  = lens _rrpiPrivilegeName
+      (\ s a -> s{_rrpiPrivilegeName = a})
+
+instance FromJSON RoleRolePrivilegesItem where
+        parseJSON
+          = withObject "RoleRolePrivilegesItem"
+              (\ o ->
+                 RoleRolePrivilegesItem <$>
+                   (o .:? "serviceId") <*> (o .:? "privilegeName"))
+
+instance ToJSON RoleRolePrivilegesItem where
+        toJSON RoleRolePrivilegesItem{..}
+          = object
+              (catMaybes
+                 [("serviceId" .=) <$> _rrpiServiceId,
+                  ("privilegeName" .=) <$> _rrpiPrivilegeName])
+
+-- | JSON response template to list Domains in Directory API.
+--
+-- /See:/ 'domains2' smart constructor.
+data Domains2 = Domains2
+    { _ddEtag    :: !(Maybe Text)
+    , _ddKind    :: !Text
+    , _ddDomains :: !(Maybe [Domains])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Domains2' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ddEtag'
+--
+-- * 'ddKind'
+--
+-- * 'ddDomains'
+domains2
+    :: Domains2
+domains2 =
+    Domains2
+    { _ddEtag = Nothing
+    , _ddKind = "admin#directory#domains"
+    , _ddDomains = Nothing
+    }
+
+-- | ETag of the resource.
+ddEtag :: Lens' Domains2 (Maybe Text)
+ddEtag = lens _ddEtag (\ s a -> s{_ddEtag = a})
+
+-- | Kind of resource this is.
+ddKind :: Lens' Domains2 Text
+ddKind = lens _ddKind (\ s a -> s{_ddKind = a})
+
+-- | List of domain objects.
+ddDomains :: Lens' Domains2 [Domains]
+ddDomains
+  = lens _ddDomains (\ s a -> s{_ddDomains = a}) .
+      _Default
+      . _Coerce
+
+instance FromJSON Domains2 where
+        parseJSON
+          = withObject "Domains2"
+              (\ o ->
+                 Domains2 <$>
+                   (o .:? "etag") <*>
+                     (o .:? "kind" .!= "admin#directory#domains")
+                     <*> (o .:? "domains" .!= mempty))
+
+instance ToJSON Domains2 where
+        toJSON Domains2{..}
+          = object
+              (catMaybes
+                 [("etag" .=) <$> _ddEtag, Just ("kind" .= _ddKind),
+                  ("domains" .=) <$> _ddDomains])
diff --git a/gen/Network/Google/Directory/Types/Sum.hs b/gen/Network/Google/Directory/Types/Sum.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Directory/Types/Sum.hs
@@ -0,0 +1,862 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE LambdaCase         #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- |
+-- Module      : Network.Google.Directory.Types.Sum
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+module Network.Google.Directory.Types.Sum where
+
+import           Network.Google.Prelude
+
+-- | Event on which subscription is intended (if subscribing)
+data UsersListEvent
+    = Add
+      -- ^ @add@
+      -- User Created Event
+    | Delete'
+      -- ^ @delete@
+      -- User Deleted Event
+    | MakeAdmin
+      -- ^ @makeAdmin@
+      -- User Admin Status Change Event
+    | Undelete
+      -- ^ @undelete@
+      -- User Undeleted Event
+    | Update
+      -- ^ @update@
+      -- User Updated Event
+      deriving (Eq,Ord,Enum,Read,Show,Data,Typeable,Generic)
+
+instance Hashable UsersListEvent
+
+instance FromText UsersListEvent where
+    fromText = \case
+        "add" -> Just Add
+        "delete" -> Just Delete'
+        "makeAdmin" -> Just MakeAdmin
+        "undelete" -> Just Undelete
+        "update" -> Just Update
+        _ -> Nothing
+
+instance ToText UsersListEvent where
+    toText = \case
+        Add -> "add"
+        Delete' -> "delete"
+        MakeAdmin -> "makeAdmin"
+        Undelete -> "undelete"
+        Update -> "update"
+
+instance FromJSON UsersListEvent where
+    parseJSON = parseJSONText "UsersListEvent"
+
+instance ToJSON UsersListEvent where
+    toJSON = toJSONText
+
+-- | Event on which subscription is intended (if subscribing)
+data UsersAliasesListEvent
+    = UALEAdd
+      -- ^ @add@
+      -- Alias Created Event
+    | UALEDelete'
+      -- ^ @delete@
+      -- Alias Deleted Event
+      deriving (Eq,Ord,Enum,Read,Show,Data,Typeable,Generic)
+
+instance Hashable UsersAliasesListEvent
+
+instance FromText UsersAliasesListEvent where
+    fromText = \case
+        "add" -> Just UALEAdd
+        "delete" -> Just UALEDelete'
+        _ -> Nothing
+
+instance ToText UsersAliasesListEvent where
+    toText = \case
+        UALEAdd -> "add"
+        UALEDelete' -> "delete"
+
+instance FromJSON UsersAliasesListEvent where
+    parseJSON = parseJSONText "UsersAliasesListEvent"
+
+instance ToJSON UsersAliasesListEvent where
+    toJSON = toJSONText
+
+-- | Event on which subscription is intended (if subscribing)
+data UsersAliasesWatchEvent
+    = UAWEAdd
+      -- ^ @add@
+      -- Alias Created Event
+    | UAWEDelete'
+      -- ^ @delete@
+      -- Alias Deleted Event
+      deriving (Eq,Ord,Enum,Read,Show,Data,Typeable,Generic)
+
+instance Hashable UsersAliasesWatchEvent
+
+instance FromText UsersAliasesWatchEvent where
+    fromText = \case
+        "add" -> Just UAWEAdd
+        "delete" -> Just UAWEDelete'
+        _ -> Nothing
+
+instance ToText UsersAliasesWatchEvent where
+    toText = \case
+        UAWEAdd -> "add"
+        UAWEDelete' -> "delete"
+
+instance FromJSON UsersAliasesWatchEvent where
+    parseJSON = parseJSONText "UsersAliasesWatchEvent"
+
+instance ToJSON UsersAliasesWatchEvent where
+    toJSON = toJSONText
+
+-- | Event on which subscription is intended (if subscribing)
+data UsersWatchEvent
+    = UWEAdd
+      -- ^ @add@
+      -- User Created Event
+    | UWEDelete'
+      -- ^ @delete@
+      -- User Deleted Event
+    | UWEMakeAdmin
+      -- ^ @makeAdmin@
+      -- User Admin Status Change Event
+    | UWEUndelete
+      -- ^ @undelete@
+      -- User Undeleted Event
+    | UWEUpdate
+      -- ^ @update@
+      -- User Updated Event
+      deriving (Eq,Ord,Enum,Read,Show,Data,Typeable,Generic)
+
+instance Hashable UsersWatchEvent
+
+instance FromText UsersWatchEvent where
+    fromText = \case
+        "add" -> Just UWEAdd
+        "delete" -> Just UWEDelete'
+        "makeAdmin" -> Just UWEMakeAdmin
+        "undelete" -> Just UWEUndelete
+        "update" -> Just UWEUpdate
+        _ -> Nothing
+
+instance ToText UsersWatchEvent where
+    toText = \case
+        UWEAdd -> "add"
+        UWEDelete' -> "delete"
+        UWEMakeAdmin -> "makeAdmin"
+        UWEUndelete -> "undelete"
+        UWEUpdate -> "update"
+
+instance FromJSON UsersWatchEvent where
+    parseJSON = parseJSONText "UsersWatchEvent"
+
+instance ToJSON UsersWatchEvent where
+    toJSON = toJSONText
+
+-- | Restrict information returned to a set of selected fields.
+data ChromeosDevicesPatchProjection
+    = Basic
+      -- ^ @BASIC@
+      -- Includes only the basic metadata fields (e.g., deviceId, serialNumber,
+      -- status, and user)
+    | Full
+      -- ^ @FULL@
+      -- Includes all metadata fields
+      deriving (Eq,Ord,Enum,Read,Show,Data,Typeable,Generic)
+
+instance Hashable ChromeosDevicesPatchProjection
+
+instance FromText ChromeosDevicesPatchProjection where
+    fromText = \case
+        "BASIC" -> Just Basic
+        "FULL" -> Just Full
+        _ -> Nothing
+
+instance ToText ChromeosDevicesPatchProjection where
+    toText = \case
+        Basic -> "BASIC"
+        Full -> "FULL"
+
+instance FromJSON ChromeosDevicesPatchProjection where
+    parseJSON = parseJSONText "ChromeosDevicesPatchProjection"
+
+instance ToJSON ChromeosDevicesPatchProjection where
+    toJSON = toJSONText
+
+-- | Restrict information returned to a set of selected fields.
+data ChromeosDevicesGetProjection
+    = CDGPBasic
+      -- ^ @BASIC@
+      -- Includes only the basic metadata fields (e.g., deviceId, serialNumber,
+      -- status, and user)
+    | CDGPFull
+      -- ^ @FULL@
+      -- Includes all metadata fields
+      deriving (Eq,Ord,Enum,Read,Show,Data,Typeable,Generic)
+
+instance Hashable ChromeosDevicesGetProjection
+
+instance FromText ChromeosDevicesGetProjection where
+    fromText = \case
+        "BASIC" -> Just CDGPBasic
+        "FULL" -> Just CDGPFull
+        _ -> Nothing
+
+instance ToText ChromeosDevicesGetProjection where
+    toText = \case
+        CDGPBasic -> "BASIC"
+        CDGPFull -> "FULL"
+
+instance FromJSON ChromeosDevicesGetProjection where
+    parseJSON = parseJSONText "ChromeosDevicesGetProjection"
+
+instance ToJSON ChromeosDevicesGetProjection where
+    toJSON = toJSONText
+
+-- | Whether to fetch the ADMIN_VIEW or DOMAIN_PUBLIC view of the user.
+data UsersListViewType
+    = AdminView
+      -- ^ @admin_view@
+      -- Fetches the ADMIN_VIEW of the user.
+    | DomainPublic
+      -- ^ @domain_public@
+      -- Fetches the DOMAIN_PUBLIC view of the user.
+      deriving (Eq,Ord,Enum,Read,Show,Data,Typeable,Generic)
+
+instance Hashable UsersListViewType
+
+instance FromText UsersListViewType where
+    fromText = \case
+        "admin_view" -> Just AdminView
+        "domain_public" -> Just DomainPublic
+        _ -> Nothing
+
+instance ToText UsersListViewType where
+    toText = \case
+        AdminView -> "admin_view"
+        DomainPublic -> "domain_public"
+
+instance FromJSON UsersListViewType where
+    parseJSON = parseJSONText "UsersListViewType"
+
+instance ToJSON UsersListViewType where
+    toJSON = toJSONText
+
+-- | Whether to return all sub-organizations or just immediate children
+data OrgUnitsListType
+    = All
+      -- ^ @all@
+      -- All sub-organization units.
+    | Children
+      -- ^ @children@
+      -- Immediate children only (default).
+      deriving (Eq,Ord,Enum,Read,Show,Data,Typeable,Generic)
+
+instance Hashable OrgUnitsListType
+
+instance FromText OrgUnitsListType where
+    fromText = \case
+        "all" -> Just All
+        "children" -> Just Children
+        _ -> Nothing
+
+instance ToText OrgUnitsListType where
+    toText = \case
+        All -> "all"
+        Children -> "children"
+
+instance FromJSON OrgUnitsListType where
+    parseJSON = parseJSONText "OrgUnitsListType"
+
+instance ToJSON OrgUnitsListType where
+    toJSON = toJSONText
+
+-- | Whether to return results in ascending or descending order. Only of use
+-- when orderBy is also used
+data MobileDevicesListSortOrder
+    = Ascending
+      -- ^ @ASCENDING@
+      -- Ascending order.
+    | Descending
+      -- ^ @DESCENDING@
+      -- Descending order.
+      deriving (Eq,Ord,Enum,Read,Show,Data,Typeable,Generic)
+
+instance Hashable MobileDevicesListSortOrder
+
+instance FromText MobileDevicesListSortOrder where
+    fromText = \case
+        "ASCENDING" -> Just Ascending
+        "DESCENDING" -> Just Descending
+        _ -> Nothing
+
+instance ToText MobileDevicesListSortOrder where
+    toText = \case
+        Ascending -> "ASCENDING"
+        Descending -> "DESCENDING"
+
+instance FromJSON MobileDevicesListSortOrder where
+    parseJSON = parseJSONText "MobileDevicesListSortOrder"
+
+instance ToJSON MobileDevicesListSortOrder where
+    toJSON = toJSONText
+
+-- | Column to use for sorting results
+data UsersListOrderBy
+    = Email
+      -- ^ @email@
+      -- Primary email of the user.
+    | FamilyName
+      -- ^ @familyName@
+      -- User\'s family name.
+    | GivenName
+      -- ^ @givenName@
+      -- User\'s given name.
+      deriving (Eq,Ord,Enum,Read,Show,Data,Typeable,Generic)
+
+instance Hashable UsersListOrderBy
+
+instance FromText UsersListOrderBy where
+    fromText = \case
+        "email" -> Just Email
+        "familyName" -> Just FamilyName
+        "givenName" -> Just GivenName
+        _ -> Nothing
+
+instance ToText UsersListOrderBy where
+    toText = \case
+        Email -> "email"
+        FamilyName -> "familyName"
+        GivenName -> "givenName"
+
+instance FromJSON UsersListOrderBy where
+    parseJSON = parseJSONText "UsersListOrderBy"
+
+instance ToJSON UsersListOrderBy where
+    toJSON = toJSONText
+
+-- | Whether to fetch the ADMIN_VIEW or DOMAIN_PUBLIC view of the user.
+data UsersWatchViewType
+    = UWVTAdminView
+      -- ^ @admin_view@
+      -- Fetches the ADMIN_VIEW of the user.
+    | UWVTDomainPublic
+      -- ^ @domain_public@
+      -- Fetches the DOMAIN_PUBLIC view of the user.
+      deriving (Eq,Ord,Enum,Read,Show,Data,Typeable,Generic)
+
+instance Hashable UsersWatchViewType
+
+instance FromText UsersWatchViewType where
+    fromText = \case
+        "admin_view" -> Just UWVTAdminView
+        "domain_public" -> Just UWVTDomainPublic
+        _ -> Nothing
+
+instance ToText UsersWatchViewType where
+    toText = \case
+        UWVTAdminView -> "admin_view"
+        UWVTDomainPublic -> "domain_public"
+
+instance FromJSON UsersWatchViewType where
+    parseJSON = parseJSONText "UsersWatchViewType"
+
+instance ToJSON UsersWatchViewType where
+    toJSON = toJSONText
+
+-- | What subset of fields to fetch for this user.
+data UsersGetProjection
+    = UGPBasic
+      -- ^ @basic@
+      -- Do not include any custom fields for the user.
+    | UGPCustom
+      -- ^ @custom@
+      -- Include custom fields from schemas mentioned in customFieldMask.
+    | UGPFull
+      -- ^ @full@
+      -- Include all fields associated with this user.
+      deriving (Eq,Ord,Enum,Read,Show,Data,Typeable,Generic)
+
+instance Hashable UsersGetProjection
+
+instance FromText UsersGetProjection where
+    fromText = \case
+        "basic" -> Just UGPBasic
+        "custom" -> Just UGPCustom
+        "full" -> Just UGPFull
+        _ -> Nothing
+
+instance ToText UsersGetProjection where
+    toText = \case
+        UGPBasic -> "basic"
+        UGPCustom -> "custom"
+        UGPFull -> "full"
+
+instance FromJSON UsersGetProjection where
+    parseJSON = parseJSONText "UsersGetProjection"
+
+instance ToJSON UsersGetProjection where
+    toJSON = toJSONText
+
+-- | Restrict information returned to a set of selected fields.
+data MobileDevicesListProjection
+    = MDLPBasic
+      -- ^ @BASIC@
+      -- Includes only the basic metadata fields (e.g., deviceId, model, status,
+      -- type, and status)
+    | MDLPFull
+      -- ^ @FULL@
+      -- Includes all metadata fields
+      deriving (Eq,Ord,Enum,Read,Show,Data,Typeable,Generic)
+
+instance Hashable MobileDevicesListProjection
+
+instance FromText MobileDevicesListProjection where
+    fromText = \case
+        "BASIC" -> Just MDLPBasic
+        "FULL" -> Just MDLPFull
+        _ -> Nothing
+
+instance ToText MobileDevicesListProjection where
+    toText = \case
+        MDLPBasic -> "BASIC"
+        MDLPFull -> "FULL"
+
+instance FromJSON MobileDevicesListProjection where
+    parseJSON = parseJSONText "MobileDevicesListProjection"
+
+instance ToJSON MobileDevicesListProjection where
+    toJSON = toJSONText
+
+-- | Column to use for sorting results
+data MobileDevicesListOrderBy
+    = MDLOBDeviceId
+      -- ^ @deviceId@
+      -- Mobile Device serial number.
+    | MDLOBEmail
+      -- ^ @email@
+      -- Owner user email.
+    | MDLOBLastSync
+      -- ^ @lastSync@
+      -- Last policy settings sync date time of the device.
+    | MDLOBModel
+      -- ^ @model@
+      -- Mobile Device model.
+    | MDLOBName
+      -- ^ @name@
+      -- Owner user name.
+    | MDLOBOS
+      -- ^ @os@
+      -- Mobile operating system.
+    | MDLOBStatus
+      -- ^ @status@
+      -- Status of the device.
+    | MDLOBType
+      -- ^ @type@
+      -- Type of the device.
+      deriving (Eq,Ord,Enum,Read,Show,Data,Typeable,Generic)
+
+instance Hashable MobileDevicesListOrderBy
+
+instance FromText MobileDevicesListOrderBy where
+    fromText = \case
+        "deviceId" -> Just MDLOBDeviceId
+        "email" -> Just MDLOBEmail
+        "lastSync" -> Just MDLOBLastSync
+        "model" -> Just MDLOBModel
+        "name" -> Just MDLOBName
+        "os" -> Just MDLOBOS
+        "status" -> Just MDLOBStatus
+        "type" -> Just MDLOBType
+        _ -> Nothing
+
+instance ToText MobileDevicesListOrderBy where
+    toText = \case
+        MDLOBDeviceId -> "deviceId"
+        MDLOBEmail -> "email"
+        MDLOBLastSync -> "lastSync"
+        MDLOBModel -> "model"
+        MDLOBName -> "name"
+        MDLOBOS -> "os"
+        MDLOBStatus -> "status"
+        MDLOBType -> "type"
+
+instance FromJSON MobileDevicesListOrderBy where
+    parseJSON = parseJSONText "MobileDevicesListOrderBy"
+
+instance ToJSON MobileDevicesListOrderBy where
+    toJSON = toJSONText
+
+-- | Whether to return results in ascending or descending order.
+data UsersListSortOrder
+    = ULSOAscending
+      -- ^ @ASCENDING@
+      -- Ascending order.
+    | ULSODescending
+      -- ^ @DESCENDING@
+      -- Descending order.
+      deriving (Eq,Ord,Enum,Read,Show,Data,Typeable,Generic)
+
+instance Hashable UsersListSortOrder
+
+instance FromText UsersListSortOrder where
+    fromText = \case
+        "ASCENDING" -> Just ULSOAscending
+        "DESCENDING" -> Just ULSODescending
+        _ -> Nothing
+
+instance ToText UsersListSortOrder where
+    toText = \case
+        ULSOAscending -> "ASCENDING"
+        ULSODescending -> "DESCENDING"
+
+instance FromJSON UsersListSortOrder where
+    parseJSON = parseJSONText "UsersListSortOrder"
+
+instance ToJSON UsersListSortOrder where
+    toJSON = toJSONText
+
+-- | Whether to return results in ascending or descending order. Only of use
+-- when orderBy is also used
+data ChromeosDevicesListSortOrder
+    = CDLSOAscending
+      -- ^ @ASCENDING@
+      -- Ascending order.
+    | CDLSODescending
+      -- ^ @DESCENDING@
+      -- Descending order.
+      deriving (Eq,Ord,Enum,Read,Show,Data,Typeable,Generic)
+
+instance Hashable ChromeosDevicesListSortOrder
+
+instance FromText ChromeosDevicesListSortOrder where
+    fromText = \case
+        "ASCENDING" -> Just CDLSOAscending
+        "DESCENDING" -> Just CDLSODescending
+        _ -> Nothing
+
+instance ToText ChromeosDevicesListSortOrder where
+    toText = \case
+        CDLSOAscending -> "ASCENDING"
+        CDLSODescending -> "DESCENDING"
+
+instance FromJSON ChromeosDevicesListSortOrder where
+    parseJSON = parseJSONText "ChromeosDevicesListSortOrder"
+
+instance ToJSON ChromeosDevicesListSortOrder where
+    toJSON = toJSONText
+
+-- | Whether to return results in ascending or descending order.
+data UsersWatchSortOrder
+    = UWSOAscending
+      -- ^ @ASCENDING@
+      -- Ascending order.
+    | UWSODescending
+      -- ^ @DESCENDING@
+      -- Descending order.
+      deriving (Eq,Ord,Enum,Read,Show,Data,Typeable,Generic)
+
+instance Hashable UsersWatchSortOrder
+
+instance FromText UsersWatchSortOrder where
+    fromText = \case
+        "ASCENDING" -> Just UWSOAscending
+        "DESCENDING" -> Just UWSODescending
+        _ -> Nothing
+
+instance ToText UsersWatchSortOrder where
+    toText = \case
+        UWSOAscending -> "ASCENDING"
+        UWSODescending -> "DESCENDING"
+
+instance FromJSON UsersWatchSortOrder where
+    parseJSON = parseJSONText "UsersWatchSortOrder"
+
+instance ToJSON UsersWatchSortOrder where
+    toJSON = toJSONText
+
+-- | What subset of fields to fetch for this user.
+data UsersListProjection
+    = ULPBasic
+      -- ^ @basic@
+      -- Do not include any custom fields for the user.
+    | ULPCustom
+      -- ^ @custom@
+      -- Include custom fields from schemas mentioned in customFieldMask.
+    | ULPFull
+      -- ^ @full@
+      -- Include all fields associated with this user.
+      deriving (Eq,Ord,Enum,Read,Show,Data,Typeable,Generic)
+
+instance Hashable UsersListProjection
+
+instance FromText UsersListProjection where
+    fromText = \case
+        "basic" -> Just ULPBasic
+        "custom" -> Just ULPCustom
+        "full" -> Just ULPFull
+        _ -> Nothing
+
+instance ToText UsersListProjection where
+    toText = \case
+        ULPBasic -> "basic"
+        ULPCustom -> "custom"
+        ULPFull -> "full"
+
+instance FromJSON UsersListProjection where
+    parseJSON = parseJSONText "UsersListProjection"
+
+instance ToJSON UsersListProjection where
+    toJSON = toJSONText
+
+-- | Restrict information returned to a set of selected fields.
+data ChromeosDevicesUpdateProjection
+    = CDUPBasic
+      -- ^ @BASIC@
+      -- Includes only the basic metadata fields (e.g., deviceId, serialNumber,
+      -- status, and user)
+    | CDUPFull
+      -- ^ @FULL@
+      -- Includes all metadata fields
+      deriving (Eq,Ord,Enum,Read,Show,Data,Typeable,Generic)
+
+instance Hashable ChromeosDevicesUpdateProjection
+
+instance FromText ChromeosDevicesUpdateProjection where
+    fromText = \case
+        "BASIC" -> Just CDUPBasic
+        "FULL" -> Just CDUPFull
+        _ -> Nothing
+
+instance ToText ChromeosDevicesUpdateProjection where
+    toText = \case
+        CDUPBasic -> "BASIC"
+        CDUPFull -> "FULL"
+
+instance FromJSON ChromeosDevicesUpdateProjection where
+    parseJSON = parseJSONText "ChromeosDevicesUpdateProjection"
+
+instance ToJSON ChromeosDevicesUpdateProjection where
+    toJSON = toJSONText
+
+-- | Restrict information returned to a set of selected fields.
+data MobileDevicesGetProjection
+    = MDGPBasic
+      -- ^ @BASIC@
+      -- Includes only the basic metadata fields (e.g., deviceId, model, status,
+      -- type, and status)
+    | MDGPFull
+      -- ^ @FULL@
+      -- Includes all metadata fields
+      deriving (Eq,Ord,Enum,Read,Show,Data,Typeable,Generic)
+
+instance Hashable MobileDevicesGetProjection
+
+instance FromText MobileDevicesGetProjection where
+    fromText = \case
+        "BASIC" -> Just MDGPBasic
+        "FULL" -> Just MDGPFull
+        _ -> Nothing
+
+instance ToText MobileDevicesGetProjection where
+    toText = \case
+        MDGPBasic -> "BASIC"
+        MDGPFull -> "FULL"
+
+instance FromJSON MobileDevicesGetProjection where
+    parseJSON = parseJSONText "MobileDevicesGetProjection"
+
+instance ToJSON MobileDevicesGetProjection where
+    toJSON = toJSONText
+
+-- | Column to use for sorting results
+data ChromeosDevicesListOrderBy
+    = AnnotatedLocation
+      -- ^ @annotatedLocation@
+      -- Chromebook location as annotated by the administrator.
+    | AnnotatedUser
+      -- ^ @annotatedUser@
+      -- Chromebook user as annotated by administrator.
+    | LastSync
+      -- ^ @lastSync@
+      -- Chromebook last sync.
+    | Notes
+      -- ^ @notes@
+      -- Chromebook notes as annotated by the administrator.
+    | SerialNumber
+      -- ^ @serialNumber@
+      -- Chromebook Serial Number.
+    | Status
+      -- ^ @status@
+      -- Chromebook status.
+    | SupportEndDate
+      -- ^ @supportEndDate@
+      -- Chromebook support end date.
+      deriving (Eq,Ord,Enum,Read,Show,Data,Typeable,Generic)
+
+instance Hashable ChromeosDevicesListOrderBy
+
+instance FromText ChromeosDevicesListOrderBy where
+    fromText = \case
+        "annotatedLocation" -> Just AnnotatedLocation
+        "annotatedUser" -> Just AnnotatedUser
+        "lastSync" -> Just LastSync
+        "notes" -> Just Notes
+        "serialNumber" -> Just SerialNumber
+        "status" -> Just Status
+        "supportEndDate" -> Just SupportEndDate
+        _ -> Nothing
+
+instance ToText ChromeosDevicesListOrderBy where
+    toText = \case
+        AnnotatedLocation -> "annotatedLocation"
+        AnnotatedUser -> "annotatedUser"
+        LastSync -> "lastSync"
+        Notes -> "notes"
+        SerialNumber -> "serialNumber"
+        Status -> "status"
+        SupportEndDate -> "supportEndDate"
+
+instance FromJSON ChromeosDevicesListOrderBy where
+    parseJSON = parseJSONText "ChromeosDevicesListOrderBy"
+
+instance ToJSON ChromeosDevicesListOrderBy where
+    toJSON = toJSONText
+
+-- | What subset of fields to fetch for this user.
+data UsersWatchProjection
+    = UWPBasic
+      -- ^ @basic@
+      -- Do not include any custom fields for the user.
+    | UWPCustom
+      -- ^ @custom@
+      -- Include custom fields from schemas mentioned in customFieldMask.
+    | UWPFull
+      -- ^ @full@
+      -- Include all fields associated with this user.
+      deriving (Eq,Ord,Enum,Read,Show,Data,Typeable,Generic)
+
+instance Hashable UsersWatchProjection
+
+instance FromText UsersWatchProjection where
+    fromText = \case
+        "basic" -> Just UWPBasic
+        "custom" -> Just UWPCustom
+        "full" -> Just UWPFull
+        _ -> Nothing
+
+instance ToText UsersWatchProjection where
+    toText = \case
+        UWPBasic -> "basic"
+        UWPCustom -> "custom"
+        UWPFull -> "full"
+
+instance FromJSON UsersWatchProjection where
+    parseJSON = parseJSONText "UsersWatchProjection"
+
+instance ToJSON UsersWatchProjection where
+    toJSON = toJSONText
+
+-- | Column to use for sorting results
+data UsersWatchOrderBy
+    = UWOBEmail
+      -- ^ @email@
+      -- Primary email of the user.
+    | UWOBFamilyName
+      -- ^ @familyName@
+      -- User\'s family name.
+    | UWOBGivenName
+      -- ^ @givenName@
+      -- User\'s given name.
+      deriving (Eq,Ord,Enum,Read,Show,Data,Typeable,Generic)
+
+instance Hashable UsersWatchOrderBy
+
+instance FromText UsersWatchOrderBy where
+    fromText = \case
+        "email" -> Just UWOBEmail
+        "familyName" -> Just UWOBFamilyName
+        "givenName" -> Just UWOBGivenName
+        _ -> Nothing
+
+instance ToText UsersWatchOrderBy where
+    toText = \case
+        UWOBEmail -> "email"
+        UWOBFamilyName -> "familyName"
+        UWOBGivenName -> "givenName"
+
+instance FromJSON UsersWatchOrderBy where
+    parseJSON = parseJSONText "UsersWatchOrderBy"
+
+instance ToJSON UsersWatchOrderBy where
+    toJSON = toJSONText
+
+-- | Restrict information returned to a set of selected fields.
+data ChromeosDevicesListProjection
+    = CDLPBasic
+      -- ^ @BASIC@
+      -- Includes only the basic metadata fields (e.g., deviceId, serialNumber,
+      -- status, and user)
+    | CDLPFull
+      -- ^ @FULL@
+      -- Includes all metadata fields
+      deriving (Eq,Ord,Enum,Read,Show,Data,Typeable,Generic)
+
+instance Hashable ChromeosDevicesListProjection
+
+instance FromText ChromeosDevicesListProjection where
+    fromText = \case
+        "BASIC" -> Just CDLPBasic
+        "FULL" -> Just CDLPFull
+        _ -> Nothing
+
+instance ToText ChromeosDevicesListProjection where
+    toText = \case
+        CDLPBasic -> "BASIC"
+        CDLPFull -> "FULL"
+
+instance FromJSON ChromeosDevicesListProjection where
+    parseJSON = parseJSONText "ChromeosDevicesListProjection"
+
+instance ToJSON ChromeosDevicesListProjection where
+    toJSON = toJSONText
+
+-- | Whether to fetch the ADMIN_VIEW or DOMAIN_PUBLIC view of the user.
+data UsersGetViewType
+    = UGVTAdminView
+      -- ^ @admin_view@
+      -- Fetches the ADMIN_VIEW of the user.
+    | UGVTDomainPublic
+      -- ^ @domain_public@
+      -- Fetches the DOMAIN_PUBLIC view of the user.
+      deriving (Eq,Ord,Enum,Read,Show,Data,Typeable,Generic)
+
+instance Hashable UsersGetViewType
+
+instance FromText UsersGetViewType where
+    fromText = \case
+        "admin_view" -> Just UGVTAdminView
+        "domain_public" -> Just UGVTDomainPublic
+        _ -> Nothing
+
+instance ToText UsersGetViewType where
+    toText = \case
+        UGVTAdminView -> "admin_view"
+        UGVTDomainPublic -> "domain_public"
+
+instance FromJSON UsersGetViewType where
+    parseJSON = parseJSONText "UsersGetViewType"
+
+instance ToJSON UsersGetViewType where
+    toJSON = toJSONText
diff --git a/gen/Network/Google/Resource/Admin/Channels/Stop.hs b/gen/Network/Google/Resource/Admin/Channels/Stop.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Admin/Channels/Stop.hs
@@ -0,0 +1,86 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.Admin.Channels.Stop
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Stop watching resources through this channel
+--
+-- /See:/ <https://developers.google.com/admin-sdk/directory/ Admin Directory API Reference> for @admin.channels.stop@.
+module Network.Google.Resource.Admin.Channels.Stop
+    (
+    -- * REST Resource
+      ChannelsStopResource
+
+    -- * Creating a Request
+    , channelsStop
+    , ChannelsStop
+
+    -- * Request Lenses
+    , csPayload
+    ) where
+
+import           Network.Google.Directory.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @admin.channels.stop@ method which the
+-- 'ChannelsStop' request conforms to.
+type ChannelsStopResource =
+     "admin" :>
+       "directory" :>
+         "v1" :>
+           "admin" :>
+             "directory_v1" :>
+               "channels" :>
+                 "stop" :>
+                   QueryParam "alt" AltJSON :>
+                     ReqBody '[JSON] Channel :> Post '[JSON] ()
+
+-- | Stop watching resources through this channel
+--
+-- /See:/ 'channelsStop' smart constructor.
+newtype ChannelsStop = ChannelsStop
+    { _csPayload :: Channel
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ChannelsStop' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'csPayload'
+channelsStop
+    :: Channel -- ^ 'csPayload'
+    -> ChannelsStop
+channelsStop pCsPayload_ =
+    ChannelsStop
+    { _csPayload = pCsPayload_
+    }
+
+-- | Multipart request metadata.
+csPayload :: Lens' ChannelsStop Channel
+csPayload
+  = lens _csPayload (\ s a -> s{_csPayload = a})
+
+instance GoogleRequest ChannelsStop where
+        type Rs ChannelsStop = ()
+        requestClient ChannelsStop{..}
+          = go (Just AltJSON) _csPayload directoryService
+          where go
+                  = buildClient (Proxy :: Proxy ChannelsStopResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Directory/Asps/Delete.hs b/gen/Network/Google/Resource/Directory/Asps/Delete.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Directory/Asps/Delete.hs
@@ -0,0 +1,99 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.Directory.Asps.Delete
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Delete an ASP issued by a user.
+--
+-- /See:/ <https://developers.google.com/admin-sdk/directory/ Admin Directory API Reference> for @directory.asps.delete@.
+module Network.Google.Resource.Directory.Asps.Delete
+    (
+    -- * REST Resource
+      AspsDeleteResource
+
+    -- * Creating a Request
+    , aspsDelete
+    , AspsDelete
+
+    -- * Request Lenses
+    , adCodeId
+    , adUserKey
+    ) where
+
+import           Network.Google.Directory.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @directory.asps.delete@ method which the
+-- 'AspsDelete' request conforms to.
+type AspsDeleteResource =
+     "admin" :>
+       "directory" :>
+         "v1" :>
+           "users" :>
+             Capture "userKey" Text :>
+               "asps" :>
+                 Capture "codeId" (Textual Int32) :>
+                   QueryParam "alt" AltJSON :> Delete '[JSON] ()
+
+-- | Delete an ASP issued by a user.
+--
+-- /See:/ 'aspsDelete' smart constructor.
+data AspsDelete = AspsDelete
+    { _adCodeId  :: !(Textual Int32)
+    , _adUserKey :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'AspsDelete' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'adCodeId'
+--
+-- * 'adUserKey'
+aspsDelete
+    :: Int32 -- ^ 'adCodeId'
+    -> Text -- ^ 'adUserKey'
+    -> AspsDelete
+aspsDelete pAdCodeId_ pAdUserKey_ =
+    AspsDelete
+    { _adCodeId = _Coerce # pAdCodeId_
+    , _adUserKey = pAdUserKey_
+    }
+
+-- | The unique ID of the ASP to be deleted.
+adCodeId :: Lens' AspsDelete Int32
+adCodeId
+  = lens _adCodeId (\ s a -> s{_adCodeId = a}) .
+      _Coerce
+
+-- | Identifies the user in the API request. The value can be the user\'s
+-- primary email address, alias email address, or unique user ID.
+adUserKey :: Lens' AspsDelete Text
+adUserKey
+  = lens _adUserKey (\ s a -> s{_adUserKey = a})
+
+instance GoogleRequest AspsDelete where
+        type Rs AspsDelete = ()
+        requestClient AspsDelete{..}
+          = go _adUserKey _adCodeId (Just AltJSON)
+              directoryService
+          where go
+                  = buildClient (Proxy :: Proxy AspsDeleteResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Directory/Asps/Get.hs b/gen/Network/Google/Resource/Directory/Asps/Get.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Directory/Asps/Get.hs
@@ -0,0 +1,98 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.Directory.Asps.Get
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Get information about an ASP issued by a user.
+--
+-- /See:/ <https://developers.google.com/admin-sdk/directory/ Admin Directory API Reference> for @directory.asps.get@.
+module Network.Google.Resource.Directory.Asps.Get
+    (
+    -- * REST Resource
+      AspsGetResource
+
+    -- * Creating a Request
+    , aspsGet
+    , AspsGet
+
+    -- * Request Lenses
+    , agCodeId
+    , agUserKey
+    ) where
+
+import           Network.Google.Directory.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @directory.asps.get@ method which the
+-- 'AspsGet' request conforms to.
+type AspsGetResource =
+     "admin" :>
+       "directory" :>
+         "v1" :>
+           "users" :>
+             Capture "userKey" Text :>
+               "asps" :>
+                 Capture "codeId" (Textual Int32) :>
+                   QueryParam "alt" AltJSON :> Get '[JSON] Asp
+
+-- | Get information about an ASP issued by a user.
+--
+-- /See:/ 'aspsGet' smart constructor.
+data AspsGet = AspsGet
+    { _agCodeId  :: !(Textual Int32)
+    , _agUserKey :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'AspsGet' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'agCodeId'
+--
+-- * 'agUserKey'
+aspsGet
+    :: Int32 -- ^ 'agCodeId'
+    -> Text -- ^ 'agUserKey'
+    -> AspsGet
+aspsGet pAgCodeId_ pAgUserKey_ =
+    AspsGet
+    { _agCodeId = _Coerce # pAgCodeId_
+    , _agUserKey = pAgUserKey_
+    }
+
+-- | The unique ID of the ASP.
+agCodeId :: Lens' AspsGet Int32
+agCodeId
+  = lens _agCodeId (\ s a -> s{_agCodeId = a}) .
+      _Coerce
+
+-- | Identifies the user in the API request. The value can be the user\'s
+-- primary email address, alias email address, or unique user ID.
+agUserKey :: Lens' AspsGet Text
+agUserKey
+  = lens _agUserKey (\ s a -> s{_agUserKey = a})
+
+instance GoogleRequest AspsGet where
+        type Rs AspsGet = Asp
+        requestClient AspsGet{..}
+          = go _agUserKey _agCodeId (Just AltJSON)
+              directoryService
+          where go
+                  = buildClient (Proxy :: Proxy AspsGetResource) mempty
diff --git a/gen/Network/Google/Resource/Directory/Asps/List.hs b/gen/Network/Google/Resource/Directory/Asps/List.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Directory/Asps/List.hs
@@ -0,0 +1,85 @@
+{-# 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.Directory.Asps.List
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- List the ASPs issued by a user.
+--
+-- /See:/ <https://developers.google.com/admin-sdk/directory/ Admin Directory API Reference> for @directory.asps.list@.
+module Network.Google.Resource.Directory.Asps.List
+    (
+    -- * REST Resource
+      AspsListResource
+
+    -- * Creating a Request
+    , aspsList
+    , AspsList
+
+    -- * Request Lenses
+    , alUserKey
+    ) where
+
+import           Network.Google.Directory.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @directory.asps.list@ method which the
+-- 'AspsList' request conforms to.
+type AspsListResource =
+     "admin" :>
+       "directory" :>
+         "v1" :>
+           "users" :>
+             Capture "userKey" Text :>
+               "asps" :>
+                 QueryParam "alt" AltJSON :> Get '[JSON] Asps
+
+-- | List the ASPs issued by a user.
+--
+-- /See:/ 'aspsList' smart constructor.
+newtype AspsList = AspsList
+    { _alUserKey :: Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'AspsList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'alUserKey'
+aspsList
+    :: Text -- ^ 'alUserKey'
+    -> AspsList
+aspsList pAlUserKey_ =
+    AspsList
+    { _alUserKey = pAlUserKey_
+    }
+
+-- | Identifies the user in the API request. The value can be the user\'s
+-- primary email address, alias email address, or unique user ID.
+alUserKey :: Lens' AspsList Text
+alUserKey
+  = lens _alUserKey (\ s a -> s{_alUserKey = a})
+
+instance GoogleRequest AspsList where
+        type Rs AspsList = Asps
+        requestClient AspsList{..}
+          = go _alUserKey (Just AltJSON) directoryService
+          where go
+                  = buildClient (Proxy :: Proxy AspsListResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Directory/ChromeosDevices/Get.hs b/gen/Network/Google/Resource/Directory/ChromeosDevices/Get.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Directory/ChromeosDevices/Get.hs
@@ -0,0 +1,115 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.Directory.ChromeosDevices.Get
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Retrieve Chrome OS Device
+--
+-- /See:/ <https://developers.google.com/admin-sdk/directory/ Admin Directory API Reference> for @directory.chromeosdevices.get@.
+module Network.Google.Resource.Directory.ChromeosDevices.Get
+    (
+    -- * REST Resource
+      ChromeosDevicesGetResource
+
+    -- * Creating a Request
+    , chromeosDevicesGet
+    , ChromeosDevicesGet
+
+    -- * Request Lenses
+    , cdgCustomerId
+    , cdgDeviceId
+    , cdgProjection
+    ) where
+
+import           Network.Google.Directory.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @directory.chromeosdevices.get@ method which the
+-- 'ChromeosDevicesGet' request conforms to.
+type ChromeosDevicesGetResource =
+     "admin" :>
+       "directory" :>
+         "v1" :>
+           "customer" :>
+             Capture "customerId" Text :>
+               "devices" :>
+                 "chromeos" :>
+                   Capture "deviceId" Text :>
+                     QueryParam "projection" ChromeosDevicesGetProjection
+                       :>
+                       QueryParam "alt" AltJSON :>
+                         Get '[JSON] ChromeOSDevice
+
+-- | Retrieve Chrome OS Device
+--
+-- /See:/ 'chromeosDevicesGet' smart constructor.
+data ChromeosDevicesGet = ChromeosDevicesGet
+    { _cdgCustomerId :: !Text
+    , _cdgDeviceId   :: !Text
+    , _cdgProjection :: !(Maybe ChromeosDevicesGetProjection)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ChromeosDevicesGet' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cdgCustomerId'
+--
+-- * 'cdgDeviceId'
+--
+-- * 'cdgProjection'
+chromeosDevicesGet
+    :: Text -- ^ 'cdgCustomerId'
+    -> Text -- ^ 'cdgDeviceId'
+    -> ChromeosDevicesGet
+chromeosDevicesGet pCdgCustomerId_ pCdgDeviceId_ =
+    ChromeosDevicesGet
+    { _cdgCustomerId = pCdgCustomerId_
+    , _cdgDeviceId = pCdgDeviceId_
+    , _cdgProjection = Nothing
+    }
+
+-- | Immutable id of the Google Apps account
+cdgCustomerId :: Lens' ChromeosDevicesGet Text
+cdgCustomerId
+  = lens _cdgCustomerId
+      (\ s a -> s{_cdgCustomerId = a})
+
+-- | Immutable id of Chrome OS Device
+cdgDeviceId :: Lens' ChromeosDevicesGet Text
+cdgDeviceId
+  = lens _cdgDeviceId (\ s a -> s{_cdgDeviceId = a})
+
+-- | Restrict information returned to a set of selected fields.
+cdgProjection :: Lens' ChromeosDevicesGet (Maybe ChromeosDevicesGetProjection)
+cdgProjection
+  = lens _cdgProjection
+      (\ s a -> s{_cdgProjection = a})
+
+instance GoogleRequest ChromeosDevicesGet where
+        type Rs ChromeosDevicesGet = ChromeOSDevice
+        requestClient ChromeosDevicesGet{..}
+          = go _cdgCustomerId _cdgDeviceId _cdgProjection
+              (Just AltJSON)
+              directoryService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy ChromeosDevicesGetResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Directory/ChromeosDevices/List.hs b/gen/Network/Google/Resource/Directory/ChromeosDevices/List.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Directory/ChromeosDevices/List.hs
@@ -0,0 +1,166 @@
+{-# 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.Directory.ChromeosDevices.List
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Retrieve all Chrome OS Devices of a customer (paginated)
+--
+-- /See:/ <https://developers.google.com/admin-sdk/directory/ Admin Directory API Reference> for @directory.chromeosdevices.list@.
+module Network.Google.Resource.Directory.ChromeosDevices.List
+    (
+    -- * REST Resource
+      ChromeosDevicesListResource
+
+    -- * Creating a Request
+    , chromeosDevicesList
+    , ChromeosDevicesList
+
+    -- * Request Lenses
+    , cdlOrderBy
+    , cdlCustomerId
+    , cdlSortOrder
+    , cdlQuery
+    , cdlProjection
+    , cdlPageToken
+    , cdlMaxResults
+    ) where
+
+import           Network.Google.Directory.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @directory.chromeosdevices.list@ method which the
+-- 'ChromeosDevicesList' request conforms to.
+type ChromeosDevicesListResource =
+     "admin" :>
+       "directory" :>
+         "v1" :>
+           "customer" :>
+             Capture "customerId" Text :>
+               "devices" :>
+                 "chromeos" :>
+                   QueryParam "orderBy" ChromeosDevicesListOrderBy :>
+                     QueryParam "sortOrder" ChromeosDevicesListSortOrder
+                       :>
+                       QueryParam "query" Text :>
+                         QueryParam "projection" ChromeosDevicesListProjection
+                           :>
+                           QueryParam "pageToken" Text :>
+                             QueryParam "maxResults" (Textual Int32) :>
+                               QueryParam "alt" AltJSON :>
+                                 Get '[JSON] ChromeOSDevices
+
+-- | Retrieve all Chrome OS Devices of a customer (paginated)
+--
+-- /See:/ 'chromeosDevicesList' smart constructor.
+data ChromeosDevicesList = ChromeosDevicesList
+    { _cdlOrderBy    :: !(Maybe ChromeosDevicesListOrderBy)
+    , _cdlCustomerId :: !Text
+    , _cdlSortOrder  :: !(Maybe ChromeosDevicesListSortOrder)
+    , _cdlQuery      :: !(Maybe Text)
+    , _cdlProjection :: !(Maybe ChromeosDevicesListProjection)
+    , _cdlPageToken  :: !(Maybe Text)
+    , _cdlMaxResults :: !(Maybe (Textual Int32))
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ChromeosDevicesList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cdlOrderBy'
+--
+-- * 'cdlCustomerId'
+--
+-- * 'cdlSortOrder'
+--
+-- * 'cdlQuery'
+--
+-- * 'cdlProjection'
+--
+-- * 'cdlPageToken'
+--
+-- * 'cdlMaxResults'
+chromeosDevicesList
+    :: Text -- ^ 'cdlCustomerId'
+    -> ChromeosDevicesList
+chromeosDevicesList pCdlCustomerId_ =
+    ChromeosDevicesList
+    { _cdlOrderBy = Nothing
+    , _cdlCustomerId = pCdlCustomerId_
+    , _cdlSortOrder = Nothing
+    , _cdlQuery = Nothing
+    , _cdlProjection = Nothing
+    , _cdlPageToken = Nothing
+    , _cdlMaxResults = Nothing
+    }
+
+-- | Column to use for sorting results
+cdlOrderBy :: Lens' ChromeosDevicesList (Maybe ChromeosDevicesListOrderBy)
+cdlOrderBy
+  = lens _cdlOrderBy (\ s a -> s{_cdlOrderBy = a})
+
+-- | Immutable id of the Google Apps account
+cdlCustomerId :: Lens' ChromeosDevicesList Text
+cdlCustomerId
+  = lens _cdlCustomerId
+      (\ s a -> s{_cdlCustomerId = a})
+
+-- | Whether to return results in ascending or descending order. Only of use
+-- when orderBy is also used
+cdlSortOrder :: Lens' ChromeosDevicesList (Maybe ChromeosDevicesListSortOrder)
+cdlSortOrder
+  = lens _cdlSortOrder (\ s a -> s{_cdlSortOrder = a})
+
+-- | Search string in the format given at
+-- http:\/\/support.google.com\/chromeos\/a\/bin\/answer.py?hl=en&answer=1698333
+cdlQuery :: Lens' ChromeosDevicesList (Maybe Text)
+cdlQuery = lens _cdlQuery (\ s a -> s{_cdlQuery = a})
+
+-- | Restrict information returned to a set of selected fields.
+cdlProjection :: Lens' ChromeosDevicesList (Maybe ChromeosDevicesListProjection)
+cdlProjection
+  = lens _cdlProjection
+      (\ s a -> s{_cdlProjection = a})
+
+-- | Token to specify next page in the list
+cdlPageToken :: Lens' ChromeosDevicesList (Maybe Text)
+cdlPageToken
+  = lens _cdlPageToken (\ s a -> s{_cdlPageToken = a})
+
+-- | Maximum number of results to return. Default is 100
+cdlMaxResults :: Lens' ChromeosDevicesList (Maybe Int32)
+cdlMaxResults
+  = lens _cdlMaxResults
+      (\ s a -> s{_cdlMaxResults = a})
+      . mapping _Coerce
+
+instance GoogleRequest ChromeosDevicesList where
+        type Rs ChromeosDevicesList = ChromeOSDevices
+        requestClient ChromeosDevicesList{..}
+          = go _cdlCustomerId _cdlOrderBy _cdlSortOrder
+              _cdlQuery
+              _cdlProjection
+              _cdlPageToken
+              _cdlMaxResults
+              (Just AltJSON)
+              directoryService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy ChromeosDevicesListResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Directory/ChromeosDevices/Patch.hs b/gen/Network/Google/Resource/Directory/ChromeosDevices/Patch.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Directory/ChromeosDevices/Patch.hs
@@ -0,0 +1,129 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.Directory.ChromeosDevices.Patch
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Update Chrome OS Device. This method supports patch semantics.
+--
+-- /See:/ <https://developers.google.com/admin-sdk/directory/ Admin Directory API Reference> for @directory.chromeosdevices.patch@.
+module Network.Google.Resource.Directory.ChromeosDevices.Patch
+    (
+    -- * REST Resource
+      ChromeosDevicesPatchResource
+
+    -- * Creating a Request
+    , chromeosDevicesPatch
+    , ChromeosDevicesPatch
+
+    -- * Request Lenses
+    , cdpPayload
+    , cdpCustomerId
+    , cdpDeviceId
+    , cdpProjection
+    ) where
+
+import           Network.Google.Directory.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @directory.chromeosdevices.patch@ method which the
+-- 'ChromeosDevicesPatch' request conforms to.
+type ChromeosDevicesPatchResource =
+     "admin" :>
+       "directory" :>
+         "v1" :>
+           "customer" :>
+             Capture "customerId" Text :>
+               "devices" :>
+                 "chromeos" :>
+                   Capture "deviceId" Text :>
+                     QueryParam "projection"
+                       ChromeosDevicesPatchProjection
+                       :>
+                       QueryParam "alt" AltJSON :>
+                         ReqBody '[JSON] ChromeOSDevice :>
+                           Patch '[JSON] ChromeOSDevice
+
+-- | Update Chrome OS Device. This method supports patch semantics.
+--
+-- /See:/ 'chromeosDevicesPatch' smart constructor.
+data ChromeosDevicesPatch = ChromeosDevicesPatch
+    { _cdpPayload    :: !ChromeOSDevice
+    , _cdpCustomerId :: !Text
+    , _cdpDeviceId   :: !Text
+    , _cdpProjection :: !(Maybe ChromeosDevicesPatchProjection)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ChromeosDevicesPatch' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cdpPayload'
+--
+-- * 'cdpCustomerId'
+--
+-- * 'cdpDeviceId'
+--
+-- * 'cdpProjection'
+chromeosDevicesPatch
+    :: ChromeOSDevice -- ^ 'cdpPayload'
+    -> Text -- ^ 'cdpCustomerId'
+    -> Text -- ^ 'cdpDeviceId'
+    -> ChromeosDevicesPatch
+chromeosDevicesPatch pCdpPayload_ pCdpCustomerId_ pCdpDeviceId_ =
+    ChromeosDevicesPatch
+    { _cdpPayload = pCdpPayload_
+    , _cdpCustomerId = pCdpCustomerId_
+    , _cdpDeviceId = pCdpDeviceId_
+    , _cdpProjection = Nothing
+    }
+
+-- | Multipart request metadata.
+cdpPayload :: Lens' ChromeosDevicesPatch ChromeOSDevice
+cdpPayload
+  = lens _cdpPayload (\ s a -> s{_cdpPayload = a})
+
+-- | Immutable id of the Google Apps account
+cdpCustomerId :: Lens' ChromeosDevicesPatch Text
+cdpCustomerId
+  = lens _cdpCustomerId
+      (\ s a -> s{_cdpCustomerId = a})
+
+-- | Immutable id of Chrome OS Device
+cdpDeviceId :: Lens' ChromeosDevicesPatch Text
+cdpDeviceId
+  = lens _cdpDeviceId (\ s a -> s{_cdpDeviceId = a})
+
+-- | Restrict information returned to a set of selected fields.
+cdpProjection :: Lens' ChromeosDevicesPatch (Maybe ChromeosDevicesPatchProjection)
+cdpProjection
+  = lens _cdpProjection
+      (\ s a -> s{_cdpProjection = a})
+
+instance GoogleRequest ChromeosDevicesPatch where
+        type Rs ChromeosDevicesPatch = ChromeOSDevice
+        requestClient ChromeosDevicesPatch{..}
+          = go _cdpCustomerId _cdpDeviceId _cdpProjection
+              (Just AltJSON)
+              _cdpPayload
+              directoryService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy ChromeosDevicesPatchResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Directory/ChromeosDevices/Update.hs b/gen/Network/Google/Resource/Directory/ChromeosDevices/Update.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Directory/ChromeosDevices/Update.hs
@@ -0,0 +1,129 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.Directory.ChromeosDevices.Update
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Update Chrome OS Device
+--
+-- /See:/ <https://developers.google.com/admin-sdk/directory/ Admin Directory API Reference> for @directory.chromeosdevices.update@.
+module Network.Google.Resource.Directory.ChromeosDevices.Update
+    (
+    -- * REST Resource
+      ChromeosDevicesUpdateResource
+
+    -- * Creating a Request
+    , chromeosDevicesUpdate
+    , ChromeosDevicesUpdate
+
+    -- * Request Lenses
+    , cduPayload
+    , cduCustomerId
+    , cduDeviceId
+    , cduProjection
+    ) where
+
+import           Network.Google.Directory.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @directory.chromeosdevices.update@ method which the
+-- 'ChromeosDevicesUpdate' request conforms to.
+type ChromeosDevicesUpdateResource =
+     "admin" :>
+       "directory" :>
+         "v1" :>
+           "customer" :>
+             Capture "customerId" Text :>
+               "devices" :>
+                 "chromeos" :>
+                   Capture "deviceId" Text :>
+                     QueryParam "projection"
+                       ChromeosDevicesUpdateProjection
+                       :>
+                       QueryParam "alt" AltJSON :>
+                         ReqBody '[JSON] ChromeOSDevice :>
+                           Put '[JSON] ChromeOSDevice
+
+-- | Update Chrome OS Device
+--
+-- /See:/ 'chromeosDevicesUpdate' smart constructor.
+data ChromeosDevicesUpdate = ChromeosDevicesUpdate
+    { _cduPayload    :: !ChromeOSDevice
+    , _cduCustomerId :: !Text
+    , _cduDeviceId   :: !Text
+    , _cduProjection :: !(Maybe ChromeosDevicesUpdateProjection)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ChromeosDevicesUpdate' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cduPayload'
+--
+-- * 'cduCustomerId'
+--
+-- * 'cduDeviceId'
+--
+-- * 'cduProjection'
+chromeosDevicesUpdate
+    :: ChromeOSDevice -- ^ 'cduPayload'
+    -> Text -- ^ 'cduCustomerId'
+    -> Text -- ^ 'cduDeviceId'
+    -> ChromeosDevicesUpdate
+chromeosDevicesUpdate pCduPayload_ pCduCustomerId_ pCduDeviceId_ =
+    ChromeosDevicesUpdate
+    { _cduPayload = pCduPayload_
+    , _cduCustomerId = pCduCustomerId_
+    , _cduDeviceId = pCduDeviceId_
+    , _cduProjection = Nothing
+    }
+
+-- | Multipart request metadata.
+cduPayload :: Lens' ChromeosDevicesUpdate ChromeOSDevice
+cduPayload
+  = lens _cduPayload (\ s a -> s{_cduPayload = a})
+
+-- | Immutable id of the Google Apps account
+cduCustomerId :: Lens' ChromeosDevicesUpdate Text
+cduCustomerId
+  = lens _cduCustomerId
+      (\ s a -> s{_cduCustomerId = a})
+
+-- | Immutable id of Chrome OS Device
+cduDeviceId :: Lens' ChromeosDevicesUpdate Text
+cduDeviceId
+  = lens _cduDeviceId (\ s a -> s{_cduDeviceId = a})
+
+-- | Restrict information returned to a set of selected fields.
+cduProjection :: Lens' ChromeosDevicesUpdate (Maybe ChromeosDevicesUpdateProjection)
+cduProjection
+  = lens _cduProjection
+      (\ s a -> s{_cduProjection = a})
+
+instance GoogleRequest ChromeosDevicesUpdate where
+        type Rs ChromeosDevicesUpdate = ChromeOSDevice
+        requestClient ChromeosDevicesUpdate{..}
+          = go _cduCustomerId _cduDeviceId _cduProjection
+              (Just AltJSON)
+              _cduPayload
+              directoryService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy ChromeosDevicesUpdateResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Directory/Customers/Get.hs b/gen/Network/Google/Resource/Directory/Customers/Get.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Directory/Customers/Get.hs
@@ -0,0 +1,84 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.Directory.Customers.Get
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Retrives a customer.
+--
+-- /See:/ <https://developers.google.com/admin-sdk/directory/ Admin Directory API Reference> for @directory.customers.get@.
+module Network.Google.Resource.Directory.Customers.Get
+    (
+    -- * REST Resource
+      CustomersGetResource
+
+    -- * Creating a Request
+    , customersGet
+    , CustomersGet
+
+    -- * Request Lenses
+    , cgCustomerKey
+    ) where
+
+import           Network.Google.Directory.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @directory.customers.get@ method which the
+-- 'CustomersGet' request conforms to.
+type CustomersGetResource =
+     "admin" :>
+       "directory" :>
+         "v1" :>
+           "customers" :>
+             Capture "customerKey" Text :>
+               QueryParam "alt" AltJSON :> Get '[JSON] Customer
+
+-- | Retrives a customer.
+--
+-- /See:/ 'customersGet' smart constructor.
+newtype CustomersGet = CustomersGet
+    { _cgCustomerKey :: Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CustomersGet' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cgCustomerKey'
+customersGet
+    :: Text -- ^ 'cgCustomerKey'
+    -> CustomersGet
+customersGet pCgCustomerKey_ =
+    CustomersGet
+    { _cgCustomerKey = pCgCustomerKey_
+    }
+
+-- | Id of the customer to be retrieved
+cgCustomerKey :: Lens' CustomersGet Text
+cgCustomerKey
+  = lens _cgCustomerKey
+      (\ s a -> s{_cgCustomerKey = a})
+
+instance GoogleRequest CustomersGet where
+        type Rs CustomersGet = Customer
+        requestClient CustomersGet{..}
+          = go _cgCustomerKey (Just AltJSON) directoryService
+          where go
+                  = buildClient (Proxy :: Proxy CustomersGetResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Directory/Customers/Patch.hs b/gen/Network/Google/Resource/Directory/Customers/Patch.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Directory/Customers/Patch.hs
@@ -0,0 +1,97 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.Directory.Customers.Patch
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Updates a customer. This method supports patch semantics.
+--
+-- /See:/ <https://developers.google.com/admin-sdk/directory/ Admin Directory API Reference> for @directory.customers.patch@.
+module Network.Google.Resource.Directory.Customers.Patch
+    (
+    -- * REST Resource
+      CustomersPatchResource
+
+    -- * Creating a Request
+    , customersPatch
+    , CustomersPatch
+
+    -- * Request Lenses
+    , cpCustomerKey
+    , cpPayload
+    ) where
+
+import           Network.Google.Directory.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @directory.customers.patch@ method which the
+-- 'CustomersPatch' request conforms to.
+type CustomersPatchResource =
+     "admin" :>
+       "directory" :>
+         "v1" :>
+           "customers" :>
+             Capture "customerKey" Text :>
+               QueryParam "alt" AltJSON :>
+                 ReqBody '[JSON] Customer :> Patch '[JSON] Customer
+
+-- | Updates a customer. This method supports patch semantics.
+--
+-- /See:/ 'customersPatch' smart constructor.
+data CustomersPatch = CustomersPatch
+    { _cpCustomerKey :: !Text
+    , _cpPayload     :: !Customer
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CustomersPatch' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cpCustomerKey'
+--
+-- * 'cpPayload'
+customersPatch
+    :: Text -- ^ 'cpCustomerKey'
+    -> Customer -- ^ 'cpPayload'
+    -> CustomersPatch
+customersPatch pCpCustomerKey_ pCpPayload_ =
+    CustomersPatch
+    { _cpCustomerKey = pCpCustomerKey_
+    , _cpPayload = pCpPayload_
+    }
+
+-- | Id of the customer to be updated
+cpCustomerKey :: Lens' CustomersPatch Text
+cpCustomerKey
+  = lens _cpCustomerKey
+      (\ s a -> s{_cpCustomerKey = a})
+
+-- | Multipart request metadata.
+cpPayload :: Lens' CustomersPatch Customer
+cpPayload
+  = lens _cpPayload (\ s a -> s{_cpPayload = a})
+
+instance GoogleRequest CustomersPatch where
+        type Rs CustomersPatch = Customer
+        requestClient CustomersPatch{..}
+          = go _cpCustomerKey (Just AltJSON) _cpPayload
+              directoryService
+          where go
+                  = buildClient (Proxy :: Proxy CustomersPatchResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Directory/Customers/Update.hs b/gen/Network/Google/Resource/Directory/Customers/Update.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Directory/Customers/Update.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.Directory.Customers.Update
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Updates a customer.
+--
+-- /See:/ <https://developers.google.com/admin-sdk/directory/ Admin Directory API Reference> for @directory.customers.update@.
+module Network.Google.Resource.Directory.Customers.Update
+    (
+    -- * REST Resource
+      CustomersUpdateResource
+
+    -- * Creating a Request
+    , customersUpdate
+    , CustomersUpdate
+
+    -- * Request Lenses
+    , cuCustomerKey
+    , cuPayload
+    ) where
+
+import           Network.Google.Directory.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @directory.customers.update@ method which the
+-- 'CustomersUpdate' request conforms to.
+type CustomersUpdateResource =
+     "admin" :>
+       "directory" :>
+         "v1" :>
+           "customers" :>
+             Capture "customerKey" Text :>
+               QueryParam "alt" AltJSON :>
+                 ReqBody '[JSON] Customer :> Put '[JSON] Customer
+
+-- | Updates a customer.
+--
+-- /See:/ 'customersUpdate' smart constructor.
+data CustomersUpdate = CustomersUpdate
+    { _cuCustomerKey :: !Text
+    , _cuPayload     :: !Customer
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CustomersUpdate' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cuCustomerKey'
+--
+-- * 'cuPayload'
+customersUpdate
+    :: Text -- ^ 'cuCustomerKey'
+    -> Customer -- ^ 'cuPayload'
+    -> CustomersUpdate
+customersUpdate pCuCustomerKey_ pCuPayload_ =
+    CustomersUpdate
+    { _cuCustomerKey = pCuCustomerKey_
+    , _cuPayload = pCuPayload_
+    }
+
+-- | Id of the customer to be updated
+cuCustomerKey :: Lens' CustomersUpdate Text
+cuCustomerKey
+  = lens _cuCustomerKey
+      (\ s a -> s{_cuCustomerKey = a})
+
+-- | Multipart request metadata.
+cuPayload :: Lens' CustomersUpdate Customer
+cuPayload
+  = lens _cuPayload (\ s a -> s{_cuPayload = a})
+
+instance GoogleRequest CustomersUpdate where
+        type Rs CustomersUpdate = Customer
+        requestClient CustomersUpdate{..}
+          = go _cuCustomerKey (Just AltJSON) _cuPayload
+              directoryService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy CustomersUpdateResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Directory/DomainAliases/Delete.hs b/gen/Network/Google/Resource/Directory/DomainAliases/Delete.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Directory/DomainAliases/Delete.hs
@@ -0,0 +1,99 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.Directory.DomainAliases.Delete
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes a Domain Alias of the customer.
+--
+-- /See:/ <https://developers.google.com/admin-sdk/directory/ Admin Directory API Reference> for @directory.domainAliases.delete@.
+module Network.Google.Resource.Directory.DomainAliases.Delete
+    (
+    -- * REST Resource
+      DomainAliasesDeleteResource
+
+    -- * Creating a Request
+    , domainAliasesDelete
+    , DomainAliasesDelete
+
+    -- * Request Lenses
+    , dadDomainAliasName
+    , dadCustomer
+    ) where
+
+import           Network.Google.Directory.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @directory.domainAliases.delete@ method which the
+-- 'DomainAliasesDelete' request conforms to.
+type DomainAliasesDeleteResource =
+     "admin" :>
+       "directory" :>
+         "v1" :>
+           "customer" :>
+             Capture "customer" Text :>
+               "domainaliases" :>
+                 Capture "domainAliasName" Text :>
+                   QueryParam "alt" AltJSON :> Delete '[JSON] ()
+
+-- | Deletes a Domain Alias of the customer.
+--
+-- /See:/ 'domainAliasesDelete' smart constructor.
+data DomainAliasesDelete = DomainAliasesDelete
+    { _dadDomainAliasName :: !Text
+    , _dadCustomer        :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DomainAliasesDelete' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dadDomainAliasName'
+--
+-- * 'dadCustomer'
+domainAliasesDelete
+    :: Text -- ^ 'dadDomainAliasName'
+    -> Text -- ^ 'dadCustomer'
+    -> DomainAliasesDelete
+domainAliasesDelete pDadDomainAliasName_ pDadCustomer_ =
+    DomainAliasesDelete
+    { _dadDomainAliasName = pDadDomainAliasName_
+    , _dadCustomer = pDadCustomer_
+    }
+
+-- | Name of domain alias to be retrieved.
+dadDomainAliasName :: Lens' DomainAliasesDelete Text
+dadDomainAliasName
+  = lens _dadDomainAliasName
+      (\ s a -> s{_dadDomainAliasName = a})
+
+-- | Immutable id of the Google Apps account.
+dadCustomer :: Lens' DomainAliasesDelete Text
+dadCustomer
+  = lens _dadCustomer (\ s a -> s{_dadCustomer = a})
+
+instance GoogleRequest DomainAliasesDelete where
+        type Rs DomainAliasesDelete = ()
+        requestClient DomainAliasesDelete{..}
+          = go _dadCustomer _dadDomainAliasName (Just AltJSON)
+              directoryService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy DomainAliasesDeleteResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Directory/DomainAliases/Get.hs b/gen/Network/Google/Resource/Directory/DomainAliases/Get.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Directory/DomainAliases/Get.hs
@@ -0,0 +1,99 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.Directory.DomainAliases.Get
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Retrieves a domain alias of the customer.
+--
+-- /See:/ <https://developers.google.com/admin-sdk/directory/ Admin Directory API Reference> for @directory.domainAliases.get@.
+module Network.Google.Resource.Directory.DomainAliases.Get
+    (
+    -- * REST Resource
+      DomainAliasesGetResource
+
+    -- * Creating a Request
+    , domainAliasesGet
+    , DomainAliasesGet
+
+    -- * Request Lenses
+    , dagDomainAliasName
+    , dagCustomer
+    ) where
+
+import           Network.Google.Directory.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @directory.domainAliases.get@ method which the
+-- 'DomainAliasesGet' request conforms to.
+type DomainAliasesGetResource =
+     "admin" :>
+       "directory" :>
+         "v1" :>
+           "customer" :>
+             Capture "customer" Text :>
+               "domainaliases" :>
+                 Capture "domainAliasName" Text :>
+                   QueryParam "alt" AltJSON :> Get '[JSON] DomainAlias
+
+-- | Retrieves a domain alias of the customer.
+--
+-- /See:/ 'domainAliasesGet' smart constructor.
+data DomainAliasesGet = DomainAliasesGet
+    { _dagDomainAliasName :: !Text
+    , _dagCustomer        :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DomainAliasesGet' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dagDomainAliasName'
+--
+-- * 'dagCustomer'
+domainAliasesGet
+    :: Text -- ^ 'dagDomainAliasName'
+    -> Text -- ^ 'dagCustomer'
+    -> DomainAliasesGet
+domainAliasesGet pDagDomainAliasName_ pDagCustomer_ =
+    DomainAliasesGet
+    { _dagDomainAliasName = pDagDomainAliasName_
+    , _dagCustomer = pDagCustomer_
+    }
+
+-- | Name of domain alias to be retrieved.
+dagDomainAliasName :: Lens' DomainAliasesGet Text
+dagDomainAliasName
+  = lens _dagDomainAliasName
+      (\ s a -> s{_dagDomainAliasName = a})
+
+-- | Immutable id of the Google Apps account.
+dagCustomer :: Lens' DomainAliasesGet Text
+dagCustomer
+  = lens _dagCustomer (\ s a -> s{_dagCustomer = a})
+
+instance GoogleRequest DomainAliasesGet where
+        type Rs DomainAliasesGet = DomainAlias
+        requestClient DomainAliasesGet{..}
+          = go _dagCustomer _dagDomainAliasName (Just AltJSON)
+              directoryService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy DomainAliasesGetResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Directory/DomainAliases/Insert.hs b/gen/Network/Google/Resource/Directory/DomainAliases/Insert.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Directory/DomainAliases/Insert.hs
@@ -0,0 +1,99 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.Directory.DomainAliases.Insert
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Inserts a Domain alias of the customer.
+--
+-- /See:/ <https://developers.google.com/admin-sdk/directory/ Admin Directory API Reference> for @directory.domainAliases.insert@.
+module Network.Google.Resource.Directory.DomainAliases.Insert
+    (
+    -- * REST Resource
+      DomainAliasesInsertResource
+
+    -- * Creating a Request
+    , domainAliasesInsert
+    , DomainAliasesInsert
+
+    -- * Request Lenses
+    , daiPayload
+    , daiCustomer
+    ) where
+
+import           Network.Google.Directory.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @directory.domainAliases.insert@ method which the
+-- 'DomainAliasesInsert' request conforms to.
+type DomainAliasesInsertResource =
+     "admin" :>
+       "directory" :>
+         "v1" :>
+           "customer" :>
+             Capture "customer" Text :>
+               "domainaliases" :>
+                 QueryParam "alt" AltJSON :>
+                   ReqBody '[JSON] DomainAlias :>
+                     Post '[JSON] DomainAlias
+
+-- | Inserts a Domain alias of the customer.
+--
+-- /See:/ 'domainAliasesInsert' smart constructor.
+data DomainAliasesInsert = DomainAliasesInsert
+    { _daiPayload  :: !DomainAlias
+    , _daiCustomer :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DomainAliasesInsert' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'daiPayload'
+--
+-- * 'daiCustomer'
+domainAliasesInsert
+    :: DomainAlias -- ^ 'daiPayload'
+    -> Text -- ^ 'daiCustomer'
+    -> DomainAliasesInsert
+domainAliasesInsert pDaiPayload_ pDaiCustomer_ =
+    DomainAliasesInsert
+    { _daiPayload = pDaiPayload_
+    , _daiCustomer = pDaiCustomer_
+    }
+
+-- | Multipart request metadata.
+daiPayload :: Lens' DomainAliasesInsert DomainAlias
+daiPayload
+  = lens _daiPayload (\ s a -> s{_daiPayload = a})
+
+-- | Immutable id of the Google Apps account.
+daiCustomer :: Lens' DomainAliasesInsert Text
+daiCustomer
+  = lens _daiCustomer (\ s a -> s{_daiCustomer = a})
+
+instance GoogleRequest DomainAliasesInsert where
+        type Rs DomainAliasesInsert = DomainAlias
+        requestClient DomainAliasesInsert{..}
+          = go _daiCustomer (Just AltJSON) _daiPayload
+              directoryService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy DomainAliasesInsertResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Directory/DomainAliases/List.hs b/gen/Network/Google/Resource/Directory/DomainAliases/List.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Directory/DomainAliases/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.Directory.DomainAliases.List
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Lists the domain aliases of the customer.
+--
+-- /See:/ <https://developers.google.com/admin-sdk/directory/ Admin Directory API Reference> for @directory.domainAliases.list@.
+module Network.Google.Resource.Directory.DomainAliases.List
+    (
+    -- * REST Resource
+      DomainAliasesListResource
+
+    -- * Creating a Request
+    , domainAliasesList
+    , DomainAliasesList
+
+    -- * Request Lenses
+    , dalCustomer
+    , dalParentDomainName
+    ) where
+
+import           Network.Google.Directory.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @directory.domainAliases.list@ method which the
+-- 'DomainAliasesList' request conforms to.
+type DomainAliasesListResource =
+     "admin" :>
+       "directory" :>
+         "v1" :>
+           "customer" :>
+             Capture "customer" Text :>
+               "domainaliases" :>
+                 QueryParam "parentDomainName" Text :>
+                   QueryParam "alt" AltJSON :> Get '[JSON] DomainAliases
+
+-- | Lists the domain aliases of the customer.
+--
+-- /See:/ 'domainAliasesList' smart constructor.
+data DomainAliasesList = DomainAliasesList
+    { _dalCustomer         :: !Text
+    , _dalParentDomainName :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DomainAliasesList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dalCustomer'
+--
+-- * 'dalParentDomainName'
+domainAliasesList
+    :: Text -- ^ 'dalCustomer'
+    -> DomainAliasesList
+domainAliasesList pDalCustomer_ =
+    DomainAliasesList
+    { _dalCustomer = pDalCustomer_
+    , _dalParentDomainName = Nothing
+    }
+
+-- | Immutable id of the Google Apps account.
+dalCustomer :: Lens' DomainAliasesList Text
+dalCustomer
+  = lens _dalCustomer (\ s a -> s{_dalCustomer = a})
+
+-- | Name of the parent domain for which domain aliases are to be fetched.
+dalParentDomainName :: Lens' DomainAliasesList (Maybe Text)
+dalParentDomainName
+  = lens _dalParentDomainName
+      (\ s a -> s{_dalParentDomainName = a})
+
+instance GoogleRequest DomainAliasesList where
+        type Rs DomainAliasesList = DomainAliases
+        requestClient DomainAliasesList{..}
+          = go _dalCustomer _dalParentDomainName (Just AltJSON)
+              directoryService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy DomainAliasesListResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Directory/Domains/Delete.hs b/gen/Network/Google/Resource/Directory/Domains/Delete.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Directory/Domains/Delete.hs
@@ -0,0 +1,97 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.Directory.Domains.Delete
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes a domain of the customer.
+--
+-- /See:/ <https://developers.google.com/admin-sdk/directory/ Admin Directory API Reference> for @directory.domains.delete@.
+module Network.Google.Resource.Directory.Domains.Delete
+    (
+    -- * REST Resource
+      DomainsDeleteResource
+
+    -- * Creating a Request
+    , domainsDelete
+    , DomainsDelete
+
+    -- * Request Lenses
+    , ddCustomer
+    , ddDomainName
+    ) where
+
+import           Network.Google.Directory.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @directory.domains.delete@ method which the
+-- 'DomainsDelete' request conforms to.
+type DomainsDeleteResource =
+     "admin" :>
+       "directory" :>
+         "v1" :>
+           "customer" :>
+             Capture "customer" Text :>
+               "domains" :>
+                 Capture "domainName" Text :>
+                   QueryParam "alt" AltJSON :> Delete '[JSON] ()
+
+-- | Deletes a domain of the customer.
+--
+-- /See:/ 'domainsDelete' smart constructor.
+data DomainsDelete = DomainsDelete
+    { _ddCustomer   :: !Text
+    , _ddDomainName :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DomainsDelete' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ddCustomer'
+--
+-- * 'ddDomainName'
+domainsDelete
+    :: Text -- ^ 'ddCustomer'
+    -> Text -- ^ 'ddDomainName'
+    -> DomainsDelete
+domainsDelete pDdCustomer_ pDdDomainName_ =
+    DomainsDelete
+    { _ddCustomer = pDdCustomer_
+    , _ddDomainName = pDdDomainName_
+    }
+
+-- | Immutable id of the Google Apps account.
+ddCustomer :: Lens' DomainsDelete Text
+ddCustomer
+  = lens _ddCustomer (\ s a -> s{_ddCustomer = a})
+
+-- | Name of domain to be deleted
+ddDomainName :: Lens' DomainsDelete Text
+ddDomainName
+  = lens _ddDomainName (\ s a -> s{_ddDomainName = a})
+
+instance GoogleRequest DomainsDelete where
+        type Rs DomainsDelete = ()
+        requestClient DomainsDelete{..}
+          = go _ddCustomer _ddDomainName (Just AltJSON)
+              directoryService
+          where go
+                  = buildClient (Proxy :: Proxy DomainsDeleteResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Directory/Domains/Get.hs b/gen/Network/Google/Resource/Directory/Domains/Get.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Directory/Domains/Get.hs
@@ -0,0 +1,97 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.Directory.Domains.Get
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Retrives a domain of the customer.
+--
+-- /See:/ <https://developers.google.com/admin-sdk/directory/ Admin Directory API Reference> for @directory.domains.get@.
+module Network.Google.Resource.Directory.Domains.Get
+    (
+    -- * REST Resource
+      DomainsGetResource
+
+    -- * Creating a Request
+    , domainsGet
+    , DomainsGet
+
+    -- * Request Lenses
+    , dgCustomer
+    , dgDomainName
+    ) where
+
+import           Network.Google.Directory.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @directory.domains.get@ method which the
+-- 'DomainsGet' request conforms to.
+type DomainsGetResource =
+     "admin" :>
+       "directory" :>
+         "v1" :>
+           "customer" :>
+             Capture "customer" Text :>
+               "domains" :>
+                 Capture "domainName" Text :>
+                   QueryParam "alt" AltJSON :> Get '[JSON] Domains
+
+-- | Retrives a domain of the customer.
+--
+-- /See:/ 'domainsGet' smart constructor.
+data DomainsGet = DomainsGet
+    { _dgCustomer   :: !Text
+    , _dgDomainName :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DomainsGet' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dgCustomer'
+--
+-- * 'dgDomainName'
+domainsGet
+    :: Text -- ^ 'dgCustomer'
+    -> Text -- ^ 'dgDomainName'
+    -> DomainsGet
+domainsGet pDgCustomer_ pDgDomainName_ =
+    DomainsGet
+    { _dgCustomer = pDgCustomer_
+    , _dgDomainName = pDgDomainName_
+    }
+
+-- | Immutable id of the Google Apps account.
+dgCustomer :: Lens' DomainsGet Text
+dgCustomer
+  = lens _dgCustomer (\ s a -> s{_dgCustomer = a})
+
+-- | Name of domain to be retrieved
+dgDomainName :: Lens' DomainsGet Text
+dgDomainName
+  = lens _dgDomainName (\ s a -> s{_dgDomainName = a})
+
+instance GoogleRequest DomainsGet where
+        type Rs DomainsGet = Domains
+        requestClient DomainsGet{..}
+          = go _dgCustomer _dgDomainName (Just AltJSON)
+              directoryService
+          where go
+                  = buildClient (Proxy :: Proxy DomainsGetResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Directory/Domains/Insert.hs b/gen/Network/Google/Resource/Directory/Domains/Insert.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Directory/Domains/Insert.hs
@@ -0,0 +1,97 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.Directory.Domains.Insert
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Inserts a domain of the customer.
+--
+-- /See:/ <https://developers.google.com/admin-sdk/directory/ Admin Directory API Reference> for @directory.domains.insert@.
+module Network.Google.Resource.Directory.Domains.Insert
+    (
+    -- * REST Resource
+      DomainsInsertResource
+
+    -- * Creating a Request
+    , domainsInsert
+    , DomainsInsert
+
+    -- * Request Lenses
+    , diPayload
+    , diCustomer
+    ) where
+
+import           Network.Google.Directory.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @directory.domains.insert@ method which the
+-- 'DomainsInsert' request conforms to.
+type DomainsInsertResource =
+     "admin" :>
+       "directory" :>
+         "v1" :>
+           "customer" :>
+             Capture "customer" Text :>
+               "domains" :>
+                 QueryParam "alt" AltJSON :>
+                   ReqBody '[JSON] Domains :> Post '[JSON] Domains
+
+-- | Inserts a domain of the customer.
+--
+-- /See:/ 'domainsInsert' smart constructor.
+data DomainsInsert = DomainsInsert
+    { _diPayload  :: !Domains
+    , _diCustomer :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DomainsInsert' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'diPayload'
+--
+-- * 'diCustomer'
+domainsInsert
+    :: Domains -- ^ 'diPayload'
+    -> Text -- ^ 'diCustomer'
+    -> DomainsInsert
+domainsInsert pDiPayload_ pDiCustomer_ =
+    DomainsInsert
+    { _diPayload = pDiPayload_
+    , _diCustomer = pDiCustomer_
+    }
+
+-- | Multipart request metadata.
+diPayload :: Lens' DomainsInsert Domains
+diPayload
+  = lens _diPayload (\ s a -> s{_diPayload = a})
+
+-- | Immutable id of the Google Apps account.
+diCustomer :: Lens' DomainsInsert Text
+diCustomer
+  = lens _diCustomer (\ s a -> s{_diCustomer = a})
+
+instance GoogleRequest DomainsInsert where
+        type Rs DomainsInsert = Domains
+        requestClient DomainsInsert{..}
+          = go _diCustomer (Just AltJSON) _diPayload
+              directoryService
+          where go
+                  = buildClient (Proxy :: Proxy DomainsInsertResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Directory/Domains/List.hs b/gen/Network/Google/Resource/Directory/Domains/List.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Directory/Domains/List.hs
@@ -0,0 +1,84 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.Directory.Domains.List
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Lists the domains of the customer.
+--
+-- /See:/ <https://developers.google.com/admin-sdk/directory/ Admin Directory API Reference> for @directory.domains.list@.
+module Network.Google.Resource.Directory.Domains.List
+    (
+    -- * REST Resource
+      DomainsListResource
+
+    -- * Creating a Request
+    , domainsList
+    , DomainsList
+
+    -- * Request Lenses
+    , dlCustomer
+    ) where
+
+import           Network.Google.Directory.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @directory.domains.list@ method which the
+-- 'DomainsList' request conforms to.
+type DomainsListResource =
+     "admin" :>
+       "directory" :>
+         "v1" :>
+           "customer" :>
+             Capture "customer" Text :>
+               "domains" :>
+                 QueryParam "alt" AltJSON :> Get '[JSON] Domains2
+
+-- | Lists the domains of the customer.
+--
+-- /See:/ 'domainsList' smart constructor.
+newtype DomainsList = DomainsList
+    { _dlCustomer :: Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DomainsList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dlCustomer'
+domainsList
+    :: Text -- ^ 'dlCustomer'
+    -> DomainsList
+domainsList pDlCustomer_ =
+    DomainsList
+    { _dlCustomer = pDlCustomer_
+    }
+
+-- | Immutable id of the Google Apps account.
+dlCustomer :: Lens' DomainsList Text
+dlCustomer
+  = lens _dlCustomer (\ s a -> s{_dlCustomer = a})
+
+instance GoogleRequest DomainsList where
+        type Rs DomainsList = Domains2
+        requestClient DomainsList{..}
+          = go _dlCustomer (Just AltJSON) directoryService
+          where go
+                  = buildClient (Proxy :: Proxy DomainsListResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Directory/Groups/Aliases/Delete.hs b/gen/Network/Google/Resource/Directory/Groups/Aliases/Delete.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Directory/Groups/Aliases/Delete.hs
@@ -0,0 +1,97 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.Directory.Groups.Aliases.Delete
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Remove a alias for the group
+--
+-- /See:/ <https://developers.google.com/admin-sdk/directory/ Admin Directory API Reference> for @directory.groups.aliases.delete@.
+module Network.Google.Resource.Directory.Groups.Aliases.Delete
+    (
+    -- * REST Resource
+      GroupsAliasesDeleteResource
+
+    -- * Creating a Request
+    , groupsAliasesDelete
+    , GroupsAliasesDelete
+
+    -- * Request Lenses
+    , gadGroupKey
+    , gadAlias
+    ) where
+
+import           Network.Google.Directory.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @directory.groups.aliases.delete@ method which the
+-- 'GroupsAliasesDelete' request conforms to.
+type GroupsAliasesDeleteResource =
+     "admin" :>
+       "directory" :>
+         "v1" :>
+           "groups" :>
+             Capture "groupKey" Text :>
+               "aliases" :>
+                 Capture "alias" Text :>
+                   QueryParam "alt" AltJSON :> Delete '[JSON] ()
+
+-- | Remove a alias for the group
+--
+-- /See:/ 'groupsAliasesDelete' smart constructor.
+data GroupsAliasesDelete = GroupsAliasesDelete
+    { _gadGroupKey :: !Text
+    , _gadAlias    :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'GroupsAliasesDelete' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gadGroupKey'
+--
+-- * 'gadAlias'
+groupsAliasesDelete
+    :: Text -- ^ 'gadGroupKey'
+    -> Text -- ^ 'gadAlias'
+    -> GroupsAliasesDelete
+groupsAliasesDelete pGadGroupKey_ pGadAlias_ =
+    GroupsAliasesDelete
+    { _gadGroupKey = pGadGroupKey_
+    , _gadAlias = pGadAlias_
+    }
+
+-- | Email or immutable Id of the group
+gadGroupKey :: Lens' GroupsAliasesDelete Text
+gadGroupKey
+  = lens _gadGroupKey (\ s a -> s{_gadGroupKey = a})
+
+-- | The alias to be removed
+gadAlias :: Lens' GroupsAliasesDelete Text
+gadAlias = lens _gadAlias (\ s a -> s{_gadAlias = a})
+
+instance GoogleRequest GroupsAliasesDelete where
+        type Rs GroupsAliasesDelete = ()
+        requestClient GroupsAliasesDelete{..}
+          = go _gadGroupKey _gadAlias (Just AltJSON)
+              directoryService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy GroupsAliasesDeleteResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Directory/Groups/Aliases/Insert.hs b/gen/Network/Google/Resource/Directory/Groups/Aliases/Insert.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Directory/Groups/Aliases/Insert.hs
@@ -0,0 +1,98 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.Directory.Groups.Aliases.Insert
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Add a alias for the group
+--
+-- /See:/ <https://developers.google.com/admin-sdk/directory/ Admin Directory API Reference> for @directory.groups.aliases.insert@.
+module Network.Google.Resource.Directory.Groups.Aliases.Insert
+    (
+    -- * REST Resource
+      GroupsAliasesInsertResource
+
+    -- * Creating a Request
+    , groupsAliasesInsert
+    , GroupsAliasesInsert
+
+    -- * Request Lenses
+    , gaiGroupKey
+    , gaiPayload
+    ) where
+
+import           Network.Google.Directory.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @directory.groups.aliases.insert@ method which the
+-- 'GroupsAliasesInsert' request conforms to.
+type GroupsAliasesInsertResource =
+     "admin" :>
+       "directory" :>
+         "v1" :>
+           "groups" :>
+             Capture "groupKey" Text :>
+               "aliases" :>
+                 QueryParam "alt" AltJSON :>
+                   ReqBody '[JSON] Alias :> Post '[JSON] Alias
+
+-- | Add a alias for the group
+--
+-- /See:/ 'groupsAliasesInsert' smart constructor.
+data GroupsAliasesInsert = GroupsAliasesInsert
+    { _gaiGroupKey :: !Text
+    , _gaiPayload  :: !Alias
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'GroupsAliasesInsert' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gaiGroupKey'
+--
+-- * 'gaiPayload'
+groupsAliasesInsert
+    :: Text -- ^ 'gaiGroupKey'
+    -> Alias -- ^ 'gaiPayload'
+    -> GroupsAliasesInsert
+groupsAliasesInsert pGaiGroupKey_ pGaiPayload_ =
+    GroupsAliasesInsert
+    { _gaiGroupKey = pGaiGroupKey_
+    , _gaiPayload = pGaiPayload_
+    }
+
+-- | Email or immutable Id of the group
+gaiGroupKey :: Lens' GroupsAliasesInsert Text
+gaiGroupKey
+  = lens _gaiGroupKey (\ s a -> s{_gaiGroupKey = a})
+
+-- | Multipart request metadata.
+gaiPayload :: Lens' GroupsAliasesInsert Alias
+gaiPayload
+  = lens _gaiPayload (\ s a -> s{_gaiPayload = a})
+
+instance GoogleRequest GroupsAliasesInsert where
+        type Rs GroupsAliasesInsert = Alias
+        requestClient GroupsAliasesInsert{..}
+          = go _gaiGroupKey (Just AltJSON) _gaiPayload
+              directoryService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy GroupsAliasesInsertResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Directory/Groups/Aliases/List.hs b/gen/Network/Google/Resource/Directory/Groups/Aliases/List.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Directory/Groups/Aliases/List.hs
@@ -0,0 +1,85 @@
+{-# 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.Directory.Groups.Aliases.List
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- List all aliases for a group
+--
+-- /See:/ <https://developers.google.com/admin-sdk/directory/ Admin Directory API Reference> for @directory.groups.aliases.list@.
+module Network.Google.Resource.Directory.Groups.Aliases.List
+    (
+    -- * REST Resource
+      GroupsAliasesListResource
+
+    -- * Creating a Request
+    , groupsAliasesList
+    , GroupsAliasesList
+
+    -- * Request Lenses
+    , galGroupKey
+    ) where
+
+import           Network.Google.Directory.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @directory.groups.aliases.list@ method which the
+-- 'GroupsAliasesList' request conforms to.
+type GroupsAliasesListResource =
+     "admin" :>
+       "directory" :>
+         "v1" :>
+           "groups" :>
+             Capture "groupKey" Text :>
+               "aliases" :>
+                 QueryParam "alt" AltJSON :> Get '[JSON] Aliases
+
+-- | List all aliases for a group
+--
+-- /See:/ 'groupsAliasesList' smart constructor.
+newtype GroupsAliasesList = GroupsAliasesList
+    { _galGroupKey :: Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'GroupsAliasesList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'galGroupKey'
+groupsAliasesList
+    :: Text -- ^ 'galGroupKey'
+    -> GroupsAliasesList
+groupsAliasesList pGalGroupKey_ =
+    GroupsAliasesList
+    { _galGroupKey = pGalGroupKey_
+    }
+
+-- | Email or immutable Id of the group
+galGroupKey :: Lens' GroupsAliasesList Text
+galGroupKey
+  = lens _galGroupKey (\ s a -> s{_galGroupKey = a})
+
+instance GoogleRequest GroupsAliasesList where
+        type Rs GroupsAliasesList = Aliases
+        requestClient GroupsAliasesList{..}
+          = go _galGroupKey (Just AltJSON) directoryService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy GroupsAliasesListResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Directory/Groups/Delete.hs b/gen/Network/Google/Resource/Directory/Groups/Delete.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Directory/Groups/Delete.hs
@@ -0,0 +1,83 @@
+{-# 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.Directory.Groups.Delete
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Delete Group
+--
+-- /See:/ <https://developers.google.com/admin-sdk/directory/ Admin Directory API Reference> for @directory.groups.delete@.
+module Network.Google.Resource.Directory.Groups.Delete
+    (
+    -- * REST Resource
+      GroupsDeleteResource
+
+    -- * Creating a Request
+    , groupsDelete
+    , GroupsDelete
+
+    -- * Request Lenses
+    , gdGroupKey
+    ) where
+
+import           Network.Google.Directory.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @directory.groups.delete@ method which the
+-- 'GroupsDelete' request conforms to.
+type GroupsDeleteResource =
+     "admin" :>
+       "directory" :>
+         "v1" :>
+           "groups" :>
+             Capture "groupKey" Text :>
+               QueryParam "alt" AltJSON :> Delete '[JSON] ()
+
+-- | Delete Group
+--
+-- /See:/ 'groupsDelete' smart constructor.
+newtype GroupsDelete = GroupsDelete
+    { _gdGroupKey :: Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'GroupsDelete' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gdGroupKey'
+groupsDelete
+    :: Text -- ^ 'gdGroupKey'
+    -> GroupsDelete
+groupsDelete pGdGroupKey_ =
+    GroupsDelete
+    { _gdGroupKey = pGdGroupKey_
+    }
+
+-- | Email or immutable Id of the group
+gdGroupKey :: Lens' GroupsDelete Text
+gdGroupKey
+  = lens _gdGroupKey (\ s a -> s{_gdGroupKey = a})
+
+instance GoogleRequest GroupsDelete where
+        type Rs GroupsDelete = ()
+        requestClient GroupsDelete{..}
+          = go _gdGroupKey (Just AltJSON) directoryService
+          where go
+                  = buildClient (Proxy :: Proxy GroupsDeleteResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Directory/Groups/Get.hs b/gen/Network/Google/Resource/Directory/Groups/Get.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Directory/Groups/Get.hs
@@ -0,0 +1,83 @@
+{-# 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.Directory.Groups.Get
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Retrieve Group
+--
+-- /See:/ <https://developers.google.com/admin-sdk/directory/ Admin Directory API Reference> for @directory.groups.get@.
+module Network.Google.Resource.Directory.Groups.Get
+    (
+    -- * REST Resource
+      GroupsGetResource
+
+    -- * Creating a Request
+    , groupsGet
+    , GroupsGet
+
+    -- * Request Lenses
+    , ggGroupKey
+    ) where
+
+import           Network.Google.Directory.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @directory.groups.get@ method which the
+-- 'GroupsGet' request conforms to.
+type GroupsGetResource =
+     "admin" :>
+       "directory" :>
+         "v1" :>
+           "groups" :>
+             Capture "groupKey" Text :>
+               QueryParam "alt" AltJSON :> Get '[JSON] Group
+
+-- | Retrieve Group
+--
+-- /See:/ 'groupsGet' smart constructor.
+newtype GroupsGet = GroupsGet
+    { _ggGroupKey :: Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'GroupsGet' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ggGroupKey'
+groupsGet
+    :: Text -- ^ 'ggGroupKey'
+    -> GroupsGet
+groupsGet pGgGroupKey_ =
+    GroupsGet
+    { _ggGroupKey = pGgGroupKey_
+    }
+
+-- | Email or immutable Id of the group
+ggGroupKey :: Lens' GroupsGet Text
+ggGroupKey
+  = lens _ggGroupKey (\ s a -> s{_ggGroupKey = a})
+
+instance GoogleRequest GroupsGet where
+        type Rs GroupsGet = Group
+        requestClient GroupsGet{..}
+          = go _ggGroupKey (Just AltJSON) directoryService
+          where go
+                  = buildClient (Proxy :: Proxy GroupsGetResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Directory/Groups/Insert.hs b/gen/Network/Google/Resource/Directory/Groups/Insert.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Directory/Groups/Insert.hs
@@ -0,0 +1,83 @@
+{-# 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.Directory.Groups.Insert
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Create Group
+--
+-- /See:/ <https://developers.google.com/admin-sdk/directory/ Admin Directory API Reference> for @directory.groups.insert@.
+module Network.Google.Resource.Directory.Groups.Insert
+    (
+    -- * REST Resource
+      GroupsInsertResource
+
+    -- * Creating a Request
+    , groupsInsert
+    , GroupsInsert
+
+    -- * Request Lenses
+    , giPayload
+    ) where
+
+import           Network.Google.Directory.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @directory.groups.insert@ method which the
+-- 'GroupsInsert' request conforms to.
+type GroupsInsertResource =
+     "admin" :>
+       "directory" :>
+         "v1" :>
+           "groups" :>
+             QueryParam "alt" AltJSON :>
+               ReqBody '[JSON] Group :> Post '[JSON] Group
+
+-- | Create Group
+--
+-- /See:/ 'groupsInsert' smart constructor.
+newtype GroupsInsert = GroupsInsert
+    { _giPayload :: Group
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'GroupsInsert' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'giPayload'
+groupsInsert
+    :: Group -- ^ 'giPayload'
+    -> GroupsInsert
+groupsInsert pGiPayload_ =
+    GroupsInsert
+    { _giPayload = pGiPayload_
+    }
+
+-- | Multipart request metadata.
+giPayload :: Lens' GroupsInsert Group
+giPayload
+  = lens _giPayload (\ s a -> s{_giPayload = a})
+
+instance GoogleRequest GroupsInsert where
+        type Rs GroupsInsert = Group
+        requestClient GroupsInsert{..}
+          = go (Just AltJSON) _giPayload directoryService
+          where go
+                  = buildClient (Proxy :: Proxy GroupsInsertResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Directory/Groups/List.hs b/gen/Network/Google/Resource/Directory/Groups/List.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Directory/Groups/List.hs
@@ -0,0 +1,133 @@
+{-# 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.Directory.Groups.List
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Retrieve all groups in a domain (paginated)
+--
+-- /See:/ <https://developers.google.com/admin-sdk/directory/ Admin Directory API Reference> for @directory.groups.list@.
+module Network.Google.Resource.Directory.Groups.List
+    (
+    -- * REST Resource
+      GroupsListResource
+
+    -- * Creating a Request
+    , groupsList
+    , GroupsList
+
+    -- * Request Lenses
+    , glDomain
+    , glCustomer
+    , glPageToken
+    , glUserKey
+    , glMaxResults
+    ) where
+
+import           Network.Google.Directory.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @directory.groups.list@ method which the
+-- 'GroupsList' request conforms to.
+type GroupsListResource =
+     "admin" :>
+       "directory" :>
+         "v1" :>
+           "groups" :>
+             QueryParam "domain" Text :>
+               QueryParam "customer" Text :>
+                 QueryParam "pageToken" Text :>
+                   QueryParam "userKey" Text :>
+                     QueryParam "maxResults" (Textual Int32) :>
+                       QueryParam "alt" AltJSON :> Get '[JSON] Groups
+
+-- | Retrieve all groups in a domain (paginated)
+--
+-- /See:/ 'groupsList' smart constructor.
+data GroupsList = GroupsList
+    { _glDomain     :: !(Maybe Text)
+    , _glCustomer   :: !(Maybe Text)
+    , _glPageToken  :: !(Maybe Text)
+    , _glUserKey    :: !(Maybe Text)
+    , _glMaxResults :: !(Maybe (Textual Int32))
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'GroupsList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'glDomain'
+--
+-- * 'glCustomer'
+--
+-- * 'glPageToken'
+--
+-- * 'glUserKey'
+--
+-- * 'glMaxResults'
+groupsList
+    :: GroupsList
+groupsList =
+    GroupsList
+    { _glDomain = Nothing
+    , _glCustomer = Nothing
+    , _glPageToken = Nothing
+    , _glUserKey = Nothing
+    , _glMaxResults = Nothing
+    }
+
+-- | Name of the domain. Fill this field to get groups from only this domain.
+-- To return all groups in a multi-domain fill customer field instead.
+glDomain :: Lens' GroupsList (Maybe Text)
+glDomain = lens _glDomain (\ s a -> s{_glDomain = a})
+
+-- | Immutable id of the Google Apps account. In case of multi-domain, to
+-- fetch all groups for a customer, fill this field instead of domain.
+glCustomer :: Lens' GroupsList (Maybe Text)
+glCustomer
+  = lens _glCustomer (\ s a -> s{_glCustomer = a})
+
+-- | Token to specify next page in the list
+glPageToken :: Lens' GroupsList (Maybe Text)
+glPageToken
+  = lens _glPageToken (\ s a -> s{_glPageToken = a})
+
+-- | Email or immutable Id of the user if only those groups are to be listed,
+-- the given user is a member of. If Id, it should match with id of user
+-- object
+glUserKey :: Lens' GroupsList (Maybe Text)
+glUserKey
+  = lens _glUserKey (\ s a -> s{_glUserKey = a})
+
+-- | Maximum number of results to return. Default is 200
+glMaxResults :: Lens' GroupsList (Maybe Int32)
+glMaxResults
+  = lens _glMaxResults (\ s a -> s{_glMaxResults = a})
+      . mapping _Coerce
+
+instance GoogleRequest GroupsList where
+        type Rs GroupsList = Groups
+        requestClient GroupsList{..}
+          = go _glDomain _glCustomer _glPageToken _glUserKey
+              _glMaxResults
+              (Just AltJSON)
+              directoryService
+          where go
+                  = buildClient (Proxy :: Proxy GroupsListResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Directory/Groups/Patch.hs b/gen/Network/Google/Resource/Directory/Groups/Patch.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Directory/Groups/Patch.hs
@@ -0,0 +1,97 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.Directory.Groups.Patch
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Update Group. This method supports patch semantics.
+--
+-- /See:/ <https://developers.google.com/admin-sdk/directory/ Admin Directory API Reference> for @directory.groups.patch@.
+module Network.Google.Resource.Directory.Groups.Patch
+    (
+    -- * REST Resource
+      GroupsPatchResource
+
+    -- * Creating a Request
+    , groupsPatch
+    , GroupsPatch
+
+    -- * Request Lenses
+    , gpGroupKey
+    , gpPayload
+    ) where
+
+import           Network.Google.Directory.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @directory.groups.patch@ method which the
+-- 'GroupsPatch' request conforms to.
+type GroupsPatchResource =
+     "admin" :>
+       "directory" :>
+         "v1" :>
+           "groups" :>
+             Capture "groupKey" Text :>
+               QueryParam "alt" AltJSON :>
+                 ReqBody '[JSON] Group :> Patch '[JSON] Group
+
+-- | Update Group. This method supports patch semantics.
+--
+-- /See:/ 'groupsPatch' smart constructor.
+data GroupsPatch = GroupsPatch
+    { _gpGroupKey :: !Text
+    , _gpPayload  :: !Group
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'GroupsPatch' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gpGroupKey'
+--
+-- * 'gpPayload'
+groupsPatch
+    :: Text -- ^ 'gpGroupKey'
+    -> Group -- ^ 'gpPayload'
+    -> GroupsPatch
+groupsPatch pGpGroupKey_ pGpPayload_ =
+    GroupsPatch
+    { _gpGroupKey = pGpGroupKey_
+    , _gpPayload = pGpPayload_
+    }
+
+-- | Email or immutable Id of the group. If Id, it should match with id of
+-- group object
+gpGroupKey :: Lens' GroupsPatch Text
+gpGroupKey
+  = lens _gpGroupKey (\ s a -> s{_gpGroupKey = a})
+
+-- | Multipart request metadata.
+gpPayload :: Lens' GroupsPatch Group
+gpPayload
+  = lens _gpPayload (\ s a -> s{_gpPayload = a})
+
+instance GoogleRequest GroupsPatch where
+        type Rs GroupsPatch = Group
+        requestClient GroupsPatch{..}
+          = go _gpGroupKey (Just AltJSON) _gpPayload
+              directoryService
+          where go
+                  = buildClient (Proxy :: Proxy GroupsPatchResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Directory/Groups/Update.hs b/gen/Network/Google/Resource/Directory/Groups/Update.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Directory/Groups/Update.hs
@@ -0,0 +1,97 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.Directory.Groups.Update
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Update Group
+--
+-- /See:/ <https://developers.google.com/admin-sdk/directory/ Admin Directory API Reference> for @directory.groups.update@.
+module Network.Google.Resource.Directory.Groups.Update
+    (
+    -- * REST Resource
+      GroupsUpdateResource
+
+    -- * Creating a Request
+    , groupsUpdate
+    , GroupsUpdate
+
+    -- * Request Lenses
+    , guGroupKey
+    , guPayload
+    ) where
+
+import           Network.Google.Directory.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @directory.groups.update@ method which the
+-- 'GroupsUpdate' request conforms to.
+type GroupsUpdateResource =
+     "admin" :>
+       "directory" :>
+         "v1" :>
+           "groups" :>
+             Capture "groupKey" Text :>
+               QueryParam "alt" AltJSON :>
+                 ReqBody '[JSON] Group :> Put '[JSON] Group
+
+-- | Update Group
+--
+-- /See:/ 'groupsUpdate' smart constructor.
+data GroupsUpdate = GroupsUpdate
+    { _guGroupKey :: !Text
+    , _guPayload  :: !Group
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'GroupsUpdate' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'guGroupKey'
+--
+-- * 'guPayload'
+groupsUpdate
+    :: Text -- ^ 'guGroupKey'
+    -> Group -- ^ 'guPayload'
+    -> GroupsUpdate
+groupsUpdate pGuGroupKey_ pGuPayload_ =
+    GroupsUpdate
+    { _guGroupKey = pGuGroupKey_
+    , _guPayload = pGuPayload_
+    }
+
+-- | Email or immutable Id of the group. If Id, it should match with id of
+-- group object
+guGroupKey :: Lens' GroupsUpdate Text
+guGroupKey
+  = lens _guGroupKey (\ s a -> s{_guGroupKey = a})
+
+-- | Multipart request metadata.
+guPayload :: Lens' GroupsUpdate Group
+guPayload
+  = lens _guPayload (\ s a -> s{_guPayload = a})
+
+instance GoogleRequest GroupsUpdate where
+        type Rs GroupsUpdate = Group
+        requestClient GroupsUpdate{..}
+          = go _guGroupKey (Just AltJSON) _guPayload
+              directoryService
+          where go
+                  = buildClient (Proxy :: Proxy GroupsUpdateResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Directory/Members/Delete.hs b/gen/Network/Google/Resource/Directory/Members/Delete.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Directory/Members/Delete.hs
@@ -0,0 +1,97 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.Directory.Members.Delete
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Remove membership.
+--
+-- /See:/ <https://developers.google.com/admin-sdk/directory/ Admin Directory API Reference> for @directory.members.delete@.
+module Network.Google.Resource.Directory.Members.Delete
+    (
+    -- * REST Resource
+      MembersDeleteResource
+
+    -- * Creating a Request
+    , membersDelete
+    , MembersDelete
+
+    -- * Request Lenses
+    , mdMemberKey
+    , mdGroupKey
+    ) where
+
+import           Network.Google.Directory.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @directory.members.delete@ method which the
+-- 'MembersDelete' request conforms to.
+type MembersDeleteResource =
+     "admin" :>
+       "directory" :>
+         "v1" :>
+           "groups" :>
+             Capture "groupKey" Text :>
+               "members" :>
+                 Capture "memberKey" Text :>
+                   QueryParam "alt" AltJSON :> Delete '[JSON] ()
+
+-- | Remove membership.
+--
+-- /See:/ 'membersDelete' smart constructor.
+data MembersDelete = MembersDelete
+    { _mdMemberKey :: !Text
+    , _mdGroupKey  :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'MembersDelete' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'mdMemberKey'
+--
+-- * 'mdGroupKey'
+membersDelete
+    :: Text -- ^ 'mdMemberKey'
+    -> Text -- ^ 'mdGroupKey'
+    -> MembersDelete
+membersDelete pMdMemberKey_ pMdGroupKey_ =
+    MembersDelete
+    { _mdMemberKey = pMdMemberKey_
+    , _mdGroupKey = pMdGroupKey_
+    }
+
+-- | Email or immutable Id of the member
+mdMemberKey :: Lens' MembersDelete Text
+mdMemberKey
+  = lens _mdMemberKey (\ s a -> s{_mdMemberKey = a})
+
+-- | Email or immutable Id of the group
+mdGroupKey :: Lens' MembersDelete Text
+mdGroupKey
+  = lens _mdGroupKey (\ s a -> s{_mdGroupKey = a})
+
+instance GoogleRequest MembersDelete where
+        type Rs MembersDelete = ()
+        requestClient MembersDelete{..}
+          = go _mdGroupKey _mdMemberKey (Just AltJSON)
+              directoryService
+          where go
+                  = buildClient (Proxy :: Proxy MembersDeleteResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Directory/Members/Get.hs b/gen/Network/Google/Resource/Directory/Members/Get.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Directory/Members/Get.hs
@@ -0,0 +1,97 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.Directory.Members.Get
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Retrieve Group Member
+--
+-- /See:/ <https://developers.google.com/admin-sdk/directory/ Admin Directory API Reference> for @directory.members.get@.
+module Network.Google.Resource.Directory.Members.Get
+    (
+    -- * REST Resource
+      MembersGetResource
+
+    -- * Creating a Request
+    , membersGet
+    , MembersGet
+
+    -- * Request Lenses
+    , mgMemberKey
+    , mgGroupKey
+    ) where
+
+import           Network.Google.Directory.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @directory.members.get@ method which the
+-- 'MembersGet' request conforms to.
+type MembersGetResource =
+     "admin" :>
+       "directory" :>
+         "v1" :>
+           "groups" :>
+             Capture "groupKey" Text :>
+               "members" :>
+                 Capture "memberKey" Text :>
+                   QueryParam "alt" AltJSON :> Get '[JSON] Member
+
+-- | Retrieve Group Member
+--
+-- /See:/ 'membersGet' smart constructor.
+data MembersGet = MembersGet
+    { _mgMemberKey :: !Text
+    , _mgGroupKey  :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'MembersGet' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'mgMemberKey'
+--
+-- * 'mgGroupKey'
+membersGet
+    :: Text -- ^ 'mgMemberKey'
+    -> Text -- ^ 'mgGroupKey'
+    -> MembersGet
+membersGet pMgMemberKey_ pMgGroupKey_ =
+    MembersGet
+    { _mgMemberKey = pMgMemberKey_
+    , _mgGroupKey = pMgGroupKey_
+    }
+
+-- | Email or immutable Id of the member
+mgMemberKey :: Lens' MembersGet Text
+mgMemberKey
+  = lens _mgMemberKey (\ s a -> s{_mgMemberKey = a})
+
+-- | Email or immutable Id of the group
+mgGroupKey :: Lens' MembersGet Text
+mgGroupKey
+  = lens _mgGroupKey (\ s a -> s{_mgGroupKey = a})
+
+instance GoogleRequest MembersGet where
+        type Rs MembersGet = Member
+        requestClient MembersGet{..}
+          = go _mgGroupKey _mgMemberKey (Just AltJSON)
+              directoryService
+          where go
+                  = buildClient (Proxy :: Proxy MembersGetResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Directory/Members/Insert.hs b/gen/Network/Google/Resource/Directory/Members/Insert.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Directory/Members/Insert.hs
@@ -0,0 +1,97 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.Directory.Members.Insert
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Add user to the specified group.
+--
+-- /See:/ <https://developers.google.com/admin-sdk/directory/ Admin Directory API Reference> for @directory.members.insert@.
+module Network.Google.Resource.Directory.Members.Insert
+    (
+    -- * REST Resource
+      MembersInsertResource
+
+    -- * Creating a Request
+    , membersInsert
+    , MembersInsert
+
+    -- * Request Lenses
+    , miGroupKey
+    , miPayload
+    ) where
+
+import           Network.Google.Directory.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @directory.members.insert@ method which the
+-- 'MembersInsert' request conforms to.
+type MembersInsertResource =
+     "admin" :>
+       "directory" :>
+         "v1" :>
+           "groups" :>
+             Capture "groupKey" Text :>
+               "members" :>
+                 QueryParam "alt" AltJSON :>
+                   ReqBody '[JSON] Member :> Post '[JSON] Member
+
+-- | Add user to the specified group.
+--
+-- /See:/ 'membersInsert' smart constructor.
+data MembersInsert = MembersInsert
+    { _miGroupKey :: !Text
+    , _miPayload  :: !Member
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'MembersInsert' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'miGroupKey'
+--
+-- * 'miPayload'
+membersInsert
+    :: Text -- ^ 'miGroupKey'
+    -> Member -- ^ 'miPayload'
+    -> MembersInsert
+membersInsert pMiGroupKey_ pMiPayload_ =
+    MembersInsert
+    { _miGroupKey = pMiGroupKey_
+    , _miPayload = pMiPayload_
+    }
+
+-- | Email or immutable Id of the group
+miGroupKey :: Lens' MembersInsert Text
+miGroupKey
+  = lens _miGroupKey (\ s a -> s{_miGroupKey = a})
+
+-- | Multipart request metadata.
+miPayload :: Lens' MembersInsert Member
+miPayload
+  = lens _miPayload (\ s a -> s{_miPayload = a})
+
+instance GoogleRequest MembersInsert where
+        type Rs MembersInsert = Member
+        requestClient MembersInsert{..}
+          = go _miGroupKey (Just AltJSON) _miPayload
+              directoryService
+          where go
+                  = buildClient (Proxy :: Proxy MembersInsertResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Directory/Members/List.hs b/gen/Network/Google/Resource/Directory/Members/List.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Directory/Members/List.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.Directory.Members.List
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Retrieve all members in a group (paginated)
+--
+-- /See:/ <https://developers.google.com/admin-sdk/directory/ Admin Directory API Reference> for @directory.members.list@.
+module Network.Google.Resource.Directory.Members.List
+    (
+    -- * REST Resource
+      MembersListResource
+
+    -- * Creating a Request
+    , membersList
+    , MembersList
+
+    -- * Request Lenses
+    , mlRoles
+    , mlGroupKey
+    , mlPageToken
+    , mlMaxResults
+    ) where
+
+import           Network.Google.Directory.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @directory.members.list@ method which the
+-- 'MembersList' request conforms to.
+type MembersListResource =
+     "admin" :>
+       "directory" :>
+         "v1" :>
+           "groups" :>
+             Capture "groupKey" Text :>
+               "members" :>
+                 QueryParam "roles" Text :>
+                   QueryParam "pageToken" Text :>
+                     QueryParam "maxResults" (Textual Int32) :>
+                       QueryParam "alt" AltJSON :> Get '[JSON] Members
+
+-- | Retrieve all members in a group (paginated)
+--
+-- /See:/ 'membersList' smart constructor.
+data MembersList = MembersList
+    { _mlRoles      :: !(Maybe Text)
+    , _mlGroupKey   :: !Text
+    , _mlPageToken  :: !(Maybe Text)
+    , _mlMaxResults :: !(Maybe (Textual Int32))
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'MembersList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'mlRoles'
+--
+-- * 'mlGroupKey'
+--
+-- * 'mlPageToken'
+--
+-- * 'mlMaxResults'
+membersList
+    :: Text -- ^ 'mlGroupKey'
+    -> MembersList
+membersList pMlGroupKey_ =
+    MembersList
+    { _mlRoles = Nothing
+    , _mlGroupKey = pMlGroupKey_
+    , _mlPageToken = Nothing
+    , _mlMaxResults = Nothing
+    }
+
+-- | Comma separated role values to filter list results on.
+mlRoles :: Lens' MembersList (Maybe Text)
+mlRoles = lens _mlRoles (\ s a -> s{_mlRoles = a})
+
+-- | Email or immutable Id of the group
+mlGroupKey :: Lens' MembersList Text
+mlGroupKey
+  = lens _mlGroupKey (\ s a -> s{_mlGroupKey = a})
+
+-- | Token to specify next page in the list
+mlPageToken :: Lens' MembersList (Maybe Text)
+mlPageToken
+  = lens _mlPageToken (\ s a -> s{_mlPageToken = a})
+
+-- | Maximum number of results to return. Default is 200
+mlMaxResults :: Lens' MembersList (Maybe Int32)
+mlMaxResults
+  = lens _mlMaxResults (\ s a -> s{_mlMaxResults = a})
+      . mapping _Coerce
+
+instance GoogleRequest MembersList where
+        type Rs MembersList = Members
+        requestClient MembersList{..}
+          = go _mlGroupKey _mlRoles _mlPageToken _mlMaxResults
+              (Just AltJSON)
+              directoryService
+          where go
+                  = buildClient (Proxy :: Proxy MembersListResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Directory/Members/Patch.hs b/gen/Network/Google/Resource/Directory/Members/Patch.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Directory/Members/Patch.hs
@@ -0,0 +1,114 @@
+{-# 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.Directory.Members.Patch
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Update membership of a user in the specified group. This method supports
+-- patch semantics.
+--
+-- /See:/ <https://developers.google.com/admin-sdk/directory/ Admin Directory API Reference> for @directory.members.patch@.
+module Network.Google.Resource.Directory.Members.Patch
+    (
+    -- * REST Resource
+      MembersPatchResource
+
+    -- * Creating a Request
+    , membersPatch
+    , MembersPatch
+
+    -- * Request Lenses
+    , mpMemberKey
+    , mpGroupKey
+    , mpPayload
+    ) where
+
+import           Network.Google.Directory.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @directory.members.patch@ method which the
+-- 'MembersPatch' request conforms to.
+type MembersPatchResource =
+     "admin" :>
+       "directory" :>
+         "v1" :>
+           "groups" :>
+             Capture "groupKey" Text :>
+               "members" :>
+                 Capture "memberKey" Text :>
+                   QueryParam "alt" AltJSON :>
+                     ReqBody '[JSON] Member :> Patch '[JSON] Member
+
+-- | Update membership of a user in the specified group. This method supports
+-- patch semantics.
+--
+-- /See:/ 'membersPatch' smart constructor.
+data MembersPatch = MembersPatch
+    { _mpMemberKey :: !Text
+    , _mpGroupKey  :: !Text
+    , _mpPayload   :: !Member
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'MembersPatch' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'mpMemberKey'
+--
+-- * 'mpGroupKey'
+--
+-- * 'mpPayload'
+membersPatch
+    :: Text -- ^ 'mpMemberKey'
+    -> Text -- ^ 'mpGroupKey'
+    -> Member -- ^ 'mpPayload'
+    -> MembersPatch
+membersPatch pMpMemberKey_ pMpGroupKey_ pMpPayload_ =
+    MembersPatch
+    { _mpMemberKey = pMpMemberKey_
+    , _mpGroupKey = pMpGroupKey_
+    , _mpPayload = pMpPayload_
+    }
+
+-- | Email or immutable Id of the user. If Id, it should match with id of
+-- member object
+mpMemberKey :: Lens' MembersPatch Text
+mpMemberKey
+  = lens _mpMemberKey (\ s a -> s{_mpMemberKey = a})
+
+-- | Email or immutable Id of the group. If Id, it should match with id of
+-- group object
+mpGroupKey :: Lens' MembersPatch Text
+mpGroupKey
+  = lens _mpGroupKey (\ s a -> s{_mpGroupKey = a})
+
+-- | Multipart request metadata.
+mpPayload :: Lens' MembersPatch Member
+mpPayload
+  = lens _mpPayload (\ s a -> s{_mpPayload = a})
+
+instance GoogleRequest MembersPatch where
+        type Rs MembersPatch = Member
+        requestClient MembersPatch{..}
+          = go _mpGroupKey _mpMemberKey (Just AltJSON)
+              _mpPayload
+              directoryService
+          where go
+                  = buildClient (Proxy :: Proxy MembersPatchResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Directory/Members/Update.hs b/gen/Network/Google/Resource/Directory/Members/Update.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Directory/Members/Update.hs
@@ -0,0 +1,112 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.Directory.Members.Update
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Update membership of a user in the specified group.
+--
+-- /See:/ <https://developers.google.com/admin-sdk/directory/ Admin Directory API Reference> for @directory.members.update@.
+module Network.Google.Resource.Directory.Members.Update
+    (
+    -- * REST Resource
+      MembersUpdateResource
+
+    -- * Creating a Request
+    , membersUpdate
+    , MembersUpdate
+
+    -- * Request Lenses
+    , muMemberKey
+    , muGroupKey
+    , muPayload
+    ) where
+
+import           Network.Google.Directory.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @directory.members.update@ method which the
+-- 'MembersUpdate' request conforms to.
+type MembersUpdateResource =
+     "admin" :>
+       "directory" :>
+         "v1" :>
+           "groups" :>
+             Capture "groupKey" Text :>
+               "members" :>
+                 Capture "memberKey" Text :>
+                   QueryParam "alt" AltJSON :>
+                     ReqBody '[JSON] Member :> Put '[JSON] Member
+
+-- | Update membership of a user in the specified group.
+--
+-- /See:/ 'membersUpdate' smart constructor.
+data MembersUpdate = MembersUpdate
+    { _muMemberKey :: !Text
+    , _muGroupKey  :: !Text
+    , _muPayload   :: !Member
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'MembersUpdate' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'muMemberKey'
+--
+-- * 'muGroupKey'
+--
+-- * 'muPayload'
+membersUpdate
+    :: Text -- ^ 'muMemberKey'
+    -> Text -- ^ 'muGroupKey'
+    -> Member -- ^ 'muPayload'
+    -> MembersUpdate
+membersUpdate pMuMemberKey_ pMuGroupKey_ pMuPayload_ =
+    MembersUpdate
+    { _muMemberKey = pMuMemberKey_
+    , _muGroupKey = pMuGroupKey_
+    , _muPayload = pMuPayload_
+    }
+
+-- | Email or immutable Id of the user. If Id, it should match with id of
+-- member object
+muMemberKey :: Lens' MembersUpdate Text
+muMemberKey
+  = lens _muMemberKey (\ s a -> s{_muMemberKey = a})
+
+-- | Email or immutable Id of the group. If Id, it should match with id of
+-- group object
+muGroupKey :: Lens' MembersUpdate Text
+muGroupKey
+  = lens _muGroupKey (\ s a -> s{_muGroupKey = a})
+
+-- | Multipart request metadata.
+muPayload :: Lens' MembersUpdate Member
+muPayload
+  = lens _muPayload (\ s a -> s{_muPayload = a})
+
+instance GoogleRequest MembersUpdate where
+        type Rs MembersUpdate = Member
+        requestClient MembersUpdate{..}
+          = go _muGroupKey _muMemberKey (Just AltJSON)
+              _muPayload
+              directoryService
+          where go
+                  = buildClient (Proxy :: Proxy MembersUpdateResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Directory/MobileDevices/Action.hs b/gen/Network/Google/Resource/Directory/MobileDevices/Action.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Directory/MobileDevices/Action.hs
@@ -0,0 +1,115 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.Directory.MobileDevices.Action
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Take action on Mobile Device
+--
+-- /See:/ <https://developers.google.com/admin-sdk/directory/ Admin Directory API Reference> for @directory.mobiledevices.action@.
+module Network.Google.Resource.Directory.MobileDevices.Action
+    (
+    -- * REST Resource
+      MobileDevicesActionResource
+
+    -- * Creating a Request
+    , mobileDevicesAction
+    , MobileDevicesAction
+
+    -- * Request Lenses
+    , mdaResourceId
+    , mdaPayload
+    , mdaCustomerId
+    ) where
+
+import           Network.Google.Directory.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @directory.mobiledevices.action@ method which the
+-- 'MobileDevicesAction' request conforms to.
+type MobileDevicesActionResource =
+     "admin" :>
+       "directory" :>
+         "v1" :>
+           "customer" :>
+             Capture "customerId" Text :>
+               "devices" :>
+                 "mobile" :>
+                   Capture "resourceId" Text :>
+                     "action" :>
+                       QueryParam "alt" AltJSON :>
+                         ReqBody '[JSON] MobileDeviceAction :> Post '[JSON] ()
+
+-- | Take action on Mobile Device
+--
+-- /See:/ 'mobileDevicesAction' smart constructor.
+data MobileDevicesAction = MobileDevicesAction
+    { _mdaResourceId :: !Text
+    , _mdaPayload    :: !MobileDeviceAction
+    , _mdaCustomerId :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'MobileDevicesAction' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'mdaResourceId'
+--
+-- * 'mdaPayload'
+--
+-- * 'mdaCustomerId'
+mobileDevicesAction
+    :: Text -- ^ 'mdaResourceId'
+    -> MobileDeviceAction -- ^ 'mdaPayload'
+    -> Text -- ^ 'mdaCustomerId'
+    -> MobileDevicesAction
+mobileDevicesAction pMdaResourceId_ pMdaPayload_ pMdaCustomerId_ =
+    MobileDevicesAction
+    { _mdaResourceId = pMdaResourceId_
+    , _mdaPayload = pMdaPayload_
+    , _mdaCustomerId = pMdaCustomerId_
+    }
+
+-- | Immutable id of Mobile Device
+mdaResourceId :: Lens' MobileDevicesAction Text
+mdaResourceId
+  = lens _mdaResourceId
+      (\ s a -> s{_mdaResourceId = a})
+
+-- | Multipart request metadata.
+mdaPayload :: Lens' MobileDevicesAction MobileDeviceAction
+mdaPayload
+  = lens _mdaPayload (\ s a -> s{_mdaPayload = a})
+
+-- | Immutable id of the Google Apps account
+mdaCustomerId :: Lens' MobileDevicesAction Text
+mdaCustomerId
+  = lens _mdaCustomerId
+      (\ s a -> s{_mdaCustomerId = a})
+
+instance GoogleRequest MobileDevicesAction where
+        type Rs MobileDevicesAction = ()
+        requestClient MobileDevicesAction{..}
+          = go _mdaCustomerId _mdaResourceId (Just AltJSON)
+              _mdaPayload
+              directoryService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy MobileDevicesActionResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Directory/MobileDevices/Delete.hs b/gen/Network/Google/Resource/Directory/MobileDevices/Delete.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Directory/MobileDevices/Delete.hs
@@ -0,0 +1,101 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.Directory.MobileDevices.Delete
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Delete Mobile Device
+--
+-- /See:/ <https://developers.google.com/admin-sdk/directory/ Admin Directory API Reference> for @directory.mobiledevices.delete@.
+module Network.Google.Resource.Directory.MobileDevices.Delete
+    (
+    -- * REST Resource
+      MobileDevicesDeleteResource
+
+    -- * Creating a Request
+    , mobileDevicesDelete
+    , MobileDevicesDelete
+
+    -- * Request Lenses
+    , mddResourceId
+    , mddCustomerId
+    ) where
+
+import           Network.Google.Directory.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @directory.mobiledevices.delete@ method which the
+-- 'MobileDevicesDelete' request conforms to.
+type MobileDevicesDeleteResource =
+     "admin" :>
+       "directory" :>
+         "v1" :>
+           "customer" :>
+             Capture "customerId" Text :>
+               "devices" :>
+                 "mobile" :>
+                   Capture "resourceId" Text :>
+                     QueryParam "alt" AltJSON :> Delete '[JSON] ()
+
+-- | Delete Mobile Device
+--
+-- /See:/ 'mobileDevicesDelete' smart constructor.
+data MobileDevicesDelete = MobileDevicesDelete
+    { _mddResourceId :: !Text
+    , _mddCustomerId :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'MobileDevicesDelete' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'mddResourceId'
+--
+-- * 'mddCustomerId'
+mobileDevicesDelete
+    :: Text -- ^ 'mddResourceId'
+    -> Text -- ^ 'mddCustomerId'
+    -> MobileDevicesDelete
+mobileDevicesDelete pMddResourceId_ pMddCustomerId_ =
+    MobileDevicesDelete
+    { _mddResourceId = pMddResourceId_
+    , _mddCustomerId = pMddCustomerId_
+    }
+
+-- | Immutable id of Mobile Device
+mddResourceId :: Lens' MobileDevicesDelete Text
+mddResourceId
+  = lens _mddResourceId
+      (\ s a -> s{_mddResourceId = a})
+
+-- | Immutable id of the Google Apps account
+mddCustomerId :: Lens' MobileDevicesDelete Text
+mddCustomerId
+  = lens _mddCustomerId
+      (\ s a -> s{_mddCustomerId = a})
+
+instance GoogleRequest MobileDevicesDelete where
+        type Rs MobileDevicesDelete = ()
+        requestClient MobileDevicesDelete{..}
+          = go _mddCustomerId _mddResourceId (Just AltJSON)
+              directoryService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy MobileDevicesDeleteResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Directory/MobileDevices/Get.hs b/gen/Network/Google/Resource/Directory/MobileDevices/Get.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Directory/MobileDevices/Get.hs
@@ -0,0 +1,114 @@
+{-# 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.Directory.MobileDevices.Get
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Retrieve Mobile Device
+--
+-- /See:/ <https://developers.google.com/admin-sdk/directory/ Admin Directory API Reference> for @directory.mobiledevices.get@.
+module Network.Google.Resource.Directory.MobileDevices.Get
+    (
+    -- * REST Resource
+      MobileDevicesGetResource
+
+    -- * Creating a Request
+    , mobileDevicesGet
+    , MobileDevicesGet
+
+    -- * Request Lenses
+    , mdgResourceId
+    , mdgCustomerId
+    , mdgProjection
+    ) where
+
+import           Network.Google.Directory.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @directory.mobiledevices.get@ method which the
+-- 'MobileDevicesGet' request conforms to.
+type MobileDevicesGetResource =
+     "admin" :>
+       "directory" :>
+         "v1" :>
+           "customer" :>
+             Capture "customerId" Text :>
+               "devices" :>
+                 "mobile" :>
+                   Capture "resourceId" Text :>
+                     QueryParam "projection" MobileDevicesGetProjection :>
+                       QueryParam "alt" AltJSON :> Get '[JSON] MobileDevice
+
+-- | Retrieve Mobile Device
+--
+-- /See:/ 'mobileDevicesGet' smart constructor.
+data MobileDevicesGet = MobileDevicesGet
+    { _mdgResourceId :: !Text
+    , _mdgCustomerId :: !Text
+    , _mdgProjection :: !(Maybe MobileDevicesGetProjection)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'MobileDevicesGet' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'mdgResourceId'
+--
+-- * 'mdgCustomerId'
+--
+-- * 'mdgProjection'
+mobileDevicesGet
+    :: Text -- ^ 'mdgResourceId'
+    -> Text -- ^ 'mdgCustomerId'
+    -> MobileDevicesGet
+mobileDevicesGet pMdgResourceId_ pMdgCustomerId_ =
+    MobileDevicesGet
+    { _mdgResourceId = pMdgResourceId_
+    , _mdgCustomerId = pMdgCustomerId_
+    , _mdgProjection = Nothing
+    }
+
+-- | Immutable id of Mobile Device
+mdgResourceId :: Lens' MobileDevicesGet Text
+mdgResourceId
+  = lens _mdgResourceId
+      (\ s a -> s{_mdgResourceId = a})
+
+-- | Immutable id of the Google Apps account
+mdgCustomerId :: Lens' MobileDevicesGet Text
+mdgCustomerId
+  = lens _mdgCustomerId
+      (\ s a -> s{_mdgCustomerId = a})
+
+-- | Restrict information returned to a set of selected fields.
+mdgProjection :: Lens' MobileDevicesGet (Maybe MobileDevicesGetProjection)
+mdgProjection
+  = lens _mdgProjection
+      (\ s a -> s{_mdgProjection = a})
+
+instance GoogleRequest MobileDevicesGet where
+        type Rs MobileDevicesGet = MobileDevice
+        requestClient MobileDevicesGet{..}
+          = go _mdgCustomerId _mdgResourceId _mdgProjection
+              (Just AltJSON)
+              directoryService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy MobileDevicesGetResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Directory/MobileDevices/List.hs b/gen/Network/Google/Resource/Directory/MobileDevices/List.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Directory/MobileDevices/List.hs
@@ -0,0 +1,165 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.Directory.MobileDevices.List
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Retrieve all Mobile Devices of a customer (paginated)
+--
+-- /See:/ <https://developers.google.com/admin-sdk/directory/ Admin Directory API Reference> for @directory.mobiledevices.list@.
+module Network.Google.Resource.Directory.MobileDevices.List
+    (
+    -- * REST Resource
+      MobileDevicesListResource
+
+    -- * Creating a Request
+    , mobileDevicesList
+    , MobileDevicesList
+
+    -- * Request Lenses
+    , mdlOrderBy
+    , mdlCustomerId
+    , mdlSortOrder
+    , mdlQuery
+    , mdlProjection
+    , mdlPageToken
+    , mdlMaxResults
+    ) where
+
+import           Network.Google.Directory.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @directory.mobiledevices.list@ method which the
+-- 'MobileDevicesList' request conforms to.
+type MobileDevicesListResource =
+     "admin" :>
+       "directory" :>
+         "v1" :>
+           "customer" :>
+             Capture "customerId" Text :>
+               "devices" :>
+                 "mobile" :>
+                   QueryParam "orderBy" MobileDevicesListOrderBy :>
+                     QueryParam "sortOrder" MobileDevicesListSortOrder :>
+                       QueryParam "query" Text :>
+                         QueryParam "projection" MobileDevicesListProjection
+                           :>
+                           QueryParam "pageToken" Text :>
+                             QueryParam "maxResults" (Textual Int32) :>
+                               QueryParam "alt" AltJSON :>
+                                 Get '[JSON] MobileDevices
+
+-- | Retrieve all Mobile Devices of a customer (paginated)
+--
+-- /See:/ 'mobileDevicesList' smart constructor.
+data MobileDevicesList = MobileDevicesList
+    { _mdlOrderBy    :: !(Maybe MobileDevicesListOrderBy)
+    , _mdlCustomerId :: !Text
+    , _mdlSortOrder  :: !(Maybe MobileDevicesListSortOrder)
+    , _mdlQuery      :: !(Maybe Text)
+    , _mdlProjection :: !(Maybe MobileDevicesListProjection)
+    , _mdlPageToken  :: !(Maybe Text)
+    , _mdlMaxResults :: !(Maybe (Textual Int32))
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'MobileDevicesList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'mdlOrderBy'
+--
+-- * 'mdlCustomerId'
+--
+-- * 'mdlSortOrder'
+--
+-- * 'mdlQuery'
+--
+-- * 'mdlProjection'
+--
+-- * 'mdlPageToken'
+--
+-- * 'mdlMaxResults'
+mobileDevicesList
+    :: Text -- ^ 'mdlCustomerId'
+    -> MobileDevicesList
+mobileDevicesList pMdlCustomerId_ =
+    MobileDevicesList
+    { _mdlOrderBy = Nothing
+    , _mdlCustomerId = pMdlCustomerId_
+    , _mdlSortOrder = Nothing
+    , _mdlQuery = Nothing
+    , _mdlProjection = Nothing
+    , _mdlPageToken = Nothing
+    , _mdlMaxResults = Nothing
+    }
+
+-- | Column to use for sorting results
+mdlOrderBy :: Lens' MobileDevicesList (Maybe MobileDevicesListOrderBy)
+mdlOrderBy
+  = lens _mdlOrderBy (\ s a -> s{_mdlOrderBy = a})
+
+-- | Immutable id of the Google Apps account
+mdlCustomerId :: Lens' MobileDevicesList Text
+mdlCustomerId
+  = lens _mdlCustomerId
+      (\ s a -> s{_mdlCustomerId = a})
+
+-- | Whether to return results in ascending or descending order. Only of use
+-- when orderBy is also used
+mdlSortOrder :: Lens' MobileDevicesList (Maybe MobileDevicesListSortOrder)
+mdlSortOrder
+  = lens _mdlSortOrder (\ s a -> s{_mdlSortOrder = a})
+
+-- | Search string in the format given at
+-- http:\/\/support.google.com\/a\/bin\/answer.py?hl=en&answer=1408863#search
+mdlQuery :: Lens' MobileDevicesList (Maybe Text)
+mdlQuery = lens _mdlQuery (\ s a -> s{_mdlQuery = a})
+
+-- | Restrict information returned to a set of selected fields.
+mdlProjection :: Lens' MobileDevicesList (Maybe MobileDevicesListProjection)
+mdlProjection
+  = lens _mdlProjection
+      (\ s a -> s{_mdlProjection = a})
+
+-- | Token to specify next page in the list
+mdlPageToken :: Lens' MobileDevicesList (Maybe Text)
+mdlPageToken
+  = lens _mdlPageToken (\ s a -> s{_mdlPageToken = a})
+
+-- | Maximum number of results to return. Default is 100
+mdlMaxResults :: Lens' MobileDevicesList (Maybe Int32)
+mdlMaxResults
+  = lens _mdlMaxResults
+      (\ s a -> s{_mdlMaxResults = a})
+      . mapping _Coerce
+
+instance GoogleRequest MobileDevicesList where
+        type Rs MobileDevicesList = MobileDevices
+        requestClient MobileDevicesList{..}
+          = go _mdlCustomerId _mdlOrderBy _mdlSortOrder
+              _mdlQuery
+              _mdlProjection
+              _mdlPageToken
+              _mdlMaxResults
+              (Just AltJSON)
+              directoryService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy MobileDevicesListResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Directory/Notifications/Delete.hs b/gen/Network/Google/Resource/Directory/Notifications/Delete.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Directory/Notifications/Delete.hs
@@ -0,0 +1,100 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.Directory.Notifications.Delete
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes a notification
+--
+-- /See:/ <https://developers.google.com/admin-sdk/directory/ Admin Directory API Reference> for @directory.notifications.delete@.
+module Network.Google.Resource.Directory.Notifications.Delete
+    (
+    -- * REST Resource
+      NotificationsDeleteResource
+
+    -- * Creating a Request
+    , notificationsDelete
+    , NotificationsDelete
+
+    -- * Request Lenses
+    , ndCustomer
+    , ndNotificationId
+    ) where
+
+import           Network.Google.Directory.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @directory.notifications.delete@ method which the
+-- 'NotificationsDelete' request conforms to.
+type NotificationsDeleteResource =
+     "admin" :>
+       "directory" :>
+         "v1" :>
+           "customer" :>
+             Capture "customer" Text :>
+               "notifications" :>
+                 Capture "notificationId" Text :>
+                   QueryParam "alt" AltJSON :> Delete '[JSON] ()
+
+-- | Deletes a notification
+--
+-- /See:/ 'notificationsDelete' smart constructor.
+data NotificationsDelete = NotificationsDelete
+    { _ndCustomer       :: !Text
+    , _ndNotificationId :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'NotificationsDelete' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ndCustomer'
+--
+-- * 'ndNotificationId'
+notificationsDelete
+    :: Text -- ^ 'ndCustomer'
+    -> Text -- ^ 'ndNotificationId'
+    -> NotificationsDelete
+notificationsDelete pNdCustomer_ pNdNotificationId_ =
+    NotificationsDelete
+    { _ndCustomer = pNdCustomer_
+    , _ndNotificationId = pNdNotificationId_
+    }
+
+-- | The unique ID for the customer\'s Google account. The customerId is also
+-- returned as part of the Users resource.
+ndCustomer :: Lens' NotificationsDelete Text
+ndCustomer
+  = lens _ndCustomer (\ s a -> s{_ndCustomer = a})
+
+-- | The unique ID of the notification.
+ndNotificationId :: Lens' NotificationsDelete Text
+ndNotificationId
+  = lens _ndNotificationId
+      (\ s a -> s{_ndNotificationId = a})
+
+instance GoogleRequest NotificationsDelete where
+        type Rs NotificationsDelete = ()
+        requestClient NotificationsDelete{..}
+          = go _ndCustomer _ndNotificationId (Just AltJSON)
+              directoryService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy NotificationsDeleteResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Directory/Notifications/Get.hs b/gen/Network/Google/Resource/Directory/Notifications/Get.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Directory/Notifications/Get.hs
@@ -0,0 +1,100 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.Directory.Notifications.Get
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Retrieves a notification.
+--
+-- /See:/ <https://developers.google.com/admin-sdk/directory/ Admin Directory API Reference> for @directory.notifications.get@.
+module Network.Google.Resource.Directory.Notifications.Get
+    (
+    -- * REST Resource
+      NotificationsGetResource
+
+    -- * Creating a Request
+    , notificationsGet
+    , NotificationsGet
+
+    -- * Request Lenses
+    , ngCustomer
+    , ngNotificationId
+    ) where
+
+import           Network.Google.Directory.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @directory.notifications.get@ method which the
+-- 'NotificationsGet' request conforms to.
+type NotificationsGetResource =
+     "admin" :>
+       "directory" :>
+         "v1" :>
+           "customer" :>
+             Capture "customer" Text :>
+               "notifications" :>
+                 Capture "notificationId" Text :>
+                   QueryParam "alt" AltJSON :> Get '[JSON] Notification
+
+-- | Retrieves a notification.
+--
+-- /See:/ 'notificationsGet' smart constructor.
+data NotificationsGet = NotificationsGet
+    { _ngCustomer       :: !Text
+    , _ngNotificationId :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'NotificationsGet' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ngCustomer'
+--
+-- * 'ngNotificationId'
+notificationsGet
+    :: Text -- ^ 'ngCustomer'
+    -> Text -- ^ 'ngNotificationId'
+    -> NotificationsGet
+notificationsGet pNgCustomer_ pNgNotificationId_ =
+    NotificationsGet
+    { _ngCustomer = pNgCustomer_
+    , _ngNotificationId = pNgNotificationId_
+    }
+
+-- | The unique ID for the customer\'s Google account. The customerId is also
+-- returned as part of the Users resource.
+ngCustomer :: Lens' NotificationsGet Text
+ngCustomer
+  = lens _ngCustomer (\ s a -> s{_ngCustomer = a})
+
+-- | The unique ID of the notification.
+ngNotificationId :: Lens' NotificationsGet Text
+ngNotificationId
+  = lens _ngNotificationId
+      (\ s a -> s{_ngNotificationId = a})
+
+instance GoogleRequest NotificationsGet where
+        type Rs NotificationsGet = Notification
+        requestClient NotificationsGet{..}
+          = go _ngCustomer _ngNotificationId (Just AltJSON)
+              directoryService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy NotificationsGetResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Directory/Notifications/List.hs b/gen/Network/Google/Resource/Directory/Notifications/List.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Directory/Notifications/List.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.Directory.Notifications.List
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Retrieves a list of notifications.
+--
+-- /See:/ <https://developers.google.com/admin-sdk/directory/ Admin Directory API Reference> for @directory.notifications.list@.
+module Network.Google.Resource.Directory.Notifications.List
+    (
+    -- * REST Resource
+      NotificationsListResource
+
+    -- * Creating a Request
+    , notificationsList
+    , NotificationsList
+
+    -- * Request Lenses
+    , nlCustomer
+    , nlLanguage
+    , nlPageToken
+    , nlMaxResults
+    ) where
+
+import           Network.Google.Directory.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @directory.notifications.list@ method which the
+-- 'NotificationsList' request conforms to.
+type NotificationsListResource =
+     "admin" :>
+       "directory" :>
+         "v1" :>
+           "customer" :>
+             Capture "customer" Text :>
+               "notifications" :>
+                 QueryParam "language" Text :>
+                   QueryParam "pageToken" Text :>
+                     QueryParam "maxResults" (Textual Word32) :>
+                       QueryParam "alt" AltJSON :> Get '[JSON] Notifications
+
+-- | Retrieves a list of notifications.
+--
+-- /See:/ 'notificationsList' smart constructor.
+data NotificationsList = NotificationsList
+    { _nlCustomer   :: !Text
+    , _nlLanguage   :: !(Maybe Text)
+    , _nlPageToken  :: !(Maybe Text)
+    , _nlMaxResults :: !(Maybe (Textual Word32))
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'NotificationsList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'nlCustomer'
+--
+-- * 'nlLanguage'
+--
+-- * 'nlPageToken'
+--
+-- * 'nlMaxResults'
+notificationsList
+    :: Text -- ^ 'nlCustomer'
+    -> NotificationsList
+notificationsList pNlCustomer_ =
+    NotificationsList
+    { _nlCustomer = pNlCustomer_
+    , _nlLanguage = Nothing
+    , _nlPageToken = Nothing
+    , _nlMaxResults = Nothing
+    }
+
+-- | The unique ID for the customer\'s Google account.
+nlCustomer :: Lens' NotificationsList Text
+nlCustomer
+  = lens _nlCustomer (\ s a -> s{_nlCustomer = a})
+
+-- | The ISO 639-1 code of the language notifications are returned in. The
+-- default is English (en).
+nlLanguage :: Lens' NotificationsList (Maybe Text)
+nlLanguage
+  = lens _nlLanguage (\ s a -> s{_nlLanguage = a})
+
+-- | The token to specify the page of results to retrieve.
+nlPageToken :: Lens' NotificationsList (Maybe Text)
+nlPageToken
+  = lens _nlPageToken (\ s a -> s{_nlPageToken = a})
+
+-- | Maximum number of notifications to return per page. The default is 100.
+nlMaxResults :: Lens' NotificationsList (Maybe Word32)
+nlMaxResults
+  = lens _nlMaxResults (\ s a -> s{_nlMaxResults = a})
+      . mapping _Coerce
+
+instance GoogleRequest NotificationsList where
+        type Rs NotificationsList = Notifications
+        requestClient NotificationsList{..}
+          = go _nlCustomer _nlLanguage _nlPageToken
+              _nlMaxResults
+              (Just AltJSON)
+              directoryService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy NotificationsListResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Directory/Notifications/Patch.hs b/gen/Network/Google/Resource/Directory/Notifications/Patch.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Directory/Notifications/Patch.hs
@@ -0,0 +1,113 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.Directory.Notifications.Patch
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Updates a notification. This method supports patch semantics.
+--
+-- /See:/ <https://developers.google.com/admin-sdk/directory/ Admin Directory API Reference> for @directory.notifications.patch@.
+module Network.Google.Resource.Directory.Notifications.Patch
+    (
+    -- * REST Resource
+      NotificationsPatchResource
+
+    -- * Creating a Request
+    , notificationsPatch
+    , NotificationsPatch
+
+    -- * Request Lenses
+    , npPayload
+    , npCustomer
+    , npNotificationId
+    ) where
+
+import           Network.Google.Directory.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @directory.notifications.patch@ method which the
+-- 'NotificationsPatch' request conforms to.
+type NotificationsPatchResource =
+     "admin" :>
+       "directory" :>
+         "v1" :>
+           "customer" :>
+             Capture "customer" Text :>
+               "notifications" :>
+                 Capture "notificationId" Text :>
+                   QueryParam "alt" AltJSON :>
+                     ReqBody '[JSON] Notification :>
+                       Patch '[JSON] Notification
+
+-- | Updates a notification. This method supports patch semantics.
+--
+-- /See:/ 'notificationsPatch' smart constructor.
+data NotificationsPatch = NotificationsPatch
+    { _npPayload        :: !Notification
+    , _npCustomer       :: !Text
+    , _npNotificationId :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'NotificationsPatch' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'npPayload'
+--
+-- * 'npCustomer'
+--
+-- * 'npNotificationId'
+notificationsPatch
+    :: Notification -- ^ 'npPayload'
+    -> Text -- ^ 'npCustomer'
+    -> Text -- ^ 'npNotificationId'
+    -> NotificationsPatch
+notificationsPatch pNpPayload_ pNpCustomer_ pNpNotificationId_ =
+    NotificationsPatch
+    { _npPayload = pNpPayload_
+    , _npCustomer = pNpCustomer_
+    , _npNotificationId = pNpNotificationId_
+    }
+
+-- | Multipart request metadata.
+npPayload :: Lens' NotificationsPatch Notification
+npPayload
+  = lens _npPayload (\ s a -> s{_npPayload = a})
+
+-- | The unique ID for the customer\'s Google account.
+npCustomer :: Lens' NotificationsPatch Text
+npCustomer
+  = lens _npCustomer (\ s a -> s{_npCustomer = a})
+
+-- | The unique ID of the notification.
+npNotificationId :: Lens' NotificationsPatch Text
+npNotificationId
+  = lens _npNotificationId
+      (\ s a -> s{_npNotificationId = a})
+
+instance GoogleRequest NotificationsPatch where
+        type Rs NotificationsPatch = Notification
+        requestClient NotificationsPatch{..}
+          = go _npCustomer _npNotificationId (Just AltJSON)
+              _npPayload
+              directoryService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy NotificationsPatchResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Directory/Notifications/Update.hs b/gen/Network/Google/Resource/Directory/Notifications/Update.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Directory/Notifications/Update.hs
@@ -0,0 +1,113 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.Directory.Notifications.Update
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Updates a notification.
+--
+-- /See:/ <https://developers.google.com/admin-sdk/directory/ Admin Directory API Reference> for @directory.notifications.update@.
+module Network.Google.Resource.Directory.Notifications.Update
+    (
+    -- * REST Resource
+      NotificationsUpdateResource
+
+    -- * Creating a Request
+    , notificationsUpdate
+    , NotificationsUpdate
+
+    -- * Request Lenses
+    , nuPayload
+    , nuCustomer
+    , nuNotificationId
+    ) where
+
+import           Network.Google.Directory.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @directory.notifications.update@ method which the
+-- 'NotificationsUpdate' request conforms to.
+type NotificationsUpdateResource =
+     "admin" :>
+       "directory" :>
+         "v1" :>
+           "customer" :>
+             Capture "customer" Text :>
+               "notifications" :>
+                 Capture "notificationId" Text :>
+                   QueryParam "alt" AltJSON :>
+                     ReqBody '[JSON] Notification :>
+                       Put '[JSON] Notification
+
+-- | Updates a notification.
+--
+-- /See:/ 'notificationsUpdate' smart constructor.
+data NotificationsUpdate = NotificationsUpdate
+    { _nuPayload        :: !Notification
+    , _nuCustomer       :: !Text
+    , _nuNotificationId :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'NotificationsUpdate' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'nuPayload'
+--
+-- * 'nuCustomer'
+--
+-- * 'nuNotificationId'
+notificationsUpdate
+    :: Notification -- ^ 'nuPayload'
+    -> Text -- ^ 'nuCustomer'
+    -> Text -- ^ 'nuNotificationId'
+    -> NotificationsUpdate
+notificationsUpdate pNuPayload_ pNuCustomer_ pNuNotificationId_ =
+    NotificationsUpdate
+    { _nuPayload = pNuPayload_
+    , _nuCustomer = pNuCustomer_
+    , _nuNotificationId = pNuNotificationId_
+    }
+
+-- | Multipart request metadata.
+nuPayload :: Lens' NotificationsUpdate Notification
+nuPayload
+  = lens _nuPayload (\ s a -> s{_nuPayload = a})
+
+-- | The unique ID for the customer\'s Google account.
+nuCustomer :: Lens' NotificationsUpdate Text
+nuCustomer
+  = lens _nuCustomer (\ s a -> s{_nuCustomer = a})
+
+-- | The unique ID of the notification.
+nuNotificationId :: Lens' NotificationsUpdate Text
+nuNotificationId
+  = lens _nuNotificationId
+      (\ s a -> s{_nuNotificationId = a})
+
+instance GoogleRequest NotificationsUpdate where
+        type Rs NotificationsUpdate = Notification
+        requestClient NotificationsUpdate{..}
+          = go _nuCustomer _nuNotificationId (Just AltJSON)
+              _nuPayload
+              directoryService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy NotificationsUpdateResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Directory/OrgUnits/Delete.hs b/gen/Network/Google/Resource/Directory/OrgUnits/Delete.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Directory/OrgUnits/Delete.hs
@@ -0,0 +1,100 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.Directory.OrgUnits.Delete
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Remove Organization Unit
+--
+-- /See:/ <https://developers.google.com/admin-sdk/directory/ Admin Directory API Reference> for @directory.orgunits.delete@.
+module Network.Google.Resource.Directory.OrgUnits.Delete
+    (
+    -- * REST Resource
+      OrgUnitsDeleteResource
+
+    -- * Creating a Request
+    , orgUnitsDelete
+    , OrgUnitsDelete
+
+    -- * Request Lenses
+    , oudOrgUnitPath
+    , oudCustomerId
+    ) where
+
+import           Network.Google.Directory.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @directory.orgunits.delete@ method which the
+-- 'OrgUnitsDelete' request conforms to.
+type OrgUnitsDeleteResource =
+     "admin" :>
+       "directory" :>
+         "v1" :>
+           "customer" :>
+             Capture "customerId" Text :>
+               "orgunits" :>
+                 Captures "orgUnitPath" Text :>
+                   QueryParam "alt" AltJSON :> Delete '[JSON] ()
+
+-- | Remove Organization Unit
+--
+-- /See:/ 'orgUnitsDelete' smart constructor.
+data OrgUnitsDelete = OrgUnitsDelete
+    { _oudOrgUnitPath :: ![Text]
+    , _oudCustomerId  :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'OrgUnitsDelete' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'oudOrgUnitPath'
+--
+-- * 'oudCustomerId'
+orgUnitsDelete
+    :: [Text] -- ^ 'oudOrgUnitPath'
+    -> Text -- ^ 'oudCustomerId'
+    -> OrgUnitsDelete
+orgUnitsDelete pOudOrgUnitPath_ pOudCustomerId_ =
+    OrgUnitsDelete
+    { _oudOrgUnitPath = _Coerce # pOudOrgUnitPath_
+    , _oudCustomerId = pOudCustomerId_
+    }
+
+-- | Full path of the organization unit or its Id
+oudOrgUnitPath :: Lens' OrgUnitsDelete [Text]
+oudOrgUnitPath
+  = lens _oudOrgUnitPath
+      (\ s a -> s{_oudOrgUnitPath = a})
+      . _Coerce
+
+-- | Immutable id of the Google Apps account
+oudCustomerId :: Lens' OrgUnitsDelete Text
+oudCustomerId
+  = lens _oudCustomerId
+      (\ s a -> s{_oudCustomerId = a})
+
+instance GoogleRequest OrgUnitsDelete where
+        type Rs OrgUnitsDelete = ()
+        requestClient OrgUnitsDelete{..}
+          = go _oudCustomerId _oudOrgUnitPath (Just AltJSON)
+              directoryService
+          where go
+                  = buildClient (Proxy :: Proxy OrgUnitsDeleteResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Directory/OrgUnits/Get.hs b/gen/Network/Google/Resource/Directory/OrgUnits/Get.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Directory/OrgUnits/Get.hs
@@ -0,0 +1,100 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.Directory.OrgUnits.Get
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Retrieve Organization Unit
+--
+-- /See:/ <https://developers.google.com/admin-sdk/directory/ Admin Directory API Reference> for @directory.orgunits.get@.
+module Network.Google.Resource.Directory.OrgUnits.Get
+    (
+    -- * REST Resource
+      OrgUnitsGetResource
+
+    -- * Creating a Request
+    , orgUnitsGet
+    , OrgUnitsGet
+
+    -- * Request Lenses
+    , ougOrgUnitPath
+    , ougCustomerId
+    ) where
+
+import           Network.Google.Directory.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @directory.orgunits.get@ method which the
+-- 'OrgUnitsGet' request conforms to.
+type OrgUnitsGetResource =
+     "admin" :>
+       "directory" :>
+         "v1" :>
+           "customer" :>
+             Capture "customerId" Text :>
+               "orgunits" :>
+                 Captures "orgUnitPath" Text :>
+                   QueryParam "alt" AltJSON :> Get '[JSON] OrgUnit
+
+-- | Retrieve Organization Unit
+--
+-- /See:/ 'orgUnitsGet' smart constructor.
+data OrgUnitsGet = OrgUnitsGet
+    { _ougOrgUnitPath :: ![Text]
+    , _ougCustomerId  :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'OrgUnitsGet' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ougOrgUnitPath'
+--
+-- * 'ougCustomerId'
+orgUnitsGet
+    :: [Text] -- ^ 'ougOrgUnitPath'
+    -> Text -- ^ 'ougCustomerId'
+    -> OrgUnitsGet
+orgUnitsGet pOugOrgUnitPath_ pOugCustomerId_ =
+    OrgUnitsGet
+    { _ougOrgUnitPath = _Coerce # pOugOrgUnitPath_
+    , _ougCustomerId = pOugCustomerId_
+    }
+
+-- | Full path of the organization unit or its Id
+ougOrgUnitPath :: Lens' OrgUnitsGet [Text]
+ougOrgUnitPath
+  = lens _ougOrgUnitPath
+      (\ s a -> s{_ougOrgUnitPath = a})
+      . _Coerce
+
+-- | Immutable id of the Google Apps account
+ougCustomerId :: Lens' OrgUnitsGet Text
+ougCustomerId
+  = lens _ougCustomerId
+      (\ s a -> s{_ougCustomerId = a})
+
+instance GoogleRequest OrgUnitsGet where
+        type Rs OrgUnitsGet = OrgUnit
+        requestClient OrgUnitsGet{..}
+          = go _ougCustomerId _ougOrgUnitPath (Just AltJSON)
+              directoryService
+          where go
+                  = buildClient (Proxy :: Proxy OrgUnitsGetResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Directory/OrgUnits/Insert.hs b/gen/Network/Google/Resource/Directory/OrgUnits/Insert.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Directory/OrgUnits/Insert.hs
@@ -0,0 +1,98 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.Directory.OrgUnits.Insert
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Add Organization Unit
+--
+-- /See:/ <https://developers.google.com/admin-sdk/directory/ Admin Directory API Reference> for @directory.orgunits.insert@.
+module Network.Google.Resource.Directory.OrgUnits.Insert
+    (
+    -- * REST Resource
+      OrgUnitsInsertResource
+
+    -- * Creating a Request
+    , orgUnitsInsert
+    , OrgUnitsInsert
+
+    -- * Request Lenses
+    , ouiPayload
+    , ouiCustomerId
+    ) where
+
+import           Network.Google.Directory.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @directory.orgunits.insert@ method which the
+-- 'OrgUnitsInsert' request conforms to.
+type OrgUnitsInsertResource =
+     "admin" :>
+       "directory" :>
+         "v1" :>
+           "customer" :>
+             Capture "customerId" Text :>
+               "orgunits" :>
+                 QueryParam "alt" AltJSON :>
+                   ReqBody '[JSON] OrgUnit :> Post '[JSON] OrgUnit
+
+-- | Add Organization Unit
+--
+-- /See:/ 'orgUnitsInsert' smart constructor.
+data OrgUnitsInsert = OrgUnitsInsert
+    { _ouiPayload    :: !OrgUnit
+    , _ouiCustomerId :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'OrgUnitsInsert' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ouiPayload'
+--
+-- * 'ouiCustomerId'
+orgUnitsInsert
+    :: OrgUnit -- ^ 'ouiPayload'
+    -> Text -- ^ 'ouiCustomerId'
+    -> OrgUnitsInsert
+orgUnitsInsert pOuiPayload_ pOuiCustomerId_ =
+    OrgUnitsInsert
+    { _ouiPayload = pOuiPayload_
+    , _ouiCustomerId = pOuiCustomerId_
+    }
+
+-- | Multipart request metadata.
+ouiPayload :: Lens' OrgUnitsInsert OrgUnit
+ouiPayload
+  = lens _ouiPayload (\ s a -> s{_ouiPayload = a})
+
+-- | Immutable id of the Google Apps account
+ouiCustomerId :: Lens' OrgUnitsInsert Text
+ouiCustomerId
+  = lens _ouiCustomerId
+      (\ s a -> s{_ouiCustomerId = a})
+
+instance GoogleRequest OrgUnitsInsert where
+        type Rs OrgUnitsInsert = OrgUnit
+        requestClient OrgUnitsInsert{..}
+          = go _ouiCustomerId (Just AltJSON) _ouiPayload
+              directoryService
+          where go
+                  = buildClient (Proxy :: Proxy OrgUnitsInsertResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Directory/OrgUnits/List.hs b/gen/Network/Google/Resource/Directory/OrgUnits/List.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Directory/OrgUnits/List.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.Directory.OrgUnits.List
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Retrieve all Organization Units
+--
+-- /See:/ <https://developers.google.com/admin-sdk/directory/ Admin Directory API Reference> for @directory.orgunits.list@.
+module Network.Google.Resource.Directory.OrgUnits.List
+    (
+    -- * REST Resource
+      OrgUnitsListResource
+
+    -- * Creating a Request
+    , orgUnitsList
+    , OrgUnitsList
+
+    -- * Request Lenses
+    , oulOrgUnitPath
+    , oulCustomerId
+    , oulType
+    ) where
+
+import           Network.Google.Directory.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @directory.orgunits.list@ method which the
+-- 'OrgUnitsList' request conforms to.
+type OrgUnitsListResource =
+     "admin" :>
+       "directory" :>
+         "v1" :>
+           "customer" :>
+             Capture "customerId" Text :>
+               "orgunits" :>
+                 QueryParam "orgUnitPath" Text :>
+                   QueryParam "type" OrgUnitsListType :>
+                     QueryParam "alt" AltJSON :> Get '[JSON] OrgUnits
+
+-- | Retrieve all Organization Units
+--
+-- /See:/ 'orgUnitsList' smart constructor.
+data OrgUnitsList = OrgUnitsList
+    { _oulOrgUnitPath :: !Text
+    , _oulCustomerId  :: !Text
+    , _oulType        :: !(Maybe OrgUnitsListType)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'OrgUnitsList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'oulOrgUnitPath'
+--
+-- * 'oulCustomerId'
+--
+-- * 'oulType'
+orgUnitsList
+    :: Text -- ^ 'oulCustomerId'
+    -> OrgUnitsList
+orgUnitsList pOulCustomerId_ =
+    OrgUnitsList
+    { _oulOrgUnitPath = ""
+    , _oulCustomerId = pOulCustomerId_
+    , _oulType = Nothing
+    }
+
+-- | the URL-encoded organization unit\'s path or its Id
+oulOrgUnitPath :: Lens' OrgUnitsList Text
+oulOrgUnitPath
+  = lens _oulOrgUnitPath
+      (\ s a -> s{_oulOrgUnitPath = a})
+
+-- | Immutable id of the Google Apps account
+oulCustomerId :: Lens' OrgUnitsList Text
+oulCustomerId
+  = lens _oulCustomerId
+      (\ s a -> s{_oulCustomerId = a})
+
+-- | Whether to return all sub-organizations or just immediate children
+oulType :: Lens' OrgUnitsList (Maybe OrgUnitsListType)
+oulType = lens _oulType (\ s a -> s{_oulType = a})
+
+instance GoogleRequest OrgUnitsList where
+        type Rs OrgUnitsList = OrgUnits
+        requestClient OrgUnitsList{..}
+          = go _oulCustomerId (Just _oulOrgUnitPath) _oulType
+              (Just AltJSON)
+              directoryService
+          where go
+                  = buildClient (Proxy :: Proxy OrgUnitsListResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Directory/OrgUnits/Patch.hs b/gen/Network/Google/Resource/Directory/OrgUnits/Patch.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Directory/OrgUnits/Patch.hs
@@ -0,0 +1,113 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.Directory.OrgUnits.Patch
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Update Organization Unit. This method supports patch semantics.
+--
+-- /See:/ <https://developers.google.com/admin-sdk/directory/ Admin Directory API Reference> for @directory.orgunits.patch@.
+module Network.Google.Resource.Directory.OrgUnits.Patch
+    (
+    -- * REST Resource
+      OrgUnitsPatchResource
+
+    -- * Creating a Request
+    , orgUnitsPatch
+    , OrgUnitsPatch
+
+    -- * Request Lenses
+    , oupPayload
+    , oupOrgUnitPath
+    , oupCustomerId
+    ) where
+
+import           Network.Google.Directory.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @directory.orgunits.patch@ method which the
+-- 'OrgUnitsPatch' request conforms to.
+type OrgUnitsPatchResource =
+     "admin" :>
+       "directory" :>
+         "v1" :>
+           "customer" :>
+             Capture "customerId" Text :>
+               "orgunits" :>
+                 Captures "orgUnitPath" Text :>
+                   QueryParam "alt" AltJSON :>
+                     ReqBody '[JSON] OrgUnit :> Patch '[JSON] OrgUnit
+
+-- | Update Organization Unit. This method supports patch semantics.
+--
+-- /See:/ 'orgUnitsPatch' smart constructor.
+data OrgUnitsPatch = OrgUnitsPatch
+    { _oupPayload     :: !OrgUnit
+    , _oupOrgUnitPath :: ![Text]
+    , _oupCustomerId  :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'OrgUnitsPatch' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'oupPayload'
+--
+-- * 'oupOrgUnitPath'
+--
+-- * 'oupCustomerId'
+orgUnitsPatch
+    :: OrgUnit -- ^ 'oupPayload'
+    -> [Text] -- ^ 'oupOrgUnitPath'
+    -> Text -- ^ 'oupCustomerId'
+    -> OrgUnitsPatch
+orgUnitsPatch pOupPayload_ pOupOrgUnitPath_ pOupCustomerId_ =
+    OrgUnitsPatch
+    { _oupPayload = pOupPayload_
+    , _oupOrgUnitPath = _Coerce # pOupOrgUnitPath_
+    , _oupCustomerId = pOupCustomerId_
+    }
+
+-- | Multipart request metadata.
+oupPayload :: Lens' OrgUnitsPatch OrgUnit
+oupPayload
+  = lens _oupPayload (\ s a -> s{_oupPayload = a})
+
+-- | Full path of the organization unit or its Id
+oupOrgUnitPath :: Lens' OrgUnitsPatch [Text]
+oupOrgUnitPath
+  = lens _oupOrgUnitPath
+      (\ s a -> s{_oupOrgUnitPath = a})
+      . _Coerce
+
+-- | Immutable id of the Google Apps account
+oupCustomerId :: Lens' OrgUnitsPatch Text
+oupCustomerId
+  = lens _oupCustomerId
+      (\ s a -> s{_oupCustomerId = a})
+
+instance GoogleRequest OrgUnitsPatch where
+        type Rs OrgUnitsPatch = OrgUnit
+        requestClient OrgUnitsPatch{..}
+          = go _oupCustomerId _oupOrgUnitPath (Just AltJSON)
+              _oupPayload
+              directoryService
+          where go
+                  = buildClient (Proxy :: Proxy OrgUnitsPatchResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Directory/OrgUnits/Update.hs b/gen/Network/Google/Resource/Directory/OrgUnits/Update.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Directory/OrgUnits/Update.hs
@@ -0,0 +1,113 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.Directory.OrgUnits.Update
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Update Organization Unit
+--
+-- /See:/ <https://developers.google.com/admin-sdk/directory/ Admin Directory API Reference> for @directory.orgunits.update@.
+module Network.Google.Resource.Directory.OrgUnits.Update
+    (
+    -- * REST Resource
+      OrgUnitsUpdateResource
+
+    -- * Creating a Request
+    , orgUnitsUpdate
+    , OrgUnitsUpdate
+
+    -- * Request Lenses
+    , ouuPayload
+    , ouuOrgUnitPath
+    , ouuCustomerId
+    ) where
+
+import           Network.Google.Directory.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @directory.orgunits.update@ method which the
+-- 'OrgUnitsUpdate' request conforms to.
+type OrgUnitsUpdateResource =
+     "admin" :>
+       "directory" :>
+         "v1" :>
+           "customer" :>
+             Capture "customerId" Text :>
+               "orgunits" :>
+                 Captures "orgUnitPath" Text :>
+                   QueryParam "alt" AltJSON :>
+                     ReqBody '[JSON] OrgUnit :> Put '[JSON] OrgUnit
+
+-- | Update Organization Unit
+--
+-- /See:/ 'orgUnitsUpdate' smart constructor.
+data OrgUnitsUpdate = OrgUnitsUpdate
+    { _ouuPayload     :: !OrgUnit
+    , _ouuOrgUnitPath :: ![Text]
+    , _ouuCustomerId  :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'OrgUnitsUpdate' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ouuPayload'
+--
+-- * 'ouuOrgUnitPath'
+--
+-- * 'ouuCustomerId'
+orgUnitsUpdate
+    :: OrgUnit -- ^ 'ouuPayload'
+    -> [Text] -- ^ 'ouuOrgUnitPath'
+    -> Text -- ^ 'ouuCustomerId'
+    -> OrgUnitsUpdate
+orgUnitsUpdate pOuuPayload_ pOuuOrgUnitPath_ pOuuCustomerId_ =
+    OrgUnitsUpdate
+    { _ouuPayload = pOuuPayload_
+    , _ouuOrgUnitPath = _Coerce # pOuuOrgUnitPath_
+    , _ouuCustomerId = pOuuCustomerId_
+    }
+
+-- | Multipart request metadata.
+ouuPayload :: Lens' OrgUnitsUpdate OrgUnit
+ouuPayload
+  = lens _ouuPayload (\ s a -> s{_ouuPayload = a})
+
+-- | Full path of the organization unit or its Id
+ouuOrgUnitPath :: Lens' OrgUnitsUpdate [Text]
+ouuOrgUnitPath
+  = lens _ouuOrgUnitPath
+      (\ s a -> s{_ouuOrgUnitPath = a})
+      . _Coerce
+
+-- | Immutable id of the Google Apps account
+ouuCustomerId :: Lens' OrgUnitsUpdate Text
+ouuCustomerId
+  = lens _ouuCustomerId
+      (\ s a -> s{_ouuCustomerId = a})
+
+instance GoogleRequest OrgUnitsUpdate where
+        type Rs OrgUnitsUpdate = OrgUnit
+        requestClient OrgUnitsUpdate{..}
+          = go _ouuCustomerId _ouuOrgUnitPath (Just AltJSON)
+              _ouuPayload
+              directoryService
+          where go
+                  = buildClient (Proxy :: Proxy OrgUnitsUpdateResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Directory/Privileges/List.hs b/gen/Network/Google/Resource/Directory/Privileges/List.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Directory/Privileges/List.hs
@@ -0,0 +1,86 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.Directory.Privileges.List
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Retrieves a paginated list of all privileges for a customer.
+--
+-- /See:/ <https://developers.google.com/admin-sdk/directory/ Admin Directory API Reference> for @directory.privileges.list@.
+module Network.Google.Resource.Directory.Privileges.List
+    (
+    -- * REST Resource
+      PrivilegesListResource
+
+    -- * Creating a Request
+    , privilegesList
+    , PrivilegesList
+
+    -- * Request Lenses
+    , plCustomer
+    ) where
+
+import           Network.Google.Directory.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @directory.privileges.list@ method which the
+-- 'PrivilegesList' request conforms to.
+type PrivilegesListResource =
+     "admin" :>
+       "directory" :>
+         "v1" :>
+           "customer" :>
+             Capture "customer" Text :>
+               "roles" :>
+                 "ALL" :>
+                   "privileges" :>
+                     QueryParam "alt" AltJSON :> Get '[JSON] Privileges
+
+-- | Retrieves a paginated list of all privileges for a customer.
+--
+-- /See:/ 'privilegesList' smart constructor.
+newtype PrivilegesList = PrivilegesList
+    { _plCustomer :: Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'PrivilegesList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'plCustomer'
+privilegesList
+    :: Text -- ^ 'plCustomer'
+    -> PrivilegesList
+privilegesList pPlCustomer_ =
+    PrivilegesList
+    { _plCustomer = pPlCustomer_
+    }
+
+-- | Immutable ID of the Google Apps account.
+plCustomer :: Lens' PrivilegesList Text
+plCustomer
+  = lens _plCustomer (\ s a -> s{_plCustomer = a})
+
+instance GoogleRequest PrivilegesList where
+        type Rs PrivilegesList = Privileges
+        requestClient PrivilegesList{..}
+          = go _plCustomer (Just AltJSON) directoryService
+          where go
+                  = buildClient (Proxy :: Proxy PrivilegesListResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Directory/RoleAssignments/Delete.hs b/gen/Network/Google/Resource/Directory/RoleAssignments/Delete.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Directory/RoleAssignments/Delete.hs
@@ -0,0 +1,99 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.Directory.RoleAssignments.Delete
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes a role assignment.
+--
+-- /See:/ <https://developers.google.com/admin-sdk/directory/ Admin Directory API Reference> for @directory.roleAssignments.delete@.
+module Network.Google.Resource.Directory.RoleAssignments.Delete
+    (
+    -- * REST Resource
+      RoleAssignmentsDeleteResource
+
+    -- * Creating a Request
+    , roleAssignmentsDelete
+    , RoleAssignmentsDelete
+
+    -- * Request Lenses
+    , radCustomer
+    , radRoleAssignmentId
+    ) where
+
+import           Network.Google.Directory.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @directory.roleAssignments.delete@ method which the
+-- 'RoleAssignmentsDelete' request conforms to.
+type RoleAssignmentsDeleteResource =
+     "admin" :>
+       "directory" :>
+         "v1" :>
+           "customer" :>
+             Capture "customer" Text :>
+               "roleassignments" :>
+                 Capture "roleAssignmentId" Text :>
+                   QueryParam "alt" AltJSON :> Delete '[JSON] ()
+
+-- | Deletes a role assignment.
+--
+-- /See:/ 'roleAssignmentsDelete' smart constructor.
+data RoleAssignmentsDelete = RoleAssignmentsDelete
+    { _radCustomer         :: !Text
+    , _radRoleAssignmentId :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'RoleAssignmentsDelete' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'radCustomer'
+--
+-- * 'radRoleAssignmentId'
+roleAssignmentsDelete
+    :: Text -- ^ 'radCustomer'
+    -> Text -- ^ 'radRoleAssignmentId'
+    -> RoleAssignmentsDelete
+roleAssignmentsDelete pRadCustomer_ pRadRoleAssignmentId_ =
+    RoleAssignmentsDelete
+    { _radCustomer = pRadCustomer_
+    , _radRoleAssignmentId = pRadRoleAssignmentId_
+    }
+
+-- | Immutable ID of the Google Apps account.
+radCustomer :: Lens' RoleAssignmentsDelete Text
+radCustomer
+  = lens _radCustomer (\ s a -> s{_radCustomer = a})
+
+-- | Immutable ID of the role assignment.
+radRoleAssignmentId :: Lens' RoleAssignmentsDelete Text
+radRoleAssignmentId
+  = lens _radRoleAssignmentId
+      (\ s a -> s{_radRoleAssignmentId = a})
+
+instance GoogleRequest RoleAssignmentsDelete where
+        type Rs RoleAssignmentsDelete = ()
+        requestClient RoleAssignmentsDelete{..}
+          = go _radCustomer _radRoleAssignmentId (Just AltJSON)
+              directoryService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy RoleAssignmentsDeleteResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Directory/RoleAssignments/Get.hs b/gen/Network/Google/Resource/Directory/RoleAssignments/Get.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Directory/RoleAssignments/Get.hs
@@ -0,0 +1,100 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.Directory.RoleAssignments.Get
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Retrieve a role assignment.
+--
+-- /See:/ <https://developers.google.com/admin-sdk/directory/ Admin Directory API Reference> for @directory.roleAssignments.get@.
+module Network.Google.Resource.Directory.RoleAssignments.Get
+    (
+    -- * REST Resource
+      RoleAssignmentsGetResource
+
+    -- * Creating a Request
+    , roleAssignmentsGet
+    , RoleAssignmentsGet
+
+    -- * Request Lenses
+    , ragCustomer
+    , ragRoleAssignmentId
+    ) where
+
+import           Network.Google.Directory.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @directory.roleAssignments.get@ method which the
+-- 'RoleAssignmentsGet' request conforms to.
+type RoleAssignmentsGetResource =
+     "admin" :>
+       "directory" :>
+         "v1" :>
+           "customer" :>
+             Capture "customer" Text :>
+               "roleassignments" :>
+                 Capture "roleAssignmentId" Text :>
+                   QueryParam "alt" AltJSON :>
+                     Get '[JSON] RoleAssignment
+
+-- | Retrieve a role assignment.
+--
+-- /See:/ 'roleAssignmentsGet' smart constructor.
+data RoleAssignmentsGet = RoleAssignmentsGet
+    { _ragCustomer         :: !Text
+    , _ragRoleAssignmentId :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'RoleAssignmentsGet' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ragCustomer'
+--
+-- * 'ragRoleAssignmentId'
+roleAssignmentsGet
+    :: Text -- ^ 'ragCustomer'
+    -> Text -- ^ 'ragRoleAssignmentId'
+    -> RoleAssignmentsGet
+roleAssignmentsGet pRagCustomer_ pRagRoleAssignmentId_ =
+    RoleAssignmentsGet
+    { _ragCustomer = pRagCustomer_
+    , _ragRoleAssignmentId = pRagRoleAssignmentId_
+    }
+
+-- | Immutable ID of the Google Apps account.
+ragCustomer :: Lens' RoleAssignmentsGet Text
+ragCustomer
+  = lens _ragCustomer (\ s a -> s{_ragCustomer = a})
+
+-- | Immutable ID of the role assignment.
+ragRoleAssignmentId :: Lens' RoleAssignmentsGet Text
+ragRoleAssignmentId
+  = lens _ragRoleAssignmentId
+      (\ s a -> s{_ragRoleAssignmentId = a})
+
+instance GoogleRequest RoleAssignmentsGet where
+        type Rs RoleAssignmentsGet = RoleAssignment
+        requestClient RoleAssignmentsGet{..}
+          = go _ragCustomer _ragRoleAssignmentId (Just AltJSON)
+              directoryService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy RoleAssignmentsGetResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Directory/RoleAssignments/Insert.hs b/gen/Network/Google/Resource/Directory/RoleAssignments/Insert.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Directory/RoleAssignments/Insert.hs
@@ -0,0 +1,99 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.Directory.RoleAssignments.Insert
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates a role assignment.
+--
+-- /See:/ <https://developers.google.com/admin-sdk/directory/ Admin Directory API Reference> for @directory.roleAssignments.insert@.
+module Network.Google.Resource.Directory.RoleAssignments.Insert
+    (
+    -- * REST Resource
+      RoleAssignmentsInsertResource
+
+    -- * Creating a Request
+    , roleAssignmentsInsert
+    , RoleAssignmentsInsert
+
+    -- * Request Lenses
+    , raiPayload
+    , raiCustomer
+    ) where
+
+import           Network.Google.Directory.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @directory.roleAssignments.insert@ method which the
+-- 'RoleAssignmentsInsert' request conforms to.
+type RoleAssignmentsInsertResource =
+     "admin" :>
+       "directory" :>
+         "v1" :>
+           "customer" :>
+             Capture "customer" Text :>
+               "roleassignments" :>
+                 QueryParam "alt" AltJSON :>
+                   ReqBody '[JSON] RoleAssignment :>
+                     Post '[JSON] RoleAssignment
+
+-- | Creates a role assignment.
+--
+-- /See:/ 'roleAssignmentsInsert' smart constructor.
+data RoleAssignmentsInsert = RoleAssignmentsInsert
+    { _raiPayload  :: !RoleAssignment
+    , _raiCustomer :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'RoleAssignmentsInsert' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'raiPayload'
+--
+-- * 'raiCustomer'
+roleAssignmentsInsert
+    :: RoleAssignment -- ^ 'raiPayload'
+    -> Text -- ^ 'raiCustomer'
+    -> RoleAssignmentsInsert
+roleAssignmentsInsert pRaiPayload_ pRaiCustomer_ =
+    RoleAssignmentsInsert
+    { _raiPayload = pRaiPayload_
+    , _raiCustomer = pRaiCustomer_
+    }
+
+-- | Multipart request metadata.
+raiPayload :: Lens' RoleAssignmentsInsert RoleAssignment
+raiPayload
+  = lens _raiPayload (\ s a -> s{_raiPayload = a})
+
+-- | Immutable ID of the Google Apps account.
+raiCustomer :: Lens' RoleAssignmentsInsert Text
+raiCustomer
+  = lens _raiCustomer (\ s a -> s{_raiCustomer = a})
+
+instance GoogleRequest RoleAssignmentsInsert where
+        type Rs RoleAssignmentsInsert = RoleAssignment
+        requestClient RoleAssignmentsInsert{..}
+          = go _raiCustomer (Just AltJSON) _raiPayload
+              directoryService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy RoleAssignmentsInsertResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Directory/RoleAssignments/List.hs b/gen/Network/Google/Resource/Directory/RoleAssignments/List.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Directory/RoleAssignments/List.hs
@@ -0,0 +1,139 @@
+{-# 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.Directory.RoleAssignments.List
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Retrieves a paginated list of all roleAssignments.
+--
+-- /See:/ <https://developers.google.com/admin-sdk/directory/ Admin Directory API Reference> for @directory.roleAssignments.list@.
+module Network.Google.Resource.Directory.RoleAssignments.List
+    (
+    -- * REST Resource
+      RoleAssignmentsListResource
+
+    -- * Creating a Request
+    , roleAssignmentsList
+    , RoleAssignmentsList
+
+    -- * Request Lenses
+    , ralRoleId
+    , ralCustomer
+    , ralPageToken
+    , ralUserKey
+    , ralMaxResults
+    ) where
+
+import           Network.Google.Directory.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @directory.roleAssignments.list@ method which the
+-- 'RoleAssignmentsList' request conforms to.
+type RoleAssignmentsListResource =
+     "admin" :>
+       "directory" :>
+         "v1" :>
+           "customer" :>
+             Capture "customer" Text :>
+               "roleassignments" :>
+                 QueryParam "roleId" Text :>
+                   QueryParam "pageToken" Text :>
+                     QueryParam "userKey" Text :>
+                       QueryParam "maxResults" (Textual Int32) :>
+                         QueryParam "alt" AltJSON :>
+                           Get '[JSON] RoleAssignments
+
+-- | Retrieves a paginated list of all roleAssignments.
+--
+-- /See:/ 'roleAssignmentsList' smart constructor.
+data RoleAssignmentsList = RoleAssignmentsList
+    { _ralRoleId     :: !(Maybe Text)
+    , _ralCustomer   :: !Text
+    , _ralPageToken  :: !(Maybe Text)
+    , _ralUserKey    :: !(Maybe Text)
+    , _ralMaxResults :: !(Maybe (Textual Int32))
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'RoleAssignmentsList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ralRoleId'
+--
+-- * 'ralCustomer'
+--
+-- * 'ralPageToken'
+--
+-- * 'ralUserKey'
+--
+-- * 'ralMaxResults'
+roleAssignmentsList
+    :: Text -- ^ 'ralCustomer'
+    -> RoleAssignmentsList
+roleAssignmentsList pRalCustomer_ =
+    RoleAssignmentsList
+    { _ralRoleId = Nothing
+    , _ralCustomer = pRalCustomer_
+    , _ralPageToken = Nothing
+    , _ralUserKey = Nothing
+    , _ralMaxResults = Nothing
+    }
+
+-- | Immutable ID of a role. If included in the request, returns only role
+-- assignments containing this role ID.
+ralRoleId :: Lens' RoleAssignmentsList (Maybe Text)
+ralRoleId
+  = lens _ralRoleId (\ s a -> s{_ralRoleId = a})
+
+-- | Immutable ID of the Google Apps account.
+ralCustomer :: Lens' RoleAssignmentsList Text
+ralCustomer
+  = lens _ralCustomer (\ s a -> s{_ralCustomer = a})
+
+-- | Token to specify the next page in the list.
+ralPageToken :: Lens' RoleAssignmentsList (Maybe Text)
+ralPageToken
+  = lens _ralPageToken (\ s a -> s{_ralPageToken = a})
+
+-- | The user\'s primary email address, alias email address, or unique user
+-- ID. If included in the request, returns role assignments only for this
+-- user.
+ralUserKey :: Lens' RoleAssignmentsList (Maybe Text)
+ralUserKey
+  = lens _ralUserKey (\ s a -> s{_ralUserKey = a})
+
+-- | Maximum number of results to return.
+ralMaxResults :: Lens' RoleAssignmentsList (Maybe Int32)
+ralMaxResults
+  = lens _ralMaxResults
+      (\ s a -> s{_ralMaxResults = a})
+      . mapping _Coerce
+
+instance GoogleRequest RoleAssignmentsList where
+        type Rs RoleAssignmentsList = RoleAssignments
+        requestClient RoleAssignmentsList{..}
+          = go _ralCustomer _ralRoleId _ralPageToken
+              _ralUserKey
+              _ralMaxResults
+              (Just AltJSON)
+              directoryService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy RoleAssignmentsListResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Directory/Roles/Delete.hs b/gen/Network/Google/Resource/Directory/Roles/Delete.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Directory/Roles/Delete.hs
@@ -0,0 +1,96 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.Directory.Roles.Delete
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes a role.
+--
+-- /See:/ <https://developers.google.com/admin-sdk/directory/ Admin Directory API Reference> for @directory.roles.delete@.
+module Network.Google.Resource.Directory.Roles.Delete
+    (
+    -- * REST Resource
+      RolesDeleteResource
+
+    -- * Creating a Request
+    , rolesDelete
+    , RolesDelete
+
+    -- * Request Lenses
+    , rdRoleId
+    , rdCustomer
+    ) where
+
+import           Network.Google.Directory.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @directory.roles.delete@ method which the
+-- 'RolesDelete' request conforms to.
+type RolesDeleteResource =
+     "admin" :>
+       "directory" :>
+         "v1" :>
+           "customer" :>
+             Capture "customer" Text :>
+               "roles" :>
+                 Capture "roleId" Text :>
+                   QueryParam "alt" AltJSON :> Delete '[JSON] ()
+
+-- | Deletes a role.
+--
+-- /See:/ 'rolesDelete' smart constructor.
+data RolesDelete = RolesDelete
+    { _rdRoleId   :: !Text
+    , _rdCustomer :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'RolesDelete' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'rdRoleId'
+--
+-- * 'rdCustomer'
+rolesDelete
+    :: Text -- ^ 'rdRoleId'
+    -> Text -- ^ 'rdCustomer'
+    -> RolesDelete
+rolesDelete pRdRoleId_ pRdCustomer_ =
+    RolesDelete
+    { _rdRoleId = pRdRoleId_
+    , _rdCustomer = pRdCustomer_
+    }
+
+-- | Immutable ID of the role.
+rdRoleId :: Lens' RolesDelete Text
+rdRoleId = lens _rdRoleId (\ s a -> s{_rdRoleId = a})
+
+-- | Immutable ID of the Google Apps account.
+rdCustomer :: Lens' RolesDelete Text
+rdCustomer
+  = lens _rdCustomer (\ s a -> s{_rdCustomer = a})
+
+instance GoogleRequest RolesDelete where
+        type Rs RolesDelete = ()
+        requestClient RolesDelete{..}
+          = go _rdCustomer _rdRoleId (Just AltJSON)
+              directoryService
+          where go
+                  = buildClient (Proxy :: Proxy RolesDeleteResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Directory/Roles/Get.hs b/gen/Network/Google/Resource/Directory/Roles/Get.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Directory/Roles/Get.hs
@@ -0,0 +1,96 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.Directory.Roles.Get
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Retrieves a role.
+--
+-- /See:/ <https://developers.google.com/admin-sdk/directory/ Admin Directory API Reference> for @directory.roles.get@.
+module Network.Google.Resource.Directory.Roles.Get
+    (
+    -- * REST Resource
+      RolesGetResource
+
+    -- * Creating a Request
+    , rolesGet
+    , RolesGet
+
+    -- * Request Lenses
+    , rgRoleId
+    , rgCustomer
+    ) where
+
+import           Network.Google.Directory.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @directory.roles.get@ method which the
+-- 'RolesGet' request conforms to.
+type RolesGetResource =
+     "admin" :>
+       "directory" :>
+         "v1" :>
+           "customer" :>
+             Capture "customer" Text :>
+               "roles" :>
+                 Capture "roleId" Text :>
+                   QueryParam "alt" AltJSON :> Get '[JSON] Role
+
+-- | Retrieves a role.
+--
+-- /See:/ 'rolesGet' smart constructor.
+data RolesGet = RolesGet
+    { _rgRoleId   :: !Text
+    , _rgCustomer :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'RolesGet' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'rgRoleId'
+--
+-- * 'rgCustomer'
+rolesGet
+    :: Text -- ^ 'rgRoleId'
+    -> Text -- ^ 'rgCustomer'
+    -> RolesGet
+rolesGet pRgRoleId_ pRgCustomer_ =
+    RolesGet
+    { _rgRoleId = pRgRoleId_
+    , _rgCustomer = pRgCustomer_
+    }
+
+-- | Immutable ID of the role.
+rgRoleId :: Lens' RolesGet Text
+rgRoleId = lens _rgRoleId (\ s a -> s{_rgRoleId = a})
+
+-- | Immutable ID of the Google Apps account.
+rgCustomer :: Lens' RolesGet Text
+rgCustomer
+  = lens _rgCustomer (\ s a -> s{_rgCustomer = a})
+
+instance GoogleRequest RolesGet where
+        type Rs RolesGet = Role
+        requestClient RolesGet{..}
+          = go _rgCustomer _rgRoleId (Just AltJSON)
+              directoryService
+          where go
+                  = buildClient (Proxy :: Proxy RolesGetResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Directory/Roles/Insert.hs b/gen/Network/Google/Resource/Directory/Roles/Insert.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Directory/Roles/Insert.hs
@@ -0,0 +1,97 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.Directory.Roles.Insert
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates a role.
+--
+-- /See:/ <https://developers.google.com/admin-sdk/directory/ Admin Directory API Reference> for @directory.roles.insert@.
+module Network.Google.Resource.Directory.Roles.Insert
+    (
+    -- * REST Resource
+      RolesInsertResource
+
+    -- * Creating a Request
+    , rolesInsert
+    , RolesInsert
+
+    -- * Request Lenses
+    , riPayload
+    , riCustomer
+    ) where
+
+import           Network.Google.Directory.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @directory.roles.insert@ method which the
+-- 'RolesInsert' request conforms to.
+type RolesInsertResource =
+     "admin" :>
+       "directory" :>
+         "v1" :>
+           "customer" :>
+             Capture "customer" Text :>
+               "roles" :>
+                 QueryParam "alt" AltJSON :>
+                   ReqBody '[JSON] Role :> Post '[JSON] Role
+
+-- | Creates a role.
+--
+-- /See:/ 'rolesInsert' smart constructor.
+data RolesInsert = RolesInsert
+    { _riPayload  :: !Role
+    , _riCustomer :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'RolesInsert' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'riPayload'
+--
+-- * 'riCustomer'
+rolesInsert
+    :: Role -- ^ 'riPayload'
+    -> Text -- ^ 'riCustomer'
+    -> RolesInsert
+rolesInsert pRiPayload_ pRiCustomer_ =
+    RolesInsert
+    { _riPayload = pRiPayload_
+    , _riCustomer = pRiCustomer_
+    }
+
+-- | Multipart request metadata.
+riPayload :: Lens' RolesInsert Role
+riPayload
+  = lens _riPayload (\ s a -> s{_riPayload = a})
+
+-- | Immutable ID of the Google Apps account.
+riCustomer :: Lens' RolesInsert Text
+riCustomer
+  = lens _riCustomer (\ s a -> s{_riCustomer = a})
+
+instance GoogleRequest RolesInsert where
+        type Rs RolesInsert = Role
+        requestClient RolesInsert{..}
+          = go _riCustomer (Just AltJSON) _riPayload
+              directoryService
+          where go
+                  = buildClient (Proxy :: Proxy RolesInsertResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Directory/Roles/List.hs b/gen/Network/Google/Resource/Directory/Roles/List.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Directory/Roles/List.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.Directory.Roles.List
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Retrieves a paginated list of all the roles in a domain.
+--
+-- /See:/ <https://developers.google.com/admin-sdk/directory/ Admin Directory API Reference> for @directory.roles.list@.
+module Network.Google.Resource.Directory.Roles.List
+    (
+    -- * REST Resource
+      RolesListResource
+
+    -- * Creating a Request
+    , rolesList
+    , RolesList
+
+    -- * Request Lenses
+    , rlCustomer
+    , rlPageToken
+    , rlMaxResults
+    ) where
+
+import           Network.Google.Directory.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @directory.roles.list@ method which the
+-- 'RolesList' request conforms to.
+type RolesListResource =
+     "admin" :>
+       "directory" :>
+         "v1" :>
+           "customer" :>
+             Capture "customer" Text :>
+               "roles" :>
+                 QueryParam "pageToken" Text :>
+                   QueryParam "maxResults" (Textual Int32) :>
+                     QueryParam "alt" AltJSON :> Get '[JSON] Roles
+
+-- | Retrieves a paginated list of all the roles in a domain.
+--
+-- /See:/ 'rolesList' smart constructor.
+data RolesList = RolesList
+    { _rlCustomer   :: !Text
+    , _rlPageToken  :: !(Maybe Text)
+    , _rlMaxResults :: !(Maybe (Textual Int32))
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'RolesList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'rlCustomer'
+--
+-- * 'rlPageToken'
+--
+-- * 'rlMaxResults'
+rolesList
+    :: Text -- ^ 'rlCustomer'
+    -> RolesList
+rolesList pRlCustomer_ =
+    RolesList
+    { _rlCustomer = pRlCustomer_
+    , _rlPageToken = Nothing
+    , _rlMaxResults = Nothing
+    }
+
+-- | Immutable id of the Google Apps account.
+rlCustomer :: Lens' RolesList Text
+rlCustomer
+  = lens _rlCustomer (\ s a -> s{_rlCustomer = a})
+
+-- | Token to specify the next page in the list.
+rlPageToken :: Lens' RolesList (Maybe Text)
+rlPageToken
+  = lens _rlPageToken (\ s a -> s{_rlPageToken = a})
+
+-- | Maximum number of results to return.
+rlMaxResults :: Lens' RolesList (Maybe Int32)
+rlMaxResults
+  = lens _rlMaxResults (\ s a -> s{_rlMaxResults = a})
+      . mapping _Coerce
+
+instance GoogleRequest RolesList where
+        type Rs RolesList = Roles
+        requestClient RolesList{..}
+          = go _rlCustomer _rlPageToken _rlMaxResults
+              (Just AltJSON)
+              directoryService
+          where go
+                  = buildClient (Proxy :: Proxy RolesListResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Directory/Roles/Patch.hs b/gen/Network/Google/Resource/Directory/Roles/Patch.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Directory/Roles/Patch.hs
@@ -0,0 +1,108 @@
+{-# 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.Directory.Roles.Patch
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Updates a role. This method supports patch semantics.
+--
+-- /See:/ <https://developers.google.com/admin-sdk/directory/ Admin Directory API Reference> for @directory.roles.patch@.
+module Network.Google.Resource.Directory.Roles.Patch
+    (
+    -- * REST Resource
+      RolesPatchResource
+
+    -- * Creating a Request
+    , rolesPatch
+    , RolesPatch
+
+    -- * Request Lenses
+    , rpPayload
+    , rpRoleId
+    , rpCustomer
+    ) where
+
+import           Network.Google.Directory.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @directory.roles.patch@ method which the
+-- 'RolesPatch' request conforms to.
+type RolesPatchResource =
+     "admin" :>
+       "directory" :>
+         "v1" :>
+           "customer" :>
+             Capture "customer" Text :>
+               "roles" :>
+                 Capture "roleId" Text :>
+                   QueryParam "alt" AltJSON :>
+                     ReqBody '[JSON] Role :> Patch '[JSON] Role
+
+-- | Updates a role. This method supports patch semantics.
+--
+-- /See:/ 'rolesPatch' smart constructor.
+data RolesPatch = RolesPatch
+    { _rpPayload  :: !Role
+    , _rpRoleId   :: !Text
+    , _rpCustomer :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'RolesPatch' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'rpPayload'
+--
+-- * 'rpRoleId'
+--
+-- * 'rpCustomer'
+rolesPatch
+    :: Role -- ^ 'rpPayload'
+    -> Text -- ^ 'rpRoleId'
+    -> Text -- ^ 'rpCustomer'
+    -> RolesPatch
+rolesPatch pRpPayload_ pRpRoleId_ pRpCustomer_ =
+    RolesPatch
+    { _rpPayload = pRpPayload_
+    , _rpRoleId = pRpRoleId_
+    , _rpCustomer = pRpCustomer_
+    }
+
+-- | Multipart request metadata.
+rpPayload :: Lens' RolesPatch Role
+rpPayload
+  = lens _rpPayload (\ s a -> s{_rpPayload = a})
+
+-- | Immutable ID of the role.
+rpRoleId :: Lens' RolesPatch Text
+rpRoleId = lens _rpRoleId (\ s a -> s{_rpRoleId = a})
+
+-- | Immutable ID of the Google Apps account.
+rpCustomer :: Lens' RolesPatch Text
+rpCustomer
+  = lens _rpCustomer (\ s a -> s{_rpCustomer = a})
+
+instance GoogleRequest RolesPatch where
+        type Rs RolesPatch = Role
+        requestClient RolesPatch{..}
+          = go _rpCustomer _rpRoleId (Just AltJSON) _rpPayload
+              directoryService
+          where go
+                  = buildClient (Proxy :: Proxy RolesPatchResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Directory/Roles/Update.hs b/gen/Network/Google/Resource/Directory/Roles/Update.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Directory/Roles/Update.hs
@@ -0,0 +1,108 @@
+{-# 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.Directory.Roles.Update
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Updates a role.
+--
+-- /See:/ <https://developers.google.com/admin-sdk/directory/ Admin Directory API Reference> for @directory.roles.update@.
+module Network.Google.Resource.Directory.Roles.Update
+    (
+    -- * REST Resource
+      RolesUpdateResource
+
+    -- * Creating a Request
+    , rolesUpdate
+    , RolesUpdate
+
+    -- * Request Lenses
+    , ruPayload
+    , ruRoleId
+    , ruCustomer
+    ) where
+
+import           Network.Google.Directory.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @directory.roles.update@ method which the
+-- 'RolesUpdate' request conforms to.
+type RolesUpdateResource =
+     "admin" :>
+       "directory" :>
+         "v1" :>
+           "customer" :>
+             Capture "customer" Text :>
+               "roles" :>
+                 Capture "roleId" Text :>
+                   QueryParam "alt" AltJSON :>
+                     ReqBody '[JSON] Role :> Put '[JSON] Role
+
+-- | Updates a role.
+--
+-- /See:/ 'rolesUpdate' smart constructor.
+data RolesUpdate = RolesUpdate
+    { _ruPayload  :: !Role
+    , _ruRoleId   :: !Text
+    , _ruCustomer :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'RolesUpdate' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ruPayload'
+--
+-- * 'ruRoleId'
+--
+-- * 'ruCustomer'
+rolesUpdate
+    :: Role -- ^ 'ruPayload'
+    -> Text -- ^ 'ruRoleId'
+    -> Text -- ^ 'ruCustomer'
+    -> RolesUpdate
+rolesUpdate pRuPayload_ pRuRoleId_ pRuCustomer_ =
+    RolesUpdate
+    { _ruPayload = pRuPayload_
+    , _ruRoleId = pRuRoleId_
+    , _ruCustomer = pRuCustomer_
+    }
+
+-- | Multipart request metadata.
+ruPayload :: Lens' RolesUpdate Role
+ruPayload
+  = lens _ruPayload (\ s a -> s{_ruPayload = a})
+
+-- | Immutable ID of the role.
+ruRoleId :: Lens' RolesUpdate Text
+ruRoleId = lens _ruRoleId (\ s a -> s{_ruRoleId = a})
+
+-- | Immutable ID of the Google Apps account.
+ruCustomer :: Lens' RolesUpdate Text
+ruCustomer
+  = lens _ruCustomer (\ s a -> s{_ruCustomer = a})
+
+instance GoogleRequest RolesUpdate where
+        type Rs RolesUpdate = Role
+        requestClient RolesUpdate{..}
+          = go _ruCustomer _ruRoleId (Just AltJSON) _ruPayload
+              directoryService
+          where go
+                  = buildClient (Proxy :: Proxy RolesUpdateResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Directory/Schemas/Delete.hs b/gen/Network/Google/Resource/Directory/Schemas/Delete.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Directory/Schemas/Delete.hs
@@ -0,0 +1,97 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.Directory.Schemas.Delete
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Delete schema
+--
+-- /See:/ <https://developers.google.com/admin-sdk/directory/ Admin Directory API Reference> for @directory.schemas.delete@.
+module Network.Google.Resource.Directory.Schemas.Delete
+    (
+    -- * REST Resource
+      SchemasDeleteResource
+
+    -- * Creating a Request
+    , schemasDelete
+    , SchemasDelete
+
+    -- * Request Lenses
+    , sdCustomerId
+    , sdSchemaKey
+    ) where
+
+import           Network.Google.Directory.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @directory.schemas.delete@ method which the
+-- 'SchemasDelete' request conforms to.
+type SchemasDeleteResource =
+     "admin" :>
+       "directory" :>
+         "v1" :>
+           "customer" :>
+             Capture "customerId" Text :>
+               "schemas" :>
+                 Capture "schemaKey" Text :>
+                   QueryParam "alt" AltJSON :> Delete '[JSON] ()
+
+-- | Delete schema
+--
+-- /See:/ 'schemasDelete' smart constructor.
+data SchemasDelete = SchemasDelete
+    { _sdCustomerId :: !Text
+    , _sdSchemaKey  :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'SchemasDelete' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'sdCustomerId'
+--
+-- * 'sdSchemaKey'
+schemasDelete
+    :: Text -- ^ 'sdCustomerId'
+    -> Text -- ^ 'sdSchemaKey'
+    -> SchemasDelete
+schemasDelete pSdCustomerId_ pSdSchemaKey_ =
+    SchemasDelete
+    { _sdCustomerId = pSdCustomerId_
+    , _sdSchemaKey = pSdSchemaKey_
+    }
+
+-- | Immutable id of the Google Apps account
+sdCustomerId :: Lens' SchemasDelete Text
+sdCustomerId
+  = lens _sdCustomerId (\ s a -> s{_sdCustomerId = a})
+
+-- | Name or immutable Id of the schema
+sdSchemaKey :: Lens' SchemasDelete Text
+sdSchemaKey
+  = lens _sdSchemaKey (\ s a -> s{_sdSchemaKey = a})
+
+instance GoogleRequest SchemasDelete where
+        type Rs SchemasDelete = ()
+        requestClient SchemasDelete{..}
+          = go _sdCustomerId _sdSchemaKey (Just AltJSON)
+              directoryService
+          where go
+                  = buildClient (Proxy :: Proxy SchemasDeleteResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Directory/Schemas/Get.hs b/gen/Network/Google/Resource/Directory/Schemas/Get.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Directory/Schemas/Get.hs
@@ -0,0 +1,97 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.Directory.Schemas.Get
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Retrieve schema
+--
+-- /See:/ <https://developers.google.com/admin-sdk/directory/ Admin Directory API Reference> for @directory.schemas.get@.
+module Network.Google.Resource.Directory.Schemas.Get
+    (
+    -- * REST Resource
+      SchemasGetResource
+
+    -- * Creating a Request
+    , schemasGet
+    , SchemasGet
+
+    -- * Request Lenses
+    , sgCustomerId
+    , sgSchemaKey
+    ) where
+
+import           Network.Google.Directory.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @directory.schemas.get@ method which the
+-- 'SchemasGet' request conforms to.
+type SchemasGetResource =
+     "admin" :>
+       "directory" :>
+         "v1" :>
+           "customer" :>
+             Capture "customerId" Text :>
+               "schemas" :>
+                 Capture "schemaKey" Text :>
+                   QueryParam "alt" AltJSON :> Get '[JSON] Schema
+
+-- | Retrieve schema
+--
+-- /See:/ 'schemasGet' smart constructor.
+data SchemasGet = SchemasGet
+    { _sgCustomerId :: !Text
+    , _sgSchemaKey  :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'SchemasGet' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'sgCustomerId'
+--
+-- * 'sgSchemaKey'
+schemasGet
+    :: Text -- ^ 'sgCustomerId'
+    -> Text -- ^ 'sgSchemaKey'
+    -> SchemasGet
+schemasGet pSgCustomerId_ pSgSchemaKey_ =
+    SchemasGet
+    { _sgCustomerId = pSgCustomerId_
+    , _sgSchemaKey = pSgSchemaKey_
+    }
+
+-- | Immutable id of the Google Apps account
+sgCustomerId :: Lens' SchemasGet Text
+sgCustomerId
+  = lens _sgCustomerId (\ s a -> s{_sgCustomerId = a})
+
+-- | Name or immutable Id of the schema
+sgSchemaKey :: Lens' SchemasGet Text
+sgSchemaKey
+  = lens _sgSchemaKey (\ s a -> s{_sgSchemaKey = a})
+
+instance GoogleRequest SchemasGet where
+        type Rs SchemasGet = Schema
+        requestClient SchemasGet{..}
+          = go _sgCustomerId _sgSchemaKey (Just AltJSON)
+              directoryService
+          where go
+                  = buildClient (Proxy :: Proxy SchemasGetResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Directory/Schemas/Insert.hs b/gen/Network/Google/Resource/Directory/Schemas/Insert.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Directory/Schemas/Insert.hs
@@ -0,0 +1,97 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.Directory.Schemas.Insert
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Create schema.
+--
+-- /See:/ <https://developers.google.com/admin-sdk/directory/ Admin Directory API Reference> for @directory.schemas.insert@.
+module Network.Google.Resource.Directory.Schemas.Insert
+    (
+    -- * REST Resource
+      SchemasInsertResource
+
+    -- * Creating a Request
+    , schemasInsert
+    , SchemasInsert
+
+    -- * Request Lenses
+    , siPayload
+    , siCustomerId
+    ) where
+
+import           Network.Google.Directory.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @directory.schemas.insert@ method which the
+-- 'SchemasInsert' request conforms to.
+type SchemasInsertResource =
+     "admin" :>
+       "directory" :>
+         "v1" :>
+           "customer" :>
+             Capture "customerId" Text :>
+               "schemas" :>
+                 QueryParam "alt" AltJSON :>
+                   ReqBody '[JSON] Schema :> Post '[JSON] Schema
+
+-- | Create schema.
+--
+-- /See:/ 'schemasInsert' smart constructor.
+data SchemasInsert = SchemasInsert
+    { _siPayload    :: !Schema
+    , _siCustomerId :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'SchemasInsert' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'siPayload'
+--
+-- * 'siCustomerId'
+schemasInsert
+    :: Schema -- ^ 'siPayload'
+    -> Text -- ^ 'siCustomerId'
+    -> SchemasInsert
+schemasInsert pSiPayload_ pSiCustomerId_ =
+    SchemasInsert
+    { _siPayload = pSiPayload_
+    , _siCustomerId = pSiCustomerId_
+    }
+
+-- | Multipart request metadata.
+siPayload :: Lens' SchemasInsert Schema
+siPayload
+  = lens _siPayload (\ s a -> s{_siPayload = a})
+
+-- | Immutable id of the Google Apps account
+siCustomerId :: Lens' SchemasInsert Text
+siCustomerId
+  = lens _siCustomerId (\ s a -> s{_siCustomerId = a})
+
+instance GoogleRequest SchemasInsert where
+        type Rs SchemasInsert = Schema
+        requestClient SchemasInsert{..}
+          = go _siCustomerId (Just AltJSON) _siPayload
+              directoryService
+          where go
+                  = buildClient (Proxy :: Proxy SchemasInsertResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Directory/Schemas/List.hs b/gen/Network/Google/Resource/Directory/Schemas/List.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Directory/Schemas/List.hs
@@ -0,0 +1,84 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.Directory.Schemas.List
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Retrieve all schemas for a customer
+--
+-- /See:/ <https://developers.google.com/admin-sdk/directory/ Admin Directory API Reference> for @directory.schemas.list@.
+module Network.Google.Resource.Directory.Schemas.List
+    (
+    -- * REST Resource
+      SchemasListResource
+
+    -- * Creating a Request
+    , schemasList
+    , SchemasList
+
+    -- * Request Lenses
+    , slCustomerId
+    ) where
+
+import           Network.Google.Directory.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @directory.schemas.list@ method which the
+-- 'SchemasList' request conforms to.
+type SchemasListResource =
+     "admin" :>
+       "directory" :>
+         "v1" :>
+           "customer" :>
+             Capture "customerId" Text :>
+               "schemas" :>
+                 QueryParam "alt" AltJSON :> Get '[JSON] Schemas
+
+-- | Retrieve all schemas for a customer
+--
+-- /See:/ 'schemasList' smart constructor.
+newtype SchemasList = SchemasList
+    { _slCustomerId :: Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'SchemasList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'slCustomerId'
+schemasList
+    :: Text -- ^ 'slCustomerId'
+    -> SchemasList
+schemasList pSlCustomerId_ =
+    SchemasList
+    { _slCustomerId = pSlCustomerId_
+    }
+
+-- | Immutable id of the Google Apps account
+slCustomerId :: Lens' SchemasList Text
+slCustomerId
+  = lens _slCustomerId (\ s a -> s{_slCustomerId = a})
+
+instance GoogleRequest SchemasList where
+        type Rs SchemasList = Schemas
+        requestClient SchemasList{..}
+          = go _slCustomerId (Just AltJSON) directoryService
+          where go
+                  = buildClient (Proxy :: Proxy SchemasListResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Directory/Schemas/Patch.hs b/gen/Network/Google/Resource/Directory/Schemas/Patch.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Directory/Schemas/Patch.hs
@@ -0,0 +1,110 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.Directory.Schemas.Patch
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Update schema. This method supports patch semantics.
+--
+-- /See:/ <https://developers.google.com/admin-sdk/directory/ Admin Directory API Reference> for @directory.schemas.patch@.
+module Network.Google.Resource.Directory.Schemas.Patch
+    (
+    -- * REST Resource
+      SchemasPatchResource
+
+    -- * Creating a Request
+    , schemasPatch
+    , SchemasPatch
+
+    -- * Request Lenses
+    , spPayload
+    , spCustomerId
+    , spSchemaKey
+    ) where
+
+import           Network.Google.Directory.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @directory.schemas.patch@ method which the
+-- 'SchemasPatch' request conforms to.
+type SchemasPatchResource =
+     "admin" :>
+       "directory" :>
+         "v1" :>
+           "customer" :>
+             Capture "customerId" Text :>
+               "schemas" :>
+                 Capture "schemaKey" Text :>
+                   QueryParam "alt" AltJSON :>
+                     ReqBody '[JSON] Schema :> Patch '[JSON] Schema
+
+-- | Update schema. This method supports patch semantics.
+--
+-- /See:/ 'schemasPatch' smart constructor.
+data SchemasPatch = SchemasPatch
+    { _spPayload    :: !Schema
+    , _spCustomerId :: !Text
+    , _spSchemaKey  :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'SchemasPatch' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'spPayload'
+--
+-- * 'spCustomerId'
+--
+-- * 'spSchemaKey'
+schemasPatch
+    :: Schema -- ^ 'spPayload'
+    -> Text -- ^ 'spCustomerId'
+    -> Text -- ^ 'spSchemaKey'
+    -> SchemasPatch
+schemasPatch pSpPayload_ pSpCustomerId_ pSpSchemaKey_ =
+    SchemasPatch
+    { _spPayload = pSpPayload_
+    , _spCustomerId = pSpCustomerId_
+    , _spSchemaKey = pSpSchemaKey_
+    }
+
+-- | Multipart request metadata.
+spPayload :: Lens' SchemasPatch Schema
+spPayload
+  = lens _spPayload (\ s a -> s{_spPayload = a})
+
+-- | Immutable id of the Google Apps account
+spCustomerId :: Lens' SchemasPatch Text
+spCustomerId
+  = lens _spCustomerId (\ s a -> s{_spCustomerId = a})
+
+-- | Name or immutable Id of the schema.
+spSchemaKey :: Lens' SchemasPatch Text
+spSchemaKey
+  = lens _spSchemaKey (\ s a -> s{_spSchemaKey = a})
+
+instance GoogleRequest SchemasPatch where
+        type Rs SchemasPatch = Schema
+        requestClient SchemasPatch{..}
+          = go _spCustomerId _spSchemaKey (Just AltJSON)
+              _spPayload
+              directoryService
+          where go
+                  = buildClient (Proxy :: Proxy SchemasPatchResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Directory/Schemas/Update.hs b/gen/Network/Google/Resource/Directory/Schemas/Update.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Directory/Schemas/Update.hs
@@ -0,0 +1,110 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.Directory.Schemas.Update
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Update schema
+--
+-- /See:/ <https://developers.google.com/admin-sdk/directory/ Admin Directory API Reference> for @directory.schemas.update@.
+module Network.Google.Resource.Directory.Schemas.Update
+    (
+    -- * REST Resource
+      SchemasUpdateResource
+
+    -- * Creating a Request
+    , schemasUpdate
+    , SchemasUpdate
+
+    -- * Request Lenses
+    , suPayload
+    , suCustomerId
+    , suSchemaKey
+    ) where
+
+import           Network.Google.Directory.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @directory.schemas.update@ method which the
+-- 'SchemasUpdate' request conforms to.
+type SchemasUpdateResource =
+     "admin" :>
+       "directory" :>
+         "v1" :>
+           "customer" :>
+             Capture "customerId" Text :>
+               "schemas" :>
+                 Capture "schemaKey" Text :>
+                   QueryParam "alt" AltJSON :>
+                     ReqBody '[JSON] Schema :> Put '[JSON] Schema
+
+-- | Update schema
+--
+-- /See:/ 'schemasUpdate' smart constructor.
+data SchemasUpdate = SchemasUpdate
+    { _suPayload    :: !Schema
+    , _suCustomerId :: !Text
+    , _suSchemaKey  :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'SchemasUpdate' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'suPayload'
+--
+-- * 'suCustomerId'
+--
+-- * 'suSchemaKey'
+schemasUpdate
+    :: Schema -- ^ 'suPayload'
+    -> Text -- ^ 'suCustomerId'
+    -> Text -- ^ 'suSchemaKey'
+    -> SchemasUpdate
+schemasUpdate pSuPayload_ pSuCustomerId_ pSuSchemaKey_ =
+    SchemasUpdate
+    { _suPayload = pSuPayload_
+    , _suCustomerId = pSuCustomerId_
+    , _suSchemaKey = pSuSchemaKey_
+    }
+
+-- | Multipart request metadata.
+suPayload :: Lens' SchemasUpdate Schema
+suPayload
+  = lens _suPayload (\ s a -> s{_suPayload = a})
+
+-- | Immutable id of the Google Apps account
+suCustomerId :: Lens' SchemasUpdate Text
+suCustomerId
+  = lens _suCustomerId (\ s a -> s{_suCustomerId = a})
+
+-- | Name or immutable Id of the schema.
+suSchemaKey :: Lens' SchemasUpdate Text
+suSchemaKey
+  = lens _suSchemaKey (\ s a -> s{_suSchemaKey = a})
+
+instance GoogleRequest SchemasUpdate where
+        type Rs SchemasUpdate = Schema
+        requestClient SchemasUpdate{..}
+          = go _suCustomerId _suSchemaKey (Just AltJSON)
+              _suPayload
+              directoryService
+          where go
+                  = buildClient (Proxy :: Proxy SchemasUpdateResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Directory/Tokens/Delete.hs b/gen/Network/Google/Resource/Directory/Tokens/Delete.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Directory/Tokens/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.Directory.Tokens.Delete
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Delete all access tokens issued by a user for an application.
+--
+-- /See:/ <https://developers.google.com/admin-sdk/directory/ Admin Directory API Reference> for @directory.tokens.delete@.
+module Network.Google.Resource.Directory.Tokens.Delete
+    (
+    -- * REST Resource
+      TokensDeleteResource
+
+    -- * Creating a Request
+    , tokensDelete
+    , TokensDelete
+
+    -- * Request Lenses
+    , tdClientId
+    , tdUserKey
+    ) where
+
+import           Network.Google.Directory.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @directory.tokens.delete@ method which the
+-- 'TokensDelete' request conforms to.
+type TokensDeleteResource =
+     "admin" :>
+       "directory" :>
+         "v1" :>
+           "users" :>
+             Capture "userKey" Text :>
+               "tokens" :>
+                 Capture "clientId" Text :>
+                   QueryParam "alt" AltJSON :> Delete '[JSON] ()
+
+-- | Delete all access tokens issued by a user for an application.
+--
+-- /See:/ 'tokensDelete' smart constructor.
+data TokensDelete = TokensDelete
+    { _tdClientId :: !Text
+    , _tdUserKey  :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'TokensDelete' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'tdClientId'
+--
+-- * 'tdUserKey'
+tokensDelete
+    :: Text -- ^ 'tdClientId'
+    -> Text -- ^ 'tdUserKey'
+    -> TokensDelete
+tokensDelete pTdClientId_ pTdUserKey_ =
+    TokensDelete
+    { _tdClientId = pTdClientId_
+    , _tdUserKey = pTdUserKey_
+    }
+
+-- | The Client ID of the application the token is issued to.
+tdClientId :: Lens' TokensDelete Text
+tdClientId
+  = lens _tdClientId (\ s a -> s{_tdClientId = a})
+
+-- | Identifies the user in the API request. The value can be the user\'s
+-- primary email address, alias email address, or unique user ID.
+tdUserKey :: Lens' TokensDelete Text
+tdUserKey
+  = lens _tdUserKey (\ s a -> s{_tdUserKey = a})
+
+instance GoogleRequest TokensDelete where
+        type Rs TokensDelete = ()
+        requestClient TokensDelete{..}
+          = go _tdUserKey _tdClientId (Just AltJSON)
+              directoryService
+          where go
+                  = buildClient (Proxy :: Proxy TokensDeleteResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Directory/Tokens/Get.hs b/gen/Network/Google/Resource/Directory/Tokens/Get.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Directory/Tokens/Get.hs
@@ -0,0 +1,98 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.Directory.Tokens.Get
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Get information about an access token issued by a user.
+--
+-- /See:/ <https://developers.google.com/admin-sdk/directory/ Admin Directory API Reference> for @directory.tokens.get@.
+module Network.Google.Resource.Directory.Tokens.Get
+    (
+    -- * REST Resource
+      TokensGetResource
+
+    -- * Creating a Request
+    , tokensGet
+    , TokensGet
+
+    -- * Request Lenses
+    , tgClientId
+    , tgUserKey
+    ) where
+
+import           Network.Google.Directory.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @directory.tokens.get@ method which the
+-- 'TokensGet' request conforms to.
+type TokensGetResource =
+     "admin" :>
+       "directory" :>
+         "v1" :>
+           "users" :>
+             Capture "userKey" Text :>
+               "tokens" :>
+                 Capture "clientId" Text :>
+                   QueryParam "alt" AltJSON :> Get '[JSON] Token
+
+-- | Get information about an access token issued by a user.
+--
+-- /See:/ 'tokensGet' smart constructor.
+data TokensGet = TokensGet
+    { _tgClientId :: !Text
+    , _tgUserKey  :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'TokensGet' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'tgClientId'
+--
+-- * 'tgUserKey'
+tokensGet
+    :: Text -- ^ 'tgClientId'
+    -> Text -- ^ 'tgUserKey'
+    -> TokensGet
+tokensGet pTgClientId_ pTgUserKey_ =
+    TokensGet
+    { _tgClientId = pTgClientId_
+    , _tgUserKey = pTgUserKey_
+    }
+
+-- | The Client ID of the application the token is issued to.
+tgClientId :: Lens' TokensGet Text
+tgClientId
+  = lens _tgClientId (\ s a -> s{_tgClientId = a})
+
+-- | Identifies the user in the API request. The value can be the user\'s
+-- primary email address, alias email address, or unique user ID.
+tgUserKey :: Lens' TokensGet Text
+tgUserKey
+  = lens _tgUserKey (\ s a -> s{_tgUserKey = a})
+
+instance GoogleRequest TokensGet where
+        type Rs TokensGet = Token
+        requestClient TokensGet{..}
+          = go _tgUserKey _tgClientId (Just AltJSON)
+              directoryService
+          where go
+                  = buildClient (Proxy :: Proxy TokensGetResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Directory/Tokens/List.hs b/gen/Network/Google/Resource/Directory/Tokens/List.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Directory/Tokens/List.hs
@@ -0,0 +1,87 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.Directory.Tokens.List
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns the set of tokens specified user has issued to 3rd party
+-- applications.
+--
+-- /See:/ <https://developers.google.com/admin-sdk/directory/ Admin Directory API Reference> for @directory.tokens.list@.
+module Network.Google.Resource.Directory.Tokens.List
+    (
+    -- * REST Resource
+      TokensListResource
+
+    -- * Creating a Request
+    , tokensList
+    , TokensList
+
+    -- * Request Lenses
+    , tlUserKey
+    ) where
+
+import           Network.Google.Directory.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @directory.tokens.list@ method which the
+-- 'TokensList' request conforms to.
+type TokensListResource =
+     "admin" :>
+       "directory" :>
+         "v1" :>
+           "users" :>
+             Capture "userKey" Text :>
+               "tokens" :>
+                 QueryParam "alt" AltJSON :> Get '[JSON] Tokens
+
+-- | Returns the set of tokens specified user has issued to 3rd party
+-- applications.
+--
+-- /See:/ 'tokensList' smart constructor.
+newtype TokensList = TokensList
+    { _tlUserKey :: Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'TokensList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'tlUserKey'
+tokensList
+    :: Text -- ^ 'tlUserKey'
+    -> TokensList
+tokensList pTlUserKey_ =
+    TokensList
+    { _tlUserKey = pTlUserKey_
+    }
+
+-- | Identifies the user in the API request. The value can be the user\'s
+-- primary email address, alias email address, or unique user ID.
+tlUserKey :: Lens' TokensList Text
+tlUserKey
+  = lens _tlUserKey (\ s a -> s{_tlUserKey = a})
+
+instance GoogleRequest TokensList where
+        type Rs TokensList = Tokens
+        requestClient TokensList{..}
+          = go _tlUserKey (Just AltJSON) directoryService
+          where go
+                  = buildClient (Proxy :: Proxy TokensListResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Directory/Users/Aliases/Delete.hs b/gen/Network/Google/Resource/Directory/Users/Aliases/Delete.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Directory/Users/Aliases/Delete.hs
@@ -0,0 +1,97 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.Directory.Users.Aliases.Delete
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Remove a alias for the user
+--
+-- /See:/ <https://developers.google.com/admin-sdk/directory/ Admin Directory API Reference> for @directory.users.aliases.delete@.
+module Network.Google.Resource.Directory.Users.Aliases.Delete
+    (
+    -- * REST Resource
+      UsersAliasesDeleteResource
+
+    -- * Creating a Request
+    , usersAliasesDelete
+    , UsersAliasesDelete
+
+    -- * Request Lenses
+    , uadAlias
+    , uadUserKey
+    ) where
+
+import           Network.Google.Directory.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @directory.users.aliases.delete@ method which the
+-- 'UsersAliasesDelete' request conforms to.
+type UsersAliasesDeleteResource =
+     "admin" :>
+       "directory" :>
+         "v1" :>
+           "users" :>
+             Capture "userKey" Text :>
+               "aliases" :>
+                 Capture "alias" Text :>
+                   QueryParam "alt" AltJSON :> Delete '[JSON] ()
+
+-- | Remove a alias for the user
+--
+-- /See:/ 'usersAliasesDelete' smart constructor.
+data UsersAliasesDelete = UsersAliasesDelete
+    { _uadAlias   :: !Text
+    , _uadUserKey :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'UsersAliasesDelete' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'uadAlias'
+--
+-- * 'uadUserKey'
+usersAliasesDelete
+    :: Text -- ^ 'uadAlias'
+    -> Text -- ^ 'uadUserKey'
+    -> UsersAliasesDelete
+usersAliasesDelete pUadAlias_ pUadUserKey_ =
+    UsersAliasesDelete
+    { _uadAlias = pUadAlias_
+    , _uadUserKey = pUadUserKey_
+    }
+
+-- | The alias to be removed
+uadAlias :: Lens' UsersAliasesDelete Text
+uadAlias = lens _uadAlias (\ s a -> s{_uadAlias = a})
+
+-- | Email or immutable Id of the user
+uadUserKey :: Lens' UsersAliasesDelete Text
+uadUserKey
+  = lens _uadUserKey (\ s a -> s{_uadUserKey = a})
+
+instance GoogleRequest UsersAliasesDelete where
+        type Rs UsersAliasesDelete = ()
+        requestClient UsersAliasesDelete{..}
+          = go _uadUserKey _uadAlias (Just AltJSON)
+              directoryService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy UsersAliasesDeleteResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Directory/Users/Aliases/Insert.hs b/gen/Network/Google/Resource/Directory/Users/Aliases/Insert.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Directory/Users/Aliases/Insert.hs
@@ -0,0 +1,98 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.Directory.Users.Aliases.Insert
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Add a alias for the user
+--
+-- /See:/ <https://developers.google.com/admin-sdk/directory/ Admin Directory API Reference> for @directory.users.aliases.insert@.
+module Network.Google.Resource.Directory.Users.Aliases.Insert
+    (
+    -- * REST Resource
+      UsersAliasesInsertResource
+
+    -- * Creating a Request
+    , usersAliasesInsert
+    , UsersAliasesInsert
+
+    -- * Request Lenses
+    , uaiPayload
+    , uaiUserKey
+    ) where
+
+import           Network.Google.Directory.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @directory.users.aliases.insert@ method which the
+-- 'UsersAliasesInsert' request conforms to.
+type UsersAliasesInsertResource =
+     "admin" :>
+       "directory" :>
+         "v1" :>
+           "users" :>
+             Capture "userKey" Text :>
+               "aliases" :>
+                 QueryParam "alt" AltJSON :>
+                   ReqBody '[JSON] Alias :> Post '[JSON] Alias
+
+-- | Add a alias for the user
+--
+-- /See:/ 'usersAliasesInsert' smart constructor.
+data UsersAliasesInsert = UsersAliasesInsert
+    { _uaiPayload :: !Alias
+    , _uaiUserKey :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'UsersAliasesInsert' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'uaiPayload'
+--
+-- * 'uaiUserKey'
+usersAliasesInsert
+    :: Alias -- ^ 'uaiPayload'
+    -> Text -- ^ 'uaiUserKey'
+    -> UsersAliasesInsert
+usersAliasesInsert pUaiPayload_ pUaiUserKey_ =
+    UsersAliasesInsert
+    { _uaiPayload = pUaiPayload_
+    , _uaiUserKey = pUaiUserKey_
+    }
+
+-- | Multipart request metadata.
+uaiPayload :: Lens' UsersAliasesInsert Alias
+uaiPayload
+  = lens _uaiPayload (\ s a -> s{_uaiPayload = a})
+
+-- | Email or immutable Id of the user
+uaiUserKey :: Lens' UsersAliasesInsert Text
+uaiUserKey
+  = lens _uaiUserKey (\ s a -> s{_uaiUserKey = a})
+
+instance GoogleRequest UsersAliasesInsert where
+        type Rs UsersAliasesInsert = Alias
+        requestClient UsersAliasesInsert{..}
+          = go _uaiUserKey (Just AltJSON) _uaiPayload
+              directoryService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy UsersAliasesInsertResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Directory/Users/Aliases/List.hs b/gen/Network/Google/Resource/Directory/Users/Aliases/List.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Directory/Users/Aliases/List.hs
@@ -0,0 +1,96 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.Directory.Users.Aliases.List
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- List all aliases for a user
+--
+-- /See:/ <https://developers.google.com/admin-sdk/directory/ Admin Directory API Reference> for @directory.users.aliases.list@.
+module Network.Google.Resource.Directory.Users.Aliases.List
+    (
+    -- * REST Resource
+      UsersAliasesListResource
+
+    -- * Creating a Request
+    , usersAliasesList
+    , UsersAliasesList
+
+    -- * Request Lenses
+    , ualEvent
+    , ualUserKey
+    ) where
+
+import           Network.Google.Directory.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @directory.users.aliases.list@ method which the
+-- 'UsersAliasesList' request conforms to.
+type UsersAliasesListResource =
+     "admin" :>
+       "directory" :>
+         "v1" :>
+           "users" :>
+             Capture "userKey" Text :>
+               "aliases" :>
+                 QueryParam "event" UsersAliasesListEvent :>
+                   QueryParam "alt" AltJSON :> Get '[JSON] Aliases
+
+-- | List all aliases for a user
+--
+-- /See:/ 'usersAliasesList' smart constructor.
+data UsersAliasesList = UsersAliasesList
+    { _ualEvent   :: !(Maybe UsersAliasesListEvent)
+    , _ualUserKey :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'UsersAliasesList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ualEvent'
+--
+-- * 'ualUserKey'
+usersAliasesList
+    :: Text -- ^ 'ualUserKey'
+    -> UsersAliasesList
+usersAliasesList pUalUserKey_ =
+    UsersAliasesList
+    { _ualEvent = Nothing
+    , _ualUserKey = pUalUserKey_
+    }
+
+-- | Event on which subscription is intended (if subscribing)
+ualEvent :: Lens' UsersAliasesList (Maybe UsersAliasesListEvent)
+ualEvent = lens _ualEvent (\ s a -> s{_ualEvent = a})
+
+-- | Email or immutable Id of the user
+ualUserKey :: Lens' UsersAliasesList Text
+ualUserKey
+  = lens _ualUserKey (\ s a -> s{_ualUserKey = a})
+
+instance GoogleRequest UsersAliasesList where
+        type Rs UsersAliasesList = Aliases
+        requestClient UsersAliasesList{..}
+          = go _ualUserKey _ualEvent (Just AltJSON)
+              directoryService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy UsersAliasesListResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Directory/Users/Aliases/Watch.hs b/gen/Network/Google/Resource/Directory/Users/Aliases/Watch.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Directory/Users/Aliases/Watch.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.Directory.Users.Aliases.Watch
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Watch for changes in user aliases list
+--
+-- /See:/ <https://developers.google.com/admin-sdk/directory/ Admin Directory API Reference> for @directory.users.aliases.watch@.
+module Network.Google.Resource.Directory.Users.Aliases.Watch
+    (
+    -- * REST Resource
+      UsersAliasesWatchResource
+
+    -- * Creating a Request
+    , usersAliasesWatch
+    , UsersAliasesWatch
+
+    -- * Request Lenses
+    , uawEvent
+    , uawPayload
+    , uawUserKey
+    ) where
+
+import           Network.Google.Directory.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @directory.users.aliases.watch@ method which the
+-- 'UsersAliasesWatch' request conforms to.
+type UsersAliasesWatchResource =
+     "admin" :>
+       "directory" :>
+         "v1" :>
+           "users" :>
+             Capture "userKey" Text :>
+               "aliases" :>
+                 "watch" :>
+                   QueryParam "event" UsersAliasesWatchEvent :>
+                     QueryParam "alt" AltJSON :>
+                       ReqBody '[JSON] Channel :> Post '[JSON] Channel
+
+-- | Watch for changes in user aliases list
+--
+-- /See:/ 'usersAliasesWatch' smart constructor.
+data UsersAliasesWatch = UsersAliasesWatch
+    { _uawEvent   :: !(Maybe UsersAliasesWatchEvent)
+    , _uawPayload :: !Channel
+    , _uawUserKey :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'UsersAliasesWatch' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'uawEvent'
+--
+-- * 'uawPayload'
+--
+-- * 'uawUserKey'
+usersAliasesWatch
+    :: Channel -- ^ 'uawPayload'
+    -> Text -- ^ 'uawUserKey'
+    -> UsersAliasesWatch
+usersAliasesWatch pUawPayload_ pUawUserKey_ =
+    UsersAliasesWatch
+    { _uawEvent = Nothing
+    , _uawPayload = pUawPayload_
+    , _uawUserKey = pUawUserKey_
+    }
+
+-- | Event on which subscription is intended (if subscribing)
+uawEvent :: Lens' UsersAliasesWatch (Maybe UsersAliasesWatchEvent)
+uawEvent = lens _uawEvent (\ s a -> s{_uawEvent = a})
+
+-- | Multipart request metadata.
+uawPayload :: Lens' UsersAliasesWatch Channel
+uawPayload
+  = lens _uawPayload (\ s a -> s{_uawPayload = a})
+
+-- | Email or immutable Id of the user
+uawUserKey :: Lens' UsersAliasesWatch Text
+uawUserKey
+  = lens _uawUserKey (\ s a -> s{_uawUserKey = a})
+
+instance GoogleRequest UsersAliasesWatch where
+        type Rs UsersAliasesWatch = Channel
+        requestClient UsersAliasesWatch{..}
+          = go _uawUserKey _uawEvent (Just AltJSON) _uawPayload
+              directoryService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy UsersAliasesWatchResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Directory/Users/Delete.hs b/gen/Network/Google/Resource/Directory/Users/Delete.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Directory/Users/Delete.hs
@@ -0,0 +1,83 @@
+{-# 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.Directory.Users.Delete
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Delete user
+--
+-- /See:/ <https://developers.google.com/admin-sdk/directory/ Admin Directory API Reference> for @directory.users.delete@.
+module Network.Google.Resource.Directory.Users.Delete
+    (
+    -- * REST Resource
+      UsersDeleteResource
+
+    -- * Creating a Request
+    , usersDelete
+    , UsersDelete
+
+    -- * Request Lenses
+    , udUserKey
+    ) where
+
+import           Network.Google.Directory.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @directory.users.delete@ method which the
+-- 'UsersDelete' request conforms to.
+type UsersDeleteResource =
+     "admin" :>
+       "directory" :>
+         "v1" :>
+           "users" :>
+             Capture "userKey" Text :>
+               QueryParam "alt" AltJSON :> Delete '[JSON] ()
+
+-- | Delete user
+--
+-- /See:/ 'usersDelete' smart constructor.
+newtype UsersDelete = UsersDelete
+    { _udUserKey :: 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:
+--
+-- * 'udUserKey'
+usersDelete
+    :: Text -- ^ 'udUserKey'
+    -> UsersDelete
+usersDelete pUdUserKey_ =
+    UsersDelete
+    { _udUserKey = pUdUserKey_
+    }
+
+-- | Email or immutable Id of the user
+udUserKey :: Lens' UsersDelete Text
+udUserKey
+  = lens _udUserKey (\ s a -> s{_udUserKey = a})
+
+instance GoogleRequest UsersDelete where
+        type Rs UsersDelete = ()
+        requestClient UsersDelete{..}
+          = go _udUserKey (Just AltJSON) directoryService
+          where go
+                  = buildClient (Proxy :: Proxy UsersDeleteResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Directory/Users/Get.hs b/gen/Network/Google/Resource/Directory/Users/Get.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Directory/Users/Get.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.Directory.Users.Get
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- retrieve user
+--
+-- /See:/ <https://developers.google.com/admin-sdk/directory/ Admin Directory API Reference> for @directory.users.get@.
+module Network.Google.Resource.Directory.Users.Get
+    (
+    -- * REST Resource
+      UsersGetResource
+
+    -- * Creating a Request
+    , usersGet
+    , UsersGet
+
+    -- * Request Lenses
+    , ugViewType
+    , ugCustomFieldMask
+    , ugProjection
+    , ugUserKey
+    ) where
+
+import           Network.Google.Directory.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @directory.users.get@ method which the
+-- 'UsersGet' request conforms to.
+type UsersGetResource =
+     "admin" :>
+       "directory" :>
+         "v1" :>
+           "users" :>
+             Capture "userKey" Text :>
+               QueryParam "viewType" UsersGetViewType :>
+                 QueryParam "customFieldMask" Text :>
+                   QueryParam "projection" UsersGetProjection :>
+                     QueryParam "alt" AltJSON :> Get '[JSON] User
+
+-- | retrieve user
+--
+-- /See:/ 'usersGet' smart constructor.
+data UsersGet = UsersGet
+    { _ugViewType        :: !UsersGetViewType
+    , _ugCustomFieldMask :: !(Maybe Text)
+    , _ugProjection      :: !UsersGetProjection
+    , _ugUserKey         :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'UsersGet' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ugViewType'
+--
+-- * 'ugCustomFieldMask'
+--
+-- * 'ugProjection'
+--
+-- * 'ugUserKey'
+usersGet
+    :: Text -- ^ 'ugUserKey'
+    -> UsersGet
+usersGet pUgUserKey_ =
+    UsersGet
+    { _ugViewType = UGVTAdminView
+    , _ugCustomFieldMask = Nothing
+    , _ugProjection = UGPBasic
+    , _ugUserKey = pUgUserKey_
+    }
+
+-- | Whether to fetch the ADMIN_VIEW or DOMAIN_PUBLIC view of the user.
+ugViewType :: Lens' UsersGet UsersGetViewType
+ugViewType
+  = lens _ugViewType (\ s a -> s{_ugViewType = a})
+
+-- | Comma-separated list of schema names. All fields from these schemas are
+-- fetched. This should only be set when projection=custom.
+ugCustomFieldMask :: Lens' UsersGet (Maybe Text)
+ugCustomFieldMask
+  = lens _ugCustomFieldMask
+      (\ s a -> s{_ugCustomFieldMask = a})
+
+-- | What subset of fields to fetch for this user.
+ugProjection :: Lens' UsersGet UsersGetProjection
+ugProjection
+  = lens _ugProjection (\ s a -> s{_ugProjection = a})
+
+-- | Email or immutable Id of the user
+ugUserKey :: Lens' UsersGet Text
+ugUserKey
+  = lens _ugUserKey (\ s a -> s{_ugUserKey = a})
+
+instance GoogleRequest UsersGet where
+        type Rs UsersGet = User
+        requestClient UsersGet{..}
+          = go _ugUserKey (Just _ugViewType) _ugCustomFieldMask
+              (Just _ugProjection)
+              (Just AltJSON)
+              directoryService
+          where go
+                  = buildClient (Proxy :: Proxy UsersGetResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Directory/Users/Insert.hs b/gen/Network/Google/Resource/Directory/Users/Insert.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Directory/Users/Insert.hs
@@ -0,0 +1,83 @@
+{-# 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.Directory.Users.Insert
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- create user.
+--
+-- /See:/ <https://developers.google.com/admin-sdk/directory/ Admin Directory API Reference> for @directory.users.insert@.
+module Network.Google.Resource.Directory.Users.Insert
+    (
+    -- * REST Resource
+      UsersInsertResource
+
+    -- * Creating a Request
+    , usersInsert
+    , UsersInsert
+
+    -- * Request Lenses
+    , uiPayload
+    ) where
+
+import           Network.Google.Directory.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @directory.users.insert@ method which the
+-- 'UsersInsert' request conforms to.
+type UsersInsertResource =
+     "admin" :>
+       "directory" :>
+         "v1" :>
+           "users" :>
+             QueryParam "alt" AltJSON :>
+               ReqBody '[JSON] User :> Post '[JSON] User
+
+-- | create user.
+--
+-- /See:/ 'usersInsert' smart constructor.
+newtype UsersInsert = UsersInsert
+    { _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:
+--
+-- * 'uiPayload'
+usersInsert
+    :: User -- ^ 'uiPayload'
+    -> UsersInsert
+usersInsert pUiPayload_ =
+    UsersInsert
+    { _uiPayload = pUiPayload_
+    }
+
+-- | Multipart request metadata.
+uiPayload :: Lens' UsersInsert User
+uiPayload
+  = lens _uiPayload (\ s a -> s{_uiPayload = a})
+
+instance GoogleRequest UsersInsert where
+        type Rs UsersInsert = User
+        requestClient UsersInsert{..}
+          = go (Just AltJSON) _uiPayload directoryService
+          where go
+                  = buildClient (Proxy :: Proxy UsersInsertResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Directory/Users/List.hs b/gen/Network/Google/Resource/Directory/Users/List.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Directory/Users/List.hs
@@ -0,0 +1,220 @@
+{-# 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.Directory.Users.List
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Retrieve either deleted users or all users in a domain (paginated)
+--
+-- /See:/ <https://developers.google.com/admin-sdk/directory/ Admin Directory API Reference> for @directory.users.list@.
+module Network.Google.Resource.Directory.Users.List
+    (
+    -- * REST Resource
+      UsersListResource
+
+    -- * Creating a Request
+    , usersList
+    , UsersList
+
+    -- * Request Lenses
+    , ulEvent
+    , ulOrderBy
+    , ulViewType
+    , ulCustomFieldMask
+    , ulDomain
+    , ulShowDeleted
+    , ulSortOrder
+    , ulCustomer
+    , ulQuery
+    , ulProjection
+    , ulPageToken
+    , ulMaxResults
+    ) where
+
+import           Network.Google.Directory.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @directory.users.list@ method which the
+-- 'UsersList' request conforms to.
+type UsersListResource =
+     "admin" :>
+       "directory" :>
+         "v1" :>
+           "users" :>
+             QueryParam "event" UsersListEvent :>
+               QueryParam "orderBy" UsersListOrderBy :>
+                 QueryParam "viewType" UsersListViewType :>
+                   QueryParam "customFieldMask" Text :>
+                     QueryParam "domain" Text :>
+                       QueryParam "showDeleted" Text :>
+                         QueryParam "sortOrder" UsersListSortOrder :>
+                           QueryParam "customer" Text :>
+                             QueryParam "query" Text :>
+                               QueryParam "projection" UsersListProjection :>
+                                 QueryParam "pageToken" Text :>
+                                   QueryParam "maxResults" (Textual Int32) :>
+                                     QueryParam "alt" AltJSON :>
+                                       Get '[JSON] Users
+
+-- | Retrieve either deleted users or all users in a domain (paginated)
+--
+-- /See:/ 'usersList' smart constructor.
+data UsersList = UsersList
+    { _ulEvent           :: !(Maybe UsersListEvent)
+    , _ulOrderBy         :: !(Maybe UsersListOrderBy)
+    , _ulViewType        :: !UsersListViewType
+    , _ulCustomFieldMask :: !(Maybe Text)
+    , _ulDomain          :: !(Maybe Text)
+    , _ulShowDeleted     :: !(Maybe Text)
+    , _ulSortOrder       :: !(Maybe UsersListSortOrder)
+    , _ulCustomer        :: !(Maybe Text)
+    , _ulQuery           :: !(Maybe Text)
+    , _ulProjection      :: !UsersListProjection
+    , _ulPageToken       :: !(Maybe Text)
+    , _ulMaxResults      :: !(Maybe (Textual Int32))
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'UsersList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ulEvent'
+--
+-- * 'ulOrderBy'
+--
+-- * 'ulViewType'
+--
+-- * 'ulCustomFieldMask'
+--
+-- * 'ulDomain'
+--
+-- * 'ulShowDeleted'
+--
+-- * 'ulSortOrder'
+--
+-- * 'ulCustomer'
+--
+-- * 'ulQuery'
+--
+-- * 'ulProjection'
+--
+-- * 'ulPageToken'
+--
+-- * 'ulMaxResults'
+usersList
+    :: UsersList
+usersList =
+    UsersList
+    { _ulEvent = Nothing
+    , _ulOrderBy = Nothing
+    , _ulViewType = AdminView
+    , _ulCustomFieldMask = Nothing
+    , _ulDomain = Nothing
+    , _ulShowDeleted = Nothing
+    , _ulSortOrder = Nothing
+    , _ulCustomer = Nothing
+    , _ulQuery = Nothing
+    , _ulProjection = ULPBasic
+    , _ulPageToken = Nothing
+    , _ulMaxResults = Nothing
+    }
+
+-- | Event on which subscription is intended (if subscribing)
+ulEvent :: Lens' UsersList (Maybe UsersListEvent)
+ulEvent = lens _ulEvent (\ s a -> s{_ulEvent = a})
+
+-- | Column to use for sorting results
+ulOrderBy :: Lens' UsersList (Maybe UsersListOrderBy)
+ulOrderBy
+  = lens _ulOrderBy (\ s a -> s{_ulOrderBy = a})
+
+-- | Whether to fetch the ADMIN_VIEW or DOMAIN_PUBLIC view of the user.
+ulViewType :: Lens' UsersList UsersListViewType
+ulViewType
+  = lens _ulViewType (\ s a -> s{_ulViewType = a})
+
+-- | Comma-separated list of schema names. All fields from these schemas are
+-- fetched. This should only be set when projection=custom.
+ulCustomFieldMask :: Lens' UsersList (Maybe Text)
+ulCustomFieldMask
+  = lens _ulCustomFieldMask
+      (\ s a -> s{_ulCustomFieldMask = a})
+
+-- | Name of the domain. Fill this field to get users from only this domain.
+-- To return all users in a multi-domain fill customer field instead.
+ulDomain :: Lens' UsersList (Maybe Text)
+ulDomain = lens _ulDomain (\ s a -> s{_ulDomain = a})
+
+-- | If set to true retrieves the list of deleted users. Default is false
+ulShowDeleted :: Lens' UsersList (Maybe Text)
+ulShowDeleted
+  = lens _ulShowDeleted
+      (\ s a -> s{_ulShowDeleted = a})
+
+-- | Whether to return results in ascending or descending order.
+ulSortOrder :: Lens' UsersList (Maybe UsersListSortOrder)
+ulSortOrder
+  = lens _ulSortOrder (\ s a -> s{_ulSortOrder = a})
+
+-- | Immutable id of the Google Apps account. In case of multi-domain, to
+-- fetch all users for a customer, fill this field instead of domain.
+ulCustomer :: Lens' UsersList (Maybe Text)
+ulCustomer
+  = lens _ulCustomer (\ s a -> s{_ulCustomer = a})
+
+-- | Query string search. Should be of the form \"\". Complete documentation
+-- is at
+-- https:\/\/developers.google.com\/admin-sdk\/directory\/v1\/guides\/search-users
+ulQuery :: Lens' UsersList (Maybe Text)
+ulQuery = lens _ulQuery (\ s a -> s{_ulQuery = a})
+
+-- | What subset of fields to fetch for this user.
+ulProjection :: Lens' UsersList UsersListProjection
+ulProjection
+  = lens _ulProjection (\ s a -> s{_ulProjection = a})
+
+-- | Token to specify next page in the list
+ulPageToken :: Lens' UsersList (Maybe Text)
+ulPageToken
+  = lens _ulPageToken (\ s a -> s{_ulPageToken = a})
+
+-- | Maximum number of results to return. Default is 100. Max allowed is 500
+ulMaxResults :: Lens' UsersList (Maybe Int32)
+ulMaxResults
+  = lens _ulMaxResults (\ s a -> s{_ulMaxResults = a})
+      . mapping _Coerce
+
+instance GoogleRequest UsersList where
+        type Rs UsersList = Users
+        requestClient UsersList{..}
+          = go _ulEvent _ulOrderBy (Just _ulViewType)
+              _ulCustomFieldMask
+              _ulDomain
+              _ulShowDeleted
+              _ulSortOrder
+              _ulCustomer
+              _ulQuery
+              (Just _ulProjection)
+              _ulPageToken
+              _ulMaxResults
+              (Just AltJSON)
+              directoryService
+          where go
+                  = buildClient (Proxy :: Proxy UsersListResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Directory/Users/MakeAdmin.hs b/gen/Network/Google/Resource/Directory/Users/MakeAdmin.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Directory/Users/MakeAdmin.hs
@@ -0,0 +1,97 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.Directory.Users.MakeAdmin
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- change admin status of a user
+--
+-- /See:/ <https://developers.google.com/admin-sdk/directory/ Admin Directory API Reference> for @directory.users.makeAdmin@.
+module Network.Google.Resource.Directory.Users.MakeAdmin
+    (
+    -- * REST Resource
+      UsersMakeAdminResource
+
+    -- * Creating a Request
+    , usersMakeAdmin
+    , UsersMakeAdmin
+
+    -- * Request Lenses
+    , umaPayload
+    , umaUserKey
+    ) where
+
+import           Network.Google.Directory.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @directory.users.makeAdmin@ method which the
+-- 'UsersMakeAdmin' request conforms to.
+type UsersMakeAdminResource =
+     "admin" :>
+       "directory" :>
+         "v1" :>
+           "users" :>
+             Capture "userKey" Text :>
+               "makeAdmin" :>
+                 QueryParam "alt" AltJSON :>
+                   ReqBody '[JSON] UserMakeAdmin :> Post '[JSON] ()
+
+-- | change admin status of a user
+--
+-- /See:/ 'usersMakeAdmin' smart constructor.
+data UsersMakeAdmin = UsersMakeAdmin
+    { _umaPayload :: !UserMakeAdmin
+    , _umaUserKey :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'UsersMakeAdmin' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'umaPayload'
+--
+-- * 'umaUserKey'
+usersMakeAdmin
+    :: UserMakeAdmin -- ^ 'umaPayload'
+    -> Text -- ^ 'umaUserKey'
+    -> UsersMakeAdmin
+usersMakeAdmin pUmaPayload_ pUmaUserKey_ =
+    UsersMakeAdmin
+    { _umaPayload = pUmaPayload_
+    , _umaUserKey = pUmaUserKey_
+    }
+
+-- | Multipart request metadata.
+umaPayload :: Lens' UsersMakeAdmin UserMakeAdmin
+umaPayload
+  = lens _umaPayload (\ s a -> s{_umaPayload = a})
+
+-- | Email or immutable Id of the user as admin
+umaUserKey :: Lens' UsersMakeAdmin Text
+umaUserKey
+  = lens _umaUserKey (\ s a -> s{_umaUserKey = a})
+
+instance GoogleRequest UsersMakeAdmin where
+        type Rs UsersMakeAdmin = ()
+        requestClient UsersMakeAdmin{..}
+          = go _umaUserKey (Just AltJSON) _umaPayload
+              directoryService
+          where go
+                  = buildClient (Proxy :: Proxy UsersMakeAdminResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Directory/Users/Patch.hs b/gen/Network/Google/Resource/Directory/Users/Patch.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Directory/Users/Patch.hs
@@ -0,0 +1,97 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.Directory.Users.Patch
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- update user. This method supports patch semantics.
+--
+-- /See:/ <https://developers.google.com/admin-sdk/directory/ Admin Directory API Reference> for @directory.users.patch@.
+module Network.Google.Resource.Directory.Users.Patch
+    (
+    -- * REST Resource
+      UsersPatchResource
+
+    -- * Creating a Request
+    , usersPatch
+    , UsersPatch
+
+    -- * Request Lenses
+    , upPayload
+    , upUserKey
+    ) where
+
+import           Network.Google.Directory.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @directory.users.patch@ method which the
+-- 'UsersPatch' request conforms to.
+type UsersPatchResource =
+     "admin" :>
+       "directory" :>
+         "v1" :>
+           "users" :>
+             Capture "userKey" Text :>
+               QueryParam "alt" AltJSON :>
+                 ReqBody '[JSON] User :> Patch '[JSON] User
+
+-- | update user. This method supports patch semantics.
+--
+-- /See:/ 'usersPatch' smart constructor.
+data UsersPatch = UsersPatch
+    { _upPayload :: !User
+    , _upUserKey :: !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:
+--
+-- * 'upPayload'
+--
+-- * 'upUserKey'
+usersPatch
+    :: User -- ^ 'upPayload'
+    -> Text -- ^ 'upUserKey'
+    -> UsersPatch
+usersPatch pUpPayload_ pUpUserKey_ =
+    UsersPatch
+    { _upPayload = pUpPayload_
+    , _upUserKey = pUpUserKey_
+    }
+
+-- | Multipart request metadata.
+upPayload :: Lens' UsersPatch User
+upPayload
+  = lens _upPayload (\ s a -> s{_upPayload = a})
+
+-- | Email or immutable Id of the user. If Id, it should match with id of
+-- user object
+upUserKey :: Lens' UsersPatch Text
+upUserKey
+  = lens _upUserKey (\ s a -> s{_upUserKey = a})
+
+instance GoogleRequest UsersPatch where
+        type Rs UsersPatch = User
+        requestClient UsersPatch{..}
+          = go _upUserKey (Just AltJSON) _upPayload
+              directoryService
+          where go
+                  = buildClient (Proxy :: Proxy UsersPatchResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Directory/Users/Photos/Delete.hs b/gen/Network/Google/Resource/Directory/Users/Photos/Delete.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Directory/Users/Photos/Delete.hs
@@ -0,0 +1,86 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.Directory.Users.Photos.Delete
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Remove photos for the user
+--
+-- /See:/ <https://developers.google.com/admin-sdk/directory/ Admin Directory API Reference> for @directory.users.photos.delete@.
+module Network.Google.Resource.Directory.Users.Photos.Delete
+    (
+    -- * REST Resource
+      UsersPhotosDeleteResource
+
+    -- * Creating a Request
+    , usersPhotosDelete
+    , UsersPhotosDelete
+
+    -- * Request Lenses
+    , updUserKey
+    ) where
+
+import           Network.Google.Directory.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @directory.users.photos.delete@ method which the
+-- 'UsersPhotosDelete' request conforms to.
+type UsersPhotosDeleteResource =
+     "admin" :>
+       "directory" :>
+         "v1" :>
+           "users" :>
+             Capture "userKey" Text :>
+               "photos" :>
+                 "thumbnail" :>
+                   QueryParam "alt" AltJSON :> Delete '[JSON] ()
+
+-- | Remove photos for the user
+--
+-- /See:/ 'usersPhotosDelete' smart constructor.
+newtype UsersPhotosDelete = UsersPhotosDelete
+    { _updUserKey :: Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'UsersPhotosDelete' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'updUserKey'
+usersPhotosDelete
+    :: Text -- ^ 'updUserKey'
+    -> UsersPhotosDelete
+usersPhotosDelete pUpdUserKey_ =
+    UsersPhotosDelete
+    { _updUserKey = pUpdUserKey_
+    }
+
+-- | Email or immutable Id of the user
+updUserKey :: Lens' UsersPhotosDelete Text
+updUserKey
+  = lens _updUserKey (\ s a -> s{_updUserKey = a})
+
+instance GoogleRequest UsersPhotosDelete where
+        type Rs UsersPhotosDelete = ()
+        requestClient UsersPhotosDelete{..}
+          = go _updUserKey (Just AltJSON) directoryService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy UsersPhotosDeleteResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Directory/Users/Photos/Get.hs b/gen/Network/Google/Resource/Directory/Users/Photos/Get.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Directory/Users/Photos/Get.hs
@@ -0,0 +1,85 @@
+{-# 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.Directory.Users.Photos.Get
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Retrieve photo of a user
+--
+-- /See:/ <https://developers.google.com/admin-sdk/directory/ Admin Directory API Reference> for @directory.users.photos.get@.
+module Network.Google.Resource.Directory.Users.Photos.Get
+    (
+    -- * REST Resource
+      UsersPhotosGetResource
+
+    -- * Creating a Request
+    , usersPhotosGet
+    , UsersPhotosGet
+
+    -- * Request Lenses
+    , upgUserKey
+    ) where
+
+import           Network.Google.Directory.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @directory.users.photos.get@ method which the
+-- 'UsersPhotosGet' request conforms to.
+type UsersPhotosGetResource =
+     "admin" :>
+       "directory" :>
+         "v1" :>
+           "users" :>
+             Capture "userKey" Text :>
+               "photos" :>
+                 "thumbnail" :>
+                   QueryParam "alt" AltJSON :> Get '[JSON] UserPhoto
+
+-- | Retrieve photo of a user
+--
+-- /See:/ 'usersPhotosGet' smart constructor.
+newtype UsersPhotosGet = UsersPhotosGet
+    { _upgUserKey :: Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'UsersPhotosGet' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'upgUserKey'
+usersPhotosGet
+    :: Text -- ^ 'upgUserKey'
+    -> UsersPhotosGet
+usersPhotosGet pUpgUserKey_ =
+    UsersPhotosGet
+    { _upgUserKey = pUpgUserKey_
+    }
+
+-- | Email or immutable Id of the user
+upgUserKey :: Lens' UsersPhotosGet Text
+upgUserKey
+  = lens _upgUserKey (\ s a -> s{_upgUserKey = a})
+
+instance GoogleRequest UsersPhotosGet where
+        type Rs UsersPhotosGet = UserPhoto
+        requestClient UsersPhotosGet{..}
+          = go _upgUserKey (Just AltJSON) directoryService
+          where go
+                  = buildClient (Proxy :: Proxy UsersPhotosGetResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Directory/Users/Photos/Patch.hs b/gen/Network/Google/Resource/Directory/Users/Photos/Patch.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Directory/Users/Photos/Patch.hs
@@ -0,0 +1,99 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.Directory.Users.Photos.Patch
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Add a photo for the user. This method supports patch semantics.
+--
+-- /See:/ <https://developers.google.com/admin-sdk/directory/ Admin Directory API Reference> for @directory.users.photos.patch@.
+module Network.Google.Resource.Directory.Users.Photos.Patch
+    (
+    -- * REST Resource
+      UsersPhotosPatchResource
+
+    -- * Creating a Request
+    , usersPhotosPatch
+    , UsersPhotosPatch
+
+    -- * Request Lenses
+    , uppPayload
+    , uppUserKey
+    ) where
+
+import           Network.Google.Directory.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @directory.users.photos.patch@ method which the
+-- 'UsersPhotosPatch' request conforms to.
+type UsersPhotosPatchResource =
+     "admin" :>
+       "directory" :>
+         "v1" :>
+           "users" :>
+             Capture "userKey" Text :>
+               "photos" :>
+                 "thumbnail" :>
+                   QueryParam "alt" AltJSON :>
+                     ReqBody '[JSON] UserPhoto :> Patch '[JSON] UserPhoto
+
+-- | Add a photo for the user. This method supports patch semantics.
+--
+-- /See:/ 'usersPhotosPatch' smart constructor.
+data UsersPhotosPatch = UsersPhotosPatch
+    { _uppPayload :: !UserPhoto
+    , _uppUserKey :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'UsersPhotosPatch' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'uppPayload'
+--
+-- * 'uppUserKey'
+usersPhotosPatch
+    :: UserPhoto -- ^ 'uppPayload'
+    -> Text -- ^ 'uppUserKey'
+    -> UsersPhotosPatch
+usersPhotosPatch pUppPayload_ pUppUserKey_ =
+    UsersPhotosPatch
+    { _uppPayload = pUppPayload_
+    , _uppUserKey = pUppUserKey_
+    }
+
+-- | Multipart request metadata.
+uppPayload :: Lens' UsersPhotosPatch UserPhoto
+uppPayload
+  = lens _uppPayload (\ s a -> s{_uppPayload = a})
+
+-- | Email or immutable Id of the user
+uppUserKey :: Lens' UsersPhotosPatch Text
+uppUserKey
+  = lens _uppUserKey (\ s a -> s{_uppUserKey = a})
+
+instance GoogleRequest UsersPhotosPatch where
+        type Rs UsersPhotosPatch = UserPhoto
+        requestClient UsersPhotosPatch{..}
+          = go _uppUserKey (Just AltJSON) _uppPayload
+              directoryService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy UsersPhotosPatchResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Directory/Users/Photos/Update.hs b/gen/Network/Google/Resource/Directory/Users/Photos/Update.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Directory/Users/Photos/Update.hs
@@ -0,0 +1,99 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.Directory.Users.Photos.Update
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Add a photo for the user
+--
+-- /See:/ <https://developers.google.com/admin-sdk/directory/ Admin Directory API Reference> for @directory.users.photos.update@.
+module Network.Google.Resource.Directory.Users.Photos.Update
+    (
+    -- * REST Resource
+      UsersPhotosUpdateResource
+
+    -- * Creating a Request
+    , usersPhotosUpdate
+    , UsersPhotosUpdate
+
+    -- * Request Lenses
+    , upuPayload
+    , upuUserKey
+    ) where
+
+import           Network.Google.Directory.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @directory.users.photos.update@ method which the
+-- 'UsersPhotosUpdate' request conforms to.
+type UsersPhotosUpdateResource =
+     "admin" :>
+       "directory" :>
+         "v1" :>
+           "users" :>
+             Capture "userKey" Text :>
+               "photos" :>
+                 "thumbnail" :>
+                   QueryParam "alt" AltJSON :>
+                     ReqBody '[JSON] UserPhoto :> Put '[JSON] UserPhoto
+
+-- | Add a photo for the user
+--
+-- /See:/ 'usersPhotosUpdate' smart constructor.
+data UsersPhotosUpdate = UsersPhotosUpdate
+    { _upuPayload :: !UserPhoto
+    , _upuUserKey :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'UsersPhotosUpdate' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'upuPayload'
+--
+-- * 'upuUserKey'
+usersPhotosUpdate
+    :: UserPhoto -- ^ 'upuPayload'
+    -> Text -- ^ 'upuUserKey'
+    -> UsersPhotosUpdate
+usersPhotosUpdate pUpuPayload_ pUpuUserKey_ =
+    UsersPhotosUpdate
+    { _upuPayload = pUpuPayload_
+    , _upuUserKey = pUpuUserKey_
+    }
+
+-- | Multipart request metadata.
+upuPayload :: Lens' UsersPhotosUpdate UserPhoto
+upuPayload
+  = lens _upuPayload (\ s a -> s{_upuPayload = a})
+
+-- | Email or immutable Id of the user
+upuUserKey :: Lens' UsersPhotosUpdate Text
+upuUserKey
+  = lens _upuUserKey (\ s a -> s{_upuUserKey = a})
+
+instance GoogleRequest UsersPhotosUpdate where
+        type Rs UsersPhotosUpdate = UserPhoto
+        requestClient UsersPhotosUpdate{..}
+          = go _upuUserKey (Just AltJSON) _upuPayload
+              directoryService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy UsersPhotosUpdateResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Directory/Users/Undelete.hs b/gen/Network/Google/Resource/Directory/Users/Undelete.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Directory/Users/Undelete.hs
@@ -0,0 +1,97 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.Directory.Users.Undelete
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Undelete a deleted user
+--
+-- /See:/ <https://developers.google.com/admin-sdk/directory/ Admin Directory API Reference> for @directory.users.undelete@.
+module Network.Google.Resource.Directory.Users.Undelete
+    (
+    -- * REST Resource
+      UsersUndeleteResource
+
+    -- * Creating a Request
+    , usersUndelete
+    , UsersUndelete
+
+    -- * Request Lenses
+    , uuPayload
+    , uuUserKey
+    ) where
+
+import           Network.Google.Directory.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @directory.users.undelete@ method which the
+-- 'UsersUndelete' request conforms to.
+type UsersUndeleteResource =
+     "admin" :>
+       "directory" :>
+         "v1" :>
+           "users" :>
+             Capture "userKey" Text :>
+               "undelete" :>
+                 QueryParam "alt" AltJSON :>
+                   ReqBody '[JSON] UserUndelete :> Post '[JSON] ()
+
+-- | Undelete a deleted user
+--
+-- /See:/ 'usersUndelete' smart constructor.
+data UsersUndelete = UsersUndelete
+    { _uuPayload :: !UserUndelete
+    , _uuUserKey :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'UsersUndelete' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'uuPayload'
+--
+-- * 'uuUserKey'
+usersUndelete
+    :: UserUndelete -- ^ 'uuPayload'
+    -> Text -- ^ 'uuUserKey'
+    -> UsersUndelete
+usersUndelete pUuPayload_ pUuUserKey_ =
+    UsersUndelete
+    { _uuPayload = pUuPayload_
+    , _uuUserKey = pUuUserKey_
+    }
+
+-- | Multipart request metadata.
+uuPayload :: Lens' UsersUndelete UserUndelete
+uuPayload
+  = lens _uuPayload (\ s a -> s{_uuPayload = a})
+
+-- | The immutable id of the user
+uuUserKey :: Lens' UsersUndelete Text
+uuUserKey
+  = lens _uuUserKey (\ s a -> s{_uuUserKey = a})
+
+instance GoogleRequest UsersUndelete where
+        type Rs UsersUndelete = ()
+        requestClient UsersUndelete{..}
+          = go _uuUserKey (Just AltJSON) _uuPayload
+              directoryService
+          where go
+                  = buildClient (Proxy :: Proxy UsersUndeleteResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Directory/Users/Update.hs b/gen/Network/Google/Resource/Directory/Users/Update.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Directory/Users/Update.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.Directory.Users.Update
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- update user
+--
+-- /See:/ <https://developers.google.com/admin-sdk/directory/ Admin Directory API Reference> for @directory.users.update@.
+module Network.Google.Resource.Directory.Users.Update
+    (
+    -- * REST Resource
+      UsersUpdateResource
+
+    -- * Creating a Request
+    , usersUpdate
+    , UsersUpdate
+
+    -- * Request Lenses
+    , uPayload
+    , uUserKey
+    ) where
+
+import           Network.Google.Directory.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @directory.users.update@ method which the
+-- 'UsersUpdate' request conforms to.
+type UsersUpdateResource =
+     "admin" :>
+       "directory" :>
+         "v1" :>
+           "users" :>
+             Capture "userKey" Text :>
+               QueryParam "alt" AltJSON :>
+                 ReqBody '[JSON] User :> Put '[JSON] User
+
+-- | update user
+--
+-- /See:/ 'usersUpdate' smart constructor.
+data UsersUpdate = UsersUpdate
+    { _uPayload :: !User
+    , _uUserKey :: !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:
+--
+-- * 'uPayload'
+--
+-- * 'uUserKey'
+usersUpdate
+    :: User -- ^ 'uPayload'
+    -> Text -- ^ 'uUserKey'
+    -> UsersUpdate
+usersUpdate pUPayload_ pUUserKey_ =
+    UsersUpdate
+    { _uPayload = pUPayload_
+    , _uUserKey = pUUserKey_
+    }
+
+-- | Multipart request metadata.
+uPayload :: Lens' UsersUpdate User
+uPayload = lens _uPayload (\ s a -> s{_uPayload = a})
+
+-- | Email or immutable Id of the user. If Id, it should match with id of
+-- user object
+uUserKey :: Lens' UsersUpdate Text
+uUserKey = lens _uUserKey (\ s a -> s{_uUserKey = a})
+
+instance GoogleRequest UsersUpdate where
+        type Rs UsersUpdate = User
+        requestClient UsersUpdate{..}
+          = go _uUserKey (Just AltJSON) _uPayload
+              directoryService
+          where go
+                  = buildClient (Proxy :: Proxy UsersUpdateResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Directory/Users/Watch.hs b/gen/Network/Google/Resource/Directory/Users/Watch.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Directory/Users/Watch.hs
@@ -0,0 +1,234 @@
+{-# 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.Directory.Users.Watch
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Watch for changes in users list
+--
+-- /See:/ <https://developers.google.com/admin-sdk/directory/ Admin Directory API Reference> for @directory.users.watch@.
+module Network.Google.Resource.Directory.Users.Watch
+    (
+    -- * REST Resource
+      UsersWatchResource
+
+    -- * Creating a Request
+    , usersWatch
+    , UsersWatch
+
+    -- * Request Lenses
+    , uwEvent
+    , uwOrderBy
+    , uwViewType
+    , uwCustomFieldMask
+    , uwDomain
+    , uwShowDeleted
+    , uwPayload
+    , uwSortOrder
+    , uwCustomer
+    , uwQuery
+    , uwProjection
+    , uwPageToken
+    , uwMaxResults
+    ) where
+
+import           Network.Google.Directory.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @directory.users.watch@ method which the
+-- 'UsersWatch' request conforms to.
+type UsersWatchResource =
+     "admin" :>
+       "directory" :>
+         "v1" :>
+           "users" :>
+             "watch" :>
+               QueryParam "event" UsersWatchEvent :>
+                 QueryParam "orderBy" UsersWatchOrderBy :>
+                   QueryParam "viewType" UsersWatchViewType :>
+                     QueryParam "customFieldMask" Text :>
+                       QueryParam "domain" Text :>
+                         QueryParam "showDeleted" Text :>
+                           QueryParam "sortOrder" UsersWatchSortOrder :>
+                             QueryParam "customer" Text :>
+                               QueryParam "query" Text :>
+                                 QueryParam "projection" UsersWatchProjection :>
+                                   QueryParam "pageToken" Text :>
+                                     QueryParam "maxResults" (Textual Int32) :>
+                                       QueryParam "alt" AltJSON :>
+                                         ReqBody '[JSON] Channel :>
+                                           Post '[JSON] Channel
+
+-- | Watch for changes in users list
+--
+-- /See:/ 'usersWatch' smart constructor.
+data UsersWatch = UsersWatch
+    { _uwEvent           :: !(Maybe UsersWatchEvent)
+    , _uwOrderBy         :: !(Maybe UsersWatchOrderBy)
+    , _uwViewType        :: !UsersWatchViewType
+    , _uwCustomFieldMask :: !(Maybe Text)
+    , _uwDomain          :: !(Maybe Text)
+    , _uwShowDeleted     :: !(Maybe Text)
+    , _uwPayload         :: !Channel
+    , _uwSortOrder       :: !(Maybe UsersWatchSortOrder)
+    , _uwCustomer        :: !(Maybe Text)
+    , _uwQuery           :: !(Maybe Text)
+    , _uwProjection      :: !UsersWatchProjection
+    , _uwPageToken       :: !(Maybe Text)
+    , _uwMaxResults      :: !(Maybe (Textual Int32))
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'UsersWatch' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'uwEvent'
+--
+-- * 'uwOrderBy'
+--
+-- * 'uwViewType'
+--
+-- * 'uwCustomFieldMask'
+--
+-- * 'uwDomain'
+--
+-- * 'uwShowDeleted'
+--
+-- * 'uwPayload'
+--
+-- * 'uwSortOrder'
+--
+-- * 'uwCustomer'
+--
+-- * 'uwQuery'
+--
+-- * 'uwProjection'
+--
+-- * 'uwPageToken'
+--
+-- * 'uwMaxResults'
+usersWatch
+    :: Channel -- ^ 'uwPayload'
+    -> UsersWatch
+usersWatch pUwPayload_ =
+    UsersWatch
+    { _uwEvent = Nothing
+    , _uwOrderBy = Nothing
+    , _uwViewType = UWVTAdminView
+    , _uwCustomFieldMask = Nothing
+    , _uwDomain = Nothing
+    , _uwShowDeleted = Nothing
+    , _uwPayload = pUwPayload_
+    , _uwSortOrder = Nothing
+    , _uwCustomer = Nothing
+    , _uwQuery = Nothing
+    , _uwProjection = UWPBasic
+    , _uwPageToken = Nothing
+    , _uwMaxResults = Nothing
+    }
+
+-- | Event on which subscription is intended (if subscribing)
+uwEvent :: Lens' UsersWatch (Maybe UsersWatchEvent)
+uwEvent = lens _uwEvent (\ s a -> s{_uwEvent = a})
+
+-- | Column to use for sorting results
+uwOrderBy :: Lens' UsersWatch (Maybe UsersWatchOrderBy)
+uwOrderBy
+  = lens _uwOrderBy (\ s a -> s{_uwOrderBy = a})
+
+-- | Whether to fetch the ADMIN_VIEW or DOMAIN_PUBLIC view of the user.
+uwViewType :: Lens' UsersWatch UsersWatchViewType
+uwViewType
+  = lens _uwViewType (\ s a -> s{_uwViewType = a})
+
+-- | Comma-separated list of schema names. All fields from these schemas are
+-- fetched. This should only be set when projection=custom.
+uwCustomFieldMask :: Lens' UsersWatch (Maybe Text)
+uwCustomFieldMask
+  = lens _uwCustomFieldMask
+      (\ s a -> s{_uwCustomFieldMask = a})
+
+-- | Name of the domain. Fill this field to get users from only this domain.
+-- To return all users in a multi-domain fill customer field instead.
+uwDomain :: Lens' UsersWatch (Maybe Text)
+uwDomain = lens _uwDomain (\ s a -> s{_uwDomain = a})
+
+-- | If set to true retrieves the list of deleted users. Default is false
+uwShowDeleted :: Lens' UsersWatch (Maybe Text)
+uwShowDeleted
+  = lens _uwShowDeleted
+      (\ s a -> s{_uwShowDeleted = a})
+
+-- | Multipart request metadata.
+uwPayload :: Lens' UsersWatch Channel
+uwPayload
+  = lens _uwPayload (\ s a -> s{_uwPayload = a})
+
+-- | Whether to return results in ascending or descending order.
+uwSortOrder :: Lens' UsersWatch (Maybe UsersWatchSortOrder)
+uwSortOrder
+  = lens _uwSortOrder (\ s a -> s{_uwSortOrder = a})
+
+-- | Immutable id of the Google Apps account. In case of multi-domain, to
+-- fetch all users for a customer, fill this field instead of domain.
+uwCustomer :: Lens' UsersWatch (Maybe Text)
+uwCustomer
+  = lens _uwCustomer (\ s a -> s{_uwCustomer = a})
+
+-- | Query string search. Should be of the form \"\". Complete documentation
+-- is at
+-- https:\/\/developers.google.com\/admin-sdk\/directory\/v1\/guides\/search-users
+uwQuery :: Lens' UsersWatch (Maybe Text)
+uwQuery = lens _uwQuery (\ s a -> s{_uwQuery = a})
+
+-- | What subset of fields to fetch for this user.
+uwProjection :: Lens' UsersWatch UsersWatchProjection
+uwProjection
+  = lens _uwProjection (\ s a -> s{_uwProjection = a})
+
+-- | Token to specify next page in the list
+uwPageToken :: Lens' UsersWatch (Maybe Text)
+uwPageToken
+  = lens _uwPageToken (\ s a -> s{_uwPageToken = a})
+
+-- | Maximum number of results to return. Default is 100. Max allowed is 500
+uwMaxResults :: Lens' UsersWatch (Maybe Int32)
+uwMaxResults
+  = lens _uwMaxResults (\ s a -> s{_uwMaxResults = a})
+      . mapping _Coerce
+
+instance GoogleRequest UsersWatch where
+        type Rs UsersWatch = Channel
+        requestClient UsersWatch{..}
+          = go _uwEvent _uwOrderBy (Just _uwViewType)
+              _uwCustomFieldMask
+              _uwDomain
+              _uwShowDeleted
+              _uwSortOrder
+              _uwCustomer
+              _uwQuery
+              (Just _uwProjection)
+              _uwPageToken
+              _uwMaxResults
+              (Just AltJSON)
+              _uwPayload
+              directoryService
+          where go
+                  = buildClient (Proxy :: Proxy UsersWatchResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Directory/VerificationCodes/Generate.hs b/gen/Network/Google/Resource/Directory/VerificationCodes/Generate.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Directory/VerificationCodes/Generate.hs
@@ -0,0 +1,87 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.Directory.VerificationCodes.Generate
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Generate new backup verification codes for the user.
+--
+-- /See:/ <https://developers.google.com/admin-sdk/directory/ Admin Directory API Reference> for @directory.verificationCodes.generate@.
+module Network.Google.Resource.Directory.VerificationCodes.Generate
+    (
+    -- * REST Resource
+      VerificationCodesGenerateResource
+
+    -- * Creating a Request
+    , verificationCodesGenerate
+    , VerificationCodesGenerate
+
+    -- * Request Lenses
+    , vcgUserKey
+    ) where
+
+import           Network.Google.Directory.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @directory.verificationCodes.generate@ method which the
+-- 'VerificationCodesGenerate' request conforms to.
+type VerificationCodesGenerateResource =
+     "admin" :>
+       "directory" :>
+         "v1" :>
+           "users" :>
+             Capture "userKey" Text :>
+               "verificationCodes" :>
+                 "generate" :>
+                   QueryParam "alt" AltJSON :> Post '[JSON] ()
+
+-- | Generate new backup verification codes for the user.
+--
+-- /See:/ 'verificationCodesGenerate' smart constructor.
+newtype VerificationCodesGenerate = VerificationCodesGenerate
+    { _vcgUserKey :: Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'VerificationCodesGenerate' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'vcgUserKey'
+verificationCodesGenerate
+    :: Text -- ^ 'vcgUserKey'
+    -> VerificationCodesGenerate
+verificationCodesGenerate pVcgUserKey_ =
+    VerificationCodesGenerate
+    { _vcgUserKey = pVcgUserKey_
+    }
+
+-- | Email or immutable Id of the user
+vcgUserKey :: Lens' VerificationCodesGenerate Text
+vcgUserKey
+  = lens _vcgUserKey (\ s a -> s{_vcgUserKey = a})
+
+instance GoogleRequest VerificationCodesGenerate
+         where
+        type Rs VerificationCodesGenerate = ()
+        requestClient VerificationCodesGenerate{..}
+          = go _vcgUserKey (Just AltJSON) directoryService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy VerificationCodesGenerateResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Directory/VerificationCodes/Invalidate.hs b/gen/Network/Google/Resource/Directory/VerificationCodes/Invalidate.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Directory/VerificationCodes/Invalidate.hs
@@ -0,0 +1,87 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.Directory.VerificationCodes.Invalidate
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Invalidate the current backup verification codes for the user.
+--
+-- /See:/ <https://developers.google.com/admin-sdk/directory/ Admin Directory API Reference> for @directory.verificationCodes.invalidate@.
+module Network.Google.Resource.Directory.VerificationCodes.Invalidate
+    (
+    -- * REST Resource
+      VerificationCodesInvalidateResource
+
+    -- * Creating a Request
+    , verificationCodesInvalidate
+    , VerificationCodesInvalidate
+
+    -- * Request Lenses
+    , vciUserKey
+    ) where
+
+import           Network.Google.Directory.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @directory.verificationCodes.invalidate@ method which the
+-- 'VerificationCodesInvalidate' request conforms to.
+type VerificationCodesInvalidateResource =
+     "admin" :>
+       "directory" :>
+         "v1" :>
+           "users" :>
+             Capture "userKey" Text :>
+               "verificationCodes" :>
+                 "invalidate" :>
+                   QueryParam "alt" AltJSON :> Post '[JSON] ()
+
+-- | Invalidate the current backup verification codes for the user.
+--
+-- /See:/ 'verificationCodesInvalidate' smart constructor.
+newtype VerificationCodesInvalidate = VerificationCodesInvalidate
+    { _vciUserKey :: Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'VerificationCodesInvalidate' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'vciUserKey'
+verificationCodesInvalidate
+    :: Text -- ^ 'vciUserKey'
+    -> VerificationCodesInvalidate
+verificationCodesInvalidate pVciUserKey_ =
+    VerificationCodesInvalidate
+    { _vciUserKey = pVciUserKey_
+    }
+
+-- | Email or immutable Id of the user
+vciUserKey :: Lens' VerificationCodesInvalidate Text
+vciUserKey
+  = lens _vciUserKey (\ s a -> s{_vciUserKey = a})
+
+instance GoogleRequest VerificationCodesInvalidate
+         where
+        type Rs VerificationCodesInvalidate = ()
+        requestClient VerificationCodesInvalidate{..}
+          = go _vciUserKey (Just AltJSON) directoryService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy VerificationCodesInvalidateResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Directory/VerificationCodes/List.hs b/gen/Network/Google/Resource/Directory/VerificationCodes/List.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Directory/VerificationCodes/List.hs
@@ -0,0 +1,89 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.Directory.VerificationCodes.List
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns the current set of valid backup verification codes for the
+-- specified user.
+--
+-- /See:/ <https://developers.google.com/admin-sdk/directory/ Admin Directory API Reference> for @directory.verificationCodes.list@.
+module Network.Google.Resource.Directory.VerificationCodes.List
+    (
+    -- * REST Resource
+      VerificationCodesListResource
+
+    -- * Creating a Request
+    , verificationCodesList
+    , VerificationCodesList
+
+    -- * Request Lenses
+    , vclUserKey
+    ) where
+
+import           Network.Google.Directory.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @directory.verificationCodes.list@ method which the
+-- 'VerificationCodesList' request conforms to.
+type VerificationCodesListResource =
+     "admin" :>
+       "directory" :>
+         "v1" :>
+           "users" :>
+             Capture "userKey" Text :>
+               "verificationCodes" :>
+                 QueryParam "alt" AltJSON :>
+                   Get '[JSON] VerificationCodes
+
+-- | Returns the current set of valid backup verification codes for the
+-- specified user.
+--
+-- /See:/ 'verificationCodesList' smart constructor.
+newtype VerificationCodesList = VerificationCodesList
+    { _vclUserKey :: Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'VerificationCodesList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'vclUserKey'
+verificationCodesList
+    :: Text -- ^ 'vclUserKey'
+    -> VerificationCodesList
+verificationCodesList pVclUserKey_ =
+    VerificationCodesList
+    { _vclUserKey = pVclUserKey_
+    }
+
+-- | Identifies the user in the API request. The value can be the user\'s
+-- primary email address, alias email address, or unique user ID.
+vclUserKey :: Lens' VerificationCodesList Text
+vclUserKey
+  = lens _vclUserKey (\ s a -> s{_vclUserKey = a})
+
+instance GoogleRequest VerificationCodesList where
+        type Rs VerificationCodesList = VerificationCodes
+        requestClient VerificationCodesList{..}
+          = go _vclUserKey (Just AltJSON) directoryService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy VerificationCodesListResource)
+                      mempty
diff --git a/gogol-admin-directory.cabal b/gogol-admin-directory.cabal
new file mode 100644
--- /dev/null
+++ b/gogol-admin-directory.cabal
@@ -0,0 +1,136 @@
+name:                  gogol-admin-directory
+version:               0.0.1
+synopsis:              Google Admin Directory SDK.
+homepage:              https://github.com/brendanhay/gogol
+bug-reports:           https://github.com/brendanhay/gogol/issues
+license:               OtherLicense
+license-file:          LICENSE
+author:                Brendan Hay
+maintainer:            Brendan Hay <brendan.g.hay@gmail.com>
+copyright:             Copyright (c) 2015 Brendan Hay
+category:              Network, Google, Cloud
+build-type:            Simple
+cabal-version:         >= 1.10
+extra-source-files:    README.md
+
+description:
+    The Admin SDK Directory API lets you view and manage enterprise
+    resources such as users and groups, administrative notifications,
+    security features, and more.
+    .
+    /Warning:/ This is an experimental prototype/preview release which is still
+    under exploratory development and not intended for public use, caveat emptor!
+    .
+    This library is compatible with version @directory_v1@
+    of the API.
+
+source-repository head
+    type:     git
+    location: git://github.com/brendanhay/gogol.git
+
+library
+    default-language:  Haskell2010
+    hs-source-dirs:    src gen
+
+    ghc-options:       -Wall
+
+    exposed-modules:
+          Network.Google.Directory
+        , Network.Google.Directory.Types
+        , Network.Google.Resource.Admin.Channels.Stop
+        , Network.Google.Resource.Directory.Asps.Delete
+        , Network.Google.Resource.Directory.Asps.Get
+        , Network.Google.Resource.Directory.Asps.List
+        , Network.Google.Resource.Directory.ChromeosDevices.Get
+        , Network.Google.Resource.Directory.ChromeosDevices.List
+        , Network.Google.Resource.Directory.ChromeosDevices.Patch
+        , Network.Google.Resource.Directory.ChromeosDevices.Update
+        , Network.Google.Resource.Directory.Customers.Get
+        , Network.Google.Resource.Directory.Customers.Patch
+        , Network.Google.Resource.Directory.Customers.Update
+        , Network.Google.Resource.Directory.DomainAliases.Delete
+        , Network.Google.Resource.Directory.DomainAliases.Get
+        , Network.Google.Resource.Directory.DomainAliases.Insert
+        , Network.Google.Resource.Directory.DomainAliases.List
+        , Network.Google.Resource.Directory.Domains.Delete
+        , Network.Google.Resource.Directory.Domains.Get
+        , Network.Google.Resource.Directory.Domains.Insert
+        , Network.Google.Resource.Directory.Domains.List
+        , Network.Google.Resource.Directory.Groups.Aliases.Delete
+        , Network.Google.Resource.Directory.Groups.Aliases.Insert
+        , Network.Google.Resource.Directory.Groups.Aliases.List
+        , Network.Google.Resource.Directory.Groups.Delete
+        , Network.Google.Resource.Directory.Groups.Get
+        , Network.Google.Resource.Directory.Groups.Insert
+        , Network.Google.Resource.Directory.Groups.List
+        , Network.Google.Resource.Directory.Groups.Patch
+        , Network.Google.Resource.Directory.Groups.Update
+        , Network.Google.Resource.Directory.Members.Delete
+        , Network.Google.Resource.Directory.Members.Get
+        , Network.Google.Resource.Directory.Members.Insert
+        , Network.Google.Resource.Directory.Members.List
+        , Network.Google.Resource.Directory.Members.Patch
+        , Network.Google.Resource.Directory.Members.Update
+        , Network.Google.Resource.Directory.MobileDevices.Action
+        , Network.Google.Resource.Directory.MobileDevices.Delete
+        , Network.Google.Resource.Directory.MobileDevices.Get
+        , Network.Google.Resource.Directory.MobileDevices.List
+        , Network.Google.Resource.Directory.Notifications.Delete
+        , Network.Google.Resource.Directory.Notifications.Get
+        , Network.Google.Resource.Directory.Notifications.List
+        , Network.Google.Resource.Directory.Notifications.Patch
+        , Network.Google.Resource.Directory.Notifications.Update
+        , Network.Google.Resource.Directory.OrgUnits.Delete
+        , Network.Google.Resource.Directory.OrgUnits.Get
+        , Network.Google.Resource.Directory.OrgUnits.Insert
+        , Network.Google.Resource.Directory.OrgUnits.List
+        , Network.Google.Resource.Directory.OrgUnits.Patch
+        , Network.Google.Resource.Directory.OrgUnits.Update
+        , Network.Google.Resource.Directory.Privileges.List
+        , Network.Google.Resource.Directory.RoleAssignments.Delete
+        , Network.Google.Resource.Directory.RoleAssignments.Get
+        , Network.Google.Resource.Directory.RoleAssignments.Insert
+        , Network.Google.Resource.Directory.RoleAssignments.List
+        , Network.Google.Resource.Directory.Roles.Delete
+        , Network.Google.Resource.Directory.Roles.Get
+        , Network.Google.Resource.Directory.Roles.Insert
+        , Network.Google.Resource.Directory.Roles.List
+        , Network.Google.Resource.Directory.Roles.Patch
+        , Network.Google.Resource.Directory.Roles.Update
+        , Network.Google.Resource.Directory.Schemas.Delete
+        , Network.Google.Resource.Directory.Schemas.Get
+        , Network.Google.Resource.Directory.Schemas.Insert
+        , Network.Google.Resource.Directory.Schemas.List
+        , Network.Google.Resource.Directory.Schemas.Patch
+        , Network.Google.Resource.Directory.Schemas.Update
+        , Network.Google.Resource.Directory.Tokens.Delete
+        , Network.Google.Resource.Directory.Tokens.Get
+        , Network.Google.Resource.Directory.Tokens.List
+        , Network.Google.Resource.Directory.Users.Aliases.Delete
+        , Network.Google.Resource.Directory.Users.Aliases.Insert
+        , Network.Google.Resource.Directory.Users.Aliases.List
+        , Network.Google.Resource.Directory.Users.Aliases.Watch
+        , Network.Google.Resource.Directory.Users.Delete
+        , Network.Google.Resource.Directory.Users.Get
+        , Network.Google.Resource.Directory.Users.Insert
+        , Network.Google.Resource.Directory.Users.List
+        , Network.Google.Resource.Directory.Users.MakeAdmin
+        , Network.Google.Resource.Directory.Users.Patch
+        , Network.Google.Resource.Directory.Users.Photos.Delete
+        , Network.Google.Resource.Directory.Users.Photos.Get
+        , Network.Google.Resource.Directory.Users.Photos.Patch
+        , Network.Google.Resource.Directory.Users.Photos.Update
+        , Network.Google.Resource.Directory.Users.Undelete
+        , Network.Google.Resource.Directory.Users.Update
+        , Network.Google.Resource.Directory.Users.Watch
+        , Network.Google.Resource.Directory.VerificationCodes.Generate
+        , Network.Google.Resource.Directory.VerificationCodes.Invalidate
+        , Network.Google.Resource.Directory.VerificationCodes.List
+
+    other-modules:
+          Network.Google.Directory.Types.Product
+        , Network.Google.Directory.Types.Sum
+
+    build-depends:
+          gogol-core == 0.0.1.*
+        , base       >= 4.7 && < 5
