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-classroom
+
+* [Version](#version)
+* [Description](#description)
+* [Contribute](#contribute)
+* [Licence](#licence)
+
+
+## Version
+
+`0.0.1`
+
+
+## Description
+
+A client library for the Google Classroom.
+
+
+## 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-classroom` 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/Classroom.hs b/gen/Network/Google/Classroom.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Classroom.hs
@@ -0,0 +1,253 @@
+{-# LANGUAGE DataKinds         #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# LANGUAGE TypeOperators     #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+
+-- |
+-- Module      : Network.Google.Classroom
+-- 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)
+--
+-- Google Classroom API
+--
+-- /See:/ <https://developers.google.com/classroom/ Google Classroom API Reference>
+module Network.Google.Classroom
+    (
+    -- * Service Configuration
+      classroomService
+
+    -- * API Declaration
+    , ClassroomAPI
+
+    -- * Resources
+
+    -- ** classroom.courses.aliases.create
+    , module Network.Google.Resource.Classroom.Courses.Aliases.Create
+
+    -- ** classroom.courses.aliases.delete
+    , module Network.Google.Resource.Classroom.Courses.Aliases.Delete
+
+    -- ** classroom.courses.aliases.list
+    , module Network.Google.Resource.Classroom.Courses.Aliases.List
+
+    -- ** classroom.courses.create
+    , module Network.Google.Resource.Classroom.Courses.Create
+
+    -- ** classroom.courses.delete
+    , module Network.Google.Resource.Classroom.Courses.Delete
+
+    -- ** classroom.courses.get
+    , module Network.Google.Resource.Classroom.Courses.Get
+
+    -- ** classroom.courses.list
+    , module Network.Google.Resource.Classroom.Courses.List
+
+    -- ** classroom.courses.patch
+    , module Network.Google.Resource.Classroom.Courses.Patch
+
+    -- ** classroom.courses.students.create
+    , module Network.Google.Resource.Classroom.Courses.Students.Create
+
+    -- ** classroom.courses.students.delete
+    , module Network.Google.Resource.Classroom.Courses.Students.Delete
+
+    -- ** classroom.courses.students.get
+    , module Network.Google.Resource.Classroom.Courses.Students.Get
+
+    -- ** classroom.courses.students.list
+    , module Network.Google.Resource.Classroom.Courses.Students.List
+
+    -- ** classroom.courses.teachers.create
+    , module Network.Google.Resource.Classroom.Courses.Teachers.Create
+
+    -- ** classroom.courses.teachers.delete
+    , module Network.Google.Resource.Classroom.Courses.Teachers.Delete
+
+    -- ** classroom.courses.teachers.get
+    , module Network.Google.Resource.Classroom.Courses.Teachers.Get
+
+    -- ** classroom.courses.teachers.list
+    , module Network.Google.Resource.Classroom.Courses.Teachers.List
+
+    -- ** classroom.courses.update
+    , module Network.Google.Resource.Classroom.Courses.Update
+
+    -- ** classroom.invitations.accept
+    , module Network.Google.Resource.Classroom.Invitations.Accept
+
+    -- ** classroom.invitations.create
+    , module Network.Google.Resource.Classroom.Invitations.Create
+
+    -- ** classroom.invitations.delete
+    , module Network.Google.Resource.Classroom.Invitations.Delete
+
+    -- ** classroom.invitations.get
+    , module Network.Google.Resource.Classroom.Invitations.Get
+
+    -- ** classroom.invitations.list
+    , module Network.Google.Resource.Classroom.Invitations.List
+
+    -- ** classroom.userProfiles.get
+    , module Network.Google.Resource.Classroom.UserProFiles.Get
+
+    -- * Types
+
+    -- ** ListCourseAliasesResponse
+    , ListCourseAliasesResponse
+    , listCourseAliasesResponse
+    , lcarNextPageToken
+    , lcarAliases
+
+    -- ** Empty
+    , Empty
+    , empty
+
+    -- ** GlobalPermission
+    , GlobalPermission
+    , globalPermission
+    , gpPermission
+
+    -- ** ListInvitationsResponse
+    , ListInvitationsResponse
+    , listInvitationsResponse
+    , lirNextPageToken
+    , lirInvitations
+
+    -- ** Invitation
+    , Invitation
+    , invitation
+    , iCourseId
+    , iUserId
+    , iRole
+    , iId
+
+    -- ** Teacher
+    , Teacher
+    , teacher
+    , tCourseId
+    , tProFile
+    , tUserId
+
+    -- ** Name
+    , Name
+    , name
+    , nGivenName
+    , nFullName
+    , nFamilyName
+
+    -- ** ListCoursesResponse
+    , ListCoursesResponse
+    , listCoursesResponse
+    , lcrNextPageToken
+    , lcrCourses
+
+    -- ** UserProFile
+    , UserProFile
+    , userProFile
+    , upfPhotoURL
+    , upfName
+    , upfEmailAddress
+    , upfId
+    , upfPermissions
+
+    -- ** Course
+    , Course
+    , course
+    , cCreationTime
+    , cRoom
+    , cCourseState
+    , cEnrollmentCode
+    , cUpdateTime
+    , cOwnerId
+    , cName
+    , cId
+    , cAlternateLink
+    , cDescription
+    , cDescriptionHeading
+    , cSection
+
+    -- ** ListStudentsResponse
+    , ListStudentsResponse
+    , listStudentsResponse
+    , lsrNextPageToken
+    , lsrStudents
+
+    -- ** CourseAlias
+    , CourseAlias
+    , courseAlias
+    , caAlias
+
+    -- ** ListTeachersResponse
+    , ListTeachersResponse
+    , listTeachersResponse
+    , ltrNextPageToken
+    , ltrTeachers
+
+    -- ** Student
+    , Student
+    , student
+    , sCourseId
+    , sProFile
+    , sUserId
+    ) where
+
+import           Network.Google.Classroom.Types
+import           Network.Google.Prelude
+import           Network.Google.Resource.Classroom.Courses.Aliases.Create
+import           Network.Google.Resource.Classroom.Courses.Aliases.Delete
+import           Network.Google.Resource.Classroom.Courses.Aliases.List
+import           Network.Google.Resource.Classroom.Courses.Create
+import           Network.Google.Resource.Classroom.Courses.Delete
+import           Network.Google.Resource.Classroom.Courses.Get
+import           Network.Google.Resource.Classroom.Courses.List
+import           Network.Google.Resource.Classroom.Courses.Patch
+import           Network.Google.Resource.Classroom.Courses.Students.Create
+import           Network.Google.Resource.Classroom.Courses.Students.Delete
+import           Network.Google.Resource.Classroom.Courses.Students.Get
+import           Network.Google.Resource.Classroom.Courses.Students.List
+import           Network.Google.Resource.Classroom.Courses.Teachers.Create
+import           Network.Google.Resource.Classroom.Courses.Teachers.Delete
+import           Network.Google.Resource.Classroom.Courses.Teachers.Get
+import           Network.Google.Resource.Classroom.Courses.Teachers.List
+import           Network.Google.Resource.Classroom.Courses.Update
+import           Network.Google.Resource.Classroom.Invitations.Accept
+import           Network.Google.Resource.Classroom.Invitations.Create
+import           Network.Google.Resource.Classroom.Invitations.Delete
+import           Network.Google.Resource.Classroom.Invitations.Get
+import           Network.Google.Resource.Classroom.Invitations.List
+import           Network.Google.Resource.Classroom.UserProFiles.Get
+
+{- $resources
+TODO
+-}
+
+-- | Represents the entirety of the methods and resources available for the Google Classroom API service.
+type ClassroomAPI =
+     InvitationsListResource :<|>
+       InvitationsAcceptResource
+       :<|> InvitationsGetResource
+       :<|> InvitationsCreateResource
+       :<|> InvitationsDeleteResource
+       :<|> CoursesTeachersListResource
+       :<|> CoursesTeachersGetResource
+       :<|> CoursesTeachersCreateResource
+       :<|> CoursesTeachersDeleteResource
+       :<|> CoursesAliasesListResource
+       :<|> CoursesAliasesCreateResource
+       :<|> CoursesAliasesDeleteResource
+       :<|> CoursesStudentsListResource
+       :<|> CoursesStudentsGetResource
+       :<|> CoursesStudentsCreateResource
+       :<|> CoursesStudentsDeleteResource
+       :<|> CoursesListResource
+       :<|> CoursesPatchResource
+       :<|> CoursesGetResource
+       :<|> CoursesCreateResource
+       :<|> CoursesDeleteResource
+       :<|> CoursesUpdateResource
+       :<|> UserProFilesGetResource
diff --git a/gen/Network/Google/Classroom/Types.hs b/gen/Network/Google/Classroom/Types.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Classroom/Types.hs
@@ -0,0 +1,160 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- |
+-- Module      : Network.Google.Classroom.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.Classroom.Types
+    (
+    -- * Service Configuration
+      classroomService
+
+    -- * OAuth Scopes
+    , classroomRostersReadonlyScope
+    , classroomCoursesScope
+    , classroomProfileEmailsScope
+    , classroomProfilePhotosScope
+    , classroomRostersScope
+    , classroomCoursesReadonlyScope
+
+    -- * ListCourseAliasesResponse
+    , ListCourseAliasesResponse
+    , listCourseAliasesResponse
+    , lcarNextPageToken
+    , lcarAliases
+
+    -- * Empty
+    , Empty
+    , empty
+
+    -- * GlobalPermission
+    , GlobalPermission
+    , globalPermission
+    , gpPermission
+
+    -- * ListInvitationsResponse
+    , ListInvitationsResponse
+    , listInvitationsResponse
+    , lirNextPageToken
+    , lirInvitations
+
+    -- * Invitation
+    , Invitation
+    , invitation
+    , iCourseId
+    , iUserId
+    , iRole
+    , iId
+
+    -- * Teacher
+    , Teacher
+    , teacher
+    , tCourseId
+    , tProFile
+    , tUserId
+
+    -- * Name
+    , Name
+    , name
+    , nGivenName
+    , nFullName
+    , nFamilyName
+
+    -- * ListCoursesResponse
+    , ListCoursesResponse
+    , listCoursesResponse
+    , lcrNextPageToken
+    , lcrCourses
+
+    -- * UserProFile
+    , UserProFile
+    , userProFile
+    , upfPhotoURL
+    , upfName
+    , upfEmailAddress
+    , upfId
+    , upfPermissions
+
+    -- * Course
+    , Course
+    , course
+    , cCreationTime
+    , cRoom
+    , cCourseState
+    , cEnrollmentCode
+    , cUpdateTime
+    , cOwnerId
+    , cName
+    , cId
+    , cAlternateLink
+    , cDescription
+    , cDescriptionHeading
+    , cSection
+
+    -- * ListStudentsResponse
+    , ListStudentsResponse
+    , listStudentsResponse
+    , lsrNextPageToken
+    , lsrStudents
+
+    -- * CourseAlias
+    , CourseAlias
+    , courseAlias
+    , caAlias
+
+    -- * ListTeachersResponse
+    , ListTeachersResponse
+    , listTeachersResponse
+    , ltrNextPageToken
+    , ltrTeachers
+
+    -- * Student
+    , Student
+    , student
+    , sCourseId
+    , sProFile
+    , sUserId
+    ) where
+
+import           Network.Google.Classroom.Types.Product
+import           Network.Google.Classroom.Types.Sum
+import           Network.Google.Prelude
+
+-- | Default request referring to version 'v1' of the Google Classroom API. This contains the host and root path used as a starting point for constructing service requests.
+classroomService :: Service
+classroomService
+  = defaultService (ServiceId "classroom:v1")
+      "classroom.googleapis.com"
+
+-- | View your Google Classroom class rosters
+classroomRostersReadonlyScope :: OAuthScope
+classroomRostersReadonlyScope = "https://www.googleapis.com/auth/classroom.rosters.readonly";
+
+-- | Manage your Google Classroom classes
+classroomCoursesScope :: OAuthScope
+classroomCoursesScope = "https://www.googleapis.com/auth/classroom.courses";
+
+-- | View the email addresses of people in your classes
+classroomProfileEmailsScope :: OAuthScope
+classroomProfileEmailsScope = "https://www.googleapis.com/auth/classroom.profile.emails";
+
+-- | View the profile photos of people in your classes
+classroomProfilePhotosScope :: OAuthScope
+classroomProfilePhotosScope = "https://www.googleapis.com/auth/classroom.profile.photos";
+
+-- | Manage your Google Classroom class rosters
+classroomRostersScope :: OAuthScope
+classroomRostersScope = "https://www.googleapis.com/auth/classroom.rosters";
+
+-- | View your Google Classroom classes
+classroomCoursesReadonlyScope :: OAuthScope
+classroomCoursesReadonlyScope = "https://www.googleapis.com/auth/classroom.courses.readonly";
diff --git a/gen/Network/Google/Classroom/Types/Product.hs b/gen/Network/Google/Classroom/Types/Product.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Classroom/Types/Product.hs
@@ -0,0 +1,891 @@
+{-# 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.Classroom.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.Classroom.Types.Product where
+
+import           Network.Google.Classroom.Types.Sum
+import           Network.Google.Prelude
+
+-- | Response when listing course aliases.
+--
+-- /See:/ 'listCourseAliasesResponse' smart constructor.
+data ListCourseAliasesResponse = ListCourseAliasesResponse
+    { _lcarNextPageToken :: !(Maybe Text)
+    , _lcarAliases       :: !(Maybe [CourseAlias])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ListCourseAliasesResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'lcarNextPageToken'
+--
+-- * 'lcarAliases'
+listCourseAliasesResponse
+    :: ListCourseAliasesResponse
+listCourseAliasesResponse =
+    ListCourseAliasesResponse
+    { _lcarNextPageToken = Nothing
+    , _lcarAliases = Nothing
+    }
+
+-- | Token identifying the next page of results to return. If empty, no
+-- further results are available.
+lcarNextPageToken :: Lens' ListCourseAliasesResponse (Maybe Text)
+lcarNextPageToken
+  = lens _lcarNextPageToken
+      (\ s a -> s{_lcarNextPageToken = a})
+
+-- | The course aliases.
+lcarAliases :: Lens' ListCourseAliasesResponse [CourseAlias]
+lcarAliases
+  = lens _lcarAliases (\ s a -> s{_lcarAliases = a}) .
+      _Default
+      . _Coerce
+
+instance FromJSON ListCourseAliasesResponse where
+        parseJSON
+          = withObject "ListCourseAliasesResponse"
+              (\ o ->
+                 ListCourseAliasesResponse <$>
+                   (o .:? "nextPageToken") <*>
+                     (o .:? "aliases" .!= mempty))
+
+instance ToJSON ListCourseAliasesResponse where
+        toJSON ListCourseAliasesResponse{..}
+          = object
+              (catMaybes
+                 [("nextPageToken" .=) <$> _lcarNextPageToken,
+                  ("aliases" .=) <$> _lcarAliases])
+
+-- | A generic empty message that you can re-use to avoid defining duplicated
+-- empty messages in your APIs. A typical example is to use it as the
+-- request or the response type of an API method. For instance: service Foo
+-- { rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty); } The
+-- JSON representation for \`Empty\` is empty JSON object \`{}\`.
+--
+-- /See:/ 'empty' smart constructor.
+data Empty =
+    Empty
+    deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Empty' with the minimum fields required to make a request.
+--
+empty
+    :: Empty
+empty = Empty
+
+instance FromJSON Empty where
+        parseJSON = withObject "Empty" (\ o -> pure Empty)
+
+instance ToJSON Empty where
+        toJSON = const emptyObject
+
+-- | Global user permission description.
+--
+-- /See:/ 'globalPermission' smart constructor.
+newtype GlobalPermission = GlobalPermission
+    { _gpPermission :: Maybe Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'GlobalPermission' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gpPermission'
+globalPermission
+    :: GlobalPermission
+globalPermission =
+    GlobalPermission
+    { _gpPermission = Nothing
+    }
+
+-- | Permission value.
+gpPermission :: Lens' GlobalPermission (Maybe Text)
+gpPermission
+  = lens _gpPermission (\ s a -> s{_gpPermission = a})
+
+instance FromJSON GlobalPermission where
+        parseJSON
+          = withObject "GlobalPermission"
+              (\ o -> GlobalPermission <$> (o .:? "permission"))
+
+instance ToJSON GlobalPermission where
+        toJSON GlobalPermission{..}
+          = object
+              (catMaybes [("permission" .=) <$> _gpPermission])
+
+-- | Response when listing invitations.
+--
+-- /See:/ 'listInvitationsResponse' smart constructor.
+data ListInvitationsResponse = ListInvitationsResponse
+    { _lirNextPageToken :: !(Maybe Text)
+    , _lirInvitations   :: !(Maybe [Invitation])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ListInvitationsResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'lirNextPageToken'
+--
+-- * 'lirInvitations'
+listInvitationsResponse
+    :: ListInvitationsResponse
+listInvitationsResponse =
+    ListInvitationsResponse
+    { _lirNextPageToken = Nothing
+    , _lirInvitations = Nothing
+    }
+
+-- | Token identifying the next page of results to return. If empty, no
+-- further results are available.
+lirNextPageToken :: Lens' ListInvitationsResponse (Maybe Text)
+lirNextPageToken
+  = lens _lirNextPageToken
+      (\ s a -> s{_lirNextPageToken = a})
+
+-- | Invitations that match the list request.
+lirInvitations :: Lens' ListInvitationsResponse [Invitation]
+lirInvitations
+  = lens _lirInvitations
+      (\ s a -> s{_lirInvitations = a})
+      . _Default
+      . _Coerce
+
+instance FromJSON ListInvitationsResponse where
+        parseJSON
+          = withObject "ListInvitationsResponse"
+              (\ o ->
+                 ListInvitationsResponse <$>
+                   (o .:? "nextPageToken") <*>
+                     (o .:? "invitations" .!= mempty))
+
+instance ToJSON ListInvitationsResponse where
+        toJSON ListInvitationsResponse{..}
+          = object
+              (catMaybes
+                 [("nextPageToken" .=) <$> _lirNextPageToken,
+                  ("invitations" .=) <$> _lirInvitations])
+
+-- | An invitation to join a course.
+--
+-- /See:/ 'invitation' smart constructor.
+data Invitation = Invitation
+    { _iCourseId :: !(Maybe Text)
+    , _iUserId   :: !(Maybe Text)
+    , _iRole     :: !(Maybe Text)
+    , _iId       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Invitation' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'iCourseId'
+--
+-- * 'iUserId'
+--
+-- * 'iRole'
+--
+-- * 'iId'
+invitation
+    :: Invitation
+invitation =
+    Invitation
+    { _iCourseId = Nothing
+    , _iUserId = Nothing
+    , _iRole = Nothing
+    , _iId = Nothing
+    }
+
+-- | Identifier of the course to invite the user to.
+iCourseId :: Lens' Invitation (Maybe Text)
+iCourseId
+  = lens _iCourseId (\ s a -> s{_iCourseId = a})
+
+-- | Identifier of the invited user. When specified as a parameter of a
+-- request, this identifier can be set to one of the following: * the
+-- numeric identifier for the user * the email address of the user * the
+-- string literal \`\"me\"\`, indicating the requesting user
+iUserId :: Lens' Invitation (Maybe Text)
+iUserId = lens _iUserId (\ s a -> s{_iUserId = a})
+
+-- | Role to invite the user to have. Must not be
+-- \`COURSE_ROLE_UNSPECIFIED\`.
+iRole :: Lens' Invitation (Maybe Text)
+iRole = lens _iRole (\ s a -> s{_iRole = a})
+
+-- | Identifier assigned by Classroom. Read-only.
+iId :: Lens' Invitation (Maybe Text)
+iId = lens _iId (\ s a -> s{_iId = a})
+
+instance FromJSON Invitation where
+        parseJSON
+          = withObject "Invitation"
+              (\ o ->
+                 Invitation <$>
+                   (o .:? "courseId") <*> (o .:? "userId") <*>
+                     (o .:? "role")
+                     <*> (o .:? "id"))
+
+instance ToJSON Invitation where
+        toJSON Invitation{..}
+          = object
+              (catMaybes
+                 [("courseId" .=) <$> _iCourseId,
+                  ("userId" .=) <$> _iUserId, ("role" .=) <$> _iRole,
+                  ("id" .=) <$> _iId])
+
+-- | Teacher of a course.
+--
+-- /See:/ 'teacher' smart constructor.
+data Teacher = Teacher
+    { _tCourseId :: !(Maybe Text)
+    , _tProFile  :: !(Maybe UserProFile)
+    , _tUserId   :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Teacher' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'tCourseId'
+--
+-- * 'tProFile'
+--
+-- * 'tUserId'
+teacher
+    :: Teacher
+teacher =
+    Teacher
+    { _tCourseId = Nothing
+    , _tProFile = Nothing
+    , _tUserId = Nothing
+    }
+
+-- | Identifier of the course. Read-only.
+tCourseId :: Lens' Teacher (Maybe Text)
+tCourseId
+  = lens _tCourseId (\ s a -> s{_tCourseId = a})
+
+-- | Global user information for the teacher. Read-only.
+tProFile :: Lens' Teacher (Maybe UserProFile)
+tProFile = lens _tProFile (\ s a -> s{_tProFile = a})
+
+-- | Identifier of the user. When specified as a parameter of a request, this
+-- identifier can be one of the following: * the numeric identifier for the
+-- user * the email address of the user * the string literal \`\"me\"\`,
+-- indicating the requesting user
+tUserId :: Lens' Teacher (Maybe Text)
+tUserId = lens _tUserId (\ s a -> s{_tUserId = a})
+
+instance FromJSON Teacher where
+        parseJSON
+          = withObject "Teacher"
+              (\ o ->
+                 Teacher <$>
+                   (o .:? "courseId") <*> (o .:? "profile") <*>
+                     (o .:? "userId"))
+
+instance ToJSON Teacher where
+        toJSON Teacher{..}
+          = object
+              (catMaybes
+                 [("courseId" .=) <$> _tCourseId,
+                  ("profile" .=) <$> _tProFile,
+                  ("userId" .=) <$> _tUserId])
+
+-- | Details of the user\'s name.
+--
+-- /See:/ 'name' smart constructor.
+data Name = Name
+    { _nGivenName  :: !(Maybe Text)
+    , _nFullName   :: !(Maybe Text)
+    , _nFamilyName :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Name' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'nGivenName'
+--
+-- * 'nFullName'
+--
+-- * 'nFamilyName'
+name
+    :: Name
+name =
+    Name
+    { _nGivenName = Nothing
+    , _nFullName = Nothing
+    , _nFamilyName = Nothing
+    }
+
+-- | The user\'s first name. Read-only.
+nGivenName :: Lens' Name (Maybe Text)
+nGivenName
+  = lens _nGivenName (\ s a -> s{_nGivenName = a})
+
+-- | The user\'s full name formed by concatenating the first and last name
+-- values. Read-only.
+nFullName :: Lens' Name (Maybe Text)
+nFullName
+  = lens _nFullName (\ s a -> s{_nFullName = a})
+
+-- | The user\'s last name. Read-only.
+nFamilyName :: Lens' Name (Maybe Text)
+nFamilyName
+  = lens _nFamilyName (\ s a -> s{_nFamilyName = a})
+
+instance FromJSON Name where
+        parseJSON
+          = withObject "Name"
+              (\ o ->
+                 Name <$>
+                   (o .:? "givenName") <*> (o .:? "fullName") <*>
+                     (o .:? "familyName"))
+
+instance ToJSON Name where
+        toJSON Name{..}
+          = object
+              (catMaybes
+                 [("givenName" .=) <$> _nGivenName,
+                  ("fullName" .=) <$> _nFullName,
+                  ("familyName" .=) <$> _nFamilyName])
+
+-- | Response when listing courses.
+--
+-- /See:/ 'listCoursesResponse' smart constructor.
+data ListCoursesResponse = ListCoursesResponse
+    { _lcrNextPageToken :: !(Maybe Text)
+    , _lcrCourses       :: !(Maybe [Course])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ListCoursesResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'lcrNextPageToken'
+--
+-- * 'lcrCourses'
+listCoursesResponse
+    :: ListCoursesResponse
+listCoursesResponse =
+    ListCoursesResponse
+    { _lcrNextPageToken = Nothing
+    , _lcrCourses = Nothing
+    }
+
+-- | Token identifying the next page of results to return. If empty, no
+-- further results are available.
+lcrNextPageToken :: Lens' ListCoursesResponse (Maybe Text)
+lcrNextPageToken
+  = lens _lcrNextPageToken
+      (\ s a -> s{_lcrNextPageToken = a})
+
+-- | Courses that match the list request.
+lcrCourses :: Lens' ListCoursesResponse [Course]
+lcrCourses
+  = lens _lcrCourses (\ s a -> s{_lcrCourses = a}) .
+      _Default
+      . _Coerce
+
+instance FromJSON ListCoursesResponse where
+        parseJSON
+          = withObject "ListCoursesResponse"
+              (\ o ->
+                 ListCoursesResponse <$>
+                   (o .:? "nextPageToken") <*>
+                     (o .:? "courses" .!= mempty))
+
+instance ToJSON ListCoursesResponse where
+        toJSON ListCoursesResponse{..}
+          = object
+              (catMaybes
+                 [("nextPageToken" .=) <$> _lcrNextPageToken,
+                  ("courses" .=) <$> _lcrCourses])
+
+-- | Global information for a user.
+--
+-- /See:/ 'userProFile' smart constructor.
+data UserProFile = UserProFile
+    { _upfPhotoURL     :: !(Maybe Text)
+    , _upfName         :: !(Maybe Name)
+    , _upfEmailAddress :: !(Maybe Text)
+    , _upfId           :: !(Maybe Text)
+    , _upfPermissions  :: !(Maybe [GlobalPermission])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'UserProFile' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'upfPhotoURL'
+--
+-- * 'upfName'
+--
+-- * 'upfEmailAddress'
+--
+-- * 'upfId'
+--
+-- * 'upfPermissions'
+userProFile
+    :: UserProFile
+userProFile =
+    UserProFile
+    { _upfPhotoURL = Nothing
+    , _upfName = Nothing
+    , _upfEmailAddress = Nothing
+    , _upfId = Nothing
+    , _upfPermissions = Nothing
+    }
+
+-- | URL of user\'s profile photo. Read-only.
+upfPhotoURL :: Lens' UserProFile (Maybe Text)
+upfPhotoURL
+  = lens _upfPhotoURL (\ s a -> s{_upfPhotoURL = a})
+
+-- | Name of the user. Read-only.
+upfName :: Lens' UserProFile (Maybe Name)
+upfName = lens _upfName (\ s a -> s{_upfName = a})
+
+-- | Email address of the user. Read-only.
+upfEmailAddress :: Lens' UserProFile (Maybe Text)
+upfEmailAddress
+  = lens _upfEmailAddress
+      (\ s a -> s{_upfEmailAddress = a})
+
+-- | Identifier of the user. Read-only.
+upfId :: Lens' UserProFile (Maybe Text)
+upfId = lens _upfId (\ s a -> s{_upfId = a})
+
+-- | Global permissions of the user. Read-only.
+upfPermissions :: Lens' UserProFile [GlobalPermission]
+upfPermissions
+  = lens _upfPermissions
+      (\ s a -> s{_upfPermissions = a})
+      . _Default
+      . _Coerce
+
+instance FromJSON UserProFile where
+        parseJSON
+          = withObject "UserProFile"
+              (\ o ->
+                 UserProFile <$>
+                   (o .:? "photoUrl") <*> (o .:? "name") <*>
+                     (o .:? "emailAddress")
+                     <*> (o .:? "id")
+                     <*> (o .:? "permissions" .!= mempty))
+
+instance ToJSON UserProFile where
+        toJSON UserProFile{..}
+          = object
+              (catMaybes
+                 [("photoUrl" .=) <$> _upfPhotoURL,
+                  ("name" .=) <$> _upfName,
+                  ("emailAddress" .=) <$> _upfEmailAddress,
+                  ("id" .=) <$> _upfId,
+                  ("permissions" .=) <$> _upfPermissions])
+
+-- | A Course in Classroom.
+--
+-- /See:/ 'course' smart constructor.
+data Course = Course
+    { _cCreationTime       :: !(Maybe Text)
+    , _cRoom               :: !(Maybe Text)
+    , _cCourseState        :: !(Maybe Text)
+    , _cEnrollmentCode     :: !(Maybe Text)
+    , _cUpdateTime         :: !(Maybe Text)
+    , _cOwnerId            :: !(Maybe Text)
+    , _cName               :: !(Maybe Text)
+    , _cId                 :: !(Maybe Text)
+    , _cAlternateLink      :: !(Maybe Text)
+    , _cDescription        :: !(Maybe Text)
+    , _cDescriptionHeading :: !(Maybe Text)
+    , _cSection            :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Course' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cCreationTime'
+--
+-- * 'cRoom'
+--
+-- * 'cCourseState'
+--
+-- * 'cEnrollmentCode'
+--
+-- * 'cUpdateTime'
+--
+-- * 'cOwnerId'
+--
+-- * 'cName'
+--
+-- * 'cId'
+--
+-- * 'cAlternateLink'
+--
+-- * 'cDescription'
+--
+-- * 'cDescriptionHeading'
+--
+-- * 'cSection'
+course
+    :: Course
+course =
+    Course
+    { _cCreationTime = Nothing
+    , _cRoom = Nothing
+    , _cCourseState = Nothing
+    , _cEnrollmentCode = Nothing
+    , _cUpdateTime = Nothing
+    , _cOwnerId = Nothing
+    , _cName = Nothing
+    , _cId = Nothing
+    , _cAlternateLink = Nothing
+    , _cDescription = Nothing
+    , _cDescriptionHeading = Nothing
+    , _cSection = Nothing
+    }
+
+-- | Creation time of the course. Specifying this field in a course update
+-- mask will result in an error. Read-only.
+cCreationTime :: Lens' Course (Maybe Text)
+cCreationTime
+  = lens _cCreationTime
+      (\ s a -> s{_cCreationTime = a})
+
+-- | Optional room location. For example, \"301\". If set, this field must be
+-- a valid UTF-8 string and no longer than 650 characters.
+cRoom :: Lens' Course (Maybe Text)
+cRoom = lens _cRoom (\ s a -> s{_cRoom = a})
+
+-- | State of the course. If unspecified, the default state is
+-- \`PROVISIONED\`.
+cCourseState :: Lens' Course (Maybe Text)
+cCourseState
+  = lens _cCourseState (\ s a -> s{_cCourseState = a})
+
+-- | Enrollment code to use when joining this course. Specifying this field
+-- in a course update mask will result in an error. Read-only.
+cEnrollmentCode :: Lens' Course (Maybe Text)
+cEnrollmentCode
+  = lens _cEnrollmentCode
+      (\ s a -> s{_cEnrollmentCode = a})
+
+-- | Time of the most recent update to this course. Specifying this field in
+-- a course update mask will result in an error. Read-only.
+cUpdateTime :: Lens' Course (Maybe Text)
+cUpdateTime
+  = lens _cUpdateTime (\ s a -> s{_cUpdateTime = a})
+
+-- | The identifier of the owner of a course. When specified as a parameter
+-- of a create course request, this field is required. The identifier can
+-- be one of the following: * the numeric identifier for the user * the
+-- email address of the user * the string literal \`\"me\"\`, indicating
+-- the requesting user This must be set in a create request. Specifying
+-- this field in a course update mask will result in an
+-- \`INVALID_ARGUMENT\` error.
+cOwnerId :: Lens' Course (Maybe Text)
+cOwnerId = lens _cOwnerId (\ s a -> s{_cOwnerId = a})
+
+-- | Name of the course. For example, \"10th Grade Biology\". The name is
+-- required. It must be between 1 and 750 characters and a valid UTF-8
+-- string.
+cName :: Lens' Course (Maybe Text)
+cName = lens _cName (\ s a -> s{_cName = a})
+
+-- | Identifier for this course assigned by Classroom. When creating a
+-- course, you may optionally set this identifier to an alias string in the
+-- request to create a corresponding alias. The \`id\` is still assigned by
+-- Classroom and cannot be updated after the course is created. Specifying
+-- this field in a course update mask will result in an error.
+cId :: Lens' Course (Maybe Text)
+cId = lens _cId (\ s a -> s{_cId = a})
+
+-- | Absolute link to this course in the Classroom web UI. Read-only.
+cAlternateLink :: Lens' Course (Maybe Text)
+cAlternateLink
+  = lens _cAlternateLink
+      (\ s a -> s{_cAlternateLink = a})
+
+-- | Optional description. For example, \"We\'ll be learning about the
+-- structure of living creatures from a combination of textbooks, guest
+-- lectures, and lab work. Expect to be excited!\" If set, this field must
+-- be a valid UTF-8 string and no longer than 30,000 characters.
+cDescription :: Lens' Course (Maybe Text)
+cDescription
+  = lens _cDescription (\ s a -> s{_cDescription = a})
+
+-- | Optional heading for the description. For example, \"Welcome to 10th
+-- Grade Biology.\" If set, this field must be a valid UTF-8 string and no
+-- longer than 3600 characters.
+cDescriptionHeading :: Lens' Course (Maybe Text)
+cDescriptionHeading
+  = lens _cDescriptionHeading
+      (\ s a -> s{_cDescriptionHeading = a})
+
+-- | Section of the course. For example, \"Period 2\". If set, this field
+-- must be a valid UTF-8 string and no longer than 2800 characters.
+cSection :: Lens' Course (Maybe Text)
+cSection = lens _cSection (\ s a -> s{_cSection = a})
+
+instance FromJSON Course where
+        parseJSON
+          = withObject "Course"
+              (\ o ->
+                 Course <$>
+                   (o .:? "creationTime") <*> (o .:? "room") <*>
+                     (o .:? "courseState")
+                     <*> (o .:? "enrollmentCode")
+                     <*> (o .:? "updateTime")
+                     <*> (o .:? "ownerId")
+                     <*> (o .:? "name")
+                     <*> (o .:? "id")
+                     <*> (o .:? "alternateLink")
+                     <*> (o .:? "description")
+                     <*> (o .:? "descriptionHeading")
+                     <*> (o .:? "section"))
+
+instance ToJSON Course where
+        toJSON Course{..}
+          = object
+              (catMaybes
+                 [("creationTime" .=) <$> _cCreationTime,
+                  ("room" .=) <$> _cRoom,
+                  ("courseState" .=) <$> _cCourseState,
+                  ("enrollmentCode" .=) <$> _cEnrollmentCode,
+                  ("updateTime" .=) <$> _cUpdateTime,
+                  ("ownerId" .=) <$> _cOwnerId, ("name" .=) <$> _cName,
+                  ("id" .=) <$> _cId,
+                  ("alternateLink" .=) <$> _cAlternateLink,
+                  ("description" .=) <$> _cDescription,
+                  ("descriptionHeading" .=) <$> _cDescriptionHeading,
+                  ("section" .=) <$> _cSection])
+
+-- | Response when listing students.
+--
+-- /See:/ 'listStudentsResponse' smart constructor.
+data ListStudentsResponse = ListStudentsResponse
+    { _lsrNextPageToken :: !(Maybe Text)
+    , _lsrStudents      :: !(Maybe [Student])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ListStudentsResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'lsrNextPageToken'
+--
+-- * 'lsrStudents'
+listStudentsResponse
+    :: ListStudentsResponse
+listStudentsResponse =
+    ListStudentsResponse
+    { _lsrNextPageToken = Nothing
+    , _lsrStudents = Nothing
+    }
+
+-- | Token identifying the next page of results to return. If empty, no
+-- further results are available.
+lsrNextPageToken :: Lens' ListStudentsResponse (Maybe Text)
+lsrNextPageToken
+  = lens _lsrNextPageToken
+      (\ s a -> s{_lsrNextPageToken = a})
+
+-- | Students who match the list request.
+lsrStudents :: Lens' ListStudentsResponse [Student]
+lsrStudents
+  = lens _lsrStudents (\ s a -> s{_lsrStudents = a}) .
+      _Default
+      . _Coerce
+
+instance FromJSON ListStudentsResponse where
+        parseJSON
+          = withObject "ListStudentsResponse"
+              (\ o ->
+                 ListStudentsResponse <$>
+                   (o .:? "nextPageToken") <*>
+                     (o .:? "students" .!= mempty))
+
+instance ToJSON ListStudentsResponse where
+        toJSON ListStudentsResponse{..}
+          = object
+              (catMaybes
+                 [("nextPageToken" .=) <$> _lsrNextPageToken,
+                  ("students" .=) <$> _lsrStudents])
+
+-- | Alternative identifier for a course. An alias uniquely identifies a
+-- course. It must be unique within one of the following scopes: * domain:
+-- A domain-scoped alias is visible to all users within the alias
+-- creator\'s domain and can be created only by a domain admin. A
+-- domain-scoped alias is often used when a course has an identifier
+-- external to Classroom. * project: A project-scoped alias is visible to
+-- any request from an application using the Developer Console project ID
+-- that created the alias and can be created by any project. A
+-- project-scoped alias is often used when an application has alternative
+-- identifiers. A random value can also be used to avoid duplicate courses
+-- in the event of transmission failures, as retrying a request will return
+-- \`ALREADY_EXISTS\` if a previous one has succeeded.
+--
+-- /See:/ 'courseAlias' smart constructor.
+newtype CourseAlias = CourseAlias
+    { _caAlias :: Maybe Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CourseAlias' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'caAlias'
+courseAlias
+    :: CourseAlias
+courseAlias =
+    CourseAlias
+    { _caAlias = Nothing
+    }
+
+-- | Alias string. The format of the string indicates the desired alias
+-- scoping. * \`d:\` indicates a domain-scoped alias. Example:
+-- \`d:math_101\` * \`p:\` indicates a project-scoped alias. Example:
+-- \`p:abc123\` This field has a maximum length of 256 characters.
+caAlias :: Lens' CourseAlias (Maybe Text)
+caAlias = lens _caAlias (\ s a -> s{_caAlias = a})
+
+instance FromJSON CourseAlias where
+        parseJSON
+          = withObject "CourseAlias"
+              (\ o -> CourseAlias <$> (o .:? "alias"))
+
+instance ToJSON CourseAlias where
+        toJSON CourseAlias{..}
+          = object (catMaybes [("alias" .=) <$> _caAlias])
+
+-- | Response when listing teachers.
+--
+-- /See:/ 'listTeachersResponse' smart constructor.
+data ListTeachersResponse = ListTeachersResponse
+    { _ltrNextPageToken :: !(Maybe Text)
+    , _ltrTeachers      :: !(Maybe [Teacher])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ListTeachersResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ltrNextPageToken'
+--
+-- * 'ltrTeachers'
+listTeachersResponse
+    :: ListTeachersResponse
+listTeachersResponse =
+    ListTeachersResponse
+    { _ltrNextPageToken = Nothing
+    , _ltrTeachers = Nothing
+    }
+
+-- | Token identifying the next page of results to return. If empty, no
+-- further results are available.
+ltrNextPageToken :: Lens' ListTeachersResponse (Maybe Text)
+ltrNextPageToken
+  = lens _ltrNextPageToken
+      (\ s a -> s{_ltrNextPageToken = a})
+
+-- | Teachers who match the list request.
+ltrTeachers :: Lens' ListTeachersResponse [Teacher]
+ltrTeachers
+  = lens _ltrTeachers (\ s a -> s{_ltrTeachers = a}) .
+      _Default
+      . _Coerce
+
+instance FromJSON ListTeachersResponse where
+        parseJSON
+          = withObject "ListTeachersResponse"
+              (\ o ->
+                 ListTeachersResponse <$>
+                   (o .:? "nextPageToken") <*>
+                     (o .:? "teachers" .!= mempty))
+
+instance ToJSON ListTeachersResponse where
+        toJSON ListTeachersResponse{..}
+          = object
+              (catMaybes
+                 [("nextPageToken" .=) <$> _ltrNextPageToken,
+                  ("teachers" .=) <$> _ltrTeachers])
+
+-- | Student in a course.
+--
+-- /See:/ 'student' smart constructor.
+data Student = Student
+    { _sCourseId :: !(Maybe Text)
+    , _sProFile  :: !(Maybe UserProFile)
+    , _sUserId   :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Student' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'sCourseId'
+--
+-- * 'sProFile'
+--
+-- * 'sUserId'
+student
+    :: Student
+student =
+    Student
+    { _sCourseId = Nothing
+    , _sProFile = Nothing
+    , _sUserId = Nothing
+    }
+
+-- | Identifier of the course. Read-only.
+sCourseId :: Lens' Student (Maybe Text)
+sCourseId
+  = lens _sCourseId (\ s a -> s{_sCourseId = a})
+
+-- | Global user information for the student. Read-only.
+sProFile :: Lens' Student (Maybe UserProFile)
+sProFile = lens _sProFile (\ s a -> s{_sProFile = a})
+
+-- | Identifier of the user. When specified as a parameter of a request, this
+-- identifier can be one of the following: * the numeric identifier for the
+-- user * the email address of the user * the string literal \`\"me\"\`,
+-- indicating the requesting user
+sUserId :: Lens' Student (Maybe Text)
+sUserId = lens _sUserId (\ s a -> s{_sUserId = a})
+
+instance FromJSON Student where
+        parseJSON
+          = withObject "Student"
+              (\ o ->
+                 Student <$>
+                   (o .:? "courseId") <*> (o .:? "profile") <*>
+                     (o .:? "userId"))
+
+instance ToJSON Student where
+        toJSON Student{..}
+          = object
+              (catMaybes
+                 [("courseId" .=) <$> _sCourseId,
+                  ("profile" .=) <$> _sProFile,
+                  ("userId" .=) <$> _sUserId])
diff --git a/gen/Network/Google/Classroom/Types/Sum.hs b/gen/Network/Google/Classroom/Types/Sum.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Classroom/Types/Sum.hs
@@ -0,0 +1,19 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE LambdaCase         #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- |
+-- Module      : Network.Google.Classroom.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.Classroom.Types.Sum where
+
+import           Network.Google.Prelude
diff --git a/gen/Network/Google/Resource/Classroom/Courses/Aliases/Create.hs b/gen/Network/Google/Resource/Classroom/Courses/Aliases/Create.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Classroom/Courses/Aliases/Create.hs
@@ -0,0 +1,190 @@
+{-# 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.Classroom.Courses.Aliases.Create
+-- 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 an alias for a course. This method returns the following error
+-- codes: * \`PERMISSION_DENIED\` if the requesting user is not permitted
+-- to create the alias or for access errors. * \`NOT_FOUND\` if the course
+-- does not exist. * \`ALREADY_EXISTS\` if the alias already exists.
+--
+-- /See:/ <https://developers.google.com/classroom/ Google Classroom API Reference> for @classroom.courses.aliases.create@.
+module Network.Google.Resource.Classroom.Courses.Aliases.Create
+    (
+    -- * REST Resource
+      CoursesAliasesCreateResource
+
+    -- * Creating a Request
+    , coursesAliasesCreate
+    , CoursesAliasesCreate
+
+    -- * Request Lenses
+    , cacXgafv
+    , cacUploadProtocol
+    , cacPp
+    , cacCourseId
+    , cacAccessToken
+    , cacUploadType
+    , cacPayload
+    , cacBearerToken
+    , cacCallback
+    ) where
+
+import           Network.Google.Classroom.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @classroom.courses.aliases.create@ method which the
+-- 'CoursesAliasesCreate' request conforms to.
+type CoursesAliasesCreateResource =
+     "v1" :>
+       "courses" :>
+         Capture "courseId" Text :>
+           "aliases" :>
+             QueryParam "$.xgafv" Text :>
+               QueryParam "upload_protocol" Text :>
+                 QueryParam "pp" Bool :>
+                   QueryParam "access_token" Text :>
+                     QueryParam "uploadType" Text :>
+                       QueryParam "bearer_token" Text :>
+                         QueryParam "callback" Text :>
+                           QueryParam "alt" AltJSON :>
+                             ReqBody '[JSON] CourseAlias :>
+                               Post '[JSON] CourseAlias
+
+-- | Creates an alias for a course. This method returns the following error
+-- codes: * \`PERMISSION_DENIED\` if the requesting user is not permitted
+-- to create the alias or for access errors. * \`NOT_FOUND\` if the course
+-- does not exist. * \`ALREADY_EXISTS\` if the alias already exists.
+--
+-- /See:/ 'coursesAliasesCreate' smart constructor.
+data CoursesAliasesCreate = CoursesAliasesCreate
+    { _cacXgafv          :: !(Maybe Text)
+    , _cacUploadProtocol :: !(Maybe Text)
+    , _cacPp             :: !Bool
+    , _cacCourseId       :: !Text
+    , _cacAccessToken    :: !(Maybe Text)
+    , _cacUploadType     :: !(Maybe Text)
+    , _cacPayload        :: !CourseAlias
+    , _cacBearerToken    :: !(Maybe Text)
+    , _cacCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CoursesAliasesCreate' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cacXgafv'
+--
+-- * 'cacUploadProtocol'
+--
+-- * 'cacPp'
+--
+-- * 'cacCourseId'
+--
+-- * 'cacAccessToken'
+--
+-- * 'cacUploadType'
+--
+-- * 'cacPayload'
+--
+-- * 'cacBearerToken'
+--
+-- * 'cacCallback'
+coursesAliasesCreate
+    :: Text -- ^ 'cacCourseId'
+    -> CourseAlias -- ^ 'cacPayload'
+    -> CoursesAliasesCreate
+coursesAliasesCreate pCacCourseId_ pCacPayload_ =
+    CoursesAliasesCreate
+    { _cacXgafv = Nothing
+    , _cacUploadProtocol = Nothing
+    , _cacPp = True
+    , _cacCourseId = pCacCourseId_
+    , _cacAccessToken = Nothing
+    , _cacUploadType = Nothing
+    , _cacPayload = pCacPayload_
+    , _cacBearerToken = Nothing
+    , _cacCallback = Nothing
+    }
+
+-- | V1 error format.
+cacXgafv :: Lens' CoursesAliasesCreate (Maybe Text)
+cacXgafv = lens _cacXgafv (\ s a -> s{_cacXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+cacUploadProtocol :: Lens' CoursesAliasesCreate (Maybe Text)
+cacUploadProtocol
+  = lens _cacUploadProtocol
+      (\ s a -> s{_cacUploadProtocol = a})
+
+-- | Pretty-print response.
+cacPp :: Lens' CoursesAliasesCreate Bool
+cacPp = lens _cacPp (\ s a -> s{_cacPp = a})
+
+-- | Identifier of the course to alias. This identifier can be either the
+-- Classroom-assigned identifier or an alias.
+cacCourseId :: Lens' CoursesAliasesCreate Text
+cacCourseId
+  = lens _cacCourseId (\ s a -> s{_cacCourseId = a})
+
+-- | OAuth access token.
+cacAccessToken :: Lens' CoursesAliasesCreate (Maybe Text)
+cacAccessToken
+  = lens _cacAccessToken
+      (\ s a -> s{_cacAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+cacUploadType :: Lens' CoursesAliasesCreate (Maybe Text)
+cacUploadType
+  = lens _cacUploadType
+      (\ s a -> s{_cacUploadType = a})
+
+-- | Multipart request metadata.
+cacPayload :: Lens' CoursesAliasesCreate CourseAlias
+cacPayload
+  = lens _cacPayload (\ s a -> s{_cacPayload = a})
+
+-- | OAuth bearer token.
+cacBearerToken :: Lens' CoursesAliasesCreate (Maybe Text)
+cacBearerToken
+  = lens _cacBearerToken
+      (\ s a -> s{_cacBearerToken = a})
+
+-- | JSONP
+cacCallback :: Lens' CoursesAliasesCreate (Maybe Text)
+cacCallback
+  = lens _cacCallback (\ s a -> s{_cacCallback = a})
+
+instance GoogleRequest CoursesAliasesCreate where
+        type Rs CoursesAliasesCreate = CourseAlias
+        requestClient CoursesAliasesCreate{..}
+          = go _cacCourseId _cacXgafv _cacUploadProtocol
+              (Just _cacPp)
+              _cacAccessToken
+              _cacUploadType
+              _cacBearerToken
+              _cacCallback
+              (Just AltJSON)
+              _cacPayload
+              classroomService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy CoursesAliasesCreateResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Classroom/Courses/Aliases/Delete.hs b/gen/Network/Google/Resource/Classroom/Courses/Aliases/Delete.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Classroom/Courses/Aliases/Delete.hs
@@ -0,0 +1,188 @@
+{-# 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.Classroom.Courses.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)
+--
+-- Deletes an alias of a course. This method returns the following error
+-- codes: * \`PERMISSION_DENIED\` if the requesting user is not permitted
+-- to remove the alias or for access errors. * \`NOT_FOUND\` if the alias
+-- does not exist.
+--
+-- /See:/ <https://developers.google.com/classroom/ Google Classroom API Reference> for @classroom.courses.aliases.delete@.
+module Network.Google.Resource.Classroom.Courses.Aliases.Delete
+    (
+    -- * REST Resource
+      CoursesAliasesDeleteResource
+
+    -- * Creating a Request
+    , coursesAliasesDelete
+    , CoursesAliasesDelete
+
+    -- * Request Lenses
+    , cadXgafv
+    , cadUploadProtocol
+    , cadPp
+    , cadCourseId
+    , cadAccessToken
+    , cadUploadType
+    , cadAlias
+    , cadBearerToken
+    , cadCallback
+    ) where
+
+import           Network.Google.Classroom.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @classroom.courses.aliases.delete@ method which the
+-- 'CoursesAliasesDelete' request conforms to.
+type CoursesAliasesDeleteResource =
+     "v1" :>
+       "courses" :>
+         Capture "courseId" Text :>
+           "aliases" :>
+             Capture "alias" Text :>
+               QueryParam "$.xgafv" Text :>
+                 QueryParam "upload_protocol" Text :>
+                   QueryParam "pp" Bool :>
+                     QueryParam "access_token" Text :>
+                       QueryParam "uploadType" Text :>
+                         QueryParam "bearer_token" Text :>
+                           QueryParam "callback" Text :>
+                             QueryParam "alt" AltJSON :> Delete '[JSON] Empty
+
+-- | Deletes an alias of a course. This method returns the following error
+-- codes: * \`PERMISSION_DENIED\` if the requesting user is not permitted
+-- to remove the alias or for access errors. * \`NOT_FOUND\` if the alias
+-- does not exist.
+--
+-- /See:/ 'coursesAliasesDelete' smart constructor.
+data CoursesAliasesDelete = CoursesAliasesDelete
+    { _cadXgafv          :: !(Maybe Text)
+    , _cadUploadProtocol :: !(Maybe Text)
+    , _cadPp             :: !Bool
+    , _cadCourseId       :: !Text
+    , _cadAccessToken    :: !(Maybe Text)
+    , _cadUploadType     :: !(Maybe Text)
+    , _cadAlias          :: !Text
+    , _cadBearerToken    :: !(Maybe Text)
+    , _cadCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CoursesAliasesDelete' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cadXgafv'
+--
+-- * 'cadUploadProtocol'
+--
+-- * 'cadPp'
+--
+-- * 'cadCourseId'
+--
+-- * 'cadAccessToken'
+--
+-- * 'cadUploadType'
+--
+-- * 'cadAlias'
+--
+-- * 'cadBearerToken'
+--
+-- * 'cadCallback'
+coursesAliasesDelete
+    :: Text -- ^ 'cadCourseId'
+    -> Text -- ^ 'cadAlias'
+    -> CoursesAliasesDelete
+coursesAliasesDelete pCadCourseId_ pCadAlias_ =
+    CoursesAliasesDelete
+    { _cadXgafv = Nothing
+    , _cadUploadProtocol = Nothing
+    , _cadPp = True
+    , _cadCourseId = pCadCourseId_
+    , _cadAccessToken = Nothing
+    , _cadUploadType = Nothing
+    , _cadAlias = pCadAlias_
+    , _cadBearerToken = Nothing
+    , _cadCallback = Nothing
+    }
+
+-- | V1 error format.
+cadXgafv :: Lens' CoursesAliasesDelete (Maybe Text)
+cadXgafv = lens _cadXgafv (\ s a -> s{_cadXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+cadUploadProtocol :: Lens' CoursesAliasesDelete (Maybe Text)
+cadUploadProtocol
+  = lens _cadUploadProtocol
+      (\ s a -> s{_cadUploadProtocol = a})
+
+-- | Pretty-print response.
+cadPp :: Lens' CoursesAliasesDelete Bool
+cadPp = lens _cadPp (\ s a -> s{_cadPp = a})
+
+-- | Identifier of the course whose alias should be deleted. This identifier
+-- can be either the Classroom-assigned identifier or an alias.
+cadCourseId :: Lens' CoursesAliasesDelete Text
+cadCourseId
+  = lens _cadCourseId (\ s a -> s{_cadCourseId = a})
+
+-- | OAuth access token.
+cadAccessToken :: Lens' CoursesAliasesDelete (Maybe Text)
+cadAccessToken
+  = lens _cadAccessToken
+      (\ s a -> s{_cadAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+cadUploadType :: Lens' CoursesAliasesDelete (Maybe Text)
+cadUploadType
+  = lens _cadUploadType
+      (\ s a -> s{_cadUploadType = a})
+
+-- | Alias to delete. This may not be the Classroom-assigned identifier.
+cadAlias :: Lens' CoursesAliasesDelete Text
+cadAlias = lens _cadAlias (\ s a -> s{_cadAlias = a})
+
+-- | OAuth bearer token.
+cadBearerToken :: Lens' CoursesAliasesDelete (Maybe Text)
+cadBearerToken
+  = lens _cadBearerToken
+      (\ s a -> s{_cadBearerToken = a})
+
+-- | JSONP
+cadCallback :: Lens' CoursesAliasesDelete (Maybe Text)
+cadCallback
+  = lens _cadCallback (\ s a -> s{_cadCallback = a})
+
+instance GoogleRequest CoursesAliasesDelete where
+        type Rs CoursesAliasesDelete = Empty
+        requestClient CoursesAliasesDelete{..}
+          = go _cadCourseId _cadAlias _cadXgafv
+              _cadUploadProtocol
+              (Just _cadPp)
+              _cadAccessToken
+              _cadUploadType
+              _cadBearerToken
+              _cadCallback
+              (Just AltJSON)
+              classroomService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy CoursesAliasesDeleteResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Classroom/Courses/Aliases/List.hs b/gen/Network/Google/Resource/Classroom/Courses/Aliases/List.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Classroom/Courses/Aliases/List.hs
@@ -0,0 +1,207 @@
+{-# 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.Classroom.Courses.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)
+--
+-- Returns a list of aliases for a course. This method returns the
+-- following error codes: * \`PERMISSION_DENIED\` if the requesting user is
+-- not permitted to access the course or for access errors. * \`NOT_FOUND\`
+-- if the course does not exist.
+--
+-- /See:/ <https://developers.google.com/classroom/ Google Classroom API Reference> for @classroom.courses.aliases.list@.
+module Network.Google.Resource.Classroom.Courses.Aliases.List
+    (
+    -- * REST Resource
+      CoursesAliasesListResource
+
+    -- * Creating a Request
+    , coursesAliasesList
+    , CoursesAliasesList
+
+    -- * Request Lenses
+    , calXgafv
+    , calUploadProtocol
+    , calPp
+    , calCourseId
+    , calAccessToken
+    , calUploadType
+    , calBearerToken
+    , calPageToken
+    , calPageSize
+    , calCallback
+    ) where
+
+import           Network.Google.Classroom.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @classroom.courses.aliases.list@ method which the
+-- 'CoursesAliasesList' request conforms to.
+type CoursesAliasesListResource =
+     "v1" :>
+       "courses" :>
+         Capture "courseId" Text :>
+           "aliases" :>
+             QueryParam "$.xgafv" Text :>
+               QueryParam "upload_protocol" Text :>
+                 QueryParam "pp" Bool :>
+                   QueryParam "access_token" Text :>
+                     QueryParam "uploadType" Text :>
+                       QueryParam "bearer_token" Text :>
+                         QueryParam "pageToken" Text :>
+                           QueryParam "pageSize" (Textual Int32) :>
+                             QueryParam "callback" Text :>
+                               QueryParam "alt" AltJSON :>
+                                 Get '[JSON] ListCourseAliasesResponse
+
+-- | Returns a list of aliases for a course. This method returns the
+-- following error codes: * \`PERMISSION_DENIED\` if the requesting user is
+-- not permitted to access the course or for access errors. * \`NOT_FOUND\`
+-- if the course does not exist.
+--
+-- /See:/ 'coursesAliasesList' smart constructor.
+data CoursesAliasesList = CoursesAliasesList
+    { _calXgafv          :: !(Maybe Text)
+    , _calUploadProtocol :: !(Maybe Text)
+    , _calPp             :: !Bool
+    , _calCourseId       :: !Text
+    , _calAccessToken    :: !(Maybe Text)
+    , _calUploadType     :: !(Maybe Text)
+    , _calBearerToken    :: !(Maybe Text)
+    , _calPageToken      :: !(Maybe Text)
+    , _calPageSize       :: !(Maybe (Textual Int32))
+    , _calCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CoursesAliasesList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'calXgafv'
+--
+-- * 'calUploadProtocol'
+--
+-- * 'calPp'
+--
+-- * 'calCourseId'
+--
+-- * 'calAccessToken'
+--
+-- * 'calUploadType'
+--
+-- * 'calBearerToken'
+--
+-- * 'calPageToken'
+--
+-- * 'calPageSize'
+--
+-- * 'calCallback'
+coursesAliasesList
+    :: Text -- ^ 'calCourseId'
+    -> CoursesAliasesList
+coursesAliasesList pCalCourseId_ =
+    CoursesAliasesList
+    { _calXgafv = Nothing
+    , _calUploadProtocol = Nothing
+    , _calPp = True
+    , _calCourseId = pCalCourseId_
+    , _calAccessToken = Nothing
+    , _calUploadType = Nothing
+    , _calBearerToken = Nothing
+    , _calPageToken = Nothing
+    , _calPageSize = Nothing
+    , _calCallback = Nothing
+    }
+
+-- | V1 error format.
+calXgafv :: Lens' CoursesAliasesList (Maybe Text)
+calXgafv = lens _calXgafv (\ s a -> s{_calXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+calUploadProtocol :: Lens' CoursesAliasesList (Maybe Text)
+calUploadProtocol
+  = lens _calUploadProtocol
+      (\ s a -> s{_calUploadProtocol = a})
+
+-- | Pretty-print response.
+calPp :: Lens' CoursesAliasesList Bool
+calPp = lens _calPp (\ s a -> s{_calPp = a})
+
+-- | The identifier of the course. This identifier can be either the
+-- Classroom-assigned identifier or an alias.
+calCourseId :: Lens' CoursesAliasesList Text
+calCourseId
+  = lens _calCourseId (\ s a -> s{_calCourseId = a})
+
+-- | OAuth access token.
+calAccessToken :: Lens' CoursesAliasesList (Maybe Text)
+calAccessToken
+  = lens _calAccessToken
+      (\ s a -> s{_calAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+calUploadType :: Lens' CoursesAliasesList (Maybe Text)
+calUploadType
+  = lens _calUploadType
+      (\ s a -> s{_calUploadType = a})
+
+-- | OAuth bearer token.
+calBearerToken :: Lens' CoursesAliasesList (Maybe Text)
+calBearerToken
+  = lens _calBearerToken
+      (\ s a -> s{_calBearerToken = a})
+
+-- | nextPageToken value returned from a previous list call, indicating that
+-- the subsequent page of results should be returned. The list request must
+-- be otherwise identical to the one that resulted in this token.
+calPageToken :: Lens' CoursesAliasesList (Maybe Text)
+calPageToken
+  = lens _calPageToken (\ s a -> s{_calPageToken = a})
+
+-- | Maximum number of items to return. Zero or unspecified indicates that
+-- the server may assign a maximum. The server may return fewer than the
+-- specified number of results.
+calPageSize :: Lens' CoursesAliasesList (Maybe Int32)
+calPageSize
+  = lens _calPageSize (\ s a -> s{_calPageSize = a}) .
+      mapping _Coerce
+
+-- | JSONP
+calCallback :: Lens' CoursesAliasesList (Maybe Text)
+calCallback
+  = lens _calCallback (\ s a -> s{_calCallback = a})
+
+instance GoogleRequest CoursesAliasesList where
+        type Rs CoursesAliasesList =
+             ListCourseAliasesResponse
+        requestClient CoursesAliasesList{..}
+          = go _calCourseId _calXgafv _calUploadProtocol
+              (Just _calPp)
+              _calAccessToken
+              _calUploadType
+              _calBearerToken
+              _calPageToken
+              _calPageSize
+              _calCallback
+              (Just AltJSON)
+              classroomService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy CoursesAliasesListResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Classroom/Courses/Create.hs b/gen/Network/Google/Resource/Classroom/Courses/Create.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Classroom/Courses/Create.hs
@@ -0,0 +1,180 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.Classroom.Courses.Create
+-- 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 course. The user specified in \`ownerId\` is the owner of the
+-- created course and added as a teacher. This method returns the following
+-- error codes: * \`PERMISSION_DENIED\` if the requesting user is not
+-- permitted to create courses or for access errors. * \`NOT_FOUND\` if the
+-- primary teacher is not a valid user. * \`FAILED_PRECONDITION\` if the
+-- course owner\'s account is disabled or for the following request errors:
+-- * UserGroupsMembershipLimitReached * \`ALREADY_EXISTS\` if an alias was
+-- specified in the \`id\` and already exists.
+--
+-- /See:/ <https://developers.google.com/classroom/ Google Classroom API Reference> for @classroom.courses.create@.
+module Network.Google.Resource.Classroom.Courses.Create
+    (
+    -- * REST Resource
+      CoursesCreateResource
+
+    -- * Creating a Request
+    , coursesCreate
+    , CoursesCreate
+
+    -- * Request Lenses
+    , ccXgafv
+    , ccUploadProtocol
+    , ccPp
+    , ccAccessToken
+    , ccUploadType
+    , ccPayload
+    , ccBearerToken
+    , ccCallback
+    ) where
+
+import           Network.Google.Classroom.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @classroom.courses.create@ method which the
+-- 'CoursesCreate' request conforms to.
+type CoursesCreateResource =
+     "v1" :>
+       "courses" :>
+         QueryParam "$.xgafv" Text :>
+           QueryParam "upload_protocol" Text :>
+             QueryParam "pp" Bool :>
+               QueryParam "access_token" Text :>
+                 QueryParam "uploadType" Text :>
+                   QueryParam "bearer_token" Text :>
+                     QueryParam "callback" Text :>
+                       QueryParam "alt" AltJSON :>
+                         ReqBody '[JSON] Course :> Post '[JSON] Course
+
+-- | Creates a course. The user specified in \`ownerId\` is the owner of the
+-- created course and added as a teacher. This method returns the following
+-- error codes: * \`PERMISSION_DENIED\` if the requesting user is not
+-- permitted to create courses or for access errors. * \`NOT_FOUND\` if the
+-- primary teacher is not a valid user. * \`FAILED_PRECONDITION\` if the
+-- course owner\'s account is disabled or for the following request errors:
+-- * UserGroupsMembershipLimitReached * \`ALREADY_EXISTS\` if an alias was
+-- specified in the \`id\` and already exists.
+--
+-- /See:/ 'coursesCreate' smart constructor.
+data CoursesCreate = CoursesCreate
+    { _ccXgafv          :: !(Maybe Text)
+    , _ccUploadProtocol :: !(Maybe Text)
+    , _ccPp             :: !Bool
+    , _ccAccessToken    :: !(Maybe Text)
+    , _ccUploadType     :: !(Maybe Text)
+    , _ccPayload        :: !Course
+    , _ccBearerToken    :: !(Maybe Text)
+    , _ccCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CoursesCreate' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ccXgafv'
+--
+-- * 'ccUploadProtocol'
+--
+-- * 'ccPp'
+--
+-- * 'ccAccessToken'
+--
+-- * 'ccUploadType'
+--
+-- * 'ccPayload'
+--
+-- * 'ccBearerToken'
+--
+-- * 'ccCallback'
+coursesCreate
+    :: Course -- ^ 'ccPayload'
+    -> CoursesCreate
+coursesCreate pCcPayload_ =
+    CoursesCreate
+    { _ccXgafv = Nothing
+    , _ccUploadProtocol = Nothing
+    , _ccPp = True
+    , _ccAccessToken = Nothing
+    , _ccUploadType = Nothing
+    , _ccPayload = pCcPayload_
+    , _ccBearerToken = Nothing
+    , _ccCallback = Nothing
+    }
+
+-- | V1 error format.
+ccXgafv :: Lens' CoursesCreate (Maybe Text)
+ccXgafv = lens _ccXgafv (\ s a -> s{_ccXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+ccUploadProtocol :: Lens' CoursesCreate (Maybe Text)
+ccUploadProtocol
+  = lens _ccUploadProtocol
+      (\ s a -> s{_ccUploadProtocol = a})
+
+-- | Pretty-print response.
+ccPp :: Lens' CoursesCreate Bool
+ccPp = lens _ccPp (\ s a -> s{_ccPp = a})
+
+-- | OAuth access token.
+ccAccessToken :: Lens' CoursesCreate (Maybe Text)
+ccAccessToken
+  = lens _ccAccessToken
+      (\ s a -> s{_ccAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+ccUploadType :: Lens' CoursesCreate (Maybe Text)
+ccUploadType
+  = lens _ccUploadType (\ s a -> s{_ccUploadType = a})
+
+-- | Multipart request metadata.
+ccPayload :: Lens' CoursesCreate Course
+ccPayload
+  = lens _ccPayload (\ s a -> s{_ccPayload = a})
+
+-- | OAuth bearer token.
+ccBearerToken :: Lens' CoursesCreate (Maybe Text)
+ccBearerToken
+  = lens _ccBearerToken
+      (\ s a -> s{_ccBearerToken = a})
+
+-- | JSONP
+ccCallback :: Lens' CoursesCreate (Maybe Text)
+ccCallback
+  = lens _ccCallback (\ s a -> s{_ccCallback = a})
+
+instance GoogleRequest CoursesCreate where
+        type Rs CoursesCreate = Course
+        requestClient CoursesCreate{..}
+          = go _ccXgafv _ccUploadProtocol (Just _ccPp)
+              _ccAccessToken
+              _ccUploadType
+              _ccBearerToken
+              _ccCallback
+              (Just AltJSON)
+              _ccPayload
+              classroomService
+          where go
+                  = buildClient (Proxy :: Proxy CoursesCreateResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Classroom/Courses/Delete.hs b/gen/Network/Google/Resource/Classroom/Courses/Delete.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Classroom/Courses/Delete.hs
@@ -0,0 +1,171 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.Classroom.Courses.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 course. This method returns the following error codes: *
+-- \`PERMISSION_DENIED\` if the requesting user is not permitted to delete
+-- the requested course or for access errors. * \`NOT_FOUND\` if no course
+-- exists with the requested ID.
+--
+-- /See:/ <https://developers.google.com/classroom/ Google Classroom API Reference> for @classroom.courses.delete@.
+module Network.Google.Resource.Classroom.Courses.Delete
+    (
+    -- * REST Resource
+      CoursesDeleteResource
+
+    -- * Creating a Request
+    , coursesDelete
+    , CoursesDelete
+
+    -- * Request Lenses
+    , cdXgafv
+    , cdUploadProtocol
+    , cdPp
+    , cdAccessToken
+    , cdUploadType
+    , cdBearerToken
+    , cdId
+    , cdCallback
+    ) where
+
+import           Network.Google.Classroom.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @classroom.courses.delete@ method which the
+-- 'CoursesDelete' request conforms to.
+type CoursesDeleteResource =
+     "v1" :>
+       "courses" :>
+         Capture "id" Text :>
+           QueryParam "$.xgafv" Text :>
+             QueryParam "upload_protocol" Text :>
+               QueryParam "pp" Bool :>
+                 QueryParam "access_token" Text :>
+                   QueryParam "uploadType" Text :>
+                     QueryParam "bearer_token" Text :>
+                       QueryParam "callback" Text :>
+                         QueryParam "alt" AltJSON :> Delete '[JSON] Empty
+
+-- | Deletes a course. This method returns the following error codes: *
+-- \`PERMISSION_DENIED\` if the requesting user is not permitted to delete
+-- the requested course or for access errors. * \`NOT_FOUND\` if no course
+-- exists with the requested ID.
+--
+-- /See:/ 'coursesDelete' smart constructor.
+data CoursesDelete = CoursesDelete
+    { _cdXgafv          :: !(Maybe Text)
+    , _cdUploadProtocol :: !(Maybe Text)
+    , _cdPp             :: !Bool
+    , _cdAccessToken    :: !(Maybe Text)
+    , _cdUploadType     :: !(Maybe Text)
+    , _cdBearerToken    :: !(Maybe Text)
+    , _cdId             :: !Text
+    , _cdCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CoursesDelete' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cdXgafv'
+--
+-- * 'cdUploadProtocol'
+--
+-- * 'cdPp'
+--
+-- * 'cdAccessToken'
+--
+-- * 'cdUploadType'
+--
+-- * 'cdBearerToken'
+--
+-- * 'cdId'
+--
+-- * 'cdCallback'
+coursesDelete
+    :: Text -- ^ 'cdId'
+    -> CoursesDelete
+coursesDelete pCdId_ =
+    CoursesDelete
+    { _cdXgafv = Nothing
+    , _cdUploadProtocol = Nothing
+    , _cdPp = True
+    , _cdAccessToken = Nothing
+    , _cdUploadType = Nothing
+    , _cdBearerToken = Nothing
+    , _cdId = pCdId_
+    , _cdCallback = Nothing
+    }
+
+-- | V1 error format.
+cdXgafv :: Lens' CoursesDelete (Maybe Text)
+cdXgafv = lens _cdXgafv (\ s a -> s{_cdXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+cdUploadProtocol :: Lens' CoursesDelete (Maybe Text)
+cdUploadProtocol
+  = lens _cdUploadProtocol
+      (\ s a -> s{_cdUploadProtocol = a})
+
+-- | Pretty-print response.
+cdPp :: Lens' CoursesDelete Bool
+cdPp = lens _cdPp (\ s a -> s{_cdPp = a})
+
+-- | OAuth access token.
+cdAccessToken :: Lens' CoursesDelete (Maybe Text)
+cdAccessToken
+  = lens _cdAccessToken
+      (\ s a -> s{_cdAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+cdUploadType :: Lens' CoursesDelete (Maybe Text)
+cdUploadType
+  = lens _cdUploadType (\ s a -> s{_cdUploadType = a})
+
+-- | OAuth bearer token.
+cdBearerToken :: Lens' CoursesDelete (Maybe Text)
+cdBearerToken
+  = lens _cdBearerToken
+      (\ s a -> s{_cdBearerToken = a})
+
+-- | Identifier of the course to delete. This identifier can be either the
+-- Classroom-assigned identifier or an alias.
+cdId :: Lens' CoursesDelete Text
+cdId = lens _cdId (\ s a -> s{_cdId = a})
+
+-- | JSONP
+cdCallback :: Lens' CoursesDelete (Maybe Text)
+cdCallback
+  = lens _cdCallback (\ s a -> s{_cdCallback = a})
+
+instance GoogleRequest CoursesDelete where
+        type Rs CoursesDelete = Empty
+        requestClient CoursesDelete{..}
+          = go _cdId _cdXgafv _cdUploadProtocol (Just _cdPp)
+              _cdAccessToken
+              _cdUploadType
+              _cdBearerToken
+              _cdCallback
+              (Just AltJSON)
+              classroomService
+          where go
+                  = buildClient (Proxy :: Proxy CoursesDeleteResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Classroom/Courses/Get.hs b/gen/Network/Google/Resource/Classroom/Courses/Get.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Classroom/Courses/Get.hs
@@ -0,0 +1,171 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.Classroom.Courses.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)
+--
+-- Returns a course. This method returns the following error codes: *
+-- \`PERMISSION_DENIED\` if the requesting user is not permitted to access
+-- the requested course or for access errors. * \`NOT_FOUND\` if no course
+-- exists with the requested ID.
+--
+-- /See:/ <https://developers.google.com/classroom/ Google Classroom API Reference> for @classroom.courses.get@.
+module Network.Google.Resource.Classroom.Courses.Get
+    (
+    -- * REST Resource
+      CoursesGetResource
+
+    -- * Creating a Request
+    , coursesGet
+    , CoursesGet
+
+    -- * Request Lenses
+    , cgXgafv
+    , cgUploadProtocol
+    , cgPp
+    , cgAccessToken
+    , cgUploadType
+    , cgBearerToken
+    , cgId
+    , cgCallback
+    ) where
+
+import           Network.Google.Classroom.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @classroom.courses.get@ method which the
+-- 'CoursesGet' request conforms to.
+type CoursesGetResource =
+     "v1" :>
+       "courses" :>
+         Capture "id" Text :>
+           QueryParam "$.xgafv" Text :>
+             QueryParam "upload_protocol" Text :>
+               QueryParam "pp" Bool :>
+                 QueryParam "access_token" Text :>
+                   QueryParam "uploadType" Text :>
+                     QueryParam "bearer_token" Text :>
+                       QueryParam "callback" Text :>
+                         QueryParam "alt" AltJSON :> Get '[JSON] Course
+
+-- | Returns a course. This method returns the following error codes: *
+-- \`PERMISSION_DENIED\` if the requesting user is not permitted to access
+-- the requested course or for access errors. * \`NOT_FOUND\` if no course
+-- exists with the requested ID.
+--
+-- /See:/ 'coursesGet' smart constructor.
+data CoursesGet = CoursesGet
+    { _cgXgafv          :: !(Maybe Text)
+    , _cgUploadProtocol :: !(Maybe Text)
+    , _cgPp             :: !Bool
+    , _cgAccessToken    :: !(Maybe Text)
+    , _cgUploadType     :: !(Maybe Text)
+    , _cgBearerToken    :: !(Maybe Text)
+    , _cgId             :: !Text
+    , _cgCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CoursesGet' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cgXgafv'
+--
+-- * 'cgUploadProtocol'
+--
+-- * 'cgPp'
+--
+-- * 'cgAccessToken'
+--
+-- * 'cgUploadType'
+--
+-- * 'cgBearerToken'
+--
+-- * 'cgId'
+--
+-- * 'cgCallback'
+coursesGet
+    :: Text -- ^ 'cgId'
+    -> CoursesGet
+coursesGet pCgId_ =
+    CoursesGet
+    { _cgXgafv = Nothing
+    , _cgUploadProtocol = Nothing
+    , _cgPp = True
+    , _cgAccessToken = Nothing
+    , _cgUploadType = Nothing
+    , _cgBearerToken = Nothing
+    , _cgId = pCgId_
+    , _cgCallback = Nothing
+    }
+
+-- | V1 error format.
+cgXgafv :: Lens' CoursesGet (Maybe Text)
+cgXgafv = lens _cgXgafv (\ s a -> s{_cgXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+cgUploadProtocol :: Lens' CoursesGet (Maybe Text)
+cgUploadProtocol
+  = lens _cgUploadProtocol
+      (\ s a -> s{_cgUploadProtocol = a})
+
+-- | Pretty-print response.
+cgPp :: Lens' CoursesGet Bool
+cgPp = lens _cgPp (\ s a -> s{_cgPp = a})
+
+-- | OAuth access token.
+cgAccessToken :: Lens' CoursesGet (Maybe Text)
+cgAccessToken
+  = lens _cgAccessToken
+      (\ s a -> s{_cgAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+cgUploadType :: Lens' CoursesGet (Maybe Text)
+cgUploadType
+  = lens _cgUploadType (\ s a -> s{_cgUploadType = a})
+
+-- | OAuth bearer token.
+cgBearerToken :: Lens' CoursesGet (Maybe Text)
+cgBearerToken
+  = lens _cgBearerToken
+      (\ s a -> s{_cgBearerToken = a})
+
+-- | Identifier of the course to return. This identifier can be either the
+-- Classroom-assigned identifier or an alias.
+cgId :: Lens' CoursesGet Text
+cgId = lens _cgId (\ s a -> s{_cgId = a})
+
+-- | JSONP
+cgCallback :: Lens' CoursesGet (Maybe Text)
+cgCallback
+  = lens _cgCallback (\ s a -> s{_cgCallback = a})
+
+instance GoogleRequest CoursesGet where
+        type Rs CoursesGet = Course
+        requestClient CoursesGet{..}
+          = go _cgId _cgXgafv _cgUploadProtocol (Just _cgPp)
+              _cgAccessToken
+              _cgUploadType
+              _cgBearerToken
+              _cgCallback
+              (Just AltJSON)
+              classroomService
+          where go
+                  = buildClient (Proxy :: Proxy CoursesGetResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Classroom/Courses/List.hs b/gen/Network/Google/Resource/Classroom/Courses/List.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Classroom/Courses/List.hs
@@ -0,0 +1,221 @@
+{-# 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.Classroom.Courses.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 a list of courses that the requesting user is permitted to view,
+-- restricted to those that match the request. This method returns the
+-- following error codes: * \`PERMISSION_DENIED\` for access errors. *
+-- \`INVALID_ARGUMENT\` if the query argument is malformed. * \`NOT_FOUND\`
+-- if any users specified in the query arguments do not exist.
+--
+-- /See:/ <https://developers.google.com/classroom/ Google Classroom API Reference> for @classroom.courses.list@.
+module Network.Google.Resource.Classroom.Courses.List
+    (
+    -- * REST Resource
+      CoursesListResource
+
+    -- * Creating a Request
+    , coursesList
+    , CoursesList
+
+    -- * Request Lenses
+    , clStudentId
+    , clXgafv
+    , clUploadProtocol
+    , clPp
+    , clAccessToken
+    , clUploadType
+    , clTeacherId
+    , clBearerToken
+    , clPageToken
+    , clPageSize
+    , clCallback
+    ) where
+
+import           Network.Google.Classroom.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @classroom.courses.list@ method which the
+-- 'CoursesList' request conforms to.
+type CoursesListResource =
+     "v1" :>
+       "courses" :>
+         QueryParam "studentId" Text :>
+           QueryParam "$.xgafv" Text :>
+             QueryParam "upload_protocol" Text :>
+               QueryParam "pp" Bool :>
+                 QueryParam "access_token" Text :>
+                   QueryParam "uploadType" Text :>
+                     QueryParam "teacherId" Text :>
+                       QueryParam "bearer_token" Text :>
+                         QueryParam "pageToken" Text :>
+                           QueryParam "pageSize" (Textual Int32) :>
+                             QueryParam "callback" Text :>
+                               QueryParam "alt" AltJSON :>
+                                 Get '[JSON] ListCoursesResponse
+
+-- | Returns a list of courses that the requesting user is permitted to view,
+-- restricted to those that match the request. This method returns the
+-- following error codes: * \`PERMISSION_DENIED\` for access errors. *
+-- \`INVALID_ARGUMENT\` if the query argument is malformed. * \`NOT_FOUND\`
+-- if any users specified in the query arguments do not exist.
+--
+-- /See:/ 'coursesList' smart constructor.
+data CoursesList = CoursesList
+    { _clStudentId      :: !(Maybe Text)
+    , _clXgafv          :: !(Maybe Text)
+    , _clUploadProtocol :: !(Maybe Text)
+    , _clPp             :: !Bool
+    , _clAccessToken    :: !(Maybe Text)
+    , _clUploadType     :: !(Maybe Text)
+    , _clTeacherId      :: !(Maybe Text)
+    , _clBearerToken    :: !(Maybe Text)
+    , _clPageToken      :: !(Maybe Text)
+    , _clPageSize       :: !(Maybe (Textual Int32))
+    , _clCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CoursesList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'clStudentId'
+--
+-- * 'clXgafv'
+--
+-- * 'clUploadProtocol'
+--
+-- * 'clPp'
+--
+-- * 'clAccessToken'
+--
+-- * 'clUploadType'
+--
+-- * 'clTeacherId'
+--
+-- * 'clBearerToken'
+--
+-- * 'clPageToken'
+--
+-- * 'clPageSize'
+--
+-- * 'clCallback'
+coursesList
+    :: CoursesList
+coursesList =
+    CoursesList
+    { _clStudentId = Nothing
+    , _clXgafv = Nothing
+    , _clUploadProtocol = Nothing
+    , _clPp = True
+    , _clAccessToken = Nothing
+    , _clUploadType = Nothing
+    , _clTeacherId = Nothing
+    , _clBearerToken = Nothing
+    , _clPageToken = Nothing
+    , _clPageSize = Nothing
+    , _clCallback = Nothing
+    }
+
+-- | Restricts returned courses to those having a student with the specified
+-- identifier. The identifier can be one of the following: * the numeric
+-- identifier for the user * the email address of the user * the string
+-- literal \`\"me\"\`, indicating the requesting user
+clStudentId :: Lens' CoursesList (Maybe Text)
+clStudentId
+  = lens _clStudentId (\ s a -> s{_clStudentId = a})
+
+-- | V1 error format.
+clXgafv :: Lens' CoursesList (Maybe Text)
+clXgafv = lens _clXgafv (\ s a -> s{_clXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+clUploadProtocol :: Lens' CoursesList (Maybe Text)
+clUploadProtocol
+  = lens _clUploadProtocol
+      (\ s a -> s{_clUploadProtocol = a})
+
+-- | Pretty-print response.
+clPp :: Lens' CoursesList Bool
+clPp = lens _clPp (\ s a -> s{_clPp = a})
+
+-- | OAuth access token.
+clAccessToken :: Lens' CoursesList (Maybe Text)
+clAccessToken
+  = lens _clAccessToken
+      (\ s a -> s{_clAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+clUploadType :: Lens' CoursesList (Maybe Text)
+clUploadType
+  = lens _clUploadType (\ s a -> s{_clUploadType = a})
+
+-- | Restricts returned courses to those having a teacher with the specified
+-- identifier. The identifier can be one of the following: * the numeric
+-- identifier for the user * the email address of the user * the string
+-- literal \`\"me\"\`, indicating the requesting user
+clTeacherId :: Lens' CoursesList (Maybe Text)
+clTeacherId
+  = lens _clTeacherId (\ s a -> s{_clTeacherId = a})
+
+-- | OAuth bearer token.
+clBearerToken :: Lens' CoursesList (Maybe Text)
+clBearerToken
+  = lens _clBearerToken
+      (\ s a -> s{_clBearerToken = a})
+
+-- | nextPageToken value returned from a previous list call, indicating that
+-- the subsequent page of results should be returned. The list request must
+-- be otherwise identical to the one that resulted in this token.
+clPageToken :: Lens' CoursesList (Maybe Text)
+clPageToken
+  = lens _clPageToken (\ s a -> s{_clPageToken = a})
+
+-- | Maximum number of items to return. Zero or unspecified indicates that
+-- the server may assign a maximum. The server may return fewer than the
+-- specified number of results.
+clPageSize :: Lens' CoursesList (Maybe Int32)
+clPageSize
+  = lens _clPageSize (\ s a -> s{_clPageSize = a}) .
+      mapping _Coerce
+
+-- | JSONP
+clCallback :: Lens' CoursesList (Maybe Text)
+clCallback
+  = lens _clCallback (\ s a -> s{_clCallback = a})
+
+instance GoogleRequest CoursesList where
+        type Rs CoursesList = ListCoursesResponse
+        requestClient CoursesList{..}
+          = go _clStudentId _clXgafv _clUploadProtocol
+              (Just _clPp)
+              _clAccessToken
+              _clUploadType
+              _clTeacherId
+              _clBearerToken
+              _clPageToken
+              _clPageSize
+              _clCallback
+              (Just AltJSON)
+              classroomService
+          where go
+                  = buildClient (Proxy :: Proxy CoursesListResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Classroom/Courses/Patch.hs b/gen/Network/Google/Resource/Classroom/Courses/Patch.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Classroom/Courses/Patch.hs
@@ -0,0 +1,207 @@
+{-# 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.Classroom.Courses.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 one or more fields in a course. This method returns the
+-- following error codes: * \`PERMISSION_DENIED\` if the requesting user is
+-- not permitted to modify the requested course or for access errors. *
+-- \`NOT_FOUND\` if no course exists with the requested ID. *
+-- \`INVALID_ARGUMENT\` if invalid fields are specified in the update mask
+-- or if no update mask is supplied. * \`FAILED_PRECONDITION\` for the
+-- following request errors: * CourseNotModifiable
+--
+-- /See:/ <https://developers.google.com/classroom/ Google Classroom API Reference> for @classroom.courses.patch@.
+module Network.Google.Resource.Classroom.Courses.Patch
+    (
+    -- * REST Resource
+      CoursesPatchResource
+
+    -- * Creating a Request
+    , coursesPatch
+    , CoursesPatch
+
+    -- * Request Lenses
+    , cpXgafv
+    , cpUploadProtocol
+    , cpUpdateMask
+    , cpPp
+    , cpAccessToken
+    , cpUploadType
+    , cpPayload
+    , cpBearerToken
+    , cpId
+    , cpCallback
+    ) where
+
+import           Network.Google.Classroom.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @classroom.courses.patch@ method which the
+-- 'CoursesPatch' request conforms to.
+type CoursesPatchResource =
+     "v1" :>
+       "courses" :>
+         Capture "id" Text :>
+           QueryParam "$.xgafv" Text :>
+             QueryParam "upload_protocol" Text :>
+               QueryParam "updateMask" Text :>
+                 QueryParam "pp" Bool :>
+                   QueryParam "access_token" Text :>
+                     QueryParam "uploadType" Text :>
+                       QueryParam "bearer_token" Text :>
+                         QueryParam "callback" Text :>
+                           QueryParam "alt" AltJSON :>
+                             ReqBody '[JSON] Course :> Patch '[JSON] Course
+
+-- | Updates one or more fields in a course. This method returns the
+-- following error codes: * \`PERMISSION_DENIED\` if the requesting user is
+-- not permitted to modify the requested course or for access errors. *
+-- \`NOT_FOUND\` if no course exists with the requested ID. *
+-- \`INVALID_ARGUMENT\` if invalid fields are specified in the update mask
+-- or if no update mask is supplied. * \`FAILED_PRECONDITION\` for the
+-- following request errors: * CourseNotModifiable
+--
+-- /See:/ 'coursesPatch' smart constructor.
+data CoursesPatch = CoursesPatch
+    { _cpXgafv          :: !(Maybe Text)
+    , _cpUploadProtocol :: !(Maybe Text)
+    , _cpUpdateMask     :: !(Maybe Text)
+    , _cpPp             :: !Bool
+    , _cpAccessToken    :: !(Maybe Text)
+    , _cpUploadType     :: !(Maybe Text)
+    , _cpPayload        :: !Course
+    , _cpBearerToken    :: !(Maybe Text)
+    , _cpId             :: !Text
+    , _cpCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CoursesPatch' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cpXgafv'
+--
+-- * 'cpUploadProtocol'
+--
+-- * 'cpUpdateMask'
+--
+-- * 'cpPp'
+--
+-- * 'cpAccessToken'
+--
+-- * 'cpUploadType'
+--
+-- * 'cpPayload'
+--
+-- * 'cpBearerToken'
+--
+-- * 'cpId'
+--
+-- * 'cpCallback'
+coursesPatch
+    :: Course -- ^ 'cpPayload'
+    -> Text -- ^ 'cpId'
+    -> CoursesPatch
+coursesPatch pCpPayload_ pCpId_ =
+    CoursesPatch
+    { _cpXgafv = Nothing
+    , _cpUploadProtocol = Nothing
+    , _cpUpdateMask = Nothing
+    , _cpPp = True
+    , _cpAccessToken = Nothing
+    , _cpUploadType = Nothing
+    , _cpPayload = pCpPayload_
+    , _cpBearerToken = Nothing
+    , _cpId = pCpId_
+    , _cpCallback = Nothing
+    }
+
+-- | V1 error format.
+cpXgafv :: Lens' CoursesPatch (Maybe Text)
+cpXgafv = lens _cpXgafv (\ s a -> s{_cpXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+cpUploadProtocol :: Lens' CoursesPatch (Maybe Text)
+cpUploadProtocol
+  = lens _cpUploadProtocol
+      (\ s a -> s{_cpUploadProtocol = a})
+
+-- | Mask that identifies which fields on the course to update. This field is
+-- required to do an update. The update will fail if invalid fields are
+-- specified. The following fields are valid: * \`name\` * \`section\` *
+-- \`descriptionHeading\` * \`description\` * \`room\` * \`courseState\`
+-- When set in a query parameter, this field should be specified as
+-- \`updateMask=,,...\`
+cpUpdateMask :: Lens' CoursesPatch (Maybe Text)
+cpUpdateMask
+  = lens _cpUpdateMask (\ s a -> s{_cpUpdateMask = a})
+
+-- | Pretty-print response.
+cpPp :: Lens' CoursesPatch Bool
+cpPp = lens _cpPp (\ s a -> s{_cpPp = a})
+
+-- | OAuth access token.
+cpAccessToken :: Lens' CoursesPatch (Maybe Text)
+cpAccessToken
+  = lens _cpAccessToken
+      (\ s a -> s{_cpAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+cpUploadType :: Lens' CoursesPatch (Maybe Text)
+cpUploadType
+  = lens _cpUploadType (\ s a -> s{_cpUploadType = a})
+
+-- | Multipart request metadata.
+cpPayload :: Lens' CoursesPatch Course
+cpPayload
+  = lens _cpPayload (\ s a -> s{_cpPayload = a})
+
+-- | OAuth bearer token.
+cpBearerToken :: Lens' CoursesPatch (Maybe Text)
+cpBearerToken
+  = lens _cpBearerToken
+      (\ s a -> s{_cpBearerToken = a})
+
+-- | Identifier of the course to update. This identifier can be either the
+-- Classroom-assigned identifier or an alias.
+cpId :: Lens' CoursesPatch Text
+cpId = lens _cpId (\ s a -> s{_cpId = a})
+
+-- | JSONP
+cpCallback :: Lens' CoursesPatch (Maybe Text)
+cpCallback
+  = lens _cpCallback (\ s a -> s{_cpCallback = a})
+
+instance GoogleRequest CoursesPatch where
+        type Rs CoursesPatch = Course
+        requestClient CoursesPatch{..}
+          = go _cpId _cpXgafv _cpUploadProtocol _cpUpdateMask
+              (Just _cpPp)
+              _cpAccessToken
+              _cpUploadType
+              _cpBearerToken
+              _cpCallback
+              (Just AltJSON)
+              _cpPayload
+              classroomService
+          where go
+                  = buildClient (Proxy :: Proxy CoursesPatchResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Classroom/Courses/Students/Create.hs b/gen/Network/Google/Resource/Classroom/Courses/Students/Create.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Classroom/Courses/Students/Create.hs
@@ -0,0 +1,215 @@
+{-# 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.Classroom.Courses.Students.Create
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Adds a user as a student of a course. This method returns the following
+-- error codes: * \`PERMISSION_DENIED\` if the requesting user is not
+-- permitted to create students in this course or for access errors. *
+-- \`NOT_FOUND\` if the requested course ID does not exist. *
+-- \`FAILED_PRECONDITION\` if the requested user\'s account is disabled,
+-- for the following request errors: * CourseMemberLimitReached *
+-- CourseNotModifiable * UserGroupsMembershipLimitReached *
+-- \`ALREADY_EXISTS\` if the user is already a student or teacher in the
+-- course.
+--
+-- /See:/ <https://developers.google.com/classroom/ Google Classroom API Reference> for @classroom.courses.students.create@.
+module Network.Google.Resource.Classroom.Courses.Students.Create
+    (
+    -- * REST Resource
+      CoursesStudentsCreateResource
+
+    -- * Creating a Request
+    , coursesStudentsCreate
+    , CoursesStudentsCreate
+
+    -- * Request Lenses
+    , cscXgafv
+    , cscUploadProtocol
+    , cscPp
+    , cscCourseId
+    , cscAccessToken
+    , cscUploadType
+    , cscPayload
+    , cscEnrollmentCode
+    , cscBearerToken
+    , cscCallback
+    ) where
+
+import           Network.Google.Classroom.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @classroom.courses.students.create@ method which the
+-- 'CoursesStudentsCreate' request conforms to.
+type CoursesStudentsCreateResource =
+     "v1" :>
+       "courses" :>
+         Capture "courseId" Text :>
+           "students" :>
+             QueryParam "$.xgafv" Text :>
+               QueryParam "upload_protocol" Text :>
+                 QueryParam "pp" Bool :>
+                   QueryParam "access_token" Text :>
+                     QueryParam "uploadType" Text :>
+                       QueryParam "enrollmentCode" Text :>
+                         QueryParam "bearer_token" Text :>
+                           QueryParam "callback" Text :>
+                             QueryParam "alt" AltJSON :>
+                               ReqBody '[JSON] Student :> Post '[JSON] Student
+
+-- | Adds a user as a student of a course. This method returns the following
+-- error codes: * \`PERMISSION_DENIED\` if the requesting user is not
+-- permitted to create students in this course or for access errors. *
+-- \`NOT_FOUND\` if the requested course ID does not exist. *
+-- \`FAILED_PRECONDITION\` if the requested user\'s account is disabled,
+-- for the following request errors: * CourseMemberLimitReached *
+-- CourseNotModifiable * UserGroupsMembershipLimitReached *
+-- \`ALREADY_EXISTS\` if the user is already a student or teacher in the
+-- course.
+--
+-- /See:/ 'coursesStudentsCreate' smart constructor.
+data CoursesStudentsCreate = CoursesStudentsCreate
+    { _cscXgafv          :: !(Maybe Text)
+    , _cscUploadProtocol :: !(Maybe Text)
+    , _cscPp             :: !Bool
+    , _cscCourseId       :: !Text
+    , _cscAccessToken    :: !(Maybe Text)
+    , _cscUploadType     :: !(Maybe Text)
+    , _cscPayload        :: !Student
+    , _cscEnrollmentCode :: !(Maybe Text)
+    , _cscBearerToken    :: !(Maybe Text)
+    , _cscCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CoursesStudentsCreate' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cscXgafv'
+--
+-- * 'cscUploadProtocol'
+--
+-- * 'cscPp'
+--
+-- * 'cscCourseId'
+--
+-- * 'cscAccessToken'
+--
+-- * 'cscUploadType'
+--
+-- * 'cscPayload'
+--
+-- * 'cscEnrollmentCode'
+--
+-- * 'cscBearerToken'
+--
+-- * 'cscCallback'
+coursesStudentsCreate
+    :: Text -- ^ 'cscCourseId'
+    -> Student -- ^ 'cscPayload'
+    -> CoursesStudentsCreate
+coursesStudentsCreate pCscCourseId_ pCscPayload_ =
+    CoursesStudentsCreate
+    { _cscXgafv = Nothing
+    , _cscUploadProtocol = Nothing
+    , _cscPp = True
+    , _cscCourseId = pCscCourseId_
+    , _cscAccessToken = Nothing
+    , _cscUploadType = Nothing
+    , _cscPayload = pCscPayload_
+    , _cscEnrollmentCode = Nothing
+    , _cscBearerToken = Nothing
+    , _cscCallback = Nothing
+    }
+
+-- | V1 error format.
+cscXgafv :: Lens' CoursesStudentsCreate (Maybe Text)
+cscXgafv = lens _cscXgafv (\ s a -> s{_cscXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+cscUploadProtocol :: Lens' CoursesStudentsCreate (Maybe Text)
+cscUploadProtocol
+  = lens _cscUploadProtocol
+      (\ s a -> s{_cscUploadProtocol = a})
+
+-- | Pretty-print response.
+cscPp :: Lens' CoursesStudentsCreate Bool
+cscPp = lens _cscPp (\ s a -> s{_cscPp = a})
+
+-- | Identifier of the course to create the student in. This identifier can
+-- be either the Classroom-assigned identifier or an alias.
+cscCourseId :: Lens' CoursesStudentsCreate Text
+cscCourseId
+  = lens _cscCourseId (\ s a -> s{_cscCourseId = a})
+
+-- | OAuth access token.
+cscAccessToken :: Lens' CoursesStudentsCreate (Maybe Text)
+cscAccessToken
+  = lens _cscAccessToken
+      (\ s a -> s{_cscAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+cscUploadType :: Lens' CoursesStudentsCreate (Maybe Text)
+cscUploadType
+  = lens _cscUploadType
+      (\ s a -> s{_cscUploadType = a})
+
+-- | Multipart request metadata.
+cscPayload :: Lens' CoursesStudentsCreate Student
+cscPayload
+  = lens _cscPayload (\ s a -> s{_cscPayload = a})
+
+-- | Enrollment code of the course to create the student in. This code is
+-- required if userId corresponds to the requesting user; it may be omitted
+-- if the requesting user has administrative permissions to create students
+-- for any user.
+cscEnrollmentCode :: Lens' CoursesStudentsCreate (Maybe Text)
+cscEnrollmentCode
+  = lens _cscEnrollmentCode
+      (\ s a -> s{_cscEnrollmentCode = a})
+
+-- | OAuth bearer token.
+cscBearerToken :: Lens' CoursesStudentsCreate (Maybe Text)
+cscBearerToken
+  = lens _cscBearerToken
+      (\ s a -> s{_cscBearerToken = a})
+
+-- | JSONP
+cscCallback :: Lens' CoursesStudentsCreate (Maybe Text)
+cscCallback
+  = lens _cscCallback (\ s a -> s{_cscCallback = a})
+
+instance GoogleRequest CoursesStudentsCreate where
+        type Rs CoursesStudentsCreate = Student
+        requestClient CoursesStudentsCreate{..}
+          = go _cscCourseId _cscXgafv _cscUploadProtocol
+              (Just _cscPp)
+              _cscAccessToken
+              _cscUploadType
+              _cscEnrollmentCode
+              _cscBearerToken
+              _cscCallback
+              (Just AltJSON)
+              _cscPayload
+              classroomService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy CoursesStudentsCreateResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Classroom/Courses/Students/Delete.hs b/gen/Network/Google/Resource/Classroom/Courses/Students/Delete.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Classroom/Courses/Students/Delete.hs
@@ -0,0 +1,193 @@
+{-# 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.Classroom.Courses.Students.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 student of a course. This method returns the following error
+-- codes: * \`PERMISSION_DENIED\` if the requesting user is not permitted
+-- to delete students of this course or for access errors. * \`NOT_FOUND\`
+-- if no student of this course has the requested ID or if the course does
+-- not exist.
+--
+-- /See:/ <https://developers.google.com/classroom/ Google Classroom API Reference> for @classroom.courses.students.delete@.
+module Network.Google.Resource.Classroom.Courses.Students.Delete
+    (
+    -- * REST Resource
+      CoursesStudentsDeleteResource
+
+    -- * Creating a Request
+    , coursesStudentsDelete
+    , CoursesStudentsDelete
+
+    -- * Request Lenses
+    , csdXgafv
+    , csdUploadProtocol
+    , csdPp
+    , csdCourseId
+    , csdAccessToken
+    , csdUploadType
+    , csdUserId
+    , csdBearerToken
+    , csdCallback
+    ) where
+
+import           Network.Google.Classroom.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @classroom.courses.students.delete@ method which the
+-- 'CoursesStudentsDelete' request conforms to.
+type CoursesStudentsDeleteResource =
+     "v1" :>
+       "courses" :>
+         Capture "courseId" Text :>
+           "students" :>
+             Capture "userId" Text :>
+               QueryParam "$.xgafv" Text :>
+                 QueryParam "upload_protocol" Text :>
+                   QueryParam "pp" Bool :>
+                     QueryParam "access_token" Text :>
+                       QueryParam "uploadType" Text :>
+                         QueryParam "bearer_token" Text :>
+                           QueryParam "callback" Text :>
+                             QueryParam "alt" AltJSON :> Delete '[JSON] Empty
+
+-- | Deletes a student of a course. This method returns the following error
+-- codes: * \`PERMISSION_DENIED\` if the requesting user is not permitted
+-- to delete students of this course or for access errors. * \`NOT_FOUND\`
+-- if no student of this course has the requested ID or if the course does
+-- not exist.
+--
+-- /See:/ 'coursesStudentsDelete' smart constructor.
+data CoursesStudentsDelete = CoursesStudentsDelete
+    { _csdXgafv          :: !(Maybe Text)
+    , _csdUploadProtocol :: !(Maybe Text)
+    , _csdPp             :: !Bool
+    , _csdCourseId       :: !Text
+    , _csdAccessToken    :: !(Maybe Text)
+    , _csdUploadType     :: !(Maybe Text)
+    , _csdUserId         :: !Text
+    , _csdBearerToken    :: !(Maybe Text)
+    , _csdCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CoursesStudentsDelete' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'csdXgafv'
+--
+-- * 'csdUploadProtocol'
+--
+-- * 'csdPp'
+--
+-- * 'csdCourseId'
+--
+-- * 'csdAccessToken'
+--
+-- * 'csdUploadType'
+--
+-- * 'csdUserId'
+--
+-- * 'csdBearerToken'
+--
+-- * 'csdCallback'
+coursesStudentsDelete
+    :: Text -- ^ 'csdCourseId'
+    -> Text -- ^ 'csdUserId'
+    -> CoursesStudentsDelete
+coursesStudentsDelete pCsdCourseId_ pCsdUserId_ =
+    CoursesStudentsDelete
+    { _csdXgafv = Nothing
+    , _csdUploadProtocol = Nothing
+    , _csdPp = True
+    , _csdCourseId = pCsdCourseId_
+    , _csdAccessToken = Nothing
+    , _csdUploadType = Nothing
+    , _csdUserId = pCsdUserId_
+    , _csdBearerToken = Nothing
+    , _csdCallback = Nothing
+    }
+
+-- | V1 error format.
+csdXgafv :: Lens' CoursesStudentsDelete (Maybe Text)
+csdXgafv = lens _csdXgafv (\ s a -> s{_csdXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+csdUploadProtocol :: Lens' CoursesStudentsDelete (Maybe Text)
+csdUploadProtocol
+  = lens _csdUploadProtocol
+      (\ s a -> s{_csdUploadProtocol = a})
+
+-- | Pretty-print response.
+csdPp :: Lens' CoursesStudentsDelete Bool
+csdPp = lens _csdPp (\ s a -> s{_csdPp = a})
+
+-- | Identifier of the course. This identifier can be either the
+-- Classroom-assigned identifier or an alias.
+csdCourseId :: Lens' CoursesStudentsDelete Text
+csdCourseId
+  = lens _csdCourseId (\ s a -> s{_csdCourseId = a})
+
+-- | OAuth access token.
+csdAccessToken :: Lens' CoursesStudentsDelete (Maybe Text)
+csdAccessToken
+  = lens _csdAccessToken
+      (\ s a -> s{_csdAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+csdUploadType :: Lens' CoursesStudentsDelete (Maybe Text)
+csdUploadType
+  = lens _csdUploadType
+      (\ s a -> s{_csdUploadType = a})
+
+-- | Identifier of the student to delete. The identifier can be one of the
+-- following: * the numeric identifier for the user * the email address of
+-- the user * the string literal \`\"me\"\`, indicating the requesting user
+csdUserId :: Lens' CoursesStudentsDelete Text
+csdUserId
+  = lens _csdUserId (\ s a -> s{_csdUserId = a})
+
+-- | OAuth bearer token.
+csdBearerToken :: Lens' CoursesStudentsDelete (Maybe Text)
+csdBearerToken
+  = lens _csdBearerToken
+      (\ s a -> s{_csdBearerToken = a})
+
+-- | JSONP
+csdCallback :: Lens' CoursesStudentsDelete (Maybe Text)
+csdCallback
+  = lens _csdCallback (\ s a -> s{_csdCallback = a})
+
+instance GoogleRequest CoursesStudentsDelete where
+        type Rs CoursesStudentsDelete = Empty
+        requestClient CoursesStudentsDelete{..}
+          = go _csdCourseId _csdUserId _csdXgafv
+              _csdUploadProtocol
+              (Just _csdPp)
+              _csdAccessToken
+              _csdUploadType
+              _csdBearerToken
+              _csdCallback
+              (Just AltJSON)
+              classroomService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy CoursesStudentsDeleteResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Classroom/Courses/Students/Get.hs b/gen/Network/Google/Resource/Classroom/Courses/Students/Get.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Classroom/Courses/Students/Get.hs
@@ -0,0 +1,193 @@
+{-# 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.Classroom.Courses.Students.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)
+--
+-- Returns a student of a course. This method returns the following error
+-- codes: * \`PERMISSION_DENIED\` if the requesting user is not permitted
+-- to view students of this course or for access errors. * \`NOT_FOUND\` if
+-- no student of this course has the requested ID or if the course does not
+-- exist.
+--
+-- /See:/ <https://developers.google.com/classroom/ Google Classroom API Reference> for @classroom.courses.students.get@.
+module Network.Google.Resource.Classroom.Courses.Students.Get
+    (
+    -- * REST Resource
+      CoursesStudentsGetResource
+
+    -- * Creating a Request
+    , coursesStudentsGet
+    , CoursesStudentsGet
+
+    -- * Request Lenses
+    , csgXgafv
+    , csgUploadProtocol
+    , csgPp
+    , csgCourseId
+    , csgAccessToken
+    , csgUploadType
+    , csgUserId
+    , csgBearerToken
+    , csgCallback
+    ) where
+
+import           Network.Google.Classroom.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @classroom.courses.students.get@ method which the
+-- 'CoursesStudentsGet' request conforms to.
+type CoursesStudentsGetResource =
+     "v1" :>
+       "courses" :>
+         Capture "courseId" Text :>
+           "students" :>
+             Capture "userId" Text :>
+               QueryParam "$.xgafv" Text :>
+                 QueryParam "upload_protocol" Text :>
+                   QueryParam "pp" Bool :>
+                     QueryParam "access_token" Text :>
+                       QueryParam "uploadType" Text :>
+                         QueryParam "bearer_token" Text :>
+                           QueryParam "callback" Text :>
+                             QueryParam "alt" AltJSON :> Get '[JSON] Student
+
+-- | Returns a student of a course. This method returns the following error
+-- codes: * \`PERMISSION_DENIED\` if the requesting user is not permitted
+-- to view students of this course or for access errors. * \`NOT_FOUND\` if
+-- no student of this course has the requested ID or if the course does not
+-- exist.
+--
+-- /See:/ 'coursesStudentsGet' smart constructor.
+data CoursesStudentsGet = CoursesStudentsGet
+    { _csgXgafv          :: !(Maybe Text)
+    , _csgUploadProtocol :: !(Maybe Text)
+    , _csgPp             :: !Bool
+    , _csgCourseId       :: !Text
+    , _csgAccessToken    :: !(Maybe Text)
+    , _csgUploadType     :: !(Maybe Text)
+    , _csgUserId         :: !Text
+    , _csgBearerToken    :: !(Maybe Text)
+    , _csgCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CoursesStudentsGet' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'csgXgafv'
+--
+-- * 'csgUploadProtocol'
+--
+-- * 'csgPp'
+--
+-- * 'csgCourseId'
+--
+-- * 'csgAccessToken'
+--
+-- * 'csgUploadType'
+--
+-- * 'csgUserId'
+--
+-- * 'csgBearerToken'
+--
+-- * 'csgCallback'
+coursesStudentsGet
+    :: Text -- ^ 'csgCourseId'
+    -> Text -- ^ 'csgUserId'
+    -> CoursesStudentsGet
+coursesStudentsGet pCsgCourseId_ pCsgUserId_ =
+    CoursesStudentsGet
+    { _csgXgafv = Nothing
+    , _csgUploadProtocol = Nothing
+    , _csgPp = True
+    , _csgCourseId = pCsgCourseId_
+    , _csgAccessToken = Nothing
+    , _csgUploadType = Nothing
+    , _csgUserId = pCsgUserId_
+    , _csgBearerToken = Nothing
+    , _csgCallback = Nothing
+    }
+
+-- | V1 error format.
+csgXgafv :: Lens' CoursesStudentsGet (Maybe Text)
+csgXgafv = lens _csgXgafv (\ s a -> s{_csgXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+csgUploadProtocol :: Lens' CoursesStudentsGet (Maybe Text)
+csgUploadProtocol
+  = lens _csgUploadProtocol
+      (\ s a -> s{_csgUploadProtocol = a})
+
+-- | Pretty-print response.
+csgPp :: Lens' CoursesStudentsGet Bool
+csgPp = lens _csgPp (\ s a -> s{_csgPp = a})
+
+-- | Identifier of the course. This identifier can be either the
+-- Classroom-assigned identifier or an alias.
+csgCourseId :: Lens' CoursesStudentsGet Text
+csgCourseId
+  = lens _csgCourseId (\ s a -> s{_csgCourseId = a})
+
+-- | OAuth access token.
+csgAccessToken :: Lens' CoursesStudentsGet (Maybe Text)
+csgAccessToken
+  = lens _csgAccessToken
+      (\ s a -> s{_csgAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+csgUploadType :: Lens' CoursesStudentsGet (Maybe Text)
+csgUploadType
+  = lens _csgUploadType
+      (\ s a -> s{_csgUploadType = a})
+
+-- | Identifier of the student to return. The identifier can be one of the
+-- following: * the numeric identifier for the user * the email address of
+-- the user * the string literal \`\"me\"\`, indicating the requesting user
+csgUserId :: Lens' CoursesStudentsGet Text
+csgUserId
+  = lens _csgUserId (\ s a -> s{_csgUserId = a})
+
+-- | OAuth bearer token.
+csgBearerToken :: Lens' CoursesStudentsGet (Maybe Text)
+csgBearerToken
+  = lens _csgBearerToken
+      (\ s a -> s{_csgBearerToken = a})
+
+-- | JSONP
+csgCallback :: Lens' CoursesStudentsGet (Maybe Text)
+csgCallback
+  = lens _csgCallback (\ s a -> s{_csgCallback = a})
+
+instance GoogleRequest CoursesStudentsGet where
+        type Rs CoursesStudentsGet = Student
+        requestClient CoursesStudentsGet{..}
+          = go _csgCourseId _csgUserId _csgXgafv
+              _csgUploadProtocol
+              (Just _csgPp)
+              _csgAccessToken
+              _csgUploadType
+              _csgBearerToken
+              _csgCallback
+              (Just AltJSON)
+              classroomService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy CoursesStudentsGetResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Classroom/Courses/Students/List.hs b/gen/Network/Google/Resource/Classroom/Courses/Students/List.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Classroom/Courses/Students/List.hs
@@ -0,0 +1,205 @@
+{-# 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.Classroom.Courses.Students.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 a list of students of this course that the requester is
+-- permitted to view. This method returns the following error codes: *
+-- \`NOT_FOUND\` if the course does not exist. * \`PERMISSION_DENIED\` for
+-- access errors.
+--
+-- /See:/ <https://developers.google.com/classroom/ Google Classroom API Reference> for @classroom.courses.students.list@.
+module Network.Google.Resource.Classroom.Courses.Students.List
+    (
+    -- * REST Resource
+      CoursesStudentsListResource
+
+    -- * Creating a Request
+    , coursesStudentsList
+    , CoursesStudentsList
+
+    -- * Request Lenses
+    , cslXgafv
+    , cslUploadProtocol
+    , cslPp
+    , cslCourseId
+    , cslAccessToken
+    , cslUploadType
+    , cslBearerToken
+    , cslPageToken
+    , cslPageSize
+    , cslCallback
+    ) where
+
+import           Network.Google.Classroom.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @classroom.courses.students.list@ method which the
+-- 'CoursesStudentsList' request conforms to.
+type CoursesStudentsListResource =
+     "v1" :>
+       "courses" :>
+         Capture "courseId" Text :>
+           "students" :>
+             QueryParam "$.xgafv" Text :>
+               QueryParam "upload_protocol" Text :>
+                 QueryParam "pp" Bool :>
+                   QueryParam "access_token" Text :>
+                     QueryParam "uploadType" Text :>
+                       QueryParam "bearer_token" Text :>
+                         QueryParam "pageToken" Text :>
+                           QueryParam "pageSize" (Textual Int32) :>
+                             QueryParam "callback" Text :>
+                               QueryParam "alt" AltJSON :>
+                                 Get '[JSON] ListStudentsResponse
+
+-- | Returns a list of students of this course that the requester is
+-- permitted to view. This method returns the following error codes: *
+-- \`NOT_FOUND\` if the course does not exist. * \`PERMISSION_DENIED\` for
+-- access errors.
+--
+-- /See:/ 'coursesStudentsList' smart constructor.
+data CoursesStudentsList = CoursesStudentsList
+    { _cslXgafv          :: !(Maybe Text)
+    , _cslUploadProtocol :: !(Maybe Text)
+    , _cslPp             :: !Bool
+    , _cslCourseId       :: !Text
+    , _cslAccessToken    :: !(Maybe Text)
+    , _cslUploadType     :: !(Maybe Text)
+    , _cslBearerToken    :: !(Maybe Text)
+    , _cslPageToken      :: !(Maybe Text)
+    , _cslPageSize       :: !(Maybe (Textual Int32))
+    , _cslCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CoursesStudentsList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cslXgafv'
+--
+-- * 'cslUploadProtocol'
+--
+-- * 'cslPp'
+--
+-- * 'cslCourseId'
+--
+-- * 'cslAccessToken'
+--
+-- * 'cslUploadType'
+--
+-- * 'cslBearerToken'
+--
+-- * 'cslPageToken'
+--
+-- * 'cslPageSize'
+--
+-- * 'cslCallback'
+coursesStudentsList
+    :: Text -- ^ 'cslCourseId'
+    -> CoursesStudentsList
+coursesStudentsList pCslCourseId_ =
+    CoursesStudentsList
+    { _cslXgafv = Nothing
+    , _cslUploadProtocol = Nothing
+    , _cslPp = True
+    , _cslCourseId = pCslCourseId_
+    , _cslAccessToken = Nothing
+    , _cslUploadType = Nothing
+    , _cslBearerToken = Nothing
+    , _cslPageToken = Nothing
+    , _cslPageSize = Nothing
+    , _cslCallback = Nothing
+    }
+
+-- | V1 error format.
+cslXgafv :: Lens' CoursesStudentsList (Maybe Text)
+cslXgafv = lens _cslXgafv (\ s a -> s{_cslXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+cslUploadProtocol :: Lens' CoursesStudentsList (Maybe Text)
+cslUploadProtocol
+  = lens _cslUploadProtocol
+      (\ s a -> s{_cslUploadProtocol = a})
+
+-- | Pretty-print response.
+cslPp :: Lens' CoursesStudentsList Bool
+cslPp = lens _cslPp (\ s a -> s{_cslPp = a})
+
+-- | Identifier of the course. This identifier can be either the
+-- Classroom-assigned identifier or an alias.
+cslCourseId :: Lens' CoursesStudentsList Text
+cslCourseId
+  = lens _cslCourseId (\ s a -> s{_cslCourseId = a})
+
+-- | OAuth access token.
+cslAccessToken :: Lens' CoursesStudentsList (Maybe Text)
+cslAccessToken
+  = lens _cslAccessToken
+      (\ s a -> s{_cslAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+cslUploadType :: Lens' CoursesStudentsList (Maybe Text)
+cslUploadType
+  = lens _cslUploadType
+      (\ s a -> s{_cslUploadType = a})
+
+-- | OAuth bearer token.
+cslBearerToken :: Lens' CoursesStudentsList (Maybe Text)
+cslBearerToken
+  = lens _cslBearerToken
+      (\ s a -> s{_cslBearerToken = a})
+
+-- | nextPageToken value returned from a previous list call, indicating that
+-- the subsequent page of results should be returned. The list request must
+-- be otherwise identical to the one that resulted in this token.
+cslPageToken :: Lens' CoursesStudentsList (Maybe Text)
+cslPageToken
+  = lens _cslPageToken (\ s a -> s{_cslPageToken = a})
+
+-- | Maximum number of items to return. Zero means no maximum. The server may
+-- return fewer than the specified number of results.
+cslPageSize :: Lens' CoursesStudentsList (Maybe Int32)
+cslPageSize
+  = lens _cslPageSize (\ s a -> s{_cslPageSize = a}) .
+      mapping _Coerce
+
+-- | JSONP
+cslCallback :: Lens' CoursesStudentsList (Maybe Text)
+cslCallback
+  = lens _cslCallback (\ s a -> s{_cslCallback = a})
+
+instance GoogleRequest CoursesStudentsList where
+        type Rs CoursesStudentsList = ListStudentsResponse
+        requestClient CoursesStudentsList{..}
+          = go _cslCourseId _cslXgafv _cslUploadProtocol
+              (Just _cslPp)
+              _cslAccessToken
+              _cslUploadType
+              _cslBearerToken
+              _cslPageToken
+              _cslPageSize
+              _cslCallback
+              (Just AltJSON)
+              classroomService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy CoursesStudentsListResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Classroom/Courses/Teachers/Create.hs b/gen/Network/Google/Resource/Classroom/Courses/Teachers/Create.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Classroom/Courses/Teachers/Create.hs
@@ -0,0 +1,199 @@
+{-# 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.Classroom.Courses.Teachers.Create
+-- 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 teacher of a course. This method returns the following error
+-- codes: * \`PERMISSION_DENIED\` if the requesting user is not permitted
+-- to create teachers in this course or for access errors. * \`NOT_FOUND\`
+-- if the requested course ID does not exist. * \`FAILED_PRECONDITION\` if
+-- the requested user\'s account is disabled, for the following request
+-- errors: * CourseMemberLimitReached * CourseNotModifiable *
+-- CourseTeacherLimitReached * UserGroupsMembershipLimitReached *
+-- \`ALREADY_EXISTS\` if the user is already a teacher or student in the
+-- course.
+--
+-- /See:/ <https://developers.google.com/classroom/ Google Classroom API Reference> for @classroom.courses.teachers.create@.
+module Network.Google.Resource.Classroom.Courses.Teachers.Create
+    (
+    -- * REST Resource
+      CoursesTeachersCreateResource
+
+    -- * Creating a Request
+    , coursesTeachersCreate
+    , CoursesTeachersCreate
+
+    -- * Request Lenses
+    , ctcXgafv
+    , ctcUploadProtocol
+    , ctcPp
+    , ctcCourseId
+    , ctcAccessToken
+    , ctcUploadType
+    , ctcPayload
+    , ctcBearerToken
+    , ctcCallback
+    ) where
+
+import           Network.Google.Classroom.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @classroom.courses.teachers.create@ method which the
+-- 'CoursesTeachersCreate' request conforms to.
+type CoursesTeachersCreateResource =
+     "v1" :>
+       "courses" :>
+         Capture "courseId" Text :>
+           "teachers" :>
+             QueryParam "$.xgafv" Text :>
+               QueryParam "upload_protocol" Text :>
+                 QueryParam "pp" Bool :>
+                   QueryParam "access_token" Text :>
+                     QueryParam "uploadType" Text :>
+                       QueryParam "bearer_token" Text :>
+                         QueryParam "callback" Text :>
+                           QueryParam "alt" AltJSON :>
+                             ReqBody '[JSON] Teacher :> Post '[JSON] Teacher
+
+-- | Creates a teacher of a course. This method returns the following error
+-- codes: * \`PERMISSION_DENIED\` if the requesting user is not permitted
+-- to create teachers in this course or for access errors. * \`NOT_FOUND\`
+-- if the requested course ID does not exist. * \`FAILED_PRECONDITION\` if
+-- the requested user\'s account is disabled, for the following request
+-- errors: * CourseMemberLimitReached * CourseNotModifiable *
+-- CourseTeacherLimitReached * UserGroupsMembershipLimitReached *
+-- \`ALREADY_EXISTS\` if the user is already a teacher or student in the
+-- course.
+--
+-- /See:/ 'coursesTeachersCreate' smart constructor.
+data CoursesTeachersCreate = CoursesTeachersCreate
+    { _ctcXgafv          :: !(Maybe Text)
+    , _ctcUploadProtocol :: !(Maybe Text)
+    , _ctcPp             :: !Bool
+    , _ctcCourseId       :: !Text
+    , _ctcAccessToken    :: !(Maybe Text)
+    , _ctcUploadType     :: !(Maybe Text)
+    , _ctcPayload        :: !Teacher
+    , _ctcBearerToken    :: !(Maybe Text)
+    , _ctcCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CoursesTeachersCreate' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ctcXgafv'
+--
+-- * 'ctcUploadProtocol'
+--
+-- * 'ctcPp'
+--
+-- * 'ctcCourseId'
+--
+-- * 'ctcAccessToken'
+--
+-- * 'ctcUploadType'
+--
+-- * 'ctcPayload'
+--
+-- * 'ctcBearerToken'
+--
+-- * 'ctcCallback'
+coursesTeachersCreate
+    :: Text -- ^ 'ctcCourseId'
+    -> Teacher -- ^ 'ctcPayload'
+    -> CoursesTeachersCreate
+coursesTeachersCreate pCtcCourseId_ pCtcPayload_ =
+    CoursesTeachersCreate
+    { _ctcXgafv = Nothing
+    , _ctcUploadProtocol = Nothing
+    , _ctcPp = True
+    , _ctcCourseId = pCtcCourseId_
+    , _ctcAccessToken = Nothing
+    , _ctcUploadType = Nothing
+    , _ctcPayload = pCtcPayload_
+    , _ctcBearerToken = Nothing
+    , _ctcCallback = Nothing
+    }
+
+-- | V1 error format.
+ctcXgafv :: Lens' CoursesTeachersCreate (Maybe Text)
+ctcXgafv = lens _ctcXgafv (\ s a -> s{_ctcXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+ctcUploadProtocol :: Lens' CoursesTeachersCreate (Maybe Text)
+ctcUploadProtocol
+  = lens _ctcUploadProtocol
+      (\ s a -> s{_ctcUploadProtocol = a})
+
+-- | Pretty-print response.
+ctcPp :: Lens' CoursesTeachersCreate Bool
+ctcPp = lens _ctcPp (\ s a -> s{_ctcPp = a})
+
+-- | Identifier of the course. This identifier can be either the
+-- Classroom-assigned identifier or an alias.
+ctcCourseId :: Lens' CoursesTeachersCreate Text
+ctcCourseId
+  = lens _ctcCourseId (\ s a -> s{_ctcCourseId = a})
+
+-- | OAuth access token.
+ctcAccessToken :: Lens' CoursesTeachersCreate (Maybe Text)
+ctcAccessToken
+  = lens _ctcAccessToken
+      (\ s a -> s{_ctcAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+ctcUploadType :: Lens' CoursesTeachersCreate (Maybe Text)
+ctcUploadType
+  = lens _ctcUploadType
+      (\ s a -> s{_ctcUploadType = a})
+
+-- | Multipart request metadata.
+ctcPayload :: Lens' CoursesTeachersCreate Teacher
+ctcPayload
+  = lens _ctcPayload (\ s a -> s{_ctcPayload = a})
+
+-- | OAuth bearer token.
+ctcBearerToken :: Lens' CoursesTeachersCreate (Maybe Text)
+ctcBearerToken
+  = lens _ctcBearerToken
+      (\ s a -> s{_ctcBearerToken = a})
+
+-- | JSONP
+ctcCallback :: Lens' CoursesTeachersCreate (Maybe Text)
+ctcCallback
+  = lens _ctcCallback (\ s a -> s{_ctcCallback = a})
+
+instance GoogleRequest CoursesTeachersCreate where
+        type Rs CoursesTeachersCreate = Teacher
+        requestClient CoursesTeachersCreate{..}
+          = go _ctcCourseId _ctcXgafv _ctcUploadProtocol
+              (Just _ctcPp)
+              _ctcAccessToken
+              _ctcUploadType
+              _ctcBearerToken
+              _ctcCallback
+              (Just AltJSON)
+              _ctcPayload
+              classroomService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy CoursesTeachersCreateResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Classroom/Courses/Teachers/Delete.hs b/gen/Network/Google/Resource/Classroom/Courses/Teachers/Delete.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Classroom/Courses/Teachers/Delete.hs
@@ -0,0 +1,195 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.Classroom.Courses.Teachers.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 teacher of a course. This method returns the following error
+-- codes: * \`PERMISSION_DENIED\` if the requesting user is not permitted
+-- to delete teachers of this course or for access errors. * \`NOT_FOUND\`
+-- if no teacher of this course has the requested ID or if the course does
+-- not exist. * \`FAILED_PRECONDITION\` if the requested ID belongs to the
+-- primary teacher of this course.
+--
+-- /See:/ <https://developers.google.com/classroom/ Google Classroom API Reference> for @classroom.courses.teachers.delete@.
+module Network.Google.Resource.Classroom.Courses.Teachers.Delete
+    (
+    -- * REST Resource
+      CoursesTeachersDeleteResource
+
+    -- * Creating a Request
+    , coursesTeachersDelete
+    , CoursesTeachersDelete
+
+    -- * Request Lenses
+    , ctdXgafv
+    , ctdUploadProtocol
+    , ctdPp
+    , ctdCourseId
+    , ctdAccessToken
+    , ctdUploadType
+    , ctdUserId
+    , ctdBearerToken
+    , ctdCallback
+    ) where
+
+import           Network.Google.Classroom.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @classroom.courses.teachers.delete@ method which the
+-- 'CoursesTeachersDelete' request conforms to.
+type CoursesTeachersDeleteResource =
+     "v1" :>
+       "courses" :>
+         Capture "courseId" Text :>
+           "teachers" :>
+             Capture "userId" Text :>
+               QueryParam "$.xgafv" Text :>
+                 QueryParam "upload_protocol" Text :>
+                   QueryParam "pp" Bool :>
+                     QueryParam "access_token" Text :>
+                       QueryParam "uploadType" Text :>
+                         QueryParam "bearer_token" Text :>
+                           QueryParam "callback" Text :>
+                             QueryParam "alt" AltJSON :> Delete '[JSON] Empty
+
+-- | Deletes a teacher of a course. This method returns the following error
+-- codes: * \`PERMISSION_DENIED\` if the requesting user is not permitted
+-- to delete teachers of this course or for access errors. * \`NOT_FOUND\`
+-- if no teacher of this course has the requested ID or if the course does
+-- not exist. * \`FAILED_PRECONDITION\` if the requested ID belongs to the
+-- primary teacher of this course.
+--
+-- /See:/ 'coursesTeachersDelete' smart constructor.
+data CoursesTeachersDelete = CoursesTeachersDelete
+    { _ctdXgafv          :: !(Maybe Text)
+    , _ctdUploadProtocol :: !(Maybe Text)
+    , _ctdPp             :: !Bool
+    , _ctdCourseId       :: !Text
+    , _ctdAccessToken    :: !(Maybe Text)
+    , _ctdUploadType     :: !(Maybe Text)
+    , _ctdUserId         :: !Text
+    , _ctdBearerToken    :: !(Maybe Text)
+    , _ctdCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CoursesTeachersDelete' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ctdXgafv'
+--
+-- * 'ctdUploadProtocol'
+--
+-- * 'ctdPp'
+--
+-- * 'ctdCourseId'
+--
+-- * 'ctdAccessToken'
+--
+-- * 'ctdUploadType'
+--
+-- * 'ctdUserId'
+--
+-- * 'ctdBearerToken'
+--
+-- * 'ctdCallback'
+coursesTeachersDelete
+    :: Text -- ^ 'ctdCourseId'
+    -> Text -- ^ 'ctdUserId'
+    -> CoursesTeachersDelete
+coursesTeachersDelete pCtdCourseId_ pCtdUserId_ =
+    CoursesTeachersDelete
+    { _ctdXgafv = Nothing
+    , _ctdUploadProtocol = Nothing
+    , _ctdPp = True
+    , _ctdCourseId = pCtdCourseId_
+    , _ctdAccessToken = Nothing
+    , _ctdUploadType = Nothing
+    , _ctdUserId = pCtdUserId_
+    , _ctdBearerToken = Nothing
+    , _ctdCallback = Nothing
+    }
+
+-- | V1 error format.
+ctdXgafv :: Lens' CoursesTeachersDelete (Maybe Text)
+ctdXgafv = lens _ctdXgafv (\ s a -> s{_ctdXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+ctdUploadProtocol :: Lens' CoursesTeachersDelete (Maybe Text)
+ctdUploadProtocol
+  = lens _ctdUploadProtocol
+      (\ s a -> s{_ctdUploadProtocol = a})
+
+-- | Pretty-print response.
+ctdPp :: Lens' CoursesTeachersDelete Bool
+ctdPp = lens _ctdPp (\ s a -> s{_ctdPp = a})
+
+-- | Identifier of the course. This identifier can be either the
+-- Classroom-assigned identifier or an alias.
+ctdCourseId :: Lens' CoursesTeachersDelete Text
+ctdCourseId
+  = lens _ctdCourseId (\ s a -> s{_ctdCourseId = a})
+
+-- | OAuth access token.
+ctdAccessToken :: Lens' CoursesTeachersDelete (Maybe Text)
+ctdAccessToken
+  = lens _ctdAccessToken
+      (\ s a -> s{_ctdAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+ctdUploadType :: Lens' CoursesTeachersDelete (Maybe Text)
+ctdUploadType
+  = lens _ctdUploadType
+      (\ s a -> s{_ctdUploadType = a})
+
+-- | Identifier of the teacher to delete. The identifier can be one of the
+-- following: * the numeric identifier for the user * the email address of
+-- the user * the string literal \`\"me\"\`, indicating the requesting user
+ctdUserId :: Lens' CoursesTeachersDelete Text
+ctdUserId
+  = lens _ctdUserId (\ s a -> s{_ctdUserId = a})
+
+-- | OAuth bearer token.
+ctdBearerToken :: Lens' CoursesTeachersDelete (Maybe Text)
+ctdBearerToken
+  = lens _ctdBearerToken
+      (\ s a -> s{_ctdBearerToken = a})
+
+-- | JSONP
+ctdCallback :: Lens' CoursesTeachersDelete (Maybe Text)
+ctdCallback
+  = lens _ctdCallback (\ s a -> s{_ctdCallback = a})
+
+instance GoogleRequest CoursesTeachersDelete where
+        type Rs CoursesTeachersDelete = Empty
+        requestClient CoursesTeachersDelete{..}
+          = go _ctdCourseId _ctdUserId _ctdXgafv
+              _ctdUploadProtocol
+              (Just _ctdPp)
+              _ctdAccessToken
+              _ctdUploadType
+              _ctdBearerToken
+              _ctdCallback
+              (Just AltJSON)
+              classroomService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy CoursesTeachersDeleteResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Classroom/Courses/Teachers/Get.hs b/gen/Network/Google/Resource/Classroom/Courses/Teachers/Get.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Classroom/Courses/Teachers/Get.hs
@@ -0,0 +1,193 @@
+{-# 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.Classroom.Courses.Teachers.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)
+--
+-- Returns a teacher of a course. This method returns the following error
+-- codes: * \`PERMISSION_DENIED\` if the requesting user is not permitted
+-- to view teachers of this course or for access errors. * \`NOT_FOUND\` if
+-- no teacher of this course has the requested ID or if the course does not
+-- exist.
+--
+-- /See:/ <https://developers.google.com/classroom/ Google Classroom API Reference> for @classroom.courses.teachers.get@.
+module Network.Google.Resource.Classroom.Courses.Teachers.Get
+    (
+    -- * REST Resource
+      CoursesTeachersGetResource
+
+    -- * Creating a Request
+    , coursesTeachersGet
+    , CoursesTeachersGet
+
+    -- * Request Lenses
+    , ctgXgafv
+    , ctgUploadProtocol
+    , ctgPp
+    , ctgCourseId
+    , ctgAccessToken
+    , ctgUploadType
+    , ctgUserId
+    , ctgBearerToken
+    , ctgCallback
+    ) where
+
+import           Network.Google.Classroom.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @classroom.courses.teachers.get@ method which the
+-- 'CoursesTeachersGet' request conforms to.
+type CoursesTeachersGetResource =
+     "v1" :>
+       "courses" :>
+         Capture "courseId" Text :>
+           "teachers" :>
+             Capture "userId" Text :>
+               QueryParam "$.xgafv" Text :>
+                 QueryParam "upload_protocol" Text :>
+                   QueryParam "pp" Bool :>
+                     QueryParam "access_token" Text :>
+                       QueryParam "uploadType" Text :>
+                         QueryParam "bearer_token" Text :>
+                           QueryParam "callback" Text :>
+                             QueryParam "alt" AltJSON :> Get '[JSON] Teacher
+
+-- | Returns a teacher of a course. This method returns the following error
+-- codes: * \`PERMISSION_DENIED\` if the requesting user is not permitted
+-- to view teachers of this course or for access errors. * \`NOT_FOUND\` if
+-- no teacher of this course has the requested ID or if the course does not
+-- exist.
+--
+-- /See:/ 'coursesTeachersGet' smart constructor.
+data CoursesTeachersGet = CoursesTeachersGet
+    { _ctgXgafv          :: !(Maybe Text)
+    , _ctgUploadProtocol :: !(Maybe Text)
+    , _ctgPp             :: !Bool
+    , _ctgCourseId       :: !Text
+    , _ctgAccessToken    :: !(Maybe Text)
+    , _ctgUploadType     :: !(Maybe Text)
+    , _ctgUserId         :: !Text
+    , _ctgBearerToken    :: !(Maybe Text)
+    , _ctgCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CoursesTeachersGet' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ctgXgafv'
+--
+-- * 'ctgUploadProtocol'
+--
+-- * 'ctgPp'
+--
+-- * 'ctgCourseId'
+--
+-- * 'ctgAccessToken'
+--
+-- * 'ctgUploadType'
+--
+-- * 'ctgUserId'
+--
+-- * 'ctgBearerToken'
+--
+-- * 'ctgCallback'
+coursesTeachersGet
+    :: Text -- ^ 'ctgCourseId'
+    -> Text -- ^ 'ctgUserId'
+    -> CoursesTeachersGet
+coursesTeachersGet pCtgCourseId_ pCtgUserId_ =
+    CoursesTeachersGet
+    { _ctgXgafv = Nothing
+    , _ctgUploadProtocol = Nothing
+    , _ctgPp = True
+    , _ctgCourseId = pCtgCourseId_
+    , _ctgAccessToken = Nothing
+    , _ctgUploadType = Nothing
+    , _ctgUserId = pCtgUserId_
+    , _ctgBearerToken = Nothing
+    , _ctgCallback = Nothing
+    }
+
+-- | V1 error format.
+ctgXgafv :: Lens' CoursesTeachersGet (Maybe Text)
+ctgXgafv = lens _ctgXgafv (\ s a -> s{_ctgXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+ctgUploadProtocol :: Lens' CoursesTeachersGet (Maybe Text)
+ctgUploadProtocol
+  = lens _ctgUploadProtocol
+      (\ s a -> s{_ctgUploadProtocol = a})
+
+-- | Pretty-print response.
+ctgPp :: Lens' CoursesTeachersGet Bool
+ctgPp = lens _ctgPp (\ s a -> s{_ctgPp = a})
+
+-- | Identifier of the course. This identifier can be either the
+-- Classroom-assigned identifier or an alias.
+ctgCourseId :: Lens' CoursesTeachersGet Text
+ctgCourseId
+  = lens _ctgCourseId (\ s a -> s{_ctgCourseId = a})
+
+-- | OAuth access token.
+ctgAccessToken :: Lens' CoursesTeachersGet (Maybe Text)
+ctgAccessToken
+  = lens _ctgAccessToken
+      (\ s a -> s{_ctgAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+ctgUploadType :: Lens' CoursesTeachersGet (Maybe Text)
+ctgUploadType
+  = lens _ctgUploadType
+      (\ s a -> s{_ctgUploadType = a})
+
+-- | Identifier of the teacher to return. The identifier can be one of the
+-- following: * the numeric identifier for the user * the email address of
+-- the user * the string literal \`\"me\"\`, indicating the requesting user
+ctgUserId :: Lens' CoursesTeachersGet Text
+ctgUserId
+  = lens _ctgUserId (\ s a -> s{_ctgUserId = a})
+
+-- | OAuth bearer token.
+ctgBearerToken :: Lens' CoursesTeachersGet (Maybe Text)
+ctgBearerToken
+  = lens _ctgBearerToken
+      (\ s a -> s{_ctgBearerToken = a})
+
+-- | JSONP
+ctgCallback :: Lens' CoursesTeachersGet (Maybe Text)
+ctgCallback
+  = lens _ctgCallback (\ s a -> s{_ctgCallback = a})
+
+instance GoogleRequest CoursesTeachersGet where
+        type Rs CoursesTeachersGet = Teacher
+        requestClient CoursesTeachersGet{..}
+          = go _ctgCourseId _ctgUserId _ctgXgafv
+              _ctgUploadProtocol
+              (Just _ctgPp)
+              _ctgAccessToken
+              _ctgUploadType
+              _ctgBearerToken
+              _ctgCallback
+              (Just AltJSON)
+              classroomService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy CoursesTeachersGetResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Classroom/Courses/Teachers/List.hs b/gen/Network/Google/Resource/Classroom/Courses/Teachers/List.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Classroom/Courses/Teachers/List.hs
@@ -0,0 +1,205 @@
+{-# 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.Classroom.Courses.Teachers.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 a list of teachers of this course that the requester is
+-- permitted to view. This method returns the following error codes: *
+-- \`NOT_FOUND\` if the course does not exist. * \`PERMISSION_DENIED\` for
+-- access errors.
+--
+-- /See:/ <https://developers.google.com/classroom/ Google Classroom API Reference> for @classroom.courses.teachers.list@.
+module Network.Google.Resource.Classroom.Courses.Teachers.List
+    (
+    -- * REST Resource
+      CoursesTeachersListResource
+
+    -- * Creating a Request
+    , coursesTeachersList
+    , CoursesTeachersList
+
+    -- * Request Lenses
+    , ctlXgafv
+    , ctlUploadProtocol
+    , ctlPp
+    , ctlCourseId
+    , ctlAccessToken
+    , ctlUploadType
+    , ctlBearerToken
+    , ctlPageToken
+    , ctlPageSize
+    , ctlCallback
+    ) where
+
+import           Network.Google.Classroom.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @classroom.courses.teachers.list@ method which the
+-- 'CoursesTeachersList' request conforms to.
+type CoursesTeachersListResource =
+     "v1" :>
+       "courses" :>
+         Capture "courseId" Text :>
+           "teachers" :>
+             QueryParam "$.xgafv" Text :>
+               QueryParam "upload_protocol" Text :>
+                 QueryParam "pp" Bool :>
+                   QueryParam "access_token" Text :>
+                     QueryParam "uploadType" Text :>
+                       QueryParam "bearer_token" Text :>
+                         QueryParam "pageToken" Text :>
+                           QueryParam "pageSize" (Textual Int32) :>
+                             QueryParam "callback" Text :>
+                               QueryParam "alt" AltJSON :>
+                                 Get '[JSON] ListTeachersResponse
+
+-- | Returns a list of teachers of this course that the requester is
+-- permitted to view. This method returns the following error codes: *
+-- \`NOT_FOUND\` if the course does not exist. * \`PERMISSION_DENIED\` for
+-- access errors.
+--
+-- /See:/ 'coursesTeachersList' smart constructor.
+data CoursesTeachersList = CoursesTeachersList
+    { _ctlXgafv          :: !(Maybe Text)
+    , _ctlUploadProtocol :: !(Maybe Text)
+    , _ctlPp             :: !Bool
+    , _ctlCourseId       :: !Text
+    , _ctlAccessToken    :: !(Maybe Text)
+    , _ctlUploadType     :: !(Maybe Text)
+    , _ctlBearerToken    :: !(Maybe Text)
+    , _ctlPageToken      :: !(Maybe Text)
+    , _ctlPageSize       :: !(Maybe (Textual Int32))
+    , _ctlCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CoursesTeachersList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ctlXgafv'
+--
+-- * 'ctlUploadProtocol'
+--
+-- * 'ctlPp'
+--
+-- * 'ctlCourseId'
+--
+-- * 'ctlAccessToken'
+--
+-- * 'ctlUploadType'
+--
+-- * 'ctlBearerToken'
+--
+-- * 'ctlPageToken'
+--
+-- * 'ctlPageSize'
+--
+-- * 'ctlCallback'
+coursesTeachersList
+    :: Text -- ^ 'ctlCourseId'
+    -> CoursesTeachersList
+coursesTeachersList pCtlCourseId_ =
+    CoursesTeachersList
+    { _ctlXgafv = Nothing
+    , _ctlUploadProtocol = Nothing
+    , _ctlPp = True
+    , _ctlCourseId = pCtlCourseId_
+    , _ctlAccessToken = Nothing
+    , _ctlUploadType = Nothing
+    , _ctlBearerToken = Nothing
+    , _ctlPageToken = Nothing
+    , _ctlPageSize = Nothing
+    , _ctlCallback = Nothing
+    }
+
+-- | V1 error format.
+ctlXgafv :: Lens' CoursesTeachersList (Maybe Text)
+ctlXgafv = lens _ctlXgafv (\ s a -> s{_ctlXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+ctlUploadProtocol :: Lens' CoursesTeachersList (Maybe Text)
+ctlUploadProtocol
+  = lens _ctlUploadProtocol
+      (\ s a -> s{_ctlUploadProtocol = a})
+
+-- | Pretty-print response.
+ctlPp :: Lens' CoursesTeachersList Bool
+ctlPp = lens _ctlPp (\ s a -> s{_ctlPp = a})
+
+-- | Identifier of the course. This identifier can be either the
+-- Classroom-assigned identifier or an alias.
+ctlCourseId :: Lens' CoursesTeachersList Text
+ctlCourseId
+  = lens _ctlCourseId (\ s a -> s{_ctlCourseId = a})
+
+-- | OAuth access token.
+ctlAccessToken :: Lens' CoursesTeachersList (Maybe Text)
+ctlAccessToken
+  = lens _ctlAccessToken
+      (\ s a -> s{_ctlAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+ctlUploadType :: Lens' CoursesTeachersList (Maybe Text)
+ctlUploadType
+  = lens _ctlUploadType
+      (\ s a -> s{_ctlUploadType = a})
+
+-- | OAuth bearer token.
+ctlBearerToken :: Lens' CoursesTeachersList (Maybe Text)
+ctlBearerToken
+  = lens _ctlBearerToken
+      (\ s a -> s{_ctlBearerToken = a})
+
+-- | nextPageToken value returned from a previous list call, indicating that
+-- the subsequent page of results should be returned. The list request must
+-- be otherwise identical to the one that resulted in this token.
+ctlPageToken :: Lens' CoursesTeachersList (Maybe Text)
+ctlPageToken
+  = lens _ctlPageToken (\ s a -> s{_ctlPageToken = a})
+
+-- | Maximum number of items to return. Zero means no maximum. The server may
+-- return fewer than the specified number of results.
+ctlPageSize :: Lens' CoursesTeachersList (Maybe Int32)
+ctlPageSize
+  = lens _ctlPageSize (\ s a -> s{_ctlPageSize = a}) .
+      mapping _Coerce
+
+-- | JSONP
+ctlCallback :: Lens' CoursesTeachersList (Maybe Text)
+ctlCallback
+  = lens _ctlCallback (\ s a -> s{_ctlCallback = a})
+
+instance GoogleRequest CoursesTeachersList where
+        type Rs CoursesTeachersList = ListTeachersResponse
+        requestClient CoursesTeachersList{..}
+          = go _ctlCourseId _ctlXgafv _ctlUploadProtocol
+              (Just _ctlPp)
+              _ctlAccessToken
+              _ctlUploadType
+              _ctlBearerToken
+              _ctlPageToken
+              _ctlPageSize
+              _ctlCallback
+              (Just AltJSON)
+              classroomService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy CoursesTeachersListResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Classroom/Courses/Update.hs b/gen/Network/Google/Resource/Classroom/Courses/Update.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Classroom/Courses/Update.hs
@@ -0,0 +1,186 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.Classroom.Courses.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 course. This method returns the following error codes: *
+-- \`PERMISSION_DENIED\` if the requesting user is not permitted to modify
+-- the requested course or for access errors. * \`NOT_FOUND\` if no course
+-- exists with the requested ID. * \`FAILED_PRECONDITION\` for the
+-- following request errors: * CourseNotModifiable
+--
+-- /See:/ <https://developers.google.com/classroom/ Google Classroom API Reference> for @classroom.courses.update@.
+module Network.Google.Resource.Classroom.Courses.Update
+    (
+    -- * REST Resource
+      CoursesUpdateResource
+
+    -- * Creating a Request
+    , coursesUpdate
+    , CoursesUpdate
+
+    -- * Request Lenses
+    , cuXgafv
+    , cuUploadProtocol
+    , cuPp
+    , cuAccessToken
+    , cuUploadType
+    , cuPayload
+    , cuBearerToken
+    , cuId
+    , cuCallback
+    ) where
+
+import           Network.Google.Classroom.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @classroom.courses.update@ method which the
+-- 'CoursesUpdate' request conforms to.
+type CoursesUpdateResource =
+     "v1" :>
+       "courses" :>
+         Capture "id" Text :>
+           QueryParam "$.xgafv" Text :>
+             QueryParam "upload_protocol" Text :>
+               QueryParam "pp" Bool :>
+                 QueryParam "access_token" Text :>
+                   QueryParam "uploadType" Text :>
+                     QueryParam "bearer_token" Text :>
+                       QueryParam "callback" Text :>
+                         QueryParam "alt" AltJSON :>
+                           ReqBody '[JSON] Course :> Put '[JSON] Course
+
+-- | Updates a course. This method returns the following error codes: *
+-- \`PERMISSION_DENIED\` if the requesting user is not permitted to modify
+-- the requested course or for access errors. * \`NOT_FOUND\` if no course
+-- exists with the requested ID. * \`FAILED_PRECONDITION\` for the
+-- following request errors: * CourseNotModifiable
+--
+-- /See:/ 'coursesUpdate' smart constructor.
+data CoursesUpdate = CoursesUpdate
+    { _cuXgafv          :: !(Maybe Text)
+    , _cuUploadProtocol :: !(Maybe Text)
+    , _cuPp             :: !Bool
+    , _cuAccessToken    :: !(Maybe Text)
+    , _cuUploadType     :: !(Maybe Text)
+    , _cuPayload        :: !Course
+    , _cuBearerToken    :: !(Maybe Text)
+    , _cuId             :: !Text
+    , _cuCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CoursesUpdate' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cuXgafv'
+--
+-- * 'cuUploadProtocol'
+--
+-- * 'cuPp'
+--
+-- * 'cuAccessToken'
+--
+-- * 'cuUploadType'
+--
+-- * 'cuPayload'
+--
+-- * 'cuBearerToken'
+--
+-- * 'cuId'
+--
+-- * 'cuCallback'
+coursesUpdate
+    :: Course -- ^ 'cuPayload'
+    -> Text -- ^ 'cuId'
+    -> CoursesUpdate
+coursesUpdate pCuPayload_ pCuId_ =
+    CoursesUpdate
+    { _cuXgafv = Nothing
+    , _cuUploadProtocol = Nothing
+    , _cuPp = True
+    , _cuAccessToken = Nothing
+    , _cuUploadType = Nothing
+    , _cuPayload = pCuPayload_
+    , _cuBearerToken = Nothing
+    , _cuId = pCuId_
+    , _cuCallback = Nothing
+    }
+
+-- | V1 error format.
+cuXgafv :: Lens' CoursesUpdate (Maybe Text)
+cuXgafv = lens _cuXgafv (\ s a -> s{_cuXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+cuUploadProtocol :: Lens' CoursesUpdate (Maybe Text)
+cuUploadProtocol
+  = lens _cuUploadProtocol
+      (\ s a -> s{_cuUploadProtocol = a})
+
+-- | Pretty-print response.
+cuPp :: Lens' CoursesUpdate Bool
+cuPp = lens _cuPp (\ s a -> s{_cuPp = a})
+
+-- | OAuth access token.
+cuAccessToken :: Lens' CoursesUpdate (Maybe Text)
+cuAccessToken
+  = lens _cuAccessToken
+      (\ s a -> s{_cuAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+cuUploadType :: Lens' CoursesUpdate (Maybe Text)
+cuUploadType
+  = lens _cuUploadType (\ s a -> s{_cuUploadType = a})
+
+-- | Multipart request metadata.
+cuPayload :: Lens' CoursesUpdate Course
+cuPayload
+  = lens _cuPayload (\ s a -> s{_cuPayload = a})
+
+-- | OAuth bearer token.
+cuBearerToken :: Lens' CoursesUpdate (Maybe Text)
+cuBearerToken
+  = lens _cuBearerToken
+      (\ s a -> s{_cuBearerToken = a})
+
+-- | Identifier of the course to update. This identifier can be either the
+-- Classroom-assigned identifier or an alias.
+cuId :: Lens' CoursesUpdate Text
+cuId = lens _cuId (\ s a -> s{_cuId = a})
+
+-- | JSONP
+cuCallback :: Lens' CoursesUpdate (Maybe Text)
+cuCallback
+  = lens _cuCallback (\ s a -> s{_cuCallback = a})
+
+instance GoogleRequest CoursesUpdate where
+        type Rs CoursesUpdate = Course
+        requestClient CoursesUpdate{..}
+          = go _cuId _cuXgafv _cuUploadProtocol (Just _cuPp)
+              _cuAccessToken
+              _cuUploadType
+              _cuBearerToken
+              _cuCallback
+              (Just AltJSON)
+              _cuPayload
+              classroomService
+          where go
+                  = buildClient (Proxy :: Proxy CoursesUpdateResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Classroom/Invitations/Accept.hs b/gen/Network/Google/Resource/Classroom/Invitations/Accept.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Classroom/Invitations/Accept.hs
@@ -0,0 +1,181 @@
+{-# 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.Classroom.Invitations.Accept
+-- 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)
+--
+-- Accepts an invitation, removing it and adding the invited user to the
+-- teachers or students (as appropriate) of the specified course. Only the
+-- invited user may accept an invitation. This method returns the following
+-- error codes: * \`PERMISSION_DENIED\` if the requesting user is not
+-- permitted to accept the requested invitation or for access errors. *
+-- \`FAILED_PRECONDITION\` for the following request errors: *
+-- CourseMemberLimitReached * CourseNotModifiable *
+-- CourseTeacherLimitReached * UserGroupsMembershipLimitReached *
+-- \`NOT_FOUND\` if no invitation exists with the requested ID.
+--
+-- /See:/ <https://developers.google.com/classroom/ Google Classroom API Reference> for @classroom.invitations.accept@.
+module Network.Google.Resource.Classroom.Invitations.Accept
+    (
+    -- * REST Resource
+      InvitationsAcceptResource
+
+    -- * Creating a Request
+    , invitationsAccept
+    , InvitationsAccept
+
+    -- * Request Lenses
+    , iaXgafv
+    , iaUploadProtocol
+    , iaPp
+    , iaAccessToken
+    , iaUploadType
+    , iaBearerToken
+    , iaId
+    , iaCallback
+    ) where
+
+import           Network.Google.Classroom.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @classroom.invitations.accept@ method which the
+-- 'InvitationsAccept' request conforms to.
+type InvitationsAcceptResource =
+     "v1" :>
+       "invitations" :>
+         CaptureMode "id" "accept" Text :>
+           QueryParam "$.xgafv" Text :>
+             QueryParam "upload_protocol" Text :>
+               QueryParam "pp" Bool :>
+                 QueryParam "access_token" Text :>
+                   QueryParam "uploadType" Text :>
+                     QueryParam "bearer_token" Text :>
+                       QueryParam "callback" Text :>
+                         QueryParam "alt" AltJSON :> Post '[JSON] Empty
+
+-- | Accepts an invitation, removing it and adding the invited user to the
+-- teachers or students (as appropriate) of the specified course. Only the
+-- invited user may accept an invitation. This method returns the following
+-- error codes: * \`PERMISSION_DENIED\` if the requesting user is not
+-- permitted to accept the requested invitation or for access errors. *
+-- \`FAILED_PRECONDITION\` for the following request errors: *
+-- CourseMemberLimitReached * CourseNotModifiable *
+-- CourseTeacherLimitReached * UserGroupsMembershipLimitReached *
+-- \`NOT_FOUND\` if no invitation exists with the requested ID.
+--
+-- /See:/ 'invitationsAccept' smart constructor.
+data InvitationsAccept = InvitationsAccept
+    { _iaXgafv          :: !(Maybe Text)
+    , _iaUploadProtocol :: !(Maybe Text)
+    , _iaPp             :: !Bool
+    , _iaAccessToken    :: !(Maybe Text)
+    , _iaUploadType     :: !(Maybe Text)
+    , _iaBearerToken    :: !(Maybe Text)
+    , _iaId             :: !Text
+    , _iaCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'InvitationsAccept' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'iaXgafv'
+--
+-- * 'iaUploadProtocol'
+--
+-- * 'iaPp'
+--
+-- * 'iaAccessToken'
+--
+-- * 'iaUploadType'
+--
+-- * 'iaBearerToken'
+--
+-- * 'iaId'
+--
+-- * 'iaCallback'
+invitationsAccept
+    :: Text -- ^ 'iaId'
+    -> InvitationsAccept
+invitationsAccept pIaId_ =
+    InvitationsAccept
+    { _iaXgafv = Nothing
+    , _iaUploadProtocol = Nothing
+    , _iaPp = True
+    , _iaAccessToken = Nothing
+    , _iaUploadType = Nothing
+    , _iaBearerToken = Nothing
+    , _iaId = pIaId_
+    , _iaCallback = Nothing
+    }
+
+-- | V1 error format.
+iaXgafv :: Lens' InvitationsAccept (Maybe Text)
+iaXgafv = lens _iaXgafv (\ s a -> s{_iaXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+iaUploadProtocol :: Lens' InvitationsAccept (Maybe Text)
+iaUploadProtocol
+  = lens _iaUploadProtocol
+      (\ s a -> s{_iaUploadProtocol = a})
+
+-- | Pretty-print response.
+iaPp :: Lens' InvitationsAccept Bool
+iaPp = lens _iaPp (\ s a -> s{_iaPp = a})
+
+-- | OAuth access token.
+iaAccessToken :: Lens' InvitationsAccept (Maybe Text)
+iaAccessToken
+  = lens _iaAccessToken
+      (\ s a -> s{_iaAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+iaUploadType :: Lens' InvitationsAccept (Maybe Text)
+iaUploadType
+  = lens _iaUploadType (\ s a -> s{_iaUploadType = a})
+
+-- | OAuth bearer token.
+iaBearerToken :: Lens' InvitationsAccept (Maybe Text)
+iaBearerToken
+  = lens _iaBearerToken
+      (\ s a -> s{_iaBearerToken = a})
+
+-- | Identifier of the invitation to accept.
+iaId :: Lens' InvitationsAccept Text
+iaId = lens _iaId (\ s a -> s{_iaId = a})
+
+-- | JSONP
+iaCallback :: Lens' InvitationsAccept (Maybe Text)
+iaCallback
+  = lens _iaCallback (\ s a -> s{_iaCallback = a})
+
+instance GoogleRequest InvitationsAccept where
+        type Rs InvitationsAccept = Empty
+        requestClient InvitationsAccept{..}
+          = go _iaId _iaXgafv _iaUploadProtocol (Just _iaPp)
+              _iaAccessToken
+              _iaUploadType
+              _iaBearerToken
+              _iaCallback
+              (Just AltJSON)
+              classroomService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy InvitationsAcceptResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Classroom/Invitations/Create.hs b/gen/Network/Google/Resource/Classroom/Invitations/Create.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Classroom/Invitations/Create.hs
@@ -0,0 +1,183 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.Classroom.Invitations.Create
+-- 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 an invitation. Only one invitation for a user and course may
+-- exist at a time. Delete and re-create an invitation to make changes.
+-- This method returns the following error codes: * \`PERMISSION_DENIED\`
+-- if the requesting user is not permitted to create invitations for this
+-- course or for access errors. * \`NOT_FOUND\` if the course or the user
+-- does not exist. * \`FAILED_PRECONDITION\` if the requested user\'s
+-- account is disabled or if the user already has this role or a role with
+-- greater permissions. * \`ALREADY_EXISTS\` if an invitation for the
+-- specified user and course already exists.
+--
+-- /See:/ <https://developers.google.com/classroom/ Google Classroom API Reference> for @classroom.invitations.create@.
+module Network.Google.Resource.Classroom.Invitations.Create
+    (
+    -- * REST Resource
+      InvitationsCreateResource
+
+    -- * Creating a Request
+    , invitationsCreate
+    , InvitationsCreate
+
+    -- * Request Lenses
+    , icXgafv
+    , icUploadProtocol
+    , icPp
+    , icAccessToken
+    , icUploadType
+    , icPayload
+    , icBearerToken
+    , icCallback
+    ) where
+
+import           Network.Google.Classroom.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @classroom.invitations.create@ method which the
+-- 'InvitationsCreate' request conforms to.
+type InvitationsCreateResource =
+     "v1" :>
+       "invitations" :>
+         QueryParam "$.xgafv" Text :>
+           QueryParam "upload_protocol" Text :>
+             QueryParam "pp" Bool :>
+               QueryParam "access_token" Text :>
+                 QueryParam "uploadType" Text :>
+                   QueryParam "bearer_token" Text :>
+                     QueryParam "callback" Text :>
+                       QueryParam "alt" AltJSON :>
+                         ReqBody '[JSON] Invitation :> Post '[JSON] Invitation
+
+-- | Creates an invitation. Only one invitation for a user and course may
+-- exist at a time. Delete and re-create an invitation to make changes.
+-- This method returns the following error codes: * \`PERMISSION_DENIED\`
+-- if the requesting user is not permitted to create invitations for this
+-- course or for access errors. * \`NOT_FOUND\` if the course or the user
+-- does not exist. * \`FAILED_PRECONDITION\` if the requested user\'s
+-- account is disabled or if the user already has this role or a role with
+-- greater permissions. * \`ALREADY_EXISTS\` if an invitation for the
+-- specified user and course already exists.
+--
+-- /See:/ 'invitationsCreate' smart constructor.
+data InvitationsCreate = InvitationsCreate
+    { _icXgafv          :: !(Maybe Text)
+    , _icUploadProtocol :: !(Maybe Text)
+    , _icPp             :: !Bool
+    , _icAccessToken    :: !(Maybe Text)
+    , _icUploadType     :: !(Maybe Text)
+    , _icPayload        :: !Invitation
+    , _icBearerToken    :: !(Maybe Text)
+    , _icCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'InvitationsCreate' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'icXgafv'
+--
+-- * 'icUploadProtocol'
+--
+-- * 'icPp'
+--
+-- * 'icAccessToken'
+--
+-- * 'icUploadType'
+--
+-- * 'icPayload'
+--
+-- * 'icBearerToken'
+--
+-- * 'icCallback'
+invitationsCreate
+    :: Invitation -- ^ 'icPayload'
+    -> InvitationsCreate
+invitationsCreate pIcPayload_ =
+    InvitationsCreate
+    { _icXgafv = Nothing
+    , _icUploadProtocol = Nothing
+    , _icPp = True
+    , _icAccessToken = Nothing
+    , _icUploadType = Nothing
+    , _icPayload = pIcPayload_
+    , _icBearerToken = Nothing
+    , _icCallback = Nothing
+    }
+
+-- | V1 error format.
+icXgafv :: Lens' InvitationsCreate (Maybe Text)
+icXgafv = lens _icXgafv (\ s a -> s{_icXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+icUploadProtocol :: Lens' InvitationsCreate (Maybe Text)
+icUploadProtocol
+  = lens _icUploadProtocol
+      (\ s a -> s{_icUploadProtocol = a})
+
+-- | Pretty-print response.
+icPp :: Lens' InvitationsCreate Bool
+icPp = lens _icPp (\ s a -> s{_icPp = a})
+
+-- | OAuth access token.
+icAccessToken :: Lens' InvitationsCreate (Maybe Text)
+icAccessToken
+  = lens _icAccessToken
+      (\ s a -> s{_icAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+icUploadType :: Lens' InvitationsCreate (Maybe Text)
+icUploadType
+  = lens _icUploadType (\ s a -> s{_icUploadType = a})
+
+-- | Multipart request metadata.
+icPayload :: Lens' InvitationsCreate Invitation
+icPayload
+  = lens _icPayload (\ s a -> s{_icPayload = a})
+
+-- | OAuth bearer token.
+icBearerToken :: Lens' InvitationsCreate (Maybe Text)
+icBearerToken
+  = lens _icBearerToken
+      (\ s a -> s{_icBearerToken = a})
+
+-- | JSONP
+icCallback :: Lens' InvitationsCreate (Maybe Text)
+icCallback
+  = lens _icCallback (\ s a -> s{_icCallback = a})
+
+instance GoogleRequest InvitationsCreate where
+        type Rs InvitationsCreate = Invitation
+        requestClient InvitationsCreate{..}
+          = go _icXgafv _icUploadProtocol (Just _icPp)
+              _icAccessToken
+              _icUploadType
+              _icBearerToken
+              _icCallback
+              (Just AltJSON)
+              _icPayload
+              classroomService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy InvitationsCreateResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Classroom/Invitations/Delete.hs b/gen/Network/Google/Resource/Classroom/Invitations/Delete.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Classroom/Invitations/Delete.hs
@@ -0,0 +1,171 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.Classroom.Invitations.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 an invitation. This method returns the following error codes: *
+-- \`PERMISSION_DENIED\` if the requesting user is not permitted to delete
+-- the requested invitation or for access errors. * \`NOT_FOUND\` if no
+-- invitation exists with the requested ID.
+--
+-- /See:/ <https://developers.google.com/classroom/ Google Classroom API Reference> for @classroom.invitations.delete@.
+module Network.Google.Resource.Classroom.Invitations.Delete
+    (
+    -- * REST Resource
+      InvitationsDeleteResource
+
+    -- * Creating a Request
+    , invitationsDelete
+    , InvitationsDelete
+
+    -- * Request Lenses
+    , idXgafv
+    , idUploadProtocol
+    , idPp
+    , idAccessToken
+    , idUploadType
+    , idBearerToken
+    , idId
+    , idCallback
+    ) where
+
+import           Network.Google.Classroom.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @classroom.invitations.delete@ method which the
+-- 'InvitationsDelete' request conforms to.
+type InvitationsDeleteResource =
+     "v1" :>
+       "invitations" :>
+         Capture "id" Text :>
+           QueryParam "$.xgafv" Text :>
+             QueryParam "upload_protocol" Text :>
+               QueryParam "pp" Bool :>
+                 QueryParam "access_token" Text :>
+                   QueryParam "uploadType" Text :>
+                     QueryParam "bearer_token" Text :>
+                       QueryParam "callback" Text :>
+                         QueryParam "alt" AltJSON :> Delete '[JSON] Empty
+
+-- | Deletes an invitation. This method returns the following error codes: *
+-- \`PERMISSION_DENIED\` if the requesting user is not permitted to delete
+-- the requested invitation or for access errors. * \`NOT_FOUND\` if no
+-- invitation exists with the requested ID.
+--
+-- /See:/ 'invitationsDelete' smart constructor.
+data InvitationsDelete = InvitationsDelete
+    { _idXgafv          :: !(Maybe Text)
+    , _idUploadProtocol :: !(Maybe Text)
+    , _idPp             :: !Bool
+    , _idAccessToken    :: !(Maybe Text)
+    , _idUploadType     :: !(Maybe Text)
+    , _idBearerToken    :: !(Maybe Text)
+    , _idId             :: !Text
+    , _idCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'InvitationsDelete' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'idXgafv'
+--
+-- * 'idUploadProtocol'
+--
+-- * 'idPp'
+--
+-- * 'idAccessToken'
+--
+-- * 'idUploadType'
+--
+-- * 'idBearerToken'
+--
+-- * 'idId'
+--
+-- * 'idCallback'
+invitationsDelete
+    :: Text -- ^ 'idId'
+    -> InvitationsDelete
+invitationsDelete pIdId_ =
+    InvitationsDelete
+    { _idXgafv = Nothing
+    , _idUploadProtocol = Nothing
+    , _idPp = True
+    , _idAccessToken = Nothing
+    , _idUploadType = Nothing
+    , _idBearerToken = Nothing
+    , _idId = pIdId_
+    , _idCallback = Nothing
+    }
+
+-- | V1 error format.
+idXgafv :: Lens' InvitationsDelete (Maybe Text)
+idXgafv = lens _idXgafv (\ s a -> s{_idXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+idUploadProtocol :: Lens' InvitationsDelete (Maybe Text)
+idUploadProtocol
+  = lens _idUploadProtocol
+      (\ s a -> s{_idUploadProtocol = a})
+
+-- | Pretty-print response.
+idPp :: Lens' InvitationsDelete Bool
+idPp = lens _idPp (\ s a -> s{_idPp = a})
+
+-- | OAuth access token.
+idAccessToken :: Lens' InvitationsDelete (Maybe Text)
+idAccessToken
+  = lens _idAccessToken
+      (\ s a -> s{_idAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+idUploadType :: Lens' InvitationsDelete (Maybe Text)
+idUploadType
+  = lens _idUploadType (\ s a -> s{_idUploadType = a})
+
+-- | OAuth bearer token.
+idBearerToken :: Lens' InvitationsDelete (Maybe Text)
+idBearerToken
+  = lens _idBearerToken
+      (\ s a -> s{_idBearerToken = a})
+
+-- | Identifier of the invitation to delete.
+idId :: Lens' InvitationsDelete Text
+idId = lens _idId (\ s a -> s{_idId = a})
+
+-- | JSONP
+idCallback :: Lens' InvitationsDelete (Maybe Text)
+idCallback
+  = lens _idCallback (\ s a -> s{_idCallback = a})
+
+instance GoogleRequest InvitationsDelete where
+        type Rs InvitationsDelete = Empty
+        requestClient InvitationsDelete{..}
+          = go _idId _idXgafv _idUploadProtocol (Just _idPp)
+              _idAccessToken
+              _idUploadType
+              _idBearerToken
+              _idCallback
+              (Just AltJSON)
+              classroomService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy InvitationsDeleteResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Classroom/Invitations/Get.hs b/gen/Network/Google/Resource/Classroom/Invitations/Get.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Classroom/Invitations/Get.hs
@@ -0,0 +1,170 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.Classroom.Invitations.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)
+--
+-- Returns an invitation. This method returns the following error codes: *
+-- \`PERMISSION_DENIED\` if the requesting user is not permitted to view
+-- the requested invitation or for access errors. * \`NOT_FOUND\` if no
+-- invitation exists with the requested ID.
+--
+-- /See:/ <https://developers.google.com/classroom/ Google Classroom API Reference> for @classroom.invitations.get@.
+module Network.Google.Resource.Classroom.Invitations.Get
+    (
+    -- * REST Resource
+      InvitationsGetResource
+
+    -- * Creating a Request
+    , invitationsGet
+    , InvitationsGet
+
+    -- * Request Lenses
+    , igXgafv
+    , igUploadProtocol
+    , igPp
+    , igAccessToken
+    , igUploadType
+    , igBearerToken
+    , igId
+    , igCallback
+    ) where
+
+import           Network.Google.Classroom.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @classroom.invitations.get@ method which the
+-- 'InvitationsGet' request conforms to.
+type InvitationsGetResource =
+     "v1" :>
+       "invitations" :>
+         Capture "id" Text :>
+           QueryParam "$.xgafv" Text :>
+             QueryParam "upload_protocol" Text :>
+               QueryParam "pp" Bool :>
+                 QueryParam "access_token" Text :>
+                   QueryParam "uploadType" Text :>
+                     QueryParam "bearer_token" Text :>
+                       QueryParam "callback" Text :>
+                         QueryParam "alt" AltJSON :> Get '[JSON] Invitation
+
+-- | Returns an invitation. This method returns the following error codes: *
+-- \`PERMISSION_DENIED\` if the requesting user is not permitted to view
+-- the requested invitation or for access errors. * \`NOT_FOUND\` if no
+-- invitation exists with the requested ID.
+--
+-- /See:/ 'invitationsGet' smart constructor.
+data InvitationsGet = InvitationsGet
+    { _igXgafv          :: !(Maybe Text)
+    , _igUploadProtocol :: !(Maybe Text)
+    , _igPp             :: !Bool
+    , _igAccessToken    :: !(Maybe Text)
+    , _igUploadType     :: !(Maybe Text)
+    , _igBearerToken    :: !(Maybe Text)
+    , _igId             :: !Text
+    , _igCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'InvitationsGet' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'igXgafv'
+--
+-- * 'igUploadProtocol'
+--
+-- * 'igPp'
+--
+-- * 'igAccessToken'
+--
+-- * 'igUploadType'
+--
+-- * 'igBearerToken'
+--
+-- * 'igId'
+--
+-- * 'igCallback'
+invitationsGet
+    :: Text -- ^ 'igId'
+    -> InvitationsGet
+invitationsGet pIgId_ =
+    InvitationsGet
+    { _igXgafv = Nothing
+    , _igUploadProtocol = Nothing
+    , _igPp = True
+    , _igAccessToken = Nothing
+    , _igUploadType = Nothing
+    , _igBearerToken = Nothing
+    , _igId = pIgId_
+    , _igCallback = Nothing
+    }
+
+-- | V1 error format.
+igXgafv :: Lens' InvitationsGet (Maybe Text)
+igXgafv = lens _igXgafv (\ s a -> s{_igXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+igUploadProtocol :: Lens' InvitationsGet (Maybe Text)
+igUploadProtocol
+  = lens _igUploadProtocol
+      (\ s a -> s{_igUploadProtocol = a})
+
+-- | Pretty-print response.
+igPp :: Lens' InvitationsGet Bool
+igPp = lens _igPp (\ s a -> s{_igPp = a})
+
+-- | OAuth access token.
+igAccessToken :: Lens' InvitationsGet (Maybe Text)
+igAccessToken
+  = lens _igAccessToken
+      (\ s a -> s{_igAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+igUploadType :: Lens' InvitationsGet (Maybe Text)
+igUploadType
+  = lens _igUploadType (\ s a -> s{_igUploadType = a})
+
+-- | OAuth bearer token.
+igBearerToken :: Lens' InvitationsGet (Maybe Text)
+igBearerToken
+  = lens _igBearerToken
+      (\ s a -> s{_igBearerToken = a})
+
+-- | Identifier of the invitation to return.
+igId :: Lens' InvitationsGet Text
+igId = lens _igId (\ s a -> s{_igId = a})
+
+-- | JSONP
+igCallback :: Lens' InvitationsGet (Maybe Text)
+igCallback
+  = lens _igCallback (\ s a -> s{_igCallback = a})
+
+instance GoogleRequest InvitationsGet where
+        type Rs InvitationsGet = Invitation
+        requestClient InvitationsGet{..}
+          = go _igId _igXgafv _igUploadProtocol (Just _igPp)
+              _igAccessToken
+              _igUploadType
+              _igBearerToken
+              _igCallback
+              (Just AltJSON)
+              classroomService
+          where go
+                  = buildClient (Proxy :: Proxy InvitationsGetResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Classroom/Invitations/List.hs b/gen/Network/Google/Resource/Classroom/Invitations/List.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Classroom/Invitations/List.hs
@@ -0,0 +1,218 @@
+{-# 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.Classroom.Invitations.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 a list of invitations that the requesting user is permitted to
+-- view, restricted to those that match the list request. *Note:* At least
+-- one of \`user_id\` or \`course_id\` must be supplied. Both fields can be
+-- supplied. This method returns the following error codes: *
+-- \`PERMISSION_DENIED\` for access errors.
+--
+-- /See:/ <https://developers.google.com/classroom/ Google Classroom API Reference> for @classroom.invitations.list@.
+module Network.Google.Resource.Classroom.Invitations.List
+    (
+    -- * REST Resource
+      InvitationsListResource
+
+    -- * Creating a Request
+    , invitationsList
+    , InvitationsList
+
+    -- * Request Lenses
+    , ilXgafv
+    , ilUploadProtocol
+    , ilPp
+    , ilCourseId
+    , ilAccessToken
+    , ilUploadType
+    , ilUserId
+    , ilBearerToken
+    , ilPageToken
+    , ilPageSize
+    , ilCallback
+    ) where
+
+import           Network.Google.Classroom.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @classroom.invitations.list@ method which the
+-- 'InvitationsList' request conforms to.
+type InvitationsListResource =
+     "v1" :>
+       "invitations" :>
+         QueryParam "$.xgafv" Text :>
+           QueryParam "upload_protocol" Text :>
+             QueryParam "pp" Bool :>
+               QueryParam "courseId" Text :>
+                 QueryParam "access_token" Text :>
+                   QueryParam "uploadType" Text :>
+                     QueryParam "userId" Text :>
+                       QueryParam "bearer_token" Text :>
+                         QueryParam "pageToken" Text :>
+                           QueryParam "pageSize" (Textual Int32) :>
+                             QueryParam "callback" Text :>
+                               QueryParam "alt" AltJSON :>
+                                 Get '[JSON] ListInvitationsResponse
+
+-- | Returns a list of invitations that the requesting user is permitted to
+-- view, restricted to those that match the list request. *Note:* At least
+-- one of \`user_id\` or \`course_id\` must be supplied. Both fields can be
+-- supplied. This method returns the following error codes: *
+-- \`PERMISSION_DENIED\` for access errors.
+--
+-- /See:/ 'invitationsList' smart constructor.
+data InvitationsList = InvitationsList
+    { _ilXgafv          :: !(Maybe Text)
+    , _ilUploadProtocol :: !(Maybe Text)
+    , _ilPp             :: !Bool
+    , _ilCourseId       :: !(Maybe Text)
+    , _ilAccessToken    :: !(Maybe Text)
+    , _ilUploadType     :: !(Maybe Text)
+    , _ilUserId         :: !(Maybe Text)
+    , _ilBearerToken    :: !(Maybe Text)
+    , _ilPageToken      :: !(Maybe Text)
+    , _ilPageSize       :: !(Maybe (Textual Int32))
+    , _ilCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'InvitationsList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ilXgafv'
+--
+-- * 'ilUploadProtocol'
+--
+-- * 'ilPp'
+--
+-- * 'ilCourseId'
+--
+-- * 'ilAccessToken'
+--
+-- * 'ilUploadType'
+--
+-- * 'ilUserId'
+--
+-- * 'ilBearerToken'
+--
+-- * 'ilPageToken'
+--
+-- * 'ilPageSize'
+--
+-- * 'ilCallback'
+invitationsList
+    :: InvitationsList
+invitationsList =
+    InvitationsList
+    { _ilXgafv = Nothing
+    , _ilUploadProtocol = Nothing
+    , _ilPp = True
+    , _ilCourseId = Nothing
+    , _ilAccessToken = Nothing
+    , _ilUploadType = Nothing
+    , _ilUserId = Nothing
+    , _ilBearerToken = Nothing
+    , _ilPageToken = Nothing
+    , _ilPageSize = Nothing
+    , _ilCallback = Nothing
+    }
+
+-- | V1 error format.
+ilXgafv :: Lens' InvitationsList (Maybe Text)
+ilXgafv = lens _ilXgafv (\ s a -> s{_ilXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+ilUploadProtocol :: Lens' InvitationsList (Maybe Text)
+ilUploadProtocol
+  = lens _ilUploadProtocol
+      (\ s a -> s{_ilUploadProtocol = a})
+
+-- | Pretty-print response.
+ilPp :: Lens' InvitationsList Bool
+ilPp = lens _ilPp (\ s a -> s{_ilPp = a})
+
+-- | Restricts returned invitations to those for a course with the specified
+-- identifier.
+ilCourseId :: Lens' InvitationsList (Maybe Text)
+ilCourseId
+  = lens _ilCourseId (\ s a -> s{_ilCourseId = a})
+
+-- | OAuth access token.
+ilAccessToken :: Lens' InvitationsList (Maybe Text)
+ilAccessToken
+  = lens _ilAccessToken
+      (\ s a -> s{_ilAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+ilUploadType :: Lens' InvitationsList (Maybe Text)
+ilUploadType
+  = lens _ilUploadType (\ s a -> s{_ilUploadType = a})
+
+-- | Restricts returned invitations to those for a specific user. The
+-- identifier can be one of the following: * the numeric identifier for the
+-- user * the email address of the user * the string literal \`\"me\"\`,
+-- indicating the requesting user
+ilUserId :: Lens' InvitationsList (Maybe Text)
+ilUserId = lens _ilUserId (\ s a -> s{_ilUserId = a})
+
+-- | OAuth bearer token.
+ilBearerToken :: Lens' InvitationsList (Maybe Text)
+ilBearerToken
+  = lens _ilBearerToken
+      (\ s a -> s{_ilBearerToken = a})
+
+-- | nextPageToken value returned from a previous list call, indicating that
+-- the subsequent page of results should be returned. The list request must
+-- be otherwise identical to the one that resulted in this token.
+ilPageToken :: Lens' InvitationsList (Maybe Text)
+ilPageToken
+  = lens _ilPageToken (\ s a -> s{_ilPageToken = a})
+
+-- | Maximum number of items to return. Zero means no maximum. The server may
+-- return fewer than the specified number of results.
+ilPageSize :: Lens' InvitationsList (Maybe Int32)
+ilPageSize
+  = lens _ilPageSize (\ s a -> s{_ilPageSize = a}) .
+      mapping _Coerce
+
+-- | JSONP
+ilCallback :: Lens' InvitationsList (Maybe Text)
+ilCallback
+  = lens _ilCallback (\ s a -> s{_ilCallback = a})
+
+instance GoogleRequest InvitationsList where
+        type Rs InvitationsList = ListInvitationsResponse
+        requestClient InvitationsList{..}
+          = go _ilXgafv _ilUploadProtocol (Just _ilPp)
+              _ilCourseId
+              _ilAccessToken
+              _ilUploadType
+              _ilUserId
+              _ilBearerToken
+              _ilPageToken
+              _ilPageSize
+              _ilCallback
+              (Just AltJSON)
+              classroomService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy InvitationsListResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Classroom/UserProFiles/Get.hs b/gen/Network/Google/Resource/Classroom/UserProFiles/Get.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Classroom/UserProFiles/Get.hs
@@ -0,0 +1,177 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.Classroom.UserProFiles.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)
+--
+-- Returns a user profile. This method returns the following error codes: *
+-- \`PERMISSION_DENIED\` if the requesting user is not permitted to access
+-- this user profile or if no profile exists with the requested ID or for
+-- access errors.
+--
+-- /See:/ <https://developers.google.com/classroom/ Google Classroom API Reference> for @classroom.userProfiles.get@.
+module Network.Google.Resource.Classroom.UserProFiles.Get
+    (
+    -- * REST Resource
+      UserProFilesGetResource
+
+    -- * Creating a Request
+    , userProFilesGet
+    , UserProFilesGet
+
+    -- * Request Lenses
+    , upfgXgafv
+    , upfgUploadProtocol
+    , upfgPp
+    , upfgAccessToken
+    , upfgUploadType
+    , upfgUserId
+    , upfgBearerToken
+    , upfgCallback
+    ) where
+
+import           Network.Google.Classroom.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @classroom.userProfiles.get@ method which the
+-- 'UserProFilesGet' request conforms to.
+type UserProFilesGetResource =
+     "v1" :>
+       "userProfiles" :>
+         Capture "userId" Text :>
+           QueryParam "$.xgafv" Text :>
+             QueryParam "upload_protocol" Text :>
+               QueryParam "pp" Bool :>
+                 QueryParam "access_token" Text :>
+                   QueryParam "uploadType" Text :>
+                     QueryParam "bearer_token" Text :>
+                       QueryParam "callback" Text :>
+                         QueryParam "alt" AltJSON :> Get '[JSON] UserProFile
+
+-- | Returns a user profile. This method returns the following error codes: *
+-- \`PERMISSION_DENIED\` if the requesting user is not permitted to access
+-- this user profile or if no profile exists with the requested ID or for
+-- access errors.
+--
+-- /See:/ 'userProFilesGet' smart constructor.
+data UserProFilesGet = UserProFilesGet
+    { _upfgXgafv          :: !(Maybe Text)
+    , _upfgUploadProtocol :: !(Maybe Text)
+    , _upfgPp             :: !Bool
+    , _upfgAccessToken    :: !(Maybe Text)
+    , _upfgUploadType     :: !(Maybe Text)
+    , _upfgUserId         :: !Text
+    , _upfgBearerToken    :: !(Maybe Text)
+    , _upfgCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'UserProFilesGet' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'upfgXgafv'
+--
+-- * 'upfgUploadProtocol'
+--
+-- * 'upfgPp'
+--
+-- * 'upfgAccessToken'
+--
+-- * 'upfgUploadType'
+--
+-- * 'upfgUserId'
+--
+-- * 'upfgBearerToken'
+--
+-- * 'upfgCallback'
+userProFilesGet
+    :: Text -- ^ 'upfgUserId'
+    -> UserProFilesGet
+userProFilesGet pUpfgUserId_ =
+    UserProFilesGet
+    { _upfgXgafv = Nothing
+    , _upfgUploadProtocol = Nothing
+    , _upfgPp = True
+    , _upfgAccessToken = Nothing
+    , _upfgUploadType = Nothing
+    , _upfgUserId = pUpfgUserId_
+    , _upfgBearerToken = Nothing
+    , _upfgCallback = Nothing
+    }
+
+-- | V1 error format.
+upfgXgafv :: Lens' UserProFilesGet (Maybe Text)
+upfgXgafv
+  = lens _upfgXgafv (\ s a -> s{_upfgXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+upfgUploadProtocol :: Lens' UserProFilesGet (Maybe Text)
+upfgUploadProtocol
+  = lens _upfgUploadProtocol
+      (\ s a -> s{_upfgUploadProtocol = a})
+
+-- | Pretty-print response.
+upfgPp :: Lens' UserProFilesGet Bool
+upfgPp = lens _upfgPp (\ s a -> s{_upfgPp = a})
+
+-- | OAuth access token.
+upfgAccessToken :: Lens' UserProFilesGet (Maybe Text)
+upfgAccessToken
+  = lens _upfgAccessToken
+      (\ s a -> s{_upfgAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+upfgUploadType :: Lens' UserProFilesGet (Maybe Text)
+upfgUploadType
+  = lens _upfgUploadType
+      (\ s a -> s{_upfgUploadType = a})
+
+-- | Identifier of the profile to return. The identifier can be one of the
+-- following: * the numeric identifier for the user * the email address of
+-- the user * the string literal \`\"me\"\`, indicating the requesting user
+upfgUserId :: Lens' UserProFilesGet Text
+upfgUserId
+  = lens _upfgUserId (\ s a -> s{_upfgUserId = a})
+
+-- | OAuth bearer token.
+upfgBearerToken :: Lens' UserProFilesGet (Maybe Text)
+upfgBearerToken
+  = lens _upfgBearerToken
+      (\ s a -> s{_upfgBearerToken = a})
+
+-- | JSONP
+upfgCallback :: Lens' UserProFilesGet (Maybe Text)
+upfgCallback
+  = lens _upfgCallback (\ s a -> s{_upfgCallback = a})
+
+instance GoogleRequest UserProFilesGet where
+        type Rs UserProFilesGet = UserProFile
+        requestClient UserProFilesGet{..}
+          = go _upfgUserId _upfgXgafv _upfgUploadProtocol
+              (Just _upfgPp)
+              _upfgAccessToken
+              _upfgUploadType
+              _upfgBearerToken
+              _upfgCallback
+              (Just AltJSON)
+              classroomService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy UserProFilesGetResource)
+                      mempty
diff --git a/gogol-classroom.cabal b/gogol-classroom.cabal
new file mode 100644
--- /dev/null
+++ b/gogol-classroom.cabal
@@ -0,0 +1,68 @@
+name:                  gogol-classroom
+version:               0.0.1
+synopsis:              Google Classroom 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:
+    Google Classroom API
+    .
+    /Warning:/ This is an experimental prototype/preview release which is still
+    under exploratory development and not intended for public use, caveat emptor!
+    .
+    This library is compatible with version @v1@
+    of the API.
+
+source-repository head
+    type:     git
+    location: git://github.com/brendanhay/gogol.git
+
+library
+    default-language:  Haskell2010
+    hs-source-dirs:    src gen
+
+    ghc-options:       -Wall
+
+    exposed-modules:
+          Network.Google.Classroom
+        , Network.Google.Classroom.Types
+        , Network.Google.Resource.Classroom.Courses.Aliases.Create
+        , Network.Google.Resource.Classroom.Courses.Aliases.Delete
+        , Network.Google.Resource.Classroom.Courses.Aliases.List
+        , Network.Google.Resource.Classroom.Courses.Create
+        , Network.Google.Resource.Classroom.Courses.Delete
+        , Network.Google.Resource.Classroom.Courses.Get
+        , Network.Google.Resource.Classroom.Courses.List
+        , Network.Google.Resource.Classroom.Courses.Patch
+        , Network.Google.Resource.Classroom.Courses.Students.Create
+        , Network.Google.Resource.Classroom.Courses.Students.Delete
+        , Network.Google.Resource.Classroom.Courses.Students.Get
+        , Network.Google.Resource.Classroom.Courses.Students.List
+        , Network.Google.Resource.Classroom.Courses.Teachers.Create
+        , Network.Google.Resource.Classroom.Courses.Teachers.Delete
+        , Network.Google.Resource.Classroom.Courses.Teachers.Get
+        , Network.Google.Resource.Classroom.Courses.Teachers.List
+        , Network.Google.Resource.Classroom.Courses.Update
+        , Network.Google.Resource.Classroom.Invitations.Accept
+        , Network.Google.Resource.Classroom.Invitations.Create
+        , Network.Google.Resource.Classroom.Invitations.Delete
+        , Network.Google.Resource.Classroom.Invitations.Get
+        , Network.Google.Resource.Classroom.Invitations.List
+        , Network.Google.Resource.Classroom.UserProFiles.Get
+
+    other-modules:
+          Network.Google.Classroom.Types.Product
+        , Network.Google.Classroom.Types.Sum
+
+    build-depends:
+          gogol-core == 0.0.1.*
+        , base       >= 4.7 && < 5
