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
@@ -24,17 +24,22 @@
     -- * OAuth Scopes
     , classroomRostersReadOnlyScope
     , classroomCoursesScope
+    , classroomPushNotificationsScope
     , classroomCourseworkStudentsReadOnlyScope
     , classroomProFileEmailsScope
     , classroomProFilePhotosScope
     , classroomCourseworkMeScope
-    , classroomCourseWorkReadOnlyScope
+    , classroomAnnouncementsReadOnlyScope
+    , classroomGuardianlinksStudentsScope
     , classroomStudentSubmissionsStudentsReadOnlyScope
+    , classroomGuardianlinksMeReadOnlyScope
     , classroomRostersScope
     , classroomCoursesReadOnlyScope
     , classroomCourseworkStudentsScope
+    , classroomAnnouncementsScope
     , classroomCourseworkMeReadOnlyScope
     , classroomStudentSubmissionsMeReadOnlyScope
+    , classroomGuardianlinksStudentsReadOnlyScope
 
     -- * API Declaration
     , ClassroomAPI
@@ -50,6 +55,24 @@
     -- ** classroom.courses.aliases.list
     , module Network.Google.Resource.Classroom.Courses.Aliases.List
 
+    -- ** classroom.courses.announcements.create
+    , module Network.Google.Resource.Classroom.Courses.Announcements.Create
+
+    -- ** classroom.courses.announcements.delete
+    , module Network.Google.Resource.Classroom.Courses.Announcements.Delete
+
+    -- ** classroom.courses.announcements.get
+    , module Network.Google.Resource.Classroom.Courses.Announcements.Get
+
+    -- ** classroom.courses.announcements.list
+    , module Network.Google.Resource.Classroom.Courses.Announcements.List
+
+    -- ** classroom.courses.announcements.modifyAssignees
+    , module Network.Google.Resource.Classroom.Courses.Announcements.ModifyAssignees
+
+    -- ** classroom.courses.announcements.patch
+    , module Network.Google.Resource.Classroom.Courses.Announcements.Patch
+
     -- ** classroom.courses.courseWork.create
     , module Network.Google.Resource.Classroom.Courses.CourseWork.Create
 
@@ -62,6 +85,9 @@
     -- ** classroom.courses.courseWork.list
     , module Network.Google.Resource.Classroom.Courses.CourseWork.List
 
+    -- ** classroom.courses.courseWork.modifyAssignees
+    , module Network.Google.Resource.Classroom.Courses.CourseWork.ModifyAssignees
+
     -- ** classroom.courses.courseWork.patch
     , module Network.Google.Resource.Classroom.Courses.CourseWork.Patch
 
@@ -143,6 +169,12 @@
     -- ** classroom.invitations.list
     , module Network.Google.Resource.Classroom.Invitations.List
 
+    -- ** classroom.registrations.create
+    , module Network.Google.Resource.Classroom.Registrations.Create
+
+    -- ** classroom.registrations.delete
+    , module Network.Google.Resource.Classroom.Registrations.Delete
+
     -- ** classroom.userProfiles.get
     , module Network.Google.Resource.Classroom.UserProFiles.Get
 
@@ -179,9 +211,12 @@
     , CourseWork
     , courseWork
     , cwCreationTime
+    , cwScheduledTime
     , cwState
+    , cwAssigneeMode
     , cwMaterials
     , cwCourseId
+    , cwIndividualStudentsOptions
     , cwMaxPoints
     , cwWorkType
     , cwDueTime
@@ -191,11 +226,38 @@
     , cwId
     , cwSubmissionModificationMode
     , cwDueDate
+    , cwCreatorUserId
     , cwTitle
     , cwAlternateLink
     , cwAssignment
     , cwDescription
 
+    -- ** GradeHistoryGradeChangeType
+    , GradeHistoryGradeChangeType (..)
+
+    -- ** GradeHistory
+    , GradeHistory
+    , gradeHistory
+    , ghGradeTimestamp
+    , ghMaxPoints
+    , ghPointsEarned
+    , ghActorUserId
+    , ghGradeChangeType
+
+    -- ** CourseWorkChangesInfo
+    , CourseWorkChangesInfo
+    , courseWorkChangesInfo
+    , cwciCourseId
+
+    -- ** ModifyCourseWorkAssigneesRequest
+    , ModifyCourseWorkAssigneesRequest
+    , modifyCourseWorkAssigneesRequest
+    , mcwarAssigneeMode
+    , mcwarModifyIndividualStudentsOptions
+
+    -- ** CourseCourseState
+    , CourseCourseState (..)
+
     -- ** DriveFile
     , DriveFile
     , driveFile
@@ -213,14 +275,33 @@
     , giInvitationId
     , giInvitedEmailAddress
 
+    -- ** Feed
+    , Feed
+    , feed
+    , fCourseWorkChangesInfo
+    , fFeedType
+    , fCourseRosterChangesInfo
+
+    -- ** ModifyAnnouncementAssigneesRequest
+    , ModifyAnnouncementAssigneesRequest
+    , modifyAnnouncementAssigneesRequest
+    , maarAssigneeMode
+    , maarModifyIndividualStudentsOptions
+
     -- ** ReturnStudentSubmissionRequest
     , ReturnStudentSubmissionRequest
     , returnStudentSubmissionRequest
 
+    -- ** StateHistoryState
+    , StateHistoryState (..)
+
     -- ** ReclaimStudentSubmissionRequest
     , ReclaimStudentSubmissionRequest
     , reclaimStudentSubmissionRequest
 
+    -- ** CourseWorkWorkType
+    , CourseWorkWorkType (..)
+
     -- ** ListCourseWorkResponse
     , ListCourseWorkResponse
     , listCourseWorkResponse
@@ -231,6 +312,15 @@
     , Empty
     , empty
 
+    -- ** ModifyCourseWorkAssigneesRequestAssigneeMode
+    , ModifyCourseWorkAssigneesRequestAssigneeMode (..)
+
+    -- ** GuardianInvitationState
+    , GuardianInvitationState (..)
+
+    -- ** SharedDriveFileShareMode
+    , SharedDriveFileShareMode (..)
+
     -- ** GlobalPermission
     , GlobalPermission
     , globalPermission
@@ -243,6 +333,14 @@
     , lURL
     , lTitle
 
+    -- ** ModifyAnnouncementAssigneesRequestAssigneeMode
+    , ModifyAnnouncementAssigneesRequestAssigneeMode (..)
+
+    -- ** IndividualStudentsOptions
+    , IndividualStudentsOptions
+    , individualStudentsOptions
+    , isoStudentIds
+
     -- ** AssignmentSubmission
     , AssignmentSubmission
     , assignmentSubmission
@@ -253,6 +351,18 @@
     , modifyAttachmentsRequest
     , marAddAttachments
 
+    -- ** ListAnnouncementsResponse
+    , ListAnnouncementsResponse
+    , listAnnouncementsResponse
+    , larNextPageToken
+    , larAnnouncements
+
+    -- ** AnnouncementAssigneeMode
+    , AnnouncementAssigneeMode (..)
+
+    -- ** CourseWorkState
+    , CourseWorkState (..)
+
     -- ** ListStudentSubmissionsResponse
     , ListStudentSubmissionsResponse
     , listStudentSubmissionsResponse
@@ -294,11 +404,17 @@
     , cmYouTubeVideo
     , cmForm
 
+    -- ** StudentSubmissionState
+    , StudentSubmissionState (..)
+
     -- ** ShortAnswerSubmission
     , ShortAnswerSubmission
     , shortAnswerSubmission
     , sasAnswer
 
+    -- ** AnnouncementState
+    , AnnouncementState (..)
+
     -- ** Invitation
     , Invitation
     , invitation
@@ -315,6 +431,22 @@
     , aYouTubeVideo
     , aForm
 
+    -- ** Announcement
+    , Announcement
+    , announcement
+    , aCreationTime
+    , aScheduledTime
+    , aState
+    , aAssigneeMode
+    , aText
+    , aMaterials
+    , aCourseId
+    , aIndividualStudentsOptions
+    , aUpdateTime
+    , aId
+    , aCreatorUserId
+    , aAlternateLink
+
     -- ** StudentSubmission
     , StudentSubmission
     , studentSubmission
@@ -329,6 +461,7 @@
     , ssUserId
     , ssUpdateTime
     , ssCourseWorkType
+    , ssSubmissionHistory
     , ssAssignedGrade
     , ssId
     , ssDraftGrade
@@ -386,10 +519,14 @@
     , TurnInStudentSubmissionRequest
     , turnInStudentSubmissionRequest
 
+    -- ** Xgafv
+    , Xgafv (..)
+
     -- ** UserProFile
     , UserProFile
     , userProFile
     , upfPhotoURL
+    , upfVerifiedTeacher
     , upfName
     , upfEmailAddress
     , upfId
@@ -402,6 +539,19 @@
     , dTitle
     , dAlternateLink
 
+    -- ** SubmissionHistory
+    , SubmissionHistory
+    , submissionHistory
+    , shGradeHistory
+    , shStateHistory
+
+    -- ** StateHistory
+    , StateHistory
+    , stateHistory
+    , shState
+    , shActorUserId
+    , shStateTimestamp
+
     -- ** MultipleChoiceQuestion
     , MultipleChoiceQuestion
     , multipleChoiceQuestion
@@ -410,24 +560,31 @@
     -- ** Course
     , Course
     , course
-    , cCreationTime
-    , cRoom
-    , cCourseMaterialSets
-    , cTeacherGroupEmail
-    , cTeacherFolder
-    , cCourseState
-    , cGuardiansEnabled
-    , cEnrollmentCode
-    , cUpdateTime
-    , cOwnerId
-    , cName
-    , cId
-    , cAlternateLink
-    , cCourseGroupEmail
-    , cDescription
-    , cDescriptionHeading
-    , cSection
+    , couCreationTime
+    , couRoom
+    , couCourseMaterialSets
+    , couCalendarId
+    , couTeacherGroupEmail
+    , couTeacherFolder
+    , couCourseState
+    , couGuardiansEnabled
+    , couEnrollmentCode
+    , couUpdateTime
+    , couOwnerId
+    , couName
+    , couId
+    , couAlternateLink
+    , couCourseGroupEmail
+    , couDescription
+    , couDescriptionHeading
+    , couSection
 
+    -- ** InvitationRole
+    , InvitationRole (..)
+
+    -- ** StudentSubmissionCourseWorkType
+    , StudentSubmissionCourseWorkType (..)
+
     -- ** TimeOfDay'
     , TimeOfDay'
     , timeOfDay
@@ -436,6 +593,9 @@
     , todMinutes
     , todSeconds
 
+    -- ** FeedFeedType
+    , FeedFeedType (..)
+
     -- ** ListGuardianInvitationsResponse
     , ListGuardianInvitationsResponse
     , listGuardianInvitationsResponse
@@ -464,6 +624,28 @@
     , courseAlias
     , caAlias
 
+    -- ** CourseRosterChangesInfo
+    , CourseRosterChangesInfo
+    , courseRosterChangesInfo
+    , crciCourseId
+
+    -- ** ModifyIndividualStudentsOptions
+    , ModifyIndividualStudentsOptions
+    , modifyIndividualStudentsOptions
+    , misoAddStudentIds
+    , misoRemoveStudentIds
+
+    -- ** CloudPubsubTopic
+    , CloudPubsubTopic
+    , cloudPubsubTopic
+    , cptTopicName
+
+    -- ** GlobalPermissionPermission
+    , GlobalPermissionPermission (..)
+
+    -- ** CourseWorkAssigneeMode
+    , CourseWorkAssigneeMode (..)
+
     -- ** Form
     , Form
     , form
@@ -485,6 +667,17 @@
     , sProFile
     , sStudentWorkFolder
     , sUserId
+
+    -- ** CourseWorkSubmissionModificationMode
+    , CourseWorkSubmissionModificationMode (..)
+
+    -- ** Registration
+    , Registration
+    , registration
+    , rRegistrationId
+    , rExpiryTime
+    , rFeed
+    , rCloudPubsubTopic
     ) where
 
 import           Network.Google.Classroom.Types
@@ -492,10 +685,17 @@
 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.Announcements.Create
+import           Network.Google.Resource.Classroom.Courses.Announcements.Delete
+import           Network.Google.Resource.Classroom.Courses.Announcements.Get
+import           Network.Google.Resource.Classroom.Courses.Announcements.List
+import           Network.Google.Resource.Classroom.Courses.Announcements.ModifyAssignees
+import           Network.Google.Resource.Classroom.Courses.Announcements.Patch
 import           Network.Google.Resource.Classroom.Courses.CourseWork.Create
 import           Network.Google.Resource.Classroom.Courses.CourseWork.Delete
 import           Network.Google.Resource.Classroom.Courses.CourseWork.Get
 import           Network.Google.Resource.Classroom.Courses.CourseWork.List
+import           Network.Google.Resource.Classroom.Courses.CourseWork.ModifyAssignees
 import           Network.Google.Resource.Classroom.Courses.CourseWork.Patch
 import           Network.Google.Resource.Classroom.Courses.CourseWork.StudentSubmissions.Get
 import           Network.Google.Resource.Classroom.Courses.CourseWork.StudentSubmissions.List
@@ -523,6 +723,8 @@
 import           Network.Google.Resource.Classroom.Invitations.Delete
 import           Network.Google.Resource.Classroom.Invitations.Get
 import           Network.Google.Resource.Classroom.Invitations.List
+import           Network.Google.Resource.Classroom.Registrations.Create
+import           Network.Google.Resource.Classroom.Registrations.Delete
 import           Network.Google.Resource.Classroom.UserProFiles.Get
 import           Network.Google.Resource.Classroom.UserProFiles.GuardianInvitations.Create
 import           Network.Google.Resource.Classroom.UserProFiles.GuardianInvitations.Get
@@ -558,11 +760,18 @@
        :<|> CoursesCourseWorkPatchResource
        :<|> CoursesCourseWorkGetResource
        :<|> CoursesCourseWorkCreateResource
+       :<|> CoursesCourseWorkModifyAssigneesResource
        :<|> CoursesCourseWorkDeleteResource
        :<|> CoursesTeachersListResource
        :<|> CoursesTeachersGetResource
        :<|> CoursesTeachersCreateResource
        :<|> CoursesTeachersDeleteResource
+       :<|> CoursesAnnouncementsListResource
+       :<|> CoursesAnnouncementsPatchResource
+       :<|> CoursesAnnouncementsGetResource
+       :<|> CoursesAnnouncementsCreateResource
+       :<|> CoursesAnnouncementsModifyAssigneesResource
+       :<|> CoursesAnnouncementsDeleteResource
        :<|> CoursesAliasesListResource
        :<|> CoursesAliasesCreateResource
        :<|> CoursesAliasesDeleteResource
@@ -584,3 +793,5 @@
        :<|> UserProFilesGuardianInvitationsGetResource
        :<|> UserProFilesGuardianInvitationsCreateResource
        :<|> UserProFilesGetResource
+       :<|> RegistrationsCreateResource
+       :<|> RegistrationsDeleteResource
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
@@ -22,17 +22,22 @@
     -- * OAuth Scopes
     , classroomRostersReadOnlyScope
     , classroomCoursesScope
+    , classroomPushNotificationsScope
     , classroomCourseworkStudentsReadOnlyScope
     , classroomProFileEmailsScope
     , classroomProFilePhotosScope
     , classroomCourseworkMeScope
-    , classroomCourseWorkReadOnlyScope
+    , classroomAnnouncementsReadOnlyScope
+    , classroomGuardianlinksStudentsScope
     , classroomStudentSubmissionsStudentsReadOnlyScope
+    , classroomGuardianlinksMeReadOnlyScope
     , classroomRostersScope
     , classroomCoursesReadOnlyScope
     , classroomCourseworkStudentsScope
+    , classroomAnnouncementsScope
     , classroomCourseworkMeReadOnlyScope
     , classroomStudentSubmissionsMeReadOnlyScope
+    , classroomGuardianlinksStudentsReadOnlyScope
 
     -- * ListCourseAliasesResponse
     , ListCourseAliasesResponse
@@ -44,9 +49,12 @@
     , CourseWork
     , courseWork
     , cwCreationTime
+    , cwScheduledTime
     , cwState
+    , cwAssigneeMode
     , cwMaterials
     , cwCourseId
+    , cwIndividualStudentsOptions
     , cwMaxPoints
     , cwWorkType
     , cwDueTime
@@ -56,11 +64,38 @@
     , cwId
     , cwSubmissionModificationMode
     , cwDueDate
+    , cwCreatorUserId
     , cwTitle
     , cwAlternateLink
     , cwAssignment
     , cwDescription
 
+    -- * GradeHistoryGradeChangeType
+    , GradeHistoryGradeChangeType (..)
+
+    -- * GradeHistory
+    , GradeHistory
+    , gradeHistory
+    , ghGradeTimestamp
+    , ghMaxPoints
+    , ghPointsEarned
+    , ghActorUserId
+    , ghGradeChangeType
+
+    -- * CourseWorkChangesInfo
+    , CourseWorkChangesInfo
+    , courseWorkChangesInfo
+    , cwciCourseId
+
+    -- * ModifyCourseWorkAssigneesRequest
+    , ModifyCourseWorkAssigneesRequest
+    , modifyCourseWorkAssigneesRequest
+    , mcwarAssigneeMode
+    , mcwarModifyIndividualStudentsOptions
+
+    -- * CourseCourseState
+    , CourseCourseState (..)
+
     -- * DriveFile
     , DriveFile
     , driveFile
@@ -78,14 +113,33 @@
     , giInvitationId
     , giInvitedEmailAddress
 
+    -- * Feed
+    , Feed
+    , feed
+    , fCourseWorkChangesInfo
+    , fFeedType
+    , fCourseRosterChangesInfo
+
+    -- * ModifyAnnouncementAssigneesRequest
+    , ModifyAnnouncementAssigneesRequest
+    , modifyAnnouncementAssigneesRequest
+    , maarAssigneeMode
+    , maarModifyIndividualStudentsOptions
+
     -- * ReturnStudentSubmissionRequest
     , ReturnStudentSubmissionRequest
     , returnStudentSubmissionRequest
 
+    -- * StateHistoryState
+    , StateHistoryState (..)
+
     -- * ReclaimStudentSubmissionRequest
     , ReclaimStudentSubmissionRequest
     , reclaimStudentSubmissionRequest
 
+    -- * CourseWorkWorkType
+    , CourseWorkWorkType (..)
+
     -- * ListCourseWorkResponse
     , ListCourseWorkResponse
     , listCourseWorkResponse
@@ -96,6 +150,15 @@
     , Empty
     , empty
 
+    -- * ModifyCourseWorkAssigneesRequestAssigneeMode
+    , ModifyCourseWorkAssigneesRequestAssigneeMode (..)
+
+    -- * GuardianInvitationState
+    , GuardianInvitationState (..)
+
+    -- * SharedDriveFileShareMode
+    , SharedDriveFileShareMode (..)
+
     -- * GlobalPermission
     , GlobalPermission
     , globalPermission
@@ -108,6 +171,14 @@
     , lURL
     , lTitle
 
+    -- * ModifyAnnouncementAssigneesRequestAssigneeMode
+    , ModifyAnnouncementAssigneesRequestAssigneeMode (..)
+
+    -- * IndividualStudentsOptions
+    , IndividualStudentsOptions
+    , individualStudentsOptions
+    , isoStudentIds
+
     -- * AssignmentSubmission
     , AssignmentSubmission
     , assignmentSubmission
@@ -118,6 +189,18 @@
     , modifyAttachmentsRequest
     , marAddAttachments
 
+    -- * ListAnnouncementsResponse
+    , ListAnnouncementsResponse
+    , listAnnouncementsResponse
+    , larNextPageToken
+    , larAnnouncements
+
+    -- * AnnouncementAssigneeMode
+    , AnnouncementAssigneeMode (..)
+
+    -- * CourseWorkState
+    , CourseWorkState (..)
+
     -- * ListStudentSubmissionsResponse
     , ListStudentSubmissionsResponse
     , listStudentSubmissionsResponse
@@ -159,11 +242,17 @@
     , cmYouTubeVideo
     , cmForm
 
+    -- * StudentSubmissionState
+    , StudentSubmissionState (..)
+
     -- * ShortAnswerSubmission
     , ShortAnswerSubmission
     , shortAnswerSubmission
     , sasAnswer
 
+    -- * AnnouncementState
+    , AnnouncementState (..)
+
     -- * Invitation
     , Invitation
     , invitation
@@ -180,6 +269,22 @@
     , aYouTubeVideo
     , aForm
 
+    -- * Announcement
+    , Announcement
+    , announcement
+    , aCreationTime
+    , aScheduledTime
+    , aState
+    , aAssigneeMode
+    , aText
+    , aMaterials
+    , aCourseId
+    , aIndividualStudentsOptions
+    , aUpdateTime
+    , aId
+    , aCreatorUserId
+    , aAlternateLink
+
     -- * StudentSubmission
     , StudentSubmission
     , studentSubmission
@@ -194,6 +299,7 @@
     , ssUserId
     , ssUpdateTime
     , ssCourseWorkType
+    , ssSubmissionHistory
     , ssAssignedGrade
     , ssId
     , ssDraftGrade
@@ -251,10 +357,14 @@
     , TurnInStudentSubmissionRequest
     , turnInStudentSubmissionRequest
 
+    -- * Xgafv
+    , Xgafv (..)
+
     -- * UserProFile
     , UserProFile
     , userProFile
     , upfPhotoURL
+    , upfVerifiedTeacher
     , upfName
     , upfEmailAddress
     , upfId
@@ -267,6 +377,19 @@
     , dTitle
     , dAlternateLink
 
+    -- * SubmissionHistory
+    , SubmissionHistory
+    , submissionHistory
+    , shGradeHistory
+    , shStateHistory
+
+    -- * StateHistory
+    , StateHistory
+    , stateHistory
+    , shState
+    , shActorUserId
+    , shStateTimestamp
+
     -- * MultipleChoiceQuestion
     , MultipleChoiceQuestion
     , multipleChoiceQuestion
@@ -275,24 +398,31 @@
     -- * Course
     , Course
     , course
-    , cCreationTime
-    , cRoom
-    , cCourseMaterialSets
-    , cTeacherGroupEmail
-    , cTeacherFolder
-    , cCourseState
-    , cGuardiansEnabled
-    , cEnrollmentCode
-    , cUpdateTime
-    , cOwnerId
-    , cName
-    , cId
-    , cAlternateLink
-    , cCourseGroupEmail
-    , cDescription
-    , cDescriptionHeading
-    , cSection
+    , couCreationTime
+    , couRoom
+    , couCourseMaterialSets
+    , couCalendarId
+    , couTeacherGroupEmail
+    , couTeacherFolder
+    , couCourseState
+    , couGuardiansEnabled
+    , couEnrollmentCode
+    , couUpdateTime
+    , couOwnerId
+    , couName
+    , couId
+    , couAlternateLink
+    , couCourseGroupEmail
+    , couDescription
+    , couDescriptionHeading
+    , couSection
 
+    -- * InvitationRole
+    , InvitationRole (..)
+
+    -- * StudentSubmissionCourseWorkType
+    , StudentSubmissionCourseWorkType (..)
+
     -- * TimeOfDay'
     , TimeOfDay'
     , timeOfDay
@@ -301,6 +431,9 @@
     , todMinutes
     , todSeconds
 
+    -- * FeedFeedType
+    , FeedFeedType (..)
+
     -- * ListGuardianInvitationsResponse
     , ListGuardianInvitationsResponse
     , listGuardianInvitationsResponse
@@ -329,6 +462,28 @@
     , courseAlias
     , caAlias
 
+    -- * CourseRosterChangesInfo
+    , CourseRosterChangesInfo
+    , courseRosterChangesInfo
+    , crciCourseId
+
+    -- * ModifyIndividualStudentsOptions
+    , ModifyIndividualStudentsOptions
+    , modifyIndividualStudentsOptions
+    , misoAddStudentIds
+    , misoRemoveStudentIds
+
+    -- * CloudPubsubTopic
+    , CloudPubsubTopic
+    , cloudPubsubTopic
+    , cptTopicName
+
+    -- * GlobalPermissionPermission
+    , GlobalPermissionPermission (..)
+
+    -- * CourseWorkAssigneeMode
+    , CourseWorkAssigneeMode (..)
+
     -- * Form
     , Form
     , form
@@ -350,6 +505,17 @@
     , sProFile
     , sStudentWorkFolder
     , sUserId
+
+    -- * CourseWorkSubmissionModificationMode
+    , CourseWorkSubmissionModificationMode (..)
+
+    -- * Registration
+    , Registration
+    , registration
+    , rRegistrationId
+    , rExpiryTime
+    , rFeed
+    , rCloudPubsubTopic
     ) where
 
 import           Network.Google.Classroom.Types.Product
@@ -370,6 +536,10 @@
 classroomCoursesScope :: Proxy '["https://www.googleapis.com/auth/classroom.courses"]
 classroomCoursesScope = Proxy;
 
+-- | Receive notifications about your Google Classroom data
+classroomPushNotificationsScope :: Proxy '["https://www.googleapis.com/auth/classroom.push-notifications"]
+classroomPushNotificationsScope = 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"]
@@ -387,16 +557,23 @@
 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 announcements in Google Classroom
+classroomAnnouncementsReadOnlyScope :: Proxy '["https://www.googleapis.com/auth/classroom.announcements.readonly"]
+classroomAnnouncementsReadOnlyScope = Proxy;
 
+-- | View and manage guardians for students in your Google Classroom classes
+classroomGuardianlinksStudentsScope :: Proxy '["https://www.googleapis.com/auth/classroom.guardianlinks.students"]
+classroomGuardianlinksStudentsScope = 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;
 
+-- | View your Google Classroom guardians
+classroomGuardianlinksMeReadOnlyScope :: Proxy '["https://www.googleapis.com/auth/classroom.guardianlinks.me.readonly"]
+classroomGuardianlinksMeReadOnlyScope = Proxy;
+
 -- | Manage your Google Classroom class rosters
 classroomRostersScope :: Proxy '["https://www.googleapis.com/auth/classroom.rosters"]
 classroomRostersScope = Proxy;
@@ -411,6 +588,10 @@
 classroomCourseworkStudentsScope :: Proxy '["https://www.googleapis.com/auth/classroom.coursework.students"]
 classroomCourseworkStudentsScope = Proxy;
 
+-- | View and manage announcements in Google Classroom
+classroomAnnouncementsScope :: Proxy '["https://www.googleapis.com/auth/classroom.announcements"]
+classroomAnnouncementsScope = Proxy;
+
 -- | View your course work and grades in Google Classroom
 classroomCourseworkMeReadOnlyScope :: Proxy '["https://www.googleapis.com/auth/classroom.coursework.me.readonly"]
 classroomCourseworkMeReadOnlyScope = Proxy;
@@ -418,3 +599,7 @@
 -- | View your course work and grades in Google Classroom
 classroomStudentSubmissionsMeReadOnlyScope :: Proxy '["https://www.googleapis.com/auth/classroom.student-submissions.me.readonly"]
 classroomStudentSubmissionsMeReadOnlyScope = Proxy;
+
+-- | View guardians for students in your Google Classroom classes
+classroomGuardianlinksStudentsReadOnlyScope :: Proxy '["https://www.googleapis.com/auth/classroom.guardianlinks.students.readonly"]
+classroomGuardianlinksStudentsReadOnlyScope = 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
@@ -76,2797 +76,3805 @@
 --
 -- /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. CourseWork must have no more than 20 material
--- items.
-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 a non-negative 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.
-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. For read operations, this field is
--- populated only when \`work_type\` is \`MULTIPLE_CHOICE_QUESTION\`. For
--- write operations, this field must be specified when creating course work
--- with a \`work_type\` of \`MULTIPLE_CHOICE_QUESTION\`, and it must not be
--- set otherwise.
-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\`. Read-only.
-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])
-
--- | An invitation to become the guardian of a specified user, sent to a
--- specified email address.
---
--- /See:/ 'guardianInvitation' smart constructor.
-data GuardianInvitation = GuardianInvitation'
-    { _giCreationTime        :: !(Maybe Text)
-    , _giStudentId           :: !(Maybe Text)
-    , _giState               :: !(Maybe Text)
-    , _giInvitationId        :: !(Maybe Text)
-    , _giInvitedEmailAddress :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'GuardianInvitation' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'giCreationTime'
---
--- * 'giStudentId'
---
--- * 'giState'
---
--- * 'giInvitationId'
---
--- * 'giInvitedEmailAddress'
-guardianInvitation
-    :: GuardianInvitation
-guardianInvitation =
-    GuardianInvitation'
-    { _giCreationTime = Nothing
-    , _giStudentId = Nothing
-    , _giState = Nothing
-    , _giInvitationId = Nothing
-    , _giInvitedEmailAddress = Nothing
-    }
-
--- | The time that this invitation was created. Read-only.
-giCreationTime :: Lens' GuardianInvitation (Maybe Text)
-giCreationTime
-  = lens _giCreationTime
-      (\ s a -> s{_giCreationTime = a})
-
--- | ID of the student (in standard format)
-giStudentId :: Lens' GuardianInvitation (Maybe Text)
-giStudentId
-  = lens _giStudentId (\ s a -> s{_giStudentId = a})
-
--- | The state that this invitation is in.
-giState :: Lens' GuardianInvitation (Maybe Text)
-giState = lens _giState (\ s a -> s{_giState = a})
-
--- | Unique identifier for this invitation. Read-only.
-giInvitationId :: Lens' GuardianInvitation (Maybe Text)
-giInvitationId
-  = lens _giInvitationId
-      (\ s a -> s{_giInvitationId = a})
-
--- | Email address that the invitation was sent to. This field is only
--- visible to domain administrators.
-giInvitedEmailAddress :: Lens' GuardianInvitation (Maybe Text)
-giInvitedEmailAddress
-  = lens _giInvitedEmailAddress
-      (\ s a -> s{_giInvitedEmailAddress = a})
-
-instance FromJSON GuardianInvitation where
-        parseJSON
-          = withObject "GuardianInvitation"
-              (\ o ->
-                 GuardianInvitation' <$>
-                   (o .:? "creationTime") <*> (o .:? "studentId") <*>
-                     (o .:? "state")
-                     <*> (o .:? "invitationId")
-                     <*> (o .:? "invitedEmailAddress"))
-
-instance ToJSON GuardianInvitation where
-        toJSON GuardianInvitation'{..}
-          = object
-              (catMaybes
-                 [("creationTime" .=) <$> _giCreationTime,
-                  ("studentId" .=) <$> _giStudentId,
-                  ("state" .=) <$> _giState,
-                  ("invitationId" .=) <$> _giInvitationId,
-                  ("invitedEmailAddress" .=) <$>
-                    _giInvitedEmailAddress])
-
--- | 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 STUDENT_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 always 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. A student submission may not have more than 20
--- attachments. Form attachments are not supported.
-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, setting the
--- \`form\` field is not supported.
---
--- /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. On creation, will be upgraded to a more appropriate type
--- if possible, and this will be reflected in the response.
-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])
-
--- | Association between a student and a guardian of that student. The
--- guardian may receive information about the student\'s course work.
---
--- /See:/ 'guardian' smart constructor.
-data Guardian = Guardian'
-    { _gStudentId           :: !(Maybe Text)
-    , _gGuardianId          :: !(Maybe Text)
-    , _gInvitedEmailAddress :: !(Maybe Text)
-    , _gGuardianProFile     :: !(Maybe UserProFile)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'Guardian' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'gStudentId'
---
--- * 'gGuardianId'
---
--- * 'gInvitedEmailAddress'
---
--- * 'gGuardianProFile'
-guardian
-    :: Guardian
-guardian =
-    Guardian'
-    { _gStudentId = Nothing
-    , _gGuardianId = Nothing
-    , _gInvitedEmailAddress = Nothing
-    , _gGuardianProFile = Nothing
-    }
-
--- | Identifier for the student to whom the guardian relationship applies.
-gStudentId :: Lens' Guardian (Maybe Text)
-gStudentId
-  = lens _gStudentId (\ s a -> s{_gStudentId = a})
-
--- | Identifier for the guardian.
-gGuardianId :: Lens' Guardian (Maybe Text)
-gGuardianId
-  = lens _gGuardianId (\ s a -> s{_gGuardianId = a})
-
--- | The email address to which the initial guardian invitation was sent.
--- This field is only visible to domain administrators.
-gInvitedEmailAddress :: Lens' Guardian (Maybe Text)
-gInvitedEmailAddress
-  = lens _gInvitedEmailAddress
-      (\ s a -> s{_gInvitedEmailAddress = a})
-
--- | User profile for the guardian.
-gGuardianProFile :: Lens' Guardian (Maybe UserProFile)
-gGuardianProFile
-  = lens _gGuardianProFile
-      (\ s a -> s{_gGuardianProFile = a})
-
-instance FromJSON Guardian where
-        parseJSON
-          = withObject "Guardian"
-              (\ o ->
-                 Guardian' <$>
-                   (o .:? "studentId") <*> (o .:? "guardianId") <*>
-                     (o .:? "invitedEmailAddress")
-                     <*> (o .:? "guardianProfile"))
-
-instance ToJSON Guardian where
-        toJSON Guardian'{..}
-          = object
-              (catMaybes
-                 [("studentId" .=) <$> _gStudentId,
-                  ("guardianId" .=) <$> _gGuardianId,
-                  ("invitedEmailAddress" .=) <$> _gInvitedEmailAddress,
-                  ("guardianProfile" .=) <$> _gGuardianProFile])
-
--- | 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,
--- setting the \`form\` field is not supported.
---
--- /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 MULTIPLE_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 a non-negative
--- 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 a
--- non-negative 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])
-
--- | Response when listing guardians.
---
--- /See:/ 'listGuardiansResponse' smart constructor.
-data ListGuardiansResponse = ListGuardiansResponse'
-    { _lgrNextPageToken :: !(Maybe Text)
-    , _lgrGuardians     :: !(Maybe [Guardian])
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'ListGuardiansResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'lgrNextPageToken'
---
--- * 'lgrGuardians'
-listGuardiansResponse
-    :: ListGuardiansResponse
-listGuardiansResponse =
-    ListGuardiansResponse'
-    { _lgrNextPageToken = Nothing
-    , _lgrGuardians = Nothing
-    }
-
--- | Token identifying the next page of results to return. If empty, no
--- further results are available.
-lgrNextPageToken :: Lens' ListGuardiansResponse (Maybe Text)
-lgrNextPageToken
-  = lens _lgrNextPageToken
-      (\ s a -> s{_lgrNextPageToken = a})
-
--- | Guardians on this page of results that met the criteria specified in the
--- request.
-lgrGuardians :: Lens' ListGuardiansResponse [Guardian]
-lgrGuardians
-  = lens _lgrGuardians (\ s a -> s{_lgrGuardians = a})
-      . _Default
-      . _Coerce
-
-instance FromJSON ListGuardiansResponse where
-        parseJSON
-          = withObject "ListGuardiansResponse"
-              (\ o ->
-                 ListGuardiansResponse' <$>
-                   (o .:? "nextPageToken") <*>
-                     (o .:? "guardians" .!= mempty))
-
-instance ToJSON ListGuardiansResponse where
-        toJSON ListGuardiansResponse'{..}
-          = object
-              (catMaybes
-                 [("nextPageToken" .=) <$> _lgrNextPageToken,
-                  ("guardians" .=) <$> _lgrGuardians])
-
--- | 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)
-    , _cGuardiansEnabled   :: !(Maybe Bool)
-    , _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'
---
--- * 'cGuardiansEnabled'
---
--- * '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
-    , _cGuardiansEnabled = 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})
-
--- | Whether or not guardian notifications are enabled for this course.
--- Read-only.
-cGuardiansEnabled :: Lens' Course (Maybe Bool)
-cGuardiansEnabled
-  = lens _cGuardiansEnabled
-      (\ s a -> s{_cGuardiansEnabled = 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 .:? "guardiansEnabled")
-                     <*> (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,
-                  ("guardiansEnabled" .=) <$> _cGuardiansEnabled,
-                  ("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])
-
--- | Response when listing guardian invitations.
---
--- /See:/ 'listGuardianInvitationsResponse' smart constructor.
-data ListGuardianInvitationsResponse = ListGuardianInvitationsResponse'
-    { _lgirNextPageToken       :: !(Maybe Text)
-    , _lgirGuardianInvitations :: !(Maybe [GuardianInvitation])
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'ListGuardianInvitationsResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'lgirNextPageToken'
---
--- * 'lgirGuardianInvitations'
-listGuardianInvitationsResponse
-    :: ListGuardianInvitationsResponse
-listGuardianInvitationsResponse =
-    ListGuardianInvitationsResponse'
-    { _lgirNextPageToken = Nothing
-    , _lgirGuardianInvitations = Nothing
-    }
-
--- | Token identifying the next page of results to return. If empty, no
--- further results are available.
-lgirNextPageToken :: Lens' ListGuardianInvitationsResponse (Maybe Text)
-lgirNextPageToken
-  = lens _lgirNextPageToken
-      (\ s a -> s{_lgirNextPageToken = a})
-
--- | Guardian invitations that matched the list request.
-lgirGuardianInvitations :: Lens' ListGuardianInvitationsResponse [GuardianInvitation]
-lgirGuardianInvitations
-  = lens _lgirGuardianInvitations
-      (\ s a -> s{_lgirGuardianInvitations = a})
-      . _Default
-      . _Coerce
-
-instance FromJSON ListGuardianInvitationsResponse
-         where
-        parseJSON
-          = withObject "ListGuardianInvitationsResponse"
-              (\ o ->
-                 ListGuardianInvitationsResponse' <$>
-                   (o .:? "nextPageToken") <*>
-                     (o .:? "guardianInvitations" .!= mempty))
-
-instance ToJSON ListGuardianInvitationsResponse where
-        toJSON ListGuardianInvitationsResponse'{..}
-          = object
-              (catMaybes
-                 [("nextPageToken" .=) <$> _lgirNextPageToken,
-                  ("guardianInvitations" .=) <$>
-                    _lgirGuardianInvitations])
-
--- | 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])
+    { _cwCreationTime               :: !(Maybe DateTime')
+    , _cwScheduledTime              :: !(Maybe DateTime')
+    , _cwState                      :: !(Maybe CourseWorkState)
+    , _cwAssigneeMode               :: !(Maybe CourseWorkAssigneeMode)
+    , _cwMaterials                  :: !(Maybe [Material])
+    , _cwCourseId                   :: !(Maybe Text)
+    , _cwIndividualStudentsOptions  :: !(Maybe IndividualStudentsOptions)
+    , _cwMaxPoints                  :: !(Maybe (Textual Double))
+    , _cwWorkType                   :: !(Maybe CourseWorkWorkType)
+    , _cwDueTime                    :: !(Maybe TimeOfDay')
+    , _cwAssociatedWithDeveloper    :: !(Maybe Bool)
+    , _cwUpdateTime                 :: !(Maybe DateTime')
+    , _cwMultipleChoiceQuestion     :: !(Maybe MultipleChoiceQuestion)
+    , _cwId                         :: !(Maybe Text)
+    , _cwSubmissionModificationMode :: !(Maybe CourseWorkSubmissionModificationMode)
+    , _cwDueDate                    :: !(Maybe Date)
+    , _cwCreatorUserId              :: !(Maybe Text)
+    , _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'
+--
+-- * 'cwScheduledTime'
+--
+-- * 'cwState'
+--
+-- * 'cwAssigneeMode'
+--
+-- * 'cwMaterials'
+--
+-- * 'cwCourseId'
+--
+-- * 'cwIndividualStudentsOptions'
+--
+-- * 'cwMaxPoints'
+--
+-- * 'cwWorkType'
+--
+-- * 'cwDueTime'
+--
+-- * 'cwAssociatedWithDeveloper'
+--
+-- * 'cwUpdateTime'
+--
+-- * 'cwMultipleChoiceQuestion'
+--
+-- * 'cwId'
+--
+-- * 'cwSubmissionModificationMode'
+--
+-- * 'cwDueDate'
+--
+-- * 'cwCreatorUserId'
+--
+-- * 'cwTitle'
+--
+-- * 'cwAlternateLink'
+--
+-- * 'cwAssignment'
+--
+-- * 'cwDescription'
+courseWork
+    :: CourseWork
+courseWork =
+    CourseWork'
+    { _cwCreationTime = Nothing
+    , _cwScheduledTime = Nothing
+    , _cwState = Nothing
+    , _cwAssigneeMode = Nothing
+    , _cwMaterials = Nothing
+    , _cwCourseId = Nothing
+    , _cwIndividualStudentsOptions = Nothing
+    , _cwMaxPoints = Nothing
+    , _cwWorkType = Nothing
+    , _cwDueTime = Nothing
+    , _cwAssociatedWithDeveloper = Nothing
+    , _cwUpdateTime = Nothing
+    , _cwMultipleChoiceQuestion = Nothing
+    , _cwId = Nothing
+    , _cwSubmissionModificationMode = Nothing
+    , _cwDueDate = Nothing
+    , _cwCreatorUserId = Nothing
+    , _cwTitle = Nothing
+    , _cwAlternateLink = Nothing
+    , _cwAssignment = Nothing
+    , _cwDescription = Nothing
+    }
+
+-- | Timestamp when this course work was created. Read-only.
+cwCreationTime :: Lens' CourseWork (Maybe UTCTime)
+cwCreationTime
+  = lens _cwCreationTime
+      (\ s a -> s{_cwCreationTime = a})
+      . mapping _DateTime
+
+-- | Optional timestamp when this course work is scheduled to be published.
+cwScheduledTime :: Lens' CourseWork (Maybe UTCTime)
+cwScheduledTime
+  = lens _cwScheduledTime
+      (\ s a -> s{_cwScheduledTime = a})
+      . mapping _DateTime
+
+-- | Status of this course work. If unspecified, the default state is
+-- \`DRAFT\`.
+cwState :: Lens' CourseWork (Maybe CourseWorkState)
+cwState = lens _cwState (\ s a -> s{_cwState = a})
+
+-- | Assignee mode of the coursework. If unspecified, the default value is
+-- \`ALL_STUDENTS\`.
+cwAssigneeMode :: Lens' CourseWork (Maybe CourseWorkAssigneeMode)
+cwAssigneeMode
+  = lens _cwAssigneeMode
+      (\ s a -> s{_cwAssigneeMode = a})
+
+-- | Additional materials. CourseWork must have no more than 20 material
+-- items.
+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})
+
+-- | Identifiers of students with access to the coursework. This field is set
+-- only if \`assigneeMode\` is \`INDIVIDUAL_STUDENTS\`. If the
+-- \`assigneeMode\` is \`INDIVIDUAL_STUDENTS\`, then only students
+-- specified in this field will be assigned the coursework.
+cwIndividualStudentsOptions :: Lens' CourseWork (Maybe IndividualStudentsOptions)
+cwIndividualStudentsOptions
+  = lens _cwIndividualStudentsOptions
+      (\ s a -> s{_cwIndividualStudentsOptions = a})
+
+-- | Maximum grade for this course work. If zero or unspecified, this
+-- assignment is considered ungraded. This must be a non-negative 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.
+cwWorkType :: Lens' CourseWork (Maybe CourseWorkWorkType)
+cwWorkType
+  = lens _cwWorkType (\ s a -> s{_cwWorkType = a})
+
+-- | Optional time of day, in UTC, that submissions for 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 UTCTime)
+cwUpdateTime
+  = lens _cwUpdateTime (\ s a -> s{_cwUpdateTime = a})
+      . mapping _DateTime
+
+-- | Multiple choice question details. For read operations, this field is
+-- populated only when \`work_type\` is \`MULTIPLE_CHOICE_QUESTION\`. For
+-- write operations, this field must be specified when creating course work
+-- with a \`work_type\` of \`MULTIPLE_CHOICE_QUESTION\`, and it must not be
+-- set otherwise.
+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 CourseWorkSubmissionModificationMode)
+cwSubmissionModificationMode
+  = lens _cwSubmissionModificationMode
+      (\ s a -> s{_cwSubmissionModificationMode = a})
+
+-- | Optional date, in UTC, that submissions for 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})
+
+-- | Identifier for the user that created the coursework. Read-only.
+cwCreatorUserId :: Lens' CourseWork (Maybe Text)
+cwCreatorUserId
+  = lens _cwCreatorUserId
+      (\ s a -> s{_cwCreatorUserId = 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\`. Read-only.
+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 .:? "scheduledTime")
+                     <*> (o .:? "state")
+                     <*> (o .:? "assigneeMode")
+                     <*> (o .:? "materials" .!= mempty)
+                     <*> (o .:? "courseId")
+                     <*> (o .:? "individualStudentsOptions")
+                     <*> (o .:? "maxPoints")
+                     <*> (o .:? "workType")
+                     <*> (o .:? "dueTime")
+                     <*> (o .:? "associatedWithDeveloper")
+                     <*> (o .:? "updateTime")
+                     <*> (o .:? "multipleChoiceQuestion")
+                     <*> (o .:? "id")
+                     <*> (o .:? "submissionModificationMode")
+                     <*> (o .:? "dueDate")
+                     <*> (o .:? "creatorUserId")
+                     <*> (o .:? "title")
+                     <*> (o .:? "alternateLink")
+                     <*> (o .:? "assignment")
+                     <*> (o .:? "description"))
+
+instance ToJSON CourseWork where
+        toJSON CourseWork'{..}
+          = object
+              (catMaybes
+                 [("creationTime" .=) <$> _cwCreationTime,
+                  ("scheduledTime" .=) <$> _cwScheduledTime,
+                  ("state" .=) <$> _cwState,
+                  ("assigneeMode" .=) <$> _cwAssigneeMode,
+                  ("materials" .=) <$> _cwMaterials,
+                  ("courseId" .=) <$> _cwCourseId,
+                  ("individualStudentsOptions" .=) <$>
+                    _cwIndividualStudentsOptions,
+                  ("maxPoints" .=) <$> _cwMaxPoints,
+                  ("workType" .=) <$> _cwWorkType,
+                  ("dueTime" .=) <$> _cwDueTime,
+                  ("associatedWithDeveloper" .=) <$>
+                    _cwAssociatedWithDeveloper,
+                  ("updateTime" .=) <$> _cwUpdateTime,
+                  ("multipleChoiceQuestion" .=) <$>
+                    _cwMultipleChoiceQuestion,
+                  ("id" .=) <$> _cwId,
+                  ("submissionModificationMode" .=) <$>
+                    _cwSubmissionModificationMode,
+                  ("dueDate" .=) <$> _cwDueDate,
+                  ("creatorUserId" .=) <$> _cwCreatorUserId,
+                  ("title" .=) <$> _cwTitle,
+                  ("alternateLink" .=) <$> _cwAlternateLink,
+                  ("assignment" .=) <$> _cwAssignment,
+                  ("description" .=) <$> _cwDescription])
+
+-- | The history of each grade on this submission.
+--
+-- /See:/ 'gradeHistory' smart constructor.
+data GradeHistory = GradeHistory'
+    { _ghGradeTimestamp  :: !(Maybe DateTime')
+    , _ghMaxPoints       :: !(Maybe (Textual Double))
+    , _ghPointsEarned    :: !(Maybe (Textual Double))
+    , _ghActorUserId     :: !(Maybe Text)
+    , _ghGradeChangeType :: !(Maybe GradeHistoryGradeChangeType)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'GradeHistory' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ghGradeTimestamp'
+--
+-- * 'ghMaxPoints'
+--
+-- * 'ghPointsEarned'
+--
+-- * 'ghActorUserId'
+--
+-- * 'ghGradeChangeType'
+gradeHistory
+    :: GradeHistory
+gradeHistory =
+    GradeHistory'
+    { _ghGradeTimestamp = Nothing
+    , _ghMaxPoints = Nothing
+    , _ghPointsEarned = Nothing
+    , _ghActorUserId = Nothing
+    , _ghGradeChangeType = Nothing
+    }
+
+-- | When the grade of the submission was changed.
+ghGradeTimestamp :: Lens' GradeHistory (Maybe UTCTime)
+ghGradeTimestamp
+  = lens _ghGradeTimestamp
+      (\ s a -> s{_ghGradeTimestamp = a})
+      . mapping _DateTime
+
+-- | The denominator of the grade at this time in the submission grade
+-- history.
+ghMaxPoints :: Lens' GradeHistory (Maybe Double)
+ghMaxPoints
+  = lens _ghMaxPoints (\ s a -> s{_ghMaxPoints = a}) .
+      mapping _Coerce
+
+-- | The numerator of the grade at this time in the submission grade history.
+ghPointsEarned :: Lens' GradeHistory (Maybe Double)
+ghPointsEarned
+  = lens _ghPointsEarned
+      (\ s a -> s{_ghPointsEarned = a})
+      . mapping _Coerce
+
+-- | The teacher who made the grade change.
+ghActorUserId :: Lens' GradeHistory (Maybe Text)
+ghActorUserId
+  = lens _ghActorUserId
+      (\ s a -> s{_ghActorUserId = a})
+
+-- | The type of grade change at this time in the submission grade history.
+ghGradeChangeType :: Lens' GradeHistory (Maybe GradeHistoryGradeChangeType)
+ghGradeChangeType
+  = lens _ghGradeChangeType
+      (\ s a -> s{_ghGradeChangeType = a})
+
+instance FromJSON GradeHistory where
+        parseJSON
+          = withObject "GradeHistory"
+              (\ o ->
+                 GradeHistory' <$>
+                   (o .:? "gradeTimestamp") <*> (o .:? "maxPoints") <*>
+                     (o .:? "pointsEarned")
+                     <*> (o .:? "actorUserId")
+                     <*> (o .:? "gradeChangeType"))
+
+instance ToJSON GradeHistory where
+        toJSON GradeHistory'{..}
+          = object
+              (catMaybes
+                 [("gradeTimestamp" .=) <$> _ghGradeTimestamp,
+                  ("maxPoints" .=) <$> _ghMaxPoints,
+                  ("pointsEarned" .=) <$> _ghPointsEarned,
+                  ("actorUserId" .=) <$> _ghActorUserId,
+                  ("gradeChangeType" .=) <$> _ghGradeChangeType])
+
+-- | Information about a \`Feed\` with a \`feed_type\` of
+-- \`COURSE_WORK_CHANGES\`.
+--
+-- /See:/ 'courseWorkChangesInfo' smart constructor.
+newtype CourseWorkChangesInfo = CourseWorkChangesInfo'
+    { _cwciCourseId :: Maybe Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CourseWorkChangesInfo' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cwciCourseId'
+courseWorkChangesInfo
+    :: CourseWorkChangesInfo
+courseWorkChangesInfo =
+    CourseWorkChangesInfo'
+    { _cwciCourseId = Nothing
+    }
+
+-- | The \`course_id\` of the course to subscribe to work changes for.
+cwciCourseId :: Lens' CourseWorkChangesInfo (Maybe Text)
+cwciCourseId
+  = lens _cwciCourseId (\ s a -> s{_cwciCourseId = a})
+
+instance FromJSON CourseWorkChangesInfo where
+        parseJSON
+          = withObject "CourseWorkChangesInfo"
+              (\ o ->
+                 CourseWorkChangesInfo' <$> (o .:? "courseId"))
+
+instance ToJSON CourseWorkChangesInfo where
+        toJSON CourseWorkChangesInfo'{..}
+          = object
+              (catMaybes [("courseId" .=) <$> _cwciCourseId])
+
+-- | Request to modify assignee mode and options of a coursework.
+--
+-- /See:/ 'modifyCourseWorkAssigneesRequest' smart constructor.
+data ModifyCourseWorkAssigneesRequest = ModifyCourseWorkAssigneesRequest'
+    { _mcwarAssigneeMode                    :: !(Maybe ModifyCourseWorkAssigneesRequestAssigneeMode)
+    , _mcwarModifyIndividualStudentsOptions :: !(Maybe ModifyIndividualStudentsOptions)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ModifyCourseWorkAssigneesRequest' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'mcwarAssigneeMode'
+--
+-- * 'mcwarModifyIndividualStudentsOptions'
+modifyCourseWorkAssigneesRequest
+    :: ModifyCourseWorkAssigneesRequest
+modifyCourseWorkAssigneesRequest =
+    ModifyCourseWorkAssigneesRequest'
+    { _mcwarAssigneeMode = Nothing
+    , _mcwarModifyIndividualStudentsOptions = Nothing
+    }
+
+-- | Mode of the coursework describing whether it will be assigned to all
+-- students or specified individual students.
+mcwarAssigneeMode :: Lens' ModifyCourseWorkAssigneesRequest (Maybe ModifyCourseWorkAssigneesRequestAssigneeMode)
+mcwarAssigneeMode
+  = lens _mcwarAssigneeMode
+      (\ s a -> s{_mcwarAssigneeMode = a})
+
+-- | Set which students are assigned or not assigned to the coursework. Must
+-- be specified only when \`assigneeMode\` is \`INDIVIDUAL_STUDENTS\`.
+mcwarModifyIndividualStudentsOptions :: Lens' ModifyCourseWorkAssigneesRequest (Maybe ModifyIndividualStudentsOptions)
+mcwarModifyIndividualStudentsOptions
+  = lens _mcwarModifyIndividualStudentsOptions
+      (\ s a ->
+         s{_mcwarModifyIndividualStudentsOptions = a})
+
+instance FromJSON ModifyCourseWorkAssigneesRequest
+         where
+        parseJSON
+          = withObject "ModifyCourseWorkAssigneesRequest"
+              (\ o ->
+                 ModifyCourseWorkAssigneesRequest' <$>
+                   (o .:? "assigneeMode") <*>
+                     (o .:? "modifyIndividualStudentsOptions"))
+
+instance ToJSON ModifyCourseWorkAssigneesRequest
+         where
+        toJSON ModifyCourseWorkAssigneesRequest'{..}
+          = object
+              (catMaybes
+                 [("assigneeMode" .=) <$> _mcwarAssigneeMode,
+                  ("modifyIndividualStudentsOptions" .=) <$>
+                    _mcwarModifyIndividualStudentsOptions])
+
+-- | 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])
+
+-- | An invitation to become the guardian of a specified user, sent to a
+-- specified email address.
+--
+-- /See:/ 'guardianInvitation' smart constructor.
+data GuardianInvitation = GuardianInvitation'
+    { _giCreationTime        :: !(Maybe DateTime')
+    , _giStudentId           :: !(Maybe Text)
+    , _giState               :: !(Maybe GuardianInvitationState)
+    , _giInvitationId        :: !(Maybe Text)
+    , _giInvitedEmailAddress :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'GuardianInvitation' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'giCreationTime'
+--
+-- * 'giStudentId'
+--
+-- * 'giState'
+--
+-- * 'giInvitationId'
+--
+-- * 'giInvitedEmailAddress'
+guardianInvitation
+    :: GuardianInvitation
+guardianInvitation =
+    GuardianInvitation'
+    { _giCreationTime = Nothing
+    , _giStudentId = Nothing
+    , _giState = Nothing
+    , _giInvitationId = Nothing
+    , _giInvitedEmailAddress = Nothing
+    }
+
+-- | The time that this invitation was created. Read-only.
+giCreationTime :: Lens' GuardianInvitation (Maybe UTCTime)
+giCreationTime
+  = lens _giCreationTime
+      (\ s a -> s{_giCreationTime = a})
+      . mapping _DateTime
+
+-- | ID of the student (in standard format)
+giStudentId :: Lens' GuardianInvitation (Maybe Text)
+giStudentId
+  = lens _giStudentId (\ s a -> s{_giStudentId = a})
+
+-- | The state that this invitation is in.
+giState :: Lens' GuardianInvitation (Maybe GuardianInvitationState)
+giState = lens _giState (\ s a -> s{_giState = a})
+
+-- | Unique identifier for this invitation. Read-only.
+giInvitationId :: Lens' GuardianInvitation (Maybe Text)
+giInvitationId
+  = lens _giInvitationId
+      (\ s a -> s{_giInvitationId = a})
+
+-- | Email address that the invitation was sent to. This field is only
+-- visible to domain administrators.
+giInvitedEmailAddress :: Lens' GuardianInvitation (Maybe Text)
+giInvitedEmailAddress
+  = lens _giInvitedEmailAddress
+      (\ s a -> s{_giInvitedEmailAddress = a})
+
+instance FromJSON GuardianInvitation where
+        parseJSON
+          = withObject "GuardianInvitation"
+              (\ o ->
+                 GuardianInvitation' <$>
+                   (o .:? "creationTime") <*> (o .:? "studentId") <*>
+                     (o .:? "state")
+                     <*> (o .:? "invitationId")
+                     <*> (o .:? "invitedEmailAddress"))
+
+instance ToJSON GuardianInvitation where
+        toJSON GuardianInvitation'{..}
+          = object
+              (catMaybes
+                 [("creationTime" .=) <$> _giCreationTime,
+                  ("studentId" .=) <$> _giStudentId,
+                  ("state" .=) <$> _giState,
+                  ("invitationId" .=) <$> _giInvitationId,
+                  ("invitedEmailAddress" .=) <$>
+                    _giInvitedEmailAddress])
+
+-- | A class of notifications that an application can register to receive.
+-- For example: \"all roster changes for a domain\".
+--
+-- /See:/ 'feed' smart constructor.
+data Feed = Feed'
+    { _fCourseWorkChangesInfo   :: !(Maybe CourseWorkChangesInfo)
+    , _fFeedType                :: !(Maybe FeedFeedType)
+    , _fCourseRosterChangesInfo :: !(Maybe CourseRosterChangesInfo)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Feed' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'fCourseWorkChangesInfo'
+--
+-- * 'fFeedType'
+--
+-- * 'fCourseRosterChangesInfo'
+feed
+    :: Feed
+feed =
+    Feed'
+    { _fCourseWorkChangesInfo = Nothing
+    , _fFeedType = Nothing
+    , _fCourseRosterChangesInfo = Nothing
+    }
+
+-- | Information about a \`Feed\` with a \`feed_type\` of
+-- \`COURSE_WORK_CHANGES\`. This field must be specified if \`feed_type\`
+-- is \`COURSE_WORK_CHANGES\`.
+fCourseWorkChangesInfo :: Lens' Feed (Maybe CourseWorkChangesInfo)
+fCourseWorkChangesInfo
+  = lens _fCourseWorkChangesInfo
+      (\ s a -> s{_fCourseWorkChangesInfo = a})
+
+-- | The type of feed.
+fFeedType :: Lens' Feed (Maybe FeedFeedType)
+fFeedType
+  = lens _fFeedType (\ s a -> s{_fFeedType = a})
+
+-- | Information about a \`Feed\` with a \`feed_type\` of
+-- \`COURSE_ROSTER_CHANGES\`. This field must be specified if \`feed_type\`
+-- is \`COURSE_ROSTER_CHANGES\`.
+fCourseRosterChangesInfo :: Lens' Feed (Maybe CourseRosterChangesInfo)
+fCourseRosterChangesInfo
+  = lens _fCourseRosterChangesInfo
+      (\ s a -> s{_fCourseRosterChangesInfo = a})
+
+instance FromJSON Feed where
+        parseJSON
+          = withObject "Feed"
+              (\ o ->
+                 Feed' <$>
+                   (o .:? "courseWorkChangesInfo") <*>
+                     (o .:? "feedType")
+                     <*> (o .:? "courseRosterChangesInfo"))
+
+instance ToJSON Feed where
+        toJSON Feed'{..}
+          = object
+              (catMaybes
+                 [("courseWorkChangesInfo" .=) <$>
+                    _fCourseWorkChangesInfo,
+                  ("feedType" .=) <$> _fFeedType,
+                  ("courseRosterChangesInfo" .=) <$>
+                    _fCourseRosterChangesInfo])
+
+-- | Request to modify assignee mode and options of an announcement.
+--
+-- /See:/ 'modifyAnnouncementAssigneesRequest' smart constructor.
+data ModifyAnnouncementAssigneesRequest = ModifyAnnouncementAssigneesRequest'
+    { _maarAssigneeMode                    :: !(Maybe ModifyAnnouncementAssigneesRequestAssigneeMode)
+    , _maarModifyIndividualStudentsOptions :: !(Maybe ModifyIndividualStudentsOptions)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ModifyAnnouncementAssigneesRequest' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'maarAssigneeMode'
+--
+-- * 'maarModifyIndividualStudentsOptions'
+modifyAnnouncementAssigneesRequest
+    :: ModifyAnnouncementAssigneesRequest
+modifyAnnouncementAssigneesRequest =
+    ModifyAnnouncementAssigneesRequest'
+    { _maarAssigneeMode = Nothing
+    , _maarModifyIndividualStudentsOptions = Nothing
+    }
+
+-- | Mode of the announcement describing whether it will be accessible by all
+-- students or specified individual students.
+maarAssigneeMode :: Lens' ModifyAnnouncementAssigneesRequest (Maybe ModifyAnnouncementAssigneesRequestAssigneeMode)
+maarAssigneeMode
+  = lens _maarAssigneeMode
+      (\ s a -> s{_maarAssigneeMode = a})
+
+-- | Set which students can view or cannot view the announcement. Must be
+-- specified only when \`assigneeMode\` is \`INDIVIDUAL_STUDENTS\`.
+maarModifyIndividualStudentsOptions :: Lens' ModifyAnnouncementAssigneesRequest (Maybe ModifyIndividualStudentsOptions)
+maarModifyIndividualStudentsOptions
+  = lens _maarModifyIndividualStudentsOptions
+      (\ s a ->
+         s{_maarModifyIndividualStudentsOptions = a})
+
+instance FromJSON ModifyAnnouncementAssigneesRequest
+         where
+        parseJSON
+          = withObject "ModifyAnnouncementAssigneesRequest"
+              (\ o ->
+                 ModifyAnnouncementAssigneesRequest' <$>
+                   (o .:? "assigneeMode") <*>
+                     (o .:? "modifyIndividualStudentsOptions"))
+
+instance ToJSON ModifyAnnouncementAssigneesRequest
+         where
+        toJSON ModifyAnnouncementAssigneesRequest'{..}
+          = object
+              (catMaybes
+                 [("assigneeMode" .=) <$> _maarAssigneeMode,
+                  ("modifyIndividualStudentsOptions" .=) <$>
+                    _maarModifyIndividualStudentsOptions])
+
+-- | 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 GlobalPermissionPermission
+    } 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 GlobalPermissionPermission)
+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])
+
+-- | Assignee details about a coursework\/announcement. This field is set if
+-- and only if \`assigneeMode\` is \`INDIVIDUAL_STUDENTS\`.
+--
+-- /See:/ 'individualStudentsOptions' smart constructor.
+newtype IndividualStudentsOptions = IndividualStudentsOptions'
+    { _isoStudentIds :: Maybe [Text]
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'IndividualStudentsOptions' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'isoStudentIds'
+individualStudentsOptions
+    :: IndividualStudentsOptions
+individualStudentsOptions =
+    IndividualStudentsOptions'
+    { _isoStudentIds = Nothing
+    }
+
+-- | Identifiers for the students that have access to the
+-- coursework\/announcement.
+isoStudentIds :: Lens' IndividualStudentsOptions [Text]
+isoStudentIds
+  = lens _isoStudentIds
+      (\ s a -> s{_isoStudentIds = a})
+      . _Default
+      . _Coerce
+
+instance FromJSON IndividualStudentsOptions where
+        parseJSON
+          = withObject "IndividualStudentsOptions"
+              (\ o ->
+                 IndividualStudentsOptions' <$>
+                   (o .:? "studentIds" .!= mempty))
+
+instance ToJSON IndividualStudentsOptions where
+        toJSON IndividualStudentsOptions'{..}
+          = object
+              (catMaybes [("studentIds" .=) <$> _isoStudentIds])
+
+-- | 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 STUDENT_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 always 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. A student submission may not have more than 20
+-- attachments. Form attachments are not supported.
+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 course work.
+--
+-- /See:/ 'listAnnouncementsResponse' smart constructor.
+data ListAnnouncementsResponse = ListAnnouncementsResponse'
+    { _larNextPageToken :: !(Maybe Text)
+    , _larAnnouncements :: !(Maybe [Announcement])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ListAnnouncementsResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'larNextPageToken'
+--
+-- * 'larAnnouncements'
+listAnnouncementsResponse
+    :: ListAnnouncementsResponse
+listAnnouncementsResponse =
+    ListAnnouncementsResponse'
+    { _larNextPageToken = Nothing
+    , _larAnnouncements = Nothing
+    }
+
+-- | Token identifying the next page of results to return. If empty, no
+-- further results are available.
+larNextPageToken :: Lens' ListAnnouncementsResponse (Maybe Text)
+larNextPageToken
+  = lens _larNextPageToken
+      (\ s a -> s{_larNextPageToken = a})
+
+-- | Announcement items that match the request.
+larAnnouncements :: Lens' ListAnnouncementsResponse [Announcement]
+larAnnouncements
+  = lens _larAnnouncements
+      (\ s a -> s{_larAnnouncements = a})
+      . _Default
+      . _Coerce
+
+instance FromJSON ListAnnouncementsResponse where
+        parseJSON
+          = withObject "ListAnnouncementsResponse"
+              (\ o ->
+                 ListAnnouncementsResponse' <$>
+                   (o .:? "nextPageToken") <*>
+                     (o .:? "announcements" .!= mempty))
+
+instance ToJSON ListAnnouncementsResponse where
+        toJSON ListAnnouncementsResponse'{..}
+          = object
+              (catMaybes
+                 [("nextPageToken" .=) <$> _larNextPageToken,
+                  ("announcements" .=) <$> _larAnnouncements])
+
+-- | 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, setting the
+-- \`form\` field is not supported.
+--
+-- /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. On creation, will be upgraded to a more appropriate type
+-- if possible, and this will be reflected in the response.
+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])
+
+-- | Association between a student and a guardian of that student. The
+-- guardian may receive information about the student\'s course work.
+--
+-- /See:/ 'guardian' smart constructor.
+data Guardian = Guardian'
+    { _gStudentId           :: !(Maybe Text)
+    , _gGuardianId          :: !(Maybe Text)
+    , _gInvitedEmailAddress :: !(Maybe Text)
+    , _gGuardianProFile     :: !(Maybe UserProFile)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Guardian' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gStudentId'
+--
+-- * 'gGuardianId'
+--
+-- * 'gInvitedEmailAddress'
+--
+-- * 'gGuardianProFile'
+guardian
+    :: Guardian
+guardian =
+    Guardian'
+    { _gStudentId = Nothing
+    , _gGuardianId = Nothing
+    , _gInvitedEmailAddress = Nothing
+    , _gGuardianProFile = Nothing
+    }
+
+-- | Identifier for the student to whom the guardian relationship applies.
+gStudentId :: Lens' Guardian (Maybe Text)
+gStudentId
+  = lens _gStudentId (\ s a -> s{_gStudentId = a})
+
+-- | Identifier for the guardian.
+gGuardianId :: Lens' Guardian (Maybe Text)
+gGuardianId
+  = lens _gGuardianId (\ s a -> s{_gGuardianId = a})
+
+-- | The email address to which the initial guardian invitation was sent.
+-- This field is only visible to domain administrators.
+gInvitedEmailAddress :: Lens' Guardian (Maybe Text)
+gInvitedEmailAddress
+  = lens _gInvitedEmailAddress
+      (\ s a -> s{_gInvitedEmailAddress = a})
+
+-- | User profile for the guardian.
+gGuardianProFile :: Lens' Guardian (Maybe UserProFile)
+gGuardianProFile
+  = lens _gGuardianProFile
+      (\ s a -> s{_gGuardianProFile = a})
+
+instance FromJSON Guardian where
+        parseJSON
+          = withObject "Guardian"
+              (\ o ->
+                 Guardian' <$>
+                   (o .:? "studentId") <*> (o .:? "guardianId") <*>
+                     (o .:? "invitedEmailAddress")
+                     <*> (o .:? "guardianProfile"))
+
+instance ToJSON Guardian where
+        toJSON Guardian'{..}
+          = object
+              (catMaybes
+                 [("studentId" .=) <$> _gStudentId,
+                  ("guardianId" .=) <$> _gGuardianId,
+                  ("invitedEmailAddress" .=) <$> _gInvitedEmailAddress,
+                  ("guardianProfile" .=) <$> _gGuardianProFile])
+
+-- | 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 InvitationRole)
+    , _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 InvitationRole)
+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,
+-- setting the \`form\` field is not supported.
+--
+-- /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])
+
+-- | Announcement created by a teacher for students of the course
+--
+-- /See:/ 'announcement' smart constructor.
+data Announcement = Announcement'
+    { _aCreationTime              :: !(Maybe DateTime')
+    , _aScheduledTime             :: !(Maybe DateTime')
+    , _aState                     :: !(Maybe AnnouncementState)
+    , _aAssigneeMode              :: !(Maybe AnnouncementAssigneeMode)
+    , _aText                      :: !(Maybe Text)
+    , _aMaterials                 :: !(Maybe [Material])
+    , _aCourseId                  :: !(Maybe Text)
+    , _aIndividualStudentsOptions :: !(Maybe IndividualStudentsOptions)
+    , _aUpdateTime                :: !(Maybe DateTime')
+    , _aId                        :: !(Maybe Text)
+    , _aCreatorUserId             :: !(Maybe Text)
+    , _aAlternateLink             :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Announcement' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'aCreationTime'
+--
+-- * 'aScheduledTime'
+--
+-- * 'aState'
+--
+-- * 'aAssigneeMode'
+--
+-- * 'aText'
+--
+-- * 'aMaterials'
+--
+-- * 'aCourseId'
+--
+-- * 'aIndividualStudentsOptions'
+--
+-- * 'aUpdateTime'
+--
+-- * 'aId'
+--
+-- * 'aCreatorUserId'
+--
+-- * 'aAlternateLink'
+announcement
+    :: Announcement
+announcement =
+    Announcement'
+    { _aCreationTime = Nothing
+    , _aScheduledTime = Nothing
+    , _aState = Nothing
+    , _aAssigneeMode = Nothing
+    , _aText = Nothing
+    , _aMaterials = Nothing
+    , _aCourseId = Nothing
+    , _aIndividualStudentsOptions = Nothing
+    , _aUpdateTime = Nothing
+    , _aId = Nothing
+    , _aCreatorUserId = Nothing
+    , _aAlternateLink = Nothing
+    }
+
+-- | Timestamp when this announcement was created. Read-only.
+aCreationTime :: Lens' Announcement (Maybe UTCTime)
+aCreationTime
+  = lens _aCreationTime
+      (\ s a -> s{_aCreationTime = a})
+      . mapping _DateTime
+
+-- | Optional timestamp when this announcement is scheduled to be published.
+aScheduledTime :: Lens' Announcement (Maybe UTCTime)
+aScheduledTime
+  = lens _aScheduledTime
+      (\ s a -> s{_aScheduledTime = a})
+      . mapping _DateTime
+
+-- | Status of this announcement. If unspecified, the default state is
+-- \`DRAFT\`.
+aState :: Lens' Announcement (Maybe AnnouncementState)
+aState = lens _aState (\ s a -> s{_aState = a})
+
+-- | Assignee mode of the announcement. If unspecified, the default value is
+-- \`ALL_STUDENTS\`.
+aAssigneeMode :: Lens' Announcement (Maybe AnnouncementAssigneeMode)
+aAssigneeMode
+  = lens _aAssigneeMode
+      (\ s a -> s{_aAssigneeMode = a})
+
+-- | Description of this announcement. The text must be a valid UTF-8 string
+-- containing no more than 30,000 characters.
+aText :: Lens' Announcement (Maybe Text)
+aText = lens _aText (\ s a -> s{_aText = a})
+
+-- | Additional materials. Announcements must have no more than 20 material
+-- items.
+aMaterials :: Lens' Announcement [Material]
+aMaterials
+  = lens _aMaterials (\ s a -> s{_aMaterials = a}) .
+      _Default
+      . _Coerce
+
+-- | Identifier of the course. Read-only.
+aCourseId :: Lens' Announcement (Maybe Text)
+aCourseId
+  = lens _aCourseId (\ s a -> s{_aCourseId = a})
+
+-- | Identifiers of students with access to the announcement. This field is
+-- set only if \`assigneeMode\` is \`INDIVIDUAL_STUDENTS\`. If the
+-- \`assigneeMode\` is \`INDIVIDUAL_STUDENTS\`, then only students
+-- specified in this field will be able to see the announcement.
+aIndividualStudentsOptions :: Lens' Announcement (Maybe IndividualStudentsOptions)
+aIndividualStudentsOptions
+  = lens _aIndividualStudentsOptions
+      (\ s a -> s{_aIndividualStudentsOptions = a})
+
+-- | Timestamp of the most recent change to this announcement. Read-only.
+aUpdateTime :: Lens' Announcement (Maybe UTCTime)
+aUpdateTime
+  = lens _aUpdateTime (\ s a -> s{_aUpdateTime = a}) .
+      mapping _DateTime
+
+-- | Classroom-assigned identifier of this announcement, unique per course.
+-- Read-only.
+aId :: Lens' Announcement (Maybe Text)
+aId = lens _aId (\ s a -> s{_aId = a})
+
+-- | Identifier for the user that created the announcement. Read-only.
+aCreatorUserId :: Lens' Announcement (Maybe Text)
+aCreatorUserId
+  = lens _aCreatorUserId
+      (\ s a -> s{_aCreatorUserId = a})
+
+-- | Absolute link to this announcement in the Classroom web UI. This is only
+-- populated if \`state\` is \`PUBLISHED\`. Read-only.
+aAlternateLink :: Lens' Announcement (Maybe Text)
+aAlternateLink
+  = lens _aAlternateLink
+      (\ s a -> s{_aAlternateLink = a})
+
+instance FromJSON Announcement where
+        parseJSON
+          = withObject "Announcement"
+              (\ o ->
+                 Announcement' <$>
+                   (o .:? "creationTime") <*> (o .:? "scheduledTime")
+                     <*> (o .:? "state")
+                     <*> (o .:? "assigneeMode")
+                     <*> (o .:? "text")
+                     <*> (o .:? "materials" .!= mempty)
+                     <*> (o .:? "courseId")
+                     <*> (o .:? "individualStudentsOptions")
+                     <*> (o .:? "updateTime")
+                     <*> (o .:? "id")
+                     <*> (o .:? "creatorUserId")
+                     <*> (o .:? "alternateLink"))
+
+instance ToJSON Announcement where
+        toJSON Announcement'{..}
+          = object
+              (catMaybes
+                 [("creationTime" .=) <$> _aCreationTime,
+                  ("scheduledTime" .=) <$> _aScheduledTime,
+                  ("state" .=) <$> _aState,
+                  ("assigneeMode" .=) <$> _aAssigneeMode,
+                  ("text" .=) <$> _aText,
+                  ("materials" .=) <$> _aMaterials,
+                  ("courseId" .=) <$> _aCourseId,
+                  ("individualStudentsOptions" .=) <$>
+                    _aIndividualStudentsOptions,
+                  ("updateTime" .=) <$> _aUpdateTime,
+                  ("id" .=) <$> _aId,
+                  ("creatorUserId" .=) <$> _aCreatorUserId,
+                  ("alternateLink" .=) <$> _aAlternateLink])
+
+-- | 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 DateTime')
+    , _ssLate                     :: !(Maybe Bool)
+    , _ssState                    :: !(Maybe StudentSubmissionState)
+    , _ssCourseId                 :: !(Maybe Text)
+    , _ssMultipleChoiceSubmission :: !(Maybe MultipleChoiceSubmission)
+    , _ssAssignmentSubmission     :: !(Maybe AssignmentSubmission)
+    , _ssShortAnswerSubmission    :: !(Maybe ShortAnswerSubmission)
+    , _ssAssociatedWithDeveloper  :: !(Maybe Bool)
+    , _ssUserId                   :: !(Maybe Text)
+    , _ssUpdateTime               :: !(Maybe DateTime')
+    , _ssCourseWorkType           :: !(Maybe StudentSubmissionCourseWorkType)
+    , _ssSubmissionHistory        :: !(Maybe [SubmissionHistory])
+    , _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'
+--
+-- * 'ssSubmissionHistory'
+--
+-- * '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
+    , _ssSubmissionHistory = 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 UTCTime)
+ssCreationTime
+  = lens _ssCreationTime
+      (\ s a -> s{_ssCreationTime = a})
+      . mapping _DateTime
+
+-- | 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 StudentSubmissionState)
+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 MULTIPLE_CHOICE_QUESTION.
+ssMultipleChoiceSubmission :: Lens' StudentSubmission (Maybe MultipleChoiceSubmission)
+ssMultipleChoiceSubmission
+  = lens _ssMultipleChoiceSubmission
+      (\ s a -> s{_ssMultipleChoiceSubmission = a})
+
+-- | Submission content when course_work_type is ASSIGNMENT. Students can
+-- modify this content using google.classroom.Work.ModifyAttachments.
+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 UTCTime)
+ssUpdateTime
+  = lens _ssUpdateTime (\ s a -> s{_ssUpdateTime = a})
+      . mapping _DateTime
+
+-- | Type of course work this submission is for. Read-only.
+ssCourseWorkType :: Lens' StudentSubmission (Maybe StudentSubmissionCourseWorkType)
+ssCourseWorkType
+  = lens _ssCourseWorkType
+      (\ s a -> s{_ssCourseWorkType = a})
+
+-- | The history of the submission (includes state and grade histories).
+-- Read-only.
+ssSubmissionHistory :: Lens' StudentSubmission [SubmissionHistory]
+ssSubmissionHistory
+  = lens _ssSubmissionHistory
+      (\ s a -> s{_ssSubmissionHistory = a})
+      . _Default
+      . _Coerce
+
+-- | Optional grade. If unset, no grade was set. This value must be
+-- non-negative. Decimal (i.e. non-integer) values are allowed, but will be
+-- rounded to two decimal places. 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 value must be
+-- non-negative. Decimal (i.e. non-integer) values are allowed, but will be
+-- rounded to two decimal places. 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 .:? "submissionHistory" .!= mempty)
+                     <*> (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,
+                  ("submissionHistory" .=) <$> _ssSubmissionHistory,
+                  ("assignedGrade" .=) <$> _ssAssignedGrade,
+                  ("id" .=) <$> _ssId,
+                  ("draftGrade" .=) <$> _ssDraftGrade,
+                  ("alternateLink" .=) <$> _ssAlternateLink,
+                  ("courseWorkId" .=) <$> _ssCourseWorkId])
+
+-- | Response when listing guardians.
+--
+-- /See:/ 'listGuardiansResponse' smart constructor.
+data ListGuardiansResponse = ListGuardiansResponse'
+    { _lgrNextPageToken :: !(Maybe Text)
+    , _lgrGuardians     :: !(Maybe [Guardian])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ListGuardiansResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'lgrNextPageToken'
+--
+-- * 'lgrGuardians'
+listGuardiansResponse
+    :: ListGuardiansResponse
+listGuardiansResponse =
+    ListGuardiansResponse'
+    { _lgrNextPageToken = Nothing
+    , _lgrGuardians = Nothing
+    }
+
+-- | Token identifying the next page of results to return. If empty, no
+-- further results are available.
+lgrNextPageToken :: Lens' ListGuardiansResponse (Maybe Text)
+lgrNextPageToken
+  = lens _lgrNextPageToken
+      (\ s a -> s{_lgrNextPageToken = a})
+
+-- | Guardians on this page of results that met the criteria specified in the
+-- request.
+lgrGuardians :: Lens' ListGuardiansResponse [Guardian]
+lgrGuardians
+  = lens _lgrGuardians (\ s a -> s{_lgrGuardians = a})
+      . _Default
+      . _Coerce
+
+instance FromJSON ListGuardiansResponse where
+        parseJSON
+          = withObject "ListGuardiansResponse"
+              (\ o ->
+                 ListGuardiansResponse' <$>
+                   (o .:? "nextPageToken") <*>
+                     (o .:? "guardians" .!= mempty))
+
+instance ToJSON ListGuardiansResponse where
+        toJSON ListGuardiansResponse'{..}
+          = object
+              (catMaybes
+                 [("nextPageToken" .=) <$> _lgrNextPageToken,
+                  ("guardians" .=) <$> _lgrGuardians])
+
+-- | Represents a whole or partial calendar date, e.g. a birthday. The time
+-- of day and time zone are either specified elsewhere or are not
+-- significant. The date is relative to the Proleptic Gregorian Calendar.
+-- This can represent: * A full date, with non-zero year, month and day
+-- values * A month and day value, with a zero year, e.g. an anniversary *
+-- A year on its own, with zero month and day values * A year and month
+-- value, with a zero day, e.g. a credit card expiration 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 by itself or a year and 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, or 0 if specifying a year without a
+-- month and day.
+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)
+    , _upfVerifiedTeacher :: !(Maybe Bool)
+    , _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'
+--
+-- * 'upfVerifiedTeacher'
+--
+-- * 'upfName'
+--
+-- * 'upfEmailAddress'
+--
+-- * 'upfId'
+--
+-- * 'upfPermissions'
+userProFile
+    :: UserProFile
+userProFile =
+    UserProFile'
+    { _upfPhotoURL = Nothing
+    , _upfVerifiedTeacher = 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})
+
+-- | Represents whether a G Suite for Education user\'s domain administrator
+-- has explicitly verified them as being a teacher. If the user is not a
+-- member of a G Suite for Education domain, than this field will always be
+-- false. Read-only
+upfVerifiedTeacher :: Lens' UserProFile (Maybe Bool)
+upfVerifiedTeacher
+  = lens _upfVerifiedTeacher
+      (\ s a -> s{_upfVerifiedTeacher = 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 .:? "verifiedTeacher") <*>
+                     (o .:? "name")
+                     <*> (o .:? "emailAddress")
+                     <*> (o .:? "id")
+                     <*> (o .:? "permissions" .!= mempty))
+
+instance ToJSON UserProFile where
+        toJSON UserProFile'{..}
+          = object
+              (catMaybes
+                 [("photoUrl" .=) <$> _upfPhotoURL,
+                  ("verifiedTeacher" .=) <$> _upfVerifiedTeacher,
+                  ("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])
+
+-- | The history of the submission. This currently includes state and grade
+-- histories.
+--
+-- /See:/ 'submissionHistory' smart constructor.
+data SubmissionHistory = SubmissionHistory'
+    { _shGradeHistory :: !(Maybe GradeHistory)
+    , _shStateHistory :: !(Maybe StateHistory)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'SubmissionHistory' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'shGradeHistory'
+--
+-- * 'shStateHistory'
+submissionHistory
+    :: SubmissionHistory
+submissionHistory =
+    SubmissionHistory'
+    { _shGradeHistory = Nothing
+    , _shStateHistory = Nothing
+    }
+
+-- | The grade history information of the submission, if present.
+shGradeHistory :: Lens' SubmissionHistory (Maybe GradeHistory)
+shGradeHistory
+  = lens _shGradeHistory
+      (\ s a -> s{_shGradeHistory = a})
+
+-- | The state history information of the submission, if present.
+shStateHistory :: Lens' SubmissionHistory (Maybe StateHistory)
+shStateHistory
+  = lens _shStateHistory
+      (\ s a -> s{_shStateHistory = a})
+
+instance FromJSON SubmissionHistory where
+        parseJSON
+          = withObject "SubmissionHistory"
+              (\ o ->
+                 SubmissionHistory' <$>
+                   (o .:? "gradeHistory") <*> (o .:? "stateHistory"))
+
+instance ToJSON SubmissionHistory where
+        toJSON SubmissionHistory'{..}
+          = object
+              (catMaybes
+                 [("gradeHistory" .=) <$> _shGradeHistory,
+                  ("stateHistory" .=) <$> _shStateHistory])
+
+-- | The history of each state this submission has been in.
+--
+-- /See:/ 'stateHistory' smart constructor.
+data StateHistory = StateHistory'
+    { _shState          :: !(Maybe StateHistoryState)
+    , _shActorUserId    :: !(Maybe Text)
+    , _shStateTimestamp :: !(Maybe DateTime')
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'StateHistory' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'shState'
+--
+-- * 'shActorUserId'
+--
+-- * 'shStateTimestamp'
+stateHistory
+    :: StateHistory
+stateHistory =
+    StateHistory'
+    { _shState = Nothing
+    , _shActorUserId = Nothing
+    , _shStateTimestamp = Nothing
+    }
+
+-- | The workflow pipeline stage.
+shState :: Lens' StateHistory (Maybe StateHistoryState)
+shState = lens _shState (\ s a -> s{_shState = a})
+
+-- | The teacher or student who made the change
+shActorUserId :: Lens' StateHistory (Maybe Text)
+shActorUserId
+  = lens _shActorUserId
+      (\ s a -> s{_shActorUserId = a})
+
+-- | When the submission entered this state.
+shStateTimestamp :: Lens' StateHistory (Maybe UTCTime)
+shStateTimestamp
+  = lens _shStateTimestamp
+      (\ s a -> s{_shStateTimestamp = a})
+      . mapping _DateTime
+
+instance FromJSON StateHistory where
+        parseJSON
+          = withObject "StateHistory"
+              (\ o ->
+                 StateHistory' <$>
+                   (o .:? "state") <*> (o .:? "actorUserId") <*>
+                     (o .:? "stateTimestamp"))
+
+instance ToJSON StateHistory where
+        toJSON StateHistory'{..}
+          = object
+              (catMaybes
+                 [("state" .=) <$> _shState,
+                  ("actorUserId" .=) <$> _shActorUserId,
+                  ("stateTimestamp" .=) <$> _shStateTimestamp])
+
+-- | 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'
+    { _couCreationTime       :: !(Maybe DateTime')
+    , _couRoom               :: !(Maybe Text)
+    , _couCourseMaterialSets :: !(Maybe [CourseMaterialSet])
+    , _couCalendarId         :: !(Maybe Text)
+    , _couTeacherGroupEmail  :: !(Maybe Text)
+    , _couTeacherFolder      :: !(Maybe DriveFolder)
+    , _couCourseState        :: !(Maybe CourseCourseState)
+    , _couGuardiansEnabled   :: !(Maybe Bool)
+    , _couEnrollmentCode     :: !(Maybe Text)
+    , _couUpdateTime         :: !(Maybe DateTime')
+    , _couOwnerId            :: !(Maybe Text)
+    , _couName               :: !(Maybe Text)
+    , _couId                 :: !(Maybe Text)
+    , _couAlternateLink      :: !(Maybe Text)
+    , _couCourseGroupEmail   :: !(Maybe Text)
+    , _couDescription        :: !(Maybe Text)
+    , _couDescriptionHeading :: !(Maybe Text)
+    , _couSection            :: !(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:
+--
+-- * 'couCreationTime'
+--
+-- * 'couRoom'
+--
+-- * 'couCourseMaterialSets'
+--
+-- * 'couCalendarId'
+--
+-- * 'couTeacherGroupEmail'
+--
+-- * 'couTeacherFolder'
+--
+-- * 'couCourseState'
+--
+-- * 'couGuardiansEnabled'
+--
+-- * 'couEnrollmentCode'
+--
+-- * 'couUpdateTime'
+--
+-- * 'couOwnerId'
+--
+-- * 'couName'
+--
+-- * 'couId'
+--
+-- * 'couAlternateLink'
+--
+-- * 'couCourseGroupEmail'
+--
+-- * 'couDescription'
+--
+-- * 'couDescriptionHeading'
+--
+-- * 'couSection'
+course
+    :: Course
+course =
+    Course'
+    { _couCreationTime = Nothing
+    , _couRoom = Nothing
+    , _couCourseMaterialSets = Nothing
+    , _couCalendarId = Nothing
+    , _couTeacherGroupEmail = Nothing
+    , _couTeacherFolder = Nothing
+    , _couCourseState = Nothing
+    , _couGuardiansEnabled = Nothing
+    , _couEnrollmentCode = Nothing
+    , _couUpdateTime = Nothing
+    , _couOwnerId = Nothing
+    , _couName = Nothing
+    , _couId = Nothing
+    , _couAlternateLink = Nothing
+    , _couCourseGroupEmail = Nothing
+    , _couDescription = Nothing
+    , _couDescriptionHeading = Nothing
+    , _couSection = Nothing
+    }
+
+-- | Creation time of the course. Specifying this field in a course update
+-- mask results in an error. Read-only.
+couCreationTime :: Lens' Course (Maybe UTCTime)
+couCreationTime
+  = lens _couCreationTime
+      (\ s a -> s{_couCreationTime = a})
+      . mapping _DateTime
+
+-- | Optional room location. For example, \"301\". If set, this field must be
+-- a valid UTF-8 string and no longer than 650 characters.
+couRoom :: Lens' Course (Maybe Text)
+couRoom = lens _couRoom (\ s a -> s{_couRoom = a})
+
+-- | Sets of materials that appear on the \"about\" page of this course.
+-- Read-only.
+couCourseMaterialSets :: Lens' Course [CourseMaterialSet]
+couCourseMaterialSets
+  = lens _couCourseMaterialSets
+      (\ s a -> s{_couCourseMaterialSets = a})
+      . _Default
+      . _Coerce
+
+-- | The Calendar ID for a calendar that all course members can see, to which
+-- Classroom adds events for course work and announcements in the course.
+-- Read-only.
+couCalendarId :: Lens' Course (Maybe Text)
+couCalendarId
+  = lens _couCalendarId
+      (\ s a -> s{_couCalendarId = a})
+
+-- | 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.
+couTeacherGroupEmail :: Lens' Course (Maybe Text)
+couTeacherGroupEmail
+  = lens _couTeacherGroupEmail
+      (\ s a -> s{_couTeacherGroupEmail = 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.
+couTeacherFolder :: Lens' Course (Maybe DriveFolder)
+couTeacherFolder
+  = lens _couTeacherFolder
+      (\ s a -> s{_couTeacherFolder = a})
+
+-- | State of the course. If unspecified, the default state is
+-- \`PROVISIONED\`.
+couCourseState :: Lens' Course (Maybe CourseCourseState)
+couCourseState
+  = lens _couCourseState
+      (\ s a -> s{_couCourseState = a})
+
+-- | Whether or not guardian notifications are enabled for this course.
+-- Read-only.
+couGuardiansEnabled :: Lens' Course (Maybe Bool)
+couGuardiansEnabled
+  = lens _couGuardiansEnabled
+      (\ s a -> s{_couGuardiansEnabled = a})
+
+-- | Enrollment code to use when joining this course. Specifying this field
+-- in a course update mask results in an error. Read-only.
+couEnrollmentCode :: Lens' Course (Maybe Text)
+couEnrollmentCode
+  = lens _couEnrollmentCode
+      (\ s a -> s{_couEnrollmentCode = a})
+
+-- | Time of the most recent update to this course. Specifying this field in
+-- a course update mask results in an error. Read-only.
+couUpdateTime :: Lens' Course (Maybe UTCTime)
+couUpdateTime
+  = lens _couUpdateTime
+      (\ s a -> s{_couUpdateTime = a})
+      . mapping _DateTime
+
+-- | 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. Admins can
+-- also specify this field in a patch course request to transfer ownership.
+-- In other contexts, it is read-only.
+couOwnerId :: Lens' Course (Maybe Text)
+couOwnerId
+  = lens _couOwnerId (\ s a -> s{_couOwnerId = 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.
+couName :: Lens' Course (Maybe Text)
+couName = lens _couName (\ s a -> s{_couName = 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.
+couId :: Lens' Course (Maybe Text)
+couId = lens _couId (\ s a -> s{_couId = a})
+
+-- | Absolute link to this course in the Classroom web UI. Read-only.
+couAlternateLink :: Lens' Course (Maybe Text)
+couAlternateLink
+  = lens _couAlternateLink
+      (\ s a -> s{_couAlternateLink = 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.
+couCourseGroupEmail :: Lens' Course (Maybe Text)
+couCourseGroupEmail
+  = lens _couCourseGroupEmail
+      (\ s a -> s{_couCourseGroupEmail = 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.
+couDescription :: Lens' Course (Maybe Text)
+couDescription
+  = lens _couDescription
+      (\ s a -> s{_couDescription = 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.
+couDescriptionHeading :: Lens' Course (Maybe Text)
+couDescriptionHeading
+  = lens _couDescriptionHeading
+      (\ s a -> s{_couDescriptionHeading = 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.
+couSection :: Lens' Course (Maybe Text)
+couSection
+  = lens _couSection (\ s a -> s{_couSection = a})
+
+instance FromJSON Course where
+        parseJSON
+          = withObject "Course"
+              (\ o ->
+                 Course' <$>
+                   (o .:? "creationTime") <*> (o .:? "room") <*>
+                     (o .:? "courseMaterialSets" .!= mempty)
+                     <*> (o .:? "calendarId")
+                     <*> (o .:? "teacherGroupEmail")
+                     <*> (o .:? "teacherFolder")
+                     <*> (o .:? "courseState")
+                     <*> (o .:? "guardiansEnabled")
+                     <*> (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" .=) <$> _couCreationTime,
+                  ("room" .=) <$> _couRoom,
+                  ("courseMaterialSets" .=) <$> _couCourseMaterialSets,
+                  ("calendarId" .=) <$> _couCalendarId,
+                  ("teacherGroupEmail" .=) <$> _couTeacherGroupEmail,
+                  ("teacherFolder" .=) <$> _couTeacherFolder,
+                  ("courseState" .=) <$> _couCourseState,
+                  ("guardiansEnabled" .=) <$> _couGuardiansEnabled,
+                  ("enrollmentCode" .=) <$> _couEnrollmentCode,
+                  ("updateTime" .=) <$> _couUpdateTime,
+                  ("ownerId" .=) <$> _couOwnerId,
+                  ("name" .=) <$> _couName, ("id" .=) <$> _couId,
+                  ("alternateLink" .=) <$> _couAlternateLink,
+                  ("courseGroupEmail" .=) <$> _couCourseGroupEmail,
+                  ("description" .=) <$> _couDescription,
+                  ("descriptionHeading" .=) <$> _couDescriptionHeading,
+                  ("section" .=) <$> _couSection])
+
+-- | Represents a time of day. The date and time zone are either not
+-- significant or are specified elsewhere. An API may choose 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])
+
+-- | Response when listing guardian invitations.
+--
+-- /See:/ 'listGuardianInvitationsResponse' smart constructor.
+data ListGuardianInvitationsResponse = ListGuardianInvitationsResponse'
+    { _lgirNextPageToken       :: !(Maybe Text)
+    , _lgirGuardianInvitations :: !(Maybe [GuardianInvitation])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ListGuardianInvitationsResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'lgirNextPageToken'
+--
+-- * 'lgirGuardianInvitations'
+listGuardianInvitationsResponse
+    :: ListGuardianInvitationsResponse
+listGuardianInvitationsResponse =
+    ListGuardianInvitationsResponse'
+    { _lgirNextPageToken = Nothing
+    , _lgirGuardianInvitations = Nothing
+    }
+
+-- | Token identifying the next page of results to return. If empty, no
+-- further results are available.
+lgirNextPageToken :: Lens' ListGuardianInvitationsResponse (Maybe Text)
+lgirNextPageToken
+  = lens _lgirNextPageToken
+      (\ s a -> s{_lgirNextPageToken = a})
+
+-- | Guardian invitations that matched the list request.
+lgirGuardianInvitations :: Lens' ListGuardianInvitationsResponse [GuardianInvitation]
+lgirGuardianInvitations
+  = lens _lgirGuardianInvitations
+      (\ s a -> s{_lgirGuardianInvitations = a})
+      . _Default
+      . _Coerce
+
+instance FromJSON ListGuardianInvitationsResponse
+         where
+        parseJSON
+          = withObject "ListGuardianInvitationsResponse"
+              (\ o ->
+                 ListGuardianInvitationsResponse' <$>
+                   (o .:? "nextPageToken") <*>
+                     (o .:? "guardianInvitations" .!= mempty))
+
+instance ToJSON ListGuardianInvitationsResponse where
+        toJSON ListGuardianInvitationsResponse'{..}
+          = object
+              (catMaybes
+                 [("nextPageToken" .=) <$> _lgirNextPageToken,
+                  ("guardianInvitations" .=) <$>
+                    _lgirGuardianInvitations])
+
+-- | 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 and administrators.
+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 SharedDriveFileShareMode)
+    } 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 SharedDriveFileShareMode)
+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])
+
+-- | Information about a \`Feed\` with a \`feed_type\` of
+-- \`COURSE_ROSTER_CHANGES\`.
+--
+-- /See:/ 'courseRosterChangesInfo' smart constructor.
+newtype CourseRosterChangesInfo = CourseRosterChangesInfo'
+    { _crciCourseId :: Maybe Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CourseRosterChangesInfo' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'crciCourseId'
+courseRosterChangesInfo
+    :: CourseRosterChangesInfo
+courseRosterChangesInfo =
+    CourseRosterChangesInfo'
+    { _crciCourseId = Nothing
+    }
+
+-- | The \`course_id\` of the course to subscribe to roster changes for.
+crciCourseId :: Lens' CourseRosterChangesInfo (Maybe Text)
+crciCourseId
+  = lens _crciCourseId (\ s a -> s{_crciCourseId = a})
+
+instance FromJSON CourseRosterChangesInfo where
+        parseJSON
+          = withObject "CourseRosterChangesInfo"
+              (\ o ->
+                 CourseRosterChangesInfo' <$> (o .:? "courseId"))
+
+instance ToJSON CourseRosterChangesInfo where
+        toJSON CourseRosterChangesInfo'{..}
+          = object
+              (catMaybes [("courseId" .=) <$> _crciCourseId])
+
+-- | Contains fields to add or remove students from a course work or
+-- announcement where the \`assigneeMode\` is set to
+-- \`INDIVIDUAL_STUDENTS\`.
+--
+-- /See:/ 'modifyIndividualStudentsOptions' smart constructor.
+data ModifyIndividualStudentsOptions = ModifyIndividualStudentsOptions'
+    { _misoAddStudentIds    :: !(Maybe [Text])
+    , _misoRemoveStudentIds :: !(Maybe [Text])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ModifyIndividualStudentsOptions' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'misoAddStudentIds'
+--
+-- * 'misoRemoveStudentIds'
+modifyIndividualStudentsOptions
+    :: ModifyIndividualStudentsOptions
+modifyIndividualStudentsOptions =
+    ModifyIndividualStudentsOptions'
+    { _misoAddStudentIds = Nothing
+    , _misoRemoveStudentIds = Nothing
+    }
+
+-- | Ids of students to be added as having access to this
+-- coursework\/announcement.
+misoAddStudentIds :: Lens' ModifyIndividualStudentsOptions [Text]
+misoAddStudentIds
+  = lens _misoAddStudentIds
+      (\ s a -> s{_misoAddStudentIds = a})
+      . _Default
+      . _Coerce
+
+-- | Ids of students to be removed from having access to this
+-- coursework\/announcement.
+misoRemoveStudentIds :: Lens' ModifyIndividualStudentsOptions [Text]
+misoRemoveStudentIds
+  = lens _misoRemoveStudentIds
+      (\ s a -> s{_misoRemoveStudentIds = a})
+      . _Default
+      . _Coerce
+
+instance FromJSON ModifyIndividualStudentsOptions
+         where
+        parseJSON
+          = withObject "ModifyIndividualStudentsOptions"
+              (\ o ->
+                 ModifyIndividualStudentsOptions' <$>
+                   (o .:? "addStudentIds" .!= mempty) <*>
+                     (o .:? "removeStudentIds" .!= mempty))
+
+instance ToJSON ModifyIndividualStudentsOptions where
+        toJSON ModifyIndividualStudentsOptions'{..}
+          = object
+              (catMaybes
+                 [("addStudentIds" .=) <$> _misoAddStudentIds,
+                  ("removeStudentIds" .=) <$> _misoRemoveStudentIds])
+
+-- | A reference to a Cloud Pub\/Sub topic. To register for notifications,
+-- the owner of the topic must grant
+-- \`classroom-notifications\'system.gserviceaccount.com\` the
+-- \`projects.topics.publish\` permission.
+--
+-- /See:/ 'cloudPubsubTopic' smart constructor.
+newtype CloudPubsubTopic = CloudPubsubTopic'
+    { _cptTopicName :: Maybe Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CloudPubsubTopic' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cptTopicName'
+cloudPubsubTopic
+    :: CloudPubsubTopic
+cloudPubsubTopic =
+    CloudPubsubTopic'
+    { _cptTopicName = Nothing
+    }
+
+-- | The \`name\` field of a Cloud Pub\/Sub
+-- [Topic](https:\/\/cloud.google.com\/pubsub\/docs\/reference\/rest\/v1\/projects.topics#Topic).
+cptTopicName :: Lens' CloudPubsubTopic (Maybe Text)
+cptTopicName
+  = lens _cptTopicName (\ s a -> s{_cptTopicName = a})
+
+instance FromJSON CloudPubsubTopic where
+        parseJSON
+          = withObject "CloudPubsubTopic"
+              (\ o -> CloudPubsubTopic' <$> (o .:? "topicName"))
+
+instance ToJSON CloudPubsubTopic where
+        toJSON CloudPubsubTopic'{..}
+          = object
+              (catMaybes [("topicName" .=) <$> _cptTopicName])
+
+-- | 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])
+
+-- | An instruction to Classroom to send notifications from the \`feed\` to
+-- the provided destination.
+--
+-- /See:/ 'registration' smart constructor.
+data Registration = Registration'
+    { _rRegistrationId   :: !(Maybe Text)
+    , _rExpiryTime       :: !(Maybe DateTime')
+    , _rFeed             :: !(Maybe Feed)
+    , _rCloudPubsubTopic :: !(Maybe CloudPubsubTopic)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Registration' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'rRegistrationId'
+--
+-- * 'rExpiryTime'
+--
+-- * 'rFeed'
+--
+-- * 'rCloudPubsubTopic'
+registration
+    :: Registration
+registration =
+    Registration'
+    { _rRegistrationId = Nothing
+    , _rExpiryTime = Nothing
+    , _rFeed = Nothing
+    , _rCloudPubsubTopic = Nothing
+    }
+
+-- | A server-generated unique identifier for this \`Registration\`.
+-- Read-only.
+rRegistrationId :: Lens' Registration (Maybe Text)
+rRegistrationId
+  = lens _rRegistrationId
+      (\ s a -> s{_rRegistrationId = a})
+
+-- | The time until which the \`Registration\` is effective. This is a
+-- read-only field assigned by the server.
+rExpiryTime :: Lens' Registration (Maybe UTCTime)
+rExpiryTime
+  = lens _rExpiryTime (\ s a -> s{_rExpiryTime = a}) .
+      mapping _DateTime
+
+-- | Specification for the class of notifications that Classroom should
+-- deliver to the destination.
+rFeed :: Lens' Registration (Maybe Feed)
+rFeed = lens _rFeed (\ s a -> s{_rFeed = a})
+
+-- | The Cloud Pub\/Sub topic that notifications are to be sent to.
+rCloudPubsubTopic :: Lens' Registration (Maybe CloudPubsubTopic)
+rCloudPubsubTopic
+  = lens _rCloudPubsubTopic
+      (\ s a -> s{_rCloudPubsubTopic = a})
+
+instance FromJSON Registration where
+        parseJSON
+          = withObject "Registration"
+              (\ o ->
+                 Registration' <$>
+                   (o .:? "registrationId") <*> (o .:? "expiryTime") <*>
+                     (o .:? "feed")
+                     <*> (o .:? "cloudPubsubTopic"))
+
+instance ToJSON Registration where
+        toJSON Registration'{..}
+          = object
+              (catMaybes
+                 [("registrationId" .=) <$> _rRegistrationId,
+                  ("expiryTime" .=) <$> _rExpiryTime,
+                  ("feed" .=) <$> _rFeed,
+                  ("cloudPubsubTopic" .=) <$> _rCloudPubsubTopic])
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
@@ -16,4 +16,773 @@
 --
 module Network.Google.Classroom.Types.Sum where
 
-import           Network.Google.Prelude
+import           Network.Google.Prelude hiding (Bytes)
+
+-- | The type of grade change at this time in the submission grade history.
+data GradeHistoryGradeChangeType
+    = UnknownGradeChangeType
+      -- ^ @UNKNOWN_GRADE_CHANGE_TYPE@
+      -- No grade change type specified. This should never be returned.
+    | DraftGradePointsEarnedChange
+      -- ^ @DRAFT_GRADE_POINTS_EARNED_CHANGE@
+      -- A change in the numerator of the draft grade.
+    | AssignedGradePointsEarnedChange
+      -- ^ @ASSIGNED_GRADE_POINTS_EARNED_CHANGE@
+      -- A change in the numerator of the assigned grade.
+    | MaxPointsChange
+      -- ^ @MAX_POINTS_CHANGE@
+      -- A change in the denominator of the grade.
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable GradeHistoryGradeChangeType
+
+instance FromHttpApiData GradeHistoryGradeChangeType where
+    parseQueryParam = \case
+        "UNKNOWN_GRADE_CHANGE_TYPE" -> Right UnknownGradeChangeType
+        "DRAFT_GRADE_POINTS_EARNED_CHANGE" -> Right DraftGradePointsEarnedChange
+        "ASSIGNED_GRADE_POINTS_EARNED_CHANGE" -> Right AssignedGradePointsEarnedChange
+        "MAX_POINTS_CHANGE" -> Right MaxPointsChange
+        x -> Left ("Unable to parse GradeHistoryGradeChangeType from: " <> x)
+
+instance ToHttpApiData GradeHistoryGradeChangeType where
+    toQueryParam = \case
+        UnknownGradeChangeType -> "UNKNOWN_GRADE_CHANGE_TYPE"
+        DraftGradePointsEarnedChange -> "DRAFT_GRADE_POINTS_EARNED_CHANGE"
+        AssignedGradePointsEarnedChange -> "ASSIGNED_GRADE_POINTS_EARNED_CHANGE"
+        MaxPointsChange -> "MAX_POINTS_CHANGE"
+
+instance FromJSON GradeHistoryGradeChangeType where
+    parseJSON = parseJSONText "GradeHistoryGradeChangeType"
+
+instance ToJSON GradeHistoryGradeChangeType where
+    toJSON = toJSONText
+
+-- | State of the course. If unspecified, the default state is
+-- \`PROVISIONED\`.
+data CourseCourseState
+    = CourseStateUnspecified
+      -- ^ @COURSE_STATE_UNSPECIFIED@
+      -- No course state. No returned Course message will use this value.
+    | Active
+      -- ^ @ACTIVE@
+      -- The course is active.
+    | Archived
+      -- ^ @ARCHIVED@
+      -- The course has been archived. You cannot modify it except to change it
+      -- to a different state.
+    | Provisioned
+      -- ^ @PROVISIONED@
+      -- The course has been created, but not yet activated. It is accessible by
+      -- the primary teacher and domain administrators, who may modify it or
+      -- change it to the \`ACTIVE\` or \`DECLINED\` states. A course may only be
+      -- changed to \`PROVISIONED\` if it is in the \`DECLINED\` state.
+    | Declined
+      -- ^ @DECLINED@
+      -- The course has been created, but declined. It is accessible by the
+      -- course owner and domain administrators, though it will not be displayed
+      -- in the web UI. You cannot modify the course except to change it to the
+      -- \`PROVISIONED\` state. A course may only be changed to \`DECLINED\` if
+      -- it is in the \`PROVISIONED\` state.
+    | Suspended
+      -- ^ @SUSPENDED@
+      -- The course has been suspended. You cannot modify the course, and only
+      -- the user identified by the \`owner_id\` can view the course. A course
+      -- may be placed in this state if it potentially violates the Terms of
+      -- Service.
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable CourseCourseState
+
+instance FromHttpApiData CourseCourseState where
+    parseQueryParam = \case
+        "COURSE_STATE_UNSPECIFIED" -> Right CourseStateUnspecified
+        "ACTIVE" -> Right Active
+        "ARCHIVED" -> Right Archived
+        "PROVISIONED" -> Right Provisioned
+        "DECLINED" -> Right Declined
+        "SUSPENDED" -> Right Suspended
+        x -> Left ("Unable to parse CourseCourseState from: " <> x)
+
+instance ToHttpApiData CourseCourseState where
+    toQueryParam = \case
+        CourseStateUnspecified -> "COURSE_STATE_UNSPECIFIED"
+        Active -> "ACTIVE"
+        Archived -> "ARCHIVED"
+        Provisioned -> "PROVISIONED"
+        Declined -> "DECLINED"
+        Suspended -> "SUSPENDED"
+
+instance FromJSON CourseCourseState where
+    parseJSON = parseJSONText "CourseCourseState"
+
+instance ToJSON CourseCourseState where
+    toJSON = toJSONText
+
+-- | The workflow pipeline stage.
+data StateHistoryState
+    = StateUnspecified
+      -- ^ @STATE_UNSPECIFIED@
+      -- No state specified. This should never be returned.
+    | Created
+      -- ^ @CREATED@
+      -- The Submission has been created.
+    | TurnedIn
+      -- ^ @TURNED_IN@
+      -- The student has turned in an assigned document, which may or may not be
+      -- a template.
+    | Returned
+      -- ^ @RETURNED@
+      -- The teacher has returned the assigned document to the student.
+    | ReclaimedByStudent
+      -- ^ @RECLAIMED_BY_STUDENT@
+      -- The student turned in the assigned document, and then chose to
+      -- \"unsubmit\" the assignment, giving the student control again as the
+      -- owner.
+    | StudentEditedAfterTurnIn
+      -- ^ @STUDENT_EDITED_AFTER_TURN_IN@
+      -- The student edited their submission after turning it in. Currently, only
+      -- used by Questions, when the student edits their answer.
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable StateHistoryState
+
+instance FromHttpApiData StateHistoryState where
+    parseQueryParam = \case
+        "STATE_UNSPECIFIED" -> Right StateUnspecified
+        "CREATED" -> Right Created
+        "TURNED_IN" -> Right TurnedIn
+        "RETURNED" -> Right Returned
+        "RECLAIMED_BY_STUDENT" -> Right ReclaimedByStudent
+        "STUDENT_EDITED_AFTER_TURN_IN" -> Right StudentEditedAfterTurnIn
+        x -> Left ("Unable to parse StateHistoryState from: " <> x)
+
+instance ToHttpApiData StateHistoryState where
+    toQueryParam = \case
+        StateUnspecified -> "STATE_UNSPECIFIED"
+        Created -> "CREATED"
+        TurnedIn -> "TURNED_IN"
+        Returned -> "RETURNED"
+        ReclaimedByStudent -> "RECLAIMED_BY_STUDENT"
+        StudentEditedAfterTurnIn -> "STUDENT_EDITED_AFTER_TURN_IN"
+
+instance FromJSON StateHistoryState where
+    parseJSON = parseJSONText "StateHistoryState"
+
+instance ToJSON StateHistoryState where
+    toJSON = toJSONText
+
+-- | Type of this course work. The type is set when the course work is
+-- created and cannot be changed.
+data CourseWorkWorkType
+    = CWWTCourseWorkTypeUnspecified
+      -- ^ @COURSE_WORK_TYPE_UNSPECIFIED@
+      -- No work type specified. This is never returned.
+    | CWWTAssignment
+      -- ^ @ASSIGNMENT@
+      -- An assignment.
+    | CWWTShortAnswerQuestion
+      -- ^ @SHORT_ANSWER_QUESTION@
+      -- A short answer question.
+    | CWWTMultipleChoiceQuestion
+      -- ^ @MULTIPLE_CHOICE_QUESTION@
+      -- A multiple-choice question.
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable CourseWorkWorkType
+
+instance FromHttpApiData CourseWorkWorkType where
+    parseQueryParam = \case
+        "COURSE_WORK_TYPE_UNSPECIFIED" -> Right CWWTCourseWorkTypeUnspecified
+        "ASSIGNMENT" -> Right CWWTAssignment
+        "SHORT_ANSWER_QUESTION" -> Right CWWTShortAnswerQuestion
+        "MULTIPLE_CHOICE_QUESTION" -> Right CWWTMultipleChoiceQuestion
+        x -> Left ("Unable to parse CourseWorkWorkType from: " <> x)
+
+instance ToHttpApiData CourseWorkWorkType where
+    toQueryParam = \case
+        CWWTCourseWorkTypeUnspecified -> "COURSE_WORK_TYPE_UNSPECIFIED"
+        CWWTAssignment -> "ASSIGNMENT"
+        CWWTShortAnswerQuestion -> "SHORT_ANSWER_QUESTION"
+        CWWTMultipleChoiceQuestion -> "MULTIPLE_CHOICE_QUESTION"
+
+instance FromJSON CourseWorkWorkType where
+    parseJSON = parseJSONText "CourseWorkWorkType"
+
+instance ToJSON CourseWorkWorkType where
+    toJSON = toJSONText
+
+-- | Mode of the coursework describing whether it will be assigned to all
+-- students or specified individual students.
+data ModifyCourseWorkAssigneesRequestAssigneeMode
+    = AssigneeModeUnspecified
+      -- ^ @ASSIGNEE_MODE_UNSPECIFIED@
+      -- No mode specified. This is never returned.
+    | AllStudents
+      -- ^ @ALL_STUDENTS@
+      -- All students can see the item. This is the default state.
+    | IndividualStudents
+      -- ^ @INDIVIDUAL_STUDENTS@
+      -- A subset of the students can see the item.
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable ModifyCourseWorkAssigneesRequestAssigneeMode
+
+instance FromHttpApiData ModifyCourseWorkAssigneesRequestAssigneeMode where
+    parseQueryParam = \case
+        "ASSIGNEE_MODE_UNSPECIFIED" -> Right AssigneeModeUnspecified
+        "ALL_STUDENTS" -> Right AllStudents
+        "INDIVIDUAL_STUDENTS" -> Right IndividualStudents
+        x -> Left ("Unable to parse ModifyCourseWorkAssigneesRequestAssigneeMode from: " <> x)
+
+instance ToHttpApiData ModifyCourseWorkAssigneesRequestAssigneeMode where
+    toQueryParam = \case
+        AssigneeModeUnspecified -> "ASSIGNEE_MODE_UNSPECIFIED"
+        AllStudents -> "ALL_STUDENTS"
+        IndividualStudents -> "INDIVIDUAL_STUDENTS"
+
+instance FromJSON ModifyCourseWorkAssigneesRequestAssigneeMode where
+    parseJSON = parseJSONText "ModifyCourseWorkAssigneesRequestAssigneeMode"
+
+instance ToJSON ModifyCourseWorkAssigneesRequestAssigneeMode where
+    toJSON = toJSONText
+
+-- | The state that this invitation is in.
+data GuardianInvitationState
+    = GuardianInvitationStateUnspecified
+      -- ^ @GUARDIAN_INVITATION_STATE_UNSPECIFIED@
+      -- Should never be returned.
+    | Pending
+      -- ^ @PENDING@
+      -- The invitation is active and awaiting a response.
+    | Complete
+      -- ^ @COMPLETE@
+      -- The invitation is no longer active. It may have been accepted, declined,
+      -- withdrawn or it may have expired.
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable GuardianInvitationState
+
+instance FromHttpApiData GuardianInvitationState where
+    parseQueryParam = \case
+        "GUARDIAN_INVITATION_STATE_UNSPECIFIED" -> Right GuardianInvitationStateUnspecified
+        "PENDING" -> Right Pending
+        "COMPLETE" -> Right Complete
+        x -> Left ("Unable to parse GuardianInvitationState from: " <> x)
+
+instance ToHttpApiData GuardianInvitationState where
+    toQueryParam = \case
+        GuardianInvitationStateUnspecified -> "GUARDIAN_INVITATION_STATE_UNSPECIFIED"
+        Pending -> "PENDING"
+        Complete -> "COMPLETE"
+
+instance FromJSON GuardianInvitationState where
+    parseJSON = parseJSONText "GuardianInvitationState"
+
+instance ToJSON GuardianInvitationState where
+    toJSON = toJSONText
+
+-- | Mechanism by which students access the Drive item.
+data SharedDriveFileShareMode
+    = UnknownShareMode
+      -- ^ @UNKNOWN_SHARE_MODE@
+      -- No sharing mode specified. This should never be returned.
+    | View
+      -- ^ @VIEW@
+      -- Students can view the shared file.
+    | Edit
+      -- ^ @EDIT@
+      -- Students can edit the shared file.
+    | StudentCopy
+      -- ^ @STUDENT_COPY@
+      -- Students have a personal copy of the shared file.
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable SharedDriveFileShareMode
+
+instance FromHttpApiData SharedDriveFileShareMode where
+    parseQueryParam = \case
+        "UNKNOWN_SHARE_MODE" -> Right UnknownShareMode
+        "VIEW" -> Right View
+        "EDIT" -> Right Edit
+        "STUDENT_COPY" -> Right StudentCopy
+        x -> Left ("Unable to parse SharedDriveFileShareMode from: " <> x)
+
+instance ToHttpApiData SharedDriveFileShareMode where
+    toQueryParam = \case
+        UnknownShareMode -> "UNKNOWN_SHARE_MODE"
+        View -> "VIEW"
+        Edit -> "EDIT"
+        StudentCopy -> "STUDENT_COPY"
+
+instance FromJSON SharedDriveFileShareMode where
+    parseJSON = parseJSONText "SharedDriveFileShareMode"
+
+instance ToJSON SharedDriveFileShareMode where
+    toJSON = toJSONText
+
+-- | Mode of the announcement describing whether it will be accessible by all
+-- students or specified individual students.
+data ModifyAnnouncementAssigneesRequestAssigneeMode
+    = MAARAMAssigneeModeUnspecified
+      -- ^ @ASSIGNEE_MODE_UNSPECIFIED@
+      -- No mode specified. This is never returned.
+    | MAARAMAllStudents
+      -- ^ @ALL_STUDENTS@
+      -- All students can see the item. This is the default state.
+    | MAARAMIndividualStudents
+      -- ^ @INDIVIDUAL_STUDENTS@
+      -- A subset of the students can see the item.
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable ModifyAnnouncementAssigneesRequestAssigneeMode
+
+instance FromHttpApiData ModifyAnnouncementAssigneesRequestAssigneeMode where
+    parseQueryParam = \case
+        "ASSIGNEE_MODE_UNSPECIFIED" -> Right MAARAMAssigneeModeUnspecified
+        "ALL_STUDENTS" -> Right MAARAMAllStudents
+        "INDIVIDUAL_STUDENTS" -> Right MAARAMIndividualStudents
+        x -> Left ("Unable to parse ModifyAnnouncementAssigneesRequestAssigneeMode from: " <> x)
+
+instance ToHttpApiData ModifyAnnouncementAssigneesRequestAssigneeMode where
+    toQueryParam = \case
+        MAARAMAssigneeModeUnspecified -> "ASSIGNEE_MODE_UNSPECIFIED"
+        MAARAMAllStudents -> "ALL_STUDENTS"
+        MAARAMIndividualStudents -> "INDIVIDUAL_STUDENTS"
+
+instance FromJSON ModifyAnnouncementAssigneesRequestAssigneeMode where
+    parseJSON = parseJSONText "ModifyAnnouncementAssigneesRequestAssigneeMode"
+
+instance ToJSON ModifyAnnouncementAssigneesRequestAssigneeMode where
+    toJSON = toJSONText
+
+-- | Assignee mode of the announcement. If unspecified, the default value is
+-- \`ALL_STUDENTS\`.
+data AnnouncementAssigneeMode
+    = AAMAssigneeModeUnspecified
+      -- ^ @ASSIGNEE_MODE_UNSPECIFIED@
+      -- No mode specified. This is never returned.
+    | AAMAllStudents
+      -- ^ @ALL_STUDENTS@
+      -- All students can see the item. This is the default state.
+    | AAMIndividualStudents
+      -- ^ @INDIVIDUAL_STUDENTS@
+      -- A subset of the students can see the item.
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable AnnouncementAssigneeMode
+
+instance FromHttpApiData AnnouncementAssigneeMode where
+    parseQueryParam = \case
+        "ASSIGNEE_MODE_UNSPECIFIED" -> Right AAMAssigneeModeUnspecified
+        "ALL_STUDENTS" -> Right AAMAllStudents
+        "INDIVIDUAL_STUDENTS" -> Right AAMIndividualStudents
+        x -> Left ("Unable to parse AnnouncementAssigneeMode from: " <> x)
+
+instance ToHttpApiData AnnouncementAssigneeMode where
+    toQueryParam = \case
+        AAMAssigneeModeUnspecified -> "ASSIGNEE_MODE_UNSPECIFIED"
+        AAMAllStudents -> "ALL_STUDENTS"
+        AAMIndividualStudents -> "INDIVIDUAL_STUDENTS"
+
+instance FromJSON AnnouncementAssigneeMode where
+    parseJSON = parseJSONText "AnnouncementAssigneeMode"
+
+instance ToJSON AnnouncementAssigneeMode where
+    toJSON = toJSONText
+
+-- | Status of this course work. If unspecified, the default state is
+-- \`DRAFT\`.
+data CourseWorkState
+    = CourseWorkStateUnspecified
+      -- ^ @COURSE_WORK_STATE_UNSPECIFIED@
+      -- No state specified. This is never returned.
+    | Published
+      -- ^ @PUBLISHED@
+      -- Status for work that has been published. This is the default state.
+    | Draft
+      -- ^ @DRAFT@
+      -- Status for work that is not yet published. Work in this state is visible
+      -- only to course teachers and domain administrators.
+    | Deleted
+      -- ^ @DELETED@
+      -- Status for work that was published but is now deleted. Work in this
+      -- state is visible only to course teachers and domain administrators. Work
+      -- in this state is deleted after some time.
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable CourseWorkState
+
+instance FromHttpApiData CourseWorkState where
+    parseQueryParam = \case
+        "COURSE_WORK_STATE_UNSPECIFIED" -> Right CourseWorkStateUnspecified
+        "PUBLISHED" -> Right Published
+        "DRAFT" -> Right Draft
+        "DELETED" -> Right Deleted
+        x -> Left ("Unable to parse CourseWorkState from: " <> x)
+
+instance ToHttpApiData CourseWorkState where
+    toQueryParam = \case
+        CourseWorkStateUnspecified -> "COURSE_WORK_STATE_UNSPECIFIED"
+        Published -> "PUBLISHED"
+        Draft -> "DRAFT"
+        Deleted -> "DELETED"
+
+instance FromJSON CourseWorkState where
+    parseJSON = parseJSONText "CourseWorkState"
+
+instance ToJSON CourseWorkState where
+    toJSON = toJSONText
+
+-- | State of this submission. Read-only.
+data StudentSubmissionState
+    = SSSSubmissionStateUnspecified
+      -- ^ @SUBMISSION_STATE_UNSPECIFIED@
+      -- No state specified. This should never be returned.
+    | SSSNew
+      -- ^ @NEW@
+      -- The student has never accessed this submission. Attachments are not
+      -- returned and timestamps is not set.
+    | SSSCreated
+      -- ^ @CREATED@
+      -- Has been created.
+    | SSSTurnedIn
+      -- ^ @TURNED_IN@
+      -- Has been turned in to the teacher.
+    | SSSReturned
+      -- ^ @RETURNED@
+      -- Has been returned to the student.
+    | SSSReclaimedByStudent
+      -- ^ @RECLAIMED_BY_STUDENT@
+      -- Student chose to \"unsubmit\" the assignment.
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable StudentSubmissionState
+
+instance FromHttpApiData StudentSubmissionState where
+    parseQueryParam = \case
+        "SUBMISSION_STATE_UNSPECIFIED" -> Right SSSSubmissionStateUnspecified
+        "NEW" -> Right SSSNew
+        "CREATED" -> Right SSSCreated
+        "TURNED_IN" -> Right SSSTurnedIn
+        "RETURNED" -> Right SSSReturned
+        "RECLAIMED_BY_STUDENT" -> Right SSSReclaimedByStudent
+        x -> Left ("Unable to parse StudentSubmissionState from: " <> x)
+
+instance ToHttpApiData StudentSubmissionState where
+    toQueryParam = \case
+        SSSSubmissionStateUnspecified -> "SUBMISSION_STATE_UNSPECIFIED"
+        SSSNew -> "NEW"
+        SSSCreated -> "CREATED"
+        SSSTurnedIn -> "TURNED_IN"
+        SSSReturned -> "RETURNED"
+        SSSReclaimedByStudent -> "RECLAIMED_BY_STUDENT"
+
+instance FromJSON StudentSubmissionState where
+    parseJSON = parseJSONText "StudentSubmissionState"
+
+instance ToJSON StudentSubmissionState where
+    toJSON = toJSONText
+
+-- | Status of this announcement. If unspecified, the default state is
+-- \`DRAFT\`.
+data AnnouncementState
+    = ASAnnouncementStateUnspecified
+      -- ^ @ANNOUNCEMENT_STATE_UNSPECIFIED@
+      -- No state specified. This is never returned.
+    | ASPublished
+      -- ^ @PUBLISHED@
+      -- Status for announcement that has been published. This is the default
+      -- state.
+    | ASDraft
+      -- ^ @DRAFT@
+      -- Status for an announcement that is not yet published. Announcement in
+      -- this state is visible only to course teachers and domain administrators.
+    | ASDeleted
+      -- ^ @DELETED@
+      -- Status for announcement that was published but is now deleted.
+      -- Announcement in this state is visible only to course teachers and domain
+      -- administrators. Announcement in this state is deleted after some time.
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable AnnouncementState
+
+instance FromHttpApiData AnnouncementState where
+    parseQueryParam = \case
+        "ANNOUNCEMENT_STATE_UNSPECIFIED" -> Right ASAnnouncementStateUnspecified
+        "PUBLISHED" -> Right ASPublished
+        "DRAFT" -> Right ASDraft
+        "DELETED" -> Right ASDeleted
+        x -> Left ("Unable to parse AnnouncementState from: " <> x)
+
+instance ToHttpApiData AnnouncementState where
+    toQueryParam = \case
+        ASAnnouncementStateUnspecified -> "ANNOUNCEMENT_STATE_UNSPECIFIED"
+        ASPublished -> "PUBLISHED"
+        ASDraft -> "DRAFT"
+        ASDeleted -> "DELETED"
+
+instance FromJSON AnnouncementState where
+    parseJSON = parseJSONText "AnnouncementState"
+
+instance ToJSON AnnouncementState where
+    toJSON = toJSONText
+
+-- | V1 error format.
+data Xgafv
+    = X1
+      -- ^ @1@
+      -- v1 error format
+    | X2
+      -- ^ @2@
+      -- v2 error format
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable Xgafv
+
+instance FromHttpApiData Xgafv where
+    parseQueryParam = \case
+        "1" -> Right X1
+        "2" -> Right X2
+        x -> Left ("Unable to parse Xgafv from: " <> x)
+
+instance ToHttpApiData Xgafv where
+    toQueryParam = \case
+        X1 -> "1"
+        X2 -> "2"
+
+instance FromJSON Xgafv where
+    parseJSON = parseJSONText "Xgafv"
+
+instance ToJSON Xgafv where
+    toJSON = toJSONText
+
+-- | Role to invite the user to have. Must not be
+-- \`COURSE_ROLE_UNSPECIFIED\`.
+data InvitationRole
+    = IRCourseRoleUnspecified
+      -- ^ @COURSE_ROLE_UNSPECIFIED@
+      -- No course role.
+    | IRStudent
+      -- ^ @STUDENT@
+      -- Student in the course.
+    | IRTeacher
+      -- ^ @TEACHER@
+      -- Teacher of the course.
+    | IROwner
+      -- ^ @OWNER@
+      -- Owner of the course.
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable InvitationRole
+
+instance FromHttpApiData InvitationRole where
+    parseQueryParam = \case
+        "COURSE_ROLE_UNSPECIFIED" -> Right IRCourseRoleUnspecified
+        "STUDENT" -> Right IRStudent
+        "TEACHER" -> Right IRTeacher
+        "OWNER" -> Right IROwner
+        x -> Left ("Unable to parse InvitationRole from: " <> x)
+
+instance ToHttpApiData InvitationRole where
+    toQueryParam = \case
+        IRCourseRoleUnspecified -> "COURSE_ROLE_UNSPECIFIED"
+        IRStudent -> "STUDENT"
+        IRTeacher -> "TEACHER"
+        IROwner -> "OWNER"
+
+instance FromJSON InvitationRole where
+    parseJSON = parseJSONText "InvitationRole"
+
+instance ToJSON InvitationRole where
+    toJSON = toJSONText
+
+-- | Type of course work this submission is for. Read-only.
+data StudentSubmissionCourseWorkType
+    = SSCWTCourseWorkTypeUnspecified
+      -- ^ @COURSE_WORK_TYPE_UNSPECIFIED@
+      -- No work type specified. This is never returned.
+    | SSCWTAssignment
+      -- ^ @ASSIGNMENT@
+      -- An assignment.
+    | SSCWTShortAnswerQuestion
+      -- ^ @SHORT_ANSWER_QUESTION@
+      -- A short answer question.
+    | SSCWTMultipleChoiceQuestion
+      -- ^ @MULTIPLE_CHOICE_QUESTION@
+      -- A multiple-choice question.
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable StudentSubmissionCourseWorkType
+
+instance FromHttpApiData StudentSubmissionCourseWorkType where
+    parseQueryParam = \case
+        "COURSE_WORK_TYPE_UNSPECIFIED" -> Right SSCWTCourseWorkTypeUnspecified
+        "ASSIGNMENT" -> Right SSCWTAssignment
+        "SHORT_ANSWER_QUESTION" -> Right SSCWTShortAnswerQuestion
+        "MULTIPLE_CHOICE_QUESTION" -> Right SSCWTMultipleChoiceQuestion
+        x -> Left ("Unable to parse StudentSubmissionCourseWorkType from: " <> x)
+
+instance ToHttpApiData StudentSubmissionCourseWorkType where
+    toQueryParam = \case
+        SSCWTCourseWorkTypeUnspecified -> "COURSE_WORK_TYPE_UNSPECIFIED"
+        SSCWTAssignment -> "ASSIGNMENT"
+        SSCWTShortAnswerQuestion -> "SHORT_ANSWER_QUESTION"
+        SSCWTMultipleChoiceQuestion -> "MULTIPLE_CHOICE_QUESTION"
+
+instance FromJSON StudentSubmissionCourseWorkType where
+    parseJSON = parseJSONText "StudentSubmissionCourseWorkType"
+
+instance ToJSON StudentSubmissionCourseWorkType where
+    toJSON = toJSONText
+
+-- | The type of feed.
+data FeedFeedType
+    = FeedTypeUnspecified
+      -- ^ @FEED_TYPE_UNSPECIFIED@
+      -- Should never be returned or provided.
+    | DomainRosterChanges
+      -- ^ @DOMAIN_ROSTER_CHANGES@
+      -- All roster changes for a particular domain. Notifications will be
+      -- generated whenever a user joins or leaves a course. No notifications
+      -- will be generated when an invitation is created or deleted, but
+      -- notifications will be generated when a user joins a course by accepting
+      -- an invitation.
+    | CourseRosterChanges
+      -- ^ @COURSE_ROSTER_CHANGES@
+      -- All roster changes for a particular course. Notifications will be
+      -- generated whenever a user joins or leaves a course. No notifications
+      -- will be generated when an invitation is created or deleted, but
+      -- notifications will be generated when a user joins a course by accepting
+      -- an invitation.
+    | CourseWorkChanges
+      -- ^ @COURSE_WORK_CHANGES@
+      -- All course work activity for a particular course. Notifications will be
+      -- generated when a CourseWork or StudentSubmission object is created or
+      -- modified. No notification will be generated when a StudentSubmission
+      -- object is created in connection with the creation or modification of its
+      -- parent CourseWork object (but a notification will be generated for that
+      -- CourseWork object\'s creation or modification).
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable FeedFeedType
+
+instance FromHttpApiData FeedFeedType where
+    parseQueryParam = \case
+        "FEED_TYPE_UNSPECIFIED" -> Right FeedTypeUnspecified
+        "DOMAIN_ROSTER_CHANGES" -> Right DomainRosterChanges
+        "COURSE_ROSTER_CHANGES" -> Right CourseRosterChanges
+        "COURSE_WORK_CHANGES" -> Right CourseWorkChanges
+        x -> Left ("Unable to parse FeedFeedType from: " <> x)
+
+instance ToHttpApiData FeedFeedType where
+    toQueryParam = \case
+        FeedTypeUnspecified -> "FEED_TYPE_UNSPECIFIED"
+        DomainRosterChanges -> "DOMAIN_ROSTER_CHANGES"
+        CourseRosterChanges -> "COURSE_ROSTER_CHANGES"
+        CourseWorkChanges -> "COURSE_WORK_CHANGES"
+
+instance FromJSON FeedFeedType where
+    parseJSON = parseJSONText "FeedFeedType"
+
+instance ToJSON FeedFeedType where
+    toJSON = toJSONText
+
+-- | Permission value.
+data GlobalPermissionPermission
+    = PermissionUnspecified
+      -- ^ @PERMISSION_UNSPECIFIED@
+      -- No permission is specified. This is not returned and is not a valid
+      -- value.
+    | CreateCourse
+      -- ^ @CREATE_COURSE@
+      -- User is permitted to create a course.
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable GlobalPermissionPermission
+
+instance FromHttpApiData GlobalPermissionPermission where
+    parseQueryParam = \case
+        "PERMISSION_UNSPECIFIED" -> Right PermissionUnspecified
+        "CREATE_COURSE" -> Right CreateCourse
+        x -> Left ("Unable to parse GlobalPermissionPermission from: " <> x)
+
+instance ToHttpApiData GlobalPermissionPermission where
+    toQueryParam = \case
+        PermissionUnspecified -> "PERMISSION_UNSPECIFIED"
+        CreateCourse -> "CREATE_COURSE"
+
+instance FromJSON GlobalPermissionPermission where
+    parseJSON = parseJSONText "GlobalPermissionPermission"
+
+instance ToJSON GlobalPermissionPermission where
+    toJSON = toJSONText
+
+-- | Assignee mode of the coursework. If unspecified, the default value is
+-- \`ALL_STUDENTS\`.
+data CourseWorkAssigneeMode
+    = CWAMAssigneeModeUnspecified
+      -- ^ @ASSIGNEE_MODE_UNSPECIFIED@
+      -- No mode specified. This is never returned.
+    | CWAMAllStudents
+      -- ^ @ALL_STUDENTS@
+      -- All students can see the item. This is the default state.
+    | CWAMIndividualStudents
+      -- ^ @INDIVIDUAL_STUDENTS@
+      -- A subset of the students can see the item.
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable CourseWorkAssigneeMode
+
+instance FromHttpApiData CourseWorkAssigneeMode where
+    parseQueryParam = \case
+        "ASSIGNEE_MODE_UNSPECIFIED" -> Right CWAMAssigneeModeUnspecified
+        "ALL_STUDENTS" -> Right CWAMAllStudents
+        "INDIVIDUAL_STUDENTS" -> Right CWAMIndividualStudents
+        x -> Left ("Unable to parse CourseWorkAssigneeMode from: " <> x)
+
+instance ToHttpApiData CourseWorkAssigneeMode where
+    toQueryParam = \case
+        CWAMAssigneeModeUnspecified -> "ASSIGNEE_MODE_UNSPECIFIED"
+        CWAMAllStudents -> "ALL_STUDENTS"
+        CWAMIndividualStudents -> "INDIVIDUAL_STUDENTS"
+
+instance FromJSON CourseWorkAssigneeMode where
+    parseJSON = parseJSONText "CourseWorkAssigneeMode"
+
+instance ToJSON CourseWorkAssigneeMode where
+    toJSON = toJSONText
+
+-- | Setting to determine when students are allowed to modify submissions. If
+-- unspecified, the default value is \`MODIFIABLE_UNTIL_TURNED_IN\`.
+data CourseWorkSubmissionModificationMode
+    = SubmissionModificationModeUnspecified
+      -- ^ @SUBMISSION_MODIFICATION_MODE_UNSPECIFIED@
+      -- No modification mode specified. This is never returned.
+    | ModifiableUntilTurnedIn
+      -- ^ @MODIFIABLE_UNTIL_TURNED_IN@
+      -- Submissions can be modified before being turned in.
+    | Modifiable
+      -- ^ @MODIFIABLE@
+      -- Submissions can be modified at any time.
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable CourseWorkSubmissionModificationMode
+
+instance FromHttpApiData CourseWorkSubmissionModificationMode where
+    parseQueryParam = \case
+        "SUBMISSION_MODIFICATION_MODE_UNSPECIFIED" -> Right SubmissionModificationModeUnspecified
+        "MODIFIABLE_UNTIL_TURNED_IN" -> Right ModifiableUntilTurnedIn
+        "MODIFIABLE" -> Right Modifiable
+        x -> Left ("Unable to parse CourseWorkSubmissionModificationMode from: " <> x)
+
+instance ToHttpApiData CourseWorkSubmissionModificationMode where
+    toQueryParam = \case
+        SubmissionModificationModeUnspecified -> "SUBMISSION_MODIFICATION_MODE_UNSPECIFIED"
+        ModifiableUntilTurnedIn -> "MODIFIABLE_UNTIL_TURNED_IN"
+        Modifiable -> "MODIFIABLE"
+
+instance FromJSON CourseWorkSubmissionModificationMode where
+    parseJSON = parseJSONText "CourseWorkSubmissionModificationMode"
+
+instance ToJSON CourseWorkSubmissionModificationMode where
+    toJSON = toJSONText
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
@@ -23,7 +23,10 @@
 -- Creates an alias for a course. This method returns the following error
 -- codes: * \`PERMISSION_DENIED\` if the requesting user is not permitted
 -- to create the alias or for access errors. * \`NOT_FOUND\` if the course
--- does not exist. * \`ALREADY_EXISTS\` if the alias already exists.
+-- does not exist. * \`ALREADY_EXISTS\` if the alias already exists. *
+-- \`FAILED_PRECONDITION\` if the alias requested does not make sense for
+-- the requesting user or course (for example, if a user not in a domain
+-- attempts to access a domain-scoped alias).
 --
 -- /See:/ <https://developers.google.com/classroom/ Google Classroom API Reference> for @classroom.courses.aliases.create@.
 module Network.Google.Resource.Classroom.Courses.Aliases.Create
@@ -38,12 +41,10 @@
     -- * Request Lenses
     , cacXgafv
     , cacUploadProtocol
-    , cacPp
     , cacCourseId
     , cacAccessToken
     , cacUploadType
     , cacPayload
-    , cacBearerToken
     , cacCallback
     ) where
 
@@ -57,32 +58,31 @@
        "courses" :>
          Capture "courseId" Text :>
            "aliases" :>
-             QueryParam "$.xgafv" Text :>
+             QueryParam "$.xgafv" Xgafv :>
                QueryParam "upload_protocol" Text :>
-                 QueryParam "pp" Bool :>
-                   QueryParam "access_token" Text :>
-                     QueryParam "uploadType" Text :>
-                       QueryParam "bearer_token" Text :>
-                         QueryParam "callback" Text :>
-                           QueryParam "alt" AltJSON :>
-                             ReqBody '[JSON] CourseAlias :>
-                               Post '[JSON] CourseAlias
+                 QueryParam "access_token" Text :>
+                   QueryParam "uploadType" Text :>
+                     QueryParam "callback" Text :>
+                       QueryParam "alt" AltJSON :>
+                         ReqBody '[JSON] CourseAlias :>
+                           Post '[JSON] CourseAlias
 
 -- | Creates an alias for a course. This method returns the following error
 -- codes: * \`PERMISSION_DENIED\` if the requesting user is not permitted
 -- to create the alias or for access errors. * \`NOT_FOUND\` if the course
--- does not exist. * \`ALREADY_EXISTS\` if the alias already exists.
+-- does not exist. * \`ALREADY_EXISTS\` if the alias already exists. *
+-- \`FAILED_PRECONDITION\` if the alias requested does not make sense for
+-- the requesting user or course (for example, if a user not in a domain
+-- attempts to access a domain-scoped alias).
 --
 -- /See:/ 'coursesAliasesCreate' smart constructor.
 data CoursesAliasesCreate = CoursesAliasesCreate'
-    { _cacXgafv          :: !(Maybe Text)
+    { _cacXgafv          :: !(Maybe Xgafv)
     , _cacUploadProtocol :: !(Maybe Text)
-    , _cacPp             :: !Bool
     , _cacCourseId       :: !Text
     , _cacAccessToken    :: !(Maybe Text)
     , _cacUploadType     :: !(Maybe Text)
     , _cacPayload        :: !CourseAlias
-    , _cacBearerToken    :: !(Maybe Text)
     , _cacCallback       :: !(Maybe Text)
     } deriving (Eq,Show,Data,Typeable,Generic)
 
@@ -94,8 +94,6 @@
 --
 -- * 'cacUploadProtocol'
 --
--- * 'cacPp'
---
 -- * 'cacCourseId'
 --
 -- * 'cacAccessToken'
@@ -104,8 +102,6 @@
 --
 -- * 'cacPayload'
 --
--- * 'cacBearerToken'
---
 -- * 'cacCallback'
 coursesAliasesCreate
     :: Text -- ^ 'cacCourseId'
@@ -115,17 +111,15 @@
     CoursesAliasesCreate'
     { _cacXgafv = Nothing
     , _cacUploadProtocol = Nothing
-    , _cacPp = True
     , _cacCourseId = pCacCourseId_
     , _cacAccessToken = Nothing
     , _cacUploadType = Nothing
     , _cacPayload = pCacPayload_
-    , _cacBearerToken = Nothing
     , _cacCallback = Nothing
     }
 
 -- | V1 error format.
-cacXgafv :: Lens' CoursesAliasesCreate (Maybe Text)
+cacXgafv :: Lens' CoursesAliasesCreate (Maybe Xgafv)
 cacXgafv = lens _cacXgafv (\ s a -> s{_cacXgafv = a})
 
 -- | Upload protocol for media (e.g. \"raw\", \"multipart\").
@@ -134,10 +128,6 @@
   = lens _cacUploadProtocol
       (\ s a -> s{_cacUploadProtocol = a})
 
--- | Pretty-print response.
-cacPp :: Lens' CoursesAliasesCreate Bool
-cacPp = lens _cacPp (\ s a -> s{_cacPp = a})
-
 -- | Identifier of the course to alias. This identifier can be either the
 -- Classroom-assigned identifier or an alias.
 cacCourseId :: Lens' CoursesAliasesCreate Text
@@ -161,12 +151,6 @@
 cacPayload
   = lens _cacPayload (\ s a -> s{_cacPayload = a})
 
--- | OAuth bearer token.
-cacBearerToken :: Lens' CoursesAliasesCreate (Maybe Text)
-cacBearerToken
-  = lens _cacBearerToken
-      (\ s a -> s{_cacBearerToken = a})
-
 -- | JSONP
 cacCallback :: Lens' CoursesAliasesCreate (Maybe Text)
 cacCallback
@@ -178,10 +162,8 @@
              '["https://www.googleapis.com/auth/classroom.courses"]
         requestClient CoursesAliasesCreate'{..}
           = go _cacCourseId _cacXgafv _cacUploadProtocol
-              (Just _cacPp)
               _cacAccessToken
               _cacUploadType
-              _cacBearerToken
               _cacCallback
               (Just AltJSON)
               _cacPayload
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
@@ -23,7 +23,9 @@
 -- Deletes an alias of a course. This method returns the following error
 -- codes: * \`PERMISSION_DENIED\` if the requesting user is not permitted
 -- to remove the alias or for access errors. * \`NOT_FOUND\` if the alias
--- does not exist.
+-- does not exist. * \`FAILED_PRECONDITION\` if the alias requested does
+-- not make sense for the requesting user or course (for example, if a user
+-- not in a domain attempts to delete a domain-scoped alias).
 --
 -- /See:/ <https://developers.google.com/classroom/ Google Classroom API Reference> for @classroom.courses.aliases.delete@.
 module Network.Google.Resource.Classroom.Courses.Aliases.Delete
@@ -38,12 +40,10 @@
     -- * Request Lenses
     , cadXgafv
     , cadUploadProtocol
-    , cadPp
     , cadCourseId
     , cadAccessToken
     , cadUploadType
     , cadAlias
-    , cadBearerToken
     , cadCallback
     ) where
 
@@ -58,30 +58,28 @@
          Capture "courseId" Text :>
            "aliases" :>
              Capture "alias" Text :>
-               QueryParam "$.xgafv" Text :>
+               QueryParam "$.xgafv" Xgafv :>
                  QueryParam "upload_protocol" Text :>
-                   QueryParam "pp" Bool :>
-                     QueryParam "access_token" Text :>
-                       QueryParam "uploadType" Text :>
-                         QueryParam "bearer_token" Text :>
-                           QueryParam "callback" Text :>
-                             QueryParam "alt" AltJSON :> Delete '[JSON] Empty
+                   QueryParam "access_token" Text :>
+                     QueryParam "uploadType" Text :>
+                       QueryParam "callback" Text :>
+                         QueryParam "alt" AltJSON :> Delete '[JSON] Empty
 
 -- | Deletes an alias of a course. This method returns the following error
 -- codes: * \`PERMISSION_DENIED\` if the requesting user is not permitted
 -- to remove the alias or for access errors. * \`NOT_FOUND\` if the alias
--- does not exist.
+-- does not exist. * \`FAILED_PRECONDITION\` if the alias requested does
+-- not make sense for the requesting user or course (for example, if a user
+-- not in a domain attempts to delete a domain-scoped alias).
 --
 -- /See:/ 'coursesAliasesDelete' smart constructor.
 data CoursesAliasesDelete = CoursesAliasesDelete'
-    { _cadXgafv          :: !(Maybe Text)
+    { _cadXgafv          :: !(Maybe Xgafv)
     , _cadUploadProtocol :: !(Maybe Text)
-    , _cadPp             :: !Bool
     , _cadCourseId       :: !Text
     , _cadAccessToken    :: !(Maybe Text)
     , _cadUploadType     :: !(Maybe Text)
     , _cadAlias          :: !Text
-    , _cadBearerToken    :: !(Maybe Text)
     , _cadCallback       :: !(Maybe Text)
     } deriving (Eq,Show,Data,Typeable,Generic)
 
@@ -93,8 +91,6 @@
 --
 -- * 'cadUploadProtocol'
 --
--- * 'cadPp'
---
 -- * 'cadCourseId'
 --
 -- * 'cadAccessToken'
@@ -103,8 +99,6 @@
 --
 -- * 'cadAlias'
 --
--- * 'cadBearerToken'
---
 -- * 'cadCallback'
 coursesAliasesDelete
     :: Text -- ^ 'cadCourseId'
@@ -114,17 +108,15 @@
     CoursesAliasesDelete'
     { _cadXgafv = Nothing
     , _cadUploadProtocol = Nothing
-    , _cadPp = True
     , _cadCourseId = pCadCourseId_
     , _cadAccessToken = Nothing
     , _cadUploadType = Nothing
     , _cadAlias = pCadAlias_
-    , _cadBearerToken = Nothing
     , _cadCallback = Nothing
     }
 
 -- | V1 error format.
-cadXgafv :: Lens' CoursesAliasesDelete (Maybe Text)
+cadXgafv :: Lens' CoursesAliasesDelete (Maybe Xgafv)
 cadXgafv = lens _cadXgafv (\ s a -> s{_cadXgafv = a})
 
 -- | Upload protocol for media (e.g. \"raw\", \"multipart\").
@@ -133,10 +125,6 @@
   = lens _cadUploadProtocol
       (\ s a -> s{_cadUploadProtocol = a})
 
--- | Pretty-print response.
-cadPp :: Lens' CoursesAliasesDelete Bool
-cadPp = lens _cadPp (\ s a -> s{_cadPp = a})
-
 -- | Identifier of the course whose alias should be deleted. This identifier
 -- can be either the Classroom-assigned identifier or an alias.
 cadCourseId :: Lens' CoursesAliasesDelete Text
@@ -159,12 +147,6 @@
 cadAlias :: Lens' CoursesAliasesDelete Text
 cadAlias = lens _cadAlias (\ s a -> s{_cadAlias = a})
 
--- | OAuth bearer token.
-cadBearerToken :: Lens' CoursesAliasesDelete (Maybe Text)
-cadBearerToken
-  = lens _cadBearerToken
-      (\ s a -> s{_cadBearerToken = a})
-
 -- | JSONP
 cadCallback :: Lens' CoursesAliasesDelete (Maybe Text)
 cadCallback
@@ -177,10 +159,8 @@
         requestClient CoursesAliasesDelete'{..}
           = go _cadCourseId _cadAlias _cadXgafv
               _cadUploadProtocol
-              (Just _cadPp)
               _cadAccessToken
               _cadUploadType
-              _cadBearerToken
               _cadCallback
               (Just AltJSON)
               classroomService
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
@@ -36,16 +36,14 @@
     , CoursesAliasesList
 
     -- * Request Lenses
-    , calXgafv
-    , calUploadProtocol
-    , calPp
-    , calCourseId
-    , calAccessToken
-    , calUploadType
-    , calBearerToken
-    , calPageToken
-    , calPageSize
-    , calCallback
+    , calaXgafv
+    , calaUploadProtocol
+    , calaCourseId
+    , calaAccessToken
+    , calaUploadType
+    , calaPageToken
+    , calaPageSize
+    , calaCallback
     ) where
 
 import           Network.Google.Classroom.Types
@@ -58,17 +56,15 @@
        "courses" :>
          Capture "courseId" Text :>
            "aliases" :>
-             QueryParam "$.xgafv" Text :>
+             QueryParam "$.xgafv" Xgafv :>
                QueryParam "upload_protocol" Text :>
-                 QueryParam "pp" Bool :>
-                   QueryParam "access_token" Text :>
-                     QueryParam "uploadType" Text :>
-                       QueryParam "bearer_token" Text :>
-                         QueryParam "pageToken" Text :>
-                           QueryParam "pageSize" (Textual Int32) :>
-                             QueryParam "callback" Text :>
-                               QueryParam "alt" AltJSON :>
-                                 Get '[JSON] ListCourseAliasesResponse
+                 QueryParam "access_token" Text :>
+                   QueryParam "uploadType" Text :>
+                     QueryParam "pageToken" Text :>
+                       QueryParam "pageSize" (Textual Int32) :>
+                         QueryParam "callback" Text :>
+                           QueryParam "alt" AltJSON :>
+                             Get '[JSON] ListCourseAliasesResponse
 
 -- | Returns a list of aliases for a course. This method returns the
 -- following error codes: * \`PERMISSION_DENIED\` if the requesting user is
@@ -77,115 +73,99 @@
 --
 -- /See:/ 'coursesAliasesList' smart constructor.
 data CoursesAliasesList = CoursesAliasesList'
-    { _calXgafv          :: !(Maybe Text)
-    , _calUploadProtocol :: !(Maybe Text)
-    , _calPp             :: !Bool
-    , _calCourseId       :: !Text
-    , _calAccessToken    :: !(Maybe Text)
-    , _calUploadType     :: !(Maybe Text)
-    , _calBearerToken    :: !(Maybe Text)
-    , _calPageToken      :: !(Maybe Text)
-    , _calPageSize       :: !(Maybe (Textual Int32))
-    , _calCallback       :: !(Maybe Text)
+    { _calaXgafv          :: !(Maybe Xgafv)
+    , _calaUploadProtocol :: !(Maybe Text)
+    , _calaCourseId       :: !Text
+    , _calaAccessToken    :: !(Maybe Text)
+    , _calaUploadType     :: !(Maybe Text)
+    , _calaPageToken      :: !(Maybe Text)
+    , _calaPageSize       :: !(Maybe (Textual Int32))
+    , _calaCallback       :: !(Maybe Text)
     } deriving (Eq,Show,Data,Typeable,Generic)
 
 -- | Creates a value of 'CoursesAliasesList' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
 --
--- * 'calXgafv'
---
--- * 'calUploadProtocol'
---
--- * 'calPp'
+-- * 'calaXgafv'
 --
--- * 'calCourseId'
+-- * 'calaUploadProtocol'
 --
--- * 'calAccessToken'
+-- * 'calaCourseId'
 --
--- * 'calUploadType'
+-- * 'calaAccessToken'
 --
--- * 'calBearerToken'
+-- * 'calaUploadType'
 --
--- * 'calPageToken'
+-- * 'calaPageToken'
 --
--- * 'calPageSize'
+-- * 'calaPageSize'
 --
--- * 'calCallback'
+-- * 'calaCallback'
 coursesAliasesList
-    :: Text -- ^ 'calCourseId'
+    :: Text -- ^ 'calaCourseId'
     -> CoursesAliasesList
-coursesAliasesList pCalCourseId_ =
+coursesAliasesList pCalaCourseId_ =
     CoursesAliasesList'
-    { _calXgafv = Nothing
-    , _calUploadProtocol = Nothing
-    , _calPp = True
-    , _calCourseId = pCalCourseId_
-    , _calAccessToken = Nothing
-    , _calUploadType = Nothing
-    , _calBearerToken = Nothing
-    , _calPageToken = Nothing
-    , _calPageSize = Nothing
-    , _calCallback = Nothing
+    { _calaXgafv = Nothing
+    , _calaUploadProtocol = Nothing
+    , _calaCourseId = pCalaCourseId_
+    , _calaAccessToken = Nothing
+    , _calaUploadType = Nothing
+    , _calaPageToken = Nothing
+    , _calaPageSize = Nothing
+    , _calaCallback = Nothing
     }
 
 -- | V1 error format.
-calXgafv :: Lens' CoursesAliasesList (Maybe Text)
-calXgafv = lens _calXgafv (\ s a -> s{_calXgafv = a})
+calaXgafv :: Lens' CoursesAliasesList (Maybe Xgafv)
+calaXgafv
+  = lens _calaXgafv (\ s a -> s{_calaXgafv = a})
 
 -- | Upload protocol for media (e.g. \"raw\", \"multipart\").
-calUploadProtocol :: Lens' CoursesAliasesList (Maybe Text)
-calUploadProtocol
-  = lens _calUploadProtocol
-      (\ s a -> s{_calUploadProtocol = a})
-
--- | Pretty-print response.
-calPp :: Lens' CoursesAliasesList Bool
-calPp = lens _calPp (\ s a -> s{_calPp = a})
+calaUploadProtocol :: Lens' CoursesAliasesList (Maybe Text)
+calaUploadProtocol
+  = lens _calaUploadProtocol
+      (\ s a -> s{_calaUploadProtocol = a})
 
 -- | The identifier of the course. This identifier can be either the
 -- Classroom-assigned identifier or an alias.
-calCourseId :: Lens' CoursesAliasesList Text
-calCourseId
-  = lens _calCourseId (\ s a -> s{_calCourseId = a})
+calaCourseId :: Lens' CoursesAliasesList Text
+calaCourseId
+  = lens _calaCourseId (\ s a -> s{_calaCourseId = a})
 
 -- | OAuth access token.
-calAccessToken :: Lens' CoursesAliasesList (Maybe Text)
-calAccessToken
-  = lens _calAccessToken
-      (\ s a -> s{_calAccessToken = a})
+calaAccessToken :: Lens' CoursesAliasesList (Maybe Text)
+calaAccessToken
+  = lens _calaAccessToken
+      (\ s a -> s{_calaAccessToken = a})
 
 -- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
-calUploadType :: Lens' CoursesAliasesList (Maybe Text)
-calUploadType
-  = lens _calUploadType
-      (\ s a -> s{_calUploadType = a})
-
--- | OAuth bearer token.
-calBearerToken :: Lens' CoursesAliasesList (Maybe Text)
-calBearerToken
-  = lens _calBearerToken
-      (\ s a -> s{_calBearerToken = a})
+calaUploadType :: Lens' CoursesAliasesList (Maybe Text)
+calaUploadType
+  = lens _calaUploadType
+      (\ s a -> s{_calaUploadType = a})
 
 -- | nextPageToken value returned from a previous list call, indicating that
 -- the subsequent page of results should be returned. The list request must
 -- be otherwise identical to the one that resulted in this token.
-calPageToken :: Lens' CoursesAliasesList (Maybe Text)
-calPageToken
-  = lens _calPageToken (\ s a -> s{_calPageToken = a})
+calaPageToken :: Lens' CoursesAliasesList (Maybe Text)
+calaPageToken
+  = lens _calaPageToken
+      (\ s a -> s{_calaPageToken = a})
 
 -- | Maximum number of items to return. Zero or unspecified indicates that
 -- the server may assign a maximum. The server may return fewer than the
 -- specified number of results.
-calPageSize :: Lens' CoursesAliasesList (Maybe Int32)
-calPageSize
-  = lens _calPageSize (\ s a -> s{_calPageSize = a}) .
-      mapping _Coerce
+calaPageSize :: Lens' CoursesAliasesList (Maybe Int32)
+calaPageSize
+  = lens _calaPageSize (\ s a -> s{_calaPageSize = a})
+      . mapping _Coerce
 
 -- | JSONP
-calCallback :: Lens' CoursesAliasesList (Maybe Text)
-calCallback
-  = lens _calCallback (\ s a -> s{_calCallback = a})
+calaCallback :: Lens' CoursesAliasesList (Maybe Text)
+calaCallback
+  = lens _calaCallback (\ s a -> s{_calaCallback = a})
 
 instance GoogleRequest CoursesAliasesList where
         type Rs CoursesAliasesList =
@@ -194,14 +174,12 @@
              '["https://www.googleapis.com/auth/classroom.courses",
                "https://www.googleapis.com/auth/classroom.courses.readonly"]
         requestClient CoursesAliasesList'{..}
-          = go _calCourseId _calXgafv _calUploadProtocol
-              (Just _calPp)
-              _calAccessToken
-              _calUploadType
-              _calBearerToken
-              _calPageToken
-              _calPageSize
-              _calCallback
+          = go _calaCourseId _calaXgafv _calaUploadProtocol
+              _calaAccessToken
+              _calaUploadType
+              _calaPageToken
+              _calaPageSize
+              _calaCallback
               (Just AltJSON)
               classroomService
           where go
diff --git a/gen/Network/Google/Resource/Classroom/Courses/Announcements/Create.hs b/gen/Network/Google/Resource/Classroom/Courses/Announcements/Create.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Classroom/Courses/Announcements/Create.hs
@@ -0,0 +1,175 @@
+{-# 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.Announcements.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 an announcement. This method returns the following error codes:
+-- * \`PERMISSION_DENIED\` if the requesting user is not permitted to
+-- access the requested course, create announcements in the requested
+-- course, share a Drive attachment, or for access errors. *
+-- \`INVALID_ARGUMENT\` if the request is malformed. * \`NOT_FOUND\` if the
+-- requested course does not exist. * \`FAILED_PRECONDITION\` for the
+-- following request error: * AttachmentNotVisible
+--
+-- /See:/ <https://developers.google.com/classroom/ Google Classroom API Reference> for @classroom.courses.announcements.create@.
+module Network.Google.Resource.Classroom.Courses.Announcements.Create
+    (
+    -- * REST Resource
+      CoursesAnnouncementsCreateResource
+
+    -- * Creating a Request
+    , coursesAnnouncementsCreate
+    , CoursesAnnouncementsCreate
+
+    -- * Request Lenses
+    , couXgafv
+    , couUploadProtocol
+    , couCourseId
+    , couAccessToken
+    , couUploadType
+    , couPayload
+    , couCallback
+    ) where
+
+import           Network.Google.Classroom.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @classroom.courses.announcements.create@ method which the
+-- 'CoursesAnnouncementsCreate' request conforms to.
+type CoursesAnnouncementsCreateResource =
+     "v1" :>
+       "courses" :>
+         Capture "courseId" Text :>
+           "announcements" :>
+             QueryParam "$.xgafv" Xgafv :>
+               QueryParam "upload_protocol" Text :>
+                 QueryParam "access_token" Text :>
+                   QueryParam "uploadType" Text :>
+                     QueryParam "callback" Text :>
+                       QueryParam "alt" AltJSON :>
+                         ReqBody '[JSON] Announcement :>
+                           Post '[JSON] Announcement
+
+-- | Creates an announcement. This method returns the following error codes:
+-- * \`PERMISSION_DENIED\` if the requesting user is not permitted to
+-- access the requested course, create announcements in the requested
+-- course, share a Drive attachment, or for access errors. *
+-- \`INVALID_ARGUMENT\` if the request is malformed. * \`NOT_FOUND\` if the
+-- requested course does not exist. * \`FAILED_PRECONDITION\` for the
+-- following request error: * AttachmentNotVisible
+--
+-- /See:/ 'coursesAnnouncementsCreate' smart constructor.
+data CoursesAnnouncementsCreate = CoursesAnnouncementsCreate'
+    { _couXgafv          :: !(Maybe Xgafv)
+    , _couUploadProtocol :: !(Maybe Text)
+    , _couCourseId       :: !Text
+    , _couAccessToken    :: !(Maybe Text)
+    , _couUploadType     :: !(Maybe Text)
+    , _couPayload        :: !Announcement
+    , _couCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CoursesAnnouncementsCreate' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'couXgafv'
+--
+-- * 'couUploadProtocol'
+--
+-- * 'couCourseId'
+--
+-- * 'couAccessToken'
+--
+-- * 'couUploadType'
+--
+-- * 'couPayload'
+--
+-- * 'couCallback'
+coursesAnnouncementsCreate
+    :: Text -- ^ 'couCourseId'
+    -> Announcement -- ^ 'couPayload'
+    -> CoursesAnnouncementsCreate
+coursesAnnouncementsCreate pCouCourseId_ pCouPayload_ =
+    CoursesAnnouncementsCreate'
+    { _couXgafv = Nothing
+    , _couUploadProtocol = Nothing
+    , _couCourseId = pCouCourseId_
+    , _couAccessToken = Nothing
+    , _couUploadType = Nothing
+    , _couPayload = pCouPayload_
+    , _couCallback = Nothing
+    }
+
+-- | V1 error format.
+couXgafv :: Lens' CoursesAnnouncementsCreate (Maybe Xgafv)
+couXgafv = lens _couXgafv (\ s a -> s{_couXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+couUploadProtocol :: Lens' CoursesAnnouncementsCreate (Maybe Text)
+couUploadProtocol
+  = lens _couUploadProtocol
+      (\ s a -> s{_couUploadProtocol = a})
+
+-- | Identifier of the course. This identifier can be either the
+-- Classroom-assigned identifier or an alias.
+couCourseId :: Lens' CoursesAnnouncementsCreate Text
+couCourseId
+  = lens _couCourseId (\ s a -> s{_couCourseId = a})
+
+-- | OAuth access token.
+couAccessToken :: Lens' CoursesAnnouncementsCreate (Maybe Text)
+couAccessToken
+  = lens _couAccessToken
+      (\ s a -> s{_couAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+couUploadType :: Lens' CoursesAnnouncementsCreate (Maybe Text)
+couUploadType
+  = lens _couUploadType
+      (\ s a -> s{_couUploadType = a})
+
+-- | Multipart request metadata.
+couPayload :: Lens' CoursesAnnouncementsCreate Announcement
+couPayload
+  = lens _couPayload (\ s a -> s{_couPayload = a})
+
+-- | JSONP
+couCallback :: Lens' CoursesAnnouncementsCreate (Maybe Text)
+couCallback
+  = lens _couCallback (\ s a -> s{_couCallback = a})
+
+instance GoogleRequest CoursesAnnouncementsCreate
+         where
+        type Rs CoursesAnnouncementsCreate = Announcement
+        type Scopes CoursesAnnouncementsCreate =
+             '["https://www.googleapis.com/auth/classroom.announcements"]
+        requestClient CoursesAnnouncementsCreate'{..}
+          = go _couCourseId _couXgafv _couUploadProtocol
+              _couAccessToken
+              _couUploadType
+              _couCallback
+              (Just AltJSON)
+              _couPayload
+              classroomService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy CoursesAnnouncementsCreateResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Classroom/Courses/Announcements/Delete.hs b/gen/Network/Google/Resource/Classroom/Courses/Announcements/Delete.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Classroom/Courses/Announcements/Delete.hs
@@ -0,0 +1,175 @@
+{-# 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.Announcements.Delete
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes an announcement. 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 announcement item. This method returns the following
+-- error codes: * \`PERMISSION_DENIED\` if the requesting developer project
+-- did not create the corresponding announcement, if the requesting user is
+-- not permitted to delete the requested course or for access errors. *
+-- \`FAILED_PRECONDITION\` if the requested announcement has already been
+-- deleted. * \`NOT_FOUND\` if no course exists with the requested ID.
+--
+-- /See:/ <https://developers.google.com/classroom/ Google Classroom API Reference> for @classroom.courses.announcements.delete@.
+module Network.Google.Resource.Classroom.Courses.Announcements.Delete
+    (
+    -- * REST Resource
+      CoursesAnnouncementsDeleteResource
+
+    -- * Creating a Request
+    , coursesAnnouncementsDelete
+    , CoursesAnnouncementsDelete
+
+    -- * Request Lenses
+    , cXgafv
+    , cUploadProtocol
+    , cCourseId
+    , cAccessToken
+    , cUploadType
+    , cId
+    , cCallback
+    ) where
+
+import           Network.Google.Classroom.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @classroom.courses.announcements.delete@ method which the
+-- 'CoursesAnnouncementsDelete' request conforms to.
+type CoursesAnnouncementsDeleteResource =
+     "v1" :>
+       "courses" :>
+         Capture "courseId" Text :>
+           "announcements" :>
+             Capture "id" Text :>
+               QueryParam "$.xgafv" Xgafv :>
+                 QueryParam "upload_protocol" Text :>
+                   QueryParam "access_token" Text :>
+                     QueryParam "uploadType" Text :>
+                       QueryParam "callback" Text :>
+                         QueryParam "alt" AltJSON :> Delete '[JSON] Empty
+
+-- | Deletes an announcement. 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 announcement item. This method returns the following
+-- error codes: * \`PERMISSION_DENIED\` if the requesting developer project
+-- did not create the corresponding announcement, if the requesting user is
+-- not permitted to delete the requested course or for access errors. *
+-- \`FAILED_PRECONDITION\` if the requested announcement has already been
+-- deleted. * \`NOT_FOUND\` if no course exists with the requested ID.
+--
+-- /See:/ 'coursesAnnouncementsDelete' smart constructor.
+data CoursesAnnouncementsDelete = CoursesAnnouncementsDelete'
+    { _cXgafv          :: !(Maybe Xgafv)
+    , _cUploadProtocol :: !(Maybe Text)
+    , _cCourseId       :: !Text
+    , _cAccessToken    :: !(Maybe Text)
+    , _cUploadType     :: !(Maybe Text)
+    , _cId             :: !Text
+    , _cCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CoursesAnnouncementsDelete' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cXgafv'
+--
+-- * 'cUploadProtocol'
+--
+-- * 'cCourseId'
+--
+-- * 'cAccessToken'
+--
+-- * 'cUploadType'
+--
+-- * 'cId'
+--
+-- * 'cCallback'
+coursesAnnouncementsDelete
+    :: Text -- ^ 'cCourseId'
+    -> Text -- ^ 'cId'
+    -> CoursesAnnouncementsDelete
+coursesAnnouncementsDelete pCCourseId_ pCId_ =
+    CoursesAnnouncementsDelete'
+    { _cXgafv = Nothing
+    , _cUploadProtocol = Nothing
+    , _cCourseId = pCCourseId_
+    , _cAccessToken = Nothing
+    , _cUploadType = Nothing
+    , _cId = pCId_
+    , _cCallback = Nothing
+    }
+
+-- | V1 error format.
+cXgafv :: Lens' CoursesAnnouncementsDelete (Maybe Xgafv)
+cXgafv = lens _cXgafv (\ s a -> s{_cXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+cUploadProtocol :: Lens' CoursesAnnouncementsDelete (Maybe Text)
+cUploadProtocol
+  = lens _cUploadProtocol
+      (\ s a -> s{_cUploadProtocol = a})
+
+-- | Identifier of the course. This identifier can be either the
+-- Classroom-assigned identifier or an alias.
+cCourseId :: Lens' CoursesAnnouncementsDelete Text
+cCourseId
+  = lens _cCourseId (\ s a -> s{_cCourseId = a})
+
+-- | OAuth access token.
+cAccessToken :: Lens' CoursesAnnouncementsDelete (Maybe Text)
+cAccessToken
+  = lens _cAccessToken (\ s a -> s{_cAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+cUploadType :: Lens' CoursesAnnouncementsDelete (Maybe Text)
+cUploadType
+  = lens _cUploadType (\ s a -> s{_cUploadType = a})
+
+-- | Identifier of the announcement to delete. This identifier is a
+-- Classroom-assigned identifier.
+cId :: Lens' CoursesAnnouncementsDelete Text
+cId = lens _cId (\ s a -> s{_cId = a})
+
+-- | JSONP
+cCallback :: Lens' CoursesAnnouncementsDelete (Maybe Text)
+cCallback
+  = lens _cCallback (\ s a -> s{_cCallback = a})
+
+instance GoogleRequest CoursesAnnouncementsDelete
+         where
+        type Rs CoursesAnnouncementsDelete = Empty
+        type Scopes CoursesAnnouncementsDelete =
+             '["https://www.googleapis.com/auth/classroom.announcements"]
+        requestClient CoursesAnnouncementsDelete'{..}
+          = go _cCourseId _cId _cXgafv _cUploadProtocol
+              _cAccessToken
+              _cUploadType
+              _cCallback
+              (Just AltJSON)
+              classroomService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy CoursesAnnouncementsDeleteResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Classroom/Courses/Announcements/Get.hs b/gen/Network/Google/Resource/Classroom/Courses/Announcements/Get.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Classroom/Courses/Announcements/Get.hs
@@ -0,0 +1,168 @@
+{-# 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.Announcements.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 an announcement. This method returns the following error codes:
+-- * \`PERMISSION_DENIED\` if the requesting user is not permitted to
+-- access the requested course or announcement, or for access errors. *
+-- \`INVALID_ARGUMENT\` if the request is malformed. * \`NOT_FOUND\` if the
+-- requested course or announcement does not exist.
+--
+-- /See:/ <https://developers.google.com/classroom/ Google Classroom API Reference> for @classroom.courses.announcements.get@.
+module Network.Google.Resource.Classroom.Courses.Announcements.Get
+    (
+    -- * REST Resource
+      CoursesAnnouncementsGetResource
+
+    -- * Creating a Request
+    , coursesAnnouncementsGet
+    , CoursesAnnouncementsGet
+
+    -- * Request Lenses
+    , cagXgafv
+    , cagUploadProtocol
+    , cagCourseId
+    , cagAccessToken
+    , cagUploadType
+    , cagId
+    , cagCallback
+    ) where
+
+import           Network.Google.Classroom.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @classroom.courses.announcements.get@ method which the
+-- 'CoursesAnnouncementsGet' request conforms to.
+type CoursesAnnouncementsGetResource =
+     "v1" :>
+       "courses" :>
+         Capture "courseId" Text :>
+           "announcements" :>
+             Capture "id" Text :>
+               QueryParam "$.xgafv" Xgafv :>
+                 QueryParam "upload_protocol" Text :>
+                   QueryParam "access_token" Text :>
+                     QueryParam "uploadType" Text :>
+                       QueryParam "callback" Text :>
+                         QueryParam "alt" AltJSON :> Get '[JSON] Announcement
+
+-- | Returns an announcement. This method returns the following error codes:
+-- * \`PERMISSION_DENIED\` if the requesting user is not permitted to
+-- access the requested course or announcement, or for access errors. *
+-- \`INVALID_ARGUMENT\` if the request is malformed. * \`NOT_FOUND\` if the
+-- requested course or announcement does not exist.
+--
+-- /See:/ 'coursesAnnouncementsGet' smart constructor.
+data CoursesAnnouncementsGet = CoursesAnnouncementsGet'
+    { _cagXgafv          :: !(Maybe Xgafv)
+    , _cagUploadProtocol :: !(Maybe Text)
+    , _cagCourseId       :: !Text
+    , _cagAccessToken    :: !(Maybe Text)
+    , _cagUploadType     :: !(Maybe Text)
+    , _cagId             :: !Text
+    , _cagCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CoursesAnnouncementsGet' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cagXgafv'
+--
+-- * 'cagUploadProtocol'
+--
+-- * 'cagCourseId'
+--
+-- * 'cagAccessToken'
+--
+-- * 'cagUploadType'
+--
+-- * 'cagId'
+--
+-- * 'cagCallback'
+coursesAnnouncementsGet
+    :: Text -- ^ 'cagCourseId'
+    -> Text -- ^ 'cagId'
+    -> CoursesAnnouncementsGet
+coursesAnnouncementsGet pCagCourseId_ pCagId_ =
+    CoursesAnnouncementsGet'
+    { _cagXgafv = Nothing
+    , _cagUploadProtocol = Nothing
+    , _cagCourseId = pCagCourseId_
+    , _cagAccessToken = Nothing
+    , _cagUploadType = Nothing
+    , _cagId = pCagId_
+    , _cagCallback = Nothing
+    }
+
+-- | V1 error format.
+cagXgafv :: Lens' CoursesAnnouncementsGet (Maybe Xgafv)
+cagXgafv = lens _cagXgafv (\ s a -> s{_cagXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+cagUploadProtocol :: Lens' CoursesAnnouncementsGet (Maybe Text)
+cagUploadProtocol
+  = lens _cagUploadProtocol
+      (\ s a -> s{_cagUploadProtocol = a})
+
+-- | Identifier of the course. This identifier can be either the
+-- Classroom-assigned identifier or an alias.
+cagCourseId :: Lens' CoursesAnnouncementsGet Text
+cagCourseId
+  = lens _cagCourseId (\ s a -> s{_cagCourseId = a})
+
+-- | OAuth access token.
+cagAccessToken :: Lens' CoursesAnnouncementsGet (Maybe Text)
+cagAccessToken
+  = lens _cagAccessToken
+      (\ s a -> s{_cagAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+cagUploadType :: Lens' CoursesAnnouncementsGet (Maybe Text)
+cagUploadType
+  = lens _cagUploadType
+      (\ s a -> s{_cagUploadType = a})
+
+-- | Identifier of the announcement.
+cagId :: Lens' CoursesAnnouncementsGet Text
+cagId = lens _cagId (\ s a -> s{_cagId = a})
+
+-- | JSONP
+cagCallback :: Lens' CoursesAnnouncementsGet (Maybe Text)
+cagCallback
+  = lens _cagCallback (\ s a -> s{_cagCallback = a})
+
+instance GoogleRequest CoursesAnnouncementsGet where
+        type Rs CoursesAnnouncementsGet = Announcement
+        type Scopes CoursesAnnouncementsGet =
+             '["https://www.googleapis.com/auth/classroom.announcements",
+               "https://www.googleapis.com/auth/classroom.announcements.readonly"]
+        requestClient CoursesAnnouncementsGet'{..}
+          = go _cagCourseId _cagId _cagXgafv _cagUploadProtocol
+              _cagAccessToken
+              _cagUploadType
+              _cagCallback
+              (Just AltJSON)
+              classroomService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy CoursesAnnouncementsGetResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Classroom/Courses/Announcements/List.hs b/gen/Network/Google/Resource/Classroom/Courses/Announcements/List.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Classroom/Courses/Announcements/List.hs
@@ -0,0 +1,224 @@
+{-# 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.Announcements.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 announcements that the requester is permitted to view.
+-- Course students may only view \`PUBLISHED\` announcements. Course
+-- teachers and domain administrators may view all announcements. 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.announcements.list@.
+module Network.Google.Resource.Classroom.Courses.Announcements.List
+    (
+    -- * REST Resource
+      CoursesAnnouncementsListResource
+
+    -- * Creating a Request
+    , coursesAnnouncementsList
+    , CoursesAnnouncementsList
+
+    -- * Request Lenses
+    , calXgafv
+    , calUploadProtocol
+    , calOrderBy
+    , calAnnouncementStates
+    , calCourseId
+    , calAccessToken
+    , calUploadType
+    , calPageToken
+    , calPageSize
+    , calCallback
+    ) where
+
+import           Network.Google.Classroom.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @classroom.courses.announcements.list@ method which the
+-- 'CoursesAnnouncementsList' request conforms to.
+type CoursesAnnouncementsListResource =
+     "v1" :>
+       "courses" :>
+         Capture "courseId" Text :>
+           "announcements" :>
+             QueryParam "$.xgafv" Xgafv :>
+               QueryParam "upload_protocol" Text :>
+                 QueryParam "orderBy" Text :>
+                   QueryParams "announcementStates" Text :>
+                     QueryParam "access_token" Text :>
+                       QueryParam "uploadType" Text :>
+                         QueryParam "pageToken" Text :>
+                           QueryParam "pageSize" (Textual Int32) :>
+                             QueryParam "callback" Text :>
+                               QueryParam "alt" AltJSON :>
+                                 Get '[JSON] ListAnnouncementsResponse
+
+-- | Returns a list of announcements that the requester is permitted to view.
+-- Course students may only view \`PUBLISHED\` announcements. Course
+-- teachers and domain administrators may view all announcements. 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:/ 'coursesAnnouncementsList' smart constructor.
+data CoursesAnnouncementsList = CoursesAnnouncementsList'
+    { _calXgafv              :: !(Maybe Xgafv)
+    , _calUploadProtocol     :: !(Maybe Text)
+    , _calOrderBy            :: !(Maybe Text)
+    , _calAnnouncementStates :: !(Maybe [Text])
+    , _calCourseId           :: !Text
+    , _calAccessToken        :: !(Maybe Text)
+    , _calUploadType         :: !(Maybe Text)
+    , _calPageToken          :: !(Maybe Text)
+    , _calPageSize           :: !(Maybe (Textual Int32))
+    , _calCallback           :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CoursesAnnouncementsList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'calXgafv'
+--
+-- * 'calUploadProtocol'
+--
+-- * 'calOrderBy'
+--
+-- * 'calAnnouncementStates'
+--
+-- * 'calCourseId'
+--
+-- * 'calAccessToken'
+--
+-- * 'calUploadType'
+--
+-- * 'calPageToken'
+--
+-- * 'calPageSize'
+--
+-- * 'calCallback'
+coursesAnnouncementsList
+    :: Text -- ^ 'calCourseId'
+    -> CoursesAnnouncementsList
+coursesAnnouncementsList pCalCourseId_ =
+    CoursesAnnouncementsList'
+    { _calXgafv = Nothing
+    , _calUploadProtocol = Nothing
+    , _calOrderBy = Nothing
+    , _calAnnouncementStates = Nothing
+    , _calCourseId = pCalCourseId_
+    , _calAccessToken = Nothing
+    , _calUploadType = Nothing
+    , _calPageToken = Nothing
+    , _calPageSize = Nothing
+    , _calCallback = Nothing
+    }
+
+-- | V1 error format.
+calXgafv :: Lens' CoursesAnnouncementsList (Maybe Xgafv)
+calXgafv = lens _calXgafv (\ s a -> s{_calXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+calUploadProtocol :: Lens' CoursesAnnouncementsList (Maybe Text)
+calUploadProtocol
+  = lens _calUploadProtocol
+      (\ s a -> s{_calUploadProtocol = a})
+
+-- | Optional sort ordering for results. A comma-separated list of fields
+-- with an optional sort direction keyword. Supported field is
+-- \`updateTime\`. Supported direction keywords are \`asc\` and \`desc\`.
+-- If not specified, \`updateTime desc\` is the default behavior. Examples:
+-- \`updateTime asc\`, \`updateTime\`
+calOrderBy :: Lens' CoursesAnnouncementsList (Maybe Text)
+calOrderBy
+  = lens _calOrderBy (\ s a -> s{_calOrderBy = a})
+
+-- | Restriction on the \`state\` of announcements returned. If this argument
+-- is left unspecified, the default value is \`PUBLISHED\`.
+calAnnouncementStates :: Lens' CoursesAnnouncementsList [Text]
+calAnnouncementStates
+  = lens _calAnnouncementStates
+      (\ s a -> s{_calAnnouncementStates = a})
+      . _Default
+      . _Coerce
+
+-- | Identifier of the course. This identifier can be either the
+-- Classroom-assigned identifier or an alias.
+calCourseId :: Lens' CoursesAnnouncementsList Text
+calCourseId
+  = lens _calCourseId (\ s a -> s{_calCourseId = a})
+
+-- | OAuth access token.
+calAccessToken :: Lens' CoursesAnnouncementsList (Maybe Text)
+calAccessToken
+  = lens _calAccessToken
+      (\ s a -> s{_calAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+calUploadType :: Lens' CoursesAnnouncementsList (Maybe Text)
+calUploadType
+  = lens _calUploadType
+      (\ s a -> s{_calUploadType = a})
+
+-- | nextPageToken value returned from a previous list call, indicating that
+-- the subsequent page of results should be returned. The list request must
+-- be otherwise identical to the one that resulted in this token.
+calPageToken :: Lens' CoursesAnnouncementsList (Maybe Text)
+calPageToken
+  = lens _calPageToken (\ s a -> s{_calPageToken = a})
+
+-- | Maximum number of items to return. Zero or unspecified indicates that
+-- the server may assign a maximum. The server may return fewer than the
+-- specified number of results.
+calPageSize :: Lens' CoursesAnnouncementsList (Maybe Int32)
+calPageSize
+  = lens _calPageSize (\ s a -> s{_calPageSize = a}) .
+      mapping _Coerce
+
+-- | JSONP
+calCallback :: Lens' CoursesAnnouncementsList (Maybe Text)
+calCallback
+  = lens _calCallback (\ s a -> s{_calCallback = a})
+
+instance GoogleRequest CoursesAnnouncementsList where
+        type Rs CoursesAnnouncementsList =
+             ListAnnouncementsResponse
+        type Scopes CoursesAnnouncementsList =
+             '["https://www.googleapis.com/auth/classroom.announcements",
+               "https://www.googleapis.com/auth/classroom.announcements.readonly"]
+        requestClient CoursesAnnouncementsList'{..}
+          = go _calCourseId _calXgafv _calUploadProtocol
+              _calOrderBy
+              (_calAnnouncementStates ^. _Default)
+              _calAccessToken
+              _calUploadType
+              _calPageToken
+              _calPageSize
+              _calCallback
+              (Just AltJSON)
+              classroomService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy CoursesAnnouncementsListResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Classroom/Courses/Announcements/ModifyAssignees.hs b/gen/Network/Google/Resource/Classroom/Courses/Announcements/ModifyAssignees.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Classroom/Courses/Announcements/ModifyAssignees.hs
@@ -0,0 +1,191 @@
+{-# 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.Announcements.ModifyAssignees
+-- 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 assignee mode and options of an announcement. Only a teacher of
+-- the course that contains the announcement may call this method. 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.announcements.modifyAssignees@.
+module Network.Google.Resource.Classroom.Courses.Announcements.ModifyAssignees
+    (
+    -- * REST Resource
+      CoursesAnnouncementsModifyAssigneesResource
+
+    -- * Creating a Request
+    , coursesAnnouncementsModifyAssignees
+    , CoursesAnnouncementsModifyAssignees
+
+    -- * Request Lenses
+    , camaXgafv
+    , camaUploadProtocol
+    , camaCourseId
+    , camaAccessToken
+    , camaUploadType
+    , camaPayload
+    , camaId
+    , camaCallback
+    ) where
+
+import           Network.Google.Classroom.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @classroom.courses.announcements.modifyAssignees@ method which the
+-- 'CoursesAnnouncementsModifyAssignees' request conforms to.
+type CoursesAnnouncementsModifyAssigneesResource =
+     "v1" :>
+       "courses" :>
+         Capture "courseId" Text :>
+           "announcements" :>
+             CaptureMode "id" "modifyAssignees" Text :>
+               QueryParam "$.xgafv" Xgafv :>
+                 QueryParam "upload_protocol" Text :>
+                   QueryParam "access_token" Text :>
+                     QueryParam "uploadType" Text :>
+                       QueryParam "callback" Text :>
+                         QueryParam "alt" AltJSON :>
+                           ReqBody '[JSON] ModifyAnnouncementAssigneesRequest :>
+                             Post '[JSON] Announcement
+
+-- | Modifies assignee mode and options of an announcement. Only a teacher of
+-- the course that contains the announcement may call this method. 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:/ 'coursesAnnouncementsModifyAssignees' smart constructor.
+data CoursesAnnouncementsModifyAssignees = CoursesAnnouncementsModifyAssignees'
+    { _camaXgafv          :: !(Maybe Xgafv)
+    , _camaUploadProtocol :: !(Maybe Text)
+    , _camaCourseId       :: !Text
+    , _camaAccessToken    :: !(Maybe Text)
+    , _camaUploadType     :: !(Maybe Text)
+    , _camaPayload        :: !ModifyAnnouncementAssigneesRequest
+    , _camaId             :: !Text
+    , _camaCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CoursesAnnouncementsModifyAssignees' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'camaXgafv'
+--
+-- * 'camaUploadProtocol'
+--
+-- * 'camaCourseId'
+--
+-- * 'camaAccessToken'
+--
+-- * 'camaUploadType'
+--
+-- * 'camaPayload'
+--
+-- * 'camaId'
+--
+-- * 'camaCallback'
+coursesAnnouncementsModifyAssignees
+    :: Text -- ^ 'camaCourseId'
+    -> ModifyAnnouncementAssigneesRequest -- ^ 'camaPayload'
+    -> Text -- ^ 'camaId'
+    -> CoursesAnnouncementsModifyAssignees
+coursesAnnouncementsModifyAssignees pCamaCourseId_ pCamaPayload_ pCamaId_ =
+    CoursesAnnouncementsModifyAssignees'
+    { _camaXgafv = Nothing
+    , _camaUploadProtocol = Nothing
+    , _camaCourseId = pCamaCourseId_
+    , _camaAccessToken = Nothing
+    , _camaUploadType = Nothing
+    , _camaPayload = pCamaPayload_
+    , _camaId = pCamaId_
+    , _camaCallback = Nothing
+    }
+
+-- | V1 error format.
+camaXgafv :: Lens' CoursesAnnouncementsModifyAssignees (Maybe Xgafv)
+camaXgafv
+  = lens _camaXgafv (\ s a -> s{_camaXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+camaUploadProtocol :: Lens' CoursesAnnouncementsModifyAssignees (Maybe Text)
+camaUploadProtocol
+  = lens _camaUploadProtocol
+      (\ s a -> s{_camaUploadProtocol = a})
+
+-- | Identifier of the course. This identifier can be either the
+-- Classroom-assigned identifier or an alias.
+camaCourseId :: Lens' CoursesAnnouncementsModifyAssignees Text
+camaCourseId
+  = lens _camaCourseId (\ s a -> s{_camaCourseId = a})
+
+-- | OAuth access token.
+camaAccessToken :: Lens' CoursesAnnouncementsModifyAssignees (Maybe Text)
+camaAccessToken
+  = lens _camaAccessToken
+      (\ s a -> s{_camaAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+camaUploadType :: Lens' CoursesAnnouncementsModifyAssignees (Maybe Text)
+camaUploadType
+  = lens _camaUploadType
+      (\ s a -> s{_camaUploadType = a})
+
+-- | Multipart request metadata.
+camaPayload :: Lens' CoursesAnnouncementsModifyAssignees ModifyAnnouncementAssigneesRequest
+camaPayload
+  = lens _camaPayload (\ s a -> s{_camaPayload = a})
+
+-- | Identifier of the announcement.
+camaId :: Lens' CoursesAnnouncementsModifyAssignees Text
+camaId = lens _camaId (\ s a -> s{_camaId = a})
+
+-- | JSONP
+camaCallback :: Lens' CoursesAnnouncementsModifyAssignees (Maybe Text)
+camaCallback
+  = lens _camaCallback (\ s a -> s{_camaCallback = a})
+
+instance GoogleRequest
+         CoursesAnnouncementsModifyAssignees where
+        type Rs CoursesAnnouncementsModifyAssignees =
+             Announcement
+        type Scopes CoursesAnnouncementsModifyAssignees =
+             '["https://www.googleapis.com/auth/classroom.announcements"]
+        requestClient
+          CoursesAnnouncementsModifyAssignees'{..}
+          = go _camaCourseId _camaId _camaXgafv
+              _camaUploadProtocol
+              _camaAccessToken
+              _camaUploadType
+              _camaCallback
+              (Just AltJSON)
+              _camaPayload
+              classroomService
+          where go
+                  = buildClient
+                      (Proxy ::
+                         Proxy CoursesAnnouncementsModifyAssigneesResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Classroom/Courses/Announcements/Patch.hs b/gen/Network/Google/Resource/Classroom/Courses/Announcements/Patch.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Classroom/Courses/Announcements/Patch.hs
@@ -0,0 +1,206 @@
+{-# 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.Announcements.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 an announcement. This method returns the
+-- following error codes: * \`PERMISSION_DENIED\` if the requesting
+-- developer project did not create the corresponding announcement or for
+-- access errors. * \`INVALID_ARGUMENT\` if the request is malformed. *
+-- \`FAILED_PRECONDITION\` if the requested announcement has already been
+-- deleted. * \`NOT_FOUND\` if the requested course or announcement does
+-- not exist
+--
+-- /See:/ <https://developers.google.com/classroom/ Google Classroom API Reference> for @classroom.courses.announcements.patch@.
+module Network.Google.Resource.Classroom.Courses.Announcements.Patch
+    (
+    -- * REST Resource
+      CoursesAnnouncementsPatchResource
+
+    -- * Creating a Request
+    , coursesAnnouncementsPatch
+    , CoursesAnnouncementsPatch
+
+    -- * Request Lenses
+    , capXgafv
+    , capUploadProtocol
+    , capUpdateMask
+    , capCourseId
+    , capAccessToken
+    , capUploadType
+    , capPayload
+    , capId
+    , capCallback
+    ) where
+
+import           Network.Google.Classroom.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @classroom.courses.announcements.patch@ method which the
+-- 'CoursesAnnouncementsPatch' request conforms to.
+type CoursesAnnouncementsPatchResource =
+     "v1" :>
+       "courses" :>
+         Capture "courseId" Text :>
+           "announcements" :>
+             Capture "id" Text :>
+               QueryParam "$.xgafv" Xgafv :>
+                 QueryParam "upload_protocol" Text :>
+                   QueryParam "updateMask" GFieldMask :>
+                     QueryParam "access_token" Text :>
+                       QueryParam "uploadType" Text :>
+                         QueryParam "callback" Text :>
+                           QueryParam "alt" AltJSON :>
+                             ReqBody '[JSON] Announcement :>
+                               Patch '[JSON] Announcement
+
+-- | Updates one or more fields of an announcement. This method returns the
+-- following error codes: * \`PERMISSION_DENIED\` if the requesting
+-- developer project did not create the corresponding announcement or for
+-- access errors. * \`INVALID_ARGUMENT\` if the request is malformed. *
+-- \`FAILED_PRECONDITION\` if the requested announcement has already been
+-- deleted. * \`NOT_FOUND\` if the requested course or announcement does
+-- not exist
+--
+-- /See:/ 'coursesAnnouncementsPatch' smart constructor.
+data CoursesAnnouncementsPatch = CoursesAnnouncementsPatch'
+    { _capXgafv          :: !(Maybe Xgafv)
+    , _capUploadProtocol :: !(Maybe Text)
+    , _capUpdateMask     :: !(Maybe GFieldMask)
+    , _capCourseId       :: !Text
+    , _capAccessToken    :: !(Maybe Text)
+    , _capUploadType     :: !(Maybe Text)
+    , _capPayload        :: !Announcement
+    , _capId             :: !Text
+    , _capCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CoursesAnnouncementsPatch' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'capXgafv'
+--
+-- * 'capUploadProtocol'
+--
+-- * 'capUpdateMask'
+--
+-- * 'capCourseId'
+--
+-- * 'capAccessToken'
+--
+-- * 'capUploadType'
+--
+-- * 'capPayload'
+--
+-- * 'capId'
+--
+-- * 'capCallback'
+coursesAnnouncementsPatch
+    :: Text -- ^ 'capCourseId'
+    -> Announcement -- ^ 'capPayload'
+    -> Text -- ^ 'capId'
+    -> CoursesAnnouncementsPatch
+coursesAnnouncementsPatch pCapCourseId_ pCapPayload_ pCapId_ =
+    CoursesAnnouncementsPatch'
+    { _capXgafv = Nothing
+    , _capUploadProtocol = Nothing
+    , _capUpdateMask = Nothing
+    , _capCourseId = pCapCourseId_
+    , _capAccessToken = Nothing
+    , _capUploadType = Nothing
+    , _capPayload = pCapPayload_
+    , _capId = pCapId_
+    , _capCallback = Nothing
+    }
+
+-- | V1 error format.
+capXgafv :: Lens' CoursesAnnouncementsPatch (Maybe Xgafv)
+capXgafv = lens _capXgafv (\ s a -> s{_capXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+capUploadProtocol :: Lens' CoursesAnnouncementsPatch (Maybe Text)
+capUploadProtocol
+  = lens _capUploadProtocol
+      (\ s a -> s{_capUploadProtocol = a})
+
+-- | Mask that identifies which fields on the announcement to update. This
+-- field is required to do an update. The update fails if invalid fields
+-- are specified. If a field supports empty values, it can be cleared by
+-- specifying it in the update mask and not in the Announcement object. If
+-- a field that does not support empty values is included in the update
+-- mask and not set in the Announcement object, an \`INVALID_ARGUMENT\`
+-- error will be returned. The following fields may be specified by
+-- teachers: * \`text\` * \`state\` * \`scheduled_time\`
+capUpdateMask :: Lens' CoursesAnnouncementsPatch (Maybe GFieldMask)
+capUpdateMask
+  = lens _capUpdateMask
+      (\ s a -> s{_capUpdateMask = a})
+
+-- | Identifier of the course. This identifier can be either the
+-- Classroom-assigned identifier or an alias.
+capCourseId :: Lens' CoursesAnnouncementsPatch Text
+capCourseId
+  = lens _capCourseId (\ s a -> s{_capCourseId = a})
+
+-- | OAuth access token.
+capAccessToken :: Lens' CoursesAnnouncementsPatch (Maybe Text)
+capAccessToken
+  = lens _capAccessToken
+      (\ s a -> s{_capAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+capUploadType :: Lens' CoursesAnnouncementsPatch (Maybe Text)
+capUploadType
+  = lens _capUploadType
+      (\ s a -> s{_capUploadType = a})
+
+-- | Multipart request metadata.
+capPayload :: Lens' CoursesAnnouncementsPatch Announcement
+capPayload
+  = lens _capPayload (\ s a -> s{_capPayload = a})
+
+-- | Identifier of the announcement.
+capId :: Lens' CoursesAnnouncementsPatch Text
+capId = lens _capId (\ s a -> s{_capId = a})
+
+-- | JSONP
+capCallback :: Lens' CoursesAnnouncementsPatch (Maybe Text)
+capCallback
+  = lens _capCallback (\ s a -> s{_capCallback = a})
+
+instance GoogleRequest CoursesAnnouncementsPatch
+         where
+        type Rs CoursesAnnouncementsPatch = Announcement
+        type Scopes CoursesAnnouncementsPatch =
+             '["https://www.googleapis.com/auth/classroom.announcements"]
+        requestClient CoursesAnnouncementsPatch'{..}
+          = go _capCourseId _capId _capXgafv _capUploadProtocol
+              _capUpdateMask
+              _capAccessToken
+              _capUploadType
+              _capCallback
+              (Just AltJSON)
+              _capPayload
+              classroomService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy CoursesAnnouncementsPatchResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Classroom/Courses/CourseWork/Create.hs b/gen/Network/Google/Resource/Classroom/Courses/CourseWork/Create.hs
--- a/gen/Network/Google/Resource/Classroom/Courses/CourseWork/Create.hs
+++ b/gen/Network/Google/Resource/Classroom/Courses/CourseWork/Create.hs
@@ -47,12 +47,10 @@
     -- * Request Lenses
     , ccwcXgafv
     , ccwcUploadProtocol
-    , ccwcPp
     , ccwcCourseId
     , ccwcAccessToken
     , ccwcUploadType
     , ccwcPayload
-    , ccwcBearerToken
     , ccwcCallback
     ) where
 
@@ -66,16 +64,13 @@
        "courses" :>
          Capture "courseId" Text :>
            "courseWork" :>
-             QueryParam "$.xgafv" Text :>
+             QueryParam "$.xgafv" Xgafv :>
                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
+                 QueryParam "access_token" Text :>
+                   QueryParam "uploadType" 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
@@ -93,14 +88,12 @@
 --
 -- /See:/ 'coursesCourseWorkCreate' smart constructor.
 data CoursesCourseWorkCreate = CoursesCourseWorkCreate'
-    { _ccwcXgafv          :: !(Maybe Text)
+    { _ccwcXgafv          :: !(Maybe Xgafv)
     , _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)
 
@@ -112,8 +105,6 @@
 --
 -- * 'ccwcUploadProtocol'
 --
--- * 'ccwcPp'
---
 -- * 'ccwcCourseId'
 --
 -- * 'ccwcAccessToken'
@@ -122,8 +113,6 @@
 --
 -- * 'ccwcPayload'
 --
--- * 'ccwcBearerToken'
---
 -- * 'ccwcCallback'
 coursesCourseWorkCreate
     :: Text -- ^ 'ccwcCourseId'
@@ -133,17 +122,15 @@
     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' CoursesCourseWorkCreate (Maybe Xgafv)
 ccwcXgafv
   = lens _ccwcXgafv (\ s a -> s{_ccwcXgafv = a})
 
@@ -153,10 +140,6 @@
   = 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
@@ -180,12 +163,6 @@
 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
@@ -197,10 +174,8 @@
              '["https://www.googleapis.com/auth/classroom.coursework.students"]
         requestClient CoursesCourseWorkCreate'{..}
           = go _ccwcCourseId _ccwcXgafv _ccwcUploadProtocol
-              (Just _ccwcPp)
               _ccwcAccessToken
               _ccwcUploadType
-              _ccwcBearerToken
               _ccwcCallback
               (Just AltJSON)
               _ccwcPayload
diff --git a/gen/Network/Google/Resource/Classroom/Courses/CourseWork/Delete.hs b/gen/Network/Google/Resource/Classroom/Courses/CourseWork/Delete.hs
--- a/gen/Network/Google/Resource/Classroom/Courses/CourseWork/Delete.hs
+++ b/gen/Network/Google/Resource/Classroom/Courses/CourseWork/Delete.hs
@@ -43,11 +43,9 @@
     -- * Request Lenses
     , ccwdXgafv
     , ccwdUploadProtocol
-    , ccwdPp
     , ccwdCourseId
     , ccwdAccessToken
     , ccwdUploadType
-    , ccwdBearerToken
     , ccwdId
     , ccwdCallback
     ) where
@@ -63,14 +61,12 @@
          Capture "courseId" Text :>
            "courseWork" :>
              Capture "id" Text :>
-               QueryParam "$.xgafv" Text :>
+               QueryParam "$.xgafv" Xgafv :>
                  QueryParam "upload_protocol" Text :>
-                   QueryParam "pp" Bool :>
-                     QueryParam "access_token" Text :>
-                       QueryParam "uploadType" Text :>
-                         QueryParam "bearer_token" Text :>
-                           QueryParam "callback" Text :>
-                             QueryParam "alt" AltJSON :> Delete '[JSON] Empty
+                   QueryParam "access_token" Text :>
+                     QueryParam "uploadType" Text :>
+                       QueryParam "callback" Text :>
+                         QueryParam "alt" AltJSON :> Delete '[JSON] Empty
 
 -- | Deletes a course work. This request must be made by the Developer
 -- Console project of the [OAuth client
@@ -84,13 +80,11 @@
 --
 -- /See:/ 'coursesCourseWorkDelete' smart constructor.
 data CoursesCourseWorkDelete = CoursesCourseWorkDelete'
-    { _ccwdXgafv          :: !(Maybe Text)
+    { _ccwdXgafv          :: !(Maybe Xgafv)
     , _ccwdUploadProtocol :: !(Maybe Text)
-    , _ccwdPp             :: !Bool
     , _ccwdCourseId       :: !Text
     , _ccwdAccessToken    :: !(Maybe Text)
     , _ccwdUploadType     :: !(Maybe Text)
-    , _ccwdBearerToken    :: !(Maybe Text)
     , _ccwdId             :: !Text
     , _ccwdCallback       :: !(Maybe Text)
     } deriving (Eq,Show,Data,Typeable,Generic)
@@ -103,16 +97,12 @@
 --
 -- * 'ccwdUploadProtocol'
 --
--- * 'ccwdPp'
---
 -- * 'ccwdCourseId'
 --
 -- * 'ccwdAccessToken'
 --
 -- * 'ccwdUploadType'
 --
--- * 'ccwdBearerToken'
---
 -- * 'ccwdId'
 --
 -- * 'ccwdCallback'
@@ -124,17 +114,15 @@
     CoursesCourseWorkDelete'
     { _ccwdXgafv = Nothing
     , _ccwdUploadProtocol = Nothing
-    , _ccwdPp = True
     , _ccwdCourseId = pCcwdCourseId_
     , _ccwdAccessToken = Nothing
     , _ccwdUploadType = Nothing
-    , _ccwdBearerToken = Nothing
     , _ccwdId = pCcwdId_
     , _ccwdCallback = Nothing
     }
 
 -- | V1 error format.
-ccwdXgafv :: Lens' CoursesCourseWorkDelete (Maybe Text)
+ccwdXgafv :: Lens' CoursesCourseWorkDelete (Maybe Xgafv)
 ccwdXgafv
   = lens _ccwdXgafv (\ s a -> s{_ccwdXgafv = a})
 
@@ -144,10 +132,6 @@
   = lens _ccwdUploadProtocol
       (\ s a -> s{_ccwdUploadProtocol = a})
 
--- | Pretty-print response.
-ccwdPp :: Lens' CoursesCourseWorkDelete Bool
-ccwdPp = lens _ccwdPp (\ s a -> s{_ccwdPp = a})
-
 -- | Identifier of the course. This identifier can be either the
 -- Classroom-assigned identifier or an alias.
 ccwdCourseId :: Lens' CoursesCourseWorkDelete Text
@@ -166,12 +150,6 @@
   = lens _ccwdUploadType
       (\ s a -> s{_ccwdUploadType = a})
 
--- | OAuth bearer token.
-ccwdBearerToken :: Lens' CoursesCourseWorkDelete (Maybe Text)
-ccwdBearerToken
-  = lens _ccwdBearerToken
-      (\ s a -> s{_ccwdBearerToken = a})
-
 -- | Identifier of the course work to delete. This identifier is a
 -- Classroom-assigned identifier.
 ccwdId :: Lens' CoursesCourseWorkDelete Text
@@ -189,10 +167,8 @@
         requestClient CoursesCourseWorkDelete'{..}
           = go _ccwdCourseId _ccwdId _ccwdXgafv
               _ccwdUploadProtocol
-              (Just _ccwdPp)
               _ccwdAccessToken
               _ccwdUploadType
-              _ccwdBearerToken
               _ccwdCallback
               (Just AltJSON)
               classroomService
diff --git a/gen/Network/Google/Resource/Classroom/Courses/CourseWork/Get.hs b/gen/Network/Google/Resource/Classroom/Courses/CourseWork/Get.hs
--- a/gen/Network/Google/Resource/Classroom/Courses/CourseWork/Get.hs
+++ b/gen/Network/Google/Resource/Classroom/Courses/CourseWork/Get.hs
@@ -39,11 +39,9 @@
     -- * Request Lenses
     , ccwgXgafv
     , ccwgUploadProtocol
-    , ccwgPp
     , ccwgCourseId
     , ccwgAccessToken
     , ccwgUploadType
-    , ccwgBearerToken
     , ccwgId
     , ccwgCallback
     ) where
@@ -59,14 +57,12 @@
          Capture "courseId" Text :>
            "courseWork" :>
              Capture "id" Text :>
-               QueryParam "$.xgafv" Text :>
+               QueryParam "$.xgafv" Xgafv :>
                  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
+                   QueryParam "access_token" Text :>
+                     QueryParam "uploadType" 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
@@ -76,13 +72,11 @@
 --
 -- /See:/ 'coursesCourseWorkGet' smart constructor.
 data CoursesCourseWorkGet = CoursesCourseWorkGet'
-    { _ccwgXgafv          :: !(Maybe Text)
+    { _ccwgXgafv          :: !(Maybe Xgafv)
     , _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)
@@ -95,16 +89,12 @@
 --
 -- * 'ccwgUploadProtocol'
 --
--- * 'ccwgPp'
---
 -- * 'ccwgCourseId'
 --
 -- * 'ccwgAccessToken'
 --
 -- * 'ccwgUploadType'
 --
--- * 'ccwgBearerToken'
---
 -- * 'ccwgId'
 --
 -- * 'ccwgCallback'
@@ -116,17 +106,15 @@
     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' CoursesCourseWorkGet (Maybe Xgafv)
 ccwgXgafv
   = lens _ccwgXgafv (\ s a -> s{_ccwgXgafv = a})
 
@@ -136,10 +124,6 @@
   = 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
@@ -158,12 +142,6 @@
   = 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})
@@ -176,18 +154,15 @@
 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",
                "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
diff --git a/gen/Network/Google/Resource/Classroom/Courses/CourseWork/List.hs b/gen/Network/Google/Resource/Classroom/Courses/CourseWork/List.hs
--- a/gen/Network/Google/Resource/Classroom/Courses/CourseWork/List.hs
+++ b/gen/Network/Google/Resource/Classroom/Courses/CourseWork/List.hs
@@ -42,12 +42,10 @@
     , ccwlXgafv
     , ccwlUploadProtocol
     , ccwlOrderBy
-    , ccwlPp
     , ccwlCourseId
     , ccwlAccessToken
     , ccwlCourseWorkStates
     , ccwlUploadType
-    , ccwlBearerToken
     , ccwlPageToken
     , ccwlPageSize
     , ccwlCallback
@@ -63,19 +61,17 @@
        "courses" :>
          Capture "courseId" Text :>
            "courseWork" :>
-             QueryParam "$.xgafv" Text :>
+             QueryParam "$.xgafv" Xgafv :>
                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
+                   QueryParam "access_token" Text :>
+                     QueryParams "courseWorkStates" Text :>
+                       QueryParam "uploadType" 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
@@ -87,15 +83,13 @@
 --
 -- /See:/ 'coursesCourseWorkList' smart constructor.
 data CoursesCourseWorkList = CoursesCourseWorkList'
-    { _ccwlXgafv            :: !(Maybe Text)
+    { _ccwlXgafv            :: !(Maybe Xgafv)
     , _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)
@@ -111,8 +105,6 @@
 --
 -- * 'ccwlOrderBy'
 --
--- * 'ccwlPp'
---
 -- * 'ccwlCourseId'
 --
 -- * 'ccwlAccessToken'
@@ -121,8 +113,6 @@
 --
 -- * 'ccwlUploadType'
 --
--- * 'ccwlBearerToken'
---
 -- * 'ccwlPageToken'
 --
 -- * 'ccwlPageSize'
@@ -136,19 +126,17 @@
     { _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' CoursesCourseWorkList (Maybe Xgafv)
 ccwlXgafv
   = lens _ccwlXgafv (\ s a -> s{_ccwlXgafv = a})
 
@@ -168,10 +156,6 @@
 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
@@ -200,12 +184,6 @@
   = 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.
@@ -231,19 +209,16 @@
         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",
                "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
diff --git a/gen/Network/Google/Resource/Classroom/Courses/CourseWork/ModifyAssignees.hs b/gen/Network/Google/Resource/Classroom/Courses/CourseWork/ModifyAssignees.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Classroom/Courses/CourseWork/ModifyAssignees.hs
@@ -0,0 +1,191 @@
+{-# 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.ModifyAssignees
+-- 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 assignee mode and options of a coursework. Only a teacher of
+-- the course that contains the coursework may call this method. 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.modifyAssignees@.
+module Network.Google.Resource.Classroom.Courses.CourseWork.ModifyAssignees
+    (
+    -- * REST Resource
+      CoursesCourseWorkModifyAssigneesResource
+
+    -- * Creating a Request
+    , coursesCourseWorkModifyAssignees
+    , CoursesCourseWorkModifyAssignees
+
+    -- * Request Lenses
+    , ccwmaXgafv
+    , ccwmaUploadProtocol
+    , ccwmaCourseId
+    , ccwmaAccessToken
+    , ccwmaUploadType
+    , ccwmaPayload
+    , ccwmaId
+    , ccwmaCallback
+    ) where
+
+import           Network.Google.Classroom.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @classroom.courses.courseWork.modifyAssignees@ method which the
+-- 'CoursesCourseWorkModifyAssignees' request conforms to.
+type CoursesCourseWorkModifyAssigneesResource =
+     "v1" :>
+       "courses" :>
+         Capture "courseId" Text :>
+           "courseWork" :>
+             CaptureMode "id" "modifyAssignees" Text :>
+               QueryParam "$.xgafv" Xgafv :>
+                 QueryParam "upload_protocol" Text :>
+                   QueryParam "access_token" Text :>
+                     QueryParam "uploadType" Text :>
+                       QueryParam "callback" Text :>
+                         QueryParam "alt" AltJSON :>
+                           ReqBody '[JSON] ModifyCourseWorkAssigneesRequest :>
+                             Post '[JSON] CourseWork
+
+-- | Modifies assignee mode and options of a coursework. Only a teacher of
+-- the course that contains the coursework may call this method. 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:/ 'coursesCourseWorkModifyAssignees' smart constructor.
+data CoursesCourseWorkModifyAssignees = CoursesCourseWorkModifyAssignees'
+    { _ccwmaXgafv          :: !(Maybe Xgafv)
+    , _ccwmaUploadProtocol :: !(Maybe Text)
+    , _ccwmaCourseId       :: !Text
+    , _ccwmaAccessToken    :: !(Maybe Text)
+    , _ccwmaUploadType     :: !(Maybe Text)
+    , _ccwmaPayload        :: !ModifyCourseWorkAssigneesRequest
+    , _ccwmaId             :: !Text
+    , _ccwmaCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CoursesCourseWorkModifyAssignees' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ccwmaXgafv'
+--
+-- * 'ccwmaUploadProtocol'
+--
+-- * 'ccwmaCourseId'
+--
+-- * 'ccwmaAccessToken'
+--
+-- * 'ccwmaUploadType'
+--
+-- * 'ccwmaPayload'
+--
+-- * 'ccwmaId'
+--
+-- * 'ccwmaCallback'
+coursesCourseWorkModifyAssignees
+    :: Text -- ^ 'ccwmaCourseId'
+    -> ModifyCourseWorkAssigneesRequest -- ^ 'ccwmaPayload'
+    -> Text -- ^ 'ccwmaId'
+    -> CoursesCourseWorkModifyAssignees
+coursesCourseWorkModifyAssignees pCcwmaCourseId_ pCcwmaPayload_ pCcwmaId_ =
+    CoursesCourseWorkModifyAssignees'
+    { _ccwmaXgafv = Nothing
+    , _ccwmaUploadProtocol = Nothing
+    , _ccwmaCourseId = pCcwmaCourseId_
+    , _ccwmaAccessToken = Nothing
+    , _ccwmaUploadType = Nothing
+    , _ccwmaPayload = pCcwmaPayload_
+    , _ccwmaId = pCcwmaId_
+    , _ccwmaCallback = Nothing
+    }
+
+-- | V1 error format.
+ccwmaXgafv :: Lens' CoursesCourseWorkModifyAssignees (Maybe Xgafv)
+ccwmaXgafv
+  = lens _ccwmaXgafv (\ s a -> s{_ccwmaXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+ccwmaUploadProtocol :: Lens' CoursesCourseWorkModifyAssignees (Maybe Text)
+ccwmaUploadProtocol
+  = lens _ccwmaUploadProtocol
+      (\ s a -> s{_ccwmaUploadProtocol = a})
+
+-- | Identifier of the course. This identifier can be either the
+-- Classroom-assigned identifier or an alias.
+ccwmaCourseId :: Lens' CoursesCourseWorkModifyAssignees Text
+ccwmaCourseId
+  = lens _ccwmaCourseId
+      (\ s a -> s{_ccwmaCourseId = a})
+
+-- | OAuth access token.
+ccwmaAccessToken :: Lens' CoursesCourseWorkModifyAssignees (Maybe Text)
+ccwmaAccessToken
+  = lens _ccwmaAccessToken
+      (\ s a -> s{_ccwmaAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+ccwmaUploadType :: Lens' CoursesCourseWorkModifyAssignees (Maybe Text)
+ccwmaUploadType
+  = lens _ccwmaUploadType
+      (\ s a -> s{_ccwmaUploadType = a})
+
+-- | Multipart request metadata.
+ccwmaPayload :: Lens' CoursesCourseWorkModifyAssignees ModifyCourseWorkAssigneesRequest
+ccwmaPayload
+  = lens _ccwmaPayload (\ s a -> s{_ccwmaPayload = a})
+
+-- | Identifier of the coursework.
+ccwmaId :: Lens' CoursesCourseWorkModifyAssignees Text
+ccwmaId = lens _ccwmaId (\ s a -> s{_ccwmaId = a})
+
+-- | JSONP
+ccwmaCallback :: Lens' CoursesCourseWorkModifyAssignees (Maybe Text)
+ccwmaCallback
+  = lens _ccwmaCallback
+      (\ s a -> s{_ccwmaCallback = a})
+
+instance GoogleRequest
+         CoursesCourseWorkModifyAssignees where
+        type Rs CoursesCourseWorkModifyAssignees = CourseWork
+        type Scopes CoursesCourseWorkModifyAssignees =
+             '["https://www.googleapis.com/auth/classroom.coursework.students"]
+        requestClient CoursesCourseWorkModifyAssignees'{..}
+          = go _ccwmaCourseId _ccwmaId _ccwmaXgafv
+              _ccwmaUploadProtocol
+              _ccwmaAccessToken
+              _ccwmaUploadType
+              _ccwmaCallback
+              (Just AltJSON)
+              _ccwmaPayload
+              classroomService
+          where go
+                  = buildClient
+                      (Proxy ::
+                         Proxy CoursesCourseWorkModifyAssigneesResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Classroom/Courses/CourseWork/Patch.hs b/gen/Network/Google/Resource/Classroom/Courses/CourseWork/Patch.hs
--- a/gen/Network/Google/Resource/Classroom/Courses/CourseWork/Patch.hs
+++ b/gen/Network/Google/Resource/Classroom/Courses/CourseWork/Patch.hs
@@ -48,12 +48,10 @@
     , ccwpXgafv
     , ccwpUploadProtocol
     , ccwpUpdateMask
-    , ccwpPp
     , ccwpCourseId
     , ccwpAccessToken
     , ccwpUploadType
     , ccwpPayload
-    , ccwpBearerToken
     , ccwpId
     , ccwpCallback
     ) where
@@ -69,17 +67,15 @@
          Capture "courseId" Text :>
            "courseWork" :>
              Capture "id" Text :>
-               QueryParam "$.xgafv" Text :>
+               QueryParam "$.xgafv" Xgafv :>
                  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] CourseWork :>
-                                   Patch '[JSON] CourseWork
+                   QueryParam "updateMask" GFieldMask :>
+                     QueryParam "access_token" Text :>
+                       QueryParam "uploadType" Text :>
+                         QueryParam "callback" Text :>
+                           QueryParam "alt" AltJSON :>
+                             ReqBody '[JSON] CourseWork :>
+                               Patch '[JSON] CourseWork
 
 -- | Updates one or more fields of a course work. See
 -- google.classroom.v1.CourseWork for details of which fields may be
@@ -97,15 +93,13 @@
 --
 -- /See:/ 'coursesCourseWorkPatch' smart constructor.
 data CoursesCourseWorkPatch = CoursesCourseWorkPatch'
-    { _ccwpXgafv          :: !(Maybe Text)
+    { _ccwpXgafv          :: !(Maybe Xgafv)
     , _ccwpUploadProtocol :: !(Maybe Text)
-    , _ccwpUpdateMask     :: !(Maybe Text)
-    , _ccwpPp             :: !Bool
+    , _ccwpUpdateMask     :: !(Maybe GFieldMask)
     , _ccwpCourseId       :: !Text
     , _ccwpAccessToken    :: !(Maybe Text)
     , _ccwpUploadType     :: !(Maybe Text)
     , _ccwpPayload        :: !CourseWork
-    , _ccwpBearerToken    :: !(Maybe Text)
     , _ccwpId             :: !Text
     , _ccwpCallback       :: !(Maybe Text)
     } deriving (Eq,Show,Data,Typeable,Generic)
@@ -120,8 +114,6 @@
 --
 -- * 'ccwpUpdateMask'
 --
--- * 'ccwpPp'
---
 -- * 'ccwpCourseId'
 --
 -- * 'ccwpAccessToken'
@@ -130,8 +122,6 @@
 --
 -- * 'ccwpPayload'
 --
--- * 'ccwpBearerToken'
---
 -- * 'ccwpId'
 --
 -- * 'ccwpCallback'
@@ -145,18 +135,16 @@
     { _ccwpXgafv = Nothing
     , _ccwpUploadProtocol = Nothing
     , _ccwpUpdateMask = Nothing
-    , _ccwpPp = True
     , _ccwpCourseId = pCcwpCourseId_
     , _ccwpAccessToken = Nothing
     , _ccwpUploadType = Nothing
     , _ccwpPayload = pCcwpPayload_
-    , _ccwpBearerToken = Nothing
     , _ccwpId = pCcwpId_
     , _ccwpCallback = Nothing
     }
 
 -- | V1 error format.
-ccwpXgafv :: Lens' CoursesCourseWorkPatch (Maybe Text)
+ccwpXgafv :: Lens' CoursesCourseWorkPatch (Maybe Xgafv)
 ccwpXgafv
   = lens _ccwpXgafv (\ s a -> s{_ccwpXgafv = a})
 
@@ -174,16 +162,12 @@
 -- and not set in the CourseWork object, an \`INVALID_ARGUMENT\` error will
 -- be returned. The following fields may be specified by teachers: *
 -- \`title\` * \`description\` * \`state\` * \`due_date\` * \`due_time\` *
--- \`max_points\` * \`submission_modification_mode\`
-ccwpUpdateMask :: Lens' CoursesCourseWorkPatch (Maybe Text)
+-- \`max_points\` * \`scheduled_time\` * \`submission_modification_mode\`
+ccwpUpdateMask :: Lens' CoursesCourseWorkPatch (Maybe GFieldMask)
 ccwpUpdateMask
   = lens _ccwpUpdateMask
       (\ s a -> s{_ccwpUpdateMask = a})
 
--- | Pretty-print response.
-ccwpPp :: Lens' CoursesCourseWorkPatch Bool
-ccwpPp = lens _ccwpPp (\ s a -> s{_ccwpPp = a})
-
 -- | Identifier of the course. This identifier can be either the
 -- Classroom-assigned identifier or an alias.
 ccwpCourseId :: Lens' CoursesCourseWorkPatch Text
@@ -207,12 +191,6 @@
 ccwpPayload
   = lens _ccwpPayload (\ s a -> s{_ccwpPayload = a})
 
--- | OAuth bearer token.
-ccwpBearerToken :: Lens' CoursesCourseWorkPatch (Maybe Text)
-ccwpBearerToken
-  = lens _ccwpBearerToken
-      (\ s a -> s{_ccwpBearerToken = a})
-
 -- | Identifier of the course work.
 ccwpId :: Lens' CoursesCourseWorkPatch Text
 ccwpId = lens _ccwpId (\ s a -> s{_ccwpId = a})
@@ -230,10 +208,8 @@
           = go _ccwpCourseId _ccwpId _ccwpXgafv
               _ccwpUploadProtocol
               _ccwpUpdateMask
-              (Just _ccwpPp)
               _ccwpAccessToken
               _ccwpUploadType
-              _ccwpBearerToken
               _ccwpCallback
               (Just AltJSON)
               _ccwpPayload
diff --git a/gen/Network/Google/Resource/Classroom/Courses/CourseWork/StudentSubmissions/Get.hs b/gen/Network/Google/Resource/Classroom/Courses/CourseWork/StudentSubmissions/Get.hs
--- a/gen/Network/Google/Resource/Classroom/Courses/CourseWork/StudentSubmissions/Get.hs
+++ b/gen/Network/Google/Resource/Classroom/Courses/CourseWork/StudentSubmissions/Get.hs
@@ -39,11 +39,9 @@
     -- * Request Lenses
     , ccwssgXgafv
     , ccwssgUploadProtocol
-    , ccwssgPp
     , ccwssgCourseId
     , ccwssgAccessToken
     , ccwssgUploadType
-    , ccwssgBearerToken
     , ccwssgId
     , ccwssgCallback
     , ccwssgCourseWorkId
@@ -62,15 +60,13 @@
              Capture "courseWorkId" Text :>
                "studentSubmissions" :>
                  Capture "id" Text :>
-                   QueryParam "$.xgafv" Text :>
+                   QueryParam "$.xgafv" Xgafv :>
                      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
+                       QueryParam "access_token" Text :>
+                         QueryParam "uploadType" 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
@@ -80,13 +76,11 @@
 --
 -- /See:/ 'coursesCourseWorkStudentSubmissionsGet' smart constructor.
 data CoursesCourseWorkStudentSubmissionsGet = CoursesCourseWorkStudentSubmissionsGet'
-    { _ccwssgXgafv          :: !(Maybe Text)
+    { _ccwssgXgafv          :: !(Maybe Xgafv)
     , _ccwssgUploadProtocol :: !(Maybe Text)
-    , _ccwssgPp             :: !Bool
     , _ccwssgCourseId       :: !Text
     , _ccwssgAccessToken    :: !(Maybe Text)
     , _ccwssgUploadType     :: !(Maybe Text)
-    , _ccwssgBearerToken    :: !(Maybe Text)
     , _ccwssgId             :: !Text
     , _ccwssgCallback       :: !(Maybe Text)
     , _ccwssgCourseWorkId   :: !Text
@@ -100,16 +94,12 @@
 --
 -- * 'ccwssgUploadProtocol'
 --
--- * 'ccwssgPp'
---
 -- * 'ccwssgCourseId'
 --
 -- * 'ccwssgAccessToken'
 --
 -- * 'ccwssgUploadType'
 --
--- * 'ccwssgBearerToken'
---
 -- * 'ccwssgId'
 --
 -- * 'ccwssgCallback'
@@ -124,18 +114,16 @@
     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' CoursesCourseWorkStudentSubmissionsGet (Maybe Xgafv)
 ccwssgXgafv
   = lens _ccwssgXgafv (\ s a -> s{_ccwssgXgafv = a})
 
@@ -145,10 +133,6 @@
   = 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
@@ -168,12 +152,6 @@
   = 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})
@@ -206,10 +184,8 @@
           = go _ccwssgCourseId _ccwssgCourseWorkId _ccwssgId
               _ccwssgXgafv
               _ccwssgUploadProtocol
-              (Just _ccwssgPp)
               _ccwssgAccessToken
               _ccwssgUploadType
-              _ccwssgBearerToken
               _ccwssgCallback
               (Just AltJSON)
               classroomService
diff --git a/gen/Network/Google/Resource/Classroom/Courses/CourseWork/StudentSubmissions/List.hs b/gen/Network/Google/Resource/Classroom/Courses/CourseWork/StudentSubmissions/List.hs
--- a/gen/Network/Google/Resource/Classroom/Courses/CourseWork/StudentSubmissions/List.hs
+++ b/gen/Network/Google/Resource/Classroom/Courses/CourseWork/StudentSubmissions/List.hs
@@ -46,12 +46,10 @@
     , ccwsslXgafv
     , ccwsslLate
     , ccwsslUploadProtocol
-    , ccwsslPp
     , ccwsslCourseId
     , ccwsslAccessToken
     , ccwsslUploadType
     , ccwsslUserId
-    , ccwsslBearerToken
     , ccwsslPageToken
     , ccwsslPageSize
     , ccwsslCallback
@@ -72,20 +70,18 @@
              Capture "courseWorkId" Text :>
                "studentSubmissions" :>
                  QueryParams "states" Text :>
-                   QueryParam "$.xgafv" Text :>
+                   QueryParam "$.xgafv" Xgafv :>
                      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
+                         QueryParam "access_token" Text :>
+                           QueryParam "uploadType" Text :>
+                             QueryParam "userId" 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
@@ -101,15 +97,13 @@
 -- /See:/ 'coursesCourseWorkStudentSubmissionsList' smart constructor.
 data CoursesCourseWorkStudentSubmissionsList = CoursesCourseWorkStudentSubmissionsList'
     { _ccwsslStates         :: !(Maybe [Text])
-    , _ccwsslXgafv          :: !(Maybe Text)
+    , _ccwsslXgafv          :: !(Maybe Xgafv)
     , _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)
@@ -128,8 +122,6 @@
 --
 -- * 'ccwsslUploadProtocol'
 --
--- * 'ccwsslPp'
---
 -- * 'ccwsslCourseId'
 --
 -- * 'ccwsslAccessToken'
@@ -138,8 +130,6 @@
 --
 -- * 'ccwsslUserId'
 --
--- * 'ccwsslBearerToken'
---
 -- * 'ccwsslPageToken'
 --
 -- * 'ccwsslPageSize'
@@ -157,12 +147,10 @@
     , _ccwsslXgafv = Nothing
     , _ccwsslLate = Nothing
     , _ccwsslUploadProtocol = Nothing
-    , _ccwsslPp = True
     , _ccwsslCourseId = pCcwsslCourseId_
     , _ccwsslAccessToken = Nothing
     , _ccwsslUploadType = Nothing
     , _ccwsslUserId = Nothing
-    , _ccwsslBearerToken = Nothing
     , _ccwsslPageToken = Nothing
     , _ccwsslPageSize = Nothing
     , _ccwsslCallback = Nothing
@@ -178,7 +166,7 @@
       . _Coerce
 
 -- | V1 error format.
-ccwsslXgafv :: Lens' CoursesCourseWorkStudentSubmissionsList (Maybe Text)
+ccwsslXgafv :: Lens' CoursesCourseWorkStudentSubmissionsList (Maybe Xgafv)
 ccwsslXgafv
   = lens _ccwsslXgafv (\ s a -> s{_ccwsslXgafv = a})
 
@@ -195,10 +183,6 @@
   = 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
@@ -227,12 +211,6 @@
 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.
@@ -256,7 +234,7 @@
   = lens _ccwsslCallback
       (\ s a -> s{_ccwsslCallback = a})
 
--- | Identifer of the student work to request. This may be set to the string
+-- | Identifier of the student work to request. This may be set to the string
 -- literal \`\"-\"\` to request student work for all course work in the
 -- specified course.
 ccwsslCourseWorkId :: Lens' CoursesCourseWorkStudentSubmissionsList Text
@@ -282,11 +260,9 @@
               _ccwsslXgafv
               _ccwsslLate
               _ccwsslUploadProtocol
-              (Just _ccwsslPp)
               _ccwsslAccessToken
               _ccwsslUploadType
               _ccwsslUserId
-              _ccwsslBearerToken
               _ccwsslPageToken
               _ccwsslPageSize
               _ccwsslCallback
diff --git a/gen/Network/Google/Resource/Classroom/Courses/CourseWork/StudentSubmissions/ModifyAttachments.hs b/gen/Network/Google/Resource/Classroom/Courses/CourseWork/StudentSubmissions/ModifyAttachments.hs
--- a/gen/Network/Google/Resource/Classroom/Courses/CourseWork/StudentSubmissions/ModifyAttachments.hs
+++ b/gen/Network/Google/Resource/Classroom/Courses/CourseWork/StudentSubmissions/ModifyAttachments.hs
@@ -46,12 +46,10 @@
     -- * Request Lenses
     , ccwssmaXgafv
     , ccwssmaUploadProtocol
-    , ccwssmaPp
     , ccwssmaCourseId
     , ccwssmaAccessToken
     , ccwssmaUploadType
     , ccwssmaPayload
-    , ccwssmaBearerToken
     , ccwssmaId
     , ccwssmaCallback
     , ccwssmaCourseWorkId
@@ -71,16 +69,14 @@
              Capture "courseWorkId" Text :>
                "studentSubmissions" :>
                  CaptureMode "id" "modifyAttachments" Text :>
-                   QueryParam "$.xgafv" Text :>
+                   QueryParam "$.xgafv" Xgafv :>
                      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
+                       QueryParam "access_token" Text :>
+                         QueryParam "uploadType" 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 belonging to course work objects with a
@@ -97,14 +93,12 @@
 --
 -- /See:/ 'coursesCourseWorkStudentSubmissionsModifyAttachments' smart constructor.
 data CoursesCourseWorkStudentSubmissionsModifyAttachments = CoursesCourseWorkStudentSubmissionsModifyAttachments'
-    { _ccwssmaXgafv          :: !(Maybe Text)
+    { _ccwssmaXgafv          :: !(Maybe Xgafv)
     , _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
@@ -118,8 +112,6 @@
 --
 -- * 'ccwssmaUploadProtocol'
 --
--- * 'ccwssmaPp'
---
 -- * 'ccwssmaCourseId'
 --
 -- * 'ccwssmaAccessToken'
@@ -128,8 +120,6 @@
 --
 -- * 'ccwssmaPayload'
 --
--- * 'ccwssmaBearerToken'
---
 -- * 'ccwssmaId'
 --
 -- * 'ccwssmaCallback'
@@ -145,19 +135,17 @@
     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' CoursesCourseWorkStudentSubmissionsModifyAttachments (Maybe Xgafv)
 ccwssmaXgafv
   = lens _ccwssmaXgafv (\ s a -> s{_ccwssmaXgafv = a})
 
@@ -167,11 +155,6 @@
   = 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
@@ -197,12 +180,6 @@
   = 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
@@ -236,10 +213,8 @@
           = go _ccwssmaCourseId _ccwssmaCourseWorkId _ccwssmaId
               _ccwssmaXgafv
               _ccwssmaUploadProtocol
-              (Just _ccwssmaPp)
               _ccwssmaAccessToken
               _ccwssmaUploadType
-              _ccwssmaBearerToken
               _ccwssmaCallback
               (Just AltJSON)
               _ccwssmaPayload
diff --git a/gen/Network/Google/Resource/Classroom/Courses/CourseWork/StudentSubmissions/Patch.hs b/gen/Network/Google/Resource/Classroom/Courses/CourseWork/StudentSubmissions/Patch.hs
--- a/gen/Network/Google/Resource/Classroom/Courses/CourseWork/StudentSubmissions/Patch.hs
+++ b/gen/Network/Google/Resource/Classroom/Courses/CourseWork/StudentSubmissions/Patch.hs
@@ -47,12 +47,10 @@
     , ccwsspXgafv
     , ccwsspUploadProtocol
     , ccwsspUpdateMask
-    , ccwsspPp
     , ccwsspCourseId
     , ccwsspAccessToken
     , ccwsspUploadType
     , ccwsspPayload
-    , ccwsspBearerToken
     , ccwsspId
     , ccwsspCallback
     , ccwsspCourseWorkId
@@ -72,17 +70,15 @@
              Capture "courseWorkId" Text :>
                "studentSubmissions" :>
                  Capture "id" Text :>
-                   QueryParam "$.xgafv" Text :>
+                   QueryParam "$.xgafv" Xgafv :>
                      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
+                       QueryParam "updateMask" GFieldMask :>
+                         QueryParam "access_token" Text :>
+                           QueryParam "uploadType" 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
@@ -99,15 +95,13 @@
 --
 -- /See:/ 'coursesCourseWorkStudentSubmissionsPatch' smart constructor.
 data CoursesCourseWorkStudentSubmissionsPatch = CoursesCourseWorkStudentSubmissionsPatch'
-    { _ccwsspXgafv          :: !(Maybe Text)
+    { _ccwsspXgafv          :: !(Maybe Xgafv)
     , _ccwsspUploadProtocol :: !(Maybe Text)
-    , _ccwsspUpdateMask     :: !(Maybe Text)
-    , _ccwsspPp             :: !Bool
+    , _ccwsspUpdateMask     :: !(Maybe GFieldMask)
     , _ccwsspCourseId       :: !Text
     , _ccwsspAccessToken    :: !(Maybe Text)
     , _ccwsspUploadType     :: !(Maybe Text)
     , _ccwsspPayload        :: !StudentSubmission
-    , _ccwsspBearerToken    :: !(Maybe Text)
     , _ccwsspId             :: !Text
     , _ccwsspCallback       :: !(Maybe Text)
     , _ccwsspCourseWorkId   :: !Text
@@ -123,8 +117,6 @@
 --
 -- * 'ccwsspUpdateMask'
 --
--- * 'ccwsspPp'
---
 -- * 'ccwsspCourseId'
 --
 -- * 'ccwsspAccessToken'
@@ -133,8 +125,6 @@
 --
 -- * 'ccwsspPayload'
 --
--- * 'ccwsspBearerToken'
---
 -- * 'ccwsspId'
 --
 -- * 'ccwsspCallback'
@@ -151,19 +141,17 @@
     { _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' CoursesCourseWorkStudentSubmissionsPatch (Maybe Xgafv)
 ccwsspXgafv
   = lens _ccwsspXgafv (\ s a -> s{_ccwsspXgafv = a})
 
@@ -177,15 +165,11 @@
 -- 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' CoursesCourseWorkStudentSubmissionsPatch (Maybe GFieldMask)
 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
@@ -211,12 +195,6 @@
   = 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})
@@ -247,10 +225,8 @@
               _ccwsspXgafv
               _ccwsspUploadProtocol
               _ccwsspUpdateMask
-              (Just _ccwsspPp)
               _ccwsspAccessToken
               _ccwsspUploadType
-              _ccwsspBearerToken
               _ccwsspCallback
               (Just AltJSON)
               _ccwsspPayload
diff --git a/gen/Network/Google/Resource/Classroom/Courses/CourseWork/StudentSubmissions/Reclaim.hs b/gen/Network/Google/Resource/Classroom/Courses/CourseWork/StudentSubmissions/Reclaim.hs
--- a/gen/Network/Google/Resource/Classroom/Courses/CourseWork/StudentSubmissions/Reclaim.hs
+++ b/gen/Network/Google/Resource/Classroom/Courses/CourseWork/StudentSubmissions/Reclaim.hs
@@ -22,7 +22,7 @@
 --
 -- 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
+-- files to the student and updates the submission state. Only the student
 -- that owns 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
@@ -47,17 +47,15 @@
     , CoursesCourseWorkStudentSubmissionsReclaim
 
     -- * Request Lenses
-    , couXgafv
-    , couUploadProtocol
-    , couPp
-    , couCourseId
-    , couAccessToken
-    , couUploadType
-    , couPayload
-    , couBearerToken
-    , couId
-    , couCallback
-    , couCourseWorkId
+    , ccwssrcXgafv
+    , ccwssrcUploadProtocol
+    , ccwssrcCourseId
+    , ccwssrcAccessToken
+    , ccwssrcUploadType
+    , ccwssrcPayload
+    , ccwssrcId
+    , ccwssrcCallback
+    , ccwssrcCourseWorkId
     ) where
 
 import           Network.Google.Classroom.Types
@@ -74,21 +72,18 @@
              Capture "courseWorkId" Text :>
                "studentSubmissions" :>
                  CaptureMode "id" "reclaim" Text :>
-                   QueryParam "$.xgafv" Text :>
+                   QueryParam "$.xgafv" Xgafv :>
                      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
+                       QueryParam "access_token" Text :>
+                         QueryParam "uploadType" 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
+-- files to the student and updates the submission state. Only the student
 -- that owns 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
@@ -104,122 +99,109 @@
 --
 -- /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
+    { _ccwssrcXgafv          :: !(Maybe Xgafv)
+    , _ccwssrcUploadProtocol :: !(Maybe Text)
+    , _ccwssrcCourseId       :: !Text
+    , _ccwssrcAccessToken    :: !(Maybe Text)
+    , _ccwssrcUploadType     :: !(Maybe Text)
+    , _ccwssrcPayload        :: !ReclaimStudentSubmissionRequest
+    , _ccwssrcId             :: !Text
+    , _ccwssrcCallback       :: !(Maybe Text)
+    , _ccwssrcCourseWorkId   :: !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'
+-- * 'ccwssrcXgafv'
 --
--- * 'couCourseId'
+-- * 'ccwssrcUploadProtocol'
 --
--- * 'couAccessToken'
+-- * 'ccwssrcCourseId'
 --
--- * 'couUploadType'
+-- * 'ccwssrcAccessToken'
 --
--- * 'couPayload'
+-- * 'ccwssrcUploadType'
 --
--- * 'couBearerToken'
+-- * 'ccwssrcPayload'
 --
--- * 'couId'
+-- * 'ccwssrcId'
 --
--- * 'couCallback'
+-- * 'ccwssrcCallback'
 --
--- * 'couCourseWorkId'
+-- * 'ccwssrcCourseWorkId'
 coursesCourseWorkStudentSubmissionsReclaim
-    :: Text -- ^ 'couCourseId'
-    -> ReclaimStudentSubmissionRequest -- ^ 'couPayload'
-    -> Text -- ^ 'couId'
-    -> Text -- ^ 'couCourseWorkId'
+    :: Text -- ^ 'ccwssrcCourseId'
+    -> ReclaimStudentSubmissionRequest -- ^ 'ccwssrcPayload'
+    -> Text -- ^ 'ccwssrcId'
+    -> Text -- ^ 'ccwssrcCourseWorkId'
     -> CoursesCourseWorkStudentSubmissionsReclaim
-coursesCourseWorkStudentSubmissionsReclaim pCouCourseId_ pCouPayload_ pCouId_ pCouCourseWorkId_ =
+coursesCourseWorkStudentSubmissionsReclaim pCcwssrcCourseId_ pCcwssrcPayload_ pCcwssrcId_ pCcwssrcCourseWorkId_ =
     CoursesCourseWorkStudentSubmissionsReclaim'
-    { _couXgafv = Nothing
-    , _couUploadProtocol = Nothing
-    , _couPp = True
-    , _couCourseId = pCouCourseId_
-    , _couAccessToken = Nothing
-    , _couUploadType = Nothing
-    , _couPayload = pCouPayload_
-    , _couBearerToken = Nothing
-    , _couId = pCouId_
-    , _couCallback = Nothing
-    , _couCourseWorkId = pCouCourseWorkId_
+    { _ccwssrcXgafv = Nothing
+    , _ccwssrcUploadProtocol = Nothing
+    , _ccwssrcCourseId = pCcwssrcCourseId_
+    , _ccwssrcAccessToken = Nothing
+    , _ccwssrcUploadType = Nothing
+    , _ccwssrcPayload = pCcwssrcPayload_
+    , _ccwssrcId = pCcwssrcId_
+    , _ccwssrcCallback = Nothing
+    , _ccwssrcCourseWorkId = pCcwssrcCourseWorkId_
     }
 
 -- | V1 error format.
-couXgafv :: Lens' CoursesCourseWorkStudentSubmissionsReclaim (Maybe Text)
-couXgafv = lens _couXgafv (\ s a -> s{_couXgafv = a})
+ccwssrcXgafv :: Lens' CoursesCourseWorkStudentSubmissionsReclaim (Maybe Xgafv)
+ccwssrcXgafv
+  = lens _ccwssrcXgafv (\ s a -> s{_ccwssrcXgafv = 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})
+ccwssrcUploadProtocol :: Lens' CoursesCourseWorkStudentSubmissionsReclaim (Maybe Text)
+ccwssrcUploadProtocol
+  = lens _ccwssrcUploadProtocol
+      (\ s a -> s{_ccwssrcUploadProtocol = 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})
+ccwssrcCourseId :: Lens' CoursesCourseWorkStudentSubmissionsReclaim Text
+ccwssrcCourseId
+  = lens _ccwssrcCourseId
+      (\ s a -> s{_ccwssrcCourseId = a})
 
 -- | OAuth access token.
-couAccessToken :: Lens' CoursesCourseWorkStudentSubmissionsReclaim (Maybe Text)
-couAccessToken
-  = lens _couAccessToken
-      (\ s a -> s{_couAccessToken = a})
+ccwssrcAccessToken :: Lens' CoursesCourseWorkStudentSubmissionsReclaim (Maybe Text)
+ccwssrcAccessToken
+  = lens _ccwssrcAccessToken
+      (\ s a -> s{_ccwssrcAccessToken = a})
 
 -- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
-couUploadType :: Lens' CoursesCourseWorkStudentSubmissionsReclaim (Maybe Text)
-couUploadType
-  = lens _couUploadType
-      (\ s a -> s{_couUploadType = a})
+ccwssrcUploadType :: Lens' CoursesCourseWorkStudentSubmissionsReclaim (Maybe Text)
+ccwssrcUploadType
+  = lens _ccwssrcUploadType
+      (\ s a -> s{_ccwssrcUploadType = 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})
+ccwssrcPayload :: Lens' CoursesCourseWorkStudentSubmissionsReclaim ReclaimStudentSubmissionRequest
+ccwssrcPayload
+  = lens _ccwssrcPayload
+      (\ s a -> s{_ccwssrcPayload = a})
 
 -- | Identifier of the student submission.
-couId :: Lens' CoursesCourseWorkStudentSubmissionsReclaim Text
-couId = lens _couId (\ s a -> s{_couId = a})
+ccwssrcId :: Lens' CoursesCourseWorkStudentSubmissionsReclaim Text
+ccwssrcId
+  = lens _ccwssrcId (\ s a -> s{_ccwssrcId = a})
 
 -- | JSONP
-couCallback :: Lens' CoursesCourseWorkStudentSubmissionsReclaim (Maybe Text)
-couCallback
-  = lens _couCallback (\ s a -> s{_couCallback = a})
+ccwssrcCallback :: Lens' CoursesCourseWorkStudentSubmissionsReclaim (Maybe Text)
+ccwssrcCallback
+  = lens _ccwssrcCallback
+      (\ s a -> s{_ccwssrcCallback = a})
 
 -- | Identifier of the course work.
-couCourseWorkId :: Lens' CoursesCourseWorkStudentSubmissionsReclaim Text
-couCourseWorkId
-  = lens _couCourseWorkId
-      (\ s a -> s{_couCourseWorkId = a})
+ccwssrcCourseWorkId :: Lens' CoursesCourseWorkStudentSubmissionsReclaim Text
+ccwssrcCourseWorkId
+  = lens _ccwssrcCourseWorkId
+      (\ s a -> s{_ccwssrcCourseWorkId = a})
 
 instance GoogleRequest
          CoursesCourseWorkStudentSubmissionsReclaim where
@@ -231,15 +213,14 @@
              '["https://www.googleapis.com/auth/classroom.coursework.me"]
         requestClient
           CoursesCourseWorkStudentSubmissionsReclaim'{..}
-          = go _couCourseId _couCourseWorkId _couId _couXgafv
-              _couUploadProtocol
-              (Just _couPp)
-              _couAccessToken
-              _couUploadType
-              _couBearerToken
-              _couCallback
+          = go _ccwssrcCourseId _ccwssrcCourseWorkId _ccwssrcId
+              _ccwssrcXgafv
+              _ccwssrcUploadProtocol
+              _ccwssrcAccessToken
+              _ccwssrcUploadType
+              _ccwssrcCallback
               (Just AltJSON)
-              _couPayload
+              _ccwssrcPayload
               classroomService
           where go
                   = buildClient
diff --git a/gen/Network/Google/Resource/Classroom/Courses/CourseWork/StudentSubmissions/Return.hs b/gen/Network/Google/Resource/Classroom/Courses/CourseWork/StudentSubmissions/Return.hs
--- a/gen/Network/Google/Resource/Classroom/Courses/CourseWork/StudentSubmissions/Return.hs
+++ b/gen/Network/Google/Resource/Classroom/Courses/CourseWork/StudentSubmissions/Return.hs
@@ -48,12 +48,10 @@
     -- * Request Lenses
     , ccwssrXgafv
     , ccwssrUploadProtocol
-    , ccwssrPp
     , ccwssrCourseId
     , ccwssrAccessToken
     , ccwssrUploadType
     , ccwssrPayload
-    , ccwssrBearerToken
     , ccwssrId
     , ccwssrCallback
     , ccwssrCourseWorkId
@@ -73,17 +71,14 @@
              Capture "courseWorkId" Text :>
                "studentSubmissions" :>
                  CaptureMode "id" "return" Text :>
-                   QueryParam "$.xgafv" Text :>
+                   QueryParam "$.xgafv" Xgafv :>
                      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
+                       QueryParam "access_token" Text :>
+                         QueryParam "uploadType" 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
@@ -102,14 +97,12 @@
 --
 -- /See:/ 'coursesCourseWorkStudentSubmissionsReturn' smart constructor.
 data CoursesCourseWorkStudentSubmissionsReturn = CoursesCourseWorkStudentSubmissionsReturn'
-    { _ccwssrXgafv          :: !(Maybe Text)
+    { _ccwssrXgafv          :: !(Maybe Xgafv)
     , _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
@@ -123,8 +116,6 @@
 --
 -- * 'ccwssrUploadProtocol'
 --
--- * 'ccwssrPp'
---
 -- * 'ccwssrCourseId'
 --
 -- * 'ccwssrAccessToken'
@@ -133,8 +124,6 @@
 --
 -- * 'ccwssrPayload'
 --
--- * 'ccwssrBearerToken'
---
 -- * 'ccwssrId'
 --
 -- * 'ccwssrCallback'
@@ -150,19 +139,17 @@
     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' CoursesCourseWorkStudentSubmissionsReturn (Maybe Xgafv)
 ccwssrXgafv
   = lens _ccwssrXgafv (\ s a -> s{_ccwssrXgafv = a})
 
@@ -172,10 +159,6 @@
   = 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
@@ -201,12 +184,6 @@
   = 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})
@@ -235,10 +212,8 @@
           = go _ccwssrCourseId _ccwssrCourseWorkId _ccwssrId
               _ccwssrXgafv
               _ccwssrUploadProtocol
-              (Just _ccwssrPp)
               _ccwssrAccessToken
               _ccwssrUploadType
-              _ccwssrBearerToken
               _ccwssrCallback
               (Just AltJSON)
               _ccwssrPayload
diff --git a/gen/Network/Google/Resource/Classroom/Courses/CourseWork/StudentSubmissions/TurnIn.hs b/gen/Network/Google/Resource/Classroom/Courses/CourseWork/StudentSubmissions/TurnIn.hs
--- a/gen/Network/Google/Resource/Classroom/Courses/CourseWork/StudentSubmissions/TurnIn.hs
+++ b/gen/Network/Google/Resource/Classroom/Courses/CourseWork/StudentSubmissions/TurnIn.hs
@@ -46,12 +46,10 @@
     -- * Request Lenses
     , ccwsstiXgafv
     , ccwsstiUploadProtocol
-    , ccwsstiPp
     , ccwsstiCourseId
     , ccwsstiAccessToken
     , ccwsstiUploadType
     , ccwsstiPayload
-    , ccwsstiBearerToken
     , ccwsstiId
     , ccwsstiCallback
     , ccwsstiCourseWorkId
@@ -71,17 +69,14 @@
              Capture "courseWorkId" Text :>
                "studentSubmissions" :>
                  CaptureMode "id" "turnIn" Text :>
-                   QueryParam "$.xgafv" Text :>
+                   QueryParam "$.xgafv" Xgafv :>
                      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
+                       QueryParam "access_token" Text :>
+                         QueryParam "uploadType" 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
@@ -98,14 +93,12 @@
 --
 -- /See:/ 'coursesCourseWorkStudentSubmissionsTurnIn' smart constructor.
 data CoursesCourseWorkStudentSubmissionsTurnIn = CoursesCourseWorkStudentSubmissionsTurnIn'
-    { _ccwsstiXgafv          :: !(Maybe Text)
+    { _ccwsstiXgafv          :: !(Maybe Xgafv)
     , _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
@@ -119,8 +112,6 @@
 --
 -- * 'ccwsstiUploadProtocol'
 --
--- * 'ccwsstiPp'
---
 -- * 'ccwsstiCourseId'
 --
 -- * 'ccwsstiAccessToken'
@@ -129,8 +120,6 @@
 --
 -- * 'ccwsstiPayload'
 --
--- * 'ccwsstiBearerToken'
---
 -- * 'ccwsstiId'
 --
 -- * 'ccwsstiCallback'
@@ -146,19 +135,17 @@
     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' CoursesCourseWorkStudentSubmissionsTurnIn (Maybe Xgafv)
 ccwsstiXgafv
   = lens _ccwsstiXgafv (\ s a -> s{_ccwsstiXgafv = a})
 
@@ -168,11 +155,6 @@
   = 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
@@ -198,12 +180,6 @@
   = 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
@@ -233,10 +209,8 @@
           = go _ccwsstiCourseId _ccwsstiCourseWorkId _ccwsstiId
               _ccwsstiXgafv
               _ccwsstiUploadProtocol
-              (Just _ccwsstiPp)
               _ccwsstiAccessToken
               _ccwsstiUploadType
-              _ccwsstiBearerToken
               _ccwsstiCallback
               (Just AltJSON)
               _ccwsstiPayload
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
@@ -42,11 +42,9 @@
     -- * Request Lenses
     , ccXgafv
     , ccUploadProtocol
-    , ccPp
     , ccAccessToken
     , ccUploadType
     , ccPayload
-    , ccBearerToken
     , ccCallback
     ) where
 
@@ -58,15 +56,13 @@
 type CoursesCreateResource =
      "v1" :>
        "courses" :>
-         QueryParam "$.xgafv" Text :>
+         QueryParam "$.xgafv" Xgafv :>
            QueryParam "upload_protocol" Text :>
-             QueryParam "pp" Bool :>
-               QueryParam "access_token" Text :>
-                 QueryParam "uploadType" Text :>
-                   QueryParam "bearer_token" Text :>
-                     QueryParam "callback" Text :>
-                       QueryParam "alt" AltJSON :>
-                         ReqBody '[JSON] Course :> Post '[JSON] Course
+             QueryParam "access_token" Text :>
+               QueryParam "uploadType" Text :>
+                 QueryParam "callback" Text :>
+                   QueryParam "alt" AltJSON :>
+                     ReqBody '[JSON] Course :> Post '[JSON] Course
 
 -- | Creates a course. The user specified in \`ownerId\` is the owner of the
 -- created course and added as a teacher. This method returns the following
@@ -79,13 +75,11 @@
 --
 -- /See:/ 'coursesCreate' smart constructor.
 data CoursesCreate = CoursesCreate'
-    { _ccXgafv          :: !(Maybe Text)
+    { _ccXgafv          :: !(Maybe Xgafv)
     , _ccUploadProtocol :: !(Maybe Text)
-    , _ccPp             :: !Bool
     , _ccAccessToken    :: !(Maybe Text)
     , _ccUploadType     :: !(Maybe Text)
     , _ccPayload        :: !Course
-    , _ccBearerToken    :: !(Maybe Text)
     , _ccCallback       :: !(Maybe Text)
     } deriving (Eq,Show,Data,Typeable,Generic)
 
@@ -97,16 +91,12 @@
 --
 -- * 'ccUploadProtocol'
 --
--- * 'ccPp'
---
 -- * 'ccAccessToken'
 --
 -- * 'ccUploadType'
 --
 -- * 'ccPayload'
 --
--- * 'ccBearerToken'
---
 -- * 'ccCallback'
 coursesCreate
     :: Course -- ^ 'ccPayload'
@@ -115,16 +105,14 @@
     CoursesCreate'
     { _ccXgafv = Nothing
     , _ccUploadProtocol = Nothing
-    , _ccPp = True
     , _ccAccessToken = Nothing
     , _ccUploadType = Nothing
     , _ccPayload = pCcPayload_
-    , _ccBearerToken = Nothing
     , _ccCallback = Nothing
     }
 
 -- | V1 error format.
-ccXgafv :: Lens' CoursesCreate (Maybe Text)
+ccXgafv :: Lens' CoursesCreate (Maybe Xgafv)
 ccXgafv = lens _ccXgafv (\ s a -> s{_ccXgafv = a})
 
 -- | Upload protocol for media (e.g. \"raw\", \"multipart\").
@@ -133,10 +121,6 @@
   = lens _ccUploadProtocol
       (\ s a -> s{_ccUploadProtocol = a})
 
--- | Pretty-print response.
-ccPp :: Lens' CoursesCreate Bool
-ccPp = lens _ccPp (\ s a -> s{_ccPp = a})
-
 -- | OAuth access token.
 ccAccessToken :: Lens' CoursesCreate (Maybe Text)
 ccAccessToken
@@ -153,12 +137,6 @@
 ccPayload
   = lens _ccPayload (\ s a -> s{_ccPayload = a})
 
--- | OAuth bearer token.
-ccBearerToken :: Lens' CoursesCreate (Maybe Text)
-ccBearerToken
-  = lens _ccBearerToken
-      (\ s a -> s{_ccBearerToken = a})
-
 -- | JSONP
 ccCallback :: Lens' CoursesCreate (Maybe Text)
 ccCallback
@@ -169,10 +147,8 @@
         type Scopes CoursesCreate =
              '["https://www.googleapis.com/auth/classroom.courses"]
         requestClient CoursesCreate'{..}
-          = go _ccXgafv _ccUploadProtocol (Just _ccPp)
-              _ccAccessToken
+          = go _ccXgafv _ccUploadProtocol _ccAccessToken
               _ccUploadType
-              _ccBearerToken
               _ccCallback
               (Just AltJSON)
               _ccPayload
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
@@ -38,10 +38,8 @@
     -- * Request Lenses
     , cdXgafv
     , cdUploadProtocol
-    , cdPp
     , cdAccessToken
     , cdUploadType
-    , cdBearerToken
     , cdId
     , cdCallback
     ) where
@@ -55,14 +53,12 @@
      "v1" :>
        "courses" :>
          Capture "id" Text :>
-           QueryParam "$.xgafv" Text :>
+           QueryParam "$.xgafv" Xgafv :>
              QueryParam "upload_protocol" Text :>
-               QueryParam "pp" Bool :>
-                 QueryParam "access_token" Text :>
-                   QueryParam "uploadType" Text :>
-                     QueryParam "bearer_token" Text :>
-                       QueryParam "callback" Text :>
-                         QueryParam "alt" AltJSON :> Delete '[JSON] Empty
+               QueryParam "access_token" Text :>
+                 QueryParam "uploadType" Text :>
+                   QueryParam "callback" Text :>
+                     QueryParam "alt" AltJSON :> Delete '[JSON] Empty
 
 -- | Deletes a course. This method returns the following error codes: *
 -- \`PERMISSION_DENIED\` if the requesting user is not permitted to delete
@@ -71,12 +67,10 @@
 --
 -- /See:/ 'coursesDelete' smart constructor.
 data CoursesDelete = CoursesDelete'
-    { _cdXgafv          :: !(Maybe Text)
+    { _cdXgafv          :: !(Maybe Xgafv)
     , _cdUploadProtocol :: !(Maybe Text)
-    , _cdPp             :: !Bool
     , _cdAccessToken    :: !(Maybe Text)
     , _cdUploadType     :: !(Maybe Text)
-    , _cdBearerToken    :: !(Maybe Text)
     , _cdId             :: !Text
     , _cdCallback       :: !(Maybe Text)
     } deriving (Eq,Show,Data,Typeable,Generic)
@@ -89,14 +83,10 @@
 --
 -- * 'cdUploadProtocol'
 --
--- * 'cdPp'
---
 -- * 'cdAccessToken'
 --
 -- * 'cdUploadType'
 --
--- * 'cdBearerToken'
---
 -- * 'cdId'
 --
 -- * 'cdCallback'
@@ -107,16 +97,14 @@
     CoursesDelete'
     { _cdXgafv = Nothing
     , _cdUploadProtocol = Nothing
-    , _cdPp = True
     , _cdAccessToken = Nothing
     , _cdUploadType = Nothing
-    , _cdBearerToken = Nothing
     , _cdId = pCdId_
     , _cdCallback = Nothing
     }
 
 -- | V1 error format.
-cdXgafv :: Lens' CoursesDelete (Maybe Text)
+cdXgafv :: Lens' CoursesDelete (Maybe Xgafv)
 cdXgafv = lens _cdXgafv (\ s a -> s{_cdXgafv = a})
 
 -- | Upload protocol for media (e.g. \"raw\", \"multipart\").
@@ -125,10 +113,6 @@
   = lens _cdUploadProtocol
       (\ s a -> s{_cdUploadProtocol = a})
 
--- | Pretty-print response.
-cdPp :: Lens' CoursesDelete Bool
-cdPp = lens _cdPp (\ s a -> s{_cdPp = a})
-
 -- | OAuth access token.
 cdAccessToken :: Lens' CoursesDelete (Maybe Text)
 cdAccessToken
@@ -140,12 +124,6 @@
 cdUploadType
   = lens _cdUploadType (\ s a -> s{_cdUploadType = a})
 
--- | OAuth bearer token.
-cdBearerToken :: Lens' CoursesDelete (Maybe Text)
-cdBearerToken
-  = lens _cdBearerToken
-      (\ s a -> s{_cdBearerToken = a})
-
 -- | Identifier of the course to delete. This identifier can be either the
 -- Classroom-assigned identifier or an alias.
 cdId :: Lens' CoursesDelete Text
@@ -161,10 +139,8 @@
         type Scopes CoursesDelete =
              '["https://www.googleapis.com/auth/classroom.courses"]
         requestClient CoursesDelete'{..}
-          = go _cdId _cdXgafv _cdUploadProtocol (Just _cdPp)
-              _cdAccessToken
+          = go _cdId _cdXgafv _cdUploadProtocol _cdAccessToken
               _cdUploadType
-              _cdBearerToken
               _cdCallback
               (Just AltJSON)
               classroomService
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
@@ -38,10 +38,8 @@
     -- * Request Lenses
     , cgXgafv
     , cgUploadProtocol
-    , cgPp
     , cgAccessToken
     , cgUploadType
-    , cgBearerToken
     , cgId
     , cgCallback
     ) where
@@ -55,14 +53,12 @@
      "v1" :>
        "courses" :>
          Capture "id" Text :>
-           QueryParam "$.xgafv" Text :>
+           QueryParam "$.xgafv" Xgafv :>
              QueryParam "upload_protocol" Text :>
-               QueryParam "pp" Bool :>
-                 QueryParam "access_token" Text :>
-                   QueryParam "uploadType" Text :>
-                     QueryParam "bearer_token" Text :>
-                       QueryParam "callback" Text :>
-                         QueryParam "alt" AltJSON :> Get '[JSON] Course
+               QueryParam "access_token" Text :>
+                 QueryParam "uploadType" Text :>
+                   QueryParam "callback" Text :>
+                     QueryParam "alt" AltJSON :> Get '[JSON] Course
 
 -- | Returns a course. This method returns the following error codes: *
 -- \`PERMISSION_DENIED\` if the requesting user is not permitted to access
@@ -71,12 +67,10 @@
 --
 -- /See:/ 'coursesGet' smart constructor.
 data CoursesGet = CoursesGet'
-    { _cgXgafv          :: !(Maybe Text)
+    { _cgXgafv          :: !(Maybe Xgafv)
     , _cgUploadProtocol :: !(Maybe Text)
-    , _cgPp             :: !Bool
     , _cgAccessToken    :: !(Maybe Text)
     , _cgUploadType     :: !(Maybe Text)
-    , _cgBearerToken    :: !(Maybe Text)
     , _cgId             :: !Text
     , _cgCallback       :: !(Maybe Text)
     } deriving (Eq,Show,Data,Typeable,Generic)
@@ -89,14 +83,10 @@
 --
 -- * 'cgUploadProtocol'
 --
--- * 'cgPp'
---
 -- * 'cgAccessToken'
 --
 -- * 'cgUploadType'
 --
--- * 'cgBearerToken'
---
 -- * 'cgId'
 --
 -- * 'cgCallback'
@@ -107,16 +97,14 @@
     CoursesGet'
     { _cgXgafv = Nothing
     , _cgUploadProtocol = Nothing
-    , _cgPp = True
     , _cgAccessToken = Nothing
     , _cgUploadType = Nothing
-    , _cgBearerToken = Nothing
     , _cgId = pCgId_
     , _cgCallback = Nothing
     }
 
 -- | V1 error format.
-cgXgafv :: Lens' CoursesGet (Maybe Text)
+cgXgafv :: Lens' CoursesGet (Maybe Xgafv)
 cgXgafv = lens _cgXgafv (\ s a -> s{_cgXgafv = a})
 
 -- | Upload protocol for media (e.g. \"raw\", \"multipart\").
@@ -125,10 +113,6 @@
   = lens _cgUploadProtocol
       (\ s a -> s{_cgUploadProtocol = a})
 
--- | Pretty-print response.
-cgPp :: Lens' CoursesGet Bool
-cgPp = lens _cgPp (\ s a -> s{_cgPp = a})
-
 -- | OAuth access token.
 cgAccessToken :: Lens' CoursesGet (Maybe Text)
 cgAccessToken
@@ -140,12 +124,6 @@
 cgUploadType
   = lens _cgUploadType (\ s a -> s{_cgUploadType = a})
 
--- | OAuth bearer token.
-cgBearerToken :: Lens' CoursesGet (Maybe Text)
-cgBearerToken
-  = lens _cgBearerToken
-      (\ s a -> s{_cgBearerToken = a})
-
 -- | Identifier of the course to return. This identifier can be either the
 -- Classroom-assigned identifier or an alias.
 cgId :: Lens' CoursesGet Text
@@ -162,10 +140,8 @@
              '["https://www.googleapis.com/auth/classroom.courses",
                "https://www.googleapis.com/auth/classroom.courses.readonly"]
         requestClient CoursesGet'{..}
-          = go _cgId _cgXgafv _cgUploadProtocol (Just _cgPp)
-              _cgAccessToken
+          = go _cgId _cgXgafv _cgUploadProtocol _cgAccessToken
               _cgUploadType
-              _cgBearerToken
               _cgCallback
               (Just AltJSON)
               classroomService
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
@@ -21,10 +21,12 @@
 -- Portability : non-portable (GHC extensions)
 --
 -- Returns a list of courses that the requesting user is permitted to view,
--- restricted to those that match the request. This method returns the
--- following error codes: * \`PERMISSION_DENIED\` for access errors. *
--- \`INVALID_ARGUMENT\` if the query argument is malformed. * \`NOT_FOUND\`
--- if any users specified in the query arguments do not exist.
+-- restricted to those that match the request. Returned courses are ordered
+-- by creation time, with the most recently created coming first. This
+-- method returns the following error codes: * \`PERMISSION_DENIED\` for
+-- access errors. * \`INVALID_ARGUMENT\` if the query argument is
+-- malformed. * \`NOT_FOUND\` if any users specified in the query arguments
+-- do not exist.
 --
 -- /See:/ <https://developers.google.com/classroom/ Google Classroom API Reference> for @classroom.courses.list@.
 module Network.Google.Resource.Classroom.Courses.List
@@ -40,11 +42,9 @@
     , clStudentId
     , clXgafv
     , clUploadProtocol
-    , clPp
     , clAccessToken
     , clUploadType
     , clTeacherId
-    , clBearerToken
     , clPageToken
     , clPageSize
     , clCourseStates
@@ -60,36 +60,34 @@
      "v1" :>
        "courses" :>
          QueryParam "studentId" Text :>
-           QueryParam "$.xgafv" Text :>
+           QueryParam "$.xgafv" Xgafv :>
              QueryParam "upload_protocol" Text :>
-               QueryParam "pp" Bool :>
-                 QueryParam "access_token" Text :>
-                   QueryParam "uploadType" Text :>
-                     QueryParam "teacherId" Text :>
-                       QueryParam "bearer_token" Text :>
-                         QueryParam "pageToken" Text :>
-                           QueryParam "pageSize" (Textual Int32) :>
-                             QueryParams "courseStates" Text :>
-                               QueryParam "callback" Text :>
-                                 QueryParam "alt" AltJSON :>
-                                   Get '[JSON] ListCoursesResponse
+               QueryParam "access_token" Text :>
+                 QueryParam "uploadType" Text :>
+                   QueryParam "teacherId" Text :>
+                     QueryParam "pageToken" Text :>
+                       QueryParam "pageSize" (Textual Int32) :>
+                         QueryParams "courseStates" Text :>
+                           QueryParam "callback" Text :>
+                             QueryParam "alt" AltJSON :>
+                               Get '[JSON] ListCoursesResponse
 
 -- | Returns a list of courses that the requesting user is permitted to view,
--- restricted to those that match the request. This method returns the
--- following error codes: * \`PERMISSION_DENIED\` for access errors. *
--- \`INVALID_ARGUMENT\` if the query argument is malformed. * \`NOT_FOUND\`
--- if any users specified in the query arguments do not exist.
+-- restricted to those that match the request. Returned courses are ordered
+-- by creation time, with the most recently created coming first. This
+-- method returns the following error codes: * \`PERMISSION_DENIED\` for
+-- access errors. * \`INVALID_ARGUMENT\` if the query argument is
+-- malformed. * \`NOT_FOUND\` if any users specified in the query arguments
+-- do not exist.
 --
 -- /See:/ 'coursesList' smart constructor.
 data CoursesList = CoursesList'
     { _clStudentId      :: !(Maybe Text)
-    , _clXgafv          :: !(Maybe Text)
+    , _clXgafv          :: !(Maybe Xgafv)
     , _clUploadProtocol :: !(Maybe Text)
-    , _clPp             :: !Bool
     , _clAccessToken    :: !(Maybe Text)
     , _clUploadType     :: !(Maybe Text)
     , _clTeacherId      :: !(Maybe Text)
-    , _clBearerToken    :: !(Maybe Text)
     , _clPageToken      :: !(Maybe Text)
     , _clPageSize       :: !(Maybe (Textual Int32))
     , _clCourseStates   :: !(Maybe [Text])
@@ -106,16 +104,12 @@
 --
 -- * 'clUploadProtocol'
 --
--- * 'clPp'
---
 -- * 'clAccessToken'
 --
 -- * 'clUploadType'
 --
 -- * 'clTeacherId'
 --
--- * 'clBearerToken'
---
 -- * 'clPageToken'
 --
 -- * 'clPageSize'
@@ -130,11 +124,9 @@
     { _clStudentId = Nothing
     , _clXgafv = Nothing
     , _clUploadProtocol = Nothing
-    , _clPp = True
     , _clAccessToken = Nothing
     , _clUploadType = Nothing
     , _clTeacherId = Nothing
-    , _clBearerToken = Nothing
     , _clPageToken = Nothing
     , _clPageSize = Nothing
     , _clCourseStates = Nothing
@@ -150,7 +142,7 @@
   = lens _clStudentId (\ s a -> s{_clStudentId = a})
 
 -- | V1 error format.
-clXgafv :: Lens' CoursesList (Maybe Text)
+clXgafv :: Lens' CoursesList (Maybe Xgafv)
 clXgafv = lens _clXgafv (\ s a -> s{_clXgafv = a})
 
 -- | Upload protocol for media (e.g. \"raw\", \"multipart\").
@@ -159,10 +151,6 @@
   = lens _clUploadProtocol
       (\ s a -> s{_clUploadProtocol = a})
 
--- | Pretty-print response.
-clPp :: Lens' CoursesList Bool
-clPp = lens _clPp (\ s a -> s{_clPp = a})
-
 -- | OAuth access token.
 clAccessToken :: Lens' CoursesList (Maybe Text)
 clAccessToken
@@ -182,12 +170,6 @@
 clTeacherId
   = lens _clTeacherId (\ s a -> s{_clTeacherId = a})
 
--- | OAuth bearer token.
-clBearerToken :: Lens' CoursesList (Maybe Text)
-clBearerToken
-  = lens _clBearerToken
-      (\ s a -> s{_clBearerToken = a})
-
 -- | nextPageToken value returned from a previous list call, indicating that
 -- the subsequent page of results should be returned. The list request must
 -- be otherwise identical to the one that resulted in this token.
@@ -203,7 +185,8 @@
   = lens _clPageSize (\ s a -> s{_clPageSize = a}) .
       mapping _Coerce
 
--- | Restricts returned courses to those in one of the specified states
+-- | Restricts returned courses to those in one of the specified states The
+-- default value is ACTIVE, ARCHIVED, PROVISIONED, DECLINED.
 clCourseStates :: Lens' CoursesList [Text]
 clCourseStates
   = lens _clCourseStates
@@ -223,11 +206,9 @@
                "https://www.googleapis.com/auth/classroom.courses.readonly"]
         requestClient CoursesList'{..}
           = go _clStudentId _clXgafv _clUploadProtocol
-              (Just _clPp)
               _clAccessToken
               _clUploadType
               _clTeacherId
-              _clBearerToken
               _clPageToken
               _clPageSize
               (_clCourseStates ^. _Default)
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
@@ -42,11 +42,9 @@
     , cpXgafv
     , cpUploadProtocol
     , cpUpdateMask
-    , cpPp
     , cpAccessToken
     , cpUploadType
     , cpPayload
-    , cpBearerToken
     , cpId
     , cpCallback
     ) where
@@ -60,16 +58,14 @@
      "v1" :>
        "courses" :>
          Capture "id" Text :>
-           QueryParam "$.xgafv" Text :>
+           QueryParam "$.xgafv" Xgafv :>
              QueryParam "upload_protocol" Text :>
-               QueryParam "updateMask" Text :>
-                 QueryParam "pp" Bool :>
-                   QueryParam "access_token" Text :>
-                     QueryParam "uploadType" Text :>
-                       QueryParam "bearer_token" Text :>
-                         QueryParam "callback" Text :>
-                           QueryParam "alt" AltJSON :>
-                             ReqBody '[JSON] Course :> Patch '[JSON] Course
+               QueryParam "updateMask" GFieldMask :>
+                 QueryParam "access_token" Text :>
+                   QueryParam "uploadType" Text :>
+                     QueryParam "callback" Text :>
+                       QueryParam "alt" AltJSON :>
+                         ReqBody '[JSON] Course :> Patch '[JSON] Course
 
 -- | Updates one or more fields in a course. This method returns the
 -- following error codes: * \`PERMISSION_DENIED\` if the requesting user is
@@ -81,14 +77,12 @@
 --
 -- /See:/ 'coursesPatch' smart constructor.
 data CoursesPatch = CoursesPatch'
-    { _cpXgafv          :: !(Maybe Text)
+    { _cpXgafv          :: !(Maybe Xgafv)
     , _cpUploadProtocol :: !(Maybe Text)
-    , _cpUpdateMask     :: !(Maybe Text)
-    , _cpPp             :: !Bool
+    , _cpUpdateMask     :: !(Maybe GFieldMask)
     , _cpAccessToken    :: !(Maybe Text)
     , _cpUploadType     :: !(Maybe Text)
     , _cpPayload        :: !Course
-    , _cpBearerToken    :: !(Maybe Text)
     , _cpId             :: !Text
     , _cpCallback       :: !(Maybe Text)
     } deriving (Eq,Show,Data,Typeable,Generic)
@@ -103,16 +97,12 @@
 --
 -- * 'cpUpdateMask'
 --
--- * 'cpPp'
---
 -- * 'cpAccessToken'
 --
 -- * 'cpUploadType'
 --
 -- * 'cpPayload'
 --
--- * 'cpBearerToken'
---
 -- * 'cpId'
 --
 -- * 'cpCallback'
@@ -125,17 +115,15 @@
     { _cpXgafv = Nothing
     , _cpUploadProtocol = Nothing
     , _cpUpdateMask = Nothing
-    , _cpPp = True
     , _cpAccessToken = Nothing
     , _cpUploadType = Nothing
     , _cpPayload = pCpPayload_
-    , _cpBearerToken = Nothing
     , _cpId = pCpId_
     , _cpCallback = Nothing
     }
 
 -- | V1 error format.
-cpXgafv :: Lens' CoursesPatch (Maybe Text)
+cpXgafv :: Lens' CoursesPatch (Maybe Xgafv)
 cpXgafv = lens _cpXgafv (\ s a -> s{_cpXgafv = a})
 
 -- | Upload protocol for media (e.g. \"raw\", \"multipart\").
@@ -147,17 +135,15 @@
 -- | Mask that identifies which fields on the course to update. This field is
 -- required to do an update. The update will fail if invalid fields are
 -- specified. The following fields are valid: * \`name\` * \`section\` *
--- \`descriptionHeading\` * \`description\` * \`room\` * \`courseState\`
--- When set in a query parameter, this field should be specified as
--- \`updateMask=,,...\`
-cpUpdateMask :: Lens' CoursesPatch (Maybe Text)
+-- \`descriptionHeading\` * \`description\` * \`room\` * \`courseState\` *
+-- \`ownerId\` Note: patches to ownerId are treated as being effective
+-- immediately, but in practice it may take some time for the ownership
+-- transfer of all affected resources to complete. When set in a query
+-- parameter, this field should be specified as \`updateMask=,,...\`
+cpUpdateMask :: Lens' CoursesPatch (Maybe GFieldMask)
 cpUpdateMask
   = lens _cpUpdateMask (\ s a -> s{_cpUpdateMask = a})
 
--- | Pretty-print response.
-cpPp :: Lens' CoursesPatch Bool
-cpPp = lens _cpPp (\ s a -> s{_cpPp = a})
-
 -- | OAuth access token.
 cpAccessToken :: Lens' CoursesPatch (Maybe Text)
 cpAccessToken
@@ -174,12 +160,6 @@
 cpPayload
   = lens _cpPayload (\ s a -> s{_cpPayload = a})
 
--- | OAuth bearer token.
-cpBearerToken :: Lens' CoursesPatch (Maybe Text)
-cpBearerToken
-  = lens _cpBearerToken
-      (\ s a -> s{_cpBearerToken = a})
-
 -- | Identifier of the course to update. This identifier can be either the
 -- Classroom-assigned identifier or an alias.
 cpId :: Lens' CoursesPatch Text
@@ -196,10 +176,8 @@
              '["https://www.googleapis.com/auth/classroom.courses"]
         requestClient CoursesPatch'{..}
           = go _cpId _cpXgafv _cpUploadProtocol _cpUpdateMask
-              (Just _cpPp)
               _cpAccessToken
               _cpUploadType
-              _cpBearerToken
               _cpCallback
               (Just AltJSON)
               _cpPayload
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
@@ -43,13 +43,11 @@
     -- * Request Lenses
     , cscXgafv
     , cscUploadProtocol
-    , cscPp
     , cscCourseId
     , cscAccessToken
     , cscUploadType
     , cscPayload
     , cscEnrollmentCode
-    , cscBearerToken
     , cscCallback
     ) where
 
@@ -63,16 +61,14 @@
        "courses" :>
          Capture "courseId" Text :>
            "students" :>
-             QueryParam "$.xgafv" Text :>
+             QueryParam "$.xgafv" Xgafv :>
                QueryParam "upload_protocol" Text :>
-                 QueryParam "pp" Bool :>
-                   QueryParam "access_token" Text :>
-                     QueryParam "uploadType" Text :>
-                       QueryParam "enrollmentCode" Text :>
-                         QueryParam "bearer_token" Text :>
-                           QueryParam "callback" Text :>
-                             QueryParam "alt" AltJSON :>
-                               ReqBody '[JSON] Student :> Post '[JSON] Student
+                 QueryParam "access_token" Text :>
+                   QueryParam "uploadType" Text :>
+                     QueryParam "enrollmentCode" Text :>
+                       QueryParam "callback" Text :>
+                         QueryParam "alt" AltJSON :>
+                           ReqBody '[JSON] Student :> Post '[JSON] Student
 
 -- | Adds a user as a student of a course. This method returns the following
 -- error codes: * \`PERMISSION_DENIED\` if the requesting user is not
@@ -86,15 +82,13 @@
 --
 -- /See:/ 'coursesStudentsCreate' smart constructor.
 data CoursesStudentsCreate = CoursesStudentsCreate'
-    { _cscXgafv          :: !(Maybe Text)
+    { _cscXgafv          :: !(Maybe Xgafv)
     , _cscUploadProtocol :: !(Maybe Text)
-    , _cscPp             :: !Bool
     , _cscCourseId       :: !Text
     , _cscAccessToken    :: !(Maybe Text)
     , _cscUploadType     :: !(Maybe Text)
     , _cscPayload        :: !Student
     , _cscEnrollmentCode :: !(Maybe Text)
-    , _cscBearerToken    :: !(Maybe Text)
     , _cscCallback       :: !(Maybe Text)
     } deriving (Eq,Show,Data,Typeable,Generic)
 
@@ -106,8 +100,6 @@
 --
 -- * 'cscUploadProtocol'
 --
--- * 'cscPp'
---
 -- * 'cscCourseId'
 --
 -- * 'cscAccessToken'
@@ -118,8 +110,6 @@
 --
 -- * 'cscEnrollmentCode'
 --
--- * 'cscBearerToken'
---
 -- * 'cscCallback'
 coursesStudentsCreate
     :: Text -- ^ 'cscCourseId'
@@ -129,18 +119,16 @@
     CoursesStudentsCreate'
     { _cscXgafv = Nothing
     , _cscUploadProtocol = Nothing
-    , _cscPp = True
     , _cscCourseId = pCscCourseId_
     , _cscAccessToken = Nothing
     , _cscUploadType = Nothing
     , _cscPayload = pCscPayload_
     , _cscEnrollmentCode = Nothing
-    , _cscBearerToken = Nothing
     , _cscCallback = Nothing
     }
 
 -- | V1 error format.
-cscXgafv :: Lens' CoursesStudentsCreate (Maybe Text)
+cscXgafv :: Lens' CoursesStudentsCreate (Maybe Xgafv)
 cscXgafv = lens _cscXgafv (\ s a -> s{_cscXgafv = a})
 
 -- | Upload protocol for media (e.g. \"raw\", \"multipart\").
@@ -149,10 +137,6 @@
   = lens _cscUploadProtocol
       (\ s a -> s{_cscUploadProtocol = a})
 
--- | Pretty-print response.
-cscPp :: Lens' CoursesStudentsCreate Bool
-cscPp = lens _cscPp (\ s a -> s{_cscPp = a})
-
 -- | Identifier of the course to create the student in. This identifier can
 -- be either the Classroom-assigned identifier or an alias.
 cscCourseId :: Lens' CoursesStudentsCreate Text
@@ -185,12 +169,6 @@
   = lens _cscEnrollmentCode
       (\ s a -> s{_cscEnrollmentCode = a})
 
--- | OAuth bearer token.
-cscBearerToken :: Lens' CoursesStudentsCreate (Maybe Text)
-cscBearerToken
-  = lens _cscBearerToken
-      (\ s a -> s{_cscBearerToken = a})
-
 -- | JSONP
 cscCallback :: Lens' CoursesStudentsCreate (Maybe Text)
 cscCallback
@@ -204,11 +182,9 @@
                "https://www.googleapis.com/auth/classroom.rosters"]
         requestClient CoursesStudentsCreate'{..}
           = go _cscCourseId _cscXgafv _cscUploadProtocol
-              (Just _cscPp)
               _cscAccessToken
               _cscUploadType
               _cscEnrollmentCode
-              _cscBearerToken
               _cscCallback
               (Just AltJSON)
               _cscPayload
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
@@ -39,12 +39,10 @@
     -- * Request Lenses
     , csdXgafv
     , csdUploadProtocol
-    , csdPp
     , csdCourseId
     , csdAccessToken
     , csdUploadType
     , csdUserId
-    , csdBearerToken
     , csdCallback
     ) where
 
@@ -59,14 +57,12 @@
          Capture "courseId" Text :>
            "students" :>
              Capture "userId" Text :>
-               QueryParam "$.xgafv" Text :>
+               QueryParam "$.xgafv" Xgafv :>
                  QueryParam "upload_protocol" Text :>
-                   QueryParam "pp" Bool :>
-                     QueryParam "access_token" Text :>
-                       QueryParam "uploadType" Text :>
-                         QueryParam "bearer_token" Text :>
-                           QueryParam "callback" Text :>
-                             QueryParam "alt" AltJSON :> Delete '[JSON] Empty
+                   QueryParam "access_token" Text :>
+                     QueryParam "uploadType" Text :>
+                       QueryParam "callback" Text :>
+                         QueryParam "alt" AltJSON :> Delete '[JSON] Empty
 
 -- | Deletes a student of a course. This method returns the following error
 -- codes: * \`PERMISSION_DENIED\` if the requesting user is not permitted
@@ -76,14 +72,12 @@
 --
 -- /See:/ 'coursesStudentsDelete' smart constructor.
 data CoursesStudentsDelete = CoursesStudentsDelete'
-    { _csdXgafv          :: !(Maybe Text)
+    { _csdXgafv          :: !(Maybe Xgafv)
     , _csdUploadProtocol :: !(Maybe Text)
-    , _csdPp             :: !Bool
     , _csdCourseId       :: !Text
     , _csdAccessToken    :: !(Maybe Text)
     , _csdUploadType     :: !(Maybe Text)
     , _csdUserId         :: !Text
-    , _csdBearerToken    :: !(Maybe Text)
     , _csdCallback       :: !(Maybe Text)
     } deriving (Eq,Show,Data,Typeable,Generic)
 
@@ -95,8 +89,6 @@
 --
 -- * 'csdUploadProtocol'
 --
--- * 'csdPp'
---
 -- * 'csdCourseId'
 --
 -- * 'csdAccessToken'
@@ -105,8 +97,6 @@
 --
 -- * 'csdUserId'
 --
--- * 'csdBearerToken'
---
 -- * 'csdCallback'
 coursesStudentsDelete
     :: Text -- ^ 'csdCourseId'
@@ -116,17 +106,15 @@
     CoursesStudentsDelete'
     { _csdXgafv = Nothing
     , _csdUploadProtocol = Nothing
-    , _csdPp = True
     , _csdCourseId = pCsdCourseId_
     , _csdAccessToken = Nothing
     , _csdUploadType = Nothing
     , _csdUserId = pCsdUserId_
-    , _csdBearerToken = Nothing
     , _csdCallback = Nothing
     }
 
 -- | V1 error format.
-csdXgafv :: Lens' CoursesStudentsDelete (Maybe Text)
+csdXgafv :: Lens' CoursesStudentsDelete (Maybe Xgafv)
 csdXgafv = lens _csdXgafv (\ s a -> s{_csdXgafv = a})
 
 -- | Upload protocol for media (e.g. \"raw\", \"multipart\").
@@ -135,10 +123,6 @@
   = lens _csdUploadProtocol
       (\ s a -> s{_csdUploadProtocol = a})
 
--- | Pretty-print response.
-csdPp :: Lens' CoursesStudentsDelete Bool
-csdPp = lens _csdPp (\ s a -> s{_csdPp = a})
-
 -- | Identifier of the course. This identifier can be either the
 -- Classroom-assigned identifier or an alias.
 csdCourseId :: Lens' CoursesStudentsDelete Text
@@ -164,12 +148,6 @@
 csdUserId
   = lens _csdUserId (\ s a -> s{_csdUserId = a})
 
--- | OAuth bearer token.
-csdBearerToken :: Lens' CoursesStudentsDelete (Maybe Text)
-csdBearerToken
-  = lens _csdBearerToken
-      (\ s a -> s{_csdBearerToken = a})
-
 -- | JSONP
 csdCallback :: Lens' CoursesStudentsDelete (Maybe Text)
 csdCallback
@@ -182,10 +160,8 @@
         requestClient CoursesStudentsDelete'{..}
           = go _csdCourseId _csdUserId _csdXgafv
               _csdUploadProtocol
-              (Just _csdPp)
               _csdAccessToken
               _csdUploadType
-              _csdBearerToken
               _csdCallback
               (Just AltJSON)
               classroomService
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
@@ -39,12 +39,10 @@
     -- * Request Lenses
     , csgXgafv
     , csgUploadProtocol
-    , csgPp
     , csgCourseId
     , csgAccessToken
     , csgUploadType
     , csgUserId
-    , csgBearerToken
     , csgCallback
     ) where
 
@@ -59,14 +57,12 @@
          Capture "courseId" Text :>
            "students" :>
              Capture "userId" Text :>
-               QueryParam "$.xgafv" Text :>
+               QueryParam "$.xgafv" Xgafv :>
                  QueryParam "upload_protocol" Text :>
-                   QueryParam "pp" Bool :>
-                     QueryParam "access_token" Text :>
-                       QueryParam "uploadType" Text :>
-                         QueryParam "bearer_token" Text :>
-                           QueryParam "callback" Text :>
-                             QueryParam "alt" AltJSON :> Get '[JSON] Student
+                   QueryParam "access_token" Text :>
+                     QueryParam "uploadType" Text :>
+                       QueryParam "callback" Text :>
+                         QueryParam "alt" AltJSON :> Get '[JSON] Student
 
 -- | Returns a student of a course. This method returns the following error
 -- codes: * \`PERMISSION_DENIED\` if the requesting user is not permitted
@@ -76,14 +72,12 @@
 --
 -- /See:/ 'coursesStudentsGet' smart constructor.
 data CoursesStudentsGet = CoursesStudentsGet'
-    { _csgXgafv          :: !(Maybe Text)
+    { _csgXgafv          :: !(Maybe Xgafv)
     , _csgUploadProtocol :: !(Maybe Text)
-    , _csgPp             :: !Bool
     , _csgCourseId       :: !Text
     , _csgAccessToken    :: !(Maybe Text)
     , _csgUploadType     :: !(Maybe Text)
     , _csgUserId         :: !Text
-    , _csgBearerToken    :: !(Maybe Text)
     , _csgCallback       :: !(Maybe Text)
     } deriving (Eq,Show,Data,Typeable,Generic)
 
@@ -95,8 +89,6 @@
 --
 -- * 'csgUploadProtocol'
 --
--- * 'csgPp'
---
 -- * 'csgCourseId'
 --
 -- * 'csgAccessToken'
@@ -105,8 +97,6 @@
 --
 -- * 'csgUserId'
 --
--- * 'csgBearerToken'
---
 -- * 'csgCallback'
 coursesStudentsGet
     :: Text -- ^ 'csgCourseId'
@@ -116,17 +106,15 @@
     CoursesStudentsGet'
     { _csgXgafv = Nothing
     , _csgUploadProtocol = Nothing
-    , _csgPp = True
     , _csgCourseId = pCsgCourseId_
     , _csgAccessToken = Nothing
     , _csgUploadType = Nothing
     , _csgUserId = pCsgUserId_
-    , _csgBearerToken = Nothing
     , _csgCallback = Nothing
     }
 
 -- | V1 error format.
-csgXgafv :: Lens' CoursesStudentsGet (Maybe Text)
+csgXgafv :: Lens' CoursesStudentsGet (Maybe Xgafv)
 csgXgafv = lens _csgXgafv (\ s a -> s{_csgXgafv = a})
 
 -- | Upload protocol for media (e.g. \"raw\", \"multipart\").
@@ -135,10 +123,6 @@
   = lens _csgUploadProtocol
       (\ s a -> s{_csgUploadProtocol = a})
 
--- | Pretty-print response.
-csgPp :: Lens' CoursesStudentsGet Bool
-csgPp = lens _csgPp (\ s a -> s{_csgPp = a})
-
 -- | Identifier of the course. This identifier can be either the
 -- Classroom-assigned identifier or an alias.
 csgCourseId :: Lens' CoursesStudentsGet Text
@@ -164,12 +148,6 @@
 csgUserId
   = lens _csgUserId (\ s a -> s{_csgUserId = a})
 
--- | OAuth bearer token.
-csgBearerToken :: Lens' CoursesStudentsGet (Maybe Text)
-csgBearerToken
-  = lens _csgBearerToken
-      (\ s a -> s{_csgBearerToken = a})
-
 -- | JSONP
 csgCallback :: Lens' CoursesStudentsGet (Maybe Text)
 csgCallback
@@ -185,10 +163,8 @@
         requestClient CoursesStudentsGet'{..}
           = go _csgCourseId _csgUserId _csgXgafv
               _csgUploadProtocol
-              (Just _csgPp)
               _csgAccessToken
               _csgUploadType
-              _csgBearerToken
               _csgCallback
               (Just AltJSON)
               classroomService
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
@@ -38,11 +38,9 @@
     -- * Request Lenses
     , cslXgafv
     , cslUploadProtocol
-    , cslPp
     , cslCourseId
     , cslAccessToken
     , cslUploadType
-    , cslBearerToken
     , cslPageToken
     , cslPageSize
     , cslCallback
@@ -58,17 +56,15 @@
        "courses" :>
          Capture "courseId" Text :>
            "students" :>
-             QueryParam "$.xgafv" Text :>
+             QueryParam "$.xgafv" Xgafv :>
                QueryParam "upload_protocol" Text :>
-                 QueryParam "pp" Bool :>
-                   QueryParam "access_token" Text :>
-                     QueryParam "uploadType" Text :>
-                       QueryParam "bearer_token" Text :>
-                         QueryParam "pageToken" Text :>
-                           QueryParam "pageSize" (Textual Int32) :>
-                             QueryParam "callback" Text :>
-                               QueryParam "alt" AltJSON :>
-                                 Get '[JSON] ListStudentsResponse
+                 QueryParam "access_token" Text :>
+                   QueryParam "uploadType" Text :>
+                     QueryParam "pageToken" Text :>
+                       QueryParam "pageSize" (Textual Int32) :>
+                         QueryParam "callback" Text :>
+                           QueryParam "alt" AltJSON :>
+                             Get '[JSON] ListStudentsResponse
 
 -- | Returns a list of students of this course that the requester is
 -- permitted to view. This method returns the following error codes: *
@@ -77,13 +73,11 @@
 --
 -- /See:/ 'coursesStudentsList' smart constructor.
 data CoursesStudentsList = CoursesStudentsList'
-    { _cslXgafv          :: !(Maybe Text)
+    { _cslXgafv          :: !(Maybe Xgafv)
     , _cslUploadProtocol :: !(Maybe Text)
-    , _cslPp             :: !Bool
     , _cslCourseId       :: !Text
     , _cslAccessToken    :: !(Maybe Text)
     , _cslUploadType     :: !(Maybe Text)
-    , _cslBearerToken    :: !(Maybe Text)
     , _cslPageToken      :: !(Maybe Text)
     , _cslPageSize       :: !(Maybe (Textual Int32))
     , _cslCallback       :: !(Maybe Text)
@@ -97,16 +91,12 @@
 --
 -- * 'cslUploadProtocol'
 --
--- * 'cslPp'
---
 -- * 'cslCourseId'
 --
 -- * 'cslAccessToken'
 --
 -- * 'cslUploadType'
 --
--- * 'cslBearerToken'
---
 -- * 'cslPageToken'
 --
 -- * 'cslPageSize'
@@ -119,18 +109,16 @@
     CoursesStudentsList'
     { _cslXgafv = Nothing
     , _cslUploadProtocol = Nothing
-    , _cslPp = True
     , _cslCourseId = pCslCourseId_
     , _cslAccessToken = Nothing
     , _cslUploadType = Nothing
-    , _cslBearerToken = Nothing
     , _cslPageToken = Nothing
     , _cslPageSize = Nothing
     , _cslCallback = Nothing
     }
 
 -- | V1 error format.
-cslXgafv :: Lens' CoursesStudentsList (Maybe Text)
+cslXgafv :: Lens' CoursesStudentsList (Maybe Xgafv)
 cslXgafv = lens _cslXgafv (\ s a -> s{_cslXgafv = a})
 
 -- | Upload protocol for media (e.g. \"raw\", \"multipart\").
@@ -139,10 +127,6 @@
   = lens _cslUploadProtocol
       (\ s a -> s{_cslUploadProtocol = a})
 
--- | Pretty-print response.
-cslPp :: Lens' CoursesStudentsList Bool
-cslPp = lens _cslPp (\ s a -> s{_cslPp = a})
-
 -- | Identifier of the course. This identifier can be either the
 -- Classroom-assigned identifier or an alias.
 cslCourseId :: Lens' CoursesStudentsList Text
@@ -161,12 +145,6 @@
   = lens _cslUploadType
       (\ s a -> s{_cslUploadType = a})
 
--- | OAuth bearer token.
-cslBearerToken :: Lens' CoursesStudentsList (Maybe Text)
-cslBearerToken
-  = lens _cslBearerToken
-      (\ s a -> s{_cslBearerToken = a})
-
 -- | nextPageToken value returned from a previous list call, indicating that
 -- the subsequent page of results should be returned. The list request must
 -- be otherwise identical to the one that resulted in this token.
@@ -195,10 +173,8 @@
                "https://www.googleapis.com/auth/classroom.rosters.readonly"]
         requestClient CoursesStudentsList'{..}
           = go _cslCourseId _cslXgafv _cslUploadProtocol
-              (Just _cslPp)
               _cslAccessToken
               _cslUploadType
-              _cslBearerToken
               _cslPageToken
               _cslPageSize
               _cslCallback
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
@@ -43,12 +43,10 @@
     -- * Request Lenses
     , ctcXgafv
     , ctcUploadProtocol
-    , ctcPp
     , ctcCourseId
     , ctcAccessToken
     , ctcUploadType
     , ctcPayload
-    , ctcBearerToken
     , ctcCallback
     ) where
 
@@ -62,15 +60,13 @@
        "courses" :>
          Capture "courseId" Text :>
            "teachers" :>
-             QueryParam "$.xgafv" Text :>
+             QueryParam "$.xgafv" Xgafv :>
                QueryParam "upload_protocol" Text :>
-                 QueryParam "pp" Bool :>
-                   QueryParam "access_token" Text :>
-                     QueryParam "uploadType" Text :>
-                       QueryParam "bearer_token" Text :>
-                         QueryParam "callback" Text :>
-                           QueryParam "alt" AltJSON :>
-                             ReqBody '[JSON] Teacher :> Post '[JSON] Teacher
+                 QueryParam "access_token" Text :>
+                   QueryParam "uploadType" Text :>
+                     QueryParam "callback" Text :>
+                       QueryParam "alt" AltJSON :>
+                         ReqBody '[JSON] Teacher :> Post '[JSON] Teacher
 
 -- | Creates a teacher of a course. This method returns the following error
 -- codes: * \`PERMISSION_DENIED\` if the requesting user is not permitted
@@ -84,14 +80,12 @@
 --
 -- /See:/ 'coursesTeachersCreate' smart constructor.
 data CoursesTeachersCreate = CoursesTeachersCreate'
-    { _ctcXgafv          :: !(Maybe Text)
+    { _ctcXgafv          :: !(Maybe Xgafv)
     , _ctcUploadProtocol :: !(Maybe Text)
-    , _ctcPp             :: !Bool
     , _ctcCourseId       :: !Text
     , _ctcAccessToken    :: !(Maybe Text)
     , _ctcUploadType     :: !(Maybe Text)
     , _ctcPayload        :: !Teacher
-    , _ctcBearerToken    :: !(Maybe Text)
     , _ctcCallback       :: !(Maybe Text)
     } deriving (Eq,Show,Data,Typeable,Generic)
 
@@ -103,8 +97,6 @@
 --
 -- * 'ctcUploadProtocol'
 --
--- * 'ctcPp'
---
 -- * 'ctcCourseId'
 --
 -- * 'ctcAccessToken'
@@ -113,8 +105,6 @@
 --
 -- * 'ctcPayload'
 --
--- * 'ctcBearerToken'
---
 -- * 'ctcCallback'
 coursesTeachersCreate
     :: Text -- ^ 'ctcCourseId'
@@ -124,17 +114,15 @@
     CoursesTeachersCreate'
     { _ctcXgafv = Nothing
     , _ctcUploadProtocol = Nothing
-    , _ctcPp = True
     , _ctcCourseId = pCtcCourseId_
     , _ctcAccessToken = Nothing
     , _ctcUploadType = Nothing
     , _ctcPayload = pCtcPayload_
-    , _ctcBearerToken = Nothing
     , _ctcCallback = Nothing
     }
 
 -- | V1 error format.
-ctcXgafv :: Lens' CoursesTeachersCreate (Maybe Text)
+ctcXgafv :: Lens' CoursesTeachersCreate (Maybe Xgafv)
 ctcXgafv = lens _ctcXgafv (\ s a -> s{_ctcXgafv = a})
 
 -- | Upload protocol for media (e.g. \"raw\", \"multipart\").
@@ -143,10 +131,6 @@
   = lens _ctcUploadProtocol
       (\ s a -> s{_ctcUploadProtocol = a})
 
--- | Pretty-print response.
-ctcPp :: Lens' CoursesTeachersCreate Bool
-ctcPp = lens _ctcPp (\ s a -> s{_ctcPp = a})
-
 -- | Identifier of the course. This identifier can be either the
 -- Classroom-assigned identifier or an alias.
 ctcCourseId :: Lens' CoursesTeachersCreate Text
@@ -170,12 +154,6 @@
 ctcPayload
   = lens _ctcPayload (\ s a -> s{_ctcPayload = a})
 
--- | OAuth bearer token.
-ctcBearerToken :: Lens' CoursesTeachersCreate (Maybe Text)
-ctcBearerToken
-  = lens _ctcBearerToken
-      (\ s a -> s{_ctcBearerToken = a})
-
 -- | JSONP
 ctcCallback :: Lens' CoursesTeachersCreate (Maybe Text)
 ctcCallback
@@ -189,10 +167,8 @@
                "https://www.googleapis.com/auth/classroom.rosters"]
         requestClient CoursesTeachersCreate'{..}
           = go _ctcCourseId _ctcXgafv _ctcUploadProtocol
-              (Just _ctcPp)
               _ctcAccessToken
               _ctcUploadType
-              _ctcBearerToken
               _ctcCallback
               (Just AltJSON)
               _ctcPayload
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
@@ -40,12 +40,10 @@
     -- * Request Lenses
     , ctdXgafv
     , ctdUploadProtocol
-    , ctdPp
     , ctdCourseId
     , ctdAccessToken
     , ctdUploadType
     , ctdUserId
-    , ctdBearerToken
     , ctdCallback
     ) where
 
@@ -60,14 +58,12 @@
          Capture "courseId" Text :>
            "teachers" :>
              Capture "userId" Text :>
-               QueryParam "$.xgafv" Text :>
+               QueryParam "$.xgafv" Xgafv :>
                  QueryParam "upload_protocol" Text :>
-                   QueryParam "pp" Bool :>
-                     QueryParam "access_token" Text :>
-                       QueryParam "uploadType" Text :>
-                         QueryParam "bearer_token" Text :>
-                           QueryParam "callback" Text :>
-                             QueryParam "alt" AltJSON :> Delete '[JSON] Empty
+                   QueryParam "access_token" Text :>
+                     QueryParam "uploadType" Text :>
+                       QueryParam "callback" Text :>
+                         QueryParam "alt" AltJSON :> Delete '[JSON] Empty
 
 -- | Deletes a teacher of a course. This method returns the following error
 -- codes: * \`PERMISSION_DENIED\` if the requesting user is not permitted
@@ -78,14 +74,12 @@
 --
 -- /See:/ 'coursesTeachersDelete' smart constructor.
 data CoursesTeachersDelete = CoursesTeachersDelete'
-    { _ctdXgafv          :: !(Maybe Text)
+    { _ctdXgafv          :: !(Maybe Xgafv)
     , _ctdUploadProtocol :: !(Maybe Text)
-    , _ctdPp             :: !Bool
     , _ctdCourseId       :: !Text
     , _ctdAccessToken    :: !(Maybe Text)
     , _ctdUploadType     :: !(Maybe Text)
     , _ctdUserId         :: !Text
-    , _ctdBearerToken    :: !(Maybe Text)
     , _ctdCallback       :: !(Maybe Text)
     } deriving (Eq,Show,Data,Typeable,Generic)
 
@@ -97,8 +91,6 @@
 --
 -- * 'ctdUploadProtocol'
 --
--- * 'ctdPp'
---
 -- * 'ctdCourseId'
 --
 -- * 'ctdAccessToken'
@@ -107,8 +99,6 @@
 --
 -- * 'ctdUserId'
 --
--- * 'ctdBearerToken'
---
 -- * 'ctdCallback'
 coursesTeachersDelete
     :: Text -- ^ 'ctdCourseId'
@@ -118,17 +108,15 @@
     CoursesTeachersDelete'
     { _ctdXgafv = Nothing
     , _ctdUploadProtocol = Nothing
-    , _ctdPp = True
     , _ctdCourseId = pCtdCourseId_
     , _ctdAccessToken = Nothing
     , _ctdUploadType = Nothing
     , _ctdUserId = pCtdUserId_
-    , _ctdBearerToken = Nothing
     , _ctdCallback = Nothing
     }
 
 -- | V1 error format.
-ctdXgafv :: Lens' CoursesTeachersDelete (Maybe Text)
+ctdXgafv :: Lens' CoursesTeachersDelete (Maybe Xgafv)
 ctdXgafv = lens _ctdXgafv (\ s a -> s{_ctdXgafv = a})
 
 -- | Upload protocol for media (e.g. \"raw\", \"multipart\").
@@ -137,10 +125,6 @@
   = lens _ctdUploadProtocol
       (\ s a -> s{_ctdUploadProtocol = a})
 
--- | Pretty-print response.
-ctdPp :: Lens' CoursesTeachersDelete Bool
-ctdPp = lens _ctdPp (\ s a -> s{_ctdPp = a})
-
 -- | Identifier of the course. This identifier can be either the
 -- Classroom-assigned identifier or an alias.
 ctdCourseId :: Lens' CoursesTeachersDelete Text
@@ -166,12 +150,6 @@
 ctdUserId
   = lens _ctdUserId (\ s a -> s{_ctdUserId = a})
 
--- | OAuth bearer token.
-ctdBearerToken :: Lens' CoursesTeachersDelete (Maybe Text)
-ctdBearerToken
-  = lens _ctdBearerToken
-      (\ s a -> s{_ctdBearerToken = a})
-
 -- | JSONP
 ctdCallback :: Lens' CoursesTeachersDelete (Maybe Text)
 ctdCallback
@@ -184,10 +162,8 @@
         requestClient CoursesTeachersDelete'{..}
           = go _ctdCourseId _ctdUserId _ctdXgafv
               _ctdUploadProtocol
-              (Just _ctdPp)
               _ctdAccessToken
               _ctdUploadType
-              _ctdBearerToken
               _ctdCallback
               (Just AltJSON)
               classroomService
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
@@ -39,12 +39,10 @@
     -- * Request Lenses
     , ctgXgafv
     , ctgUploadProtocol
-    , ctgPp
     , ctgCourseId
     , ctgAccessToken
     , ctgUploadType
     , ctgUserId
-    , ctgBearerToken
     , ctgCallback
     ) where
 
@@ -59,14 +57,12 @@
          Capture "courseId" Text :>
            "teachers" :>
              Capture "userId" Text :>
-               QueryParam "$.xgafv" Text :>
+               QueryParam "$.xgafv" Xgafv :>
                  QueryParam "upload_protocol" Text :>
-                   QueryParam "pp" Bool :>
-                     QueryParam "access_token" Text :>
-                       QueryParam "uploadType" Text :>
-                         QueryParam "bearer_token" Text :>
-                           QueryParam "callback" Text :>
-                             QueryParam "alt" AltJSON :> Get '[JSON] Teacher
+                   QueryParam "access_token" Text :>
+                     QueryParam "uploadType" Text :>
+                       QueryParam "callback" Text :>
+                         QueryParam "alt" AltJSON :> Get '[JSON] Teacher
 
 -- | Returns a teacher of a course. This method returns the following error
 -- codes: * \`PERMISSION_DENIED\` if the requesting user is not permitted
@@ -76,14 +72,12 @@
 --
 -- /See:/ 'coursesTeachersGet' smart constructor.
 data CoursesTeachersGet = CoursesTeachersGet'
-    { _ctgXgafv          :: !(Maybe Text)
+    { _ctgXgafv          :: !(Maybe Xgafv)
     , _ctgUploadProtocol :: !(Maybe Text)
-    , _ctgPp             :: !Bool
     , _ctgCourseId       :: !Text
     , _ctgAccessToken    :: !(Maybe Text)
     , _ctgUploadType     :: !(Maybe Text)
     , _ctgUserId         :: !Text
-    , _ctgBearerToken    :: !(Maybe Text)
     , _ctgCallback       :: !(Maybe Text)
     } deriving (Eq,Show,Data,Typeable,Generic)
 
@@ -95,8 +89,6 @@
 --
 -- * 'ctgUploadProtocol'
 --
--- * 'ctgPp'
---
 -- * 'ctgCourseId'
 --
 -- * 'ctgAccessToken'
@@ -105,8 +97,6 @@
 --
 -- * 'ctgUserId'
 --
--- * 'ctgBearerToken'
---
 -- * 'ctgCallback'
 coursesTeachersGet
     :: Text -- ^ 'ctgCourseId'
@@ -116,17 +106,15 @@
     CoursesTeachersGet'
     { _ctgXgafv = Nothing
     , _ctgUploadProtocol = Nothing
-    , _ctgPp = True
     , _ctgCourseId = pCtgCourseId_
     , _ctgAccessToken = Nothing
     , _ctgUploadType = Nothing
     , _ctgUserId = pCtgUserId_
-    , _ctgBearerToken = Nothing
     , _ctgCallback = Nothing
     }
 
 -- | V1 error format.
-ctgXgafv :: Lens' CoursesTeachersGet (Maybe Text)
+ctgXgafv :: Lens' CoursesTeachersGet (Maybe Xgafv)
 ctgXgafv = lens _ctgXgafv (\ s a -> s{_ctgXgafv = a})
 
 -- | Upload protocol for media (e.g. \"raw\", \"multipart\").
@@ -135,10 +123,6 @@
   = lens _ctgUploadProtocol
       (\ s a -> s{_ctgUploadProtocol = a})
 
--- | Pretty-print response.
-ctgPp :: Lens' CoursesTeachersGet Bool
-ctgPp = lens _ctgPp (\ s a -> s{_ctgPp = a})
-
 -- | Identifier of the course. This identifier can be either the
 -- Classroom-assigned identifier or an alias.
 ctgCourseId :: Lens' CoursesTeachersGet Text
@@ -164,12 +148,6 @@
 ctgUserId
   = lens _ctgUserId (\ s a -> s{_ctgUserId = a})
 
--- | OAuth bearer token.
-ctgBearerToken :: Lens' CoursesTeachersGet (Maybe Text)
-ctgBearerToken
-  = lens _ctgBearerToken
-      (\ s a -> s{_ctgBearerToken = a})
-
 -- | JSONP
 ctgCallback :: Lens' CoursesTeachersGet (Maybe Text)
 ctgCallback
@@ -185,10 +163,8 @@
         requestClient CoursesTeachersGet'{..}
           = go _ctgCourseId _ctgUserId _ctgXgafv
               _ctgUploadProtocol
-              (Just _ctgPp)
               _ctgAccessToken
               _ctgUploadType
-              _ctgBearerToken
               _ctgCallback
               (Just AltJSON)
               classroomService
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
@@ -38,11 +38,9 @@
     -- * Request Lenses
     , ctlXgafv
     , ctlUploadProtocol
-    , ctlPp
     , ctlCourseId
     , ctlAccessToken
     , ctlUploadType
-    , ctlBearerToken
     , ctlPageToken
     , ctlPageSize
     , ctlCallback
@@ -58,17 +56,15 @@
        "courses" :>
          Capture "courseId" Text :>
            "teachers" :>
-             QueryParam "$.xgafv" Text :>
+             QueryParam "$.xgafv" Xgafv :>
                QueryParam "upload_protocol" Text :>
-                 QueryParam "pp" Bool :>
-                   QueryParam "access_token" Text :>
-                     QueryParam "uploadType" Text :>
-                       QueryParam "bearer_token" Text :>
-                         QueryParam "pageToken" Text :>
-                           QueryParam "pageSize" (Textual Int32) :>
-                             QueryParam "callback" Text :>
-                               QueryParam "alt" AltJSON :>
-                                 Get '[JSON] ListTeachersResponse
+                 QueryParam "access_token" Text :>
+                   QueryParam "uploadType" Text :>
+                     QueryParam "pageToken" Text :>
+                       QueryParam "pageSize" (Textual Int32) :>
+                         QueryParam "callback" Text :>
+                           QueryParam "alt" AltJSON :>
+                             Get '[JSON] ListTeachersResponse
 
 -- | Returns a list of teachers of this course that the requester is
 -- permitted to view. This method returns the following error codes: *
@@ -77,13 +73,11 @@
 --
 -- /See:/ 'coursesTeachersList' smart constructor.
 data CoursesTeachersList = CoursesTeachersList'
-    { _ctlXgafv          :: !(Maybe Text)
+    { _ctlXgafv          :: !(Maybe Xgafv)
     , _ctlUploadProtocol :: !(Maybe Text)
-    , _ctlPp             :: !Bool
     , _ctlCourseId       :: !Text
     , _ctlAccessToken    :: !(Maybe Text)
     , _ctlUploadType     :: !(Maybe Text)
-    , _ctlBearerToken    :: !(Maybe Text)
     , _ctlPageToken      :: !(Maybe Text)
     , _ctlPageSize       :: !(Maybe (Textual Int32))
     , _ctlCallback       :: !(Maybe Text)
@@ -97,16 +91,12 @@
 --
 -- * 'ctlUploadProtocol'
 --
--- * 'ctlPp'
---
 -- * 'ctlCourseId'
 --
 -- * 'ctlAccessToken'
 --
 -- * 'ctlUploadType'
 --
--- * 'ctlBearerToken'
---
 -- * 'ctlPageToken'
 --
 -- * 'ctlPageSize'
@@ -119,18 +109,16 @@
     CoursesTeachersList'
     { _ctlXgafv = Nothing
     , _ctlUploadProtocol = Nothing
-    , _ctlPp = True
     , _ctlCourseId = pCtlCourseId_
     , _ctlAccessToken = Nothing
     , _ctlUploadType = Nothing
-    , _ctlBearerToken = Nothing
     , _ctlPageToken = Nothing
     , _ctlPageSize = Nothing
     , _ctlCallback = Nothing
     }
 
 -- | V1 error format.
-ctlXgafv :: Lens' CoursesTeachersList (Maybe Text)
+ctlXgafv :: Lens' CoursesTeachersList (Maybe Xgafv)
 ctlXgafv = lens _ctlXgafv (\ s a -> s{_ctlXgafv = a})
 
 -- | Upload protocol for media (e.g. \"raw\", \"multipart\").
@@ -139,10 +127,6 @@
   = lens _ctlUploadProtocol
       (\ s a -> s{_ctlUploadProtocol = a})
 
--- | Pretty-print response.
-ctlPp :: Lens' CoursesTeachersList Bool
-ctlPp = lens _ctlPp (\ s a -> s{_ctlPp = a})
-
 -- | Identifier of the course. This identifier can be either the
 -- Classroom-assigned identifier or an alias.
 ctlCourseId :: Lens' CoursesTeachersList Text
@@ -161,12 +145,6 @@
   = lens _ctlUploadType
       (\ s a -> s{_ctlUploadType = a})
 
--- | OAuth bearer token.
-ctlBearerToken :: Lens' CoursesTeachersList (Maybe Text)
-ctlBearerToken
-  = lens _ctlBearerToken
-      (\ s a -> s{_ctlBearerToken = a})
-
 -- | nextPageToken value returned from a previous list call, indicating that
 -- the subsequent page of results should be returned. The list request must
 -- be otherwise identical to the one that resulted in this token.
@@ -195,10 +173,8 @@
                "https://www.googleapis.com/auth/classroom.rosters.readonly"]
         requestClient CoursesTeachersList'{..}
           = go _ctlCourseId _ctlXgafv _ctlUploadProtocol
-              (Just _ctlPp)
               _ctlAccessToken
               _ctlUploadType
-              _ctlBearerToken
               _ctlPageToken
               _ctlPageSize
               _ctlCallback
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
@@ -39,11 +39,9 @@
     -- * Request Lenses
     , cuXgafv
     , cuUploadProtocol
-    , cuPp
     , cuAccessToken
     , cuUploadType
     , cuPayload
-    , cuBearerToken
     , cuId
     , cuCallback
     ) where
@@ -57,15 +55,13 @@
      "v1" :>
        "courses" :>
          Capture "id" Text :>
-           QueryParam "$.xgafv" Text :>
+           QueryParam "$.xgafv" Xgafv :>
              QueryParam "upload_protocol" Text :>
-               QueryParam "pp" Bool :>
-                 QueryParam "access_token" Text :>
-                   QueryParam "uploadType" Text :>
-                     QueryParam "bearer_token" Text :>
-                       QueryParam "callback" Text :>
-                         QueryParam "alt" AltJSON :>
-                           ReqBody '[JSON] Course :> Put '[JSON] Course
+               QueryParam "access_token" Text :>
+                 QueryParam "uploadType" Text :>
+                   QueryParam "callback" Text :>
+                     QueryParam "alt" AltJSON :>
+                       ReqBody '[JSON] Course :> Put '[JSON] Course
 
 -- | Updates a course. This method returns the following error codes: *
 -- \`PERMISSION_DENIED\` if the requesting user is not permitted to modify
@@ -75,13 +71,11 @@
 --
 -- /See:/ 'coursesUpdate' smart constructor.
 data CoursesUpdate = CoursesUpdate'
-    { _cuXgafv          :: !(Maybe Text)
+    { _cuXgafv          :: !(Maybe Xgafv)
     , _cuUploadProtocol :: !(Maybe Text)
-    , _cuPp             :: !Bool
     , _cuAccessToken    :: !(Maybe Text)
     , _cuUploadType     :: !(Maybe Text)
     , _cuPayload        :: !Course
-    , _cuBearerToken    :: !(Maybe Text)
     , _cuId             :: !Text
     , _cuCallback       :: !(Maybe Text)
     } deriving (Eq,Show,Data,Typeable,Generic)
@@ -94,16 +88,12 @@
 --
 -- * 'cuUploadProtocol'
 --
--- * 'cuPp'
---
 -- * 'cuAccessToken'
 --
 -- * 'cuUploadType'
 --
 -- * 'cuPayload'
 --
--- * 'cuBearerToken'
---
 -- * 'cuId'
 --
 -- * 'cuCallback'
@@ -115,17 +105,15 @@
     CoursesUpdate'
     { _cuXgafv = Nothing
     , _cuUploadProtocol = Nothing
-    , _cuPp = True
     , _cuAccessToken = Nothing
     , _cuUploadType = Nothing
     , _cuPayload = pCuPayload_
-    , _cuBearerToken = Nothing
     , _cuId = pCuId_
     , _cuCallback = Nothing
     }
 
 -- | V1 error format.
-cuXgafv :: Lens' CoursesUpdate (Maybe Text)
+cuXgafv :: Lens' CoursesUpdate (Maybe Xgafv)
 cuXgafv = lens _cuXgafv (\ s a -> s{_cuXgafv = a})
 
 -- | Upload protocol for media (e.g. \"raw\", \"multipart\").
@@ -134,10 +122,6 @@
   = lens _cuUploadProtocol
       (\ s a -> s{_cuUploadProtocol = a})
 
--- | Pretty-print response.
-cuPp :: Lens' CoursesUpdate Bool
-cuPp = lens _cuPp (\ s a -> s{_cuPp = a})
-
 -- | OAuth access token.
 cuAccessToken :: Lens' CoursesUpdate (Maybe Text)
 cuAccessToken
@@ -154,12 +138,6 @@
 cuPayload
   = lens _cuPayload (\ s a -> s{_cuPayload = a})
 
--- | OAuth bearer token.
-cuBearerToken :: Lens' CoursesUpdate (Maybe Text)
-cuBearerToken
-  = lens _cuBearerToken
-      (\ s a -> s{_cuBearerToken = a})
-
 -- | Identifier of the course to update. This identifier can be either the
 -- Classroom-assigned identifier or an alias.
 cuId :: Lens' CoursesUpdate Text
@@ -175,10 +153,8 @@
         type Scopes CoursesUpdate =
              '["https://www.googleapis.com/auth/classroom.courses"]
         requestClient CoursesUpdate'{..}
-          = go _cuId _cuXgafv _cuUploadProtocol (Just _cuPp)
-              _cuAccessToken
+          = go _cuId _cuXgafv _cuUploadProtocol _cuAccessToken
               _cuUploadType
-              _cuBearerToken
               _cuCallback
               (Just AltJSON)
               _cuPayload
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
@@ -43,10 +43,8 @@
     -- * Request Lenses
     , iaXgafv
     , iaUploadProtocol
-    , iaPp
     , iaAccessToken
     , iaUploadType
-    , iaBearerToken
     , iaId
     , iaCallback
     ) where
@@ -60,14 +58,12 @@
      "v1" :>
        "invitations" :>
          CaptureMode "id" "accept" Text :>
-           QueryParam "$.xgafv" Text :>
+           QueryParam "$.xgafv" Xgafv :>
              QueryParam "upload_protocol" Text :>
-               QueryParam "pp" Bool :>
-                 QueryParam "access_token" Text :>
-                   QueryParam "uploadType" Text :>
-                     QueryParam "bearer_token" Text :>
-                       QueryParam "callback" Text :>
-                         QueryParam "alt" AltJSON :> Post '[JSON] Empty
+               QueryParam "access_token" Text :>
+                 QueryParam "uploadType" Text :>
+                   QueryParam "callback" Text :>
+                     QueryParam "alt" AltJSON :> Post '[JSON] Empty
 
 -- | Accepts an invitation, removing it and adding the invited user to the
 -- teachers or students (as appropriate) of the specified course. Only the
@@ -81,12 +77,10 @@
 --
 -- /See:/ 'invitationsAccept' smart constructor.
 data InvitationsAccept = InvitationsAccept'
-    { _iaXgafv          :: !(Maybe Text)
+    { _iaXgafv          :: !(Maybe Xgafv)
     , _iaUploadProtocol :: !(Maybe Text)
-    , _iaPp             :: !Bool
     , _iaAccessToken    :: !(Maybe Text)
     , _iaUploadType     :: !(Maybe Text)
-    , _iaBearerToken    :: !(Maybe Text)
     , _iaId             :: !Text
     , _iaCallback       :: !(Maybe Text)
     } deriving (Eq,Show,Data,Typeable,Generic)
@@ -99,14 +93,10 @@
 --
 -- * 'iaUploadProtocol'
 --
--- * 'iaPp'
---
 -- * 'iaAccessToken'
 --
 -- * 'iaUploadType'
 --
--- * 'iaBearerToken'
---
 -- * 'iaId'
 --
 -- * 'iaCallback'
@@ -117,16 +107,14 @@
     InvitationsAccept'
     { _iaXgafv = Nothing
     , _iaUploadProtocol = Nothing
-    , _iaPp = True
     , _iaAccessToken = Nothing
     , _iaUploadType = Nothing
-    , _iaBearerToken = Nothing
     , _iaId = pIaId_
     , _iaCallback = Nothing
     }
 
 -- | V1 error format.
-iaXgafv :: Lens' InvitationsAccept (Maybe Text)
+iaXgafv :: Lens' InvitationsAccept (Maybe Xgafv)
 iaXgafv = lens _iaXgafv (\ s a -> s{_iaXgafv = a})
 
 -- | Upload protocol for media (e.g. \"raw\", \"multipart\").
@@ -135,10 +123,6 @@
   = lens _iaUploadProtocol
       (\ s a -> s{_iaUploadProtocol = a})
 
--- | Pretty-print response.
-iaPp :: Lens' InvitationsAccept Bool
-iaPp = lens _iaPp (\ s a -> s{_iaPp = a})
-
 -- | OAuth access token.
 iaAccessToken :: Lens' InvitationsAccept (Maybe Text)
 iaAccessToken
@@ -150,12 +134,6 @@
 iaUploadType
   = lens _iaUploadType (\ s a -> s{_iaUploadType = a})
 
--- | OAuth bearer token.
-iaBearerToken :: Lens' InvitationsAccept (Maybe Text)
-iaBearerToken
-  = lens _iaBearerToken
-      (\ s a -> s{_iaBearerToken = a})
-
 -- | Identifier of the invitation to accept.
 iaId :: Lens' InvitationsAccept Text
 iaId = lens _iaId (\ s a -> s{_iaId = a})
@@ -170,10 +148,8 @@
         type Scopes InvitationsAccept =
              '["https://www.googleapis.com/auth/classroom.rosters"]
         requestClient InvitationsAccept'{..}
-          = go _iaId _iaXgafv _iaUploadProtocol (Just _iaPp)
-              _iaAccessToken
+          = go _iaId _iaXgafv _iaUploadProtocol _iaAccessToken
               _iaUploadType
-              _iaBearerToken
               _iaCallback
               (Just AltJSON)
               classroomService
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
@@ -43,11 +43,9 @@
     -- * Request Lenses
     , icXgafv
     , icUploadProtocol
-    , icPp
     , icAccessToken
     , icUploadType
     , icPayload
-    , icBearerToken
     , icCallback
     ) where
 
@@ -59,15 +57,13 @@
 type InvitationsCreateResource =
      "v1" :>
        "invitations" :>
-         QueryParam "$.xgafv" Text :>
+         QueryParam "$.xgafv" Xgafv :>
            QueryParam "upload_protocol" Text :>
-             QueryParam "pp" Bool :>
-               QueryParam "access_token" Text :>
-                 QueryParam "uploadType" Text :>
-                   QueryParam "bearer_token" Text :>
-                     QueryParam "callback" Text :>
-                       QueryParam "alt" AltJSON :>
-                         ReqBody '[JSON] Invitation :> Post '[JSON] Invitation
+             QueryParam "access_token" Text :>
+               QueryParam "uploadType" Text :>
+                 QueryParam "callback" Text :>
+                   QueryParam "alt" AltJSON :>
+                     ReqBody '[JSON] Invitation :> Post '[JSON] Invitation
 
 -- | Creates an invitation. Only one invitation for a user and course may
 -- exist at a time. Delete and re-create an invitation to make changes.
@@ -81,13 +77,11 @@
 --
 -- /See:/ 'invitationsCreate' smart constructor.
 data InvitationsCreate = InvitationsCreate'
-    { _icXgafv          :: !(Maybe Text)
+    { _icXgafv          :: !(Maybe Xgafv)
     , _icUploadProtocol :: !(Maybe Text)
-    , _icPp             :: !Bool
     , _icAccessToken    :: !(Maybe Text)
     , _icUploadType     :: !(Maybe Text)
     , _icPayload        :: !Invitation
-    , _icBearerToken    :: !(Maybe Text)
     , _icCallback       :: !(Maybe Text)
     } deriving (Eq,Show,Data,Typeable,Generic)
 
@@ -99,16 +93,12 @@
 --
 -- * 'icUploadProtocol'
 --
--- * 'icPp'
---
 -- * 'icAccessToken'
 --
 -- * 'icUploadType'
 --
 -- * 'icPayload'
 --
--- * 'icBearerToken'
---
 -- * 'icCallback'
 invitationsCreate
     :: Invitation -- ^ 'icPayload'
@@ -117,16 +107,14 @@
     InvitationsCreate'
     { _icXgafv = Nothing
     , _icUploadProtocol = Nothing
-    , _icPp = True
     , _icAccessToken = Nothing
     , _icUploadType = Nothing
     , _icPayload = pIcPayload_
-    , _icBearerToken = Nothing
     , _icCallback = Nothing
     }
 
 -- | V1 error format.
-icXgafv :: Lens' InvitationsCreate (Maybe Text)
+icXgafv :: Lens' InvitationsCreate (Maybe Xgafv)
 icXgafv = lens _icXgafv (\ s a -> s{_icXgafv = a})
 
 -- | Upload protocol for media (e.g. \"raw\", \"multipart\").
@@ -135,10 +123,6 @@
   = lens _icUploadProtocol
       (\ s a -> s{_icUploadProtocol = a})
 
--- | Pretty-print response.
-icPp :: Lens' InvitationsCreate Bool
-icPp = lens _icPp (\ s a -> s{_icPp = a})
-
 -- | OAuth access token.
 icAccessToken :: Lens' InvitationsCreate (Maybe Text)
 icAccessToken
@@ -155,12 +139,6 @@
 icPayload
   = lens _icPayload (\ s a -> s{_icPayload = a})
 
--- | OAuth bearer token.
-icBearerToken :: Lens' InvitationsCreate (Maybe Text)
-icBearerToken
-  = lens _icBearerToken
-      (\ s a -> s{_icBearerToken = a})
-
 -- | JSONP
 icCallback :: Lens' InvitationsCreate (Maybe Text)
 icCallback
@@ -171,10 +149,8 @@
         type Scopes InvitationsCreate =
              '["https://www.googleapis.com/auth/classroom.rosters"]
         requestClient InvitationsCreate'{..}
-          = go _icXgafv _icUploadProtocol (Just _icPp)
-              _icAccessToken
+          = go _icXgafv _icUploadProtocol _icAccessToken
               _icUploadType
-              _icBearerToken
               _icCallback
               (Just AltJSON)
               _icPayload
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
@@ -38,10 +38,8 @@
     -- * Request Lenses
     , idXgafv
     , idUploadProtocol
-    , idPp
     , idAccessToken
     , idUploadType
-    , idBearerToken
     , idId
     , idCallback
     ) where
@@ -55,14 +53,12 @@
      "v1" :>
        "invitations" :>
          Capture "id" Text :>
-           QueryParam "$.xgafv" Text :>
+           QueryParam "$.xgafv" Xgafv :>
              QueryParam "upload_protocol" Text :>
-               QueryParam "pp" Bool :>
-                 QueryParam "access_token" Text :>
-                   QueryParam "uploadType" Text :>
-                     QueryParam "bearer_token" Text :>
-                       QueryParam "callback" Text :>
-                         QueryParam "alt" AltJSON :> Delete '[JSON] Empty
+               QueryParam "access_token" Text :>
+                 QueryParam "uploadType" Text :>
+                   QueryParam "callback" Text :>
+                     QueryParam "alt" AltJSON :> Delete '[JSON] Empty
 
 -- | Deletes an invitation. This method returns the following error codes: *
 -- \`PERMISSION_DENIED\` if the requesting user is not permitted to delete
@@ -71,12 +67,10 @@
 --
 -- /See:/ 'invitationsDelete' smart constructor.
 data InvitationsDelete = InvitationsDelete'
-    { _idXgafv          :: !(Maybe Text)
+    { _idXgafv          :: !(Maybe Xgafv)
     , _idUploadProtocol :: !(Maybe Text)
-    , _idPp             :: !Bool
     , _idAccessToken    :: !(Maybe Text)
     , _idUploadType     :: !(Maybe Text)
-    , _idBearerToken    :: !(Maybe Text)
     , _idId             :: !Text
     , _idCallback       :: !(Maybe Text)
     } deriving (Eq,Show,Data,Typeable,Generic)
@@ -89,14 +83,10 @@
 --
 -- * 'idUploadProtocol'
 --
--- * 'idPp'
---
 -- * 'idAccessToken'
 --
 -- * 'idUploadType'
 --
--- * 'idBearerToken'
---
 -- * 'idId'
 --
 -- * 'idCallback'
@@ -107,16 +97,14 @@
     InvitationsDelete'
     { _idXgafv = Nothing
     , _idUploadProtocol = Nothing
-    , _idPp = True
     , _idAccessToken = Nothing
     , _idUploadType = Nothing
-    , _idBearerToken = Nothing
     , _idId = pIdId_
     , _idCallback = Nothing
     }
 
 -- | V1 error format.
-idXgafv :: Lens' InvitationsDelete (Maybe Text)
+idXgafv :: Lens' InvitationsDelete (Maybe Xgafv)
 idXgafv = lens _idXgafv (\ s a -> s{_idXgafv = a})
 
 -- | Upload protocol for media (e.g. \"raw\", \"multipart\").
@@ -125,10 +113,6 @@
   = lens _idUploadProtocol
       (\ s a -> s{_idUploadProtocol = a})
 
--- | Pretty-print response.
-idPp :: Lens' InvitationsDelete Bool
-idPp = lens _idPp (\ s a -> s{_idPp = a})
-
 -- | OAuth access token.
 idAccessToken :: Lens' InvitationsDelete (Maybe Text)
 idAccessToken
@@ -140,12 +124,6 @@
 idUploadType
   = lens _idUploadType (\ s a -> s{_idUploadType = a})
 
--- | OAuth bearer token.
-idBearerToken :: Lens' InvitationsDelete (Maybe Text)
-idBearerToken
-  = lens _idBearerToken
-      (\ s a -> s{_idBearerToken = a})
-
 -- | Identifier of the invitation to delete.
 idId :: Lens' InvitationsDelete Text
 idId = lens _idId (\ s a -> s{_idId = a})
@@ -160,10 +138,8 @@
         type Scopes InvitationsDelete =
              '["https://www.googleapis.com/auth/classroom.rosters"]
         requestClient InvitationsDelete'{..}
-          = go _idId _idXgafv _idUploadProtocol (Just _idPp)
-              _idAccessToken
+          = go _idId _idXgafv _idUploadProtocol _idAccessToken
               _idUploadType
-              _idBearerToken
               _idCallback
               (Just AltJSON)
               classroomService
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
@@ -38,10 +38,8 @@
     -- * Request Lenses
     , igXgafv
     , igUploadProtocol
-    , igPp
     , igAccessToken
     , igUploadType
-    , igBearerToken
     , igId
     , igCallback
     ) where
@@ -55,14 +53,12 @@
      "v1" :>
        "invitations" :>
          Capture "id" Text :>
-           QueryParam "$.xgafv" Text :>
+           QueryParam "$.xgafv" Xgafv :>
              QueryParam "upload_protocol" Text :>
-               QueryParam "pp" Bool :>
-                 QueryParam "access_token" Text :>
-                   QueryParam "uploadType" Text :>
-                     QueryParam "bearer_token" Text :>
-                       QueryParam "callback" Text :>
-                         QueryParam "alt" AltJSON :> Get '[JSON] Invitation
+               QueryParam "access_token" Text :>
+                 QueryParam "uploadType" Text :>
+                   QueryParam "callback" Text :>
+                     QueryParam "alt" AltJSON :> Get '[JSON] Invitation
 
 -- | Returns an invitation. This method returns the following error codes: *
 -- \`PERMISSION_DENIED\` if the requesting user is not permitted to view
@@ -71,12 +67,10 @@
 --
 -- /See:/ 'invitationsGet' smart constructor.
 data InvitationsGet = InvitationsGet'
-    { _igXgafv          :: !(Maybe Text)
+    { _igXgafv          :: !(Maybe Xgafv)
     , _igUploadProtocol :: !(Maybe Text)
-    , _igPp             :: !Bool
     , _igAccessToken    :: !(Maybe Text)
     , _igUploadType     :: !(Maybe Text)
-    , _igBearerToken    :: !(Maybe Text)
     , _igId             :: !Text
     , _igCallback       :: !(Maybe Text)
     } deriving (Eq,Show,Data,Typeable,Generic)
@@ -89,14 +83,10 @@
 --
 -- * 'igUploadProtocol'
 --
--- * 'igPp'
---
 -- * 'igAccessToken'
 --
 -- * 'igUploadType'
 --
--- * 'igBearerToken'
---
 -- * 'igId'
 --
 -- * 'igCallback'
@@ -107,16 +97,14 @@
     InvitationsGet'
     { _igXgafv = Nothing
     , _igUploadProtocol = Nothing
-    , _igPp = True
     , _igAccessToken = Nothing
     , _igUploadType = Nothing
-    , _igBearerToken = Nothing
     , _igId = pIgId_
     , _igCallback = Nothing
     }
 
 -- | V1 error format.
-igXgafv :: Lens' InvitationsGet (Maybe Text)
+igXgafv :: Lens' InvitationsGet (Maybe Xgafv)
 igXgafv = lens _igXgafv (\ s a -> s{_igXgafv = a})
 
 -- | Upload protocol for media (e.g. \"raw\", \"multipart\").
@@ -125,10 +113,6 @@
   = lens _igUploadProtocol
       (\ s a -> s{_igUploadProtocol = a})
 
--- | Pretty-print response.
-igPp :: Lens' InvitationsGet Bool
-igPp = lens _igPp (\ s a -> s{_igPp = a})
-
 -- | OAuth access token.
 igAccessToken :: Lens' InvitationsGet (Maybe Text)
 igAccessToken
@@ -140,12 +124,6 @@
 igUploadType
   = lens _igUploadType (\ s a -> s{_igUploadType = a})
 
--- | OAuth bearer token.
-igBearerToken :: Lens' InvitationsGet (Maybe Text)
-igBearerToken
-  = lens _igBearerToken
-      (\ s a -> s{_igBearerToken = a})
-
 -- | Identifier of the invitation to return.
 igId :: Lens' InvitationsGet Text
 igId = lens _igId (\ s a -> s{_igId = a})
@@ -161,10 +139,8 @@
              '["https://www.googleapis.com/auth/classroom.rosters",
                "https://www.googleapis.com/auth/classroom.rosters.readonly"]
         requestClient InvitationsGet'{..}
-          = go _igId _igXgafv _igUploadProtocol (Just _igPp)
-              _igAccessToken
+          = go _igId _igXgafv _igUploadProtocol _igAccessToken
               _igUploadType
-              _igBearerToken
               _igCallback
               (Just AltJSON)
               classroomService
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
@@ -39,12 +39,10 @@
     -- * Request Lenses
     , ilXgafv
     , ilUploadProtocol
-    , ilPp
     , ilCourseId
     , ilAccessToken
     , ilUploadType
     , ilUserId
-    , ilBearerToken
     , ilPageToken
     , ilPageSize
     , ilCallback
@@ -58,19 +56,17 @@
 type InvitationsListResource =
      "v1" :>
        "invitations" :>
-         QueryParam "$.xgafv" Text :>
+         QueryParam "$.xgafv" Xgafv :>
            QueryParam "upload_protocol" Text :>
-             QueryParam "pp" Bool :>
-               QueryParam "courseId" Text :>
-                 QueryParam "access_token" Text :>
-                   QueryParam "uploadType" Text :>
-                     QueryParam "userId" Text :>
-                       QueryParam "bearer_token" Text :>
-                         QueryParam "pageToken" Text :>
-                           QueryParam "pageSize" (Textual Int32) :>
-                             QueryParam "callback" Text :>
-                               QueryParam "alt" AltJSON :>
-                                 Get '[JSON] ListInvitationsResponse
+             QueryParam "courseId" Text :>
+               QueryParam "access_token" Text :>
+                 QueryParam "uploadType" Text :>
+                   QueryParam "userId" Text :>
+                     QueryParam "pageToken" Text :>
+                       QueryParam "pageSize" (Textual Int32) :>
+                         QueryParam "callback" Text :>
+                           QueryParam "alt" AltJSON :>
+                             Get '[JSON] ListInvitationsResponse
 
 -- | Returns a list of invitations that the requesting user is permitted to
 -- view, restricted to those that match the list request. *Note:* At least
@@ -80,14 +76,12 @@
 --
 -- /See:/ 'invitationsList' smart constructor.
 data InvitationsList = InvitationsList'
-    { _ilXgafv          :: !(Maybe Text)
+    { _ilXgafv          :: !(Maybe Xgafv)
     , _ilUploadProtocol :: !(Maybe Text)
-    , _ilPp             :: !Bool
     , _ilCourseId       :: !(Maybe Text)
     , _ilAccessToken    :: !(Maybe Text)
     , _ilUploadType     :: !(Maybe Text)
     , _ilUserId         :: !(Maybe Text)
-    , _ilBearerToken    :: !(Maybe Text)
     , _ilPageToken      :: !(Maybe Text)
     , _ilPageSize       :: !(Maybe (Textual Int32))
     , _ilCallback       :: !(Maybe Text)
@@ -101,8 +95,6 @@
 --
 -- * 'ilUploadProtocol'
 --
--- * 'ilPp'
---
 -- * 'ilCourseId'
 --
 -- * 'ilAccessToken'
@@ -111,8 +103,6 @@
 --
 -- * 'ilUserId'
 --
--- * 'ilBearerToken'
---
 -- * 'ilPageToken'
 --
 -- * 'ilPageSize'
@@ -124,19 +114,17 @@
     InvitationsList'
     { _ilXgafv = Nothing
     , _ilUploadProtocol = Nothing
-    , _ilPp = True
     , _ilCourseId = Nothing
     , _ilAccessToken = Nothing
     , _ilUploadType = Nothing
     , _ilUserId = Nothing
-    , _ilBearerToken = Nothing
     , _ilPageToken = Nothing
     , _ilPageSize = Nothing
     , _ilCallback = Nothing
     }
 
 -- | V1 error format.
-ilXgafv :: Lens' InvitationsList (Maybe Text)
+ilXgafv :: Lens' InvitationsList (Maybe Xgafv)
 ilXgafv = lens _ilXgafv (\ s a -> s{_ilXgafv = a})
 
 -- | Upload protocol for media (e.g. \"raw\", \"multipart\").
@@ -145,10 +133,6 @@
   = lens _ilUploadProtocol
       (\ s a -> s{_ilUploadProtocol = a})
 
--- | Pretty-print response.
-ilPp :: Lens' InvitationsList Bool
-ilPp = lens _ilPp (\ s a -> s{_ilPp = a})
-
 -- | Restricts returned invitations to those for a course with the specified
 -- identifier.
 ilCourseId :: Lens' InvitationsList (Maybe Text)
@@ -173,12 +157,6 @@
 ilUserId :: Lens' InvitationsList (Maybe Text)
 ilUserId = lens _ilUserId (\ s a -> s{_ilUserId = a})
 
--- | OAuth bearer token.
-ilBearerToken :: Lens' InvitationsList (Maybe Text)
-ilBearerToken
-  = lens _ilBearerToken
-      (\ s a -> s{_ilBearerToken = a})
-
 -- | nextPageToken value returned from a previous list call, indicating that
 -- the subsequent page of results should be returned. The list request must
 -- be otherwise identical to the one that resulted in this token.
@@ -204,12 +182,10 @@
              '["https://www.googleapis.com/auth/classroom.rosters",
                "https://www.googleapis.com/auth/classroom.rosters.readonly"]
         requestClient InvitationsList'{..}
-          = go _ilXgafv _ilUploadProtocol (Just _ilPp)
-              _ilCourseId
+          = go _ilXgafv _ilUploadProtocol _ilCourseId
               _ilAccessToken
               _ilUploadType
               _ilUserId
-              _ilBearerToken
               _ilPageToken
               _ilPageSize
               _ilCallback
diff --git a/gen/Network/Google/Resource/Classroom/Registrations/Create.hs b/gen/Network/Google/Resource/Classroom/Registrations/Create.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Classroom/Registrations/Create.hs
@@ -0,0 +1,186 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.Classroom.Registrations.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 a \`Registration\`, causing Classroom to start sending
+-- notifications from the provided \`feed\` to the destination provided in
+-- \`cloudPubSubTopic\`. Returns the created \`Registration\`. Currently,
+-- this will be the same as the argument, but with server-assigned fields
+-- such as \`expiry_time\` and \`id\` filled in. Note that any value
+-- specified for the \`expiry_time\` or \`id\` fields will be ignored.
+-- While Classroom may validate the \`cloudPubSubTopic\` and return errors
+-- on a best effort basis, it is the caller\'s responsibility to ensure
+-- that it exists and that Classroom has permission to publish to it. This
+-- method may return the following error codes: * \`PERMISSION_DENIED\` if:
+-- * the authenticated user does not have permission to receive
+-- notifications from the requested field; or * the credential provided
+-- does not include the appropriate scope for the requested feed. * another
+-- access error is encountered. * \`INVALID_ARGUMENT\` if: * no
+-- \`cloudPubsubTopic\` is specified, or the specified \`cloudPubsubTopic\`
+-- is not valid; or * no \`feed\` is specified, or the specified \`feed\`
+-- is not valid. * \`NOT_FOUND\` if: * the specified \`feed\` cannot be
+-- located, or the requesting user does not have permission to determine
+-- whether or not it exists; or * the specified \`cloudPubsubTopic\` cannot
+-- be located, or Classroom has not been granted permission to publish to
+-- it.
+--
+-- /See:/ <https://developers.google.com/classroom/ Google Classroom API Reference> for @classroom.registrations.create@.
+module Network.Google.Resource.Classroom.Registrations.Create
+    (
+    -- * REST Resource
+      RegistrationsCreateResource
+
+    -- * Creating a Request
+    , registrationsCreate
+    , RegistrationsCreate
+
+    -- * Request Lenses
+    , rcXgafv
+    , rcUploadProtocol
+    , rcAccessToken
+    , rcUploadType
+    , rcPayload
+    , rcCallback
+    ) where
+
+import           Network.Google.Classroom.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @classroom.registrations.create@ method which the
+-- 'RegistrationsCreate' request conforms to.
+type RegistrationsCreateResource =
+     "v1" :>
+       "registrations" :>
+         QueryParam "$.xgafv" Xgafv :>
+           QueryParam "upload_protocol" Text :>
+             QueryParam "access_token" Text :>
+               QueryParam "uploadType" Text :>
+                 QueryParam "callback" Text :>
+                   QueryParam "alt" AltJSON :>
+                     ReqBody '[JSON] Registration :>
+                       Post '[JSON] Registration
+
+-- | Creates a \`Registration\`, causing Classroom to start sending
+-- notifications from the provided \`feed\` to the destination provided in
+-- \`cloudPubSubTopic\`. Returns the created \`Registration\`. Currently,
+-- this will be the same as the argument, but with server-assigned fields
+-- such as \`expiry_time\` and \`id\` filled in. Note that any value
+-- specified for the \`expiry_time\` or \`id\` fields will be ignored.
+-- While Classroom may validate the \`cloudPubSubTopic\` and return errors
+-- on a best effort basis, it is the caller\'s responsibility to ensure
+-- that it exists and that Classroom has permission to publish to it. This
+-- method may return the following error codes: * \`PERMISSION_DENIED\` if:
+-- * the authenticated user does not have permission to receive
+-- notifications from the requested field; or * the credential provided
+-- does not include the appropriate scope for the requested feed. * another
+-- access error is encountered. * \`INVALID_ARGUMENT\` if: * no
+-- \`cloudPubsubTopic\` is specified, or the specified \`cloudPubsubTopic\`
+-- is not valid; or * no \`feed\` is specified, or the specified \`feed\`
+-- is not valid. * \`NOT_FOUND\` if: * the specified \`feed\` cannot be
+-- located, or the requesting user does not have permission to determine
+-- whether or not it exists; or * the specified \`cloudPubsubTopic\` cannot
+-- be located, or Classroom has not been granted permission to publish to
+-- it.
+--
+-- /See:/ 'registrationsCreate' smart constructor.
+data RegistrationsCreate = RegistrationsCreate'
+    { _rcXgafv          :: !(Maybe Xgafv)
+    , _rcUploadProtocol :: !(Maybe Text)
+    , _rcAccessToken    :: !(Maybe Text)
+    , _rcUploadType     :: !(Maybe Text)
+    , _rcPayload        :: !Registration
+    , _rcCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'RegistrationsCreate' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'rcXgafv'
+--
+-- * 'rcUploadProtocol'
+--
+-- * 'rcAccessToken'
+--
+-- * 'rcUploadType'
+--
+-- * 'rcPayload'
+--
+-- * 'rcCallback'
+registrationsCreate
+    :: Registration -- ^ 'rcPayload'
+    -> RegistrationsCreate
+registrationsCreate pRcPayload_ =
+    RegistrationsCreate'
+    { _rcXgafv = Nothing
+    , _rcUploadProtocol = Nothing
+    , _rcAccessToken = Nothing
+    , _rcUploadType = Nothing
+    , _rcPayload = pRcPayload_
+    , _rcCallback = Nothing
+    }
+
+-- | V1 error format.
+rcXgafv :: Lens' RegistrationsCreate (Maybe Xgafv)
+rcXgafv = lens _rcXgafv (\ s a -> s{_rcXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+rcUploadProtocol :: Lens' RegistrationsCreate (Maybe Text)
+rcUploadProtocol
+  = lens _rcUploadProtocol
+      (\ s a -> s{_rcUploadProtocol = a})
+
+-- | OAuth access token.
+rcAccessToken :: Lens' RegistrationsCreate (Maybe Text)
+rcAccessToken
+  = lens _rcAccessToken
+      (\ s a -> s{_rcAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+rcUploadType :: Lens' RegistrationsCreate (Maybe Text)
+rcUploadType
+  = lens _rcUploadType (\ s a -> s{_rcUploadType = a})
+
+-- | Multipart request metadata.
+rcPayload :: Lens' RegistrationsCreate Registration
+rcPayload
+  = lens _rcPayload (\ s a -> s{_rcPayload = a})
+
+-- | JSONP
+rcCallback :: Lens' RegistrationsCreate (Maybe Text)
+rcCallback
+  = lens _rcCallback (\ s a -> s{_rcCallback = a})
+
+instance GoogleRequest RegistrationsCreate where
+        type Rs RegistrationsCreate = Registration
+        type Scopes RegistrationsCreate =
+             '["https://www.googleapis.com/auth/classroom.push-notifications"]
+        requestClient RegistrationsCreate'{..}
+          = go _rcXgafv _rcUploadProtocol _rcAccessToken
+              _rcUploadType
+              _rcCallback
+              (Just AltJSON)
+              _rcPayload
+              classroomService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy RegistrationsCreateResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Classroom/Registrations/Delete.hs b/gen/Network/Google/Resource/Classroom/Registrations/Delete.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Classroom/Registrations/Delete.hs
@@ -0,0 +1,148 @@
+{-# 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.Registrations.Delete
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes a \`Registration\`, causing Classroom to stop sending
+-- notifications for that \`Registration\`.
+--
+-- /See:/ <https://developers.google.com/classroom/ Google Classroom API Reference> for @classroom.registrations.delete@.
+module Network.Google.Resource.Classroom.Registrations.Delete
+    (
+    -- * REST Resource
+      RegistrationsDeleteResource
+
+    -- * Creating a Request
+    , registrationsDelete
+    , RegistrationsDelete
+
+    -- * Request Lenses
+    , rdRegistrationId
+    , rdXgafv
+    , rdUploadProtocol
+    , rdAccessToken
+    , rdUploadType
+    , rdCallback
+    ) where
+
+import           Network.Google.Classroom.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @classroom.registrations.delete@ method which the
+-- 'RegistrationsDelete' request conforms to.
+type RegistrationsDeleteResource =
+     "v1" :>
+       "registrations" :>
+         Capture "registrationId" Text :>
+           QueryParam "$.xgafv" Xgafv :>
+             QueryParam "upload_protocol" Text :>
+               QueryParam "access_token" Text :>
+                 QueryParam "uploadType" Text :>
+                   QueryParam "callback" Text :>
+                     QueryParam "alt" AltJSON :> Delete '[JSON] Empty
+
+-- | Deletes a \`Registration\`, causing Classroom to stop sending
+-- notifications for that \`Registration\`.
+--
+-- /See:/ 'registrationsDelete' smart constructor.
+data RegistrationsDelete = RegistrationsDelete'
+    { _rdRegistrationId :: !Text
+    , _rdXgafv          :: !(Maybe Xgafv)
+    , _rdUploadProtocol :: !(Maybe Text)
+    , _rdAccessToken    :: !(Maybe Text)
+    , _rdUploadType     :: !(Maybe Text)
+    , _rdCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'RegistrationsDelete' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'rdRegistrationId'
+--
+-- * 'rdXgafv'
+--
+-- * 'rdUploadProtocol'
+--
+-- * 'rdAccessToken'
+--
+-- * 'rdUploadType'
+--
+-- * 'rdCallback'
+registrationsDelete
+    :: Text -- ^ 'rdRegistrationId'
+    -> RegistrationsDelete
+registrationsDelete pRdRegistrationId_ =
+    RegistrationsDelete'
+    { _rdRegistrationId = pRdRegistrationId_
+    , _rdXgafv = Nothing
+    , _rdUploadProtocol = Nothing
+    , _rdAccessToken = Nothing
+    , _rdUploadType = Nothing
+    , _rdCallback = Nothing
+    }
+
+-- | The \`registration_id\` of the \`Registration\` to be deleted.
+rdRegistrationId :: Lens' RegistrationsDelete Text
+rdRegistrationId
+  = lens _rdRegistrationId
+      (\ s a -> s{_rdRegistrationId = a})
+
+-- | V1 error format.
+rdXgafv :: Lens' RegistrationsDelete (Maybe Xgafv)
+rdXgafv = lens _rdXgafv (\ s a -> s{_rdXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+rdUploadProtocol :: Lens' RegistrationsDelete (Maybe Text)
+rdUploadProtocol
+  = lens _rdUploadProtocol
+      (\ s a -> s{_rdUploadProtocol = a})
+
+-- | OAuth access token.
+rdAccessToken :: Lens' RegistrationsDelete (Maybe Text)
+rdAccessToken
+  = lens _rdAccessToken
+      (\ s a -> s{_rdAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+rdUploadType :: Lens' RegistrationsDelete (Maybe Text)
+rdUploadType
+  = lens _rdUploadType (\ s a -> s{_rdUploadType = a})
+
+-- | JSONP
+rdCallback :: Lens' RegistrationsDelete (Maybe Text)
+rdCallback
+  = lens _rdCallback (\ s a -> s{_rdCallback = a})
+
+instance GoogleRequest RegistrationsDelete where
+        type Rs RegistrationsDelete = Empty
+        type Scopes RegistrationsDelete =
+             '["https://www.googleapis.com/auth/classroom.push-notifications"]
+        requestClient RegistrationsDelete'{..}
+          = go _rdRegistrationId _rdXgafv _rdUploadProtocol
+              _rdAccessToken
+              _rdUploadType
+              _rdCallback
+              (Just AltJSON)
+              classroomService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy RegistrationsDeleteResource)
+                      mempty
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
@@ -38,11 +38,9 @@
     -- * Request Lenses
     , upfgXgafv
     , upfgUploadProtocol
-    , upfgPp
     , upfgAccessToken
     , upfgUploadType
     , upfgUserId
-    , upfgBearerToken
     , upfgCallback
     ) where
 
@@ -55,14 +53,12 @@
      "v1" :>
        "userProfiles" :>
          Capture "userId" Text :>
-           QueryParam "$.xgafv" Text :>
+           QueryParam "$.xgafv" Xgafv :>
              QueryParam "upload_protocol" Text :>
-               QueryParam "pp" Bool :>
-                 QueryParam "access_token" Text :>
-                   QueryParam "uploadType" Text :>
-                     QueryParam "bearer_token" Text :>
-                       QueryParam "callback" Text :>
-                         QueryParam "alt" AltJSON :> Get '[JSON] UserProFile
+               QueryParam "access_token" Text :>
+                 QueryParam "uploadType" Text :>
+                   QueryParam "callback" Text :>
+                     QueryParam "alt" AltJSON :> Get '[JSON] UserProFile
 
 -- | Returns a user profile. This method returns the following error codes: *
 -- \`PERMISSION_DENIED\` if the requesting user is not permitted to access
@@ -71,13 +67,11 @@
 --
 -- /See:/ 'userProFilesGet' smart constructor.
 data UserProFilesGet = UserProFilesGet'
-    { _upfgXgafv          :: !(Maybe Text)
+    { _upfgXgafv          :: !(Maybe Xgafv)
     , _upfgUploadProtocol :: !(Maybe Text)
-    , _upfgPp             :: !Bool
     , _upfgAccessToken    :: !(Maybe Text)
     , _upfgUploadType     :: !(Maybe Text)
     , _upfgUserId         :: !Text
-    , _upfgBearerToken    :: !(Maybe Text)
     , _upfgCallback       :: !(Maybe Text)
     } deriving (Eq,Show,Data,Typeable,Generic)
 
@@ -89,16 +83,12 @@
 --
 -- * 'upfgUploadProtocol'
 --
--- * 'upfgPp'
---
 -- * 'upfgAccessToken'
 --
 -- * 'upfgUploadType'
 --
 -- * 'upfgUserId'
 --
--- * 'upfgBearerToken'
---
 -- * 'upfgCallback'
 userProFilesGet
     :: Text -- ^ 'upfgUserId'
@@ -107,16 +97,14 @@
     UserProFilesGet'
     { _upfgXgafv = Nothing
     , _upfgUploadProtocol = Nothing
-    , _upfgPp = True
     , _upfgAccessToken = Nothing
     , _upfgUploadType = Nothing
     , _upfgUserId = pUpfgUserId_
-    , _upfgBearerToken = Nothing
     , _upfgCallback = Nothing
     }
 
 -- | V1 error format.
-upfgXgafv :: Lens' UserProFilesGet (Maybe Text)
+upfgXgafv :: Lens' UserProFilesGet (Maybe Xgafv)
 upfgXgafv
   = lens _upfgXgafv (\ s a -> s{_upfgXgafv = a})
 
@@ -126,10 +114,6 @@
   = lens _upfgUploadProtocol
       (\ s a -> s{_upfgUploadProtocol = a})
 
--- | Pretty-print response.
-upfgPp :: Lens' UserProFilesGet Bool
-upfgPp = lens _upfgPp (\ s a -> s{_upfgPp = a})
-
 -- | OAuth access token.
 upfgAccessToken :: Lens' UserProFilesGet (Maybe Text)
 upfgAccessToken
@@ -149,12 +133,6 @@
 upfgUserId
   = lens _upfgUserId (\ s a -> s{_upfgUserId = a})
 
--- | OAuth bearer token.
-upfgBearerToken :: Lens' UserProFilesGet (Maybe Text)
-upfgBearerToken
-  = lens _upfgBearerToken
-      (\ s a -> s{_upfgBearerToken = a})
-
 -- | JSONP
 upfgCallback :: Lens' UserProFilesGet (Maybe Text)
 upfgCallback
@@ -169,10 +147,8 @@
                "https://www.googleapis.com/auth/classroom.rosters.readonly"]
         requestClient UserProFilesGet'{..}
           = go _upfgUserId _upfgXgafv _upfgUploadProtocol
-              (Just _upfgPp)
               _upfgAccessToken
               _upfgUploadType
-              _upfgBearerToken
               _upfgCallback
               (Just AltJSON)
               classroomService
diff --git a/gen/Network/Google/Resource/Classroom/UserProFiles/GuardianInvitations/Create.hs b/gen/Network/Google/Resource/Classroom/UserProFiles/GuardianInvitations/Create.hs
--- a/gen/Network/Google/Resource/Classroom/UserProFiles/GuardianInvitations/Create.hs
+++ b/gen/Network/Google/Resource/Classroom/UserProFiles/GuardianInvitations/Create.hs
@@ -59,11 +59,9 @@
     , upfgicStudentId
     , upfgicXgafv
     , upfgicUploadProtocol
-    , upfgicPp
     , upfgicAccessToken
     , upfgicUploadType
     , upfgicPayload
-    , upfgicBearerToken
     , upfgicCallback
     ) where
 
@@ -77,16 +75,14 @@
        "userProfiles" :>
          Capture "studentId" Text :>
            "guardianInvitations" :>
-             QueryParam "$.xgafv" Text :>
+             QueryParam "$.xgafv" Xgafv :>
                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] GuardianInvitation :>
-                               Post '[JSON] GuardianInvitation
+                 QueryParam "access_token" Text :>
+                   QueryParam "uploadType" Text :>
+                     QueryParam "callback" Text :>
+                       QueryParam "alt" AltJSON :>
+                         ReqBody '[JSON] GuardianInvitation :>
+                           Post '[JSON] GuardianInvitation
 
 -- | Creates a guardian invitation, and sends an email to the guardian asking
 -- them to confirm that they are the student\'s guardian. Once the guardian
@@ -116,13 +112,11 @@
 -- /See:/ 'userProFilesGuardianInvitationsCreate' smart constructor.
 data UserProFilesGuardianInvitationsCreate = UserProFilesGuardianInvitationsCreate'
     { _upfgicStudentId      :: !Text
-    , _upfgicXgafv          :: !(Maybe Text)
+    , _upfgicXgafv          :: !(Maybe Xgafv)
     , _upfgicUploadProtocol :: !(Maybe Text)
-    , _upfgicPp             :: !Bool
     , _upfgicAccessToken    :: !(Maybe Text)
     , _upfgicUploadType     :: !(Maybe Text)
     , _upfgicPayload        :: !GuardianInvitation
-    , _upfgicBearerToken    :: !(Maybe Text)
     , _upfgicCallback       :: !(Maybe Text)
     } deriving (Eq,Show,Data,Typeable,Generic)
 
@@ -136,16 +130,12 @@
 --
 -- * 'upfgicUploadProtocol'
 --
--- * 'upfgicPp'
---
 -- * 'upfgicAccessToken'
 --
 -- * 'upfgicUploadType'
 --
 -- * 'upfgicPayload'
 --
--- * 'upfgicBearerToken'
---
 -- * 'upfgicCallback'
 userProFilesGuardianInvitationsCreate
     :: Text -- ^ 'upfgicStudentId'
@@ -156,11 +146,9 @@
     { _upfgicStudentId = pUpfgicStudentId_
     , _upfgicXgafv = Nothing
     , _upfgicUploadProtocol = Nothing
-    , _upfgicPp = True
     , _upfgicAccessToken = Nothing
     , _upfgicUploadType = Nothing
     , _upfgicPayload = pUpfgicPayload_
-    , _upfgicBearerToken = Nothing
     , _upfgicCallback = Nothing
     }
 
@@ -171,7 +159,7 @@
       (\ s a -> s{_upfgicStudentId = a})
 
 -- | V1 error format.
-upfgicXgafv :: Lens' UserProFilesGuardianInvitationsCreate (Maybe Text)
+upfgicXgafv :: Lens' UserProFilesGuardianInvitationsCreate (Maybe Xgafv)
 upfgicXgafv
   = lens _upfgicXgafv (\ s a -> s{_upfgicXgafv = a})
 
@@ -181,10 +169,6 @@
   = lens _upfgicUploadProtocol
       (\ s a -> s{_upfgicUploadProtocol = a})
 
--- | Pretty-print response.
-upfgicPp :: Lens' UserProFilesGuardianInvitationsCreate Bool
-upfgicPp = lens _upfgicPp (\ s a -> s{_upfgicPp = a})
-
 -- | OAuth access token.
 upfgicAccessToken :: Lens' UserProFilesGuardianInvitationsCreate (Maybe Text)
 upfgicAccessToken
@@ -203,12 +187,6 @@
   = lens _upfgicPayload
       (\ s a -> s{_upfgicPayload = a})
 
--- | OAuth bearer token.
-upfgicBearerToken :: Lens' UserProFilesGuardianInvitationsCreate (Maybe Text)
-upfgicBearerToken
-  = lens _upfgicBearerToken
-      (\ s a -> s{_upfgicBearerToken = a})
-
 -- | JSONP
 upfgicCallback :: Lens' UserProFilesGuardianInvitationsCreate (Maybe Text)
 upfgicCallback
@@ -220,15 +198,13 @@
         type Rs UserProFilesGuardianInvitationsCreate =
              GuardianInvitation
         type Scopes UserProFilesGuardianInvitationsCreate =
-             '[]
+             '["https://www.googleapis.com/auth/classroom.guardianlinks.students"]
         requestClient
           UserProFilesGuardianInvitationsCreate'{..}
           = go _upfgicStudentId _upfgicXgafv
               _upfgicUploadProtocol
-              (Just _upfgicPp)
               _upfgicAccessToken
               _upfgicUploadType
-              _upfgicBearerToken
               _upfgicCallback
               (Just AltJSON)
               _upfgicPayload
diff --git a/gen/Network/Google/Resource/Classroom/UserProFiles/GuardianInvitations/Get.hs b/gen/Network/Google/Resource/Classroom/UserProFiles/GuardianInvitations/Get.hs
--- a/gen/Network/Google/Resource/Classroom/UserProFiles/GuardianInvitations/Get.hs
+++ b/gen/Network/Google/Resource/Classroom/UserProFiles/GuardianInvitations/Get.hs
@@ -46,11 +46,9 @@
     , upfgigStudentId
     , upfgigXgafv
     , upfgigUploadProtocol
-    , upfgigPp
     , upfgigAccessToken
     , upfgigUploadType
     , upfgigInvitationId
-    , upfgigBearerToken
     , upfgigCallback
     ) where
 
@@ -65,15 +63,13 @@
          Capture "studentId" Text :>
            "guardianInvitations" :>
              Capture "invitationId" Text :>
-               QueryParam "$.xgafv" Text :>
+               QueryParam "$.xgafv" Xgafv :>
                  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] GuardianInvitation
+                   QueryParam "access_token" Text :>
+                     QueryParam "uploadType" Text :>
+                       QueryParam "callback" Text :>
+                         QueryParam "alt" AltJSON :>
+                           Get '[JSON] GuardianInvitation
 
 -- | Returns a specific guardian invitation. This method returns the
 -- following error codes: * \`PERMISSION_DENIED\` if the requesting user is
@@ -90,13 +86,11 @@
 -- /See:/ 'userProFilesGuardianInvitationsGet' smart constructor.
 data UserProFilesGuardianInvitationsGet = UserProFilesGuardianInvitationsGet'
     { _upfgigStudentId      :: !Text
-    , _upfgigXgafv          :: !(Maybe Text)
+    , _upfgigXgafv          :: !(Maybe Xgafv)
     , _upfgigUploadProtocol :: !(Maybe Text)
-    , _upfgigPp             :: !Bool
     , _upfgigAccessToken    :: !(Maybe Text)
     , _upfgigUploadType     :: !(Maybe Text)
     , _upfgigInvitationId   :: !Text
-    , _upfgigBearerToken    :: !(Maybe Text)
     , _upfgigCallback       :: !(Maybe Text)
     } deriving (Eq,Show,Data,Typeable,Generic)
 
@@ -110,16 +104,12 @@
 --
 -- * 'upfgigUploadProtocol'
 --
--- * 'upfgigPp'
---
 -- * 'upfgigAccessToken'
 --
 -- * 'upfgigUploadType'
 --
 -- * 'upfgigInvitationId'
 --
--- * 'upfgigBearerToken'
---
 -- * 'upfgigCallback'
 userProFilesGuardianInvitationsGet
     :: Text -- ^ 'upfgigStudentId'
@@ -130,11 +120,9 @@
     { _upfgigStudentId = pUpfgigStudentId_
     , _upfgigXgafv = Nothing
     , _upfgigUploadProtocol = Nothing
-    , _upfgigPp = True
     , _upfgigAccessToken = Nothing
     , _upfgigUploadType = Nothing
     , _upfgigInvitationId = pUpfgigInvitationId_
-    , _upfgigBearerToken = Nothing
     , _upfgigCallback = Nothing
     }
 
@@ -145,7 +133,7 @@
       (\ s a -> s{_upfgigStudentId = a})
 
 -- | V1 error format.
-upfgigXgafv :: Lens' UserProFilesGuardianInvitationsGet (Maybe Text)
+upfgigXgafv :: Lens' UserProFilesGuardianInvitationsGet (Maybe Xgafv)
 upfgigXgafv
   = lens _upfgigXgafv (\ s a -> s{_upfgigXgafv = a})
 
@@ -155,10 +143,6 @@
   = lens _upfgigUploadProtocol
       (\ s a -> s{_upfgigUploadProtocol = a})
 
--- | Pretty-print response.
-upfgigPp :: Lens' UserProFilesGuardianInvitationsGet Bool
-upfgigPp = lens _upfgigPp (\ s a -> s{_upfgigPp = a})
-
 -- | OAuth access token.
 upfgigAccessToken :: Lens' UserProFilesGuardianInvitationsGet (Maybe Text)
 upfgigAccessToken
@@ -177,12 +161,6 @@
   = lens _upfgigInvitationId
       (\ s a -> s{_upfgigInvitationId = a})
 
--- | OAuth bearer token.
-upfgigBearerToken :: Lens' UserProFilesGuardianInvitationsGet (Maybe Text)
-upfgigBearerToken
-  = lens _upfgigBearerToken
-      (\ s a -> s{_upfgigBearerToken = a})
-
 -- | JSONP
 upfgigCallback :: Lens' UserProFilesGuardianInvitationsGet (Maybe Text)
 upfgigCallback
@@ -193,15 +171,15 @@
          UserProFilesGuardianInvitationsGet where
         type Rs UserProFilesGuardianInvitationsGet =
              GuardianInvitation
-        type Scopes UserProFilesGuardianInvitationsGet = '[]
+        type Scopes UserProFilesGuardianInvitationsGet =
+             '["https://www.googleapis.com/auth/classroom.guardianlinks.students",
+               "https://www.googleapis.com/auth/classroom.guardianlinks.students.readonly"]
         requestClient UserProFilesGuardianInvitationsGet'{..}
           = go _upfgigStudentId _upfgigInvitationId
               _upfgigXgafv
               _upfgigUploadProtocol
-              (Just _upfgigPp)
               _upfgigAccessToken
               _upfgigUploadType
-              _upfgigBearerToken
               _upfgigCallback
               (Just AltJSON)
               classroomService
diff --git a/gen/Network/Google/Resource/Classroom/UserProFiles/GuardianInvitations/List.hs b/gen/Network/Google/Resource/Classroom/UserProFiles/GuardianInvitations/List.hs
--- a/gen/Network/Google/Resource/Classroom/UserProFiles/GuardianInvitations/List.hs
+++ b/gen/Network/Google/Resource/Classroom/UserProFiles/GuardianInvitations/List.hs
@@ -49,10 +49,8 @@
     , upfgilStates
     , upfgilXgafv
     , upfgilUploadProtocol
-    , upfgilPp
     , upfgilAccessToken
     , upfgilUploadType
-    , upfgilBearerToken
     , upfgilInvitedEmailAddress
     , upfgilPageToken
     , upfgilPageSize
@@ -70,18 +68,16 @@
          Capture "studentId" Text :>
            "guardianInvitations" :>
              QueryParams "states" Text :>
-               QueryParam "$.xgafv" Text :>
+               QueryParam "$.xgafv" Xgafv :>
                  QueryParam "upload_protocol" Text :>
-                   QueryParam "pp" Bool :>
-                     QueryParam "access_token" Text :>
-                       QueryParam "uploadType" Text :>
-                         QueryParam "bearer_token" Text :>
-                           QueryParam "invitedEmailAddress" Text :>
-                             QueryParam "pageToken" Text :>
-                               QueryParam "pageSize" (Textual Int32) :>
-                                 QueryParam "callback" Text :>
-                                   QueryParam "alt" AltJSON :>
-                                     Get '[JSON] ListGuardianInvitationsResponse
+                   QueryParam "access_token" Text :>
+                     QueryParam "uploadType" Text :>
+                       QueryParam "invitedEmailAddress" Text :>
+                         QueryParam "pageToken" Text :>
+                           QueryParam "pageSize" (Textual Int32) :>
+                             QueryParam "callback" Text :>
+                               QueryParam "alt" AltJSON :>
+                                 Get '[JSON] ListGuardianInvitationsResponse
 
 -- | Returns a list of guardian invitations that the requesting user is
 -- permitted to view, filtered by the parameters provided. This method
@@ -101,12 +97,10 @@
 data UserProFilesGuardianInvitationsList = UserProFilesGuardianInvitationsList'
     { _upfgilStudentId           :: !Text
     , _upfgilStates              :: !(Maybe [Text])
-    , _upfgilXgafv               :: !(Maybe Text)
+    , _upfgilXgafv               :: !(Maybe Xgafv)
     , _upfgilUploadProtocol      :: !(Maybe Text)
-    , _upfgilPp                  :: !Bool
     , _upfgilAccessToken         :: !(Maybe Text)
     , _upfgilUploadType          :: !(Maybe Text)
-    , _upfgilBearerToken         :: !(Maybe Text)
     , _upfgilInvitedEmailAddress :: !(Maybe Text)
     , _upfgilPageToken           :: !(Maybe Text)
     , _upfgilPageSize            :: !(Maybe (Textual Int32))
@@ -125,14 +119,10 @@
 --
 -- * 'upfgilUploadProtocol'
 --
--- * 'upfgilPp'
---
 -- * 'upfgilAccessToken'
 --
 -- * 'upfgilUploadType'
 --
--- * 'upfgilBearerToken'
---
 -- * 'upfgilInvitedEmailAddress'
 --
 -- * 'upfgilPageToken'
@@ -149,10 +139,8 @@
     , _upfgilStates = Nothing
     , _upfgilXgafv = Nothing
     , _upfgilUploadProtocol = Nothing
-    , _upfgilPp = True
     , _upfgilAccessToken = Nothing
     , _upfgilUploadType = Nothing
-    , _upfgilBearerToken = Nothing
     , _upfgilInvitedEmailAddress = Nothing
     , _upfgilPageToken = Nothing
     , _upfgilPageSize = Nothing
@@ -180,7 +168,7 @@
       . _Coerce
 
 -- | V1 error format.
-upfgilXgafv :: Lens' UserProFilesGuardianInvitationsList (Maybe Text)
+upfgilXgafv :: Lens' UserProFilesGuardianInvitationsList (Maybe Xgafv)
 upfgilXgafv
   = lens _upfgilXgafv (\ s a -> s{_upfgilXgafv = a})
 
@@ -190,10 +178,6 @@
   = lens _upfgilUploadProtocol
       (\ s a -> s{_upfgilUploadProtocol = a})
 
--- | Pretty-print response.
-upfgilPp :: Lens' UserProFilesGuardianInvitationsList Bool
-upfgilPp = lens _upfgilPp (\ s a -> s{_upfgilPp = a})
-
 -- | OAuth access token.
 upfgilAccessToken :: Lens' UserProFilesGuardianInvitationsList (Maybe Text)
 upfgilAccessToken
@@ -206,12 +190,6 @@
   = lens _upfgilUploadType
       (\ s a -> s{_upfgilUploadType = a})
 
--- | OAuth bearer token.
-upfgilBearerToken :: Lens' UserProFilesGuardianInvitationsList (Maybe Text)
-upfgilBearerToken
-  = lens _upfgilBearerToken
-      (\ s a -> s{_upfgilBearerToken = a})
-
 -- | If specified, only results with the specified \`invited_email_address\`
 -- will be returned.
 upfgilInvitedEmailAddress :: Lens' UserProFilesGuardianInvitationsList (Maybe Text)
@@ -246,16 +224,16 @@
          UserProFilesGuardianInvitationsList where
         type Rs UserProFilesGuardianInvitationsList =
              ListGuardianInvitationsResponse
-        type Scopes UserProFilesGuardianInvitationsList = '[]
+        type Scopes UserProFilesGuardianInvitationsList =
+             '["https://www.googleapis.com/auth/classroom.guardianlinks.students",
+               "https://www.googleapis.com/auth/classroom.guardianlinks.students.readonly"]
         requestClient
           UserProFilesGuardianInvitationsList'{..}
           = go _upfgilStudentId (_upfgilStates ^. _Default)
               _upfgilXgafv
               _upfgilUploadProtocol
-              (Just _upfgilPp)
               _upfgilAccessToken
               _upfgilUploadType
-              _upfgilBearerToken
               _upfgilInvitedEmailAddress
               _upfgilPageToken
               _upfgilPageSize
diff --git a/gen/Network/Google/Resource/Classroom/UserProFiles/GuardianInvitations/Patch.hs b/gen/Network/Google/Resource/Classroom/UserProFiles/GuardianInvitations/Patch.hs
--- a/gen/Network/Google/Resource/Classroom/UserProFiles/GuardianInvitations/Patch.hs
+++ b/gen/Network/Google/Resource/Classroom/UserProFiles/GuardianInvitations/Patch.hs
@@ -50,12 +50,10 @@
     , upfgipXgafv
     , upfgipUploadProtocol
     , upfgipUpdateMask
-    , upfgipPp
     , upfgipAccessToken
     , upfgipUploadType
     , upfgipPayload
     , upfgipInvitationId
-    , upfgipBearerToken
     , upfgipCallback
     ) where
 
@@ -70,17 +68,15 @@
          Capture "studentId" Text :>
            "guardianInvitations" :>
              Capture "invitationId" Text :>
-               QueryParam "$.xgafv" Text :>
+               QueryParam "$.xgafv" Xgafv :>
                  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] GuardianInvitation :>
-                                   Patch '[JSON] GuardianInvitation
+                   QueryParam "updateMask" GFieldMask :>
+                     QueryParam "access_token" Text :>
+                       QueryParam "uploadType" Text :>
+                         QueryParam "callback" Text :>
+                           QueryParam "alt" AltJSON :>
+                             ReqBody '[JSON] GuardianInvitation :>
+                               Patch '[JSON] GuardianInvitation
 
 -- | Modifies a guardian invitation. Currently, the only valid modification
 -- is to change the \`state\` from \`PENDING\` to \`COMPLETE\`. This has
@@ -100,15 +96,13 @@
 -- /See:/ 'userProFilesGuardianInvitationsPatch' smart constructor.
 data UserProFilesGuardianInvitationsPatch = UserProFilesGuardianInvitationsPatch'
     { _upfgipStudentId      :: !Text
-    , _upfgipXgafv          :: !(Maybe Text)
+    , _upfgipXgafv          :: !(Maybe Xgafv)
     , _upfgipUploadProtocol :: !(Maybe Text)
-    , _upfgipUpdateMask     :: !(Maybe Text)
-    , _upfgipPp             :: !Bool
+    , _upfgipUpdateMask     :: !(Maybe GFieldMask)
     , _upfgipAccessToken    :: !(Maybe Text)
     , _upfgipUploadType     :: !(Maybe Text)
     , _upfgipPayload        :: !GuardianInvitation
     , _upfgipInvitationId   :: !Text
-    , _upfgipBearerToken    :: !(Maybe Text)
     , _upfgipCallback       :: !(Maybe Text)
     } deriving (Eq,Show,Data,Typeable,Generic)
 
@@ -124,8 +118,6 @@
 --
 -- * 'upfgipUpdateMask'
 --
--- * 'upfgipPp'
---
 -- * 'upfgipAccessToken'
 --
 -- * 'upfgipUploadType'
@@ -134,8 +126,6 @@
 --
 -- * 'upfgipInvitationId'
 --
--- * 'upfgipBearerToken'
---
 -- * 'upfgipCallback'
 userProFilesGuardianInvitationsPatch
     :: Text -- ^ 'upfgipStudentId'
@@ -148,12 +138,10 @@
     , _upfgipXgafv = Nothing
     , _upfgipUploadProtocol = Nothing
     , _upfgipUpdateMask = Nothing
-    , _upfgipPp = True
     , _upfgipAccessToken = Nothing
     , _upfgipUploadType = Nothing
     , _upfgipPayload = pUpfgipPayload_
     , _upfgipInvitationId = pUpfgipInvitationId_
-    , _upfgipBearerToken = Nothing
     , _upfgipCallback = Nothing
     }
 
@@ -164,7 +152,7 @@
       (\ s a -> s{_upfgipStudentId = a})
 
 -- | V1 error format.
-upfgipXgafv :: Lens' UserProFilesGuardianInvitationsPatch (Maybe Text)
+upfgipXgafv :: Lens' UserProFilesGuardianInvitationsPatch (Maybe Xgafv)
 upfgipXgafv
   = lens _upfgipXgafv (\ s a -> s{_upfgipXgafv = a})
 
@@ -178,15 +166,11 @@
 -- required to do an update. The update will fail if invalid fields are
 -- specified. The following fields are valid: * \`state\` When set in a
 -- query parameter, this field should be specified as \`updateMask=,,...\`
-upfgipUpdateMask :: Lens' UserProFilesGuardianInvitationsPatch (Maybe Text)
+upfgipUpdateMask :: Lens' UserProFilesGuardianInvitationsPatch (Maybe GFieldMask)
 upfgipUpdateMask
   = lens _upfgipUpdateMask
       (\ s a -> s{_upfgipUpdateMask = a})
 
--- | Pretty-print response.
-upfgipPp :: Lens' UserProFilesGuardianInvitationsPatch Bool
-upfgipPp = lens _upfgipPp (\ s a -> s{_upfgipPp = a})
-
 -- | OAuth access token.
 upfgipAccessToken :: Lens' UserProFilesGuardianInvitationsPatch (Maybe Text)
 upfgipAccessToken
@@ -211,12 +195,6 @@
   = lens _upfgipInvitationId
       (\ s a -> s{_upfgipInvitationId = a})
 
--- | OAuth bearer token.
-upfgipBearerToken :: Lens' UserProFilesGuardianInvitationsPatch (Maybe Text)
-upfgipBearerToken
-  = lens _upfgipBearerToken
-      (\ s a -> s{_upfgipBearerToken = a})
-
 -- | JSONP
 upfgipCallback :: Lens' UserProFilesGuardianInvitationsPatch (Maybe Text)
 upfgipCallback
@@ -228,17 +206,15 @@
         type Rs UserProFilesGuardianInvitationsPatch =
              GuardianInvitation
         type Scopes UserProFilesGuardianInvitationsPatch =
-             '[]
+             '["https://www.googleapis.com/auth/classroom.guardianlinks.students"]
         requestClient
           UserProFilesGuardianInvitationsPatch'{..}
           = go _upfgipStudentId _upfgipInvitationId
               _upfgipXgafv
               _upfgipUploadProtocol
               _upfgipUpdateMask
-              (Just _upfgipPp)
               _upfgipAccessToken
               _upfgipUploadType
-              _upfgipBearerToken
               _upfgipCallback
               (Just AltJSON)
               _upfgipPayload
diff --git a/gen/Network/Google/Resource/Classroom/UserProFiles/Guardians/Delete.hs b/gen/Network/Google/Resource/Classroom/UserProFiles/Guardians/Delete.hs
--- a/gen/Network/Google/Resource/Classroom/UserProFiles/Guardians/Delete.hs
+++ b/gen/Network/Google/Resource/Classroom/UserProFiles/Guardians/Delete.hs
@@ -47,11 +47,9 @@
     , upfgdStudentId
     , upfgdXgafv
     , upfgdUploadProtocol
-    , upfgdPp
     , upfgdAccessToken
     , upfgdUploadType
     , upfgdGuardianId
-    , upfgdBearerToken
     , upfgdCallback
     ) where
 
@@ -66,14 +64,12 @@
          Capture "studentId" Text :>
            "guardians" :>
              Capture "guardianId" Text :>
-               QueryParam "$.xgafv" Text :>
+               QueryParam "$.xgafv" Xgafv :>
                  QueryParam "upload_protocol" Text :>
-                   QueryParam "pp" Bool :>
-                     QueryParam "access_token" Text :>
-                       QueryParam "uploadType" Text :>
-                         QueryParam "bearer_token" Text :>
-                           QueryParam "callback" Text :>
-                             QueryParam "alt" AltJSON :> Delete '[JSON] Empty
+                   QueryParam "access_token" Text :>
+                     QueryParam "uploadType" Text :>
+                       QueryParam "callback" Text :>
+                         QueryParam "alt" AltJSON :> Delete '[JSON] Empty
 
 -- | Deletes a guardian. The guardian will no longer receive guardian
 -- notifications and the guardian will no longer be accessible via the API.
@@ -91,13 +87,11 @@
 -- /See:/ 'userProFilesGuardiansDelete' smart constructor.
 data UserProFilesGuardiansDelete = UserProFilesGuardiansDelete'
     { _upfgdStudentId      :: !Text
-    , _upfgdXgafv          :: !(Maybe Text)
+    , _upfgdXgafv          :: !(Maybe Xgafv)
     , _upfgdUploadProtocol :: !(Maybe Text)
-    , _upfgdPp             :: !Bool
     , _upfgdAccessToken    :: !(Maybe Text)
     , _upfgdUploadType     :: !(Maybe Text)
     , _upfgdGuardianId     :: !Text
-    , _upfgdBearerToken    :: !(Maybe Text)
     , _upfgdCallback       :: !(Maybe Text)
     } deriving (Eq,Show,Data,Typeable,Generic)
 
@@ -111,16 +105,12 @@
 --
 -- * 'upfgdUploadProtocol'
 --
--- * 'upfgdPp'
---
 -- * 'upfgdAccessToken'
 --
 -- * 'upfgdUploadType'
 --
 -- * 'upfgdGuardianId'
 --
--- * 'upfgdBearerToken'
---
 -- * 'upfgdCallback'
 userProFilesGuardiansDelete
     :: Text -- ^ 'upfgdStudentId'
@@ -131,11 +121,9 @@
     { _upfgdStudentId = pUpfgdStudentId_
     , _upfgdXgafv = Nothing
     , _upfgdUploadProtocol = Nothing
-    , _upfgdPp = True
     , _upfgdAccessToken = Nothing
     , _upfgdUploadType = Nothing
     , _upfgdGuardianId = pUpfgdGuardianId_
-    , _upfgdBearerToken = Nothing
     , _upfgdCallback = Nothing
     }
 
@@ -148,7 +136,7 @@
       (\ s a -> s{_upfgdStudentId = a})
 
 -- | V1 error format.
-upfgdXgafv :: Lens' UserProFilesGuardiansDelete (Maybe Text)
+upfgdXgafv :: Lens' UserProFilesGuardiansDelete (Maybe Xgafv)
 upfgdXgafv
   = lens _upfgdXgafv (\ s a -> s{_upfgdXgafv = a})
 
@@ -158,10 +146,6 @@
   = lens _upfgdUploadProtocol
       (\ s a -> s{_upfgdUploadProtocol = a})
 
--- | Pretty-print response.
-upfgdPp :: Lens' UserProFilesGuardiansDelete Bool
-upfgdPp = lens _upfgdPp (\ s a -> s{_upfgdPp = a})
-
 -- | OAuth access token.
 upfgdAccessToken :: Lens' UserProFilesGuardiansDelete (Maybe Text)
 upfgdAccessToken
@@ -180,12 +164,6 @@
   = lens _upfgdGuardianId
       (\ s a -> s{_upfgdGuardianId = a})
 
--- | OAuth bearer token.
-upfgdBearerToken :: Lens' UserProFilesGuardiansDelete (Maybe Text)
-upfgdBearerToken
-  = lens _upfgdBearerToken
-      (\ s a -> s{_upfgdBearerToken = a})
-
 -- | JSONP
 upfgdCallback :: Lens' UserProFilesGuardiansDelete (Maybe Text)
 upfgdCallback
@@ -195,14 +173,13 @@
 instance GoogleRequest UserProFilesGuardiansDelete
          where
         type Rs UserProFilesGuardiansDelete = Empty
-        type Scopes UserProFilesGuardiansDelete = '[]
+        type Scopes UserProFilesGuardiansDelete =
+             '["https://www.googleapis.com/auth/classroom.guardianlinks.students"]
         requestClient UserProFilesGuardiansDelete'{..}
           = go _upfgdStudentId _upfgdGuardianId _upfgdXgafv
               _upfgdUploadProtocol
-              (Just _upfgdPp)
               _upfgdAccessToken
               _upfgdUploadType
-              _upfgdBearerToken
               _upfgdCallback
               (Just AltJSON)
               classroomService
diff --git a/gen/Network/Google/Resource/Classroom/UserProFiles/Guardians/Get.hs b/gen/Network/Google/Resource/Classroom/UserProFiles/Guardians/Get.hs
--- a/gen/Network/Google/Resource/Classroom/UserProFiles/Guardians/Get.hs
+++ b/gen/Network/Google/Resource/Classroom/UserProFiles/Guardians/Get.hs
@@ -47,11 +47,9 @@
     , upfggStudentId
     , upfggXgafv
     , upfggUploadProtocol
-    , upfggPp
     , upfggAccessToken
     , upfggUploadType
     , upfggGuardianId
-    , upfggBearerToken
     , upfggCallback
     ) where
 
@@ -66,14 +64,12 @@
          Capture "studentId" Text :>
            "guardians" :>
              Capture "guardianId" Text :>
-               QueryParam "$.xgafv" Text :>
+               QueryParam "$.xgafv" Xgafv :>
                  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] Guardian
+                   QueryParam "access_token" Text :>
+                     QueryParam "uploadType" Text :>
+                       QueryParam "callback" Text :>
+                         QueryParam "alt" AltJSON :> Get '[JSON] Guardian
 
 -- | Returns a specific guardian. This method returns the following error
 -- codes: * \`PERMISSION_DENIED\` if no user that matches the provided
@@ -91,13 +87,11 @@
 -- /See:/ 'userProFilesGuardiansGet' smart constructor.
 data UserProFilesGuardiansGet = UserProFilesGuardiansGet'
     { _upfggStudentId      :: !Text
-    , _upfggXgafv          :: !(Maybe Text)
+    , _upfggXgafv          :: !(Maybe Xgafv)
     , _upfggUploadProtocol :: !(Maybe Text)
-    , _upfggPp             :: !Bool
     , _upfggAccessToken    :: !(Maybe Text)
     , _upfggUploadType     :: !(Maybe Text)
     , _upfggGuardianId     :: !Text
-    , _upfggBearerToken    :: !(Maybe Text)
     , _upfggCallback       :: !(Maybe Text)
     } deriving (Eq,Show,Data,Typeable,Generic)
 
@@ -111,16 +105,12 @@
 --
 -- * 'upfggUploadProtocol'
 --
--- * 'upfggPp'
---
 -- * 'upfggAccessToken'
 --
 -- * 'upfggUploadType'
 --
 -- * 'upfggGuardianId'
 --
--- * 'upfggBearerToken'
---
 -- * 'upfggCallback'
 userProFilesGuardiansGet
     :: Text -- ^ 'upfggStudentId'
@@ -131,11 +121,9 @@
     { _upfggStudentId = pUpfggStudentId_
     , _upfggXgafv = Nothing
     , _upfggUploadProtocol = Nothing
-    , _upfggPp = True
     , _upfggAccessToken = Nothing
     , _upfggUploadType = Nothing
     , _upfggGuardianId = pUpfggGuardianId_
-    , _upfggBearerToken = Nothing
     , _upfggCallback = Nothing
     }
 
@@ -148,7 +136,7 @@
       (\ s a -> s{_upfggStudentId = a})
 
 -- | V1 error format.
-upfggXgafv :: Lens' UserProFilesGuardiansGet (Maybe Text)
+upfggXgafv :: Lens' UserProFilesGuardiansGet (Maybe Xgafv)
 upfggXgafv
   = lens _upfggXgafv (\ s a -> s{_upfggXgafv = a})
 
@@ -158,10 +146,6 @@
   = lens _upfggUploadProtocol
       (\ s a -> s{_upfggUploadProtocol = a})
 
--- | Pretty-print response.
-upfggPp :: Lens' UserProFilesGuardiansGet Bool
-upfggPp = lens _upfggPp (\ s a -> s{_upfggPp = a})
-
 -- | OAuth access token.
 upfggAccessToken :: Lens' UserProFilesGuardiansGet (Maybe Text)
 upfggAccessToken
@@ -180,12 +164,6 @@
   = lens _upfggGuardianId
       (\ s a -> s{_upfggGuardianId = a})
 
--- | OAuth bearer token.
-upfggBearerToken :: Lens' UserProFilesGuardiansGet (Maybe Text)
-upfggBearerToken
-  = lens _upfggBearerToken
-      (\ s a -> s{_upfggBearerToken = a})
-
 -- | JSONP
 upfggCallback :: Lens' UserProFilesGuardiansGet (Maybe Text)
 upfggCallback
@@ -194,14 +172,15 @@
 
 instance GoogleRequest UserProFilesGuardiansGet where
         type Rs UserProFilesGuardiansGet = Guardian
-        type Scopes UserProFilesGuardiansGet = '[]
+        type Scopes UserProFilesGuardiansGet =
+             '["https://www.googleapis.com/auth/classroom.guardianlinks.me.readonly",
+               "https://www.googleapis.com/auth/classroom.guardianlinks.students",
+               "https://www.googleapis.com/auth/classroom.guardianlinks.students.readonly"]
         requestClient UserProFilesGuardiansGet'{..}
           = go _upfggStudentId _upfggGuardianId _upfggXgafv
               _upfggUploadProtocol
-              (Just _upfggPp)
               _upfggAccessToken
               _upfggUploadType
-              _upfggBearerToken
               _upfggCallback
               (Just AltJSON)
               classroomService
diff --git a/gen/Network/Google/Resource/Classroom/UserProFiles/Guardians/List.hs b/gen/Network/Google/Resource/Classroom/UserProFiles/Guardians/List.hs
--- a/gen/Network/Google/Resource/Classroom/UserProFiles/Guardians/List.hs
+++ b/gen/Network/Google/Resource/Classroom/UserProFiles/Guardians/List.hs
@@ -51,10 +51,8 @@
     , upfglStudentId
     , upfglXgafv
     , upfglUploadProtocol
-    , upfglPp
     , upfglAccessToken
     , upfglUploadType
-    , upfglBearerToken
     , upfglInvitedEmailAddress
     , upfglPageToken
     , upfglPageSize
@@ -71,18 +69,16 @@
        "userProfiles" :>
          Capture "studentId" Text :>
            "guardians" :>
-             QueryParam "$.xgafv" Text :>
+             QueryParam "$.xgafv" Xgafv :>
                QueryParam "upload_protocol" Text :>
-                 QueryParam "pp" Bool :>
-                   QueryParam "access_token" Text :>
-                     QueryParam "uploadType" Text :>
-                       QueryParam "bearer_token" Text :>
-                         QueryParam "invitedEmailAddress" Text :>
-                           QueryParam "pageToken" Text :>
-                             QueryParam "pageSize" (Textual Int32) :>
-                               QueryParam "callback" Text :>
-                                 QueryParam "alt" AltJSON :>
-                                   Get '[JSON] ListGuardiansResponse
+                 QueryParam "access_token" Text :>
+                   QueryParam "uploadType" Text :>
+                     QueryParam "invitedEmailAddress" Text :>
+                       QueryParam "pageToken" Text :>
+                         QueryParam "pageSize" (Textual Int32) :>
+                           QueryParam "callback" Text :>
+                             QueryParam "alt" AltJSON :>
+                               Get '[JSON] ListGuardiansResponse
 
 -- | Returns a list of guardians that the requesting user is permitted to
 -- view, restricted to those that match the request. To list guardians for
@@ -104,12 +100,10 @@
 -- /See:/ 'userProFilesGuardiansList' smart constructor.
 data UserProFilesGuardiansList = UserProFilesGuardiansList'
     { _upfglStudentId           :: !Text
-    , _upfglXgafv               :: !(Maybe Text)
+    , _upfglXgafv               :: !(Maybe Xgafv)
     , _upfglUploadProtocol      :: !(Maybe Text)
-    , _upfglPp                  :: !Bool
     , _upfglAccessToken         :: !(Maybe Text)
     , _upfglUploadType          :: !(Maybe Text)
-    , _upfglBearerToken         :: !(Maybe Text)
     , _upfglInvitedEmailAddress :: !(Maybe Text)
     , _upfglPageToken           :: !(Maybe Text)
     , _upfglPageSize            :: !(Maybe (Textual Int32))
@@ -126,14 +120,10 @@
 --
 -- * 'upfglUploadProtocol'
 --
--- * 'upfglPp'
---
 -- * 'upfglAccessToken'
 --
 -- * 'upfglUploadType'
 --
--- * 'upfglBearerToken'
---
 -- * 'upfglInvitedEmailAddress'
 --
 -- * 'upfglPageToken'
@@ -149,10 +139,8 @@
     { _upfglStudentId = pUpfglStudentId_
     , _upfglXgafv = Nothing
     , _upfglUploadProtocol = Nothing
-    , _upfglPp = True
     , _upfglAccessToken = Nothing
     , _upfglUploadType = Nothing
-    , _upfglBearerToken = Nothing
     , _upfglInvitedEmailAddress = Nothing
     , _upfglPageToken = Nothing
     , _upfglPageSize = Nothing
@@ -171,7 +159,7 @@
       (\ s a -> s{_upfglStudentId = a})
 
 -- | V1 error format.
-upfglXgafv :: Lens' UserProFilesGuardiansList (Maybe Text)
+upfglXgafv :: Lens' UserProFilesGuardiansList (Maybe Xgafv)
 upfglXgafv
   = lens _upfglXgafv (\ s a -> s{_upfglXgafv = a})
 
@@ -181,10 +169,6 @@
   = lens _upfglUploadProtocol
       (\ s a -> s{_upfglUploadProtocol = a})
 
--- | Pretty-print response.
-upfglPp :: Lens' UserProFilesGuardiansList Bool
-upfglPp = lens _upfglPp (\ s a -> s{_upfglPp = a})
-
 -- | OAuth access token.
 upfglAccessToken :: Lens' UserProFilesGuardiansList (Maybe Text)
 upfglAccessToken
@@ -197,12 +181,6 @@
   = lens _upfglUploadType
       (\ s a -> s{_upfglUploadType = a})
 
--- | OAuth bearer token.
-upfglBearerToken :: Lens' UserProFilesGuardiansList (Maybe Text)
-upfglBearerToken
-  = lens _upfglBearerToken
-      (\ s a -> s{_upfglBearerToken = a})
-
 -- | Filter results by the email address that the original invitation was
 -- sent to, resulting in this guardian link. This filter can only be used
 -- by domain administrators.
@@ -238,13 +216,14 @@
          where
         type Rs UserProFilesGuardiansList =
              ListGuardiansResponse
-        type Scopes UserProFilesGuardiansList = '[]
+        type Scopes UserProFilesGuardiansList =
+             '["https://www.googleapis.com/auth/classroom.guardianlinks.me.readonly",
+               "https://www.googleapis.com/auth/classroom.guardianlinks.students",
+               "https://www.googleapis.com/auth/classroom.guardianlinks.students.readonly"]
         requestClient UserProFilesGuardiansList'{..}
           = go _upfglStudentId _upfglXgafv _upfglUploadProtocol
-              (Just _upfglPp)
               _upfglAccessToken
               _upfglUploadType
-              _upfglBearerToken
               _upfglInvitedEmailAddress
               _upfglPageToken
               _upfglPageSize
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.3.0
+version:               0.4.0
 synopsis:              Google Classroom SDK.
 homepage:              https://github.com/brendanhay/gogol
 bug-reports:           https://github.com/brendanhay/gogol/issues
@@ -38,10 +38,17 @@
         , 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.Announcements.Create
+        , Network.Google.Resource.Classroom.Courses.Announcements.Delete
+        , Network.Google.Resource.Classroom.Courses.Announcements.Get
+        , Network.Google.Resource.Classroom.Courses.Announcements.List
+        , Network.Google.Resource.Classroom.Courses.Announcements.ModifyAssignees
+        , Network.Google.Resource.Classroom.Courses.Announcements.Patch
         , Network.Google.Resource.Classroom.Courses.CourseWork.Create
         , Network.Google.Resource.Classroom.Courses.CourseWork.Delete
         , Network.Google.Resource.Classroom.Courses.CourseWork.Get
         , Network.Google.Resource.Classroom.Courses.CourseWork.List
+        , Network.Google.Resource.Classroom.Courses.CourseWork.ModifyAssignees
         , Network.Google.Resource.Classroom.Courses.CourseWork.Patch
         , Network.Google.Resource.Classroom.Courses.CourseWork.StudentSubmissions.Get
         , Network.Google.Resource.Classroom.Courses.CourseWork.StudentSubmissions.List
@@ -69,6 +76,8 @@
         , Network.Google.Resource.Classroom.Invitations.Delete
         , Network.Google.Resource.Classroom.Invitations.Get
         , Network.Google.Resource.Classroom.Invitations.List
+        , Network.Google.Resource.Classroom.Registrations.Create
+        , Network.Google.Resource.Classroom.Registrations.Delete
         , Network.Google.Resource.Classroom.UserProFiles.Get
         , Network.Google.Resource.Classroom.UserProFiles.GuardianInvitations.Create
         , Network.Google.Resource.Classroom.UserProFiles.GuardianInvitations.Get
@@ -83,5 +92,5 @@
         , Network.Google.Classroom.Types.Sum
 
     build-depends:
-          gogol-core == 0.3.0.*
+          gogol-core == 0.4.0.*
         , base       >= 4.7 && < 5
