diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -8,7 +8,7 @@
 
 ## Version
 
-`0.0.1`
+`0.1.0`
 
 
 ## Description
@@ -18,9 +18,9 @@
 
 ## Contribute
 
-For any problems, comments, or feedback please create an issue [here on GitHub](https://github.com/brendanhay/amazonka/issues).
+For any problems, comments, or feedback please create an issue [here on GitHub](https://github.com/brendanhay/gogol/issues).
 
-> _Note:_ this library is an auto-generated Haskell package. Please see `amazonka-gen` for more information.
+> _Note:_ this library is an auto-generated Haskell package. Please see `gogol-gen` for more information.
 
 
 ## Licence
diff --git a/gen/Network/Google/Classroom.hs b/gen/Network/Google/Classroom.hs
--- a/gen/Network/Google/Classroom.hs
+++ b/gen/Network/Google/Classroom.hs
@@ -7,13 +7,13 @@
 
 -- |
 -- Module      : Network.Google.Classroom
--- Copyright   : (c) 2015 Brendan Hay
+-- Copyright   : (c) 2015-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Google Classroom API
+-- Manages classes, rosters, and invitations in Google Classroom.
 --
 -- /See:/ <https://developers.google.com/classroom/ Google Classroom API Reference>
 module Network.Google.Classroom
@@ -21,6 +21,21 @@
     -- * Service Configuration
       classroomService
 
+    -- * OAuth Scopes
+    , classroomRostersReadOnlyScope
+    , classroomCoursesScope
+    , classroomCourseworkStudentsReadOnlyScope
+    , classroomProFileEmailsScope
+    , classroomProFilePhotosScope
+    , classroomCourseworkMeScope
+    , classroomCourseWorkReadOnlyScope
+    , classroomStudentSubmissionsStudentsReadOnlyScope
+    , classroomRostersScope
+    , classroomCoursesReadOnlyScope
+    , classroomCourseworkStudentsScope
+    , classroomCourseworkMeReadOnlyScope
+    , classroomStudentSubmissionsMeReadOnlyScope
+
     -- * API Declaration
     , ClassroomAPI
 
@@ -35,6 +50,36 @@
     -- ** classroom.courses.aliases.list
     , module Network.Google.Resource.Classroom.Courses.Aliases.List
 
+    -- ** classroom.courses.courseWork.create
+    , module Network.Google.Resource.Classroom.Courses.CourseWork.Create
+
+    -- ** classroom.courses.courseWork.get
+    , module Network.Google.Resource.Classroom.Courses.CourseWork.Get
+
+    -- ** classroom.courses.courseWork.list
+    , module Network.Google.Resource.Classroom.Courses.CourseWork.List
+
+    -- ** classroom.courses.courseWork.studentSubmissions.get
+    , module Network.Google.Resource.Classroom.Courses.CourseWork.StudentSubmissions.Get
+
+    -- ** classroom.courses.courseWork.studentSubmissions.list
+    , module Network.Google.Resource.Classroom.Courses.CourseWork.StudentSubmissions.List
+
+    -- ** classroom.courses.courseWork.studentSubmissions.modifyAttachments
+    , module Network.Google.Resource.Classroom.Courses.CourseWork.StudentSubmissions.ModifyAttachments
+
+    -- ** classroom.courses.courseWork.studentSubmissions.patch
+    , module Network.Google.Resource.Classroom.Courses.CourseWork.StudentSubmissions.Patch
+
+    -- ** classroom.courses.courseWork.studentSubmissions.reclaim
+    , module Network.Google.Resource.Classroom.Courses.CourseWork.StudentSubmissions.Reclaim
+
+    -- ** classroom.courses.courseWork.studentSubmissions.return
+    , module Network.Google.Resource.Classroom.Courses.CourseWork.StudentSubmissions.Return
+
+    -- ** classroom.courses.courseWork.studentSubmissions.turnIn
+    , module Network.Google.Resource.Classroom.Courses.CourseWork.StudentSubmissions.TurnIn
+
     -- ** classroom.courses.create
     , module Network.Google.Resource.Classroom.Courses.Create
 
@@ -103,6 +148,49 @@
     , lcarNextPageToken
     , lcarAliases
 
+    -- ** CourseWork
+    , CourseWork
+    , courseWork
+    , cwCreationTime
+    , cwState
+    , cwMaterials
+    , cwCourseId
+    , cwMaxPoints
+    , cwWorkType
+    , cwDueTime
+    , cwAssociatedWithDeveloper
+    , cwUpdateTime
+    , cwMultipleChoiceQuestion
+    , cwId
+    , cwSubmissionModificationMode
+    , cwDueDate
+    , cwTitle
+    , cwAlternateLink
+    , cwAssignment
+    , cwDescription
+
+    -- ** DriveFile
+    , DriveFile
+    , driveFile
+    , dfThumbnailURL
+    , dfId
+    , dfTitle
+    , dfAlternateLink
+
+    -- ** ReturnStudentSubmissionRequest
+    , ReturnStudentSubmissionRequest
+    , returnStudentSubmissionRequest
+
+    -- ** ReclaimStudentSubmissionRequest
+    , ReclaimStudentSubmissionRequest
+    , reclaimStudentSubmissionRequest
+
+    -- ** ListCourseWorkResponse
+    , ListCourseWorkResponse
+    , listCourseWorkResponse
+    , lcwrCourseWork
+    , lcwrNextPageToken
+
     -- ** Empty
     , Empty
     , empty
@@ -112,12 +200,61 @@
     , globalPermission
     , gpPermission
 
+    -- ** Link
+    , Link
+    , link
+    , lThumbnailURL
+    , lURL
+    , lTitle
+
+    -- ** AssignmentSubmission
+    , AssignmentSubmission
+    , assignmentSubmission
+    , asAttachments
+
+    -- ** ModifyAttachmentsRequest
+    , ModifyAttachmentsRequest
+    , modifyAttachmentsRequest
+    , marAddAttachments
+
+    -- ** ListStudentSubmissionsResponse
+    , ListStudentSubmissionsResponse
+    , listStudentSubmissionsResponse
+    , lssrNextPageToken
+    , lssrStudentSubmissions
+
+    -- ** Material
+    , Material
+    , material
+    , mDriveFile
+    , mLink
+    , mYouTubeVideo
+    , mForm
+
+    -- ** MultipleChoiceSubmission
+    , MultipleChoiceSubmission
+    , multipleChoiceSubmission
+    , mcsAnswer
+
     -- ** ListInvitationsResponse
     , ListInvitationsResponse
     , listInvitationsResponse
     , lirNextPageToken
     , lirInvitations
 
+    -- ** CourseMaterial
+    , CourseMaterial
+    , courseMaterial
+    , cmDriveFile
+    , cmLink
+    , cmYouTubeVideo
+    , cmForm
+
+    -- ** ShortAnswerSubmission
+    , ShortAnswerSubmission
+    , shortAnswerSubmission
+    , sasAnswer
+
     -- ** Invitation
     , Invitation
     , invitation
@@ -126,6 +263,49 @@
     , iRole
     , iId
 
+    -- ** Attachment
+    , Attachment
+    , attachment
+    , aDriveFile
+    , aLink
+    , aYouTubeVideo
+    , aForm
+
+    -- ** StudentSubmission
+    , StudentSubmission
+    , studentSubmission
+    , ssCreationTime
+    , ssLate
+    , ssState
+    , ssCourseId
+    , ssMultipleChoiceSubmission
+    , ssAssignmentSubmission
+    , ssShortAnswerSubmission
+    , ssAssociatedWithDeveloper
+    , ssUserId
+    , ssUpdateTime
+    , ssCourseWorkType
+    , ssAssignedGrade
+    , ssId
+    , ssDraftGrade
+    , ssAlternateLink
+    , ssCourseWorkId
+
+    -- ** Date
+    , Date
+    , date
+    , dDay
+    , dYear
+    , dMonth
+
+    -- ** YouTubeVideo
+    , YouTubeVideo
+    , youTubeVideo
+    , ytvThumbnailURL
+    , ytvId
+    , ytvTitle
+    , ytvAlternateLink
+
     -- ** Teacher
     , Teacher
     , teacher
@@ -133,6 +313,12 @@
     , tProFile
     , tUserId
 
+    -- ** CourseMaterialSet
+    , CourseMaterialSet
+    , courseMaterialSet
+    , cmsMaterials
+    , cmsTitle
+
     -- ** Name
     , Name
     , name
@@ -146,6 +332,10 @@
     , lcrNextPageToken
     , lcrCourses
 
+    -- ** TurnInStudentSubmissionRequest
+    , TurnInStudentSubmissionRequest
+    , turnInStudentSubmissionRequest
+
     -- ** UserProFile
     , UserProFile
     , userProFile
@@ -155,11 +345,26 @@
     , upfId
     , upfPermissions
 
+    -- ** DriveFolder
+    , DriveFolder
+    , driveFolder
+    , dId
+    , dTitle
+    , dAlternateLink
+
+    -- ** MultipleChoiceQuestion
+    , MultipleChoiceQuestion
+    , multipleChoiceQuestion
+    , mcqChoices
+
     -- ** Course
     , Course
     , course
     , cCreationTime
     , cRoom
+    , cCourseMaterialSets
+    , cTeacherGroupEmail
+    , cTeacherFolder
     , cCourseState
     , cEnrollmentCode
     , cUpdateTime
@@ -167,21 +372,49 @@
     , cName
     , cId
     , cAlternateLink
+    , cCourseGroupEmail
     , cDescription
     , cDescriptionHeading
     , cSection
 
+    -- ** TimeOfDay'
+    , TimeOfDay'
+    , timeOfDay
+    , todNanos
+    , todHours
+    , todMinutes
+    , todSeconds
+
+    -- ** Assignment
+    , Assignment
+    , assignment
+    , aStudentWorkFolder
+
     -- ** ListStudentsResponse
     , ListStudentsResponse
     , listStudentsResponse
     , lsrNextPageToken
     , lsrStudents
 
+    -- ** SharedDriveFile
+    , SharedDriveFile
+    , sharedDriveFile
+    , sdfDriveFile
+    , sdfShareMode
+
     -- ** CourseAlias
     , CourseAlias
     , courseAlias
     , caAlias
 
+    -- ** Form
+    , Form
+    , form
+    , fThumbnailURL
+    , fFormURL
+    , fTitle
+    , fResponseURL
+
     -- ** ListTeachersResponse
     , ListTeachersResponse
     , listTeachersResponse
@@ -193,6 +426,7 @@
     , student
     , sCourseId
     , sProFile
+    , sStudentWorkFolder
     , sUserId
     ) where
 
@@ -201,6 +435,16 @@
 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.CourseWork.Create
+import           Network.Google.Resource.Classroom.Courses.CourseWork.Get
+import           Network.Google.Resource.Classroom.Courses.CourseWork.List
+import           Network.Google.Resource.Classroom.Courses.CourseWork.StudentSubmissions.Get
+import           Network.Google.Resource.Classroom.Courses.CourseWork.StudentSubmissions.List
+import           Network.Google.Resource.Classroom.Courses.CourseWork.StudentSubmissions.ModifyAttachments
+import           Network.Google.Resource.Classroom.Courses.CourseWork.StudentSubmissions.Patch
+import           Network.Google.Resource.Classroom.Courses.CourseWork.StudentSubmissions.Reclaim
+import           Network.Google.Resource.Classroom.Courses.CourseWork.StudentSubmissions.Return
+import           Network.Google.Resource.Classroom.Courses.CourseWork.StudentSubmissions.TurnIn
 import           Network.Google.Resource.Classroom.Courses.Create
 import           Network.Google.Resource.Classroom.Courses.Delete
 import           Network.Google.Resource.Classroom.Courses.Get
@@ -233,6 +477,20 @@
        :<|> InvitationsGetResource
        :<|> InvitationsCreateResource
        :<|> InvitationsDeleteResource
+       :<|>
+       CoursesCourseWorkStudentSubmissionsReturnResource
+       :<|> CoursesCourseWorkStudentSubmissionsListResource
+       :<|>
+       CoursesCourseWorkStudentSubmissionsReclaimResource
+       :<|> CoursesCourseWorkStudentSubmissionsPatchResource
+       :<|> CoursesCourseWorkStudentSubmissionsGetResource
+       :<|>
+       CoursesCourseWorkStudentSubmissionsTurnInResource
+       :<|>
+       CoursesCourseWorkStudentSubmissionsModifyAttachmentsResource
+       :<|> CoursesCourseWorkListResource
+       :<|> CoursesCourseWorkGetResource
+       :<|> CoursesCourseWorkCreateResource
        :<|> CoursesTeachersListResource
        :<|> CoursesTeachersGetResource
        :<|> CoursesTeachersCreateResource
diff --git a/gen/Network/Google/Classroom/Types.hs b/gen/Network/Google/Classroom/Types.hs
--- a/gen/Network/Google/Classroom/Types.hs
+++ b/gen/Network/Google/Classroom/Types.hs
@@ -1,3 +1,4 @@
+{-# LANGUAGE DataKinds          #-}
 {-# LANGUAGE DeriveDataTypeable #-}
 {-# LANGUAGE DeriveGeneric      #-}
 {-# LANGUAGE NoImplicitPrelude  #-}
@@ -7,7 +8,7 @@
 
 -- |
 -- Module      : Network.Google.Classroom.Types
--- Copyright   : (c) 2015 Brendan Hay
+-- Copyright   : (c) 2015-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -19,12 +20,19 @@
       classroomService
 
     -- * OAuth Scopes
-    , classroomRostersReadonlyScope
+    , classroomRostersReadOnlyScope
     , classroomCoursesScope
-    , classroomProfileEmailsScope
-    , classroomProfilePhotosScope
+    , classroomCourseworkStudentsReadOnlyScope
+    , classroomProFileEmailsScope
+    , classroomProFilePhotosScope
+    , classroomCourseworkMeScope
+    , classroomCourseWorkReadOnlyScope
+    , classroomStudentSubmissionsStudentsReadOnlyScope
     , classroomRostersScope
-    , classroomCoursesReadonlyScope
+    , classroomCoursesReadOnlyScope
+    , classroomCourseworkStudentsScope
+    , classroomCourseworkMeReadOnlyScope
+    , classroomStudentSubmissionsMeReadOnlyScope
 
     -- * ListCourseAliasesResponse
     , ListCourseAliasesResponse
@@ -32,6 +40,49 @@
     , lcarNextPageToken
     , lcarAliases
 
+    -- * CourseWork
+    , CourseWork
+    , courseWork
+    , cwCreationTime
+    , cwState
+    , cwMaterials
+    , cwCourseId
+    , cwMaxPoints
+    , cwWorkType
+    , cwDueTime
+    , cwAssociatedWithDeveloper
+    , cwUpdateTime
+    , cwMultipleChoiceQuestion
+    , cwId
+    , cwSubmissionModificationMode
+    , cwDueDate
+    , cwTitle
+    , cwAlternateLink
+    , cwAssignment
+    , cwDescription
+
+    -- * DriveFile
+    , DriveFile
+    , driveFile
+    , dfThumbnailURL
+    , dfId
+    , dfTitle
+    , dfAlternateLink
+
+    -- * ReturnStudentSubmissionRequest
+    , ReturnStudentSubmissionRequest
+    , returnStudentSubmissionRequest
+
+    -- * ReclaimStudentSubmissionRequest
+    , ReclaimStudentSubmissionRequest
+    , reclaimStudentSubmissionRequest
+
+    -- * ListCourseWorkResponse
+    , ListCourseWorkResponse
+    , listCourseWorkResponse
+    , lcwrCourseWork
+    , lcwrNextPageToken
+
     -- * Empty
     , Empty
     , empty
@@ -41,12 +92,61 @@
     , globalPermission
     , gpPermission
 
+    -- * Link
+    , Link
+    , link
+    , lThumbnailURL
+    , lURL
+    , lTitle
+
+    -- * AssignmentSubmission
+    , AssignmentSubmission
+    , assignmentSubmission
+    , asAttachments
+
+    -- * ModifyAttachmentsRequest
+    , ModifyAttachmentsRequest
+    , modifyAttachmentsRequest
+    , marAddAttachments
+
+    -- * ListStudentSubmissionsResponse
+    , ListStudentSubmissionsResponse
+    , listStudentSubmissionsResponse
+    , lssrNextPageToken
+    , lssrStudentSubmissions
+
+    -- * Material
+    , Material
+    , material
+    , mDriveFile
+    , mLink
+    , mYouTubeVideo
+    , mForm
+
+    -- * MultipleChoiceSubmission
+    , MultipleChoiceSubmission
+    , multipleChoiceSubmission
+    , mcsAnswer
+
     -- * ListInvitationsResponse
     , ListInvitationsResponse
     , listInvitationsResponse
     , lirNextPageToken
     , lirInvitations
 
+    -- * CourseMaterial
+    , CourseMaterial
+    , courseMaterial
+    , cmDriveFile
+    , cmLink
+    , cmYouTubeVideo
+    , cmForm
+
+    -- * ShortAnswerSubmission
+    , ShortAnswerSubmission
+    , shortAnswerSubmission
+    , sasAnswer
+
     -- * Invitation
     , Invitation
     , invitation
@@ -55,6 +155,49 @@
     , iRole
     , iId
 
+    -- * Attachment
+    , Attachment
+    , attachment
+    , aDriveFile
+    , aLink
+    , aYouTubeVideo
+    , aForm
+
+    -- * StudentSubmission
+    , StudentSubmission
+    , studentSubmission
+    , ssCreationTime
+    , ssLate
+    , ssState
+    , ssCourseId
+    , ssMultipleChoiceSubmission
+    , ssAssignmentSubmission
+    , ssShortAnswerSubmission
+    , ssAssociatedWithDeveloper
+    , ssUserId
+    , ssUpdateTime
+    , ssCourseWorkType
+    , ssAssignedGrade
+    , ssId
+    , ssDraftGrade
+    , ssAlternateLink
+    , ssCourseWorkId
+
+    -- * Date
+    , Date
+    , date
+    , dDay
+    , dYear
+    , dMonth
+
+    -- * YouTubeVideo
+    , YouTubeVideo
+    , youTubeVideo
+    , ytvThumbnailURL
+    , ytvId
+    , ytvTitle
+    , ytvAlternateLink
+
     -- * Teacher
     , Teacher
     , teacher
@@ -62,6 +205,12 @@
     , tProFile
     , tUserId
 
+    -- * CourseMaterialSet
+    , CourseMaterialSet
+    , courseMaterialSet
+    , cmsMaterials
+    , cmsTitle
+
     -- * Name
     , Name
     , name
@@ -75,6 +224,10 @@
     , lcrNextPageToken
     , lcrCourses
 
+    -- * TurnInStudentSubmissionRequest
+    , TurnInStudentSubmissionRequest
+    , turnInStudentSubmissionRequest
+
     -- * UserProFile
     , UserProFile
     , userProFile
@@ -84,11 +237,26 @@
     , upfId
     , upfPermissions
 
+    -- * DriveFolder
+    , DriveFolder
+    , driveFolder
+    , dId
+    , dTitle
+    , dAlternateLink
+
+    -- * MultipleChoiceQuestion
+    , MultipleChoiceQuestion
+    , multipleChoiceQuestion
+    , mcqChoices
+
     -- * Course
     , Course
     , course
     , cCreationTime
     , cRoom
+    , cCourseMaterialSets
+    , cTeacherGroupEmail
+    , cTeacherFolder
     , cCourseState
     , cEnrollmentCode
     , cUpdateTime
@@ -96,21 +264,49 @@
     , cName
     , cId
     , cAlternateLink
+    , cCourseGroupEmail
     , cDescription
     , cDescriptionHeading
     , cSection
 
+    -- * TimeOfDay'
+    , TimeOfDay'
+    , timeOfDay
+    , todNanos
+    , todHours
+    , todMinutes
+    , todSeconds
+
+    -- * Assignment
+    , Assignment
+    , assignment
+    , aStudentWorkFolder
+
     -- * ListStudentsResponse
     , ListStudentsResponse
     , listStudentsResponse
     , lsrNextPageToken
     , lsrStudents
 
+    -- * SharedDriveFile
+    , SharedDriveFile
+    , sharedDriveFile
+    , sdfDriveFile
+    , sdfShareMode
+
     -- * CourseAlias
     , CourseAlias
     , courseAlias
     , caAlias
 
+    -- * Form
+    , Form
+    , form
+    , fThumbnailURL
+    , fFormURL
+    , fTitle
+    , fResponseURL
+
     -- * ListTeachersResponse
     , ListTeachersResponse
     , listTeachersResponse
@@ -122,6 +318,7 @@
     , student
     , sCourseId
     , sProFile
+    , sStudentWorkFolder
     , sUserId
     ) where
 
@@ -130,31 +327,64 @@
 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 :: ServiceConfig
 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";
+classroomRostersReadOnlyScope :: Proxy '["https://www.googleapis.com/auth/classroom.rosters.readonly"]
+classroomRostersReadOnlyScope = Proxy;
 
 -- | Manage your Google Classroom classes
-classroomCoursesScope :: OAuthScope
-classroomCoursesScope = "https://www.googleapis.com/auth/classroom.courses";
+classroomCoursesScope :: Proxy '["https://www.googleapis.com/auth/classroom.courses"]
+classroomCoursesScope = Proxy;
 
+-- | View course work and grades for students in the Google Classroom classes
+-- you teach or administer
+classroomCourseworkStudentsReadOnlyScope :: Proxy '["https://www.googleapis.com/auth/classroom.coursework.students.readonly"]
+classroomCourseworkStudentsReadOnlyScope = Proxy;
+
 -- | View the email addresses of people in your classes
-classroomProfileEmailsScope :: OAuthScope
-classroomProfileEmailsScope = "https://www.googleapis.com/auth/classroom.profile.emails";
+classroomProFileEmailsScope :: Proxy '["https://www.googleapis.com/auth/classroom.profile.emails"]
+classroomProFileEmailsScope = Proxy;
 
 -- | View the profile photos of people in your classes
-classroomProfilePhotosScope :: OAuthScope
-classroomProfilePhotosScope = "https://www.googleapis.com/auth/classroom.profile.photos";
+classroomProFilePhotosScope :: Proxy '["https://www.googleapis.com/auth/classroom.profile.photos"]
+classroomProFilePhotosScope = Proxy;
 
+-- | Manage your course work and view your grades in Google Classroom
+classroomCourseworkMeScope :: Proxy '["https://www.googleapis.com/auth/classroom.coursework.me"]
+classroomCourseworkMeScope = Proxy;
+
+-- | View instructions for teacher-assigned work in your Google Classroom
+-- classes
+classroomCourseWorkReadOnlyScope :: Proxy '["https://www.googleapis.com/auth/classroom.course-work.readonly"]
+classroomCourseWorkReadOnlyScope = Proxy;
+
+-- | View course work and grades for students in the Google Classroom classes
+-- you teach or administer
+classroomStudentSubmissionsStudentsReadOnlyScope :: Proxy '["https://www.googleapis.com/auth/classroom.student-submissions.students.readonly"]
+classroomStudentSubmissionsStudentsReadOnlyScope = Proxy;
+
 -- | Manage your Google Classroom class rosters
-classroomRostersScope :: OAuthScope
-classroomRostersScope = "https://www.googleapis.com/auth/classroom.rosters";
+classroomRostersScope :: Proxy '["https://www.googleapis.com/auth/classroom.rosters"]
+classroomRostersScope = Proxy;
 
 -- | View your Google Classroom classes
-classroomCoursesReadonlyScope :: OAuthScope
-classroomCoursesReadonlyScope = "https://www.googleapis.com/auth/classroom.courses.readonly";
+classroomCoursesReadOnlyScope :: Proxy '["https://www.googleapis.com/auth/classroom.courses.readonly"]
+classroomCoursesReadOnlyScope = Proxy;
+
+-- | Manage course work and grades for students in the Google Classroom
+-- classes you teach and view the course work and grades for classes you
+-- administer
+classroomCourseworkStudentsScope :: Proxy '["https://www.googleapis.com/auth/classroom.coursework.students"]
+classroomCourseworkStudentsScope = Proxy;
+
+-- | View your course work and grades in Google Classroom
+classroomCourseworkMeReadOnlyScope :: Proxy '["https://www.googleapis.com/auth/classroom.coursework.me.readonly"]
+classroomCourseworkMeReadOnlyScope = Proxy;
+
+-- | View your course work and grades in Google Classroom
+classroomStudentSubmissionsMeReadOnlyScope :: Proxy '["https://www.googleapis.com/auth/classroom.student-submissions.me.readonly"]
+classroomStudentSubmissionsMeReadOnlyScope = Proxy;
diff --git a/gen/Network/Google/Classroom/Types/Product.hs b/gen/Network/Google/Classroom/Types/Product.hs
--- a/gen/Network/Google/Classroom/Types/Product.hs
+++ b/gen/Network/Google/Classroom/Types/Product.hs
@@ -9,883 +9,2579 @@
 
 -- |
 -- 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,
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+module Network.Google.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])
+
+-- | Course work created by a teacher for students of the course.
+--
+-- /See:/ 'courseWork' smart constructor.
+data CourseWork = CourseWork'
+    { _cwCreationTime               :: !(Maybe Text)
+    , _cwState                      :: !(Maybe Text)
+    , _cwMaterials                  :: !(Maybe [Material])
+    , _cwCourseId                   :: !(Maybe Text)
+    , _cwMaxPoints                  :: !(Maybe (Textual Double))
+    , _cwWorkType                   :: !(Maybe Text)
+    , _cwDueTime                    :: !(Maybe TimeOfDay')
+    , _cwAssociatedWithDeveloper    :: !(Maybe Bool)
+    , _cwUpdateTime                 :: !(Maybe Text)
+    , _cwMultipleChoiceQuestion     :: !(Maybe MultipleChoiceQuestion)
+    , _cwId                         :: !(Maybe Text)
+    , _cwSubmissionModificationMode :: !(Maybe Text)
+    , _cwDueDate                    :: !(Maybe Date)
+    , _cwTitle                      :: !(Maybe Text)
+    , _cwAlternateLink              :: !(Maybe Text)
+    , _cwAssignment                 :: !(Maybe Assignment)
+    , _cwDescription                :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CourseWork' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cwCreationTime'
+--
+-- * 'cwState'
+--
+-- * 'cwMaterials'
+--
+-- * 'cwCourseId'
+--
+-- * 'cwMaxPoints'
+--
+-- * 'cwWorkType'
+--
+-- * 'cwDueTime'
+--
+-- * 'cwAssociatedWithDeveloper'
+--
+-- * 'cwUpdateTime'
+--
+-- * 'cwMultipleChoiceQuestion'
+--
+-- * 'cwId'
+--
+-- * 'cwSubmissionModificationMode'
+--
+-- * 'cwDueDate'
+--
+-- * 'cwTitle'
+--
+-- * 'cwAlternateLink'
+--
+-- * 'cwAssignment'
+--
+-- * 'cwDescription'
+courseWork
+    :: CourseWork
+courseWork =
+    CourseWork'
+    { _cwCreationTime = Nothing
+    , _cwState = Nothing
+    , _cwMaterials = Nothing
+    , _cwCourseId = Nothing
+    , _cwMaxPoints = Nothing
+    , _cwWorkType = Nothing
+    , _cwDueTime = Nothing
+    , _cwAssociatedWithDeveloper = Nothing
+    , _cwUpdateTime = Nothing
+    , _cwMultipleChoiceQuestion = Nothing
+    , _cwId = Nothing
+    , _cwSubmissionModificationMode = Nothing
+    , _cwDueDate = Nothing
+    , _cwTitle = Nothing
+    , _cwAlternateLink = Nothing
+    , _cwAssignment = Nothing
+    , _cwDescription = Nothing
+    }
+
+-- | Timestamp when this course work was created. Read-only.
+cwCreationTime :: Lens' CourseWork (Maybe Text)
+cwCreationTime
+  = lens _cwCreationTime
+      (\ s a -> s{_cwCreationTime = a})
+
+-- | Status of this course work.. If unspecified, the default state is
+-- \`DRAFT\`.
+cwState :: Lens' CourseWork (Maybe Text)
+cwState = lens _cwState (\ s a -> s{_cwState = a})
+
+-- | Additional materials.
+cwMaterials :: Lens' CourseWork [Material]
+cwMaterials
+  = lens _cwMaterials (\ s a -> s{_cwMaterials = a}) .
+      _Default
+      . _Coerce
+
+-- | Identifier of the course. Read-only.
+cwCourseId :: Lens' CourseWork (Maybe Text)
+cwCourseId
+  = lens _cwCourseId (\ s a -> s{_cwCourseId = a})
+
+-- | Maximum grade for this course work. If zero or unspecified, this
+-- assignment is considered ungraded. This must be an integer value.
+cwMaxPoints :: Lens' CourseWork (Maybe Double)
+cwMaxPoints
+  = lens _cwMaxPoints (\ s a -> s{_cwMaxPoints = a}) .
+      mapping _Coerce
+
+-- | Type of this course work. The type is set when the course work is
+-- created and cannot be changed. When creating course work, this must be
+-- \`ASSIGNMENT\`.
+cwWorkType :: Lens' CourseWork (Maybe Text)
+cwWorkType
+  = lens _cwWorkType (\ s a -> s{_cwWorkType = a})
+
+-- | Optional time of day, in UTC, that submissions for this this course work
+-- are due. This must be specified if \`due_date\` is specified.
+cwDueTime :: Lens' CourseWork (Maybe TimeOfDay')
+cwDueTime
+  = lens _cwDueTime (\ s a -> s{_cwDueTime = a})
+
+-- | Whether this course work item is associated with the Developer Console
+-- project making the request. See google.classroom.Work.CreateCourseWork
+-- for more details. Read-only.
+cwAssociatedWithDeveloper :: Lens' CourseWork (Maybe Bool)
+cwAssociatedWithDeveloper
+  = lens _cwAssociatedWithDeveloper
+      (\ s a -> s{_cwAssociatedWithDeveloper = a})
+
+-- | Timestamp of the most recent change to this course work. Read-only.
+cwUpdateTime :: Lens' CourseWork (Maybe Text)
+cwUpdateTime
+  = lens _cwUpdateTime (\ s a -> s{_cwUpdateTime = a})
+
+-- | Multiple choice question details. This is populated only when
+-- \`work_type\` is \`MULTIPLE_CHOICE_QUESTION\`.
+cwMultipleChoiceQuestion :: Lens' CourseWork (Maybe MultipleChoiceQuestion)
+cwMultipleChoiceQuestion
+  = lens _cwMultipleChoiceQuestion
+      (\ s a -> s{_cwMultipleChoiceQuestion = a})
+
+-- | Classroom-assigned identifier of this course work, unique per course.
+-- Read-only.
+cwId :: Lens' CourseWork (Maybe Text)
+cwId = lens _cwId (\ s a -> s{_cwId = a})
+
+-- | Setting to determine when students are allowed to modify submissions. If
+-- unspecified, the default value is \`MODIFIABLE_UNTIL_TURNED_IN\`.
+cwSubmissionModificationMode :: Lens' CourseWork (Maybe Text)
+cwSubmissionModificationMode
+  = lens _cwSubmissionModificationMode
+      (\ s a -> s{_cwSubmissionModificationMode = a})
+
+-- | Optional date, in UTC, that submissions for this this course work are
+-- due. This must be specified if \`due_time\` is specified.
+cwDueDate :: Lens' CourseWork (Maybe Date)
+cwDueDate
+  = lens _cwDueDate (\ s a -> s{_cwDueDate = a})
+
+-- | Title of this course work. The title must be a valid UTF-8 string
+-- containing between 1 and 3000 characters.
+cwTitle :: Lens' CourseWork (Maybe Text)
+cwTitle = lens _cwTitle (\ s a -> s{_cwTitle = a})
+
+-- | Absolute link to this course work in the Classroom web UI. This is only
+-- populated if \`state\` is \`PUBLISHED\`. Read-only.
+cwAlternateLink :: Lens' CourseWork (Maybe Text)
+cwAlternateLink
+  = lens _cwAlternateLink
+      (\ s a -> s{_cwAlternateLink = a})
+
+-- | Assignment details. This is populated only when \`work_type\` is
+-- \`ASSIGNMENT\`.
+cwAssignment :: Lens' CourseWork (Maybe Assignment)
+cwAssignment
+  = lens _cwAssignment (\ s a -> s{_cwAssignment = a})
+
+-- | Optional description of this course work. If set, the description must
+-- be a valid UTF-8 string containing no more than 30,000 characters.
+cwDescription :: Lens' CourseWork (Maybe Text)
+cwDescription
+  = lens _cwDescription
+      (\ s a -> s{_cwDescription = a})
+
+instance FromJSON CourseWork where
+        parseJSON
+          = withObject "CourseWork"
+              (\ o ->
+                 CourseWork' <$>
+                   (o .:? "creationTime") <*> (o .:? "state") <*>
+                     (o .:? "materials" .!= mempty)
+                     <*> (o .:? "courseId")
+                     <*> (o .:? "maxPoints")
+                     <*> (o .:? "workType")
+                     <*> (o .:? "dueTime")
+                     <*> (o .:? "associatedWithDeveloper")
+                     <*> (o .:? "updateTime")
+                     <*> (o .:? "multipleChoiceQuestion")
+                     <*> (o .:? "id")
+                     <*> (o .:? "submissionModificationMode")
+                     <*> (o .:? "dueDate")
+                     <*> (o .:? "title")
+                     <*> (o .:? "alternateLink")
+                     <*> (o .:? "assignment")
+                     <*> (o .:? "description"))
+
+instance ToJSON CourseWork where
+        toJSON CourseWork'{..}
+          = object
+              (catMaybes
+                 [("creationTime" .=) <$> _cwCreationTime,
+                  ("state" .=) <$> _cwState,
+                  ("materials" .=) <$> _cwMaterials,
+                  ("courseId" .=) <$> _cwCourseId,
+                  ("maxPoints" .=) <$> _cwMaxPoints,
+                  ("workType" .=) <$> _cwWorkType,
+                  ("dueTime" .=) <$> _cwDueTime,
+                  ("associatedWithDeveloper" .=) <$>
+                    _cwAssociatedWithDeveloper,
+                  ("updateTime" .=) <$> _cwUpdateTime,
+                  ("multipleChoiceQuestion" .=) <$>
+                    _cwMultipleChoiceQuestion,
+                  ("id" .=) <$> _cwId,
+                  ("submissionModificationMode" .=) <$>
+                    _cwSubmissionModificationMode,
+                  ("dueDate" .=) <$> _cwDueDate,
+                  ("title" .=) <$> _cwTitle,
+                  ("alternateLink" .=) <$> _cwAlternateLink,
+                  ("assignment" .=) <$> _cwAssignment,
+                  ("description" .=) <$> _cwDescription])
+
+-- | Representation of a Google Drive file.
+--
+-- /See:/ 'driveFile' smart constructor.
+data DriveFile = DriveFile'
+    { _dfThumbnailURL  :: !(Maybe Text)
+    , _dfId            :: !(Maybe Text)
+    , _dfTitle         :: !(Maybe Text)
+    , _dfAlternateLink :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DriveFile' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dfThumbnailURL'
+--
+-- * 'dfId'
+--
+-- * 'dfTitle'
+--
+-- * 'dfAlternateLink'
+driveFile
+    :: DriveFile
+driveFile =
+    DriveFile'
+    { _dfThumbnailURL = Nothing
+    , _dfId = Nothing
+    , _dfTitle = Nothing
+    , _dfAlternateLink = Nothing
+    }
+
+-- | URL of a thumbnail image of the Drive item. Read-only.
+dfThumbnailURL :: Lens' DriveFile (Maybe Text)
+dfThumbnailURL
+  = lens _dfThumbnailURL
+      (\ s a -> s{_dfThumbnailURL = a})
+
+-- | Drive API resource ID.
+dfId :: Lens' DriveFile (Maybe Text)
+dfId = lens _dfId (\ s a -> s{_dfId = a})
+
+-- | Title of the Drive item. Read-only.
+dfTitle :: Lens' DriveFile (Maybe Text)
+dfTitle = lens _dfTitle (\ s a -> s{_dfTitle = a})
+
+-- | URL that can be used to access the Drive item. Read-only.
+dfAlternateLink :: Lens' DriveFile (Maybe Text)
+dfAlternateLink
+  = lens _dfAlternateLink
+      (\ s a -> s{_dfAlternateLink = a})
+
+instance FromJSON DriveFile where
+        parseJSON
+          = withObject "DriveFile"
+              (\ o ->
+                 DriveFile' <$>
+                   (o .:? "thumbnailUrl") <*> (o .:? "id") <*>
+                     (o .:? "title")
+                     <*> (o .:? "alternateLink"))
+
+instance ToJSON DriveFile where
+        toJSON DriveFile'{..}
+          = object
+              (catMaybes
+                 [("thumbnailUrl" .=) <$> _dfThumbnailURL,
+                  ("id" .=) <$> _dfId, ("title" .=) <$> _dfTitle,
+                  ("alternateLink" .=) <$> _dfAlternateLink])
+
+-- | Request to return a student submission.
+--
+-- /See:/ 'returnStudentSubmissionRequest' smart constructor.
+data ReturnStudentSubmissionRequest =
+    ReturnStudentSubmissionRequest'
+    deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ReturnStudentSubmissionRequest' with the minimum fields required to make a request.
+--
+returnStudentSubmissionRequest
+    :: ReturnStudentSubmissionRequest
+returnStudentSubmissionRequest = ReturnStudentSubmissionRequest'
+
+instance FromJSON ReturnStudentSubmissionRequest
+         where
+        parseJSON
+          = withObject "ReturnStudentSubmissionRequest"
+              (\ o -> pure ReturnStudentSubmissionRequest')
+
+instance ToJSON ReturnStudentSubmissionRequest where
+        toJSON = const emptyObject
+
+-- | Request to reclaim a student submission.
+--
+-- /See:/ 'reclaimStudentSubmissionRequest' smart constructor.
+data ReclaimStudentSubmissionRequest =
+    ReclaimStudentSubmissionRequest'
+    deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ReclaimStudentSubmissionRequest' with the minimum fields required to make a request.
+--
+reclaimStudentSubmissionRequest
+    :: ReclaimStudentSubmissionRequest
+reclaimStudentSubmissionRequest = ReclaimStudentSubmissionRequest'
+
+instance FromJSON ReclaimStudentSubmissionRequest
+         where
+        parseJSON
+          = withObject "ReclaimStudentSubmissionRequest"
+              (\ o -> pure ReclaimStudentSubmissionRequest')
+
+instance ToJSON ReclaimStudentSubmissionRequest where
+        toJSON = const emptyObject
+
+-- | Response when listing course work.
+--
+-- /See:/ 'listCourseWorkResponse' smart constructor.
+data ListCourseWorkResponse = ListCourseWorkResponse'
+    { _lcwrCourseWork    :: !(Maybe [CourseWork])
+    , _lcwrNextPageToken :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ListCourseWorkResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'lcwrCourseWork'
+--
+-- * 'lcwrNextPageToken'
+listCourseWorkResponse
+    :: ListCourseWorkResponse
+listCourseWorkResponse =
+    ListCourseWorkResponse'
+    { _lcwrCourseWork = Nothing
+    , _lcwrNextPageToken = Nothing
+    }
+
+-- | Course work items that match the request.
+lcwrCourseWork :: Lens' ListCourseWorkResponse [CourseWork]
+lcwrCourseWork
+  = lens _lcwrCourseWork
+      (\ s a -> s{_lcwrCourseWork = a})
+      . _Default
+      . _Coerce
+
+-- | Token identifying the next page of results to return. If empty, no
+-- further results are available.
+lcwrNextPageToken :: Lens' ListCourseWorkResponse (Maybe Text)
+lcwrNextPageToken
+  = lens _lcwrNextPageToken
+      (\ s a -> s{_lcwrNextPageToken = a})
+
+instance FromJSON ListCourseWorkResponse where
+        parseJSON
+          = withObject "ListCourseWorkResponse"
+              (\ o ->
+                 ListCourseWorkResponse' <$>
+                   (o .:? "courseWork" .!= mempty) <*>
+                     (o .:? "nextPageToken"))
+
+instance ToJSON ListCourseWorkResponse where
+        toJSON ListCourseWorkResponse'{..}
+          = object
+              (catMaybes
+                 [("courseWork" .=) <$> _lcwrCourseWork,
+                  ("nextPageToken" .=) <$> _lcwrNextPageToken])
+
+-- | 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])
+
+-- | URL item.
+--
+-- /See:/ 'link' smart constructor.
+data Link = Link'
+    { _lThumbnailURL :: !(Maybe Text)
+    , _lURL          :: !(Maybe Text)
+    , _lTitle        :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Link' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'lThumbnailURL'
+--
+-- * 'lURL'
+--
+-- * 'lTitle'
+link
+    :: Link
+link =
+    Link'
+    { _lThumbnailURL = Nothing
+    , _lURL = Nothing
+    , _lTitle = Nothing
+    }
+
+-- | URL of a thumbnail image of the target URL. Read-only.
+lThumbnailURL :: Lens' Link (Maybe Text)
+lThumbnailURL
+  = lens _lThumbnailURL
+      (\ s a -> s{_lThumbnailURL = a})
+
+-- | URL to link to. This must be a valid UTF-8 string containing between 1
+-- and 2024 characters.
+lURL :: Lens' Link (Maybe Text)
+lURL = lens _lURL (\ s a -> s{_lURL = a})
+
+-- | Title of the target of the URL. Read-only.
+lTitle :: Lens' Link (Maybe Text)
+lTitle = lens _lTitle (\ s a -> s{_lTitle = a})
+
+instance FromJSON Link where
+        parseJSON
+          = withObject "Link"
+              (\ o ->
+                 Link' <$>
+                   (o .:? "thumbnailUrl") <*> (o .:? "url") <*>
+                     (o .:? "title"))
+
+instance ToJSON Link where
+        toJSON Link'{..}
+          = object
+              (catMaybes
+                 [("thumbnailUrl" .=) <$> _lThumbnailURL,
+                  ("url" .=) <$> _lURL, ("title" .=) <$> _lTitle])
+
+-- | Student work for an assignment.
+--
+-- /See:/ 'assignmentSubmission' smart constructor.
+newtype AssignmentSubmission = AssignmentSubmission'
+    { _asAttachments :: Maybe [Attachment]
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'AssignmentSubmission' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'asAttachments'
+assignmentSubmission
+    :: AssignmentSubmission
+assignmentSubmission =
+    AssignmentSubmission'
+    { _asAttachments = Nothing
+    }
+
+-- | Attachments added by the student. Drive files that correspond to
+-- materials with a share mode of SUBMISSION_COPY may not exist yet if the
+-- student has not accessed the assignment in Classroom. Some attachment
+-- metadata is only populated if the requesting user has permission to
+-- access it. Identifier and alternate_link fields are available, but
+-- others (e.g. title) may not be.
+asAttachments :: Lens' AssignmentSubmission [Attachment]
+asAttachments
+  = lens _asAttachments
+      (\ s a -> s{_asAttachments = a})
+      . _Default
+      . _Coerce
+
+instance FromJSON AssignmentSubmission where
+        parseJSON
+          = withObject "AssignmentSubmission"
+              (\ o ->
+                 AssignmentSubmission' <$>
+                   (o .:? "attachments" .!= mempty))
+
+instance ToJSON AssignmentSubmission where
+        toJSON AssignmentSubmission'{..}
+          = object
+              (catMaybes [("attachments" .=) <$> _asAttachments])
+
+-- | Request to modify the attachments of a student submission.
+--
+-- /See:/ 'modifyAttachmentsRequest' smart constructor.
+newtype ModifyAttachmentsRequest = ModifyAttachmentsRequest'
+    { _marAddAttachments :: Maybe [Attachment]
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ModifyAttachmentsRequest' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'marAddAttachments'
+modifyAttachmentsRequest
+    :: ModifyAttachmentsRequest
+modifyAttachmentsRequest =
+    ModifyAttachmentsRequest'
+    { _marAddAttachments = Nothing
+    }
+
+-- | Attachments to add. This may only contain link attachments.
+marAddAttachments :: Lens' ModifyAttachmentsRequest [Attachment]
+marAddAttachments
+  = lens _marAddAttachments
+      (\ s a -> s{_marAddAttachments = a})
+      . _Default
+      . _Coerce
+
+instance FromJSON ModifyAttachmentsRequest where
+        parseJSON
+          = withObject "ModifyAttachmentsRequest"
+              (\ o ->
+                 ModifyAttachmentsRequest' <$>
+                   (o .:? "addAttachments" .!= mempty))
+
+instance ToJSON ModifyAttachmentsRequest where
+        toJSON ModifyAttachmentsRequest'{..}
+          = object
+              (catMaybes
+                 [("addAttachments" .=) <$> _marAddAttachments])
+
+-- | Response when listing student submissions.
+--
+-- /See:/ 'listStudentSubmissionsResponse' smart constructor.
+data ListStudentSubmissionsResponse = ListStudentSubmissionsResponse'
+    { _lssrNextPageToken      :: !(Maybe Text)
+    , _lssrStudentSubmissions :: !(Maybe [StudentSubmission])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ListStudentSubmissionsResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'lssrNextPageToken'
+--
+-- * 'lssrStudentSubmissions'
+listStudentSubmissionsResponse
+    :: ListStudentSubmissionsResponse
+listStudentSubmissionsResponse =
+    ListStudentSubmissionsResponse'
+    { _lssrNextPageToken = Nothing
+    , _lssrStudentSubmissions = Nothing
+    }
+
+-- | Token identifying the next page of results to return. If empty, no
+-- further results are available.
+lssrNextPageToken :: Lens' ListStudentSubmissionsResponse (Maybe Text)
+lssrNextPageToken
+  = lens _lssrNextPageToken
+      (\ s a -> s{_lssrNextPageToken = a})
+
+-- | Student work that matches the request.
+lssrStudentSubmissions :: Lens' ListStudentSubmissionsResponse [StudentSubmission]
+lssrStudentSubmissions
+  = lens _lssrStudentSubmissions
+      (\ s a -> s{_lssrStudentSubmissions = a})
+      . _Default
+      . _Coerce
+
+instance FromJSON ListStudentSubmissionsResponse
+         where
+        parseJSON
+          = withObject "ListStudentSubmissionsResponse"
+              (\ o ->
+                 ListStudentSubmissionsResponse' <$>
+                   (o .:? "nextPageToken") <*>
+                     (o .:? "studentSubmissions" .!= mempty))
+
+instance ToJSON ListStudentSubmissionsResponse where
+        toJSON ListStudentSubmissionsResponse'{..}
+          = object
+              (catMaybes
+                 [("nextPageToken" .=) <$> _lssrNextPageToken,
+                  ("studentSubmissions" .=) <$>
+                    _lssrStudentSubmissions])
+
+-- | Material attached to course work. When creating attachments, only the
+-- Link field may be specified.
+--
+-- /See:/ 'material' smart constructor.
+data Material = Material'
+    { _mDriveFile    :: !(Maybe SharedDriveFile)
+    , _mLink         :: !(Maybe Link)
+    , _mYouTubeVideo :: !(Maybe YouTubeVideo)
+    , _mForm         :: !(Maybe Form)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Material' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'mDriveFile'
+--
+-- * 'mLink'
+--
+-- * 'mYouTubeVideo'
+--
+-- * 'mForm'
+material
+    :: Material
+material =
+    Material'
+    { _mDriveFile = Nothing
+    , _mLink = Nothing
+    , _mYouTubeVideo = Nothing
+    , _mForm = Nothing
+    }
+
+-- | Google Drive file material.
+mDriveFile :: Lens' Material (Maybe SharedDriveFile)
+mDriveFile
+  = lens _mDriveFile (\ s a -> s{_mDriveFile = a})
+
+-- | Link material.
+mLink :: Lens' Material (Maybe Link)
+mLink = lens _mLink (\ s a -> s{_mLink = a})
+
+-- | YouTube video material.
+mYouTubeVideo :: Lens' Material (Maybe YouTubeVideo)
+mYouTubeVideo
+  = lens _mYouTubeVideo
+      (\ s a -> s{_mYouTubeVideo = a})
+
+-- | Google Forms material.
+mForm :: Lens' Material (Maybe Form)
+mForm = lens _mForm (\ s a -> s{_mForm = a})
+
+instance FromJSON Material where
+        parseJSON
+          = withObject "Material"
+              (\ o ->
+                 Material' <$>
+                   (o .:? "driveFile") <*> (o .:? "link") <*>
+                     (o .:? "youtubeVideo")
+                     <*> (o .:? "form"))
+
+instance ToJSON Material where
+        toJSON Material'{..}
+          = object
+              (catMaybes
+                 [("driveFile" .=) <$> _mDriveFile,
+                  ("link" .=) <$> _mLink,
+                  ("youtubeVideo" .=) <$> _mYouTubeVideo,
+                  ("form" .=) <$> _mForm])
+
+-- | Student work for a multiple-choice question.
+--
+-- /See:/ 'multipleChoiceSubmission' smart constructor.
+newtype MultipleChoiceSubmission = MultipleChoiceSubmission'
+    { _mcsAnswer :: Maybe Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'MultipleChoiceSubmission' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'mcsAnswer'
+multipleChoiceSubmission
+    :: MultipleChoiceSubmission
+multipleChoiceSubmission =
+    MultipleChoiceSubmission'
+    { _mcsAnswer = Nothing
+    }
+
+-- | Student\'s select choice.
+mcsAnswer :: Lens' MultipleChoiceSubmission (Maybe Text)
+mcsAnswer
+  = lens _mcsAnswer (\ s a -> s{_mcsAnswer = a})
+
+instance FromJSON MultipleChoiceSubmission where
+        parseJSON
+          = withObject "MultipleChoiceSubmission"
+              (\ o ->
+                 MultipleChoiceSubmission' <$> (o .:? "answer"))
+
+instance ToJSON MultipleChoiceSubmission where
+        toJSON MultipleChoiceSubmission'{..}
+          = object (catMaybes [("answer" .=) <$> _mcsAnswer])
+
+-- | 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])
+
+-- | A material attached to a course as part of a material set.
+--
+-- /See:/ 'courseMaterial' smart constructor.
+data CourseMaterial = CourseMaterial'
+    { _cmDriveFile    :: !(Maybe DriveFile)
+    , _cmLink         :: !(Maybe Link)
+    , _cmYouTubeVideo :: !(Maybe YouTubeVideo)
+    , _cmForm         :: !(Maybe Form)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CourseMaterial' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cmDriveFile'
+--
+-- * 'cmLink'
+--
+-- * 'cmYouTubeVideo'
+--
+-- * 'cmForm'
+courseMaterial
+    :: CourseMaterial
+courseMaterial =
+    CourseMaterial'
+    { _cmDriveFile = Nothing
+    , _cmLink = Nothing
+    , _cmYouTubeVideo = Nothing
+    , _cmForm = Nothing
+    }
+
+-- | Google Drive file attachment.
+cmDriveFile :: Lens' CourseMaterial (Maybe DriveFile)
+cmDriveFile
+  = lens _cmDriveFile (\ s a -> s{_cmDriveFile = a})
+
+-- | Link atatchment.
+cmLink :: Lens' CourseMaterial (Maybe Link)
+cmLink = lens _cmLink (\ s a -> s{_cmLink = a})
+
+-- | Youtube video attachment.
+cmYouTubeVideo :: Lens' CourseMaterial (Maybe YouTubeVideo)
+cmYouTubeVideo
+  = lens _cmYouTubeVideo
+      (\ s a -> s{_cmYouTubeVideo = a})
+
+-- | Google Forms attachment.
+cmForm :: Lens' CourseMaterial (Maybe Form)
+cmForm = lens _cmForm (\ s a -> s{_cmForm = a})
+
+instance FromJSON CourseMaterial where
+        parseJSON
+          = withObject "CourseMaterial"
+              (\ o ->
+                 CourseMaterial' <$>
+                   (o .:? "driveFile") <*> (o .:? "link") <*>
+                     (o .:? "youTubeVideo")
+                     <*> (o .:? "form"))
+
+instance ToJSON CourseMaterial where
+        toJSON CourseMaterial'{..}
+          = object
+              (catMaybes
+                 [("driveFile" .=) <$> _cmDriveFile,
+                  ("link" .=) <$> _cmLink,
+                  ("youTubeVideo" .=) <$> _cmYouTubeVideo,
+                  ("form" .=) <$> _cmForm])
+
+-- | Student work for a short answer question.
+--
+-- /See:/ 'shortAnswerSubmission' smart constructor.
+newtype ShortAnswerSubmission = ShortAnswerSubmission'
+    { _sasAnswer :: Maybe Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ShortAnswerSubmission' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'sasAnswer'
+shortAnswerSubmission
+    :: ShortAnswerSubmission
+shortAnswerSubmission =
+    ShortAnswerSubmission'
+    { _sasAnswer = Nothing
+    }
+
+-- | Student response to a short-answer question.
+sasAnswer :: Lens' ShortAnswerSubmission (Maybe Text)
+sasAnswer
+  = lens _sasAnswer (\ s a -> s{_sasAnswer = a})
+
+instance FromJSON ShortAnswerSubmission where
+        parseJSON
+          = withObject "ShortAnswerSubmission"
+              (\ o -> ShortAnswerSubmission' <$> (o .:? "answer"))
+
+instance ToJSON ShortAnswerSubmission where
+        toJSON ShortAnswerSubmission'{..}
+          = object (catMaybes [("answer" .=) <$> _sasAnswer])
+
+-- | 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])
+
+-- | Attachment added to student assignment work. When creating attachments,
+-- only the Link field may be specified.
+--
+-- /See:/ 'attachment' smart constructor.
+data Attachment = Attachment'
+    { _aDriveFile    :: !(Maybe DriveFile)
+    , _aLink         :: !(Maybe Link)
+    , _aYouTubeVideo :: !(Maybe YouTubeVideo)
+    , _aForm         :: !(Maybe Form)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Attachment' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'aDriveFile'
+--
+-- * 'aLink'
+--
+-- * 'aYouTubeVideo'
+--
+-- * 'aForm'
+attachment
+    :: Attachment
+attachment =
+    Attachment'
+    { _aDriveFile = Nothing
+    , _aLink = Nothing
+    , _aYouTubeVideo = Nothing
+    , _aForm = Nothing
+    }
+
+-- | Google Drive file attachment.
+aDriveFile :: Lens' Attachment (Maybe DriveFile)
+aDriveFile
+  = lens _aDriveFile (\ s a -> s{_aDriveFile = a})
+
+-- | Link attachment.
+aLink :: Lens' Attachment (Maybe Link)
+aLink = lens _aLink (\ s a -> s{_aLink = a})
+
+-- | Youtube video attachment.
+aYouTubeVideo :: Lens' Attachment (Maybe YouTubeVideo)
+aYouTubeVideo
+  = lens _aYouTubeVideo
+      (\ s a -> s{_aYouTubeVideo = a})
+
+-- | Google Forms attachment.
+aForm :: Lens' Attachment (Maybe Form)
+aForm = lens _aForm (\ s a -> s{_aForm = a})
+
+instance FromJSON Attachment where
+        parseJSON
+          = withObject "Attachment"
+              (\ o ->
+                 Attachment' <$>
+                   (o .:? "driveFile") <*> (o .:? "link") <*>
+                     (o .:? "youTubeVideo")
+                     <*> (o .:? "form"))
+
+instance ToJSON Attachment where
+        toJSON Attachment'{..}
+          = object
+              (catMaybes
+                 [("driveFile" .=) <$> _aDriveFile,
+                  ("link" .=) <$> _aLink,
+                  ("youTubeVideo" .=) <$> _aYouTubeVideo,
+                  ("form" .=) <$> _aForm])
+
+-- | Student submission for course work. StudentSubmission items are
+-- generated when a CourseWork item is created. StudentSubmissions that
+-- have never been accessed (i.e. with \`state\` = NEW) may not have a
+-- creation time or update time.
+--
+-- /See:/ 'studentSubmission' smart constructor.
+data StudentSubmission = StudentSubmission'
+    { _ssCreationTime             :: !(Maybe Text)
+    , _ssLate                     :: !(Maybe Bool)
+    , _ssState                    :: !(Maybe Text)
+    , _ssCourseId                 :: !(Maybe Text)
+    , _ssMultipleChoiceSubmission :: !(Maybe MultipleChoiceSubmission)
+    , _ssAssignmentSubmission     :: !(Maybe AssignmentSubmission)
+    , _ssShortAnswerSubmission    :: !(Maybe ShortAnswerSubmission)
+    , _ssAssociatedWithDeveloper  :: !(Maybe Bool)
+    , _ssUserId                   :: !(Maybe Text)
+    , _ssUpdateTime               :: !(Maybe Text)
+    , _ssCourseWorkType           :: !(Maybe Text)
+    , _ssAssignedGrade            :: !(Maybe (Textual Double))
+    , _ssId                       :: !(Maybe Text)
+    , _ssDraftGrade               :: !(Maybe (Textual Double))
+    , _ssAlternateLink            :: !(Maybe Text)
+    , _ssCourseWorkId             :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'StudentSubmission' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ssCreationTime'
+--
+-- * 'ssLate'
+--
+-- * 'ssState'
+--
+-- * 'ssCourseId'
+--
+-- * 'ssMultipleChoiceSubmission'
+--
+-- * 'ssAssignmentSubmission'
+--
+-- * 'ssShortAnswerSubmission'
+--
+-- * 'ssAssociatedWithDeveloper'
+--
+-- * 'ssUserId'
+--
+-- * 'ssUpdateTime'
+--
+-- * 'ssCourseWorkType'
+--
+-- * 'ssAssignedGrade'
+--
+-- * 'ssId'
+--
+-- * 'ssDraftGrade'
+--
+-- * 'ssAlternateLink'
+--
+-- * 'ssCourseWorkId'
+studentSubmission
+    :: StudentSubmission
+studentSubmission =
+    StudentSubmission'
+    { _ssCreationTime = Nothing
+    , _ssLate = Nothing
+    , _ssState = Nothing
+    , _ssCourseId = Nothing
+    , _ssMultipleChoiceSubmission = Nothing
+    , _ssAssignmentSubmission = Nothing
+    , _ssShortAnswerSubmission = Nothing
+    , _ssAssociatedWithDeveloper = Nothing
+    , _ssUserId = Nothing
+    , _ssUpdateTime = Nothing
+    , _ssCourseWorkType = Nothing
+    , _ssAssignedGrade = Nothing
+    , _ssId = Nothing
+    , _ssDraftGrade = Nothing
+    , _ssAlternateLink = Nothing
+    , _ssCourseWorkId = Nothing
+    }
+
+-- | Creation time of this submission.. This may be unset if the student has
+-- not accessed this item. Read-only.
+ssCreationTime :: Lens' StudentSubmission (Maybe Text)
+ssCreationTime
+  = lens _ssCreationTime
+      (\ s a -> s{_ssCreationTime = a})
+
+-- | Whether this submission is late. Read-only.
+ssLate :: Lens' StudentSubmission (Maybe Bool)
+ssLate = lens _ssLate (\ s a -> s{_ssLate = a})
+
+-- | State of this submission. Read-only.
+ssState :: Lens' StudentSubmission (Maybe Text)
+ssState = lens _ssState (\ s a -> s{_ssState = a})
+
+-- | Identifier of the course. Read-only.
+ssCourseId :: Lens' StudentSubmission (Maybe Text)
+ssCourseId
+  = lens _ssCourseId (\ s a -> s{_ssCourseId = a})
+
+-- | Submission content when course_work_type is MUTIPLE_CHOICE_QUESTION.
+ssMultipleChoiceSubmission :: Lens' StudentSubmission (Maybe MultipleChoiceSubmission)
+ssMultipleChoiceSubmission
+  = lens _ssMultipleChoiceSubmission
+      (\ s a -> s{_ssMultipleChoiceSubmission = a})
+
+-- | Submission content when course_work_type is ASSIGNMENT .
+ssAssignmentSubmission :: Lens' StudentSubmission (Maybe AssignmentSubmission)
+ssAssignmentSubmission
+  = lens _ssAssignmentSubmission
+      (\ s a -> s{_ssAssignmentSubmission = a})
+
+-- | Submission content when course_work_type is SHORT_ANSWER_QUESTION.
+ssShortAnswerSubmission :: Lens' StudentSubmission (Maybe ShortAnswerSubmission)
+ssShortAnswerSubmission
+  = lens _ssShortAnswerSubmission
+      (\ s a -> s{_ssShortAnswerSubmission = a})
+
+-- | Whether this student submission is associated with the Developer Console
+-- project making the request. See google.classroom.Work.CreateCourseWork
+-- for more details. Read-only.
+ssAssociatedWithDeveloper :: Lens' StudentSubmission (Maybe Bool)
+ssAssociatedWithDeveloper
+  = lens _ssAssociatedWithDeveloper
+      (\ s a -> s{_ssAssociatedWithDeveloper = a})
+
+-- | Identifier for the student that owns this submission. Read-only.
+ssUserId :: Lens' StudentSubmission (Maybe Text)
+ssUserId = lens _ssUserId (\ s a -> s{_ssUserId = a})
+
+-- | Last update time of this submission. This may be unset if the student
+-- has not accessed this item. Read-only.
+ssUpdateTime :: Lens' StudentSubmission (Maybe Text)
+ssUpdateTime
+  = lens _ssUpdateTime (\ s a -> s{_ssUpdateTime = a})
+
+-- | Type of course work this submission is for. Read-only.
+ssCourseWorkType :: Lens' StudentSubmission (Maybe Text)
+ssCourseWorkType
+  = lens _ssCourseWorkType
+      (\ s a -> s{_ssCourseWorkType = a})
+
+-- | Optional grade. If unset, no grade was set. This must be an integer
+-- value. This may be modified only by course teachers.
+ssAssignedGrade :: Lens' StudentSubmission (Maybe Double)
+ssAssignedGrade
+  = lens _ssAssignedGrade
+      (\ s a -> s{_ssAssignedGrade = a})
+      . mapping _Coerce
+
+-- | Classroom-assigned Identifier for the student submission. This is unique
+-- among submissions for the relevant course work. Read-only.
+ssId :: Lens' StudentSubmission (Maybe Text)
+ssId = lens _ssId (\ s a -> s{_ssId = a})
+
+-- | Optional pending grade. If unset, no grade was set. This must be an
+-- integer value. This is only visible to and modifiable by course
+-- teachers.
+ssDraftGrade :: Lens' StudentSubmission (Maybe Double)
+ssDraftGrade
+  = lens _ssDraftGrade (\ s a -> s{_ssDraftGrade = a})
+      . mapping _Coerce
+
+-- | Absolute link to the submission in the Classroom web UI. Read-only.
+ssAlternateLink :: Lens' StudentSubmission (Maybe Text)
+ssAlternateLink
+  = lens _ssAlternateLink
+      (\ s a -> s{_ssAlternateLink = a})
+
+-- | Identifier for the course work this corresponds to. Read-only.
+ssCourseWorkId :: Lens' StudentSubmission (Maybe Text)
+ssCourseWorkId
+  = lens _ssCourseWorkId
+      (\ s a -> s{_ssCourseWorkId = a})
+
+instance FromJSON StudentSubmission where
+        parseJSON
+          = withObject "StudentSubmission"
+              (\ o ->
+                 StudentSubmission' <$>
+                   (o .:? "creationTime") <*> (o .:? "late") <*>
+                     (o .:? "state")
+                     <*> (o .:? "courseId")
+                     <*> (o .:? "multipleChoiceSubmission")
+                     <*> (o .:? "assignmentSubmission")
+                     <*> (o .:? "shortAnswerSubmission")
+                     <*> (o .:? "associatedWithDeveloper")
+                     <*> (o .:? "userId")
+                     <*> (o .:? "updateTime")
+                     <*> (o .:? "courseWorkType")
+                     <*> (o .:? "assignedGrade")
+                     <*> (o .:? "id")
+                     <*> (o .:? "draftGrade")
+                     <*> (o .:? "alternateLink")
+                     <*> (o .:? "courseWorkId"))
+
+instance ToJSON StudentSubmission where
+        toJSON StudentSubmission'{..}
+          = object
+              (catMaybes
+                 [("creationTime" .=) <$> _ssCreationTime,
+                  ("late" .=) <$> _ssLate, ("state" .=) <$> _ssState,
+                  ("courseId" .=) <$> _ssCourseId,
+                  ("multipleChoiceSubmission" .=) <$>
+                    _ssMultipleChoiceSubmission,
+                  ("assignmentSubmission" .=) <$>
+                    _ssAssignmentSubmission,
+                  ("shortAnswerSubmission" .=) <$>
+                    _ssShortAnswerSubmission,
+                  ("associatedWithDeveloper" .=) <$>
+                    _ssAssociatedWithDeveloper,
+                  ("userId" .=) <$> _ssUserId,
+                  ("updateTime" .=) <$> _ssUpdateTime,
+                  ("courseWorkType" .=) <$> _ssCourseWorkType,
+                  ("assignedGrade" .=) <$> _ssAssignedGrade,
+                  ("id" .=) <$> _ssId,
+                  ("draftGrade" .=) <$> _ssDraftGrade,
+                  ("alternateLink" .=) <$> _ssAlternateLink,
+                  ("courseWorkId" .=) <$> _ssCourseWorkId])
+
+-- | Represents a whole calendar date, e.g. date of birth. The time of day
+-- and time zone are either specified elsewhere or are not significant. The
+-- date is relative to the Proleptic Gregorian Calendar. The day may be 0
+-- to represent a year and month where the day is not significant, e.g.
+-- credit card expiration date. The year may be 0 to represent a month and
+-- day independent of year, e.g. anniversary date. Related types are
+-- google.type.TimeOfDay and \`google.protobuf.Timestamp\`.
+--
+-- /See:/ 'date' smart constructor.
+data Date = Date'
+    { _dDay   :: !(Maybe (Textual Int32))
+    , _dYear  :: !(Maybe (Textual Int32))
+    , _dMonth :: !(Maybe (Textual Int32))
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Date' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dDay'
+--
+-- * 'dYear'
+--
+-- * 'dMonth'
+date
+    :: Date
+date =
+    Date'
+    { _dDay = Nothing
+    , _dYear = Nothing
+    , _dMonth = Nothing
+    }
+
+-- | Day of month. Must be from 1 to 31 and valid for the year and month, or
+-- 0 if specifying a year\/month where the day is not significant.
+dDay :: Lens' Date (Maybe Int32)
+dDay
+  = lens _dDay (\ s a -> s{_dDay = a}) .
+      mapping _Coerce
+
+-- | Year of date. Must be from 1 to 9999, or 0 if specifying a date without
+-- a year.
+dYear :: Lens' Date (Maybe Int32)
+dYear
+  = lens _dYear (\ s a -> s{_dYear = a}) .
+      mapping _Coerce
+
+-- | Month of year. Must be from 1 to 12.
+dMonth :: Lens' Date (Maybe Int32)
+dMonth
+  = lens _dMonth (\ s a -> s{_dMonth = a}) .
+      mapping _Coerce
+
+instance FromJSON Date where
+        parseJSON
+          = withObject "Date"
+              (\ o ->
+                 Date' <$>
+                   (o .:? "day") <*> (o .:? "year") <*> (o .:? "month"))
+
+instance ToJSON Date where
+        toJSON Date'{..}
+          = object
+              (catMaybes
+                 [("day" .=) <$> _dDay, ("year" .=) <$> _dYear,
+                  ("month" .=) <$> _dMonth])
+
+-- | YouTube video item.
+--
+-- /See:/ 'youTubeVideo' smart constructor.
+data YouTubeVideo = YouTubeVideo'
+    { _ytvThumbnailURL  :: !(Maybe Text)
+    , _ytvId            :: !(Maybe Text)
+    , _ytvTitle         :: !(Maybe Text)
+    , _ytvAlternateLink :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'YouTubeVideo' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ytvThumbnailURL'
+--
+-- * 'ytvId'
+--
+-- * 'ytvTitle'
+--
+-- * 'ytvAlternateLink'
+youTubeVideo
+    :: YouTubeVideo
+youTubeVideo =
+    YouTubeVideo'
+    { _ytvThumbnailURL = Nothing
+    , _ytvId = Nothing
+    , _ytvTitle = Nothing
+    , _ytvAlternateLink = Nothing
+    }
+
+-- | URL of a thumbnail image of the YouTube video. Read-only.
+ytvThumbnailURL :: Lens' YouTubeVideo (Maybe Text)
+ytvThumbnailURL
+  = lens _ytvThumbnailURL
+      (\ s a -> s{_ytvThumbnailURL = a})
+
+-- | YouTube API resource ID.
+ytvId :: Lens' YouTubeVideo (Maybe Text)
+ytvId = lens _ytvId (\ s a -> s{_ytvId = a})
+
+-- | Title of the YouTube video. Read-only.
+ytvTitle :: Lens' YouTubeVideo (Maybe Text)
+ytvTitle = lens _ytvTitle (\ s a -> s{_ytvTitle = a})
+
+-- | URL that can be used to view the YouTube video. Read-only.
+ytvAlternateLink :: Lens' YouTubeVideo (Maybe Text)
+ytvAlternateLink
+  = lens _ytvAlternateLink
+      (\ s a -> s{_ytvAlternateLink = a})
+
+instance FromJSON YouTubeVideo where
+        parseJSON
+          = withObject "YouTubeVideo"
+              (\ o ->
+                 YouTubeVideo' <$>
+                   (o .:? "thumbnailUrl") <*> (o .:? "id") <*>
+                     (o .:? "title")
+                     <*> (o .:? "alternateLink"))
+
+instance ToJSON YouTubeVideo where
+        toJSON YouTubeVideo'{..}
+          = object
+              (catMaybes
+                 [("thumbnailUrl" .=) <$> _ytvThumbnailURL,
+                  ("id" .=) <$> _ytvId, ("title" .=) <$> _ytvTitle,
+                  ("alternateLink" .=) <$> _ytvAlternateLink])
+
+-- | 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])
+
+-- | A set of materials that appears on the \"About\" page of the course.
+-- These materials might include a syllabus, schedule, or other background
+-- information relating to the course as a whole.
+--
+-- /See:/ 'courseMaterialSet' smart constructor.
+data CourseMaterialSet = CourseMaterialSet'
+    { _cmsMaterials :: !(Maybe [CourseMaterial])
+    , _cmsTitle     :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CourseMaterialSet' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cmsMaterials'
+--
+-- * 'cmsTitle'
+courseMaterialSet
+    :: CourseMaterialSet
+courseMaterialSet =
+    CourseMaterialSet'
+    { _cmsMaterials = Nothing
+    , _cmsTitle = Nothing
+    }
+
+-- | Materials attached to this set.
+cmsMaterials :: Lens' CourseMaterialSet [CourseMaterial]
+cmsMaterials
+  = lens _cmsMaterials (\ s a -> s{_cmsMaterials = a})
+      . _Default
+      . _Coerce
+
+-- | Title for this set.
+cmsTitle :: Lens' CourseMaterialSet (Maybe Text)
+cmsTitle = lens _cmsTitle (\ s a -> s{_cmsTitle = a})
+
+instance FromJSON CourseMaterialSet where
+        parseJSON
+          = withObject "CourseMaterialSet"
+              (\ o ->
+                 CourseMaterialSet' <$>
+                   (o .:? "materials" .!= mempty) <*> (o .:? "title"))
+
+instance ToJSON CourseMaterialSet where
+        toJSON CourseMaterialSet'{..}
+          = object
+              (catMaybes
+                 [("materials" .=) <$> _cmsMaterials,
+                  ("title" .=) <$> _cmsTitle])
+
+-- | 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])
+
+-- | Request to turn in a student submission.
+--
+-- /See:/ 'turnInStudentSubmissionRequest' smart constructor.
+data TurnInStudentSubmissionRequest =
+    TurnInStudentSubmissionRequest'
+    deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'TurnInStudentSubmissionRequest' with the minimum fields required to make a request.
+--
+turnInStudentSubmissionRequest
+    :: TurnInStudentSubmissionRequest
+turnInStudentSubmissionRequest = TurnInStudentSubmissionRequest'
+
+instance FromJSON TurnInStudentSubmissionRequest
+         where
+        parseJSON
+          = withObject "TurnInStudentSubmissionRequest"
+              (\ o -> pure TurnInStudentSubmissionRequest')
+
+instance ToJSON TurnInStudentSubmissionRequest where
+        toJSON = const emptyObject
+
+-- | 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])
+
+-- | Representation of a Google Drive folder.
+--
+-- /See:/ 'driveFolder' smart constructor.
+data DriveFolder = DriveFolder'
+    { _dId            :: !(Maybe Text)
+    , _dTitle         :: !(Maybe Text)
+    , _dAlternateLink :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DriveFolder' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dId'
+--
+-- * 'dTitle'
+--
+-- * 'dAlternateLink'
+driveFolder
+    :: DriveFolder
+driveFolder =
+    DriveFolder'
+    { _dId = Nothing
+    , _dTitle = Nothing
+    , _dAlternateLink = Nothing
+    }
+
+-- | Drive API resource ID.
+dId :: Lens' DriveFolder (Maybe Text)
+dId = lens _dId (\ s a -> s{_dId = a})
+
+-- | Title of the Drive folder. Read-only.
+dTitle :: Lens' DriveFolder (Maybe Text)
+dTitle = lens _dTitle (\ s a -> s{_dTitle = a})
+
+-- | URL that can be used to access the Drive folder. Read-only.
+dAlternateLink :: Lens' DriveFolder (Maybe Text)
+dAlternateLink
+  = lens _dAlternateLink
+      (\ s a -> s{_dAlternateLink = a})
+
+instance FromJSON DriveFolder where
+        parseJSON
+          = withObject "DriveFolder"
+              (\ o ->
+                 DriveFolder' <$>
+                   (o .:? "id") <*> (o .:? "title") <*>
+                     (o .:? "alternateLink"))
+
+instance ToJSON DriveFolder where
+        toJSON DriveFolder'{..}
+          = object
+              (catMaybes
+                 [("id" .=) <$> _dId, ("title" .=) <$> _dTitle,
+                  ("alternateLink" .=) <$> _dAlternateLink])
+
+-- | Additional details for multiple-choice questions.
+--
+-- /See:/ 'multipleChoiceQuestion' smart constructor.
+newtype MultipleChoiceQuestion = MultipleChoiceQuestion'
+    { _mcqChoices :: Maybe [Text]
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'MultipleChoiceQuestion' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'mcqChoices'
+multipleChoiceQuestion
+    :: MultipleChoiceQuestion
+multipleChoiceQuestion =
+    MultipleChoiceQuestion'
+    { _mcqChoices = Nothing
+    }
+
+-- | Possible choices.
+mcqChoices :: Lens' MultipleChoiceQuestion [Text]
+mcqChoices
+  = lens _mcqChoices (\ s a -> s{_mcqChoices = a}) .
+      _Default
+      . _Coerce
+
+instance FromJSON MultipleChoiceQuestion where
+        parseJSON
+          = withObject "MultipleChoiceQuestion"
+              (\ o ->
+                 MultipleChoiceQuestion' <$>
+                   (o .:? "choices" .!= mempty))
+
+instance ToJSON MultipleChoiceQuestion where
+        toJSON MultipleChoiceQuestion'{..}
+          = object (catMaybes [("choices" .=) <$> _mcqChoices])
+
+-- | A Course in Classroom.
+--
+-- /See:/ 'course' smart constructor.
+data Course = Course'
+    { _cCreationTime       :: !(Maybe Text)
+    , _cRoom               :: !(Maybe Text)
+    , _cCourseMaterialSets :: !(Maybe [CourseMaterialSet])
+    , _cTeacherGroupEmail  :: !(Maybe Text)
+    , _cTeacherFolder      :: !(Maybe DriveFolder)
+    , _cCourseState        :: !(Maybe Text)
+    , _cEnrollmentCode     :: !(Maybe Text)
+    , _cUpdateTime         :: !(Maybe Text)
+    , _cOwnerId            :: !(Maybe Text)
+    , _cName               :: !(Maybe Text)
+    , _cId                 :: !(Maybe Text)
+    , _cAlternateLink      :: !(Maybe Text)
+    , _cCourseGroupEmail   :: !(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'
+--
+-- * 'cCourseMaterialSets'
+--
+-- * 'cTeacherGroupEmail'
+--
+-- * 'cTeacherFolder'
+--
+-- * 'cCourseState'
+--
+-- * 'cEnrollmentCode'
+--
+-- * 'cUpdateTime'
+--
+-- * 'cOwnerId'
+--
+-- * 'cName'
+--
+-- * 'cId'
+--
+-- * 'cAlternateLink'
+--
+-- * 'cCourseGroupEmail'
+--
+-- * 'cDescription'
+--
+-- * 'cDescriptionHeading'
+--
+-- * 'cSection'
+course
+    :: Course
+course =
+    Course'
+    { _cCreationTime = Nothing
+    , _cRoom = Nothing
+    , _cCourseMaterialSets = Nothing
+    , _cTeacherGroupEmail = Nothing
+    , _cTeacherFolder = Nothing
+    , _cCourseState = Nothing
+    , _cEnrollmentCode = Nothing
+    , _cUpdateTime = Nothing
+    , _cOwnerId = Nothing
+    , _cName = Nothing
+    , _cId = Nothing
+    , _cAlternateLink = Nothing
+    , _cCourseGroupEmail = Nothing
+    , _cDescription = Nothing
+    , _cDescriptionHeading = Nothing
+    , _cSection = Nothing
+    }
+
+-- | Creation time of the course. Specifying this field in a course update
+-- mask results 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})
+
+-- | Sets of materials that appear on the \"about\" page of this course.
+-- Read-only.
+cCourseMaterialSets :: Lens' Course [CourseMaterialSet]
+cCourseMaterialSets
+  = lens _cCourseMaterialSets
+      (\ s a -> s{_cCourseMaterialSets = a})
+      . _Default
+      . _Coerce
+
+-- | The email address of a Google group containing all teachers of the
+-- course. This group does not accept email and can only be used for
+-- permissions. Read-only.
+cTeacherGroupEmail :: Lens' Course (Maybe Text)
+cTeacherGroupEmail
+  = lens _cTeacherGroupEmail
+      (\ s a -> s{_cTeacherGroupEmail = a})
+
+-- | Information about a Drive Folder that is shared with all teachers of the
+-- course. This field will only be set for teachers of the course and
+-- domain administrators. Read-only.
+cTeacherFolder :: Lens' Course (Maybe DriveFolder)
+cTeacherFolder
+  = lens _cTeacherFolder
+      (\ s a -> s{_cTeacherFolder = 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 results 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 results 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 results 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 results 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})
+
+-- | The email address of a Google group containing all members of the
+-- course. This group does not accept email and can only be used for
+-- permissions. Read-only.
+cCourseGroupEmail :: Lens' Course (Maybe Text)
+cCourseGroupEmail
+  = lens _cCourseGroupEmail
+      (\ s a -> s{_cCourseGroupEmail = 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 .:? "courseMaterialSets" .!= mempty)
+                     <*> (o .:? "teacherGroupEmail")
+                     <*> (o .:? "teacherFolder")
+                     <*> (o .:? "courseState")
+                     <*> (o .:? "enrollmentCode")
+                     <*> (o .:? "updateTime")
+                     <*> (o .:? "ownerId")
+                     <*> (o .:? "name")
+                     <*> (o .:? "id")
+                     <*> (o .:? "alternateLink")
+                     <*> (o .:? "courseGroupEmail")
+                     <*> (o .:? "description")
+                     <*> (o .:? "descriptionHeading")
+                     <*> (o .:? "section"))
+
+instance ToJSON Course where
+        toJSON Course'{..}
+          = object
+              (catMaybes
+                 [("creationTime" .=) <$> _cCreationTime,
+                  ("room" .=) <$> _cRoom,
+                  ("courseMaterialSets" .=) <$> _cCourseMaterialSets,
+                  ("teacherGroupEmail" .=) <$> _cTeacherGroupEmail,
+                  ("teacherFolder" .=) <$> _cTeacherFolder,
+                  ("courseState" .=) <$> _cCourseState,
+                  ("enrollmentCode" .=) <$> _cEnrollmentCode,
+                  ("updateTime" .=) <$> _cUpdateTime,
+                  ("ownerId" .=) <$> _cOwnerId, ("name" .=) <$> _cName,
+                  ("id" .=) <$> _cId,
+                  ("alternateLink" .=) <$> _cAlternateLink,
+                  ("courseGroupEmail" .=) <$> _cCourseGroupEmail,
+                  ("description" .=) <$> _cDescription,
+                  ("descriptionHeading" .=) <$> _cDescriptionHeading,
+                  ("section" .=) <$> _cSection])
+
+-- | Represents a time of day. The date and time zone are either not
+-- significant or are specified elsewhere. An API may chose to allow leap
+-- seconds. Related types are google.type.Date and
+-- \`google.protobuf.Timestamp\`.
+--
+-- /See:/ 'timeOfDay' smart constructor.
+data TimeOfDay' = TimeOfDay''
+    { _todNanos   :: !(Maybe (Textual Int32))
+    , _todHours   :: !(Maybe (Textual Int32))
+    , _todMinutes :: !(Maybe (Textual Int32))
+    , _todSeconds :: !(Maybe (Textual Int32))
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'TimeOfDay' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'todNanos'
+--
+-- * 'todHours'
+--
+-- * 'todMinutes'
+--
+-- * 'todSeconds'
+timeOfDay
+    :: TimeOfDay'
+timeOfDay =
+    TimeOfDay''
+    { _todNanos = Nothing
+    , _todHours = Nothing
+    , _todMinutes = Nothing
+    , _todSeconds = Nothing
+    }
+
+-- | Fractions of seconds in nanoseconds. Must be from 0 to 999,999,999.
+todNanos :: Lens' TimeOfDay' (Maybe Int32)
+todNanos
+  = lens _todNanos (\ s a -> s{_todNanos = a}) .
+      mapping _Coerce
+
+-- | Hours of day in 24 hour format. Should be from 0 to 23. An API may
+-- choose to allow the value \"24:00:00\" for scenarios like business
+-- closing time.
+todHours :: Lens' TimeOfDay' (Maybe Int32)
+todHours
+  = lens _todHours (\ s a -> s{_todHours = a}) .
+      mapping _Coerce
+
+-- | Minutes of hour of day. Must be from 0 to 59.
+todMinutes :: Lens' TimeOfDay' (Maybe Int32)
+todMinutes
+  = lens _todMinutes (\ s a -> s{_todMinutes = a}) .
+      mapping _Coerce
+
+-- | Seconds of minutes of the time. Must normally be from 0 to 59. An API
+-- may allow the value 60 if it allows leap-seconds.
+todSeconds :: Lens' TimeOfDay' (Maybe Int32)
+todSeconds
+  = lens _todSeconds (\ s a -> s{_todSeconds = a}) .
+      mapping _Coerce
+
+instance FromJSON TimeOfDay' where
+        parseJSON
+          = withObject "TimeOfDay"
+              (\ o ->
+                 TimeOfDay'' <$>
+                   (o .:? "nanos") <*> (o .:? "hours") <*>
+                     (o .:? "minutes")
+                     <*> (o .:? "seconds"))
+
+instance ToJSON TimeOfDay' where
+        toJSON TimeOfDay''{..}
+          = object
+              (catMaybes
+                 [("nanos" .=) <$> _todNanos,
+                  ("hours" .=) <$> _todHours,
+                  ("minutes" .=) <$> _todMinutes,
+                  ("seconds" .=) <$> _todSeconds])
+
+-- | Additional details for assignments.
+--
+-- /See:/ 'assignment' smart constructor.
+newtype Assignment = Assignment'
+    { _aStudentWorkFolder :: Maybe DriveFolder
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Assignment' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'aStudentWorkFolder'
+assignment
+    :: Assignment
+assignment =
+    Assignment'
+    { _aStudentWorkFolder = Nothing
+    }
+
+-- | Drive folder where attachments from student submissions are placed. This
+-- is only populated for course teachers.
+aStudentWorkFolder :: Lens' Assignment (Maybe DriveFolder)
+aStudentWorkFolder
+  = lens _aStudentWorkFolder
+      (\ s a -> s{_aStudentWorkFolder = a})
+
+instance FromJSON Assignment where
+        parseJSON
+          = withObject "Assignment"
+              (\ o -> Assignment' <$> (o .:? "studentWorkFolder"))
+
+instance ToJSON Assignment where
+        toJSON Assignment'{..}
+          = object
+              (catMaybes
+                 [("studentWorkFolder" .=) <$> _aStudentWorkFolder])
+
+-- | 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])
+
+-- | Drive file that is used as material for course work.
+--
+-- /See:/ 'sharedDriveFile' smart constructor.
+data SharedDriveFile = SharedDriveFile'
+    { _sdfDriveFile :: !(Maybe DriveFile)
+    , _sdfShareMode :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'SharedDriveFile' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'sdfDriveFile'
+--
+-- * 'sdfShareMode'
+sharedDriveFile
+    :: SharedDriveFile
+sharedDriveFile =
+    SharedDriveFile'
+    { _sdfDriveFile = Nothing
+    , _sdfShareMode = Nothing
+    }
+
+-- | Drive file details.
+sdfDriveFile :: Lens' SharedDriveFile (Maybe DriveFile)
+sdfDriveFile
+  = lens _sdfDriveFile (\ s a -> s{_sdfDriveFile = a})
+
+-- | Mechanism by which students access the Drive item.
+sdfShareMode :: Lens' SharedDriveFile (Maybe Text)
+sdfShareMode
+  = lens _sdfShareMode (\ s a -> s{_sdfShareMode = a})
+
+instance FromJSON SharedDriveFile where
+        parseJSON
+          = withObject "SharedDriveFile"
+              (\ o ->
+                 SharedDriveFile' <$>
+                   (o .:? "driveFile") <*> (o .:? "shareMode"))
+
+instance ToJSON SharedDriveFile where
+        toJSON SharedDriveFile'{..}
+          = object
+              (catMaybes
+                 [("driveFile" .=) <$> _sdfDriveFile,
+                  ("shareMode" .=) <$> _sdfShareMode])
+
+-- | 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])
+
+-- | Google Forms item.
+--
+-- /See:/ 'form' smart constructor.
+data Form = Form'
+    { _fThumbnailURL :: !(Maybe Text)
+    , _fFormURL      :: !(Maybe Text)
+    , _fTitle        :: !(Maybe Text)
+    , _fResponseURL  :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Form' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'fThumbnailURL'
+--
+-- * 'fFormURL'
+--
+-- * 'fTitle'
+--
+-- * 'fResponseURL'
+form
+    :: Form
+form =
+    Form'
+    { _fThumbnailURL = Nothing
+    , _fFormURL = Nothing
+    , _fTitle = Nothing
+    , _fResponseURL = Nothing
+    }
+
+-- | URL of a thumbnail image of the Form. Read-only.
+fThumbnailURL :: Lens' Form (Maybe Text)
+fThumbnailURL
+  = lens _fThumbnailURL
+      (\ s a -> s{_fThumbnailURL = a})
+
+-- | URL of the form.
+fFormURL :: Lens' Form (Maybe Text)
+fFormURL = lens _fFormURL (\ s a -> s{_fFormURL = a})
+
+-- | Title of the Form. Read-only.
+fTitle :: Lens' Form (Maybe Text)
+fTitle = lens _fTitle (\ s a -> s{_fTitle = a})
+
+-- | URL of the form responses document. Only set if respsonses have been
+-- recorded and only when the requesting user is an editor of the form.
+-- Read-only.
+fResponseURL :: Lens' Form (Maybe Text)
+fResponseURL
+  = lens _fResponseURL (\ s a -> s{_fResponseURL = a})
+
+instance FromJSON Form where
+        parseJSON
+          = withObject "Form"
+              (\ o ->
+                 Form' <$>
+                   (o .:? "thumbnailUrl") <*> (o .:? "formUrl") <*>
+                     (o .:? "title")
+                     <*> (o .:? "responseUrl"))
+
+instance ToJSON Form where
+        toJSON Form'{..}
+          = object
+              (catMaybes
+                 [("thumbnailUrl" .=) <$> _fThumbnailURL,
+                  ("formUrl" .=) <$> _fFormURL,
+                  ("title" .=) <$> _fTitle,
+                  ("responseUrl" .=) <$> _fResponseURL])
+
+-- | 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)
+    , _sStudentWorkFolder :: !(Maybe DriveFolder)
+    , _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'
+--
+-- * 'sStudentWorkFolder'
+--
+-- * 'sUserId'
+student
+    :: Student
+student =
+    Student'
+    { _sCourseId = Nothing
+    , _sProFile = Nothing
+    , _sStudentWorkFolder = 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})
+
+-- | Information about a Drive Folder for this student\'s work in this
+-- course. Only visible to the student and domain administrators.
+-- Read-only.
+sStudentWorkFolder :: Lens' Student (Maybe DriveFolder)
+sStudentWorkFolder
+  = lens _sStudentWorkFolder
+      (\ s a -> s{_sStudentWorkFolder = 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 .:? "studentWorkFolder")
+                     <*> (o .:? "userId"))
+
+instance ToJSON Student where
+        toJSON Student'{..}
+          = object
+              (catMaybes
+                 [("courseId" .=) <$> _sCourseId,
+                  ("profile" .=) <$> _sProFile,
+                  ("studentWorkFolder" .=) <$> _sStudentWorkFolder,
                   ("userId" .=) <$> _sUserId])
diff --git a/gen/Network/Google/Classroom/Types/Sum.hs b/gen/Network/Google/Classroom/Types/Sum.hs
--- a/gen/Network/Google/Classroom/Types/Sum.hs
+++ b/gen/Network/Google/Classroom/Types/Sum.hs
@@ -8,7 +8,7 @@
 
 -- |
 -- Module      : Network.Google.Classroom.Types.Sum
--- Copyright   : (c) 2015 Brendan Hay
+-- Copyright   : (c) 2015-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
diff --git a/gen/Network/Google/Resource/Classroom/Courses/Aliases/Create.hs b/gen/Network/Google/Resource/Classroom/Courses/Aliases/Create.hs
--- a/gen/Network/Google/Resource/Classroom/Courses/Aliases/Create.hs
+++ b/gen/Network/Google/Resource/Classroom/Courses/Aliases/Create.hs
@@ -14,7 +14,7 @@
 
 -- |
 -- Module      : Network.Google.Resource.Classroom.Courses.Aliases.Create
--- Copyright   : (c) 2015 Brendan Hay
+-- Copyright   : (c) 2015-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -74,7 +74,7 @@
 -- does not exist. * \`ALREADY_EXISTS\` if the alias already exists.
 --
 -- /See:/ 'coursesAliasesCreate' smart constructor.
-data CoursesAliasesCreate = CoursesAliasesCreate
+data CoursesAliasesCreate = CoursesAliasesCreate'
     { _cacXgafv          :: !(Maybe Text)
     , _cacUploadProtocol :: !(Maybe Text)
     , _cacPp             :: !Bool
@@ -112,7 +112,7 @@
     -> CourseAlias -- ^ 'cacPayload'
     -> CoursesAliasesCreate
 coursesAliasesCreate pCacCourseId_ pCacPayload_ =
-    CoursesAliasesCreate
+    CoursesAliasesCreate'
     { _cacXgafv = Nothing
     , _cacUploadProtocol = Nothing
     , _cacPp = True
@@ -174,7 +174,9 @@
 
 instance GoogleRequest CoursesAliasesCreate where
         type Rs CoursesAliasesCreate = CourseAlias
-        requestClient CoursesAliasesCreate{..}
+        type Scopes CoursesAliasesCreate =
+             '["https://www.googleapis.com/auth/classroom.courses"]
+        requestClient CoursesAliasesCreate'{..}
           = go _cacCourseId _cacXgafv _cacUploadProtocol
               (Just _cacPp)
               _cacAccessToken
diff --git a/gen/Network/Google/Resource/Classroom/Courses/Aliases/Delete.hs b/gen/Network/Google/Resource/Classroom/Courses/Aliases/Delete.hs
--- a/gen/Network/Google/Resource/Classroom/Courses/Aliases/Delete.hs
+++ b/gen/Network/Google/Resource/Classroom/Courses/Aliases/Delete.hs
@@ -14,7 +14,7 @@
 
 -- |
 -- Module      : Network.Google.Resource.Classroom.Courses.Aliases.Delete
--- Copyright   : (c) 2015 Brendan Hay
+-- Copyright   : (c) 2015-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -73,7 +73,7 @@
 -- does not exist.
 --
 -- /See:/ 'coursesAliasesDelete' smart constructor.
-data CoursesAliasesDelete = CoursesAliasesDelete
+data CoursesAliasesDelete = CoursesAliasesDelete'
     { _cadXgafv          :: !(Maybe Text)
     , _cadUploadProtocol :: !(Maybe Text)
     , _cadPp             :: !Bool
@@ -111,7 +111,7 @@
     -> Text -- ^ 'cadAlias'
     -> CoursesAliasesDelete
 coursesAliasesDelete pCadCourseId_ pCadAlias_ =
-    CoursesAliasesDelete
+    CoursesAliasesDelete'
     { _cadXgafv = Nothing
     , _cadUploadProtocol = Nothing
     , _cadPp = True
@@ -172,7 +172,9 @@
 
 instance GoogleRequest CoursesAliasesDelete where
         type Rs CoursesAliasesDelete = Empty
-        requestClient CoursesAliasesDelete{..}
+        type Scopes CoursesAliasesDelete =
+             '["https://www.googleapis.com/auth/classroom.courses"]
+        requestClient CoursesAliasesDelete'{..}
           = go _cadCourseId _cadAlias _cadXgafv
               _cadUploadProtocol
               (Just _cadPp)
diff --git a/gen/Network/Google/Resource/Classroom/Courses/Aliases/List.hs b/gen/Network/Google/Resource/Classroom/Courses/Aliases/List.hs
--- a/gen/Network/Google/Resource/Classroom/Courses/Aliases/List.hs
+++ b/gen/Network/Google/Resource/Classroom/Courses/Aliases/List.hs
@@ -14,7 +14,7 @@
 
 -- |
 -- Module      : Network.Google.Resource.Classroom.Courses.Aliases.List
--- Copyright   : (c) 2015 Brendan Hay
+-- Copyright   : (c) 2015-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -76,7 +76,7 @@
 -- if the course does not exist.
 --
 -- /See:/ 'coursesAliasesList' smart constructor.
-data CoursesAliasesList = CoursesAliasesList
+data CoursesAliasesList = CoursesAliasesList'
     { _calXgafv          :: !(Maybe Text)
     , _calUploadProtocol :: !(Maybe Text)
     , _calPp             :: !Bool
@@ -116,7 +116,7 @@
     :: Text -- ^ 'calCourseId'
     -> CoursesAliasesList
 coursesAliasesList pCalCourseId_ =
-    CoursesAliasesList
+    CoursesAliasesList'
     { _calXgafv = Nothing
     , _calUploadProtocol = Nothing
     , _calPp = True
@@ -190,7 +190,10 @@
 instance GoogleRequest CoursesAliasesList where
         type Rs CoursesAliasesList =
              ListCourseAliasesResponse
-        requestClient CoursesAliasesList{..}
+        type Scopes CoursesAliasesList =
+             '["https://www.googleapis.com/auth/classroom.courses",
+               "https://www.googleapis.com/auth/classroom.courses.readonly"]
+        requestClient CoursesAliasesList'{..}
           = go _calCourseId _calXgafv _calUploadProtocol
               (Just _calPp)
               _calAccessToken
diff --git a/gen/Network/Google/Resource/Classroom/Courses/CourseWork/Create.hs b/gen/Network/Google/Resource/Classroom/Courses/CourseWork/Create.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Classroom/Courses/CourseWork/Create.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.CourseWork.Create
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates course work. The resulting course work (and corresponding
+-- student submissions) are associated with the Developer Console project
+-- of the [OAuth client
+-- ID](https:\/\/support.google.com\/cloud\/answer\/6158849) used to make
+-- the request. Classroom API requests to modify course work and student
+-- submissions must be made with an OAuth client ID from the associated
+-- Developer Console project. This method returns the following error
+-- codes: * \`PERMISSION_DENIED\` if the requesting user is not permitted
+-- to access the requested course, create course work in the requested
+-- course, or for access errors. * \`INVALID_ARGUMENT\` if the request is
+-- malformed. * \`NOT_FOUND\` if the requested course does not exist.
+--
+-- /See:/ <https://developers.google.com/classroom/ Google Classroom API Reference> for @classroom.courses.courseWork.create@.
+module Network.Google.Resource.Classroom.Courses.CourseWork.Create
+    (
+    -- * REST Resource
+      CoursesCourseWorkCreateResource
+
+    -- * Creating a Request
+    , coursesCourseWorkCreate
+    , CoursesCourseWorkCreate
+
+    -- * Request Lenses
+    , ccwcXgafv
+    , ccwcUploadProtocol
+    , ccwcPp
+    , ccwcCourseId
+    , ccwcAccessToken
+    , ccwcUploadType
+    , ccwcPayload
+    , ccwcBearerToken
+    , ccwcCallback
+    ) where
+
+import           Network.Google.Classroom.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @classroom.courses.courseWork.create@ method which the
+-- 'CoursesCourseWorkCreate' request conforms to.
+type CoursesCourseWorkCreateResource =
+     "v1" :>
+       "courses" :>
+         Capture "courseId" Text :>
+           "courseWork" :>
+             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] CourseWork :>
+                               Post '[JSON] CourseWork
+
+-- | Creates course work. The resulting course work (and corresponding
+-- student submissions) are associated with the Developer Console project
+-- of the [OAuth client
+-- ID](https:\/\/support.google.com\/cloud\/answer\/6158849) used to make
+-- the request. Classroom API requests to modify course work and student
+-- submissions must be made with an OAuth client ID from the associated
+-- Developer Console project. This method returns the following error
+-- codes: * \`PERMISSION_DENIED\` if the requesting user is not permitted
+-- to access the requested course, create course work in the requested
+-- course, or for access errors. * \`INVALID_ARGUMENT\` if the request is
+-- malformed. * \`NOT_FOUND\` if the requested course does not exist.
+--
+-- /See:/ 'coursesCourseWorkCreate' smart constructor.
+data CoursesCourseWorkCreate = CoursesCourseWorkCreate'
+    { _ccwcXgafv          :: !(Maybe Text)
+    , _ccwcUploadProtocol :: !(Maybe Text)
+    , _ccwcPp             :: !Bool
+    , _ccwcCourseId       :: !Text
+    , _ccwcAccessToken    :: !(Maybe Text)
+    , _ccwcUploadType     :: !(Maybe Text)
+    , _ccwcPayload        :: !CourseWork
+    , _ccwcBearerToken    :: !(Maybe Text)
+    , _ccwcCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CoursesCourseWorkCreate' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ccwcXgafv'
+--
+-- * 'ccwcUploadProtocol'
+--
+-- * 'ccwcPp'
+--
+-- * 'ccwcCourseId'
+--
+-- * 'ccwcAccessToken'
+--
+-- * 'ccwcUploadType'
+--
+-- * 'ccwcPayload'
+--
+-- * 'ccwcBearerToken'
+--
+-- * 'ccwcCallback'
+coursesCourseWorkCreate
+    :: Text -- ^ 'ccwcCourseId'
+    -> CourseWork -- ^ 'ccwcPayload'
+    -> CoursesCourseWorkCreate
+coursesCourseWorkCreate pCcwcCourseId_ pCcwcPayload_ =
+    CoursesCourseWorkCreate'
+    { _ccwcXgafv = Nothing
+    , _ccwcUploadProtocol = Nothing
+    , _ccwcPp = True
+    , _ccwcCourseId = pCcwcCourseId_
+    , _ccwcAccessToken = Nothing
+    , _ccwcUploadType = Nothing
+    , _ccwcPayload = pCcwcPayload_
+    , _ccwcBearerToken = Nothing
+    , _ccwcCallback = Nothing
+    }
+
+-- | V1 error format.
+ccwcXgafv :: Lens' CoursesCourseWorkCreate (Maybe Text)
+ccwcXgafv
+  = lens _ccwcXgafv (\ s a -> s{_ccwcXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+ccwcUploadProtocol :: Lens' CoursesCourseWorkCreate (Maybe Text)
+ccwcUploadProtocol
+  = lens _ccwcUploadProtocol
+      (\ s a -> s{_ccwcUploadProtocol = a})
+
+-- | Pretty-print response.
+ccwcPp :: Lens' CoursesCourseWorkCreate Bool
+ccwcPp = lens _ccwcPp (\ s a -> s{_ccwcPp = a})
+
+-- | Identifier of the course. This identifier can be either the
+-- Classroom-assigned identifier or an alias.
+ccwcCourseId :: Lens' CoursesCourseWorkCreate Text
+ccwcCourseId
+  = lens _ccwcCourseId (\ s a -> s{_ccwcCourseId = a})
+
+-- | OAuth access token.
+ccwcAccessToken :: Lens' CoursesCourseWorkCreate (Maybe Text)
+ccwcAccessToken
+  = lens _ccwcAccessToken
+      (\ s a -> s{_ccwcAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+ccwcUploadType :: Lens' CoursesCourseWorkCreate (Maybe Text)
+ccwcUploadType
+  = lens _ccwcUploadType
+      (\ s a -> s{_ccwcUploadType = a})
+
+-- | Multipart request metadata.
+ccwcPayload :: Lens' CoursesCourseWorkCreate CourseWork
+ccwcPayload
+  = lens _ccwcPayload (\ s a -> s{_ccwcPayload = a})
+
+-- | OAuth bearer token.
+ccwcBearerToken :: Lens' CoursesCourseWorkCreate (Maybe Text)
+ccwcBearerToken
+  = lens _ccwcBearerToken
+      (\ s a -> s{_ccwcBearerToken = a})
+
+-- | JSONP
+ccwcCallback :: Lens' CoursesCourseWorkCreate (Maybe Text)
+ccwcCallback
+  = lens _ccwcCallback (\ s a -> s{_ccwcCallback = a})
+
+instance GoogleRequest CoursesCourseWorkCreate where
+        type Rs CoursesCourseWorkCreate = CourseWork
+        type Scopes CoursesCourseWorkCreate =
+             '["https://www.googleapis.com/auth/classroom.coursework.students"]
+        requestClient CoursesCourseWorkCreate'{..}
+          = go _ccwcCourseId _ccwcXgafv _ccwcUploadProtocol
+              (Just _ccwcPp)
+              _ccwcAccessToken
+              _ccwcUploadType
+              _ccwcBearerToken
+              _ccwcCallback
+              (Just AltJSON)
+              _ccwcPayload
+              classroomService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy CoursesCourseWorkCreateResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Classroom/Courses/CourseWork/Get.hs b/gen/Network/Google/Resource/Classroom/Courses/CourseWork/Get.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Classroom/Courses/CourseWork/Get.hs
@@ -0,0 +1,197 @@
+{-# 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.CourseWork.Get
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns course work. This method returns the following error codes: *
+-- \`PERMISSION_DENIED\` if the requesting user is not permitted to access
+-- the requested course or course work, or for access errors. *
+-- \`INVALID_ARGUMENT\` if the request is malformed. * \`NOT_FOUND\` if the
+-- requested course or course work does not exist.
+--
+-- /See:/ <https://developers.google.com/classroom/ Google Classroom API Reference> for @classroom.courses.courseWork.get@.
+module Network.Google.Resource.Classroom.Courses.CourseWork.Get
+    (
+    -- * REST Resource
+      CoursesCourseWorkGetResource
+
+    -- * Creating a Request
+    , coursesCourseWorkGet
+    , CoursesCourseWorkGet
+
+    -- * Request Lenses
+    , ccwgXgafv
+    , ccwgUploadProtocol
+    , ccwgPp
+    , ccwgCourseId
+    , ccwgAccessToken
+    , ccwgUploadType
+    , ccwgBearerToken
+    , ccwgId
+    , ccwgCallback
+    ) where
+
+import           Network.Google.Classroom.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @classroom.courses.courseWork.get@ method which the
+-- 'CoursesCourseWorkGet' request conforms to.
+type CoursesCourseWorkGetResource =
+     "v1" :>
+       "courses" :>
+         Capture "courseId" Text :>
+           "courseWork" :>
+             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] CourseWork
+
+-- | Returns course work. This method returns the following error codes: *
+-- \`PERMISSION_DENIED\` if the requesting user is not permitted to access
+-- the requested course or course work, or for access errors. *
+-- \`INVALID_ARGUMENT\` if the request is malformed. * \`NOT_FOUND\` if the
+-- requested course or course work does not exist.
+--
+-- /See:/ 'coursesCourseWorkGet' smart constructor.
+data CoursesCourseWorkGet = CoursesCourseWorkGet'
+    { _ccwgXgafv          :: !(Maybe Text)
+    , _ccwgUploadProtocol :: !(Maybe Text)
+    , _ccwgPp             :: !Bool
+    , _ccwgCourseId       :: !Text
+    , _ccwgAccessToken    :: !(Maybe Text)
+    , _ccwgUploadType     :: !(Maybe Text)
+    , _ccwgBearerToken    :: !(Maybe Text)
+    , _ccwgId             :: !Text
+    , _ccwgCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CoursesCourseWorkGet' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ccwgXgafv'
+--
+-- * 'ccwgUploadProtocol'
+--
+-- * 'ccwgPp'
+--
+-- * 'ccwgCourseId'
+--
+-- * 'ccwgAccessToken'
+--
+-- * 'ccwgUploadType'
+--
+-- * 'ccwgBearerToken'
+--
+-- * 'ccwgId'
+--
+-- * 'ccwgCallback'
+coursesCourseWorkGet
+    :: Text -- ^ 'ccwgCourseId'
+    -> Text -- ^ 'ccwgId'
+    -> CoursesCourseWorkGet
+coursesCourseWorkGet pCcwgCourseId_ pCcwgId_ =
+    CoursesCourseWorkGet'
+    { _ccwgXgafv = Nothing
+    , _ccwgUploadProtocol = Nothing
+    , _ccwgPp = True
+    , _ccwgCourseId = pCcwgCourseId_
+    , _ccwgAccessToken = Nothing
+    , _ccwgUploadType = Nothing
+    , _ccwgBearerToken = Nothing
+    , _ccwgId = pCcwgId_
+    , _ccwgCallback = Nothing
+    }
+
+-- | V1 error format.
+ccwgXgafv :: Lens' CoursesCourseWorkGet (Maybe Text)
+ccwgXgafv
+  = lens _ccwgXgafv (\ s a -> s{_ccwgXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+ccwgUploadProtocol :: Lens' CoursesCourseWorkGet (Maybe Text)
+ccwgUploadProtocol
+  = lens _ccwgUploadProtocol
+      (\ s a -> s{_ccwgUploadProtocol = a})
+
+-- | Pretty-print response.
+ccwgPp :: Lens' CoursesCourseWorkGet Bool
+ccwgPp = lens _ccwgPp (\ s a -> s{_ccwgPp = a})
+
+-- | Identifier of the course. This identifier can be either the
+-- Classroom-assigned identifier or an alias.
+ccwgCourseId :: Lens' CoursesCourseWorkGet Text
+ccwgCourseId
+  = lens _ccwgCourseId (\ s a -> s{_ccwgCourseId = a})
+
+-- | OAuth access token.
+ccwgAccessToken :: Lens' CoursesCourseWorkGet (Maybe Text)
+ccwgAccessToken
+  = lens _ccwgAccessToken
+      (\ s a -> s{_ccwgAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+ccwgUploadType :: Lens' CoursesCourseWorkGet (Maybe Text)
+ccwgUploadType
+  = lens _ccwgUploadType
+      (\ s a -> s{_ccwgUploadType = a})
+
+-- | OAuth bearer token.
+ccwgBearerToken :: Lens' CoursesCourseWorkGet (Maybe Text)
+ccwgBearerToken
+  = lens _ccwgBearerToken
+      (\ s a -> s{_ccwgBearerToken = a})
+
+-- | Identifier of the course work.
+ccwgId :: Lens' CoursesCourseWorkGet Text
+ccwgId = lens _ccwgId (\ s a -> s{_ccwgId = a})
+
+-- | JSONP
+ccwgCallback :: Lens' CoursesCourseWorkGet (Maybe Text)
+ccwgCallback
+  = lens _ccwgCallback (\ s a -> s{_ccwgCallback = a})
+
+instance GoogleRequest CoursesCourseWorkGet where
+        type Rs CoursesCourseWorkGet = CourseWork
+        type Scopes CoursesCourseWorkGet =
+             '["https://www.googleapis.com/auth/classroom.course-work.readonly",
+               "https://www.googleapis.com/auth/classroom.coursework.me",
+               "https://www.googleapis.com/auth/classroom.coursework.me.readonly",
+               "https://www.googleapis.com/auth/classroom.coursework.students",
+               "https://www.googleapis.com/auth/classroom.coursework.students.readonly"]
+        requestClient CoursesCourseWorkGet'{..}
+          = go _ccwgCourseId _ccwgId _ccwgXgafv
+              _ccwgUploadProtocol
+              (Just _ccwgPp)
+              _ccwgAccessToken
+              _ccwgUploadType
+              _ccwgBearerToken
+              _ccwgCallback
+              (Just AltJSON)
+              classroomService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy CoursesCourseWorkGetResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Classroom/Courses/CourseWork/List.hs b/gen/Network/Google/Resource/Classroom/Courses/CourseWork/List.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Classroom/Courses/CourseWork/List.hs
@@ -0,0 +1,255 @@
+{-# 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.CourseWork.List
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns a list of course work that the requester is permitted to view.
+-- Course students may only view \`PUBLISHED\` course work. Course teachers
+-- and domain administrators may view all course work. 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. * \`INVALID_ARGUMENT\` if the request is malformed. *
+-- \`NOT_FOUND\` if the requested course does not exist.
+--
+-- /See:/ <https://developers.google.com/classroom/ Google Classroom API Reference> for @classroom.courses.courseWork.list@.
+module Network.Google.Resource.Classroom.Courses.CourseWork.List
+    (
+    -- * REST Resource
+      CoursesCourseWorkListResource
+
+    -- * Creating a Request
+    , coursesCourseWorkList
+    , CoursesCourseWorkList
+
+    -- * Request Lenses
+    , ccwlXgafv
+    , ccwlUploadProtocol
+    , ccwlOrderBy
+    , ccwlPp
+    , ccwlCourseId
+    , ccwlAccessToken
+    , ccwlCourseWorkStates
+    , ccwlUploadType
+    , ccwlBearerToken
+    , ccwlPageToken
+    , ccwlPageSize
+    , ccwlCallback
+    ) where
+
+import           Network.Google.Classroom.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @classroom.courses.courseWork.list@ method which the
+-- 'CoursesCourseWorkList' request conforms to.
+type CoursesCourseWorkListResource =
+     "v1" :>
+       "courses" :>
+         Capture "courseId" Text :>
+           "courseWork" :>
+             QueryParam "$.xgafv" Text :>
+               QueryParam "upload_protocol" Text :>
+                 QueryParam "orderBy" Text :>
+                   QueryParam "pp" Bool :>
+                     QueryParam "access_token" Text :>
+                       QueryParams "courseWorkStates" Text :>
+                         QueryParam "uploadType" Text :>
+                           QueryParam "bearer_token" Text :>
+                             QueryParam "pageToken" Text :>
+                               QueryParam "pageSize" (Textual Int32) :>
+                                 QueryParam "callback" Text :>
+                                   QueryParam "alt" AltJSON :>
+                                     Get '[JSON] ListCourseWorkResponse
+
+-- | Returns a list of course work that the requester is permitted to view.
+-- Course students may only view \`PUBLISHED\` course work. Course teachers
+-- and domain administrators may view all course work. 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. * \`INVALID_ARGUMENT\` if the request is malformed. *
+-- \`NOT_FOUND\` if the requested course does not exist.
+--
+-- /See:/ 'coursesCourseWorkList' smart constructor.
+data CoursesCourseWorkList = CoursesCourseWorkList'
+    { _ccwlXgafv            :: !(Maybe Text)
+    , _ccwlUploadProtocol   :: !(Maybe Text)
+    , _ccwlOrderBy          :: !(Maybe Text)
+    , _ccwlPp               :: !Bool
+    , _ccwlCourseId         :: !Text
+    , _ccwlAccessToken      :: !(Maybe Text)
+    , _ccwlCourseWorkStates :: !(Maybe [Text])
+    , _ccwlUploadType       :: !(Maybe Text)
+    , _ccwlBearerToken      :: !(Maybe Text)
+    , _ccwlPageToken        :: !(Maybe Text)
+    , _ccwlPageSize         :: !(Maybe (Textual Int32))
+    , _ccwlCallback         :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CoursesCourseWorkList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ccwlXgafv'
+--
+-- * 'ccwlUploadProtocol'
+--
+-- * 'ccwlOrderBy'
+--
+-- * 'ccwlPp'
+--
+-- * 'ccwlCourseId'
+--
+-- * 'ccwlAccessToken'
+--
+-- * 'ccwlCourseWorkStates'
+--
+-- * 'ccwlUploadType'
+--
+-- * 'ccwlBearerToken'
+--
+-- * 'ccwlPageToken'
+--
+-- * 'ccwlPageSize'
+--
+-- * 'ccwlCallback'
+coursesCourseWorkList
+    :: Text -- ^ 'ccwlCourseId'
+    -> CoursesCourseWorkList
+coursesCourseWorkList pCcwlCourseId_ =
+    CoursesCourseWorkList'
+    { _ccwlXgafv = Nothing
+    , _ccwlUploadProtocol = Nothing
+    , _ccwlOrderBy = Nothing
+    , _ccwlPp = True
+    , _ccwlCourseId = pCcwlCourseId_
+    , _ccwlAccessToken = Nothing
+    , _ccwlCourseWorkStates = Nothing
+    , _ccwlUploadType = Nothing
+    , _ccwlBearerToken = Nothing
+    , _ccwlPageToken = Nothing
+    , _ccwlPageSize = Nothing
+    , _ccwlCallback = Nothing
+    }
+
+-- | V1 error format.
+ccwlXgafv :: Lens' CoursesCourseWorkList (Maybe Text)
+ccwlXgafv
+  = lens _ccwlXgafv (\ s a -> s{_ccwlXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+ccwlUploadProtocol :: Lens' CoursesCourseWorkList (Maybe Text)
+ccwlUploadProtocol
+  = lens _ccwlUploadProtocol
+      (\ s a -> s{_ccwlUploadProtocol = a})
+
+-- | Optional sort ordering for results. A comma-separated list of fields
+-- with an optional sort direction keyword. Supported fields are
+-- \`updateTime\` and \`dueDate\`. Supported direction keywords are \`asc\`
+-- and \`desc\`. If not specified, \`updateTime desc\` is the default
+-- behavior. Examples: \`dueDate asc,updateTime desc\`,
+-- \`updateTime,dueDate desc\`
+ccwlOrderBy :: Lens' CoursesCourseWorkList (Maybe Text)
+ccwlOrderBy
+  = lens _ccwlOrderBy (\ s a -> s{_ccwlOrderBy = a})
+
+-- | Pretty-print response.
+ccwlPp :: Lens' CoursesCourseWorkList Bool
+ccwlPp = lens _ccwlPp (\ s a -> s{_ccwlPp = a})
+
+-- | Identifier of the course. This identifier can be either the
+-- Classroom-assigned identifier or an alias.
+ccwlCourseId :: Lens' CoursesCourseWorkList Text
+ccwlCourseId
+  = lens _ccwlCourseId (\ s a -> s{_ccwlCourseId = a})
+
+-- | OAuth access token.
+ccwlAccessToken :: Lens' CoursesCourseWorkList (Maybe Text)
+ccwlAccessToken
+  = lens _ccwlAccessToken
+      (\ s a -> s{_ccwlAccessToken = a})
+
+-- | Restriction on the work status to return. Only courseWork that matches
+-- is returned. If unspecified, items with a work status of \`PUBLISHED\`
+-- is returned.
+ccwlCourseWorkStates :: Lens' CoursesCourseWorkList [Text]
+ccwlCourseWorkStates
+  = lens _ccwlCourseWorkStates
+      (\ s a -> s{_ccwlCourseWorkStates = a})
+      . _Default
+      . _Coerce
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+ccwlUploadType :: Lens' CoursesCourseWorkList (Maybe Text)
+ccwlUploadType
+  = lens _ccwlUploadType
+      (\ s a -> s{_ccwlUploadType = a})
+
+-- | OAuth bearer token.
+ccwlBearerToken :: Lens' CoursesCourseWorkList (Maybe Text)
+ccwlBearerToken
+  = lens _ccwlBearerToken
+      (\ s a -> s{_ccwlBearerToken = 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.
+ccwlPageToken :: Lens' CoursesCourseWorkList (Maybe Text)
+ccwlPageToken
+  = lens _ccwlPageToken
+      (\ s a -> s{_ccwlPageToken = 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.
+ccwlPageSize :: Lens' CoursesCourseWorkList (Maybe Int32)
+ccwlPageSize
+  = lens _ccwlPageSize (\ s a -> s{_ccwlPageSize = a})
+      . mapping _Coerce
+
+-- | JSONP
+ccwlCallback :: Lens' CoursesCourseWorkList (Maybe Text)
+ccwlCallback
+  = lens _ccwlCallback (\ s a -> s{_ccwlCallback = a})
+
+instance GoogleRequest CoursesCourseWorkList where
+        type Rs CoursesCourseWorkList =
+             ListCourseWorkResponse
+        type Scopes CoursesCourseWorkList =
+             '["https://www.googleapis.com/auth/classroom.course-work.readonly",
+               "https://www.googleapis.com/auth/classroom.coursework.me",
+               "https://www.googleapis.com/auth/classroom.coursework.me.readonly",
+               "https://www.googleapis.com/auth/classroom.coursework.students",
+               "https://www.googleapis.com/auth/classroom.coursework.students.readonly"]
+        requestClient CoursesCourseWorkList'{..}
+          = go _ccwlCourseId _ccwlXgafv _ccwlUploadProtocol
+              _ccwlOrderBy
+              (Just _ccwlPp)
+              _ccwlAccessToken
+              (_ccwlCourseWorkStates ^. _Default)
+              _ccwlUploadType
+              _ccwlBearerToken
+              _ccwlPageToken
+              _ccwlPageSize
+              _ccwlCallback
+              (Just AltJSON)
+              classroomService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy CoursesCourseWorkListResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Classroom/Courses/CourseWork/StudentSubmissions/Get.hs b/gen/Network/Google/Resource/Classroom/Courses/CourseWork/StudentSubmissions/Get.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Classroom/Courses/CourseWork/StudentSubmissions/Get.hs
@@ -0,0 +1,220 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.Classroom.Courses.CourseWork.StudentSubmissions.Get
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns a student submission. * \`PERMISSION_DENIED\` if the requesting
+-- user is not permitted to access the requested course, course work, or
+-- student submission or for access errors. * \`INVALID_ARGUMENT\` if the
+-- request is malformed. * \`NOT_FOUND\` if the requested course, course
+-- work, or student submission does not exist.
+--
+-- /See:/ <https://developers.google.com/classroom/ Google Classroom API Reference> for @classroom.courses.courseWork.studentSubmissions.get@.
+module Network.Google.Resource.Classroom.Courses.CourseWork.StudentSubmissions.Get
+    (
+    -- * REST Resource
+      CoursesCourseWorkStudentSubmissionsGetResource
+
+    -- * Creating a Request
+    , coursesCourseWorkStudentSubmissionsGet
+    , CoursesCourseWorkStudentSubmissionsGet
+
+    -- * Request Lenses
+    , ccwssgXgafv
+    , ccwssgUploadProtocol
+    , ccwssgPp
+    , ccwssgCourseId
+    , ccwssgAccessToken
+    , ccwssgUploadType
+    , ccwssgBearerToken
+    , ccwssgId
+    , ccwssgCallback
+    , ccwssgCourseWorkId
+    ) where
+
+import           Network.Google.Classroom.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @classroom.courses.courseWork.studentSubmissions.get@ method which the
+-- 'CoursesCourseWorkStudentSubmissionsGet' request conforms to.
+type CoursesCourseWorkStudentSubmissionsGetResource =
+     "v1" :>
+       "courses" :>
+         Capture "courseId" Text :>
+           "courseWork" :>
+             Capture "courseWorkId" Text :>
+               "studentSubmissions" :>
+                 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] StudentSubmission
+
+-- | Returns a student submission. * \`PERMISSION_DENIED\` if the requesting
+-- user is not permitted to access the requested course, course work, or
+-- student submission or for access errors. * \`INVALID_ARGUMENT\` if the
+-- request is malformed. * \`NOT_FOUND\` if the requested course, course
+-- work, or student submission does not exist.
+--
+-- /See:/ 'coursesCourseWorkStudentSubmissionsGet' smart constructor.
+data CoursesCourseWorkStudentSubmissionsGet = CoursesCourseWorkStudentSubmissionsGet'
+    { _ccwssgXgafv          :: !(Maybe Text)
+    , _ccwssgUploadProtocol :: !(Maybe Text)
+    , _ccwssgPp             :: !Bool
+    , _ccwssgCourseId       :: !Text
+    , _ccwssgAccessToken    :: !(Maybe Text)
+    , _ccwssgUploadType     :: !(Maybe Text)
+    , _ccwssgBearerToken    :: !(Maybe Text)
+    , _ccwssgId             :: !Text
+    , _ccwssgCallback       :: !(Maybe Text)
+    , _ccwssgCourseWorkId   :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CoursesCourseWorkStudentSubmissionsGet' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ccwssgXgafv'
+--
+-- * 'ccwssgUploadProtocol'
+--
+-- * 'ccwssgPp'
+--
+-- * 'ccwssgCourseId'
+--
+-- * 'ccwssgAccessToken'
+--
+-- * 'ccwssgUploadType'
+--
+-- * 'ccwssgBearerToken'
+--
+-- * 'ccwssgId'
+--
+-- * 'ccwssgCallback'
+--
+-- * 'ccwssgCourseWorkId'
+coursesCourseWorkStudentSubmissionsGet
+    :: Text -- ^ 'ccwssgCourseId'
+    -> Text -- ^ 'ccwssgId'
+    -> Text -- ^ 'ccwssgCourseWorkId'
+    -> CoursesCourseWorkStudentSubmissionsGet
+coursesCourseWorkStudentSubmissionsGet pCcwssgCourseId_ pCcwssgId_ pCcwssgCourseWorkId_ =
+    CoursesCourseWorkStudentSubmissionsGet'
+    { _ccwssgXgafv = Nothing
+    , _ccwssgUploadProtocol = Nothing
+    , _ccwssgPp = True
+    , _ccwssgCourseId = pCcwssgCourseId_
+    , _ccwssgAccessToken = Nothing
+    , _ccwssgUploadType = Nothing
+    , _ccwssgBearerToken = Nothing
+    , _ccwssgId = pCcwssgId_
+    , _ccwssgCallback = Nothing
+    , _ccwssgCourseWorkId = pCcwssgCourseWorkId_
+    }
+
+-- | V1 error format.
+ccwssgXgafv :: Lens' CoursesCourseWorkStudentSubmissionsGet (Maybe Text)
+ccwssgXgafv
+  = lens _ccwssgXgafv (\ s a -> s{_ccwssgXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+ccwssgUploadProtocol :: Lens' CoursesCourseWorkStudentSubmissionsGet (Maybe Text)
+ccwssgUploadProtocol
+  = lens _ccwssgUploadProtocol
+      (\ s a -> s{_ccwssgUploadProtocol = a})
+
+-- | Pretty-print response.
+ccwssgPp :: Lens' CoursesCourseWorkStudentSubmissionsGet Bool
+ccwssgPp = lens _ccwssgPp (\ s a -> s{_ccwssgPp = a})
+
+-- | Identifier of the course. This identifier can be either the
+-- Classroom-assigned identifier or an alias.
+ccwssgCourseId :: Lens' CoursesCourseWorkStudentSubmissionsGet Text
+ccwssgCourseId
+  = lens _ccwssgCourseId
+      (\ s a -> s{_ccwssgCourseId = a})
+
+-- | OAuth access token.
+ccwssgAccessToken :: Lens' CoursesCourseWorkStudentSubmissionsGet (Maybe Text)
+ccwssgAccessToken
+  = lens _ccwssgAccessToken
+      (\ s a -> s{_ccwssgAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+ccwssgUploadType :: Lens' CoursesCourseWorkStudentSubmissionsGet (Maybe Text)
+ccwssgUploadType
+  = lens _ccwssgUploadType
+      (\ s a -> s{_ccwssgUploadType = a})
+
+-- | OAuth bearer token.
+ccwssgBearerToken :: Lens' CoursesCourseWorkStudentSubmissionsGet (Maybe Text)
+ccwssgBearerToken
+  = lens _ccwssgBearerToken
+      (\ s a -> s{_ccwssgBearerToken = a})
+
+-- | Identifier of the student submission.
+ccwssgId :: Lens' CoursesCourseWorkStudentSubmissionsGet Text
+ccwssgId = lens _ccwssgId (\ s a -> s{_ccwssgId = a})
+
+-- | JSONP
+ccwssgCallback :: Lens' CoursesCourseWorkStudentSubmissionsGet (Maybe Text)
+ccwssgCallback
+  = lens _ccwssgCallback
+      (\ s a -> s{_ccwssgCallback = a})
+
+-- | Identifier of the course work.
+ccwssgCourseWorkId :: Lens' CoursesCourseWorkStudentSubmissionsGet Text
+ccwssgCourseWorkId
+  = lens _ccwssgCourseWorkId
+      (\ s a -> s{_ccwssgCourseWorkId = a})
+
+instance GoogleRequest
+         CoursesCourseWorkStudentSubmissionsGet where
+        type Rs CoursesCourseWorkStudentSubmissionsGet =
+             StudentSubmission
+        type Scopes CoursesCourseWorkStudentSubmissionsGet =
+             '["https://www.googleapis.com/auth/classroom.coursework.me",
+               "https://www.googleapis.com/auth/classroom.coursework.me.readonly",
+               "https://www.googleapis.com/auth/classroom.coursework.students",
+               "https://www.googleapis.com/auth/classroom.coursework.students.readonly",
+               "https://www.googleapis.com/auth/classroom.student-submissions.me.readonly",
+               "https://www.googleapis.com/auth/classroom.student-submissions.students.readonly"]
+        requestClient
+          CoursesCourseWorkStudentSubmissionsGet'{..}
+          = go _ccwssgCourseId _ccwssgCourseWorkId _ccwssgId
+              _ccwssgXgafv
+              _ccwssgUploadProtocol
+              (Just _ccwssgPp)
+              _ccwssgAccessToken
+              _ccwssgUploadType
+              _ccwssgBearerToken
+              _ccwssgCallback
+              (Just AltJSON)
+              classroomService
+          where go
+                  = buildClient
+                      (Proxy ::
+                         Proxy CoursesCourseWorkStudentSubmissionsGetResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Classroom/Courses/CourseWork/StudentSubmissions/List.hs b/gen/Network/Google/Resource/Classroom/Courses/CourseWork/StudentSubmissions/List.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Classroom/Courses/CourseWork/StudentSubmissions/List.hs
@@ -0,0 +1,300 @@
+{-# 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.CourseWork.StudentSubmissions.List
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns a list of student submissions that the requester is permitted to
+-- view, factoring in the OAuth scopes of the request. \`-\` may be
+-- specified as the \`course_work_id\` to include student submissions for
+-- multiple course work items. Course students may only view their own
+-- work. Course teachers and domain administrators may view all student
+-- submissions. This method returns the following error codes: *
+-- \`PERMISSION_DENIED\` if the requesting user is not permitted to access
+-- the requested course or course work, or for access errors. *
+-- \`INVALID_ARGUMENT\` if the request is malformed. * \`NOT_FOUND\` if the
+-- requested course does not exist.
+--
+-- /See:/ <https://developers.google.com/classroom/ Google Classroom API Reference> for @classroom.courses.courseWork.studentSubmissions.list@.
+module Network.Google.Resource.Classroom.Courses.CourseWork.StudentSubmissions.List
+    (
+    -- * REST Resource
+      CoursesCourseWorkStudentSubmissionsListResource
+
+    -- * Creating a Request
+    , coursesCourseWorkStudentSubmissionsList
+    , CoursesCourseWorkStudentSubmissionsList
+
+    -- * Request Lenses
+    , ccwsslStates
+    , ccwsslXgafv
+    , ccwsslLate
+    , ccwsslUploadProtocol
+    , ccwsslPp
+    , ccwsslCourseId
+    , ccwsslAccessToken
+    , ccwsslUploadType
+    , ccwsslUserId
+    , ccwsslBearerToken
+    , ccwsslPageToken
+    , ccwsslPageSize
+    , ccwsslCallback
+    , ccwsslCourseWorkId
+    ) where
+
+import           Network.Google.Classroom.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @classroom.courses.courseWork.studentSubmissions.list@ method which the
+-- 'CoursesCourseWorkStudentSubmissionsList' request conforms to.
+type CoursesCourseWorkStudentSubmissionsListResource
+     =
+     "v1" :>
+       "courses" :>
+         Capture "courseId" Text :>
+           "courseWork" :>
+             Capture "courseWorkId" Text :>
+               "studentSubmissions" :>
+                 QueryParams "states" Text :>
+                   QueryParam "$.xgafv" Text :>
+                     QueryParam "late" Text :>
+                       QueryParam "upload_protocol" Text :>
+                         QueryParam "pp" Bool :>
+                           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]
+                                             ListStudentSubmissionsResponse
+
+-- | Returns a list of student submissions that the requester is permitted to
+-- view, factoring in the OAuth scopes of the request. \`-\` may be
+-- specified as the \`course_work_id\` to include student submissions for
+-- multiple course work items. Course students may only view their own
+-- work. Course teachers and domain administrators may view all student
+-- submissions. This method returns the following error codes: *
+-- \`PERMISSION_DENIED\` if the requesting user is not permitted to access
+-- the requested course or course work, or for access errors. *
+-- \`INVALID_ARGUMENT\` if the request is malformed. * \`NOT_FOUND\` if the
+-- requested course does not exist.
+--
+-- /See:/ 'coursesCourseWorkStudentSubmissionsList' smart constructor.
+data CoursesCourseWorkStudentSubmissionsList = CoursesCourseWorkStudentSubmissionsList'
+    { _ccwsslStates         :: !(Maybe [Text])
+    , _ccwsslXgafv          :: !(Maybe Text)
+    , _ccwsslLate           :: !(Maybe Text)
+    , _ccwsslUploadProtocol :: !(Maybe Text)
+    , _ccwsslPp             :: !Bool
+    , _ccwsslCourseId       :: !Text
+    , _ccwsslAccessToken    :: !(Maybe Text)
+    , _ccwsslUploadType     :: !(Maybe Text)
+    , _ccwsslUserId         :: !(Maybe Text)
+    , _ccwsslBearerToken    :: !(Maybe Text)
+    , _ccwsslPageToken      :: !(Maybe Text)
+    , _ccwsslPageSize       :: !(Maybe (Textual Int32))
+    , _ccwsslCallback       :: !(Maybe Text)
+    , _ccwsslCourseWorkId   :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CoursesCourseWorkStudentSubmissionsList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ccwsslStates'
+--
+-- * 'ccwsslXgafv'
+--
+-- * 'ccwsslLate'
+--
+-- * 'ccwsslUploadProtocol'
+--
+-- * 'ccwsslPp'
+--
+-- * 'ccwsslCourseId'
+--
+-- * 'ccwsslAccessToken'
+--
+-- * 'ccwsslUploadType'
+--
+-- * 'ccwsslUserId'
+--
+-- * 'ccwsslBearerToken'
+--
+-- * 'ccwsslPageToken'
+--
+-- * 'ccwsslPageSize'
+--
+-- * 'ccwsslCallback'
+--
+-- * 'ccwsslCourseWorkId'
+coursesCourseWorkStudentSubmissionsList
+    :: Text -- ^ 'ccwsslCourseId'
+    -> Text -- ^ 'ccwsslCourseWorkId'
+    -> CoursesCourseWorkStudentSubmissionsList
+coursesCourseWorkStudentSubmissionsList pCcwsslCourseId_ pCcwsslCourseWorkId_ =
+    CoursesCourseWorkStudentSubmissionsList'
+    { _ccwsslStates = Nothing
+    , _ccwsslXgafv = Nothing
+    , _ccwsslLate = Nothing
+    , _ccwsslUploadProtocol = Nothing
+    , _ccwsslPp = True
+    , _ccwsslCourseId = pCcwsslCourseId_
+    , _ccwsslAccessToken = Nothing
+    , _ccwsslUploadType = Nothing
+    , _ccwsslUserId = Nothing
+    , _ccwsslBearerToken = Nothing
+    , _ccwsslPageToken = Nothing
+    , _ccwsslPageSize = Nothing
+    , _ccwsslCallback = Nothing
+    , _ccwsslCourseWorkId = pCcwsslCourseWorkId_
+    }
+
+-- | Requested submission states. If specified, returned student submissions
+-- match one of the specified submission states.
+ccwsslStates :: Lens' CoursesCourseWorkStudentSubmissionsList [Text]
+ccwsslStates
+  = lens _ccwsslStates (\ s a -> s{_ccwsslStates = a})
+      . _Default
+      . _Coerce
+
+-- | V1 error format.
+ccwsslXgafv :: Lens' CoursesCourseWorkStudentSubmissionsList (Maybe Text)
+ccwsslXgafv
+  = lens _ccwsslXgafv (\ s a -> s{_ccwsslXgafv = a})
+
+-- | Requested lateness value. If specified, returned student submissions are
+-- restricted by the requested value. If unspecified, submissions are
+-- returned regardless of \`late\` value.
+ccwsslLate :: Lens' CoursesCourseWorkStudentSubmissionsList (Maybe Text)
+ccwsslLate
+  = lens _ccwsslLate (\ s a -> s{_ccwsslLate = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+ccwsslUploadProtocol :: Lens' CoursesCourseWorkStudentSubmissionsList (Maybe Text)
+ccwsslUploadProtocol
+  = lens _ccwsslUploadProtocol
+      (\ s a -> s{_ccwsslUploadProtocol = a})
+
+-- | Pretty-print response.
+ccwsslPp :: Lens' CoursesCourseWorkStudentSubmissionsList Bool
+ccwsslPp = lens _ccwsslPp (\ s a -> s{_ccwsslPp = a})
+
+-- | Identifier of the course. This identifier can be either the
+-- Classroom-assigned identifier or an alias.
+ccwsslCourseId :: Lens' CoursesCourseWorkStudentSubmissionsList Text
+ccwsslCourseId
+  = lens _ccwsslCourseId
+      (\ s a -> s{_ccwsslCourseId = a})
+
+-- | OAuth access token.
+ccwsslAccessToken :: Lens' CoursesCourseWorkStudentSubmissionsList (Maybe Text)
+ccwsslAccessToken
+  = lens _ccwsslAccessToken
+      (\ s a -> s{_ccwsslAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+ccwsslUploadType :: Lens' CoursesCourseWorkStudentSubmissionsList (Maybe Text)
+ccwsslUploadType
+  = lens _ccwsslUploadType
+      (\ s a -> s{_ccwsslUploadType = a})
+
+-- | Optional argument to restrict returned student work to those owned by
+-- the 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
+ccwsslUserId :: Lens' CoursesCourseWorkStudentSubmissionsList (Maybe Text)
+ccwsslUserId
+  = lens _ccwsslUserId (\ s a -> s{_ccwsslUserId = a})
+
+-- | OAuth bearer token.
+ccwsslBearerToken :: Lens' CoursesCourseWorkStudentSubmissionsList (Maybe Text)
+ccwsslBearerToken
+  = lens _ccwsslBearerToken
+      (\ s a -> s{_ccwsslBearerToken = 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.
+ccwsslPageToken :: Lens' CoursesCourseWorkStudentSubmissionsList (Maybe Text)
+ccwsslPageToken
+  = lens _ccwsslPageToken
+      (\ s a -> s{_ccwsslPageToken = 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.
+ccwsslPageSize :: Lens' CoursesCourseWorkStudentSubmissionsList (Maybe Int32)
+ccwsslPageSize
+  = lens _ccwsslPageSize
+      (\ s a -> s{_ccwsslPageSize = a})
+      . mapping _Coerce
+
+-- | JSONP
+ccwsslCallback :: Lens' CoursesCourseWorkStudentSubmissionsList (Maybe Text)
+ccwsslCallback
+  = lens _ccwsslCallback
+      (\ s a -> s{_ccwsslCallback = a})
+
+-- | Identifer of the student work to request. If \`user_id\` is specified,
+-- this may be set to the string literal \`\"-\"\` to request student work
+-- for all course work in the specified course.
+ccwsslCourseWorkId :: Lens' CoursesCourseWorkStudentSubmissionsList Text
+ccwsslCourseWorkId
+  = lens _ccwsslCourseWorkId
+      (\ s a -> s{_ccwsslCourseWorkId = a})
+
+instance GoogleRequest
+         CoursesCourseWorkStudentSubmissionsList where
+        type Rs CoursesCourseWorkStudentSubmissionsList =
+             ListStudentSubmissionsResponse
+        type Scopes CoursesCourseWorkStudentSubmissionsList =
+             '["https://www.googleapis.com/auth/classroom.coursework.me",
+               "https://www.googleapis.com/auth/classroom.coursework.me.readonly",
+               "https://www.googleapis.com/auth/classroom.coursework.students",
+               "https://www.googleapis.com/auth/classroom.coursework.students.readonly",
+               "https://www.googleapis.com/auth/classroom.student-submissions.me.readonly",
+               "https://www.googleapis.com/auth/classroom.student-submissions.students.readonly"]
+        requestClient
+          CoursesCourseWorkStudentSubmissionsList'{..}
+          = go _ccwsslCourseId _ccwsslCourseWorkId
+              (_ccwsslStates ^. _Default)
+              _ccwsslXgafv
+              _ccwsslLate
+              _ccwsslUploadProtocol
+              (Just _ccwsslPp)
+              _ccwsslAccessToken
+              _ccwsslUploadType
+              _ccwsslUserId
+              _ccwsslBearerToken
+              _ccwsslPageToken
+              _ccwsslPageSize
+              _ccwsslCallback
+              (Just AltJSON)
+              classroomService
+          where go
+                  = buildClient
+                      (Proxy ::
+                         Proxy
+                           CoursesCourseWorkStudentSubmissionsListResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Classroom/Courses/CourseWork/StudentSubmissions/ModifyAttachments.hs b/gen/Network/Google/Resource/Classroom/Courses/CourseWork/StudentSubmissions/ModifyAttachments.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Classroom/Courses/CourseWork/StudentSubmissions/ModifyAttachments.hs
@@ -0,0 +1,250 @@
+{-# 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.CourseWork.StudentSubmissions.ModifyAttachments
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Modifies attachments of student submission. Attachments may only be
+-- added to student submissions whose type is \`ASSIGNMENT\`. This request
+-- must be made by the Developer Console project of the [OAuth client
+-- ID](https:\/\/support.google.com\/cloud\/answer\/6158849) used to create
+-- the corresponding course work item. This method returns the following
+-- error codes: * \`PERMISSION_DENIED\` if the requesting user is not
+-- permitted to access the requested course or course work, if the user is
+-- not permitted to modify attachments on the requested student submission,
+-- or for access errors. * \`INVALID_ARGUMENT\` if the request is
+-- malformed. * \`NOT_FOUND\` if the requested course, course work, or
+-- student submission does not exist.
+--
+-- /See:/ <https://developers.google.com/classroom/ Google Classroom API Reference> for @classroom.courses.courseWork.studentSubmissions.modifyAttachments@.
+module Network.Google.Resource.Classroom.Courses.CourseWork.StudentSubmissions.ModifyAttachments
+    (
+    -- * REST Resource
+      CoursesCourseWorkStudentSubmissionsModifyAttachmentsResource
+
+    -- * Creating a Request
+    , coursesCourseWorkStudentSubmissionsModifyAttachments
+    , CoursesCourseWorkStudentSubmissionsModifyAttachments
+
+    -- * Request Lenses
+    , ccwssmaXgafv
+    , ccwssmaUploadProtocol
+    , ccwssmaPp
+    , ccwssmaCourseId
+    , ccwssmaAccessToken
+    , ccwssmaUploadType
+    , ccwssmaPayload
+    , ccwssmaBearerToken
+    , ccwssmaId
+    , ccwssmaCallback
+    , ccwssmaCourseWorkId
+    ) where
+
+import           Network.Google.Classroom.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @classroom.courses.courseWork.studentSubmissions.modifyAttachments@ method which the
+-- 'CoursesCourseWorkStudentSubmissionsModifyAttachments' request conforms to.
+type CoursesCourseWorkStudentSubmissionsModifyAttachmentsResource
+     =
+     "v1" :>
+       "courses" :>
+         Capture "courseId" Text :>
+           "courseWork" :>
+             Capture "courseWorkId" Text :>
+               "studentSubmissions" :>
+                 CaptureMode "id" "modifyAttachments" 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] ModifyAttachmentsRequest :>
+                                     Post '[JSON] StudentSubmission
+
+-- | Modifies attachments of student submission. Attachments may only be
+-- added to student submissions whose type is \`ASSIGNMENT\`. This request
+-- must be made by the Developer Console project of the [OAuth client
+-- ID](https:\/\/support.google.com\/cloud\/answer\/6158849) used to create
+-- the corresponding course work item. This method returns the following
+-- error codes: * \`PERMISSION_DENIED\` if the requesting user is not
+-- permitted to access the requested course or course work, if the user is
+-- not permitted to modify attachments on the requested student submission,
+-- or for access errors. * \`INVALID_ARGUMENT\` if the request is
+-- malformed. * \`NOT_FOUND\` if the requested course, course work, or
+-- student submission does not exist.
+--
+-- /See:/ 'coursesCourseWorkStudentSubmissionsModifyAttachments' smart constructor.
+data CoursesCourseWorkStudentSubmissionsModifyAttachments = CoursesCourseWorkStudentSubmissionsModifyAttachments'
+    { _ccwssmaXgafv          :: !(Maybe Text)
+    , _ccwssmaUploadProtocol :: !(Maybe Text)
+    , _ccwssmaPp             :: !Bool
+    , _ccwssmaCourseId       :: !Text
+    , _ccwssmaAccessToken    :: !(Maybe Text)
+    , _ccwssmaUploadType     :: !(Maybe Text)
+    , _ccwssmaPayload        :: !ModifyAttachmentsRequest
+    , _ccwssmaBearerToken    :: !(Maybe Text)
+    , _ccwssmaId             :: !Text
+    , _ccwssmaCallback       :: !(Maybe Text)
+    , _ccwssmaCourseWorkId   :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CoursesCourseWorkStudentSubmissionsModifyAttachments' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ccwssmaXgafv'
+--
+-- * 'ccwssmaUploadProtocol'
+--
+-- * 'ccwssmaPp'
+--
+-- * 'ccwssmaCourseId'
+--
+-- * 'ccwssmaAccessToken'
+--
+-- * 'ccwssmaUploadType'
+--
+-- * 'ccwssmaPayload'
+--
+-- * 'ccwssmaBearerToken'
+--
+-- * 'ccwssmaId'
+--
+-- * 'ccwssmaCallback'
+--
+-- * 'ccwssmaCourseWorkId'
+coursesCourseWorkStudentSubmissionsModifyAttachments
+    :: Text -- ^ 'ccwssmaCourseId'
+    -> ModifyAttachmentsRequest -- ^ 'ccwssmaPayload'
+    -> Text -- ^ 'ccwssmaId'
+    -> Text -- ^ 'ccwssmaCourseWorkId'
+    -> CoursesCourseWorkStudentSubmissionsModifyAttachments
+coursesCourseWorkStudentSubmissionsModifyAttachments pCcwssmaCourseId_ pCcwssmaPayload_ pCcwssmaId_ pCcwssmaCourseWorkId_ =
+    CoursesCourseWorkStudentSubmissionsModifyAttachments'
+    { _ccwssmaXgafv = Nothing
+    , _ccwssmaUploadProtocol = Nothing
+    , _ccwssmaPp = True
+    , _ccwssmaCourseId = pCcwssmaCourseId_
+    , _ccwssmaAccessToken = Nothing
+    , _ccwssmaUploadType = Nothing
+    , _ccwssmaPayload = pCcwssmaPayload_
+    , _ccwssmaBearerToken = Nothing
+    , _ccwssmaId = pCcwssmaId_
+    , _ccwssmaCallback = Nothing
+    , _ccwssmaCourseWorkId = pCcwssmaCourseWorkId_
+    }
+
+-- | V1 error format.
+ccwssmaXgafv :: Lens' CoursesCourseWorkStudentSubmissionsModifyAttachments (Maybe Text)
+ccwssmaXgafv
+  = lens _ccwssmaXgafv (\ s a -> s{_ccwssmaXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+ccwssmaUploadProtocol :: Lens' CoursesCourseWorkStudentSubmissionsModifyAttachments (Maybe Text)
+ccwssmaUploadProtocol
+  = lens _ccwssmaUploadProtocol
+      (\ s a -> s{_ccwssmaUploadProtocol = a})
+
+-- | Pretty-print response.
+ccwssmaPp :: Lens' CoursesCourseWorkStudentSubmissionsModifyAttachments Bool
+ccwssmaPp
+  = lens _ccwssmaPp (\ s a -> s{_ccwssmaPp = a})
+
+-- | Identifier of the course. This identifier can be either the
+-- Classroom-assigned identifier or an alias.
+ccwssmaCourseId :: Lens' CoursesCourseWorkStudentSubmissionsModifyAttachments Text
+ccwssmaCourseId
+  = lens _ccwssmaCourseId
+      (\ s a -> s{_ccwssmaCourseId = a})
+
+-- | OAuth access token.
+ccwssmaAccessToken :: Lens' CoursesCourseWorkStudentSubmissionsModifyAttachments (Maybe Text)
+ccwssmaAccessToken
+  = lens _ccwssmaAccessToken
+      (\ s a -> s{_ccwssmaAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+ccwssmaUploadType :: Lens' CoursesCourseWorkStudentSubmissionsModifyAttachments (Maybe Text)
+ccwssmaUploadType
+  = lens _ccwssmaUploadType
+      (\ s a -> s{_ccwssmaUploadType = a})
+
+-- | Multipart request metadata.
+ccwssmaPayload :: Lens' CoursesCourseWorkStudentSubmissionsModifyAttachments ModifyAttachmentsRequest
+ccwssmaPayload
+  = lens _ccwssmaPayload
+      (\ s a -> s{_ccwssmaPayload = a})
+
+-- | OAuth bearer token.
+ccwssmaBearerToken :: Lens' CoursesCourseWorkStudentSubmissionsModifyAttachments (Maybe Text)
+ccwssmaBearerToken
+  = lens _ccwssmaBearerToken
+      (\ s a -> s{_ccwssmaBearerToken = a})
+
+-- | Identifier of the student submission.
+ccwssmaId :: Lens' CoursesCourseWorkStudentSubmissionsModifyAttachments Text
+ccwssmaId
+  = lens _ccwssmaId (\ s a -> s{_ccwssmaId = a})
+
+-- | JSONP
+ccwssmaCallback :: Lens' CoursesCourseWorkStudentSubmissionsModifyAttachments (Maybe Text)
+ccwssmaCallback
+  = lens _ccwssmaCallback
+      (\ s a -> s{_ccwssmaCallback = a})
+
+-- | Identifier of the course work.
+ccwssmaCourseWorkId :: Lens' CoursesCourseWorkStudentSubmissionsModifyAttachments Text
+ccwssmaCourseWorkId
+  = lens _ccwssmaCourseWorkId
+      (\ s a -> s{_ccwssmaCourseWorkId = a})
+
+instance GoogleRequest
+         CoursesCourseWorkStudentSubmissionsModifyAttachments
+         where
+        type Rs
+               CoursesCourseWorkStudentSubmissionsModifyAttachments
+             = StudentSubmission
+        type Scopes
+               CoursesCourseWorkStudentSubmissionsModifyAttachments
+             =
+             '["https://www.googleapis.com/auth/classroom.coursework.me",
+               "https://www.googleapis.com/auth/classroom.coursework.students"]
+        requestClient
+          CoursesCourseWorkStudentSubmissionsModifyAttachments'{..}
+          = go _ccwssmaCourseId _ccwssmaCourseWorkId _ccwssmaId
+              _ccwssmaXgafv
+              _ccwssmaUploadProtocol
+              (Just _ccwssmaPp)
+              _ccwssmaAccessToken
+              _ccwssmaUploadType
+              _ccwssmaBearerToken
+              _ccwssmaCallback
+              (Just AltJSON)
+              _ccwssmaPayload
+              classroomService
+          where go
+                  = buildClient
+                      (Proxy ::
+                         Proxy
+                           CoursesCourseWorkStudentSubmissionsModifyAttachmentsResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Classroom/Courses/CourseWork/StudentSubmissions/Patch.hs b/gen/Network/Google/Resource/Classroom/Courses/CourseWork/StudentSubmissions/Patch.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Classroom/Courses/CourseWork/StudentSubmissions/Patch.hs
@@ -0,0 +1,263 @@
+{-# 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.CourseWork.StudentSubmissions.Patch
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Updates one or more fields of a student submission. See
+-- google.classroom.v1.StudentSubmission for details of which fields may be
+-- updated and who may change them. This request must be made by the
+-- Developer Console project of the [OAuth client
+-- ID](https:\/\/support.google.com\/cloud\/answer\/6158849) used to create
+-- the corresponding course work item. This method returns the following
+-- error codes: * \`PERMISSION_DENIED\` if the requesting developer project
+-- did not create the corresponding course work, if the user is not
+-- permitted to make the requested modification to the student submission,
+-- or for access errors. * \`INVALID_ARGUMENT\` if the request is
+-- malformed. * \`NOT_FOUND\` if the requested course, course work, or
+-- student submission does not exist.
+--
+-- /See:/ <https://developers.google.com/classroom/ Google Classroom API Reference> for @classroom.courses.courseWork.studentSubmissions.patch@.
+module Network.Google.Resource.Classroom.Courses.CourseWork.StudentSubmissions.Patch
+    (
+    -- * REST Resource
+      CoursesCourseWorkStudentSubmissionsPatchResource
+
+    -- * Creating a Request
+    , coursesCourseWorkStudentSubmissionsPatch
+    , CoursesCourseWorkStudentSubmissionsPatch
+
+    -- * Request Lenses
+    , ccwsspXgafv
+    , ccwsspUploadProtocol
+    , ccwsspUpdateMask
+    , ccwsspPp
+    , ccwsspCourseId
+    , ccwsspAccessToken
+    , ccwsspUploadType
+    , ccwsspPayload
+    , ccwsspBearerToken
+    , ccwsspId
+    , ccwsspCallback
+    , ccwsspCourseWorkId
+    ) where
+
+import           Network.Google.Classroom.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @classroom.courses.courseWork.studentSubmissions.patch@ method which the
+-- 'CoursesCourseWorkStudentSubmissionsPatch' request conforms to.
+type CoursesCourseWorkStudentSubmissionsPatchResource
+     =
+     "v1" :>
+       "courses" :>
+         Capture "courseId" Text :>
+           "courseWork" :>
+             Capture "courseWorkId" Text :>
+               "studentSubmissions" :>
+                 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] StudentSubmission :>
+                                       Patch '[JSON] StudentSubmission
+
+-- | Updates one or more fields of a student submission. See
+-- google.classroom.v1.StudentSubmission for details of which fields may be
+-- updated and who may change them. This request must be made by the
+-- Developer Console project of the [OAuth client
+-- ID](https:\/\/support.google.com\/cloud\/answer\/6158849) used to create
+-- the corresponding course work item. This method returns the following
+-- error codes: * \`PERMISSION_DENIED\` if the requesting developer project
+-- did not create the corresponding course work, if the user is not
+-- permitted to make the requested modification to the student submission,
+-- or for access errors. * \`INVALID_ARGUMENT\` if the request is
+-- malformed. * \`NOT_FOUND\` if the requested course, course work, or
+-- student submission does not exist.
+--
+-- /See:/ 'coursesCourseWorkStudentSubmissionsPatch' smart constructor.
+data CoursesCourseWorkStudentSubmissionsPatch = CoursesCourseWorkStudentSubmissionsPatch'
+    { _ccwsspXgafv          :: !(Maybe Text)
+    , _ccwsspUploadProtocol :: !(Maybe Text)
+    , _ccwsspUpdateMask     :: !(Maybe Text)
+    , _ccwsspPp             :: !Bool
+    , _ccwsspCourseId       :: !Text
+    , _ccwsspAccessToken    :: !(Maybe Text)
+    , _ccwsspUploadType     :: !(Maybe Text)
+    , _ccwsspPayload        :: !StudentSubmission
+    , _ccwsspBearerToken    :: !(Maybe Text)
+    , _ccwsspId             :: !Text
+    , _ccwsspCallback       :: !(Maybe Text)
+    , _ccwsspCourseWorkId   :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CoursesCourseWorkStudentSubmissionsPatch' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ccwsspXgafv'
+--
+-- * 'ccwsspUploadProtocol'
+--
+-- * 'ccwsspUpdateMask'
+--
+-- * 'ccwsspPp'
+--
+-- * 'ccwsspCourseId'
+--
+-- * 'ccwsspAccessToken'
+--
+-- * 'ccwsspUploadType'
+--
+-- * 'ccwsspPayload'
+--
+-- * 'ccwsspBearerToken'
+--
+-- * 'ccwsspId'
+--
+-- * 'ccwsspCallback'
+--
+-- * 'ccwsspCourseWorkId'
+coursesCourseWorkStudentSubmissionsPatch
+    :: Text -- ^ 'ccwsspCourseId'
+    -> StudentSubmission -- ^ 'ccwsspPayload'
+    -> Text -- ^ 'ccwsspId'
+    -> Text -- ^ 'ccwsspCourseWorkId'
+    -> CoursesCourseWorkStudentSubmissionsPatch
+coursesCourseWorkStudentSubmissionsPatch pCcwsspCourseId_ pCcwsspPayload_ pCcwsspId_ pCcwsspCourseWorkId_ =
+    CoursesCourseWorkStudentSubmissionsPatch'
+    { _ccwsspXgafv = Nothing
+    , _ccwsspUploadProtocol = Nothing
+    , _ccwsspUpdateMask = Nothing
+    , _ccwsspPp = True
+    , _ccwsspCourseId = pCcwsspCourseId_
+    , _ccwsspAccessToken = Nothing
+    , _ccwsspUploadType = Nothing
+    , _ccwsspPayload = pCcwsspPayload_
+    , _ccwsspBearerToken = Nothing
+    , _ccwsspId = pCcwsspId_
+    , _ccwsspCallback = Nothing
+    , _ccwsspCourseWorkId = pCcwsspCourseWorkId_
+    }
+
+-- | V1 error format.
+ccwsspXgafv :: Lens' CoursesCourseWorkStudentSubmissionsPatch (Maybe Text)
+ccwsspXgafv
+  = lens _ccwsspXgafv (\ s a -> s{_ccwsspXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+ccwsspUploadProtocol :: Lens' CoursesCourseWorkStudentSubmissionsPatch (Maybe Text)
+ccwsspUploadProtocol
+  = lens _ccwsspUploadProtocol
+      (\ s a -> s{_ccwsspUploadProtocol = a})
+
+-- | Mask that identifies which fields on the student submission to update.
+-- This field is required to do an update. The update fails if invalid
+-- fields are specified. The following fields may be specified by teachers:
+-- * \`draft_grade\` * \`assigned_grade\`
+ccwsspUpdateMask :: Lens' CoursesCourseWorkStudentSubmissionsPatch (Maybe Text)
+ccwsspUpdateMask
+  = lens _ccwsspUpdateMask
+      (\ s a -> s{_ccwsspUpdateMask = a})
+
+-- | Pretty-print response.
+ccwsspPp :: Lens' CoursesCourseWorkStudentSubmissionsPatch Bool
+ccwsspPp = lens _ccwsspPp (\ s a -> s{_ccwsspPp = a})
+
+-- | Identifier of the course. This identifier can be either the
+-- Classroom-assigned identifier or an alias.
+ccwsspCourseId :: Lens' CoursesCourseWorkStudentSubmissionsPatch Text
+ccwsspCourseId
+  = lens _ccwsspCourseId
+      (\ s a -> s{_ccwsspCourseId = a})
+
+-- | OAuth access token.
+ccwsspAccessToken :: Lens' CoursesCourseWorkStudentSubmissionsPatch (Maybe Text)
+ccwsspAccessToken
+  = lens _ccwsspAccessToken
+      (\ s a -> s{_ccwsspAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+ccwsspUploadType :: Lens' CoursesCourseWorkStudentSubmissionsPatch (Maybe Text)
+ccwsspUploadType
+  = lens _ccwsspUploadType
+      (\ s a -> s{_ccwsspUploadType = a})
+
+-- | Multipart request metadata.
+ccwsspPayload :: Lens' CoursesCourseWorkStudentSubmissionsPatch StudentSubmission
+ccwsspPayload
+  = lens _ccwsspPayload
+      (\ s a -> s{_ccwsspPayload = a})
+
+-- | OAuth bearer token.
+ccwsspBearerToken :: Lens' CoursesCourseWorkStudentSubmissionsPatch (Maybe Text)
+ccwsspBearerToken
+  = lens _ccwsspBearerToken
+      (\ s a -> s{_ccwsspBearerToken = a})
+
+-- | Identifier of the student submission.
+ccwsspId :: Lens' CoursesCourseWorkStudentSubmissionsPatch Text
+ccwsspId = lens _ccwsspId (\ s a -> s{_ccwsspId = a})
+
+-- | JSONP
+ccwsspCallback :: Lens' CoursesCourseWorkStudentSubmissionsPatch (Maybe Text)
+ccwsspCallback
+  = lens _ccwsspCallback
+      (\ s a -> s{_ccwsspCallback = a})
+
+-- | Identifier of the course work.
+ccwsspCourseWorkId :: Lens' CoursesCourseWorkStudentSubmissionsPatch Text
+ccwsspCourseWorkId
+  = lens _ccwsspCourseWorkId
+      (\ s a -> s{_ccwsspCourseWorkId = a})
+
+instance GoogleRequest
+         CoursesCourseWorkStudentSubmissionsPatch where
+        type Rs CoursesCourseWorkStudentSubmissionsPatch =
+             StudentSubmission
+        type Scopes CoursesCourseWorkStudentSubmissionsPatch
+             =
+             '["https://www.googleapis.com/auth/classroom.coursework.me",
+               "https://www.googleapis.com/auth/classroom.coursework.students"]
+        requestClient
+          CoursesCourseWorkStudentSubmissionsPatch'{..}
+          = go _ccwsspCourseId _ccwsspCourseWorkId _ccwsspId
+              _ccwsspXgafv
+              _ccwsspUploadProtocol
+              _ccwsspUpdateMask
+              (Just _ccwsspPp)
+              _ccwsspAccessToken
+              _ccwsspUploadType
+              _ccwsspBearerToken
+              _ccwsspCallback
+              (Just AltJSON)
+              _ccwsspPayload
+              classroomService
+          where go
+                  = buildClient
+                      (Proxy ::
+                         Proxy
+                           CoursesCourseWorkStudentSubmissionsPatchResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Classroom/Courses/CourseWork/StudentSubmissions/Reclaim.hs b/gen/Network/Google/Resource/Classroom/Courses/CourseWork/StudentSubmissions/Reclaim.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Classroom/Courses/CourseWork/StudentSubmissions/Reclaim.hs
@@ -0,0 +1,249 @@
+{-# 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.CourseWork.StudentSubmissions.Reclaim
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Reclaims a student submission on behalf of the student that owns it.
+-- Reclaiming a student submission transfers ownership of attached Drive
+-- files to the student and update the submission state. Only the student
+-- that ownes the requested student submission may call this method, and
+-- only for a student submission that has been turned in. This request must
+-- be made by the Developer Console project of the [OAuth client
+-- ID](https:\/\/support.google.com\/cloud\/answer\/6158849) used to create
+-- the corresponding course work item. This method returns the following
+-- error codes: * \`PERMISSION_DENIED\` if the requesting user is not
+-- permitted to access the requested course or course work, unsubmit the
+-- requested student submission, or for access errors. *
+-- \`FAILED_PRECONDITION\` if the student submission has not been turned
+-- in. * \`INVALID_ARGUMENT\` if the request is malformed. * \`NOT_FOUND\`
+-- if the requested course, course work, or student submission does not
+-- exist.
+--
+-- /See:/ <https://developers.google.com/classroom/ Google Classroom API Reference> for @classroom.courses.courseWork.studentSubmissions.reclaim@.
+module Network.Google.Resource.Classroom.Courses.CourseWork.StudentSubmissions.Reclaim
+    (
+    -- * REST Resource
+      CoursesCourseWorkStudentSubmissionsReclaimResource
+
+    -- * Creating a Request
+    , coursesCourseWorkStudentSubmissionsReclaim
+    , CoursesCourseWorkStudentSubmissionsReclaim
+
+    -- * Request Lenses
+    , couXgafv
+    , couUploadProtocol
+    , couPp
+    , couCourseId
+    , couAccessToken
+    , couUploadType
+    , couPayload
+    , couBearerToken
+    , couId
+    , couCallback
+    , couCourseWorkId
+    ) where
+
+import           Network.Google.Classroom.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @classroom.courses.courseWork.studentSubmissions.reclaim@ method which the
+-- 'CoursesCourseWorkStudentSubmissionsReclaim' request conforms to.
+type CoursesCourseWorkStudentSubmissionsReclaimResource
+     =
+     "v1" :>
+       "courses" :>
+         Capture "courseId" Text :>
+           "courseWork" :>
+             Capture "courseWorkId" Text :>
+               "studentSubmissions" :>
+                 CaptureMode "id" "reclaim" 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]
+                                     ReclaimStudentSubmissionRequest
+                                     :> Post '[JSON] Empty
+
+-- | Reclaims a student submission on behalf of the student that owns it.
+-- Reclaiming a student submission transfers ownership of attached Drive
+-- files to the student and update the submission state. Only the student
+-- that ownes the requested student submission may call this method, and
+-- only for a student submission that has been turned in. This request must
+-- be made by the Developer Console project of the [OAuth client
+-- ID](https:\/\/support.google.com\/cloud\/answer\/6158849) used to create
+-- the corresponding course work item. This method returns the following
+-- error codes: * \`PERMISSION_DENIED\` if the requesting user is not
+-- permitted to access the requested course or course work, unsubmit the
+-- requested student submission, or for access errors. *
+-- \`FAILED_PRECONDITION\` if the student submission has not been turned
+-- in. * \`INVALID_ARGUMENT\` if the request is malformed. * \`NOT_FOUND\`
+-- if the requested course, course work, or student submission does not
+-- exist.
+--
+-- /See:/ 'coursesCourseWorkStudentSubmissionsReclaim' smart constructor.
+data CoursesCourseWorkStudentSubmissionsReclaim = CoursesCourseWorkStudentSubmissionsReclaim'
+    { _couXgafv          :: !(Maybe Text)
+    , _couUploadProtocol :: !(Maybe Text)
+    , _couPp             :: !Bool
+    , _couCourseId       :: !Text
+    , _couAccessToken    :: !(Maybe Text)
+    , _couUploadType     :: !(Maybe Text)
+    , _couPayload        :: !ReclaimStudentSubmissionRequest
+    , _couBearerToken    :: !(Maybe Text)
+    , _couId             :: !Text
+    , _couCallback       :: !(Maybe Text)
+    , _couCourseWorkId   :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CoursesCourseWorkStudentSubmissionsReclaim' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'couXgafv'
+--
+-- * 'couUploadProtocol'
+--
+-- * 'couPp'
+--
+-- * 'couCourseId'
+--
+-- * 'couAccessToken'
+--
+-- * 'couUploadType'
+--
+-- * 'couPayload'
+--
+-- * 'couBearerToken'
+--
+-- * 'couId'
+--
+-- * 'couCallback'
+--
+-- * 'couCourseWorkId'
+coursesCourseWorkStudentSubmissionsReclaim
+    :: Text -- ^ 'couCourseId'
+    -> ReclaimStudentSubmissionRequest -- ^ 'couPayload'
+    -> Text -- ^ 'couId'
+    -> Text -- ^ 'couCourseWorkId'
+    -> CoursesCourseWorkStudentSubmissionsReclaim
+coursesCourseWorkStudentSubmissionsReclaim pCouCourseId_ pCouPayload_ pCouId_ pCouCourseWorkId_ =
+    CoursesCourseWorkStudentSubmissionsReclaim'
+    { _couXgafv = Nothing
+    , _couUploadProtocol = Nothing
+    , _couPp = True
+    , _couCourseId = pCouCourseId_
+    , _couAccessToken = Nothing
+    , _couUploadType = Nothing
+    , _couPayload = pCouPayload_
+    , _couBearerToken = Nothing
+    , _couId = pCouId_
+    , _couCallback = Nothing
+    , _couCourseWorkId = pCouCourseWorkId_
+    }
+
+-- | V1 error format.
+couXgafv :: Lens' CoursesCourseWorkStudentSubmissionsReclaim (Maybe Text)
+couXgafv = lens _couXgafv (\ s a -> s{_couXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+couUploadProtocol :: Lens' CoursesCourseWorkStudentSubmissionsReclaim (Maybe Text)
+couUploadProtocol
+  = lens _couUploadProtocol
+      (\ s a -> s{_couUploadProtocol = a})
+
+-- | Pretty-print response.
+couPp :: Lens' CoursesCourseWorkStudentSubmissionsReclaim Bool
+couPp = lens _couPp (\ s a -> s{_couPp = a})
+
+-- | Identifier of the course. This identifier can be either the
+-- Classroom-assigned identifier or an alias.
+couCourseId :: Lens' CoursesCourseWorkStudentSubmissionsReclaim Text
+couCourseId
+  = lens _couCourseId (\ s a -> s{_couCourseId = a})
+
+-- | OAuth access token.
+couAccessToken :: Lens' CoursesCourseWorkStudentSubmissionsReclaim (Maybe Text)
+couAccessToken
+  = lens _couAccessToken
+      (\ s a -> s{_couAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+couUploadType :: Lens' CoursesCourseWorkStudentSubmissionsReclaim (Maybe Text)
+couUploadType
+  = lens _couUploadType
+      (\ s a -> s{_couUploadType = a})
+
+-- | Multipart request metadata.
+couPayload :: Lens' CoursesCourseWorkStudentSubmissionsReclaim ReclaimStudentSubmissionRequest
+couPayload
+  = lens _couPayload (\ s a -> s{_couPayload = a})
+
+-- | OAuth bearer token.
+couBearerToken :: Lens' CoursesCourseWorkStudentSubmissionsReclaim (Maybe Text)
+couBearerToken
+  = lens _couBearerToken
+      (\ s a -> s{_couBearerToken = a})
+
+-- | Identifier of the student submission.
+couId :: Lens' CoursesCourseWorkStudentSubmissionsReclaim Text
+couId = lens _couId (\ s a -> s{_couId = a})
+
+-- | JSONP
+couCallback :: Lens' CoursesCourseWorkStudentSubmissionsReclaim (Maybe Text)
+couCallback
+  = lens _couCallback (\ s a -> s{_couCallback = a})
+
+-- | Identifier of the course work.
+couCourseWorkId :: Lens' CoursesCourseWorkStudentSubmissionsReclaim Text
+couCourseWorkId
+  = lens _couCourseWorkId
+      (\ s a -> s{_couCourseWorkId = a})
+
+instance GoogleRequest
+         CoursesCourseWorkStudentSubmissionsReclaim where
+        type Rs CoursesCourseWorkStudentSubmissionsReclaim =
+             Empty
+        type Scopes
+               CoursesCourseWorkStudentSubmissionsReclaim
+             =
+             '["https://www.googleapis.com/auth/classroom.coursework.me"]
+        requestClient
+          CoursesCourseWorkStudentSubmissionsReclaim'{..}
+          = go _couCourseId _couCourseWorkId _couId _couXgafv
+              _couUploadProtocol
+              (Just _couPp)
+              _couAccessToken
+              _couUploadType
+              _couBearerToken
+              _couCallback
+              (Just AltJSON)
+              _couPayload
+              classroomService
+          where go
+                  = buildClient
+                      (Proxy ::
+                         Proxy
+                           CoursesCourseWorkStudentSubmissionsReclaimResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Classroom/Courses/CourseWork/StudentSubmissions/Return.hs b/gen/Network/Google/Resource/Classroom/Courses/CourseWork/StudentSubmissions/Return.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Classroom/Courses/CourseWork/StudentSubmissions/Return.hs
@@ -0,0 +1,251 @@
+{-# 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.CourseWork.StudentSubmissions.Return
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns a student submission. Returning a student submission transfers
+-- ownership of attached Drive files to the student and may also update the
+-- submission state. Unlike the Classroom application, returning a student
+-- submission does not set assignedGrade to the draftGrade value. Only a
+-- teacher of the course that contains the requested student submission may
+-- call this method. This request must be made by the Developer Console
+-- project of the [OAuth client
+-- ID](https:\/\/support.google.com\/cloud\/answer\/6158849) used to create
+-- the corresponding course work item. This method returns the following
+-- error codes: * \`PERMISSION_DENIED\` if the requesting user is not
+-- permitted to access the requested course or course work, return the
+-- requested student submission, or for access errors. *
+-- \`INVALID_ARGUMENT\` if the request is malformed. * \`NOT_FOUND\` if the
+-- requested course, course work, or student submission does not exist.
+--
+-- /See:/ <https://developers.google.com/classroom/ Google Classroom API Reference> for @classroom.courses.courseWork.studentSubmissions.return@.
+module Network.Google.Resource.Classroom.Courses.CourseWork.StudentSubmissions.Return
+    (
+    -- * REST Resource
+      CoursesCourseWorkStudentSubmissionsReturnResource
+
+    -- * Creating a Request
+    , coursesCourseWorkStudentSubmissionsReturn
+    , CoursesCourseWorkStudentSubmissionsReturn
+
+    -- * Request Lenses
+    , ccwssrXgafv
+    , ccwssrUploadProtocol
+    , ccwssrPp
+    , ccwssrCourseId
+    , ccwssrAccessToken
+    , ccwssrUploadType
+    , ccwssrPayload
+    , ccwssrBearerToken
+    , ccwssrId
+    , ccwssrCallback
+    , ccwssrCourseWorkId
+    ) where
+
+import           Network.Google.Classroom.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @classroom.courses.courseWork.studentSubmissions.return@ method which the
+-- 'CoursesCourseWorkStudentSubmissionsReturn' request conforms to.
+type CoursesCourseWorkStudentSubmissionsReturnResource
+     =
+     "v1" :>
+       "courses" :>
+         Capture "courseId" Text :>
+           "courseWork" :>
+             Capture "courseWorkId" Text :>
+               "studentSubmissions" :>
+                 CaptureMode "id" "return" 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]
+                                     ReturnStudentSubmissionRequest
+                                     :> Post '[JSON] Empty
+
+-- | Returns a student submission. Returning a student submission transfers
+-- ownership of attached Drive files to the student and may also update the
+-- submission state. Unlike the Classroom application, returning a student
+-- submission does not set assignedGrade to the draftGrade value. Only a
+-- teacher of the course that contains the requested student submission may
+-- call this method. This request must be made by the Developer Console
+-- project of the [OAuth client
+-- ID](https:\/\/support.google.com\/cloud\/answer\/6158849) used to create
+-- the corresponding course work item. This method returns the following
+-- error codes: * \`PERMISSION_DENIED\` if the requesting user is not
+-- permitted to access the requested course or course work, return the
+-- requested student submission, or for access errors. *
+-- \`INVALID_ARGUMENT\` if the request is malformed. * \`NOT_FOUND\` if the
+-- requested course, course work, or student submission does not exist.
+--
+-- /See:/ 'coursesCourseWorkStudentSubmissionsReturn' smart constructor.
+data CoursesCourseWorkStudentSubmissionsReturn = CoursesCourseWorkStudentSubmissionsReturn'
+    { _ccwssrXgafv          :: !(Maybe Text)
+    , _ccwssrUploadProtocol :: !(Maybe Text)
+    , _ccwssrPp             :: !Bool
+    , _ccwssrCourseId       :: !Text
+    , _ccwssrAccessToken    :: !(Maybe Text)
+    , _ccwssrUploadType     :: !(Maybe Text)
+    , _ccwssrPayload        :: !ReturnStudentSubmissionRequest
+    , _ccwssrBearerToken    :: !(Maybe Text)
+    , _ccwssrId             :: !Text
+    , _ccwssrCallback       :: !(Maybe Text)
+    , _ccwssrCourseWorkId   :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CoursesCourseWorkStudentSubmissionsReturn' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ccwssrXgafv'
+--
+-- * 'ccwssrUploadProtocol'
+--
+-- * 'ccwssrPp'
+--
+-- * 'ccwssrCourseId'
+--
+-- * 'ccwssrAccessToken'
+--
+-- * 'ccwssrUploadType'
+--
+-- * 'ccwssrPayload'
+--
+-- * 'ccwssrBearerToken'
+--
+-- * 'ccwssrId'
+--
+-- * 'ccwssrCallback'
+--
+-- * 'ccwssrCourseWorkId'
+coursesCourseWorkStudentSubmissionsReturn
+    :: Text -- ^ 'ccwssrCourseId'
+    -> ReturnStudentSubmissionRequest -- ^ 'ccwssrPayload'
+    -> Text -- ^ 'ccwssrId'
+    -> Text -- ^ 'ccwssrCourseWorkId'
+    -> CoursesCourseWorkStudentSubmissionsReturn
+coursesCourseWorkStudentSubmissionsReturn pCcwssrCourseId_ pCcwssrPayload_ pCcwssrId_ pCcwssrCourseWorkId_ =
+    CoursesCourseWorkStudentSubmissionsReturn'
+    { _ccwssrXgafv = Nothing
+    , _ccwssrUploadProtocol = Nothing
+    , _ccwssrPp = True
+    , _ccwssrCourseId = pCcwssrCourseId_
+    , _ccwssrAccessToken = Nothing
+    , _ccwssrUploadType = Nothing
+    , _ccwssrPayload = pCcwssrPayload_
+    , _ccwssrBearerToken = Nothing
+    , _ccwssrId = pCcwssrId_
+    , _ccwssrCallback = Nothing
+    , _ccwssrCourseWorkId = pCcwssrCourseWorkId_
+    }
+
+-- | V1 error format.
+ccwssrXgafv :: Lens' CoursesCourseWorkStudentSubmissionsReturn (Maybe Text)
+ccwssrXgafv
+  = lens _ccwssrXgafv (\ s a -> s{_ccwssrXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+ccwssrUploadProtocol :: Lens' CoursesCourseWorkStudentSubmissionsReturn (Maybe Text)
+ccwssrUploadProtocol
+  = lens _ccwssrUploadProtocol
+      (\ s a -> s{_ccwssrUploadProtocol = a})
+
+-- | Pretty-print response.
+ccwssrPp :: Lens' CoursesCourseWorkStudentSubmissionsReturn Bool
+ccwssrPp = lens _ccwssrPp (\ s a -> s{_ccwssrPp = a})
+
+-- | Identifier of the course. This identifier can be either the
+-- Classroom-assigned identifier or an alias.
+ccwssrCourseId :: Lens' CoursesCourseWorkStudentSubmissionsReturn Text
+ccwssrCourseId
+  = lens _ccwssrCourseId
+      (\ s a -> s{_ccwssrCourseId = a})
+
+-- | OAuth access token.
+ccwssrAccessToken :: Lens' CoursesCourseWorkStudentSubmissionsReturn (Maybe Text)
+ccwssrAccessToken
+  = lens _ccwssrAccessToken
+      (\ s a -> s{_ccwssrAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+ccwssrUploadType :: Lens' CoursesCourseWorkStudentSubmissionsReturn (Maybe Text)
+ccwssrUploadType
+  = lens _ccwssrUploadType
+      (\ s a -> s{_ccwssrUploadType = a})
+
+-- | Multipart request metadata.
+ccwssrPayload :: Lens' CoursesCourseWorkStudentSubmissionsReturn ReturnStudentSubmissionRequest
+ccwssrPayload
+  = lens _ccwssrPayload
+      (\ s a -> s{_ccwssrPayload = a})
+
+-- | OAuth bearer token.
+ccwssrBearerToken :: Lens' CoursesCourseWorkStudentSubmissionsReturn (Maybe Text)
+ccwssrBearerToken
+  = lens _ccwssrBearerToken
+      (\ s a -> s{_ccwssrBearerToken = a})
+
+-- | Identifier of the student submission.
+ccwssrId :: Lens' CoursesCourseWorkStudentSubmissionsReturn Text
+ccwssrId = lens _ccwssrId (\ s a -> s{_ccwssrId = a})
+
+-- | JSONP
+ccwssrCallback :: Lens' CoursesCourseWorkStudentSubmissionsReturn (Maybe Text)
+ccwssrCallback
+  = lens _ccwssrCallback
+      (\ s a -> s{_ccwssrCallback = a})
+
+-- | Identifier of the course work.
+ccwssrCourseWorkId :: Lens' CoursesCourseWorkStudentSubmissionsReturn Text
+ccwssrCourseWorkId
+  = lens _ccwssrCourseWorkId
+      (\ s a -> s{_ccwssrCourseWorkId = a})
+
+instance GoogleRequest
+         CoursesCourseWorkStudentSubmissionsReturn where
+        type Rs CoursesCourseWorkStudentSubmissionsReturn =
+             Empty
+        type Scopes CoursesCourseWorkStudentSubmissionsReturn
+             =
+             '["https://www.googleapis.com/auth/classroom.coursework.students"]
+        requestClient
+          CoursesCourseWorkStudentSubmissionsReturn'{..}
+          = go _ccwssrCourseId _ccwssrCourseWorkId _ccwssrId
+              _ccwssrXgafv
+              _ccwssrUploadProtocol
+              (Just _ccwssrPp)
+              _ccwssrAccessToken
+              _ccwssrUploadType
+              _ccwssrBearerToken
+              _ccwssrCallback
+              (Just AltJSON)
+              _ccwssrPayload
+              classroomService
+          where go
+                  = buildClient
+                      (Proxy ::
+                         Proxy
+                           CoursesCourseWorkStudentSubmissionsReturnResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Classroom/Courses/CourseWork/StudentSubmissions/TurnIn.hs b/gen/Network/Google/Resource/Classroom/Courses/CourseWork/StudentSubmissions/TurnIn.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Classroom/Courses/CourseWork/StudentSubmissions/TurnIn.hs
@@ -0,0 +1,249 @@
+{-# 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.CourseWork.StudentSubmissions.TurnIn
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Turns in a student submission. Turning in a student submission transfers
+-- ownership of attached Drive files to the teacher and may also update the
+-- submission state. This may only be called by the student that owns the
+-- specified student submission. This request must be made by the Developer
+-- Console project of the [OAuth client
+-- ID](https:\/\/support.google.com\/cloud\/answer\/6158849) used to create
+-- the corresponding course work item. This method returns the following
+-- error codes: * \`PERMISSION_DENIED\` if the requesting user is not
+-- permitted to access the requested course or course work, turn in the
+-- requested student submission, or for access errors. *
+-- \`INVALID_ARGUMENT\` if the request is malformed. * \`NOT_FOUND\` if the
+-- requested course, course work, or student submission does not exist.
+--
+-- /See:/ <https://developers.google.com/classroom/ Google Classroom API Reference> for @classroom.courses.courseWork.studentSubmissions.turnIn@.
+module Network.Google.Resource.Classroom.Courses.CourseWork.StudentSubmissions.TurnIn
+    (
+    -- * REST Resource
+      CoursesCourseWorkStudentSubmissionsTurnInResource
+
+    -- * Creating a Request
+    , coursesCourseWorkStudentSubmissionsTurnIn
+    , CoursesCourseWorkStudentSubmissionsTurnIn
+
+    -- * Request Lenses
+    , ccwsstiXgafv
+    , ccwsstiUploadProtocol
+    , ccwsstiPp
+    , ccwsstiCourseId
+    , ccwsstiAccessToken
+    , ccwsstiUploadType
+    , ccwsstiPayload
+    , ccwsstiBearerToken
+    , ccwsstiId
+    , ccwsstiCallback
+    , ccwsstiCourseWorkId
+    ) where
+
+import           Network.Google.Classroom.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @classroom.courses.courseWork.studentSubmissions.turnIn@ method which the
+-- 'CoursesCourseWorkStudentSubmissionsTurnIn' request conforms to.
+type CoursesCourseWorkStudentSubmissionsTurnInResource
+     =
+     "v1" :>
+       "courses" :>
+         Capture "courseId" Text :>
+           "courseWork" :>
+             Capture "courseWorkId" Text :>
+               "studentSubmissions" :>
+                 CaptureMode "id" "turnIn" 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]
+                                     TurnInStudentSubmissionRequest
+                                     :> Post '[JSON] Empty
+
+-- | Turns in a student submission. Turning in a student submission transfers
+-- ownership of attached Drive files to the teacher and may also update the
+-- submission state. This may only be called by the student that owns the
+-- specified student submission. This request must be made by the Developer
+-- Console project of the [OAuth client
+-- ID](https:\/\/support.google.com\/cloud\/answer\/6158849) used to create
+-- the corresponding course work item. This method returns the following
+-- error codes: * \`PERMISSION_DENIED\` if the requesting user is not
+-- permitted to access the requested course or course work, turn in the
+-- requested student submission, or for access errors. *
+-- \`INVALID_ARGUMENT\` if the request is malformed. * \`NOT_FOUND\` if the
+-- requested course, course work, or student submission does not exist.
+--
+-- /See:/ 'coursesCourseWorkStudentSubmissionsTurnIn' smart constructor.
+data CoursesCourseWorkStudentSubmissionsTurnIn = CoursesCourseWorkStudentSubmissionsTurnIn'
+    { _ccwsstiXgafv          :: !(Maybe Text)
+    , _ccwsstiUploadProtocol :: !(Maybe Text)
+    , _ccwsstiPp             :: !Bool
+    , _ccwsstiCourseId       :: !Text
+    , _ccwsstiAccessToken    :: !(Maybe Text)
+    , _ccwsstiUploadType     :: !(Maybe Text)
+    , _ccwsstiPayload        :: !TurnInStudentSubmissionRequest
+    , _ccwsstiBearerToken    :: !(Maybe Text)
+    , _ccwsstiId             :: !Text
+    , _ccwsstiCallback       :: !(Maybe Text)
+    , _ccwsstiCourseWorkId   :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CoursesCourseWorkStudentSubmissionsTurnIn' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ccwsstiXgafv'
+--
+-- * 'ccwsstiUploadProtocol'
+--
+-- * 'ccwsstiPp'
+--
+-- * 'ccwsstiCourseId'
+--
+-- * 'ccwsstiAccessToken'
+--
+-- * 'ccwsstiUploadType'
+--
+-- * 'ccwsstiPayload'
+--
+-- * 'ccwsstiBearerToken'
+--
+-- * 'ccwsstiId'
+--
+-- * 'ccwsstiCallback'
+--
+-- * 'ccwsstiCourseWorkId'
+coursesCourseWorkStudentSubmissionsTurnIn
+    :: Text -- ^ 'ccwsstiCourseId'
+    -> TurnInStudentSubmissionRequest -- ^ 'ccwsstiPayload'
+    -> Text -- ^ 'ccwsstiId'
+    -> Text -- ^ 'ccwsstiCourseWorkId'
+    -> CoursesCourseWorkStudentSubmissionsTurnIn
+coursesCourseWorkStudentSubmissionsTurnIn pCcwsstiCourseId_ pCcwsstiPayload_ pCcwsstiId_ pCcwsstiCourseWorkId_ =
+    CoursesCourseWorkStudentSubmissionsTurnIn'
+    { _ccwsstiXgafv = Nothing
+    , _ccwsstiUploadProtocol = Nothing
+    , _ccwsstiPp = True
+    , _ccwsstiCourseId = pCcwsstiCourseId_
+    , _ccwsstiAccessToken = Nothing
+    , _ccwsstiUploadType = Nothing
+    , _ccwsstiPayload = pCcwsstiPayload_
+    , _ccwsstiBearerToken = Nothing
+    , _ccwsstiId = pCcwsstiId_
+    , _ccwsstiCallback = Nothing
+    , _ccwsstiCourseWorkId = pCcwsstiCourseWorkId_
+    }
+
+-- | V1 error format.
+ccwsstiXgafv :: Lens' CoursesCourseWorkStudentSubmissionsTurnIn (Maybe Text)
+ccwsstiXgafv
+  = lens _ccwsstiXgafv (\ s a -> s{_ccwsstiXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+ccwsstiUploadProtocol :: Lens' CoursesCourseWorkStudentSubmissionsTurnIn (Maybe Text)
+ccwsstiUploadProtocol
+  = lens _ccwsstiUploadProtocol
+      (\ s a -> s{_ccwsstiUploadProtocol = a})
+
+-- | Pretty-print response.
+ccwsstiPp :: Lens' CoursesCourseWorkStudentSubmissionsTurnIn Bool
+ccwsstiPp
+  = lens _ccwsstiPp (\ s a -> s{_ccwsstiPp = a})
+
+-- | Identifier of the course. This identifier can be either the
+-- Classroom-assigned identifier or an alias.
+ccwsstiCourseId :: Lens' CoursesCourseWorkStudentSubmissionsTurnIn Text
+ccwsstiCourseId
+  = lens _ccwsstiCourseId
+      (\ s a -> s{_ccwsstiCourseId = a})
+
+-- | OAuth access token.
+ccwsstiAccessToken :: Lens' CoursesCourseWorkStudentSubmissionsTurnIn (Maybe Text)
+ccwsstiAccessToken
+  = lens _ccwsstiAccessToken
+      (\ s a -> s{_ccwsstiAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+ccwsstiUploadType :: Lens' CoursesCourseWorkStudentSubmissionsTurnIn (Maybe Text)
+ccwsstiUploadType
+  = lens _ccwsstiUploadType
+      (\ s a -> s{_ccwsstiUploadType = a})
+
+-- | Multipart request metadata.
+ccwsstiPayload :: Lens' CoursesCourseWorkStudentSubmissionsTurnIn TurnInStudentSubmissionRequest
+ccwsstiPayload
+  = lens _ccwsstiPayload
+      (\ s a -> s{_ccwsstiPayload = a})
+
+-- | OAuth bearer token.
+ccwsstiBearerToken :: Lens' CoursesCourseWorkStudentSubmissionsTurnIn (Maybe Text)
+ccwsstiBearerToken
+  = lens _ccwsstiBearerToken
+      (\ s a -> s{_ccwsstiBearerToken = a})
+
+-- | Identifier of the student submission.
+ccwsstiId :: Lens' CoursesCourseWorkStudentSubmissionsTurnIn Text
+ccwsstiId
+  = lens _ccwsstiId (\ s a -> s{_ccwsstiId = a})
+
+-- | JSONP
+ccwsstiCallback :: Lens' CoursesCourseWorkStudentSubmissionsTurnIn (Maybe Text)
+ccwsstiCallback
+  = lens _ccwsstiCallback
+      (\ s a -> s{_ccwsstiCallback = a})
+
+-- | Identifier of the course work.
+ccwsstiCourseWorkId :: Lens' CoursesCourseWorkStudentSubmissionsTurnIn Text
+ccwsstiCourseWorkId
+  = lens _ccwsstiCourseWorkId
+      (\ s a -> s{_ccwsstiCourseWorkId = a})
+
+instance GoogleRequest
+         CoursesCourseWorkStudentSubmissionsTurnIn where
+        type Rs CoursesCourseWorkStudentSubmissionsTurnIn =
+             Empty
+        type Scopes CoursesCourseWorkStudentSubmissionsTurnIn
+             =
+             '["https://www.googleapis.com/auth/classroom.coursework.me"]
+        requestClient
+          CoursesCourseWorkStudentSubmissionsTurnIn'{..}
+          = go _ccwsstiCourseId _ccwsstiCourseWorkId _ccwsstiId
+              _ccwsstiXgafv
+              _ccwsstiUploadProtocol
+              (Just _ccwsstiPp)
+              _ccwsstiAccessToken
+              _ccwsstiUploadType
+              _ccwsstiBearerToken
+              _ccwsstiCallback
+              (Just AltJSON)
+              _ccwsstiPayload
+              classroomService
+          where go
+                  = buildClient
+                      (Proxy ::
+                         Proxy
+                           CoursesCourseWorkStudentSubmissionsTurnInResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Classroom/Courses/Create.hs b/gen/Network/Google/Resource/Classroom/Courses/Create.hs
--- a/gen/Network/Google/Resource/Classroom/Courses/Create.hs
+++ b/gen/Network/Google/Resource/Classroom/Courses/Create.hs
@@ -14,7 +14,7 @@
 
 -- |
 -- Module      : Network.Google.Resource.Classroom.Courses.Create
--- Copyright   : (c) 2015 Brendan Hay
+-- Copyright   : (c) 2015-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -78,7 +78,7 @@
 -- specified in the \`id\` and already exists.
 --
 -- /See:/ 'coursesCreate' smart constructor.
-data CoursesCreate = CoursesCreate
+data CoursesCreate = CoursesCreate'
     { _ccXgafv          :: !(Maybe Text)
     , _ccUploadProtocol :: !(Maybe Text)
     , _ccPp             :: !Bool
@@ -112,7 +112,7 @@
     :: Course -- ^ 'ccPayload'
     -> CoursesCreate
 coursesCreate pCcPayload_ =
-    CoursesCreate
+    CoursesCreate'
     { _ccXgafv = Nothing
     , _ccUploadProtocol = Nothing
     , _ccPp = True
@@ -166,7 +166,9 @@
 
 instance GoogleRequest CoursesCreate where
         type Rs CoursesCreate = Course
-        requestClient CoursesCreate{..}
+        type Scopes CoursesCreate =
+             '["https://www.googleapis.com/auth/classroom.courses"]
+        requestClient CoursesCreate'{..}
           = go _ccXgafv _ccUploadProtocol (Just _ccPp)
               _ccAccessToken
               _ccUploadType
diff --git a/gen/Network/Google/Resource/Classroom/Courses/Delete.hs b/gen/Network/Google/Resource/Classroom/Courses/Delete.hs
--- a/gen/Network/Google/Resource/Classroom/Courses/Delete.hs
+++ b/gen/Network/Google/Resource/Classroom/Courses/Delete.hs
@@ -14,7 +14,7 @@
 
 -- |
 -- Module      : Network.Google.Resource.Classroom.Courses.Delete
--- Copyright   : (c) 2015 Brendan Hay
+-- Copyright   : (c) 2015-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -70,7 +70,7 @@
 -- exists with the requested ID.
 --
 -- /See:/ 'coursesDelete' smart constructor.
-data CoursesDelete = CoursesDelete
+data CoursesDelete = CoursesDelete'
     { _cdXgafv          :: !(Maybe Text)
     , _cdUploadProtocol :: !(Maybe Text)
     , _cdPp             :: !Bool
@@ -104,7 +104,7 @@
     :: Text -- ^ 'cdId'
     -> CoursesDelete
 coursesDelete pCdId_ =
-    CoursesDelete
+    CoursesDelete'
     { _cdXgafv = Nothing
     , _cdUploadProtocol = Nothing
     , _cdPp = True
@@ -158,7 +158,9 @@
 
 instance GoogleRequest CoursesDelete where
         type Rs CoursesDelete = Empty
-        requestClient CoursesDelete{..}
+        type Scopes CoursesDelete =
+             '["https://www.googleapis.com/auth/classroom.courses"]
+        requestClient CoursesDelete'{..}
           = go _cdId _cdXgafv _cdUploadProtocol (Just _cdPp)
               _cdAccessToken
               _cdUploadType
diff --git a/gen/Network/Google/Resource/Classroom/Courses/Get.hs b/gen/Network/Google/Resource/Classroom/Courses/Get.hs
--- a/gen/Network/Google/Resource/Classroom/Courses/Get.hs
+++ b/gen/Network/Google/Resource/Classroom/Courses/Get.hs
@@ -14,7 +14,7 @@
 
 -- |
 -- Module      : Network.Google.Resource.Classroom.Courses.Get
--- Copyright   : (c) 2015 Brendan Hay
+-- Copyright   : (c) 2015-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -70,7 +70,7 @@
 -- exists with the requested ID.
 --
 -- /See:/ 'coursesGet' smart constructor.
-data CoursesGet = CoursesGet
+data CoursesGet = CoursesGet'
     { _cgXgafv          :: !(Maybe Text)
     , _cgUploadProtocol :: !(Maybe Text)
     , _cgPp             :: !Bool
@@ -104,7 +104,7 @@
     :: Text -- ^ 'cgId'
     -> CoursesGet
 coursesGet pCgId_ =
-    CoursesGet
+    CoursesGet'
     { _cgXgafv = Nothing
     , _cgUploadProtocol = Nothing
     , _cgPp = True
@@ -158,7 +158,10 @@
 
 instance GoogleRequest CoursesGet where
         type Rs CoursesGet = Course
-        requestClient CoursesGet{..}
+        type Scopes CoursesGet =
+             '["https://www.googleapis.com/auth/classroom.courses",
+               "https://www.googleapis.com/auth/classroom.courses.readonly"]
+        requestClient CoursesGet'{..}
           = go _cgId _cgXgafv _cgUploadProtocol (Just _cgPp)
               _cgAccessToken
               _cgUploadType
diff --git a/gen/Network/Google/Resource/Classroom/Courses/List.hs b/gen/Network/Google/Resource/Classroom/Courses/List.hs
--- a/gen/Network/Google/Resource/Classroom/Courses/List.hs
+++ b/gen/Network/Google/Resource/Classroom/Courses/List.hs
@@ -14,7 +14,7 @@
 
 -- |
 -- Module      : Network.Google.Resource.Classroom.Courses.List
--- Copyright   : (c) 2015 Brendan Hay
+-- Copyright   : (c) 2015-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -79,7 +79,7 @@
 -- if any users specified in the query arguments do not exist.
 --
 -- /See:/ 'coursesList' smart constructor.
-data CoursesList = CoursesList
+data CoursesList = CoursesList'
     { _clStudentId      :: !(Maybe Text)
     , _clXgafv          :: !(Maybe Text)
     , _clUploadProtocol :: !(Maybe Text)
@@ -121,7 +121,7 @@
 coursesList
     :: CoursesList
 coursesList =
-    CoursesList
+    CoursesList'
     { _clStudentId = Nothing
     , _clXgafv = Nothing
     , _clUploadProtocol = Nothing
@@ -204,7 +204,10 @@
 
 instance GoogleRequest CoursesList where
         type Rs CoursesList = ListCoursesResponse
-        requestClient CoursesList{..}
+        type Scopes CoursesList =
+             '["https://www.googleapis.com/auth/classroom.courses",
+               "https://www.googleapis.com/auth/classroom.courses.readonly"]
+        requestClient CoursesList'{..}
           = go _clStudentId _clXgafv _clUploadProtocol
               (Just _clPp)
               _clAccessToken
diff --git a/gen/Network/Google/Resource/Classroom/Courses/Patch.hs b/gen/Network/Google/Resource/Classroom/Courses/Patch.hs
--- a/gen/Network/Google/Resource/Classroom/Courses/Patch.hs
+++ b/gen/Network/Google/Resource/Classroom/Courses/Patch.hs
@@ -14,7 +14,7 @@
 
 -- |
 -- Module      : Network.Google.Resource.Classroom.Courses.Patch
--- Copyright   : (c) 2015 Brendan Hay
+-- Copyright   : (c) 2015-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -80,7 +80,7 @@
 -- following request errors: * CourseNotModifiable
 --
 -- /See:/ 'coursesPatch' smart constructor.
-data CoursesPatch = CoursesPatch
+data CoursesPatch = CoursesPatch'
     { _cpXgafv          :: !(Maybe Text)
     , _cpUploadProtocol :: !(Maybe Text)
     , _cpUpdateMask     :: !(Maybe Text)
@@ -121,7 +121,7 @@
     -> Text -- ^ 'cpId'
     -> CoursesPatch
 coursesPatch pCpPayload_ pCpId_ =
-    CoursesPatch
+    CoursesPatch'
     { _cpXgafv = Nothing
     , _cpUploadProtocol = Nothing
     , _cpUpdateMask = Nothing
@@ -192,7 +192,9 @@
 
 instance GoogleRequest CoursesPatch where
         type Rs CoursesPatch = Course
-        requestClient CoursesPatch{..}
+        type Scopes CoursesPatch =
+             '["https://www.googleapis.com/auth/classroom.courses"]
+        requestClient CoursesPatch'{..}
           = go _cpId _cpXgafv _cpUploadProtocol _cpUpdateMask
               (Just _cpPp)
               _cpAccessToken
diff --git a/gen/Network/Google/Resource/Classroom/Courses/Students/Create.hs b/gen/Network/Google/Resource/Classroom/Courses/Students/Create.hs
--- a/gen/Network/Google/Resource/Classroom/Courses/Students/Create.hs
+++ b/gen/Network/Google/Resource/Classroom/Courses/Students/Create.hs
@@ -14,7 +14,7 @@
 
 -- |
 -- Module      : Network.Google.Resource.Classroom.Courses.Students.Create
--- Copyright   : (c) 2015 Brendan Hay
+-- Copyright   : (c) 2015-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -85,7 +85,7 @@
 -- course.
 --
 -- /See:/ 'coursesStudentsCreate' smart constructor.
-data CoursesStudentsCreate = CoursesStudentsCreate
+data CoursesStudentsCreate = CoursesStudentsCreate'
     { _cscXgafv          :: !(Maybe Text)
     , _cscUploadProtocol :: !(Maybe Text)
     , _cscPp             :: !Bool
@@ -126,7 +126,7 @@
     -> Student -- ^ 'cscPayload'
     -> CoursesStudentsCreate
 coursesStudentsCreate pCscCourseId_ pCscPayload_ =
-    CoursesStudentsCreate
+    CoursesStudentsCreate'
     { _cscXgafv = Nothing
     , _cscUploadProtocol = Nothing
     , _cscPp = True
@@ -198,7 +198,11 @@
 
 instance GoogleRequest CoursesStudentsCreate where
         type Rs CoursesStudentsCreate = Student
-        requestClient CoursesStudentsCreate{..}
+        type Scopes CoursesStudentsCreate =
+             '["https://www.googleapis.com/auth/classroom.profile.emails",
+               "https://www.googleapis.com/auth/classroom.profile.photos",
+               "https://www.googleapis.com/auth/classroom.rosters"]
+        requestClient CoursesStudentsCreate'{..}
           = go _cscCourseId _cscXgafv _cscUploadProtocol
               (Just _cscPp)
               _cscAccessToken
diff --git a/gen/Network/Google/Resource/Classroom/Courses/Students/Delete.hs b/gen/Network/Google/Resource/Classroom/Courses/Students/Delete.hs
--- a/gen/Network/Google/Resource/Classroom/Courses/Students/Delete.hs
+++ b/gen/Network/Google/Resource/Classroom/Courses/Students/Delete.hs
@@ -14,7 +14,7 @@
 
 -- |
 -- Module      : Network.Google.Resource.Classroom.Courses.Students.Delete
--- Copyright   : (c) 2015 Brendan Hay
+-- Copyright   : (c) 2015-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -75,7 +75,7 @@
 -- not exist.
 --
 -- /See:/ 'coursesStudentsDelete' smart constructor.
-data CoursesStudentsDelete = CoursesStudentsDelete
+data CoursesStudentsDelete = CoursesStudentsDelete'
     { _csdXgafv          :: !(Maybe Text)
     , _csdUploadProtocol :: !(Maybe Text)
     , _csdPp             :: !Bool
@@ -113,7 +113,7 @@
     -> Text -- ^ 'csdUserId'
     -> CoursesStudentsDelete
 coursesStudentsDelete pCsdCourseId_ pCsdUserId_ =
-    CoursesStudentsDelete
+    CoursesStudentsDelete'
     { _csdXgafv = Nothing
     , _csdUploadProtocol = Nothing
     , _csdPp = True
@@ -177,7 +177,9 @@
 
 instance GoogleRequest CoursesStudentsDelete where
         type Rs CoursesStudentsDelete = Empty
-        requestClient CoursesStudentsDelete{..}
+        type Scopes CoursesStudentsDelete =
+             '["https://www.googleapis.com/auth/classroom.rosters"]
+        requestClient CoursesStudentsDelete'{..}
           = go _csdCourseId _csdUserId _csdXgafv
               _csdUploadProtocol
               (Just _csdPp)
diff --git a/gen/Network/Google/Resource/Classroom/Courses/Students/Get.hs b/gen/Network/Google/Resource/Classroom/Courses/Students/Get.hs
--- a/gen/Network/Google/Resource/Classroom/Courses/Students/Get.hs
+++ b/gen/Network/Google/Resource/Classroom/Courses/Students/Get.hs
@@ -14,7 +14,7 @@
 
 -- |
 -- Module      : Network.Google.Resource.Classroom.Courses.Students.Get
--- Copyright   : (c) 2015 Brendan Hay
+-- Copyright   : (c) 2015-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -75,7 +75,7 @@
 -- exist.
 --
 -- /See:/ 'coursesStudentsGet' smart constructor.
-data CoursesStudentsGet = CoursesStudentsGet
+data CoursesStudentsGet = CoursesStudentsGet'
     { _csgXgafv          :: !(Maybe Text)
     , _csgUploadProtocol :: !(Maybe Text)
     , _csgPp             :: !Bool
@@ -113,7 +113,7 @@
     -> Text -- ^ 'csgUserId'
     -> CoursesStudentsGet
 coursesStudentsGet pCsgCourseId_ pCsgUserId_ =
-    CoursesStudentsGet
+    CoursesStudentsGet'
     { _csgXgafv = Nothing
     , _csgUploadProtocol = Nothing
     , _csgPp = True
@@ -177,7 +177,12 @@
 
 instance GoogleRequest CoursesStudentsGet where
         type Rs CoursesStudentsGet = Student
-        requestClient CoursesStudentsGet{..}
+        type Scopes CoursesStudentsGet =
+             '["https://www.googleapis.com/auth/classroom.profile.emails",
+               "https://www.googleapis.com/auth/classroom.profile.photos",
+               "https://www.googleapis.com/auth/classroom.rosters",
+               "https://www.googleapis.com/auth/classroom.rosters.readonly"]
+        requestClient CoursesStudentsGet'{..}
           = go _csgCourseId _csgUserId _csgXgafv
               _csgUploadProtocol
               (Just _csgPp)
diff --git a/gen/Network/Google/Resource/Classroom/Courses/Students/List.hs b/gen/Network/Google/Resource/Classroom/Courses/Students/List.hs
--- a/gen/Network/Google/Resource/Classroom/Courses/Students/List.hs
+++ b/gen/Network/Google/Resource/Classroom/Courses/Students/List.hs
@@ -14,7 +14,7 @@
 
 -- |
 -- Module      : Network.Google.Resource.Classroom.Courses.Students.List
--- Copyright   : (c) 2015 Brendan Hay
+-- Copyright   : (c) 2015-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -76,7 +76,7 @@
 -- access errors.
 --
 -- /See:/ 'coursesStudentsList' smart constructor.
-data CoursesStudentsList = CoursesStudentsList
+data CoursesStudentsList = CoursesStudentsList'
     { _cslXgafv          :: !(Maybe Text)
     , _cslUploadProtocol :: !(Maybe Text)
     , _cslPp             :: !Bool
@@ -116,7 +116,7 @@
     :: Text -- ^ 'cslCourseId'
     -> CoursesStudentsList
 coursesStudentsList pCslCourseId_ =
-    CoursesStudentsList
+    CoursesStudentsList'
     { _cslXgafv = Nothing
     , _cslUploadProtocol = Nothing
     , _cslPp = True
@@ -188,7 +188,12 @@
 
 instance GoogleRequest CoursesStudentsList where
         type Rs CoursesStudentsList = ListStudentsResponse
-        requestClient CoursesStudentsList{..}
+        type Scopes CoursesStudentsList =
+             '["https://www.googleapis.com/auth/classroom.profile.emails",
+               "https://www.googleapis.com/auth/classroom.profile.photos",
+               "https://www.googleapis.com/auth/classroom.rosters",
+               "https://www.googleapis.com/auth/classroom.rosters.readonly"]
+        requestClient CoursesStudentsList'{..}
           = go _cslCourseId _cslXgafv _cslUploadProtocol
               (Just _cslPp)
               _cslAccessToken
diff --git a/gen/Network/Google/Resource/Classroom/Courses/Teachers/Create.hs b/gen/Network/Google/Resource/Classroom/Courses/Teachers/Create.hs
--- a/gen/Network/Google/Resource/Classroom/Courses/Teachers/Create.hs
+++ b/gen/Network/Google/Resource/Classroom/Courses/Teachers/Create.hs
@@ -14,7 +14,7 @@
 
 -- |
 -- Module      : Network.Google.Resource.Classroom.Courses.Teachers.Create
--- Copyright   : (c) 2015 Brendan Hay
+-- Copyright   : (c) 2015-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -83,7 +83,7 @@
 -- course.
 --
 -- /See:/ 'coursesTeachersCreate' smart constructor.
-data CoursesTeachersCreate = CoursesTeachersCreate
+data CoursesTeachersCreate = CoursesTeachersCreate'
     { _ctcXgafv          :: !(Maybe Text)
     , _ctcUploadProtocol :: !(Maybe Text)
     , _ctcPp             :: !Bool
@@ -121,7 +121,7 @@
     -> Teacher -- ^ 'ctcPayload'
     -> CoursesTeachersCreate
 coursesTeachersCreate pCtcCourseId_ pCtcPayload_ =
-    CoursesTeachersCreate
+    CoursesTeachersCreate'
     { _ctcXgafv = Nothing
     , _ctcUploadProtocol = Nothing
     , _ctcPp = True
@@ -183,7 +183,11 @@
 
 instance GoogleRequest CoursesTeachersCreate where
         type Rs CoursesTeachersCreate = Teacher
-        requestClient CoursesTeachersCreate{..}
+        type Scopes CoursesTeachersCreate =
+             '["https://www.googleapis.com/auth/classroom.profile.emails",
+               "https://www.googleapis.com/auth/classroom.profile.photos",
+               "https://www.googleapis.com/auth/classroom.rosters"]
+        requestClient CoursesTeachersCreate'{..}
           = go _ctcCourseId _ctcXgafv _ctcUploadProtocol
               (Just _ctcPp)
               _ctcAccessToken
diff --git a/gen/Network/Google/Resource/Classroom/Courses/Teachers/Delete.hs b/gen/Network/Google/Resource/Classroom/Courses/Teachers/Delete.hs
--- a/gen/Network/Google/Resource/Classroom/Courses/Teachers/Delete.hs
+++ b/gen/Network/Google/Resource/Classroom/Courses/Teachers/Delete.hs
@@ -14,7 +14,7 @@
 
 -- |
 -- Module      : Network.Google.Resource.Classroom.Courses.Teachers.Delete
--- Copyright   : (c) 2015 Brendan Hay
+-- Copyright   : (c) 2015-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -77,7 +77,7 @@
 -- primary teacher of this course.
 --
 -- /See:/ 'coursesTeachersDelete' smart constructor.
-data CoursesTeachersDelete = CoursesTeachersDelete
+data CoursesTeachersDelete = CoursesTeachersDelete'
     { _ctdXgafv          :: !(Maybe Text)
     , _ctdUploadProtocol :: !(Maybe Text)
     , _ctdPp             :: !Bool
@@ -115,7 +115,7 @@
     -> Text -- ^ 'ctdUserId'
     -> CoursesTeachersDelete
 coursesTeachersDelete pCtdCourseId_ pCtdUserId_ =
-    CoursesTeachersDelete
+    CoursesTeachersDelete'
     { _ctdXgafv = Nothing
     , _ctdUploadProtocol = Nothing
     , _ctdPp = True
@@ -179,7 +179,9 @@
 
 instance GoogleRequest CoursesTeachersDelete where
         type Rs CoursesTeachersDelete = Empty
-        requestClient CoursesTeachersDelete{..}
+        type Scopes CoursesTeachersDelete =
+             '["https://www.googleapis.com/auth/classroom.rosters"]
+        requestClient CoursesTeachersDelete'{..}
           = go _ctdCourseId _ctdUserId _ctdXgafv
               _ctdUploadProtocol
               (Just _ctdPp)
diff --git a/gen/Network/Google/Resource/Classroom/Courses/Teachers/Get.hs b/gen/Network/Google/Resource/Classroom/Courses/Teachers/Get.hs
--- a/gen/Network/Google/Resource/Classroom/Courses/Teachers/Get.hs
+++ b/gen/Network/Google/Resource/Classroom/Courses/Teachers/Get.hs
@@ -14,7 +14,7 @@
 
 -- |
 -- Module      : Network.Google.Resource.Classroom.Courses.Teachers.Get
--- Copyright   : (c) 2015 Brendan Hay
+-- Copyright   : (c) 2015-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -75,7 +75,7 @@
 -- exist.
 --
 -- /See:/ 'coursesTeachersGet' smart constructor.
-data CoursesTeachersGet = CoursesTeachersGet
+data CoursesTeachersGet = CoursesTeachersGet'
     { _ctgXgafv          :: !(Maybe Text)
     , _ctgUploadProtocol :: !(Maybe Text)
     , _ctgPp             :: !Bool
@@ -113,7 +113,7 @@
     -> Text -- ^ 'ctgUserId'
     -> CoursesTeachersGet
 coursesTeachersGet pCtgCourseId_ pCtgUserId_ =
-    CoursesTeachersGet
+    CoursesTeachersGet'
     { _ctgXgafv = Nothing
     , _ctgUploadProtocol = Nothing
     , _ctgPp = True
@@ -177,7 +177,12 @@
 
 instance GoogleRequest CoursesTeachersGet where
         type Rs CoursesTeachersGet = Teacher
-        requestClient CoursesTeachersGet{..}
+        type Scopes CoursesTeachersGet =
+             '["https://www.googleapis.com/auth/classroom.profile.emails",
+               "https://www.googleapis.com/auth/classroom.profile.photos",
+               "https://www.googleapis.com/auth/classroom.rosters",
+               "https://www.googleapis.com/auth/classroom.rosters.readonly"]
+        requestClient CoursesTeachersGet'{..}
           = go _ctgCourseId _ctgUserId _ctgXgafv
               _ctgUploadProtocol
               (Just _ctgPp)
diff --git a/gen/Network/Google/Resource/Classroom/Courses/Teachers/List.hs b/gen/Network/Google/Resource/Classroom/Courses/Teachers/List.hs
--- a/gen/Network/Google/Resource/Classroom/Courses/Teachers/List.hs
+++ b/gen/Network/Google/Resource/Classroom/Courses/Teachers/List.hs
@@ -14,7 +14,7 @@
 
 -- |
 -- Module      : Network.Google.Resource.Classroom.Courses.Teachers.List
--- Copyright   : (c) 2015 Brendan Hay
+-- Copyright   : (c) 2015-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -76,7 +76,7 @@
 -- access errors.
 --
 -- /See:/ 'coursesTeachersList' smart constructor.
-data CoursesTeachersList = CoursesTeachersList
+data CoursesTeachersList = CoursesTeachersList'
     { _ctlXgafv          :: !(Maybe Text)
     , _ctlUploadProtocol :: !(Maybe Text)
     , _ctlPp             :: !Bool
@@ -116,7 +116,7 @@
     :: Text -- ^ 'ctlCourseId'
     -> CoursesTeachersList
 coursesTeachersList pCtlCourseId_ =
-    CoursesTeachersList
+    CoursesTeachersList'
     { _ctlXgafv = Nothing
     , _ctlUploadProtocol = Nothing
     , _ctlPp = True
@@ -188,7 +188,12 @@
 
 instance GoogleRequest CoursesTeachersList where
         type Rs CoursesTeachersList = ListTeachersResponse
-        requestClient CoursesTeachersList{..}
+        type Scopes CoursesTeachersList =
+             '["https://www.googleapis.com/auth/classroom.profile.emails",
+               "https://www.googleapis.com/auth/classroom.profile.photos",
+               "https://www.googleapis.com/auth/classroom.rosters",
+               "https://www.googleapis.com/auth/classroom.rosters.readonly"]
+        requestClient CoursesTeachersList'{..}
           = go _ctlCourseId _ctlXgafv _ctlUploadProtocol
               (Just _ctlPp)
               _ctlAccessToken
diff --git a/gen/Network/Google/Resource/Classroom/Courses/Update.hs b/gen/Network/Google/Resource/Classroom/Courses/Update.hs
--- a/gen/Network/Google/Resource/Classroom/Courses/Update.hs
+++ b/gen/Network/Google/Resource/Classroom/Courses/Update.hs
@@ -14,7 +14,7 @@
 
 -- |
 -- Module      : Network.Google.Resource.Classroom.Courses.Update
--- Copyright   : (c) 2015 Brendan Hay
+-- Copyright   : (c) 2015-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -74,7 +74,7 @@
 -- following request errors: * CourseNotModifiable
 --
 -- /See:/ 'coursesUpdate' smart constructor.
-data CoursesUpdate = CoursesUpdate
+data CoursesUpdate = CoursesUpdate'
     { _cuXgafv          :: !(Maybe Text)
     , _cuUploadProtocol :: !(Maybe Text)
     , _cuPp             :: !Bool
@@ -112,7 +112,7 @@
     -> Text -- ^ 'cuId'
     -> CoursesUpdate
 coursesUpdate pCuPayload_ pCuId_ =
-    CoursesUpdate
+    CoursesUpdate'
     { _cuXgafv = Nothing
     , _cuUploadProtocol = Nothing
     , _cuPp = True
@@ -172,7 +172,9 @@
 
 instance GoogleRequest CoursesUpdate where
         type Rs CoursesUpdate = Course
-        requestClient CoursesUpdate{..}
+        type Scopes CoursesUpdate =
+             '["https://www.googleapis.com/auth/classroom.courses"]
+        requestClient CoursesUpdate'{..}
           = go _cuId _cuXgafv _cuUploadProtocol (Just _cuPp)
               _cuAccessToken
               _cuUploadType
diff --git a/gen/Network/Google/Resource/Classroom/Invitations/Accept.hs b/gen/Network/Google/Resource/Classroom/Invitations/Accept.hs
--- a/gen/Network/Google/Resource/Classroom/Invitations/Accept.hs
+++ b/gen/Network/Google/Resource/Classroom/Invitations/Accept.hs
@@ -14,7 +14,7 @@
 
 -- |
 -- Module      : Network.Google.Resource.Classroom.Invitations.Accept
--- Copyright   : (c) 2015 Brendan Hay
+-- Copyright   : (c) 2015-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -80,7 +80,7 @@
 -- \`NOT_FOUND\` if no invitation exists with the requested ID.
 --
 -- /See:/ 'invitationsAccept' smart constructor.
-data InvitationsAccept = InvitationsAccept
+data InvitationsAccept = InvitationsAccept'
     { _iaXgafv          :: !(Maybe Text)
     , _iaUploadProtocol :: !(Maybe Text)
     , _iaPp             :: !Bool
@@ -114,7 +114,7 @@
     :: Text -- ^ 'iaId'
     -> InvitationsAccept
 invitationsAccept pIaId_ =
-    InvitationsAccept
+    InvitationsAccept'
     { _iaXgafv = Nothing
     , _iaUploadProtocol = Nothing
     , _iaPp = True
@@ -167,7 +167,9 @@
 
 instance GoogleRequest InvitationsAccept where
         type Rs InvitationsAccept = Empty
-        requestClient InvitationsAccept{..}
+        type Scopes InvitationsAccept =
+             '["https://www.googleapis.com/auth/classroom.rosters"]
+        requestClient InvitationsAccept'{..}
           = go _iaId _iaXgafv _iaUploadProtocol (Just _iaPp)
               _iaAccessToken
               _iaUploadType
diff --git a/gen/Network/Google/Resource/Classroom/Invitations/Create.hs b/gen/Network/Google/Resource/Classroom/Invitations/Create.hs
--- a/gen/Network/Google/Resource/Classroom/Invitations/Create.hs
+++ b/gen/Network/Google/Resource/Classroom/Invitations/Create.hs
@@ -14,7 +14,7 @@
 
 -- |
 -- Module      : Network.Google.Resource.Classroom.Invitations.Create
--- Copyright   : (c) 2015 Brendan Hay
+-- Copyright   : (c) 2015-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -80,7 +80,7 @@
 -- specified user and course already exists.
 --
 -- /See:/ 'invitationsCreate' smart constructor.
-data InvitationsCreate = InvitationsCreate
+data InvitationsCreate = InvitationsCreate'
     { _icXgafv          :: !(Maybe Text)
     , _icUploadProtocol :: !(Maybe Text)
     , _icPp             :: !Bool
@@ -114,7 +114,7 @@
     :: Invitation -- ^ 'icPayload'
     -> InvitationsCreate
 invitationsCreate pIcPayload_ =
-    InvitationsCreate
+    InvitationsCreate'
     { _icXgafv = Nothing
     , _icUploadProtocol = Nothing
     , _icPp = True
@@ -168,7 +168,9 @@
 
 instance GoogleRequest InvitationsCreate where
         type Rs InvitationsCreate = Invitation
-        requestClient InvitationsCreate{..}
+        type Scopes InvitationsCreate =
+             '["https://www.googleapis.com/auth/classroom.rosters"]
+        requestClient InvitationsCreate'{..}
           = go _icXgafv _icUploadProtocol (Just _icPp)
               _icAccessToken
               _icUploadType
diff --git a/gen/Network/Google/Resource/Classroom/Invitations/Delete.hs b/gen/Network/Google/Resource/Classroom/Invitations/Delete.hs
--- a/gen/Network/Google/Resource/Classroom/Invitations/Delete.hs
+++ b/gen/Network/Google/Resource/Classroom/Invitations/Delete.hs
@@ -14,7 +14,7 @@
 
 -- |
 -- Module      : Network.Google.Resource.Classroom.Invitations.Delete
--- Copyright   : (c) 2015 Brendan Hay
+-- Copyright   : (c) 2015-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -70,7 +70,7 @@
 -- invitation exists with the requested ID.
 --
 -- /See:/ 'invitationsDelete' smart constructor.
-data InvitationsDelete = InvitationsDelete
+data InvitationsDelete = InvitationsDelete'
     { _idXgafv          :: !(Maybe Text)
     , _idUploadProtocol :: !(Maybe Text)
     , _idPp             :: !Bool
@@ -104,7 +104,7 @@
     :: Text -- ^ 'idId'
     -> InvitationsDelete
 invitationsDelete pIdId_ =
-    InvitationsDelete
+    InvitationsDelete'
     { _idXgafv = Nothing
     , _idUploadProtocol = Nothing
     , _idPp = True
@@ -157,7 +157,9 @@
 
 instance GoogleRequest InvitationsDelete where
         type Rs InvitationsDelete = Empty
-        requestClient InvitationsDelete{..}
+        type Scopes InvitationsDelete =
+             '["https://www.googleapis.com/auth/classroom.rosters"]
+        requestClient InvitationsDelete'{..}
           = go _idId _idXgafv _idUploadProtocol (Just _idPp)
               _idAccessToken
               _idUploadType
diff --git a/gen/Network/Google/Resource/Classroom/Invitations/Get.hs b/gen/Network/Google/Resource/Classroom/Invitations/Get.hs
--- a/gen/Network/Google/Resource/Classroom/Invitations/Get.hs
+++ b/gen/Network/Google/Resource/Classroom/Invitations/Get.hs
@@ -14,7 +14,7 @@
 
 -- |
 -- Module      : Network.Google.Resource.Classroom.Invitations.Get
--- Copyright   : (c) 2015 Brendan Hay
+-- Copyright   : (c) 2015-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -70,7 +70,7 @@
 -- invitation exists with the requested ID.
 --
 -- /See:/ 'invitationsGet' smart constructor.
-data InvitationsGet = InvitationsGet
+data InvitationsGet = InvitationsGet'
     { _igXgafv          :: !(Maybe Text)
     , _igUploadProtocol :: !(Maybe Text)
     , _igPp             :: !Bool
@@ -104,7 +104,7 @@
     :: Text -- ^ 'igId'
     -> InvitationsGet
 invitationsGet pIgId_ =
-    InvitationsGet
+    InvitationsGet'
     { _igXgafv = Nothing
     , _igUploadProtocol = Nothing
     , _igPp = True
@@ -157,7 +157,10 @@
 
 instance GoogleRequest InvitationsGet where
         type Rs InvitationsGet = Invitation
-        requestClient InvitationsGet{..}
+        type Scopes InvitationsGet =
+             '["https://www.googleapis.com/auth/classroom.rosters",
+               "https://www.googleapis.com/auth/classroom.rosters.readonly"]
+        requestClient InvitationsGet'{..}
           = go _igId _igXgafv _igUploadProtocol (Just _igPp)
               _igAccessToken
               _igUploadType
diff --git a/gen/Network/Google/Resource/Classroom/Invitations/List.hs b/gen/Network/Google/Resource/Classroom/Invitations/List.hs
--- a/gen/Network/Google/Resource/Classroom/Invitations/List.hs
+++ b/gen/Network/Google/Resource/Classroom/Invitations/List.hs
@@ -14,7 +14,7 @@
 
 -- |
 -- Module      : Network.Google.Resource.Classroom.Invitations.List
--- Copyright   : (c) 2015 Brendan Hay
+-- Copyright   : (c) 2015-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -79,7 +79,7 @@
 -- \`PERMISSION_DENIED\` for access errors.
 --
 -- /See:/ 'invitationsList' smart constructor.
-data InvitationsList = InvitationsList
+data InvitationsList = InvitationsList'
     { _ilXgafv          :: !(Maybe Text)
     , _ilUploadProtocol :: !(Maybe Text)
     , _ilPp             :: !Bool
@@ -121,7 +121,7 @@
 invitationsList
     :: InvitationsList
 invitationsList =
-    InvitationsList
+    InvitationsList'
     { _ilXgafv = Nothing
     , _ilUploadProtocol = Nothing
     , _ilPp = True
@@ -200,7 +200,10 @@
 
 instance GoogleRequest InvitationsList where
         type Rs InvitationsList = ListInvitationsResponse
-        requestClient InvitationsList{..}
+        type Scopes InvitationsList =
+             '["https://www.googleapis.com/auth/classroom.rosters",
+               "https://www.googleapis.com/auth/classroom.rosters.readonly"]
+        requestClient InvitationsList'{..}
           = go _ilXgafv _ilUploadProtocol (Just _ilPp)
               _ilCourseId
               _ilAccessToken
diff --git a/gen/Network/Google/Resource/Classroom/UserProFiles/Get.hs b/gen/Network/Google/Resource/Classroom/UserProFiles/Get.hs
--- a/gen/Network/Google/Resource/Classroom/UserProFiles/Get.hs
+++ b/gen/Network/Google/Resource/Classroom/UserProFiles/Get.hs
@@ -14,7 +14,7 @@
 
 -- |
 -- Module      : Network.Google.Resource.Classroom.UserProFiles.Get
--- Copyright   : (c) 2015 Brendan Hay
+-- Copyright   : (c) 2015-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -70,7 +70,7 @@
 -- access errors.
 --
 -- /See:/ 'userProFilesGet' smart constructor.
-data UserProFilesGet = UserProFilesGet
+data UserProFilesGet = UserProFilesGet'
     { _upfgXgafv          :: !(Maybe Text)
     , _upfgUploadProtocol :: !(Maybe Text)
     , _upfgPp             :: !Bool
@@ -104,7 +104,7 @@
     :: Text -- ^ 'upfgUserId'
     -> UserProFilesGet
 userProFilesGet pUpfgUserId_ =
-    UserProFilesGet
+    UserProFilesGet'
     { _upfgXgafv = Nothing
     , _upfgUploadProtocol = Nothing
     , _upfgPp = True
@@ -162,7 +162,12 @@
 
 instance GoogleRequest UserProFilesGet where
         type Rs UserProFilesGet = UserProFile
-        requestClient UserProFilesGet{..}
+        type Scopes UserProFilesGet =
+             '["https://www.googleapis.com/auth/classroom.profile.emails",
+               "https://www.googleapis.com/auth/classroom.profile.photos",
+               "https://www.googleapis.com/auth/classroom.rosters",
+               "https://www.googleapis.com/auth/classroom.rosters.readonly"]
+        requestClient UserProFilesGet'{..}
           = go _upfgUserId _upfgXgafv _upfgUploadProtocol
               (Just _upfgPp)
               _upfgAccessToken
diff --git a/gogol-classroom.cabal b/gogol-classroom.cabal
--- a/gogol-classroom.cabal
+++ b/gogol-classroom.cabal
@@ -1,5 +1,5 @@
 name:                  gogol-classroom
-version:               0.0.1
+version:               0.1.0
 synopsis:              Google Classroom SDK.
 homepage:              https://github.com/brendanhay/gogol
 bug-reports:           https://github.com/brendanhay/gogol/issues
@@ -7,14 +7,14 @@
 license-file:          LICENSE
 author:                Brendan Hay
 maintainer:            Brendan Hay <brendan.g.hay@gmail.com>
-copyright:             Copyright (c) 2015 Brendan Hay
+copyright:             Copyright (c) 2015-2016 Brendan Hay
 category:              Network, Google, Cloud
 build-type:            Simple
 cabal-version:         >= 1.10
 extra-source-files:    README.md
 
 description:
-    Google Classroom API
+    Manages classes, rosters, and invitations in Google Classroom.
     .
     /Warning:/ This is an experimental prototype/preview release which is still
     under exploratory development and not intended for public use, caveat emptor!
@@ -38,6 +38,16 @@
         , 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.CourseWork.Create
+        , Network.Google.Resource.Classroom.Courses.CourseWork.Get
+        , Network.Google.Resource.Classroom.Courses.CourseWork.List
+        , Network.Google.Resource.Classroom.Courses.CourseWork.StudentSubmissions.Get
+        , Network.Google.Resource.Classroom.Courses.CourseWork.StudentSubmissions.List
+        , Network.Google.Resource.Classroom.Courses.CourseWork.StudentSubmissions.ModifyAttachments
+        , Network.Google.Resource.Classroom.Courses.CourseWork.StudentSubmissions.Patch
+        , Network.Google.Resource.Classroom.Courses.CourseWork.StudentSubmissions.Reclaim
+        , Network.Google.Resource.Classroom.Courses.CourseWork.StudentSubmissions.Return
+        , Network.Google.Resource.Classroom.Courses.CourseWork.StudentSubmissions.TurnIn
         , Network.Google.Resource.Classroom.Courses.Create
         , Network.Google.Resource.Classroom.Courses.Delete
         , Network.Google.Resource.Classroom.Courses.Get
@@ -64,5 +74,5 @@
         , Network.Google.Classroom.Types.Sum
 
     build-depends:
-          gogol-core == 0.0.1.*
+          gogol-core == 0.1.0.*
         , base       >= 4.7 && < 5
