diff --git a/LICENSE b/LICENSE
new file mode 100644
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,367 @@
+Mozilla Public License Version 2.0
+==================================
+
+1. Definitions
+--------------
+
+1.1. "Contributor"
+    means each individual or legal entity that creates, contributes to
+    the creation of, or owns Covered Software.
+
+1.2. "Contributor Version"
+    means the combination of the Contributions of others (if any) used
+    by a Contributor and that particular Contributor's Contribution.
+
+1.3. "Contribution"
+    means Covered Software of a particular Contributor.
+
+1.4. "Covered Software"
+    means Source Code Form to which the initial Contributor has attached
+    the notice in Exhibit A, the Executable Form of such Source Code
+    Form, and Modifications of such Source Code Form, in each case
+    including portions thereof.
+
+1.5. "Incompatible With Secondary Licenses"
+    means
+
+    (a) that the initial Contributor has attached the notice described
+        in Exhibit B to the Covered Software; or
+
+    (b) that the Covered Software was made available under the terms of
+        version 1.1 or earlier of the License, but not also under the
+        terms of a Secondary License.
+
+1.6. "Executable Form"
+    means any form of the work other than Source Code Form.
+
+1.7. "Larger Work"
+    means a work that combines Covered Software with other material, in
+    a separate file or files, that is not Covered Software.
+
+1.8. "License"
+    means this document.
+
+1.9. "Licensable"
+    means having the right to grant, to the maximum extent possible,
+    whether at the time of the initial grant or subsequently, any and
+    all of the rights conveyed by this License.
+
+1.10. "Modifications"
+    means any of the following:
+
+    (a) any file in Source Code Form that results from an addition to,
+        deletion from, or modification of the contents of Covered
+        Software; or
+
+    (b) any new file in Source Code Form that contains any Covered
+        Software.
+
+1.11. "Patent Claims" of a Contributor
+    means any patent claim(s), including without limitation, method,
+    process, and apparatus claims, in any patent Licensable by such
+    Contributor that would be infringed, but for the grant of the
+    License, by the making, using, selling, offering for sale, having
+    made, import, or transfer of either its Contributions or its
+    Contributor Version.
+
+1.12. "Secondary License"
+    means either the GNU General Public License, Version 2.0, the GNU
+    Lesser General Public License, Version 2.1, the GNU Affero General
+    Public License, Version 3.0, or any later versions of those
+    licenses.
+
+1.13. "Source Code Form"
+    means the form of the work preferred for making modifications.
+
+1.14. "You" (or "Your")
+    means an individual or a legal entity exercising rights under this
+    License. For legal entities, "You" includes any entity that
+    controls, is controlled by, or is under common control with You. For
+    purposes of this definition, "control" means (a) the power, direct
+    or indirect, to cause the direction or management of such entity,
+    whether by contract or otherwise, or (b) ownership of more than
+    fifty percent (50%) of the outstanding shares or beneficial
+    ownership of such entity.
+
+2. License Grants and Conditions
+--------------------------------
+
+2.1. Grants
+
+Each Contributor hereby grants You a world-wide, royalty-free,
+non-exclusive license:
+
+(a) under intellectual property rights (other than patent or trademark)
+    Licensable by such Contributor to use, reproduce, make available,
+    modify, display, perform, distribute, and otherwise exploit its
+    Contributions, either on an unmodified basis, with Modifications, or
+    as part of a Larger Work; and
+
+(b) under Patent Claims of such Contributor to make, use, sell, offer
+    for sale, have made, import, and otherwise transfer either its
+    Contributions or its Contributor Version.
+
+2.2. Effective Date
+
+The licenses granted in Section 2.1 with respect to any Contribution
+become effective for each Contribution on the date the Contributor first
+distributes such Contribution.
+
+2.3. Limitations on Grant Scope
+
+The licenses granted in this Section 2 are the only rights granted under
+this License. No additional rights or licenses will be implied from the
+distribution or licensing of Covered Software under this License.
+Notwithstanding Section 2.1(b) above, no patent license is granted by a
+Contributor:
+
+(a) for any code that a Contributor has removed from Covered Software;
+    or
+
+(b) for infringements caused by: (i) Your and any other third party's
+    modifications of Covered Software, or (ii) the combination of its
+    Contributions with other software (except as part of its Contributor
+    Version); or
+
+(c) under Patent Claims infringed by Covered Software in the absence of
+    its Contributions.
+
+This License does not grant any rights in the trademarks, service marks,
+or logos of any Contributor (except as may be necessary to comply with
+the notice requirements in Section 3.4).
+
+2.4. Subsequent Licenses
+
+No Contributor makes additional grants as a result of Your choice to
+distribute the Covered Software under a subsequent version of this
+License (see Section 10.2) or under the terms of a Secondary License (if
+permitted under the terms of Section 3.3).
+
+2.5. Representation
+
+Each Contributor represents that the Contributor believes its
+Contributions are its original creation(s) or it has sufficient rights
+to grant the rights to its Contributions conveyed by this License.
+
+2.6. Fair Use
+
+This License is not intended to limit any rights You have under
+applicable copyright doctrines of fair use, fair dealing, or other
+equivalents.
+
+2.7. Conditions
+
+Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted
+in Section 2.1.
+
+3. Responsibilities
+-------------------
+
+3.1. Distribution of Source Form
+
+All distribution of Covered Software in Source Code Form, including any
+Modifications that You create or to which You contribute, must be under
+the terms of this License. You must inform recipients that the Source
+Code Form of the Covered Software is governed by the terms of this
+License, and how they can obtain a copy of this License. You may not
+attempt to alter or restrict the recipients' rights in the Source Code
+Form.
+
+3.2. Distribution of Executable Form
+
+If You distribute Covered Software in Executable Form then:
+
+(a) such Covered Software must also be made available in Source Code
+    Form, as described in Section 3.1, and You must inform recipients of
+    the Executable Form how they can obtain a copy of such Source Code
+    Form by reasonable means in a timely manner, at a charge no more
+    than the cost of distribution to the recipient; and
+
+(b) You may distribute such Executable Form under the terms of this
+    License, or sublicense it under different terms, provided that the
+    license for the Executable Form does not attempt to limit or alter
+    the recipients' rights in the Source Code Form under this License.
+
+3.3. Distribution of a Larger Work
+
+You may create and distribute a Larger Work under terms of Your choice,
+provided that You also comply with the requirements of this License for
+the Covered Software. If the Larger Work is a combination of Covered
+Software with a work governed by one or more Secondary Licenses, and the
+Covered Software is not Incompatible With Secondary Licenses, this
+License permits You to additionally distribute such Covered Software
+under the terms of such Secondary License(s), so that the recipient of
+the Larger Work may, at their option, further distribute the Covered
+Software under the terms of either this License or such Secondary
+License(s).
+
+3.4. Notices
+
+You may not remove or alter the substance of any license notices
+(including copyright notices, patent notices, disclaimers of warranty,
+or limitations of liability) contained within the Source Code Form of
+the Covered Software, except that You may alter any license notices to
+the extent required to remedy known factual inaccuracies.
+
+3.5. Application of Additional Terms
+
+You may choose to offer, and to charge a fee for, warranty, support,
+indemnity or liability obligations to one or more recipients of Covered
+Software. However, You may do so only on Your own behalf, and not on
+behalf of any Contributor. You must make it absolutely clear that any
+such warranty, support, indemnity, or liability obligation is offered by
+You alone, and You hereby agree to indemnify every Contributor for any
+liability incurred by such Contributor as a result of warranty, support,
+indemnity or liability terms You offer. You may include additional
+disclaimers of warranty and limitations of liability specific to any
+jurisdiction.
+
+4. Inability to Comply Due to Statute or Regulation
+---------------------------------------------------
+
+If it is impossible for You to comply with any of the terms of this
+License with respect to some or all of the Covered Software due to
+statute, judicial order, or regulation then You must: (a) comply with
+the terms of this License to the maximum extent possible; and (b)
+describe the limitations and the code they affect. Such description must
+be placed in a text file included with all distributions of the Covered
+Software under this License. Except to the extent prohibited by statute
+or regulation, such description must be sufficiently detailed for a
+recipient of ordinary skill to be able to understand it.
+
+5. Termination
+--------------
+
+5.1. The rights granted under this License will terminate automatically
+if You fail to comply with any of its terms. However, if You become
+compliant, then the rights granted under this License from a particular
+Contributor are reinstated (a) provisionally, unless and until such
+Contributor explicitly and finally terminates Your grants, and (b) on an
+ongoing basis, if such Contributor fails to notify You of the
+non-compliance by some reasonable means prior to 60 days after You have
+come back into compliance. Moreover, Your grants from a particular
+Contributor are reinstated on an ongoing basis if such Contributor
+notifies You of the non-compliance by some reasonable means, this is the
+first time You have received notice of non-compliance with this License
+from such Contributor, and You become compliant prior to 30 days after
+Your receipt of the notice.
+
+5.2. If You initiate litigation against any entity by asserting a patent
+infringement claim (excluding declaratory judgment actions,
+counter-claims, and cross-claims) alleging that a Contributor Version
+directly or indirectly infringes any patent, then the rights granted to
+You by any and all Contributors for the Covered Software under Section
+2.1 of this License shall terminate.
+
+5.3. In the event of termination under Sections 5.1 or 5.2 above, all
+end user license agreements (excluding distributors and resellers) which
+have been validly granted by You or Your distributors under this License
+prior to termination shall survive termination.
+
+************************************************************************
+*                                                                      *
+*  6. Disclaimer of Warranty                                           *
+*  -------------------------                                           *
+*                                                                      *
+*  Covered Software is provided under this License on an "as is"       *
+*  basis, without warranty of any kind, either expressed, implied, or  *
+*  statutory, including, without limitation, warranties that the       *
+*  Covered Software is free of defects, merchantable, fit for a        *
+*  particular purpose or non-infringing. The entire risk as to the     *
+*  quality and performance of the Covered Software is with You.        *
+*  Should any Covered Software prove defective in any respect, You     *
+*  (not any Contributor) assume the cost of any necessary servicing,   *
+*  repair, or correction. This disclaimer of warranty constitutes an   *
+*  essential part of this License. No use of any Covered Software is   *
+*  authorized under this License except under this disclaimer.         *
+*                                                                      *
+************************************************************************
+
+************************************************************************
+*                                                                      *
+*  7. Limitation of Liability                                          *
+*  --------------------------                                          *
+*                                                                      *
+*  Under no circumstances and under no legal theory, whether tort      *
+*  (including negligence), contract, or otherwise, shall any           *
+*  Contributor, or anyone who distributes Covered Software as          *
+*  permitted above, be liable to You for any direct, indirect,         *
+*  special, incidental, or consequential damages of any character      *
+*  including, without limitation, damages for lost profits, loss of    *
+*  goodwill, work stoppage, computer failure or malfunction, or any    *
+*  and all other commercial damages or losses, even if such party      *
+*  shall have been informed of the possibility of such damages. This   *
+*  limitation of liability shall not apply to liability for death or   *
+*  personal injury resulting from such party's negligence to the       *
+*  extent applicable law prohibits such limitation. Some               *
+*  jurisdictions do not allow the exclusion or limitation of           *
+*  incidental or consequential damages, so this exclusion and          *
+*  limitation may not apply to You.                                    *
+*                                                                      *
+************************************************************************
+
+8. Litigation
+-------------
+
+Any litigation relating to this License may be brought only in the
+courts of a jurisdiction where the defendant maintains its principal
+place of business and such litigation shall be governed by laws of that
+jurisdiction, without reference to its conflict-of-law provisions.
+Nothing in this Section shall prevent a party's ability to bring
+cross-claims or counter-claims.
+
+9. Miscellaneous
+----------------
+
+This License represents the complete agreement concerning the subject
+matter hereof. If any provision of this License is held to be
+unenforceable, such provision shall be reformed only to the extent
+necessary to make it enforceable. Any law or regulation which provides
+that the language of a contract shall be construed against the drafter
+shall not be used to construe this License against a Contributor.
+
+10. Versions of the License
+---------------------------
+
+10.1. New Versions
+
+Mozilla Foundation is the license steward. Except as provided in Section
+10.3, no one other than the license steward has the right to modify or
+publish new versions of this License. Each version will be given a
+distinguishing version number.
+
+10.2. Effect of New Versions
+
+You may distribute the Covered Software under the terms of the version
+of the License under which You originally received the Covered Software,
+or under the terms of any subsequent version published by the license
+steward.
+
+10.3. Modified Versions
+
+If you create software not governed by this License, and you want to
+create a new license for such software, you may create and use a
+modified version of this License if you rename the license and remove
+any references to the name of the license steward (except to note that
+such modified license differs from this License).
+
+10.4. Distributing Source Code Form that is Incompatible With Secondary
+Licenses
+
+If You choose to distribute Source Code Form that is Incompatible With
+Secondary Licenses under the terms of this version of the License, the
+notice described in Exhibit B of this License must be attached.
+
+Exhibit A - Source Code Form License Notice
+-------------------------------------------
+
+  This Source Code Form is subject to the terms of the Mozilla Public
+  License, v. 2.0. If a copy of the MPL was not distributed with this
+  file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+If it is not possible or desirable to put the notice in a particular
+file, then You may include the notice in a location (such as a LICENSE
+file in a relevant directory) where a recipient would be likely to look
+for such a notice.
+
+You may add additional accurate notices of copyright ownership.
diff --git a/README.md b/README.md
new file mode 100644
--- /dev/null
+++ b/README.md
@@ -0,0 +1,28 @@
+# gogol-books
+
+* [Version](#version)
+* [Description](#description)
+* [Contribute](#contribute)
+* [Licence](#licence)
+
+
+## Version
+
+`0.0.1`
+
+
+## Description
+
+A client library for the Google Books.
+
+
+## Contribute
+
+For any problems, comments, or feedback please create an issue [here on GitHub](https://github.com/brendanhay/amazonka/issues).
+
+> _Note:_ this library is an auto-generated Haskell package. Please see `amazonka-gen` for more information.
+
+
+## Licence
+
+`gogol-books` is released under the [Mozilla Public License Version 2.0](http://www.mozilla.org/MPL/).
diff --git a/Setup.hs b/Setup.hs
new file mode 100644
--- /dev/null
+++ b/Setup.hs
@@ -0,0 +1,2 @@
+import           Distribution.Simple
+main = defaultMain
diff --git a/gen/Network/Google/Books.hs b/gen/Network/Google/Books.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Books.hs
@@ -0,0 +1,1106 @@
+{-# LANGUAGE DataKinds         #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# LANGUAGE TypeOperators     #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+
+-- |
+-- Module      : Network.Google.Books
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Lets you search for books and manage your Google Books library.
+--
+-- /See:/ <https://developers.google.com/books/docs/v1/getting_started Books API Reference>
+module Network.Google.Books
+    (
+    -- * Service Configuration
+      booksService
+
+    -- * API Declaration
+    , BooksAPI
+
+    -- * Resources
+
+    -- ** books.bookshelves.get
+    , module Network.Google.Resource.Books.Bookshelves.Get
+
+    -- ** books.bookshelves.list
+    , module Network.Google.Resource.Books.Bookshelves.List
+
+    -- ** books.bookshelves.volumes.list
+    , module Network.Google.Resource.Books.Bookshelves.Volumes.List
+
+    -- ** books.cloudloading.addBook
+    , module Network.Google.Resource.Books.CloudLoading.AddBook
+
+    -- ** books.cloudloading.deleteBook
+    , module Network.Google.Resource.Books.CloudLoading.DeleteBook
+
+    -- ** books.cloudloading.updateBook
+    , module Network.Google.Resource.Books.CloudLoading.UpdateBook
+
+    -- ** books.dictionary.listOfflineMetadata
+    , module Network.Google.Resource.Books.Dictionary.ListOfflineMetadata
+
+    -- ** books.layers.annotationData.get
+    , module Network.Google.Resource.Books.Layers.AnnotationData.Get
+
+    -- ** books.layers.annotationData.list
+    , module Network.Google.Resource.Books.Layers.AnnotationData.List
+
+    -- ** books.layers.get
+    , module Network.Google.Resource.Books.Layers.Get
+
+    -- ** books.layers.list
+    , module Network.Google.Resource.Books.Layers.List
+
+    -- ** books.layers.volumeAnnotations.get
+    , module Network.Google.Resource.Books.Layers.VolumeAnnotations.Get
+
+    -- ** books.layers.volumeAnnotations.list
+    , module Network.Google.Resource.Books.Layers.VolumeAnnotations.List
+
+    -- ** books.myconfig.getUserSettings
+    , module Network.Google.Resource.Books.MyConfig.GetUserSettings
+
+    -- ** books.myconfig.releaseDownloadAccess
+    , module Network.Google.Resource.Books.MyConfig.ReleaseDownloadAccess
+
+    -- ** books.myconfig.requestAccess
+    , module Network.Google.Resource.Books.MyConfig.RequestAccess
+
+    -- ** books.myconfig.syncVolumeLicenses
+    , module Network.Google.Resource.Books.MyConfig.SyncVolumeLicenses
+
+    -- ** books.myconfig.updateUserSettings
+    , module Network.Google.Resource.Books.MyConfig.UpdateUserSettings
+
+    -- ** books.mylibrary.annotations.delete
+    , module Network.Google.Resource.Books.MyLibrary.Annotations.Delete
+
+    -- ** books.mylibrary.annotations.insert
+    , module Network.Google.Resource.Books.MyLibrary.Annotations.Insert
+
+    -- ** books.mylibrary.annotations.list
+    , module Network.Google.Resource.Books.MyLibrary.Annotations.List
+
+    -- ** books.mylibrary.annotations.summary
+    , module Network.Google.Resource.Books.MyLibrary.Annotations.Summary
+
+    -- ** books.mylibrary.annotations.update
+    , module Network.Google.Resource.Books.MyLibrary.Annotations.Update
+
+    -- ** books.mylibrary.bookshelves.addVolume
+    , module Network.Google.Resource.Books.MyLibrary.Bookshelves.AddVolume
+
+    -- ** books.mylibrary.bookshelves.clearVolumes
+    , module Network.Google.Resource.Books.MyLibrary.Bookshelves.ClearVolumes
+
+    -- ** books.mylibrary.bookshelves.get
+    , module Network.Google.Resource.Books.MyLibrary.Bookshelves.Get
+
+    -- ** books.mylibrary.bookshelves.list
+    , module Network.Google.Resource.Books.MyLibrary.Bookshelves.List
+
+    -- ** books.mylibrary.bookshelves.moveVolume
+    , module Network.Google.Resource.Books.MyLibrary.Bookshelves.MoveVolume
+
+    -- ** books.mylibrary.bookshelves.removeVolume
+    , module Network.Google.Resource.Books.MyLibrary.Bookshelves.RemoveVolume
+
+    -- ** books.mylibrary.bookshelves.volumes.list
+    , module Network.Google.Resource.Books.MyLibrary.Bookshelves.Volumes.List
+
+    -- ** books.mylibrary.readingpositions.get
+    , module Network.Google.Resource.Books.MyLibrary.ReadingPositions.Get
+
+    -- ** books.mylibrary.readingpositions.setPosition
+    , module Network.Google.Resource.Books.MyLibrary.ReadingPositions.SetPosition
+
+    -- ** books.notification.get
+    , module Network.Google.Resource.Books.Notification.Get
+
+    -- ** books.onboarding.listCategories
+    , module Network.Google.Resource.Books.Onboarding.ListCategories
+
+    -- ** books.onboarding.listCategoryVolumes
+    , module Network.Google.Resource.Books.Onboarding.ListCategoryVolumes
+
+    -- ** books.personalizedstream.get
+    , module Network.Google.Resource.Books.Personalizedstream.Get
+
+    -- ** books.promooffer.accept
+    , module Network.Google.Resource.Books.PromoOffer.Accept
+
+    -- ** books.promooffer.dismiss
+    , module Network.Google.Resource.Books.PromoOffer.Dismiss
+
+    -- ** books.promooffer.get
+    , module Network.Google.Resource.Books.PromoOffer.Get
+
+    -- ** books.volumes.associated.list
+    , module Network.Google.Resource.Books.Volumes.Associated.List
+
+    -- ** books.volumes.get
+    , module Network.Google.Resource.Books.Volumes.Get
+
+    -- ** books.volumes.list
+    , module Network.Google.Resource.Books.Volumes.List
+
+    -- ** books.volumes.mybooks.list
+    , module Network.Google.Resource.Books.Volumes.Mybooks.List
+
+    -- ** books.volumes.recommended.list
+    , module Network.Google.Resource.Books.Volumes.Recommended.List
+
+    -- ** books.volumes.recommended.rate
+    , module Network.Google.Resource.Books.Volumes.Recommended.Rate
+
+    -- ** books.volumes.useruploaded.list
+    , module Network.Google.Resource.Books.Volumes.UserUploaded.List
+
+    -- * Types
+
+    -- ** UserSettings
+    , UserSettings
+    , userSettings
+    , usNotification
+    , usKind
+    , usNotesExport
+
+    -- ** Annotations
+    , Annotations
+    , annotations
+    , aTotalItems
+    , aNextPageToken
+    , aKind
+    , aItems
+
+    -- ** VolumesListProjection
+    , VolumesListProjection (..)
+
+    -- ** MyLibraryBookshelvesVolumesListProjection
+    , MyLibraryBookshelvesVolumesListProjection (..)
+
+    -- ** VolumesListOrderBy
+    , VolumesListOrderBy (..)
+
+    -- ** AnnotationsData
+    , AnnotationsData
+    , annotationsData
+    , adTotalItems
+    , adNextPageToken
+    , adKind
+    , adItems
+
+    -- ** UserSettingsNotificationMoreFromAuthors
+    , UserSettingsNotificationMoreFromAuthors
+    , userSettingsNotificationMoreFromAuthors
+    , usnmfaOptedState
+
+    -- ** Volumeannotations
+    , Volumeannotations
+    , volumeannotations
+    , vTotalItems
+    , vNextPageToken
+    , vKind
+    , vItems
+    , vVersion
+
+    -- ** ReviewSource
+    , ReviewSource
+    , reviewSource
+    , rsExtraDescription
+    , rsURL
+    , rsDescription
+
+    -- ** AnnotationData
+    , AnnotationData
+    , annotationData
+    , annEncodedData
+    , annKind
+    , annData
+    , annSelfLink
+    , annAnnotationType
+    , annVolumeId
+    , annId
+    , annUpdated
+    , annLayerId
+
+    -- ** Volumeannotation
+    , Volumeannotation
+    , volumeannotation
+    , volSelectedText
+    , volAnnotationDataLink
+    , volPageIds
+    , volKind
+    , volData
+    , volSelfLink
+    , volAnnotationType
+    , volAnnotationDataId
+    , volContentRanges
+    , volVolumeId
+    , volId
+    , volDeleted
+    , volUpdated
+    , volLayerId
+
+    -- ** BooksCloudLoadingResource
+    , BooksCloudLoadingResource
+    , booksCloudLoadingResource
+    , bclrProcessingState
+    , bclrVolumeId
+    , bclrAuthor
+    , bclrTitle
+
+    -- ** Annotation
+    , Annotation
+    , annotation
+    , aaSelectedText
+    , aaLayerSummary
+    , aaHighlightStyle
+    , aaClientVersionRanges
+    , aaPageIds
+    , aaKind
+    , aaData
+    , aaCreated
+    , aaAfterSelectedText
+    , aaSelfLink
+    , aaCurrentVersionRanges
+    , aaVolumeId
+    , aaBeforeSelectedText
+    , aaId
+    , aaDeleted
+    , aaUpdated
+    , aaLayerId
+
+    -- ** ReviewAuthor
+    , ReviewAuthor
+    , reviewAuthor
+    , raDisplayName
+
+    -- ** GeolayerDataGeoViewport
+    , GeolayerDataGeoViewport
+    , geolayerDataGeoViewport
+    , gdgvHi
+    , gdgvLo
+
+    -- ** VolumeUserInfo
+    , VolumeUserInfo
+    , volumeUserInfo
+    , vuiCopy
+    , vuiUserUploadedVolumeInfo
+    , vuiIsPurchased
+    , vuiEntitlementType
+    , vuiAcquisitionType
+    , vuiRentalState
+    , vuiIsPreOrdered
+    , vuiReview
+    , vuiRentalPeriod
+    , vuiUpdated
+    , vuiIsUploaded
+    , vuiIsInMyBooks
+    , vuiReadingPosition
+
+    -- ** Layersummary
+    , Layersummary
+    , layersummary
+    , lAnnotationsDataLink
+    , lAnnotationsLink
+    , lKind
+    , lDataCount
+    , lContentVersion
+    , lVolumeAnnotationsVersion
+    , lAnnotationCount
+    , lAnnotationTypes
+    , lSelfLink
+    , lVolumeId
+    , lId
+    , lUpdated
+    , lLayerId
+
+    -- ** VolumesListLibraryRestrict
+    , VolumesListLibraryRestrict (..)
+
+    -- ** VolumeannotationContentRanges
+    , VolumeannotationContentRanges
+    , volumeannotationContentRanges
+    , vcrGbImageRange
+    , vcrContentVersion
+    , vcrGbTextRange
+    , vcrCfiRange
+
+    -- ** VolumeAccessInfo
+    , VolumeAccessInfo
+    , volumeAccessInfo
+    , vaiWebReaderLink
+    , vaiCountry
+    , vaiDriveImportedContentLink
+    , vaiExplicitOfflineLicenseManagement
+    , vaiViewability
+    , vaiQuoteSharingAllowed
+    , vaiEpub
+    , vaiPdf
+    , vaiTextToSpeechPermission
+    , vaiEmbeddable
+    , vaiAccessViewStatus
+    , vaiDownloadAccess
+    , vaiViewOrderURL
+    , vaiPublicDomain
+
+    -- ** MyLibraryBookshelvesRemoveVolumeReason
+    , MyLibraryBookshelvesRemoveVolumeReason (..)
+
+    -- ** VolumeVolumeInfoImageLinks
+    , VolumeVolumeInfoImageLinks
+    , volumeVolumeInfoImageLinks
+    , vviilThumbnail
+    , vviilSmall
+    , vviilExtraLarge
+    , vviilLarge
+    , vviilMedium
+    , vviilSmallThumbnail
+
+    -- ** OnboardingListCategoryVolumesMaxAllowedMaturityRating
+    , OnboardingListCategoryVolumesMaxAllowedMaturityRating (..)
+
+    -- ** VolumeUserInfoUserUploadedVolumeInfo
+    , VolumeUserInfoUserUploadedVolumeInfo
+    , volumeUserInfoUserUploadedVolumeInfo
+    , vuiuuviProcessingState
+
+    -- ** VolumeUserInfoCopy
+    , VolumeUserInfoCopy
+    , volumeUserInfoCopy
+    , vuicLimitType
+    , vuicAllowedCharacterCount
+    , vuicUpdated
+    , vuicRemainingCharacterCount
+
+    -- ** BooksVolumesRecommendedRateResponse
+    , BooksVolumesRecommendedRateResponse
+    , booksVolumesRecommendedRateResponse
+    , bvrrrConsistencyToken
+
+    -- ** Bookshelf
+    , Bookshelf
+    , bookshelf
+    , bAccess
+    , bVolumesLastUpdated
+    , bKind
+    , bCreated
+    , bVolumeCount
+    , bSelfLink
+    , bId
+    , bUpdated
+    , bTitle
+    , bDescription
+
+    -- ** Notification
+    , Notification
+    , notification
+    , nKind
+    , nBody
+    , nLinkURL
+    , nIconURL
+    , nTitle
+
+    -- ** VolumesListDownload
+    , VolumesListDownload (..)
+
+    -- ** AnnotationsSummaryLayersItem
+    , AnnotationsSummaryLayersItem
+    , annotationsSummaryLayersItem
+    , asliLimitType
+    , asliAllowedCharacterCount
+    , asliUpdated
+    , asliLayerId
+    , asliRemainingCharacterCount
+
+    -- ** VolumeSaleInfoOffersItemRentalDuration
+    , VolumeSaleInfoOffersItemRentalDuration
+    , volumeSaleInfoOffersItemRentalDuration
+    , vsioirdCount
+    , vsioirdUnit
+
+    -- ** DictlayerDataDictWordsItemExamplesItem
+    , DictlayerDataDictWordsItemExamplesItem
+    , dictlayerDataDictWordsItemExamplesItem
+    , dddwieiText
+    , dddwieiSource
+
+    -- ** OffersItemsItem
+    , OffersItemsItem
+    , offersItemsItem
+    , oiiItems
+    , oiiArtURL
+    , oiiId
+    , oiiGServicesKey
+
+    -- ** AnnotationLayerSummary
+    , AnnotationLayerSummary
+    , annotationLayerSummary
+    , alsLimitType
+    , alsAllowedCharacterCount
+    , alsRemainingCharacterCount
+
+    -- ** VolumeSearchInfo
+    , VolumeSearchInfo
+    , volumeSearchInfo
+    , vsiTextSnippet
+
+    -- ** AnnotationsSummary
+    , AnnotationsSummary
+    , annotationsSummary
+    , asKind
+    , asLayers
+
+    -- ** VolumesGetProjection
+    , VolumesGetProjection (..)
+
+    -- ** Category
+    , Category
+    , category
+    , cKind
+    , cItems
+
+    -- ** VolumesAssociatedListAssociation
+    , VolumesAssociatedListAssociation (..)
+
+    -- ** DiscoveryclustersClustersItemBanner_with_content_container
+    , DiscoveryclustersClustersItemBanner_with_content_container
+    , discoveryclustersClustersItemBanner_with_content_container
+    , dcibFillColorArgb
+    , dcibMoreButtonURL
+    , dcibTextColorArgb
+    , dcibMoreButtonText
+    , dcibImageURL
+    , dcibMaskColorArgb
+
+    -- ** Volume
+    , Volume
+    , volume
+    , vvUserInfo
+    , vvEtag
+    , vvAccessInfo
+    , vvKind
+    , vvSearchInfo
+    , vvSelfLink
+    , vvLayerInfo
+    , vvSaleInfo
+    , vvId
+    , vvRecommendedInfo
+    , vvVolumeInfo
+
+    -- ** GeolayerDataGeoBoundaryItemItem
+    , GeolayerDataGeoBoundaryItemItem
+    , geolayerDataGeoBoundaryItemItem
+    , gdgbiiLatitude
+    , gdgbiiLongitude
+
+    -- ** OffersItemsItemItemsItem
+    , OffersItemsItemItemsItem
+    , offersItemsItemItemsItem
+    , oiiiiCanonicalVolumeLink
+    , oiiiiCoverURL
+    , oiiiiVolumeId
+    , oiiiiAuthor
+    , oiiiiTitle
+    , oiiiiDescription
+
+    -- ** DictlayerDataDictWordsItemSensesItemDefinitionsItemExamplesItemSource
+    , DictlayerDataDictWordsItemSensesItemDefinitionsItemExamplesItemSource
+    , dictlayerDataDictWordsItemSensesItemDefinitionsItemExamplesItemSource
+    , dddwisidieisURL
+    , dddwisidieisAttribution
+
+    -- ** GeolayerDataCommon
+    , GeolayerDataCommon
+    , geolayerDataCommon
+    , gdcSnippet
+    , gdcSnippetURL
+    , gdcLang
+    , gdcTitle
+    , gdcPreviewImageURL
+
+    -- ** GeolayerDataGeo
+    , GeolayerDataGeo
+    , geolayerDataGeo
+    , gdgMapType
+    , gdgCachePolicy
+    , gdgViewport
+    , gdgBoundary
+    , gdgLatitude
+    , gdgZoom
+    , gdgCountryCode
+    , gdgLongitude
+
+    -- ** DictlayerDataDictWordsItem
+    , DictlayerDataDictWordsItem
+    , dictlayerDataDictWordsItem
+    , dddwiSenses
+    , dddwiSource
+    , dddwiDerivatives
+    , dddwiExamples
+
+    -- ** CategoryItemsItem
+    , CategoryItemsItem
+    , categoryItemsItem
+    , ciiName
+    , ciiCategoryId
+    , ciiBadgeURL
+
+    -- ** DictlayerDataDictWordsItemDerivativesItemSource
+    , DictlayerDataDictWordsItemDerivativesItemSource
+    , dictlayerDataDictWordsItemDerivativesItemSource
+    , dddwidisURL
+    , dddwidisAttribution
+
+    -- ** VolumesRecommendedRateRating
+    , VolumesRecommendedRateRating (..)
+
+    -- ** GeolayerData
+    , GeolayerData
+    , geolayerData
+    , gdKind
+    , gdGeo
+    , gdCommon
+
+    -- ** DictlayerDataDictWordsItemSource
+    , DictlayerDataDictWordsItemSource
+    , dictlayerDataDictWordsItemSource
+    , dddwisURL
+    , dddwisAttribution
+
+    -- ** DictlayerDataDictWordsItemDerivativesItem
+    , DictlayerDataDictWordsItemDerivativesItem
+    , dictlayerDataDictWordsItemDerivativesItem
+    , dddwidiText
+    , dddwidiSource
+
+    -- ** VolumesUserUploadedListProcessingState
+    , VolumesUserUploadedListProcessingState (..)
+
+    -- ** MyConfigSyncVolumeLicensesFeatures
+    , MyConfigSyncVolumeLicensesFeatures (..)
+
+    -- ** DictlayerDataDictWordsItemSensesItemDefinitionsItemExamplesItem
+    , DictlayerDataDictWordsItemSensesItemDefinitionsItemExamplesItem
+    , dictlayerDataDictWordsItemSensesItemDefinitionsItemExamplesItem
+    , dddwisidieiText
+    , dddwisidieiSource
+
+    -- ** DictlayerData
+    , DictlayerData
+    , dictlayerData
+    , ddKind
+    , ddDict
+    , ddCommon
+
+    -- ** VolumesAssociatedListMaxAllowedMaturityRating
+    , VolumesAssociatedListMaxAllowedMaturityRating (..)
+
+    -- ** DictlayerDataDictWordsItemSensesItemSynonymsItemSource
+    , DictlayerDataDictWordsItemSensesItemSynonymsItemSource
+    , dictlayerDataDictWordsItemSensesItemSynonymsItemSource
+    , dddwisisisURL
+    , dddwisisisAttribution
+
+    -- ** VolumesListFilter
+    , VolumesListFilter (..)
+
+    -- ** UserSettingsNotification
+    , UserSettingsNotification
+    , userSettingsNotification
+    , usnMoreFromAuthors
+
+    -- ** DictlayerDataDictWordsItemSensesItemSynonymsItem
+    , DictlayerDataDictWordsItemSensesItemSynonymsItem
+    , dictlayerDataDictWordsItemSensesItemSynonymsItem
+    , dddwisisiText
+    , dddwisisiSource
+
+    -- ** GeolayerDataGeoViewportLo
+    , GeolayerDataGeoViewportLo
+    , geolayerDataGeoViewportLo
+    , gdgvlLatitude
+    , gdgvlLongitude
+
+    -- ** VolumesRecommendedListMaxAllowedMaturityRating
+    , VolumesRecommendedListMaxAllowedMaturityRating (..)
+
+    -- ** VolumeSaleInfoOffersItemListPrice
+    , VolumeSaleInfoOffersItemListPrice
+    , volumeSaleInfoOffersItemListPrice
+    , vsioilpCurrencyCode
+    , vsioilpAmountInMicros
+
+    -- ** DownloadAccessRestriction
+    , DownloadAccessRestriction
+    , downloadAccessRestriction
+    , darJustAcquired
+    , darSignature
+    , darKind
+    , darMaxDownloadDevices
+    , darDownloadsAcquired
+    , darReasonCode
+    , darVolumeId
+    , darRestricted
+    , darSource
+    , darDeviceAllowed
+    , darMessage
+    , darNonce
+
+    -- ** DictlayerDataCommon
+    , DictlayerDataCommon
+    , dictlayerDataCommon
+    , ddcTitle
+
+    -- ** DiscoveryclustersClustersItem
+    , DiscoveryclustersClustersItem
+    , discoveryclustersClustersItem
+    , dciBannerWithContentContainer
+    , dciUid
+    , dciTotalVolumes
+    , dciSubTitle
+    , dciTitle
+    , dciVolumes
+
+    -- ** VolumeSaleInfoRetailPrice
+    , VolumeSaleInfoRetailPrice
+    , volumeSaleInfoRetailPrice
+    , vsirpAmount
+    , vsirpCurrencyCode
+
+    -- ** VolumeSaleInfoListPrice
+    , VolumeSaleInfoListPrice
+    , volumeSaleInfoListPrice
+    , vsilpAmount
+    , vsilpCurrencyCode
+
+    -- ** DictlayerDataDictWordsItemSensesItemConjugationsItem
+    , DictlayerDataDictWordsItemSensesItemConjugationsItem
+    , dictlayerDataDictWordsItemSensesItemConjugationsItem
+    , dddwisiciValue
+    , dddwisiciType
+
+    -- ** Volume2
+    , Volume2
+    , volume2
+    , voloNextPageToken
+    , voloKind
+    , voloItems
+
+    -- ** Review
+    , Review
+    , review
+    , rRating
+    , rKind
+    , rContent
+    , rDate
+    , rVolumeId
+    , rAuthor
+    , rSource
+    , rFullTextURL
+    , rTitle
+    , rType
+
+    -- ** VolumeUserInfoRentalPeriod
+    , VolumeUserInfoRentalPeriod
+    , volumeUserInfoRentalPeriod
+    , vuirpEndUtcSec
+    , vuirpStartUtcSec
+
+    -- ** VolumeSaleInfo
+    , VolumeSaleInfo
+    , volumeSaleInfo
+    , vsiCountry
+    , vsiOnSaleDate
+    , vsiListPrice
+    , vsiRetailPrice
+    , vsiOffers
+    , vsiBuyLink
+    , vsiIsEbook
+    , vsiSaleability
+
+    -- ** MyLibraryBookshelvesAddVolumeReason
+    , MyLibraryBookshelvesAddVolumeReason (..)
+
+    -- ** Metadata
+    , Metadata
+    , metadata
+    , mKind
+    , mItems
+
+    -- ** VolumeLayerInfo
+    , VolumeLayerInfo
+    , volumeLayerInfo
+    , vliLayers
+
+    -- ** VolumeVolumeInfoDimensions
+    , VolumeVolumeInfoDimensions
+    , volumeVolumeInfoDimensions
+    , vvidHeight
+    , vvidWidth
+    , vvidThickness
+
+    -- ** RequestAccess
+    , RequestAccess
+    , requestAccess
+    , raConcurrentAccess
+    , raKind
+    , raDownloadAccess
+
+    -- ** AnnotationClientVersionRanges
+    , AnnotationClientVersionRanges
+    , annotationClientVersionRanges
+    , acvrGbImageRange
+    , acvrContentVersion
+    , acvrImageCfiRange
+    , acvrGbTextRange
+    , acvrCfiRange
+
+    -- ** VolumesMybooksListAcquireMethod
+    , VolumesMybooksListAcquireMethod (..)
+
+    -- ** DictlayerDataDictWordsItemSensesItemDefinitionsItem
+    , DictlayerDataDictWordsItemSensesItemDefinitionsItem
+    , dictlayerDataDictWordsItemSensesItemDefinitionsItem
+    , dddwisidiDefinition
+    , dddwisidiExamples
+
+    -- ** VolumeLayerInfoLayersItem
+    , VolumeLayerInfoLayersItem
+    , volumeLayerInfoLayersItem
+    , vliliVolumeAnnotationsVersion
+    , vliliLayerId
+
+    -- ** AnnotationCurrentVersionRanges
+    , AnnotationCurrentVersionRanges
+    , annotationCurrentVersionRanges
+    , aGbImageRange
+    , aContentVersion
+    , aImageCfiRange
+    , aGbTextRange
+    , aCfiRange
+
+    -- ** PersonalizedstreamGetMaxAllowedMaturityRating
+    , PersonalizedstreamGetMaxAllowedMaturityRating (..)
+
+    -- ** VolumesListPrintType
+    , VolumesListPrintType (..)
+
+    -- ** VolumeAccessInfoPdf
+    , VolumeAccessInfoPdf
+    , volumeAccessInfoPdf
+    , vaipAcsTokenLink
+    , vaipIsAvailable
+    , vaipDownloadLink
+
+    -- ** DictlayerDataDictWordsItemExamplesItemSource
+    , DictlayerDataDictWordsItemExamplesItemSource
+    , dictlayerDataDictWordsItemExamplesItemSource
+    , dddwieisURL
+    , dddwieisAttribution
+
+    -- ** VolumeAccessInfoEpub
+    , VolumeAccessInfoEpub
+    , volumeAccessInfoEpub
+    , vaieAcsTokenLink
+    , vaieIsAvailable
+    , vaieDownloadLink
+
+    -- ** ReadingPosition
+    , ReadingPosition
+    , readingPosition
+    , rpEpubCfiPosition
+    , rpKind
+    , rpGbImagePosition
+    , rpPdfPosition
+    , rpVolumeId
+    , rpUpdated
+    , rpGbTextPosition
+
+    -- ** VolumeSaleInfoOffersItem
+    , VolumeSaleInfoOffersItem
+    , volumeSaleInfoOffersItem
+    , vsioiFinskyOfferType
+    , vsioiRentalDuration
+    , vsioiListPrice
+    , vsioiRetailPrice
+
+    -- ** DictlayerDataDict
+    , DictlayerDataDict
+    , dictlayerDataDict
+    , dddSource
+    , dddWords
+
+    -- ** DictlayerDataDictWordsItemSensesItem
+    , DictlayerDataDictWordsItemSensesItem
+    , dictlayerDataDictWordsItemSensesItem
+    , dddwisiPronunciationURL
+    , dddwisiConjugations
+    , dddwisiPronunciation
+    , dddwisiSynonyms
+    , dddwisiSource
+    , dddwisiPartOfSpeech
+    , dddwisiDefinitions
+    , dddwisiSyllabification
+
+    -- ** VolumeRecommendedInfo
+    , VolumeRecommendedInfo
+    , volumeRecommendedInfo
+    , vriExplanation
+
+    -- ** Offers
+    , Offers
+    , offers
+    , oKind
+    , oItems
+
+    -- ** VolumesMybooksListProcessingState
+    , VolumesMybooksListProcessingState (..)
+
+    -- ** Discoveryclusters
+    , Discoveryclusters
+    , discoveryclusters
+    , dKind
+    , dTotalClusters
+    , dClusters
+
+    -- ** UserSettingsNotesExport
+    , UserSettingsNotesExport
+    , userSettingsNotesExport
+    , usneFolderName
+    , usneIsEnabled
+
+    -- ** ConcurrentAccessRestriction
+    , ConcurrentAccessRestriction
+    , concurrentAccessRestriction
+    , carMaxConcurrentDevices
+    , carSignature
+    , carTimeWindowSeconds
+    , carKind
+    , carReasonCode
+    , carVolumeId
+    , carRestricted
+    , carSource
+    , carDeviceAllowed
+    , carMessage
+    , carNonce
+
+    -- ** Volumes
+    , Volumes
+    , volumes
+    , v1TotalItems
+    , v1Kind
+    , v1Items
+
+    -- ** Bookshelves
+    , Bookshelves
+    , bookshelves
+    , booKind
+    , booItems
+
+    -- ** MyConfigRequestAccessLicenseTypes
+    , MyConfigRequestAccessLicenseTypes (..)
+
+    -- ** DictlayerDataDictSource
+    , DictlayerDataDictSource
+    , dictlayerDataDictSource
+    , dddsURL
+    , dddsAttribution
+
+    -- ** DownloadAccesses
+    , DownloadAccesses
+    , downloadAccesses
+    , daKind
+    , daDownloadAccessList
+
+    -- ** GeolayerDataGeoViewportHi
+    , GeolayerDataGeoViewportHi
+    , geolayerDataGeoViewportHi
+    , gdgvhLatitude
+    , gdgvhLongitude
+
+    -- ** MyLibraryReadingPositionsSetPositionAction
+    , MyLibraryReadingPositionsSetPositionAction (..)
+
+    -- ** VolumeVolumeInfo
+    , VolumeVolumeInfo
+    , volumeVolumeInfo
+    , vviImageLinks
+    , vviAverageRating
+    , vviRatingsCount
+    , vviCanonicalVolumeLink
+    , vviReadingModes
+    , vviIndustryIdentifiers
+    , vviPrintedPageCount
+    , vviMainCategory
+    , vviContentVersion
+    , vviSamplePageCount
+    , vviCategories
+    , vviAuthors
+    , vviAllowAnonLogging
+    , vviSubtitle
+    , vviPublishedDate
+    , vviMaturityRating
+    , vviPreviewLink
+    , vviLanguage
+    , vviTitle
+    , vviPageCount
+    , vviDimensions
+    , vviInfoLink
+    , vviPublisher
+    , vviDescription
+    , vviPrintType
+
+    -- ** MetadataItemsItem
+    , MetadataItemsItem
+    , metadataItemsItem
+    , miiSize
+    , miiVersion
+    , miiLanguage
+    , miiDownloadURL
+    , miiEncryptedKey
+
+    -- ** DictlayerDataDictWordsItemSensesItemSource
+    , DictlayerDataDictWordsItemSensesItemSource
+    , dictlayerDataDictWordsItemSensesItemSource
+    , dddwisisURL
+    , dddwisisAttribution
+
+    -- ** VolumeSaleInfoOffersItemRetailPrice
+    , VolumeSaleInfoOffersItemRetailPrice
+    , volumeSaleInfoOffersItemRetailPrice
+    , vsioirpCurrencyCode
+    , vsioirpAmountInMicros
+
+    -- ** VolumeVolumeInfoIndustryIdentifiersItem
+    , VolumeVolumeInfoIndustryIdentifiersItem
+    , volumeVolumeInfoIndustryIdentifiersItem
+    , vviiiiIdentifier
+    , vviiiiType
+
+    -- ** BooksAnnotationsRange
+    , BooksAnnotationsRange
+    , booksAnnotationsRange
+    , barStartOffSet
+    , barEndOffSet
+    , barEndPosition
+    , barStartPosition
+
+    -- ** Layersummaries
+    , Layersummaries
+    , layersummaries
+    , layTotalItems
+    , layKind
+    , layItems
+    ) where
+
+import           Network.Google.Books.Types
+import           Network.Google.Prelude
+import           Network.Google.Resource.Books.Bookshelves.Get
+import           Network.Google.Resource.Books.Bookshelves.List
+import           Network.Google.Resource.Books.Bookshelves.Volumes.List
+import           Network.Google.Resource.Books.CloudLoading.AddBook
+import           Network.Google.Resource.Books.CloudLoading.DeleteBook
+import           Network.Google.Resource.Books.CloudLoading.UpdateBook
+import           Network.Google.Resource.Books.Dictionary.ListOfflineMetadata
+import           Network.Google.Resource.Books.Layers.AnnotationData.Get
+import           Network.Google.Resource.Books.Layers.AnnotationData.List
+import           Network.Google.Resource.Books.Layers.Get
+import           Network.Google.Resource.Books.Layers.List
+import           Network.Google.Resource.Books.Layers.VolumeAnnotations.Get
+import           Network.Google.Resource.Books.Layers.VolumeAnnotations.List
+import           Network.Google.Resource.Books.MyConfig.GetUserSettings
+import           Network.Google.Resource.Books.MyConfig.ReleaseDownloadAccess
+import           Network.Google.Resource.Books.MyConfig.RequestAccess
+import           Network.Google.Resource.Books.MyConfig.SyncVolumeLicenses
+import           Network.Google.Resource.Books.MyConfig.UpdateUserSettings
+import           Network.Google.Resource.Books.MyLibrary.Annotations.Delete
+import           Network.Google.Resource.Books.MyLibrary.Annotations.Insert
+import           Network.Google.Resource.Books.MyLibrary.Annotations.List
+import           Network.Google.Resource.Books.MyLibrary.Annotations.Summary
+import           Network.Google.Resource.Books.MyLibrary.Annotations.Update
+import           Network.Google.Resource.Books.MyLibrary.Bookshelves.AddVolume
+import           Network.Google.Resource.Books.MyLibrary.Bookshelves.ClearVolumes
+import           Network.Google.Resource.Books.MyLibrary.Bookshelves.Get
+import           Network.Google.Resource.Books.MyLibrary.Bookshelves.List
+import           Network.Google.Resource.Books.MyLibrary.Bookshelves.MoveVolume
+import           Network.Google.Resource.Books.MyLibrary.Bookshelves.RemoveVolume
+import           Network.Google.Resource.Books.MyLibrary.Bookshelves.Volumes.List
+import           Network.Google.Resource.Books.MyLibrary.ReadingPositions.Get
+import           Network.Google.Resource.Books.MyLibrary.ReadingPositions.SetPosition
+import           Network.Google.Resource.Books.Notification.Get
+import           Network.Google.Resource.Books.Onboarding.ListCategories
+import           Network.Google.Resource.Books.Onboarding.ListCategoryVolumes
+import           Network.Google.Resource.Books.Personalizedstream.Get
+import           Network.Google.Resource.Books.PromoOffer.Accept
+import           Network.Google.Resource.Books.PromoOffer.Dismiss
+import           Network.Google.Resource.Books.PromoOffer.Get
+import           Network.Google.Resource.Books.Volumes.Associated.List
+import           Network.Google.Resource.Books.Volumes.Get
+import           Network.Google.Resource.Books.Volumes.List
+import           Network.Google.Resource.Books.Volumes.Mybooks.List
+import           Network.Google.Resource.Books.Volumes.Recommended.List
+import           Network.Google.Resource.Books.Volumes.Recommended.Rate
+import           Network.Google.Resource.Books.Volumes.UserUploaded.List
+
+{- $resources
+TODO
+-}
+
+-- | Represents the entirety of the methods and resources available for the Books API service.
+type BooksAPI =
+     NotificationGetResource :<|>
+       OnboardingListCategoriesResource
+       :<|> OnboardingListCategoryVolumesResource
+       :<|> MyLibraryAnnotationsSummaryResource
+       :<|> MyLibraryAnnotationsInsertResource
+       :<|> MyLibraryAnnotationsListResource
+       :<|> MyLibraryAnnotationsDeleteResource
+       :<|> MyLibraryAnnotationsUpdateResource
+       :<|> MyLibraryReadingPositionsGetResource
+       :<|> MyLibraryReadingPositionsSetPositionResource
+       :<|> MyLibraryBookshelvesVolumesListResource
+       :<|> MyLibraryBookshelvesClearVolumesResource
+       :<|> MyLibraryBookshelvesListResource
+       :<|> MyLibraryBookshelvesGetResource
+       :<|> MyLibraryBookshelvesRemoveVolumeResource
+       :<|> MyLibraryBookshelvesAddVolumeResource
+       :<|> MyLibraryBookshelvesMoveVolumeResource
+       :<|> PromoOfferAcceptResource
+       :<|> PromoOfferGetResource
+       :<|> PromoOfferDismissResource
+       :<|> CloudLoadingAddBookResource
+       :<|> CloudLoadingUpdateBookResource
+       :<|> CloudLoadingDeleteBookResource
+       :<|> LayersVolumeAnnotationsListResource
+       :<|> LayersVolumeAnnotationsGetResource
+       :<|> LayersAnnotationDataListResource
+       :<|> LayersAnnotationDataGetResource
+       :<|> LayersListResource
+       :<|> LayersGetResource
+       :<|> DictionaryListOfflineMetadataResource
+       :<|> VolumesUserUploadedListResource
+       :<|> VolumesRecommendedListResource
+       :<|> VolumesRecommendedRateResource
+       :<|> VolumesAssociatedListResource
+       :<|> VolumesMybooksListResource
+       :<|> VolumesListResource
+       :<|> VolumesGetResource
+       :<|> BookshelvesVolumesListResource
+       :<|> BookshelvesListResource
+       :<|> BookshelvesGetResource
+       :<|> PersonalizedstreamGetResource
+       :<|> MyConfigSyncVolumeLicensesResource
+       :<|> MyConfigGetUserSettingsResource
+       :<|> MyConfigRequestAccessResource
+       :<|> MyConfigUpdateUserSettingsResource
+       :<|> MyConfigReleaseDownloadAccessResource
diff --git a/gen/Network/Google/Books/Types.hs b/gen/Network/Google/Books/Types.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Books/Types.hs
@@ -0,0 +1,873 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- |
+-- Module      : Network.Google.Books.Types
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+module Network.Google.Books.Types
+    (
+    -- * Service Configuration
+      booksService
+
+    -- * OAuth Scopes
+    , booksScope
+
+    -- * UserSettings
+    , UserSettings
+    , userSettings
+    , usNotification
+    , usKind
+    , usNotesExport
+
+    -- * Annotations
+    , Annotations
+    , annotations
+    , aTotalItems
+    , aNextPageToken
+    , aKind
+    , aItems
+
+    -- * VolumesListProjection
+    , VolumesListProjection (..)
+
+    -- * MyLibraryBookshelvesVolumesListProjection
+    , MyLibraryBookshelvesVolumesListProjection (..)
+
+    -- * VolumesListOrderBy
+    , VolumesListOrderBy (..)
+
+    -- * AnnotationsData
+    , AnnotationsData
+    , annotationsData
+    , adTotalItems
+    , adNextPageToken
+    , adKind
+    , adItems
+
+    -- * UserSettingsNotificationMoreFromAuthors
+    , UserSettingsNotificationMoreFromAuthors
+    , userSettingsNotificationMoreFromAuthors
+    , usnmfaOptedState
+
+    -- * Volumeannotations
+    , Volumeannotations
+    , volumeannotations
+    , vTotalItems
+    , vNextPageToken
+    , vKind
+    , vItems
+    , vVersion
+
+    -- * ReviewSource
+    , ReviewSource
+    , reviewSource
+    , rsExtraDescription
+    , rsURL
+    , rsDescription
+
+    -- * AnnotationData
+    , AnnotationData
+    , annotationData
+    , annEncodedData
+    , annKind
+    , annData
+    , annSelfLink
+    , annAnnotationType
+    , annVolumeId
+    , annId
+    , annUpdated
+    , annLayerId
+
+    -- * Volumeannotation
+    , Volumeannotation
+    , volumeannotation
+    , volSelectedText
+    , volAnnotationDataLink
+    , volPageIds
+    , volKind
+    , volData
+    , volSelfLink
+    , volAnnotationType
+    , volAnnotationDataId
+    , volContentRanges
+    , volVolumeId
+    , volId
+    , volDeleted
+    , volUpdated
+    , volLayerId
+
+    -- * BooksCloudLoadingResource
+    , BooksCloudLoadingResource
+    , booksCloudLoadingResource
+    , bclrProcessingState
+    , bclrVolumeId
+    , bclrAuthor
+    , bclrTitle
+
+    -- * Annotation
+    , Annotation
+    , annotation
+    , aaSelectedText
+    , aaLayerSummary
+    , aaHighlightStyle
+    , aaClientVersionRanges
+    , aaPageIds
+    , aaKind
+    , aaData
+    , aaCreated
+    , aaAfterSelectedText
+    , aaSelfLink
+    , aaCurrentVersionRanges
+    , aaVolumeId
+    , aaBeforeSelectedText
+    , aaId
+    , aaDeleted
+    , aaUpdated
+    , aaLayerId
+
+    -- * ReviewAuthor
+    , ReviewAuthor
+    , reviewAuthor
+    , raDisplayName
+
+    -- * GeolayerDataGeoViewport
+    , GeolayerDataGeoViewport
+    , geolayerDataGeoViewport
+    , gdgvHi
+    , gdgvLo
+
+    -- * VolumeUserInfo
+    , VolumeUserInfo
+    , volumeUserInfo
+    , vuiCopy
+    , vuiUserUploadedVolumeInfo
+    , vuiIsPurchased
+    , vuiEntitlementType
+    , vuiAcquisitionType
+    , vuiRentalState
+    , vuiIsPreOrdered
+    , vuiReview
+    , vuiRentalPeriod
+    , vuiUpdated
+    , vuiIsUploaded
+    , vuiIsInMyBooks
+    , vuiReadingPosition
+
+    -- * Layersummary
+    , Layersummary
+    , layersummary
+    , lAnnotationsDataLink
+    , lAnnotationsLink
+    , lKind
+    , lDataCount
+    , lContentVersion
+    , lVolumeAnnotationsVersion
+    , lAnnotationCount
+    , lAnnotationTypes
+    , lSelfLink
+    , lVolumeId
+    , lId
+    , lUpdated
+    , lLayerId
+
+    -- * VolumesListLibraryRestrict
+    , VolumesListLibraryRestrict (..)
+
+    -- * VolumeannotationContentRanges
+    , VolumeannotationContentRanges
+    , volumeannotationContentRanges
+    , vcrGbImageRange
+    , vcrContentVersion
+    , vcrGbTextRange
+    , vcrCfiRange
+
+    -- * VolumeAccessInfo
+    , VolumeAccessInfo
+    , volumeAccessInfo
+    , vaiWebReaderLink
+    , vaiCountry
+    , vaiDriveImportedContentLink
+    , vaiExplicitOfflineLicenseManagement
+    , vaiViewability
+    , vaiQuoteSharingAllowed
+    , vaiEpub
+    , vaiPdf
+    , vaiTextToSpeechPermission
+    , vaiEmbeddable
+    , vaiAccessViewStatus
+    , vaiDownloadAccess
+    , vaiViewOrderURL
+    , vaiPublicDomain
+
+    -- * MyLibraryBookshelvesRemoveVolumeReason
+    , MyLibraryBookshelvesRemoveVolumeReason (..)
+
+    -- * VolumeVolumeInfoImageLinks
+    , VolumeVolumeInfoImageLinks
+    , volumeVolumeInfoImageLinks
+    , vviilThumbnail
+    , vviilSmall
+    , vviilExtraLarge
+    , vviilLarge
+    , vviilMedium
+    , vviilSmallThumbnail
+
+    -- * OnboardingListCategoryVolumesMaxAllowedMaturityRating
+    , OnboardingListCategoryVolumesMaxAllowedMaturityRating (..)
+
+    -- * VolumeUserInfoUserUploadedVolumeInfo
+    , VolumeUserInfoUserUploadedVolumeInfo
+    , volumeUserInfoUserUploadedVolumeInfo
+    , vuiuuviProcessingState
+
+    -- * VolumeUserInfoCopy
+    , VolumeUserInfoCopy
+    , volumeUserInfoCopy
+    , vuicLimitType
+    , vuicAllowedCharacterCount
+    , vuicUpdated
+    , vuicRemainingCharacterCount
+
+    -- * BooksVolumesRecommendedRateResponse
+    , BooksVolumesRecommendedRateResponse
+    , booksVolumesRecommendedRateResponse
+    , bvrrrConsistencyToken
+
+    -- * Bookshelf
+    , Bookshelf
+    , bookshelf
+    , bAccess
+    , bVolumesLastUpdated
+    , bKind
+    , bCreated
+    , bVolumeCount
+    , bSelfLink
+    , bId
+    , bUpdated
+    , bTitle
+    , bDescription
+
+    -- * Notification
+    , Notification
+    , notification
+    , nKind
+    , nBody
+    , nLinkURL
+    , nIconURL
+    , nTitle
+
+    -- * VolumesListDownload
+    , VolumesListDownload (..)
+
+    -- * AnnotationsSummaryLayersItem
+    , AnnotationsSummaryLayersItem
+    , annotationsSummaryLayersItem
+    , asliLimitType
+    , asliAllowedCharacterCount
+    , asliUpdated
+    , asliLayerId
+    , asliRemainingCharacterCount
+
+    -- * VolumeSaleInfoOffersItemRentalDuration
+    , VolumeSaleInfoOffersItemRentalDuration
+    , volumeSaleInfoOffersItemRentalDuration
+    , vsioirdCount
+    , vsioirdUnit
+
+    -- * DictlayerDataDictWordsItemExamplesItem
+    , DictlayerDataDictWordsItemExamplesItem
+    , dictlayerDataDictWordsItemExamplesItem
+    , dddwieiText
+    , dddwieiSource
+
+    -- * OffersItemsItem
+    , OffersItemsItem
+    , offersItemsItem
+    , oiiItems
+    , oiiArtURL
+    , oiiId
+    , oiiGServicesKey
+
+    -- * AnnotationLayerSummary
+    , AnnotationLayerSummary
+    , annotationLayerSummary
+    , alsLimitType
+    , alsAllowedCharacterCount
+    , alsRemainingCharacterCount
+
+    -- * VolumeSearchInfo
+    , VolumeSearchInfo
+    , volumeSearchInfo
+    , vsiTextSnippet
+
+    -- * AnnotationsSummary
+    , AnnotationsSummary
+    , annotationsSummary
+    , asKind
+    , asLayers
+
+    -- * VolumesGetProjection
+    , VolumesGetProjection (..)
+
+    -- * Category
+    , Category
+    , category
+    , cKind
+    , cItems
+
+    -- * VolumesAssociatedListAssociation
+    , VolumesAssociatedListAssociation (..)
+
+    -- * DiscoveryclustersClustersItemBanner_with_content_container
+    , DiscoveryclustersClustersItemBanner_with_content_container
+    , discoveryclustersClustersItemBanner_with_content_container
+    , dcibFillColorArgb
+    , dcibMoreButtonURL
+    , dcibTextColorArgb
+    , dcibMoreButtonText
+    , dcibImageURL
+    , dcibMaskColorArgb
+
+    -- * Volume
+    , Volume
+    , volume
+    , vvUserInfo
+    , vvEtag
+    , vvAccessInfo
+    , vvKind
+    , vvSearchInfo
+    , vvSelfLink
+    , vvLayerInfo
+    , vvSaleInfo
+    , vvId
+    , vvRecommendedInfo
+    , vvVolumeInfo
+
+    -- * GeolayerDataGeoBoundaryItemItem
+    , GeolayerDataGeoBoundaryItemItem
+    , geolayerDataGeoBoundaryItemItem
+    , gdgbiiLatitude
+    , gdgbiiLongitude
+
+    -- * OffersItemsItemItemsItem
+    , OffersItemsItemItemsItem
+    , offersItemsItemItemsItem
+    , oiiiiCanonicalVolumeLink
+    , oiiiiCoverURL
+    , oiiiiVolumeId
+    , oiiiiAuthor
+    , oiiiiTitle
+    , oiiiiDescription
+
+    -- * DictlayerDataDictWordsItemSensesItemDefinitionsItemExamplesItemSource
+    , DictlayerDataDictWordsItemSensesItemDefinitionsItemExamplesItemSource
+    , dictlayerDataDictWordsItemSensesItemDefinitionsItemExamplesItemSource
+    , dddwisidieisURL
+    , dddwisidieisAttribution
+
+    -- * GeolayerDataCommon
+    , GeolayerDataCommon
+    , geolayerDataCommon
+    , gdcSnippet
+    , gdcSnippetURL
+    , gdcLang
+    , gdcTitle
+    , gdcPreviewImageURL
+
+    -- * GeolayerDataGeo
+    , GeolayerDataGeo
+    , geolayerDataGeo
+    , gdgMapType
+    , gdgCachePolicy
+    , gdgViewport
+    , gdgBoundary
+    , gdgLatitude
+    , gdgZoom
+    , gdgCountryCode
+    , gdgLongitude
+
+    -- * DictlayerDataDictWordsItem
+    , DictlayerDataDictWordsItem
+    , dictlayerDataDictWordsItem
+    , dddwiSenses
+    , dddwiSource
+    , dddwiDerivatives
+    , dddwiExamples
+
+    -- * CategoryItemsItem
+    , CategoryItemsItem
+    , categoryItemsItem
+    , ciiName
+    , ciiCategoryId
+    , ciiBadgeURL
+
+    -- * DictlayerDataDictWordsItemDerivativesItemSource
+    , DictlayerDataDictWordsItemDerivativesItemSource
+    , dictlayerDataDictWordsItemDerivativesItemSource
+    , dddwidisURL
+    , dddwidisAttribution
+
+    -- * VolumesRecommendedRateRating
+    , VolumesRecommendedRateRating (..)
+
+    -- * GeolayerData
+    , GeolayerData
+    , geolayerData
+    , gdKind
+    , gdGeo
+    , gdCommon
+
+    -- * DictlayerDataDictWordsItemSource
+    , DictlayerDataDictWordsItemSource
+    , dictlayerDataDictWordsItemSource
+    , dddwisURL
+    , dddwisAttribution
+
+    -- * DictlayerDataDictWordsItemDerivativesItem
+    , DictlayerDataDictWordsItemDerivativesItem
+    , dictlayerDataDictWordsItemDerivativesItem
+    , dddwidiText
+    , dddwidiSource
+
+    -- * VolumesUserUploadedListProcessingState
+    , VolumesUserUploadedListProcessingState (..)
+
+    -- * MyConfigSyncVolumeLicensesFeatures
+    , MyConfigSyncVolumeLicensesFeatures (..)
+
+    -- * DictlayerDataDictWordsItemSensesItemDefinitionsItemExamplesItem
+    , DictlayerDataDictWordsItemSensesItemDefinitionsItemExamplesItem
+    , dictlayerDataDictWordsItemSensesItemDefinitionsItemExamplesItem
+    , dddwisidieiText
+    , dddwisidieiSource
+
+    -- * DictlayerData
+    , DictlayerData
+    , dictlayerData
+    , ddKind
+    , ddDict
+    , ddCommon
+
+    -- * VolumesAssociatedListMaxAllowedMaturityRating
+    , VolumesAssociatedListMaxAllowedMaturityRating (..)
+
+    -- * DictlayerDataDictWordsItemSensesItemSynonymsItemSource
+    , DictlayerDataDictWordsItemSensesItemSynonymsItemSource
+    , dictlayerDataDictWordsItemSensesItemSynonymsItemSource
+    , dddwisisisURL
+    , dddwisisisAttribution
+
+    -- * VolumesListFilter
+    , VolumesListFilter (..)
+
+    -- * UserSettingsNotification
+    , UserSettingsNotification
+    , userSettingsNotification
+    , usnMoreFromAuthors
+
+    -- * DictlayerDataDictWordsItemSensesItemSynonymsItem
+    , DictlayerDataDictWordsItemSensesItemSynonymsItem
+    , dictlayerDataDictWordsItemSensesItemSynonymsItem
+    , dddwisisiText
+    , dddwisisiSource
+
+    -- * GeolayerDataGeoViewportLo
+    , GeolayerDataGeoViewportLo
+    , geolayerDataGeoViewportLo
+    , gdgvlLatitude
+    , gdgvlLongitude
+
+    -- * VolumesRecommendedListMaxAllowedMaturityRating
+    , VolumesRecommendedListMaxAllowedMaturityRating (..)
+
+    -- * VolumeSaleInfoOffersItemListPrice
+    , VolumeSaleInfoOffersItemListPrice
+    , volumeSaleInfoOffersItemListPrice
+    , vsioilpCurrencyCode
+    , vsioilpAmountInMicros
+
+    -- * DownloadAccessRestriction
+    , DownloadAccessRestriction
+    , downloadAccessRestriction
+    , darJustAcquired
+    , darSignature
+    , darKind
+    , darMaxDownloadDevices
+    , darDownloadsAcquired
+    , darReasonCode
+    , darVolumeId
+    , darRestricted
+    , darSource
+    , darDeviceAllowed
+    , darMessage
+    , darNonce
+
+    -- * DictlayerDataCommon
+    , DictlayerDataCommon
+    , dictlayerDataCommon
+    , ddcTitle
+
+    -- * DiscoveryclustersClustersItem
+    , DiscoveryclustersClustersItem
+    , discoveryclustersClustersItem
+    , dciBannerWithContentContainer
+    , dciUid
+    , dciTotalVolumes
+    , dciSubTitle
+    , dciTitle
+    , dciVolumes
+
+    -- * VolumeSaleInfoRetailPrice
+    , VolumeSaleInfoRetailPrice
+    , volumeSaleInfoRetailPrice
+    , vsirpAmount
+    , vsirpCurrencyCode
+
+    -- * VolumeSaleInfoListPrice
+    , VolumeSaleInfoListPrice
+    , volumeSaleInfoListPrice
+    , vsilpAmount
+    , vsilpCurrencyCode
+
+    -- * DictlayerDataDictWordsItemSensesItemConjugationsItem
+    , DictlayerDataDictWordsItemSensesItemConjugationsItem
+    , dictlayerDataDictWordsItemSensesItemConjugationsItem
+    , dddwisiciValue
+    , dddwisiciType
+
+    -- * Volume2
+    , Volume2
+    , volume2
+    , voloNextPageToken
+    , voloKind
+    , voloItems
+
+    -- * Review
+    , Review
+    , review
+    , rRating
+    , rKind
+    , rContent
+    , rDate
+    , rVolumeId
+    , rAuthor
+    , rSource
+    , rFullTextURL
+    , rTitle
+    , rType
+
+    -- * VolumeUserInfoRentalPeriod
+    , VolumeUserInfoRentalPeriod
+    , volumeUserInfoRentalPeriod
+    , vuirpEndUtcSec
+    , vuirpStartUtcSec
+
+    -- * VolumeSaleInfo
+    , VolumeSaleInfo
+    , volumeSaleInfo
+    , vsiCountry
+    , vsiOnSaleDate
+    , vsiListPrice
+    , vsiRetailPrice
+    , vsiOffers
+    , vsiBuyLink
+    , vsiIsEbook
+    , vsiSaleability
+
+    -- * MyLibraryBookshelvesAddVolumeReason
+    , MyLibraryBookshelvesAddVolumeReason (..)
+
+    -- * Metadata
+    , Metadata
+    , metadata
+    , mKind
+    , mItems
+
+    -- * VolumeLayerInfo
+    , VolumeLayerInfo
+    , volumeLayerInfo
+    , vliLayers
+
+    -- * VolumeVolumeInfoDimensions
+    , VolumeVolumeInfoDimensions
+    , volumeVolumeInfoDimensions
+    , vvidHeight
+    , vvidWidth
+    , vvidThickness
+
+    -- * RequestAccess
+    , RequestAccess
+    , requestAccess
+    , raConcurrentAccess
+    , raKind
+    , raDownloadAccess
+
+    -- * AnnotationClientVersionRanges
+    , AnnotationClientVersionRanges
+    , annotationClientVersionRanges
+    , acvrGbImageRange
+    , acvrContentVersion
+    , acvrImageCfiRange
+    , acvrGbTextRange
+    , acvrCfiRange
+
+    -- * VolumesMybooksListAcquireMethod
+    , VolumesMybooksListAcquireMethod (..)
+
+    -- * DictlayerDataDictWordsItemSensesItemDefinitionsItem
+    , DictlayerDataDictWordsItemSensesItemDefinitionsItem
+    , dictlayerDataDictWordsItemSensesItemDefinitionsItem
+    , dddwisidiDefinition
+    , dddwisidiExamples
+
+    -- * VolumeLayerInfoLayersItem
+    , VolumeLayerInfoLayersItem
+    , volumeLayerInfoLayersItem
+    , vliliVolumeAnnotationsVersion
+    , vliliLayerId
+
+    -- * AnnotationCurrentVersionRanges
+    , AnnotationCurrentVersionRanges
+    , annotationCurrentVersionRanges
+    , aGbImageRange
+    , aContentVersion
+    , aImageCfiRange
+    , aGbTextRange
+    , aCfiRange
+
+    -- * PersonalizedstreamGetMaxAllowedMaturityRating
+    , PersonalizedstreamGetMaxAllowedMaturityRating (..)
+
+    -- * VolumesListPrintType
+    , VolumesListPrintType (..)
+
+    -- * VolumeAccessInfoPdf
+    , VolumeAccessInfoPdf
+    , volumeAccessInfoPdf
+    , vaipAcsTokenLink
+    , vaipIsAvailable
+    , vaipDownloadLink
+
+    -- * DictlayerDataDictWordsItemExamplesItemSource
+    , DictlayerDataDictWordsItemExamplesItemSource
+    , dictlayerDataDictWordsItemExamplesItemSource
+    , dddwieisURL
+    , dddwieisAttribution
+
+    -- * VolumeAccessInfoEpub
+    , VolumeAccessInfoEpub
+    , volumeAccessInfoEpub
+    , vaieAcsTokenLink
+    , vaieIsAvailable
+    , vaieDownloadLink
+
+    -- * ReadingPosition
+    , ReadingPosition
+    , readingPosition
+    , rpEpubCfiPosition
+    , rpKind
+    , rpGbImagePosition
+    , rpPdfPosition
+    , rpVolumeId
+    , rpUpdated
+    , rpGbTextPosition
+
+    -- * VolumeSaleInfoOffersItem
+    , VolumeSaleInfoOffersItem
+    , volumeSaleInfoOffersItem
+    , vsioiFinskyOfferType
+    , vsioiRentalDuration
+    , vsioiListPrice
+    , vsioiRetailPrice
+
+    -- * DictlayerDataDict
+    , DictlayerDataDict
+    , dictlayerDataDict
+    , dddSource
+    , dddWords
+
+    -- * DictlayerDataDictWordsItemSensesItem
+    , DictlayerDataDictWordsItemSensesItem
+    , dictlayerDataDictWordsItemSensesItem
+    , dddwisiPronunciationURL
+    , dddwisiConjugations
+    , dddwisiPronunciation
+    , dddwisiSynonyms
+    , dddwisiSource
+    , dddwisiPartOfSpeech
+    , dddwisiDefinitions
+    , dddwisiSyllabification
+
+    -- * VolumeRecommendedInfo
+    , VolumeRecommendedInfo
+    , volumeRecommendedInfo
+    , vriExplanation
+
+    -- * Offers
+    , Offers
+    , offers
+    , oKind
+    , oItems
+
+    -- * VolumesMybooksListProcessingState
+    , VolumesMybooksListProcessingState (..)
+
+    -- * Discoveryclusters
+    , Discoveryclusters
+    , discoveryclusters
+    , dKind
+    , dTotalClusters
+    , dClusters
+
+    -- * UserSettingsNotesExport
+    , UserSettingsNotesExport
+    , userSettingsNotesExport
+    , usneFolderName
+    , usneIsEnabled
+
+    -- * ConcurrentAccessRestriction
+    , ConcurrentAccessRestriction
+    , concurrentAccessRestriction
+    , carMaxConcurrentDevices
+    , carSignature
+    , carTimeWindowSeconds
+    , carKind
+    , carReasonCode
+    , carVolumeId
+    , carRestricted
+    , carSource
+    , carDeviceAllowed
+    , carMessage
+    , carNonce
+
+    -- * Volumes
+    , Volumes
+    , volumes
+    , v1TotalItems
+    , v1Kind
+    , v1Items
+
+    -- * Bookshelves
+    , Bookshelves
+    , bookshelves
+    , booKind
+    , booItems
+
+    -- * MyConfigRequestAccessLicenseTypes
+    , MyConfigRequestAccessLicenseTypes (..)
+
+    -- * DictlayerDataDictSource
+    , DictlayerDataDictSource
+    , dictlayerDataDictSource
+    , dddsURL
+    , dddsAttribution
+
+    -- * DownloadAccesses
+    , DownloadAccesses
+    , downloadAccesses
+    , daKind
+    , daDownloadAccessList
+
+    -- * GeolayerDataGeoViewportHi
+    , GeolayerDataGeoViewportHi
+    , geolayerDataGeoViewportHi
+    , gdgvhLatitude
+    , gdgvhLongitude
+
+    -- * MyLibraryReadingPositionsSetPositionAction
+    , MyLibraryReadingPositionsSetPositionAction (..)
+
+    -- * VolumeVolumeInfo
+    , VolumeVolumeInfo
+    , volumeVolumeInfo
+    , vviImageLinks
+    , vviAverageRating
+    , vviRatingsCount
+    , vviCanonicalVolumeLink
+    , vviReadingModes
+    , vviIndustryIdentifiers
+    , vviPrintedPageCount
+    , vviMainCategory
+    , vviContentVersion
+    , vviSamplePageCount
+    , vviCategories
+    , vviAuthors
+    , vviAllowAnonLogging
+    , vviSubtitle
+    , vviPublishedDate
+    , vviMaturityRating
+    , vviPreviewLink
+    , vviLanguage
+    , vviTitle
+    , vviPageCount
+    , vviDimensions
+    , vviInfoLink
+    , vviPublisher
+    , vviDescription
+    , vviPrintType
+
+    -- * MetadataItemsItem
+    , MetadataItemsItem
+    , metadataItemsItem
+    , miiSize
+    , miiVersion
+    , miiLanguage
+    , miiDownloadURL
+    , miiEncryptedKey
+
+    -- * DictlayerDataDictWordsItemSensesItemSource
+    , DictlayerDataDictWordsItemSensesItemSource
+    , dictlayerDataDictWordsItemSensesItemSource
+    , dddwisisURL
+    , dddwisisAttribution
+
+    -- * VolumeSaleInfoOffersItemRetailPrice
+    , VolumeSaleInfoOffersItemRetailPrice
+    , volumeSaleInfoOffersItemRetailPrice
+    , vsioirpCurrencyCode
+    , vsioirpAmountInMicros
+
+    -- * VolumeVolumeInfoIndustryIdentifiersItem
+    , VolumeVolumeInfoIndustryIdentifiersItem
+    , volumeVolumeInfoIndustryIdentifiersItem
+    , vviiiiIdentifier
+    , vviiiiType
+
+    -- * BooksAnnotationsRange
+    , BooksAnnotationsRange
+    , booksAnnotationsRange
+    , barStartOffSet
+    , barEndOffSet
+    , barEndPosition
+    , barStartPosition
+
+    -- * Layersummaries
+    , Layersummaries
+    , layersummaries
+    , layTotalItems
+    , layKind
+    , layItems
+    ) where
+
+import           Network.Google.Books.Types.Product
+import           Network.Google.Books.Types.Sum
+import           Network.Google.Prelude
+
+-- | Default request referring to version 'v1' of the Books API. This contains the host and root path used as a starting point for constructing service requests.
+booksService :: Service
+booksService
+  = defaultService (ServiceId "books:v1")
+      "www.googleapis.com"
+
+-- | Manage your books
+booksScope :: OAuthScope
+booksScope = "https://www.googleapis.com/auth/books";
diff --git a/gen/Network/Google/Books/Types/Product.hs b/gen/Network/Google/Books/Types/Product.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Books/Types/Product.hs
@@ -0,0 +1,7012 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- |
+-- Module      : Network.Google.Books.Types.Product
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+module Network.Google.Books.Types.Product where
+
+import           Network.Google.Books.Types.Sum
+import           Network.Google.Prelude
+
+--
+-- /See:/ 'userSettings' smart constructor.
+data UserSettings = UserSettings
+    { _usNotification :: !(Maybe UserSettingsNotification)
+    , _usKind         :: !Text
+    , _usNotesExport  :: !(Maybe UserSettingsNotesExport)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'UserSettings' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'usNotification'
+--
+-- * 'usKind'
+--
+-- * 'usNotesExport'
+userSettings
+    :: UserSettings
+userSettings =
+    UserSettings
+    { _usNotification = Nothing
+    , _usKind = "books#usersettings"
+    , _usNotesExport = Nothing
+    }
+
+usNotification :: Lens' UserSettings (Maybe UserSettingsNotification)
+usNotification
+  = lens _usNotification
+      (\ s a -> s{_usNotification = a})
+
+-- | Resource type.
+usKind :: Lens' UserSettings Text
+usKind = lens _usKind (\ s a -> s{_usKind = a})
+
+-- | User settings in sub-objects, each for different purposes.
+usNotesExport :: Lens' UserSettings (Maybe UserSettingsNotesExport)
+usNotesExport
+  = lens _usNotesExport
+      (\ s a -> s{_usNotesExport = a})
+
+instance FromJSON UserSettings where
+        parseJSON
+          = withObject "UserSettings"
+              (\ o ->
+                 UserSettings <$>
+                   (o .:? "notification") <*>
+                     (o .:? "kind" .!= "books#usersettings")
+                     <*> (o .:? "notesExport"))
+
+instance ToJSON UserSettings where
+        toJSON UserSettings{..}
+          = object
+              (catMaybes
+                 [("notification" .=) <$> _usNotification,
+                  Just ("kind" .= _usKind),
+                  ("notesExport" .=) <$> _usNotesExport])
+
+--
+-- /See:/ 'annotations' smart constructor.
+data Annotations = Annotations
+    { _aTotalItems    :: !(Maybe (Textual Int32))
+    , _aNextPageToken :: !(Maybe Text)
+    , _aKind          :: !Text
+    , _aItems         :: !(Maybe [Annotation])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Annotations' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'aTotalItems'
+--
+-- * 'aNextPageToken'
+--
+-- * 'aKind'
+--
+-- * 'aItems'
+annotations
+    :: Annotations
+annotations =
+    Annotations
+    { _aTotalItems = Nothing
+    , _aNextPageToken = Nothing
+    , _aKind = "books#annotations"
+    , _aItems = Nothing
+    }
+
+-- | Total number of annotations found. This may be greater than the number
+-- of notes returned in this response if results have been paginated.
+aTotalItems :: Lens' Annotations (Maybe Int32)
+aTotalItems
+  = lens _aTotalItems (\ s a -> s{_aTotalItems = a}) .
+      mapping _Coerce
+
+-- | Token to pass in for pagination for the next page. This will not be
+-- present if this request does not have more results.
+aNextPageToken :: Lens' Annotations (Maybe Text)
+aNextPageToken
+  = lens _aNextPageToken
+      (\ s a -> s{_aNextPageToken = a})
+
+-- | Resource type.
+aKind :: Lens' Annotations Text
+aKind = lens _aKind (\ s a -> s{_aKind = a})
+
+-- | A list of annotations.
+aItems :: Lens' Annotations [Annotation]
+aItems
+  = lens _aItems (\ s a -> s{_aItems = a}) . _Default .
+      _Coerce
+
+instance FromJSON Annotations where
+        parseJSON
+          = withObject "Annotations"
+              (\ o ->
+                 Annotations <$>
+                   (o .:? "totalItems") <*> (o .:? "nextPageToken") <*>
+                     (o .:? "kind" .!= "books#annotations")
+                     <*> (o .:? "items" .!= mempty))
+
+instance ToJSON Annotations where
+        toJSON Annotations{..}
+          = object
+              (catMaybes
+                 [("totalItems" .=) <$> _aTotalItems,
+                  ("nextPageToken" .=) <$> _aNextPageToken,
+                  Just ("kind" .= _aKind), ("items" .=) <$> _aItems])
+
+--
+-- /See:/ 'annotationsData' smart constructor.
+data AnnotationsData = AnnotationsData
+    { _adTotalItems    :: !(Maybe (Textual Int32))
+    , _adNextPageToken :: !(Maybe Text)
+    , _adKind          :: !Text
+    , _adItems         :: !(Maybe [AnnotationData])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'AnnotationsData' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'adTotalItems'
+--
+-- * 'adNextPageToken'
+--
+-- * 'adKind'
+--
+-- * 'adItems'
+annotationsData
+    :: AnnotationsData
+annotationsData =
+    AnnotationsData
+    { _adTotalItems = Nothing
+    , _adNextPageToken = Nothing
+    , _adKind = "books#annotationsdata"
+    , _adItems = Nothing
+    }
+
+-- | The total number of volume annotations found.
+adTotalItems :: Lens' AnnotationsData (Maybe Int32)
+adTotalItems
+  = lens _adTotalItems (\ s a -> s{_adTotalItems = a})
+      . mapping _Coerce
+
+-- | Token to pass in for pagination for the next page. This will not be
+-- present if this request does not have more results.
+adNextPageToken :: Lens' AnnotationsData (Maybe Text)
+adNextPageToken
+  = lens _adNextPageToken
+      (\ s a -> s{_adNextPageToken = a})
+
+-- | Resource type
+adKind :: Lens' AnnotationsData Text
+adKind = lens _adKind (\ s a -> s{_adKind = a})
+
+-- | A list of Annotation Data.
+adItems :: Lens' AnnotationsData [AnnotationData]
+adItems
+  = lens _adItems (\ s a -> s{_adItems = a}) . _Default
+      . _Coerce
+
+instance FromJSON AnnotationsData where
+        parseJSON
+          = withObject "AnnotationsData"
+              (\ o ->
+                 AnnotationsData <$>
+                   (o .:? "totalItems") <*> (o .:? "nextPageToken") <*>
+                     (o .:? "kind" .!= "books#annotationsdata")
+                     <*> (o .:? "items" .!= mempty))
+
+instance ToJSON AnnotationsData where
+        toJSON AnnotationsData{..}
+          = object
+              (catMaybes
+                 [("totalItems" .=) <$> _adTotalItems,
+                  ("nextPageToken" .=) <$> _adNextPageToken,
+                  Just ("kind" .= _adKind), ("items" .=) <$> _adItems])
+
+--
+-- /See:/ 'userSettingsNotificationMoreFromAuthors' smart constructor.
+newtype UserSettingsNotificationMoreFromAuthors = UserSettingsNotificationMoreFromAuthors
+    { _usnmfaOptedState :: Maybe Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'UserSettingsNotificationMoreFromAuthors' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'usnmfaOptedState'
+userSettingsNotificationMoreFromAuthors
+    :: UserSettingsNotificationMoreFromAuthors
+userSettingsNotificationMoreFromAuthors =
+    UserSettingsNotificationMoreFromAuthors
+    { _usnmfaOptedState = Nothing
+    }
+
+usnmfaOptedState :: Lens' UserSettingsNotificationMoreFromAuthors (Maybe Text)
+usnmfaOptedState
+  = lens _usnmfaOptedState
+      (\ s a -> s{_usnmfaOptedState = a})
+
+instance FromJSON
+         UserSettingsNotificationMoreFromAuthors where
+        parseJSON
+          = withObject
+              "UserSettingsNotificationMoreFromAuthors"
+              (\ o ->
+                 UserSettingsNotificationMoreFromAuthors <$>
+                   (o .:? "opted_state"))
+
+instance ToJSON
+         UserSettingsNotificationMoreFromAuthors where
+        toJSON UserSettingsNotificationMoreFromAuthors{..}
+          = object
+              (catMaybes
+                 [("opted_state" .=) <$> _usnmfaOptedState])
+
+--
+-- /See:/ 'volumeannotations' smart constructor.
+data Volumeannotations = Volumeannotations
+    { _vTotalItems    :: !(Maybe (Textual Int32))
+    , _vNextPageToken :: !(Maybe Text)
+    , _vKind          :: !Text
+    , _vItems         :: !(Maybe [Volumeannotation])
+    , _vVersion       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Volumeannotations' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'vTotalItems'
+--
+-- * 'vNextPageToken'
+--
+-- * 'vKind'
+--
+-- * 'vItems'
+--
+-- * 'vVersion'
+volumeannotations
+    :: Volumeannotations
+volumeannotations =
+    Volumeannotations
+    { _vTotalItems = Nothing
+    , _vNextPageToken = Nothing
+    , _vKind = "books#volumeannotations"
+    , _vItems = Nothing
+    , _vVersion = Nothing
+    }
+
+-- | The total number of volume annotations found.
+vTotalItems :: Lens' Volumeannotations (Maybe Int32)
+vTotalItems
+  = lens _vTotalItems (\ s a -> s{_vTotalItems = a}) .
+      mapping _Coerce
+
+-- | Token to pass in for pagination for the next page. This will not be
+-- present if this request does not have more results.
+vNextPageToken :: Lens' Volumeannotations (Maybe Text)
+vNextPageToken
+  = lens _vNextPageToken
+      (\ s a -> s{_vNextPageToken = a})
+
+-- | Resource type
+vKind :: Lens' Volumeannotations Text
+vKind = lens _vKind (\ s a -> s{_vKind = a})
+
+-- | A list of volume annotations.
+vItems :: Lens' Volumeannotations [Volumeannotation]
+vItems
+  = lens _vItems (\ s a -> s{_vItems = a}) . _Default .
+      _Coerce
+
+-- | The version string for all of the volume annotations in this layer (not
+-- just the ones in this response). Note: the version string doesn\'t apply
+-- to the annotation data, just the information in this response (e.g. the
+-- location of annotations in the book).
+vVersion :: Lens' Volumeannotations (Maybe Text)
+vVersion = lens _vVersion (\ s a -> s{_vVersion = a})
+
+instance FromJSON Volumeannotations where
+        parseJSON
+          = withObject "Volumeannotations"
+              (\ o ->
+                 Volumeannotations <$>
+                   (o .:? "totalItems") <*> (o .:? "nextPageToken") <*>
+                     (o .:? "kind" .!= "books#volumeannotations")
+                     <*> (o .:? "items" .!= mempty)
+                     <*> (o .:? "version"))
+
+instance ToJSON Volumeannotations where
+        toJSON Volumeannotations{..}
+          = object
+              (catMaybes
+                 [("totalItems" .=) <$> _vTotalItems,
+                  ("nextPageToken" .=) <$> _vNextPageToken,
+                  Just ("kind" .= _vKind), ("items" .=) <$> _vItems,
+                  ("version" .=) <$> _vVersion])
+
+-- | Information regarding the source of this review, when the review is not
+-- from a Google Books user.
+--
+-- /See:/ 'reviewSource' smart constructor.
+data ReviewSource = ReviewSource
+    { _rsExtraDescription :: !(Maybe Text)
+    , _rsURL              :: !(Maybe Text)
+    , _rsDescription      :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ReviewSource' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'rsExtraDescription'
+--
+-- * 'rsURL'
+--
+-- * 'rsDescription'
+reviewSource
+    :: ReviewSource
+reviewSource =
+    ReviewSource
+    { _rsExtraDescription = Nothing
+    , _rsURL = Nothing
+    , _rsDescription = Nothing
+    }
+
+-- | Extra text about the source of the review.
+rsExtraDescription :: Lens' ReviewSource (Maybe Text)
+rsExtraDescription
+  = lens _rsExtraDescription
+      (\ s a -> s{_rsExtraDescription = a})
+
+-- | URL of the source of the review.
+rsURL :: Lens' ReviewSource (Maybe Text)
+rsURL = lens _rsURL (\ s a -> s{_rsURL = a})
+
+-- | Name of the source.
+rsDescription :: Lens' ReviewSource (Maybe Text)
+rsDescription
+  = lens _rsDescription
+      (\ s a -> s{_rsDescription = a})
+
+instance FromJSON ReviewSource where
+        parseJSON
+          = withObject "ReviewSource"
+              (\ o ->
+                 ReviewSource <$>
+                   (o .:? "extraDescription") <*> (o .:? "url") <*>
+                     (o .:? "description"))
+
+instance ToJSON ReviewSource where
+        toJSON ReviewSource{..}
+          = object
+              (catMaybes
+                 [("extraDescription" .=) <$> _rsExtraDescription,
+                  ("url" .=) <$> _rsURL,
+                  ("description" .=) <$> _rsDescription])
+
+--
+-- /See:/ 'annotationData' smart constructor.
+data AnnotationData = AnnotationData
+    { _annEncodedData    :: !(Maybe (Textual Word8))
+    , _annKind           :: !Text
+    , _annData           :: !(Maybe JSONValue)
+    , _annSelfLink       :: !(Maybe Text)
+    , _annAnnotationType :: !(Maybe Text)
+    , _annVolumeId       :: !(Maybe Text)
+    , _annId             :: !(Maybe Text)
+    , _annUpdated        :: !(Maybe DateTime')
+    , _annLayerId        :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'AnnotationData' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'annEncodedData'
+--
+-- * 'annKind'
+--
+-- * 'annData'
+--
+-- * 'annSelfLink'
+--
+-- * 'annAnnotationType'
+--
+-- * 'annVolumeId'
+--
+-- * 'annId'
+--
+-- * 'annUpdated'
+--
+-- * 'annLayerId'
+annotationData
+    :: AnnotationData
+annotationData =
+    AnnotationData
+    { _annEncodedData = Nothing
+    , _annKind = "books#annotationdata"
+    , _annData = Nothing
+    , _annSelfLink = Nothing
+    , _annAnnotationType = Nothing
+    , _annVolumeId = Nothing
+    , _annId = Nothing
+    , _annUpdated = Nothing
+    , _annLayerId = Nothing
+    }
+
+-- | Base64 encoded data for this annotation data.
+annEncodedData :: Lens' AnnotationData (Maybe Word8)
+annEncodedData
+  = lens _annEncodedData
+      (\ s a -> s{_annEncodedData = a})
+      . mapping _Coerce
+
+-- | Resource Type
+annKind :: Lens' AnnotationData Text
+annKind = lens _annKind (\ s a -> s{_annKind = a})
+
+annData :: Lens' AnnotationData (Maybe JSONValue)
+annData = lens _annData (\ s a -> s{_annData = a})
+
+-- | URL for this resource. *
+annSelfLink :: Lens' AnnotationData (Maybe Text)
+annSelfLink
+  = lens _annSelfLink (\ s a -> s{_annSelfLink = a})
+
+-- | The type of annotation this data is for.
+annAnnotationType :: Lens' AnnotationData (Maybe Text)
+annAnnotationType
+  = lens _annAnnotationType
+      (\ s a -> s{_annAnnotationType = a})
+
+-- | The volume id for this data. *
+annVolumeId :: Lens' AnnotationData (Maybe Text)
+annVolumeId
+  = lens _annVolumeId (\ s a -> s{_annVolumeId = a})
+
+-- | Unique id for this annotation data.
+annId :: Lens' AnnotationData (Maybe Text)
+annId = lens _annId (\ s a -> s{_annId = a})
+
+-- | Timestamp for the last time this data was updated. (RFC 3339 UTC
+-- date-time format).
+annUpdated :: Lens' AnnotationData (Maybe UTCTime)
+annUpdated
+  = lens _annUpdated (\ s a -> s{_annUpdated = a}) .
+      mapping _DateTime
+
+-- | The Layer id for this data. *
+annLayerId :: Lens' AnnotationData (Maybe Text)
+annLayerId
+  = lens _annLayerId (\ s a -> s{_annLayerId = a})
+
+instance FromJSON AnnotationData where
+        parseJSON
+          = withObject "AnnotationData"
+              (\ o ->
+                 AnnotationData <$>
+                   (o .:? "encoded_data") <*>
+                     (o .:? "kind" .!= "books#annotationdata")
+                     <*> (o .:? "data")
+                     <*> (o .:? "selfLink")
+                     <*> (o .:? "annotationType")
+                     <*> (o .:? "volumeId")
+                     <*> (o .:? "id")
+                     <*> (o .:? "updated")
+                     <*> (o .:? "layerId"))
+
+instance ToJSON AnnotationData where
+        toJSON AnnotationData{..}
+          = object
+              (catMaybes
+                 [("encoded_data" .=) <$> _annEncodedData,
+                  Just ("kind" .= _annKind), ("data" .=) <$> _annData,
+                  ("selfLink" .=) <$> _annSelfLink,
+                  ("annotationType" .=) <$> _annAnnotationType,
+                  ("volumeId" .=) <$> _annVolumeId,
+                  ("id" .=) <$> _annId, ("updated" .=) <$> _annUpdated,
+                  ("layerId" .=) <$> _annLayerId])
+
+--
+-- /See:/ 'volumeannotation' smart constructor.
+data Volumeannotation = Volumeannotation
+    { _volSelectedText       :: !(Maybe Text)
+    , _volAnnotationDataLink :: !(Maybe Text)
+    , _volPageIds            :: !(Maybe [Text])
+    , _volKind               :: !Text
+    , _volData               :: !(Maybe Text)
+    , _volSelfLink           :: !(Maybe Text)
+    , _volAnnotationType     :: !(Maybe Text)
+    , _volAnnotationDataId   :: !(Maybe Text)
+    , _volContentRanges      :: !(Maybe VolumeannotationContentRanges)
+    , _volVolumeId           :: !(Maybe Text)
+    , _volId                 :: !(Maybe Text)
+    , _volDeleted            :: !(Maybe Bool)
+    , _volUpdated            :: !(Maybe DateTime')
+    , _volLayerId            :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Volumeannotation' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'volSelectedText'
+--
+-- * 'volAnnotationDataLink'
+--
+-- * 'volPageIds'
+--
+-- * 'volKind'
+--
+-- * 'volData'
+--
+-- * 'volSelfLink'
+--
+-- * 'volAnnotationType'
+--
+-- * 'volAnnotationDataId'
+--
+-- * 'volContentRanges'
+--
+-- * 'volVolumeId'
+--
+-- * 'volId'
+--
+-- * 'volDeleted'
+--
+-- * 'volUpdated'
+--
+-- * 'volLayerId'
+volumeannotation
+    :: Volumeannotation
+volumeannotation =
+    Volumeannotation
+    { _volSelectedText = Nothing
+    , _volAnnotationDataLink = Nothing
+    , _volPageIds = Nothing
+    , _volKind = "books#volumeannotation"
+    , _volData = Nothing
+    , _volSelfLink = Nothing
+    , _volAnnotationType = Nothing
+    , _volAnnotationDataId = Nothing
+    , _volContentRanges = Nothing
+    , _volVolumeId = Nothing
+    , _volId = Nothing
+    , _volDeleted = Nothing
+    , _volUpdated = Nothing
+    , _volLayerId = Nothing
+    }
+
+-- | Excerpt from the volume.
+volSelectedText :: Lens' Volumeannotation (Maybe Text)
+volSelectedText
+  = lens _volSelectedText
+      (\ s a -> s{_volSelectedText = a})
+
+-- | Link to get data for this annotation.
+volAnnotationDataLink :: Lens' Volumeannotation (Maybe Text)
+volAnnotationDataLink
+  = lens _volAnnotationDataLink
+      (\ s a -> s{_volAnnotationDataLink = a})
+
+-- | Pages the annotation spans.
+volPageIds :: Lens' Volumeannotation [Text]
+volPageIds
+  = lens _volPageIds (\ s a -> s{_volPageIds = a}) .
+      _Default
+      . _Coerce
+
+-- | Resource Type
+volKind :: Lens' Volumeannotation Text
+volKind = lens _volKind (\ s a -> s{_volKind = a})
+
+-- | Data for this annotation.
+volData :: Lens' Volumeannotation (Maybe Text)
+volData = lens _volData (\ s a -> s{_volData = a})
+
+-- | URL to this resource.
+volSelfLink :: Lens' Volumeannotation (Maybe Text)
+volSelfLink
+  = lens _volSelfLink (\ s a -> s{_volSelfLink = a})
+
+-- | The type of annotation this is.
+volAnnotationType :: Lens' Volumeannotation (Maybe Text)
+volAnnotationType
+  = lens _volAnnotationType
+      (\ s a -> s{_volAnnotationType = a})
+
+-- | The annotation data id for this volume annotation.
+volAnnotationDataId :: Lens' Volumeannotation (Maybe Text)
+volAnnotationDataId
+  = lens _volAnnotationDataId
+      (\ s a -> s{_volAnnotationDataId = a})
+
+-- | The content ranges to identify the selected text.
+volContentRanges :: Lens' Volumeannotation (Maybe VolumeannotationContentRanges)
+volContentRanges
+  = lens _volContentRanges
+      (\ s a -> s{_volContentRanges = a})
+
+-- | The Volume this annotation is for.
+volVolumeId :: Lens' Volumeannotation (Maybe Text)
+volVolumeId
+  = lens _volVolumeId (\ s a -> s{_volVolumeId = a})
+
+-- | Unique id of this volume annotation.
+volId :: Lens' Volumeannotation (Maybe Text)
+volId = lens _volId (\ s a -> s{_volId = a})
+
+-- | Indicates that this annotation is deleted.
+volDeleted :: Lens' Volumeannotation (Maybe Bool)
+volDeleted
+  = lens _volDeleted (\ s a -> s{_volDeleted = a})
+
+-- | Timestamp for the last time this anntoation was updated. (RFC 3339 UTC
+-- date-time format).
+volUpdated :: Lens' Volumeannotation (Maybe UTCTime)
+volUpdated
+  = lens _volUpdated (\ s a -> s{_volUpdated = a}) .
+      mapping _DateTime
+
+-- | The Layer this annotation is for.
+volLayerId :: Lens' Volumeannotation (Maybe Text)
+volLayerId
+  = lens _volLayerId (\ s a -> s{_volLayerId = a})
+
+instance FromJSON Volumeannotation where
+        parseJSON
+          = withObject "Volumeannotation"
+              (\ o ->
+                 Volumeannotation <$>
+                   (o .:? "selectedText") <*>
+                     (o .:? "annotationDataLink")
+                     <*> (o .:? "pageIds" .!= mempty)
+                     <*> (o .:? "kind" .!= "books#volumeannotation")
+                     <*> (o .:? "data")
+                     <*> (o .:? "selfLink")
+                     <*> (o .:? "annotationType")
+                     <*> (o .:? "annotationDataId")
+                     <*> (o .:? "contentRanges")
+                     <*> (o .:? "volumeId")
+                     <*> (o .:? "id")
+                     <*> (o .:? "deleted")
+                     <*> (o .:? "updated")
+                     <*> (o .:? "layerId"))
+
+instance ToJSON Volumeannotation where
+        toJSON Volumeannotation{..}
+          = object
+              (catMaybes
+                 [("selectedText" .=) <$> _volSelectedText,
+                  ("annotationDataLink" .=) <$> _volAnnotationDataLink,
+                  ("pageIds" .=) <$> _volPageIds,
+                  Just ("kind" .= _volKind), ("data" .=) <$> _volData,
+                  ("selfLink" .=) <$> _volSelfLink,
+                  ("annotationType" .=) <$> _volAnnotationType,
+                  ("annotationDataId" .=) <$> _volAnnotationDataId,
+                  ("contentRanges" .=) <$> _volContentRanges,
+                  ("volumeId" .=) <$> _volVolumeId,
+                  ("id" .=) <$> _volId, ("deleted" .=) <$> _volDeleted,
+                  ("updated" .=) <$> _volUpdated,
+                  ("layerId" .=) <$> _volLayerId])
+
+--
+-- /See:/ 'booksCloudLoadingResource' smart constructor.
+data BooksCloudLoadingResource = BooksCloudLoadingResource
+    { _bclrProcessingState :: !(Maybe Text)
+    , _bclrVolumeId        :: !(Maybe Text)
+    , _bclrAuthor          :: !(Maybe Text)
+    , _bclrTitle           :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'BooksCloudLoadingResource' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'bclrProcessingState'
+--
+-- * 'bclrVolumeId'
+--
+-- * 'bclrAuthor'
+--
+-- * 'bclrTitle'
+booksCloudLoadingResource
+    :: BooksCloudLoadingResource
+booksCloudLoadingResource =
+    BooksCloudLoadingResource
+    { _bclrProcessingState = Nothing
+    , _bclrVolumeId = Nothing
+    , _bclrAuthor = Nothing
+    , _bclrTitle = Nothing
+    }
+
+bclrProcessingState :: Lens' BooksCloudLoadingResource (Maybe Text)
+bclrProcessingState
+  = lens _bclrProcessingState
+      (\ s a -> s{_bclrProcessingState = a})
+
+bclrVolumeId :: Lens' BooksCloudLoadingResource (Maybe Text)
+bclrVolumeId
+  = lens _bclrVolumeId (\ s a -> s{_bclrVolumeId = a})
+
+bclrAuthor :: Lens' BooksCloudLoadingResource (Maybe Text)
+bclrAuthor
+  = lens _bclrAuthor (\ s a -> s{_bclrAuthor = a})
+
+bclrTitle :: Lens' BooksCloudLoadingResource (Maybe Text)
+bclrTitle
+  = lens _bclrTitle (\ s a -> s{_bclrTitle = a})
+
+instance FromJSON BooksCloudLoadingResource where
+        parseJSON
+          = withObject "BooksCloudLoadingResource"
+              (\ o ->
+                 BooksCloudLoadingResource <$>
+                   (o .:? "processingState") <*> (o .:? "volumeId") <*>
+                     (o .:? "author")
+                     <*> (o .:? "title"))
+
+instance ToJSON BooksCloudLoadingResource where
+        toJSON BooksCloudLoadingResource{..}
+          = object
+              (catMaybes
+                 [("processingState" .=) <$> _bclrProcessingState,
+                  ("volumeId" .=) <$> _bclrVolumeId,
+                  ("author" .=) <$> _bclrAuthor,
+                  ("title" .=) <$> _bclrTitle])
+
+--
+-- /See:/ 'annotation' smart constructor.
+data Annotation = Annotation
+    { _aaSelectedText         :: !(Maybe Text)
+    , _aaLayerSummary         :: !(Maybe AnnotationLayerSummary)
+    , _aaHighlightStyle       :: !(Maybe Text)
+    , _aaClientVersionRanges  :: !(Maybe AnnotationClientVersionRanges)
+    , _aaPageIds              :: !(Maybe [Text])
+    , _aaKind                 :: !Text
+    , _aaData                 :: !(Maybe Text)
+    , _aaCreated              :: !(Maybe DateTime')
+    , _aaAfterSelectedText    :: !(Maybe Text)
+    , _aaSelfLink             :: !(Maybe Text)
+    , _aaCurrentVersionRanges :: !(Maybe AnnotationCurrentVersionRanges)
+    , _aaVolumeId             :: !(Maybe Text)
+    , _aaBeforeSelectedText   :: !(Maybe Text)
+    , _aaId                   :: !(Maybe Text)
+    , _aaDeleted              :: !(Maybe Bool)
+    , _aaUpdated              :: !(Maybe DateTime')
+    , _aaLayerId              :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Annotation' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'aaSelectedText'
+--
+-- * 'aaLayerSummary'
+--
+-- * 'aaHighlightStyle'
+--
+-- * 'aaClientVersionRanges'
+--
+-- * 'aaPageIds'
+--
+-- * 'aaKind'
+--
+-- * 'aaData'
+--
+-- * 'aaCreated'
+--
+-- * 'aaAfterSelectedText'
+--
+-- * 'aaSelfLink'
+--
+-- * 'aaCurrentVersionRanges'
+--
+-- * 'aaVolumeId'
+--
+-- * 'aaBeforeSelectedText'
+--
+-- * 'aaId'
+--
+-- * 'aaDeleted'
+--
+-- * 'aaUpdated'
+--
+-- * 'aaLayerId'
+annotation
+    :: Annotation
+annotation =
+    Annotation
+    { _aaSelectedText = Nothing
+    , _aaLayerSummary = Nothing
+    , _aaHighlightStyle = Nothing
+    , _aaClientVersionRanges = Nothing
+    , _aaPageIds = Nothing
+    , _aaKind = "books#annotation"
+    , _aaData = Nothing
+    , _aaCreated = Nothing
+    , _aaAfterSelectedText = Nothing
+    , _aaSelfLink = Nothing
+    , _aaCurrentVersionRanges = Nothing
+    , _aaVolumeId = Nothing
+    , _aaBeforeSelectedText = Nothing
+    , _aaId = Nothing
+    , _aaDeleted = Nothing
+    , _aaUpdated = Nothing
+    , _aaLayerId = Nothing
+    }
+
+-- | Excerpt from the volume.
+aaSelectedText :: Lens' Annotation (Maybe Text)
+aaSelectedText
+  = lens _aaSelectedText
+      (\ s a -> s{_aaSelectedText = a})
+
+aaLayerSummary :: Lens' Annotation (Maybe AnnotationLayerSummary)
+aaLayerSummary
+  = lens _aaLayerSummary
+      (\ s a -> s{_aaLayerSummary = a})
+
+-- | The highlight style for this annotation.
+aaHighlightStyle :: Lens' Annotation (Maybe Text)
+aaHighlightStyle
+  = lens _aaHighlightStyle
+      (\ s a -> s{_aaHighlightStyle = a})
+
+-- | Selection ranges sent from the client.
+aaClientVersionRanges :: Lens' Annotation (Maybe AnnotationClientVersionRanges)
+aaClientVersionRanges
+  = lens _aaClientVersionRanges
+      (\ s a -> s{_aaClientVersionRanges = a})
+
+-- | Pages that this annotation spans.
+aaPageIds :: Lens' Annotation [Text]
+aaPageIds
+  = lens _aaPageIds (\ s a -> s{_aaPageIds = a}) .
+      _Default
+      . _Coerce
+
+-- | Resource type.
+aaKind :: Lens' Annotation Text
+aaKind = lens _aaKind (\ s a -> s{_aaKind = a})
+
+-- | User-created data for this annotation.
+aaData :: Lens' Annotation (Maybe Text)
+aaData = lens _aaData (\ s a -> s{_aaData = a})
+
+-- | Timestamp for the created time of this annotation.
+aaCreated :: Lens' Annotation (Maybe UTCTime)
+aaCreated
+  = lens _aaCreated (\ s a -> s{_aaCreated = a}) .
+      mapping _DateTime
+
+-- | Anchor text after excerpt. For requests, if the user bookmarked a screen
+-- that has no flowing text on it, then this field should be empty.
+aaAfterSelectedText :: Lens' Annotation (Maybe Text)
+aaAfterSelectedText
+  = lens _aaAfterSelectedText
+      (\ s a -> s{_aaAfterSelectedText = a})
+
+-- | URL to this resource.
+aaSelfLink :: Lens' Annotation (Maybe Text)
+aaSelfLink
+  = lens _aaSelfLink (\ s a -> s{_aaSelfLink = a})
+
+-- | Selection ranges for the most recent content version.
+aaCurrentVersionRanges :: Lens' Annotation (Maybe AnnotationCurrentVersionRanges)
+aaCurrentVersionRanges
+  = lens _aaCurrentVersionRanges
+      (\ s a -> s{_aaCurrentVersionRanges = a})
+
+-- | The volume that this annotation belongs to.
+aaVolumeId :: Lens' Annotation (Maybe Text)
+aaVolumeId
+  = lens _aaVolumeId (\ s a -> s{_aaVolumeId = a})
+
+-- | Anchor text before excerpt. For requests, if the user bookmarked a
+-- screen that has no flowing text on it, then this field should be empty.
+aaBeforeSelectedText :: Lens' Annotation (Maybe Text)
+aaBeforeSelectedText
+  = lens _aaBeforeSelectedText
+      (\ s a -> s{_aaBeforeSelectedText = a})
+
+-- | Id of this annotation, in the form of a GUID.
+aaId :: Lens' Annotation (Maybe Text)
+aaId = lens _aaId (\ s a -> s{_aaId = a})
+
+-- | Indicates that this annotation is deleted.
+aaDeleted :: Lens' Annotation (Maybe Bool)
+aaDeleted
+  = lens _aaDeleted (\ s a -> s{_aaDeleted = a})
+
+-- | Timestamp for the last time this annotation was modified.
+aaUpdated :: Lens' Annotation (Maybe UTCTime)
+aaUpdated
+  = lens _aaUpdated (\ s a -> s{_aaUpdated = a}) .
+      mapping _DateTime
+
+-- | The layer this annotation is for.
+aaLayerId :: Lens' Annotation (Maybe Text)
+aaLayerId
+  = lens _aaLayerId (\ s a -> s{_aaLayerId = a})
+
+instance FromJSON Annotation where
+        parseJSON
+          = withObject "Annotation"
+              (\ o ->
+                 Annotation <$>
+                   (o .:? "selectedText") <*> (o .:? "layerSummary") <*>
+                     (o .:? "highlightStyle")
+                     <*> (o .:? "clientVersionRanges")
+                     <*> (o .:? "pageIds" .!= mempty)
+                     <*> (o .:? "kind" .!= "books#annotation")
+                     <*> (o .:? "data")
+                     <*> (o .:? "created")
+                     <*> (o .:? "afterSelectedText")
+                     <*> (o .:? "selfLink")
+                     <*> (o .:? "currentVersionRanges")
+                     <*> (o .:? "volumeId")
+                     <*> (o .:? "beforeSelectedText")
+                     <*> (o .:? "id")
+                     <*> (o .:? "deleted")
+                     <*> (o .:? "updated")
+                     <*> (o .:? "layerId"))
+
+instance ToJSON Annotation where
+        toJSON Annotation{..}
+          = object
+              (catMaybes
+                 [("selectedText" .=) <$> _aaSelectedText,
+                  ("layerSummary" .=) <$> _aaLayerSummary,
+                  ("highlightStyle" .=) <$> _aaHighlightStyle,
+                  ("clientVersionRanges" .=) <$>
+                    _aaClientVersionRanges,
+                  ("pageIds" .=) <$> _aaPageIds,
+                  Just ("kind" .= _aaKind), ("data" .=) <$> _aaData,
+                  ("created" .=) <$> _aaCreated,
+                  ("afterSelectedText" .=) <$> _aaAfterSelectedText,
+                  ("selfLink" .=) <$> _aaSelfLink,
+                  ("currentVersionRanges" .=) <$>
+                    _aaCurrentVersionRanges,
+                  ("volumeId" .=) <$> _aaVolumeId,
+                  ("beforeSelectedText" .=) <$> _aaBeforeSelectedText,
+                  ("id" .=) <$> _aaId, ("deleted" .=) <$> _aaDeleted,
+                  ("updated" .=) <$> _aaUpdated,
+                  ("layerId" .=) <$> _aaLayerId])
+
+-- | Author of this review.
+--
+-- /See:/ 'reviewAuthor' smart constructor.
+newtype ReviewAuthor = ReviewAuthor
+    { _raDisplayName :: Maybe Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ReviewAuthor' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'raDisplayName'
+reviewAuthor
+    :: ReviewAuthor
+reviewAuthor =
+    ReviewAuthor
+    { _raDisplayName = Nothing
+    }
+
+-- | Name of this person.
+raDisplayName :: Lens' ReviewAuthor (Maybe Text)
+raDisplayName
+  = lens _raDisplayName
+      (\ s a -> s{_raDisplayName = a})
+
+instance FromJSON ReviewAuthor where
+        parseJSON
+          = withObject "ReviewAuthor"
+              (\ o -> ReviewAuthor <$> (o .:? "displayName"))
+
+instance ToJSON ReviewAuthor where
+        toJSON ReviewAuthor{..}
+          = object
+              (catMaybes [("displayName" .=) <$> _raDisplayName])
+
+-- | The viewport for showing this location. This is a latitude, longitude
+-- rectangle.
+--
+-- /See:/ 'geolayerDataGeoViewport' smart constructor.
+data GeolayerDataGeoViewport = GeolayerDataGeoViewport
+    { _gdgvHi :: !(Maybe GeolayerDataGeoViewportHi)
+    , _gdgvLo :: !(Maybe GeolayerDataGeoViewportLo)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'GeolayerDataGeoViewport' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gdgvHi'
+--
+-- * 'gdgvLo'
+geolayerDataGeoViewport
+    :: GeolayerDataGeoViewport
+geolayerDataGeoViewport =
+    GeolayerDataGeoViewport
+    { _gdgvHi = Nothing
+    , _gdgvLo = Nothing
+    }
+
+gdgvHi :: Lens' GeolayerDataGeoViewport (Maybe GeolayerDataGeoViewportHi)
+gdgvHi = lens _gdgvHi (\ s a -> s{_gdgvHi = a})
+
+gdgvLo :: Lens' GeolayerDataGeoViewport (Maybe GeolayerDataGeoViewportLo)
+gdgvLo = lens _gdgvLo (\ s a -> s{_gdgvLo = a})
+
+instance FromJSON GeolayerDataGeoViewport where
+        parseJSON
+          = withObject "GeolayerDataGeoViewport"
+              (\ o ->
+                 GeolayerDataGeoViewport <$>
+                   (o .:? "hi") <*> (o .:? "lo"))
+
+instance ToJSON GeolayerDataGeoViewport where
+        toJSON GeolayerDataGeoViewport{..}
+          = object
+              (catMaybes
+                 [("hi" .=) <$> _gdgvHi, ("lo" .=) <$> _gdgvLo])
+
+-- | User specific information related to this volume. (e.g. page this user
+-- last read or whether they purchased this book)
+--
+-- /See:/ 'volumeUserInfo' smart constructor.
+data VolumeUserInfo = VolumeUserInfo
+    { _vuiCopy                   :: !(Maybe VolumeUserInfoCopy)
+    , _vuiUserUploadedVolumeInfo :: !(Maybe VolumeUserInfoUserUploadedVolumeInfo)
+    , _vuiIsPurchased            :: !(Maybe Bool)
+    , _vuiEntitlementType        :: !(Maybe (Textual Int32))
+    , _vuiAcquisitionType        :: !(Maybe (Textual Int32))
+    , _vuiRentalState            :: !(Maybe Text)
+    , _vuiIsPreOrdered           :: !(Maybe Bool)
+    , _vuiReview                 :: !(Maybe Review)
+    , _vuiRentalPeriod           :: !(Maybe VolumeUserInfoRentalPeriod)
+    , _vuiUpdated                :: !(Maybe DateTime')
+    , _vuiIsUploaded             :: !(Maybe Bool)
+    , _vuiIsInMyBooks            :: !(Maybe Bool)
+    , _vuiReadingPosition        :: !(Maybe ReadingPosition)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'VolumeUserInfo' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'vuiCopy'
+--
+-- * 'vuiUserUploadedVolumeInfo'
+--
+-- * 'vuiIsPurchased'
+--
+-- * 'vuiEntitlementType'
+--
+-- * 'vuiAcquisitionType'
+--
+-- * 'vuiRentalState'
+--
+-- * 'vuiIsPreOrdered'
+--
+-- * 'vuiReview'
+--
+-- * 'vuiRentalPeriod'
+--
+-- * 'vuiUpdated'
+--
+-- * 'vuiIsUploaded'
+--
+-- * 'vuiIsInMyBooks'
+--
+-- * 'vuiReadingPosition'
+volumeUserInfo
+    :: VolumeUserInfo
+volumeUserInfo =
+    VolumeUserInfo
+    { _vuiCopy = Nothing
+    , _vuiUserUploadedVolumeInfo = Nothing
+    , _vuiIsPurchased = Nothing
+    , _vuiEntitlementType = Nothing
+    , _vuiAcquisitionType = Nothing
+    , _vuiRentalState = Nothing
+    , _vuiIsPreOrdered = Nothing
+    , _vuiReview = Nothing
+    , _vuiRentalPeriod = Nothing
+    , _vuiUpdated = Nothing
+    , _vuiIsUploaded = Nothing
+    , _vuiIsInMyBooks = Nothing
+    , _vuiReadingPosition = Nothing
+    }
+
+-- | Copy\/Paste accounting information.
+vuiCopy :: Lens' VolumeUserInfo (Maybe VolumeUserInfoCopy)
+vuiCopy = lens _vuiCopy (\ s a -> s{_vuiCopy = a})
+
+vuiUserUploadedVolumeInfo :: Lens' VolumeUserInfo (Maybe VolumeUserInfoUserUploadedVolumeInfo)
+vuiUserUploadedVolumeInfo
+  = lens _vuiUserUploadedVolumeInfo
+      (\ s a -> s{_vuiUserUploadedVolumeInfo = a})
+
+-- | Whether or not this volume was purchased by the authenticated user
+-- making the request. (In LITE projection.)
+vuiIsPurchased :: Lens' VolumeUserInfo (Maybe Bool)
+vuiIsPurchased
+  = lens _vuiIsPurchased
+      (\ s a -> s{_vuiIsPurchased = a})
+
+-- | Whether this volume is purchased, sample, pd download etc.
+vuiEntitlementType :: Lens' VolumeUserInfo (Maybe Int32)
+vuiEntitlementType
+  = lens _vuiEntitlementType
+      (\ s a -> s{_vuiEntitlementType = a})
+      . mapping _Coerce
+
+-- | How this volume was acquired.
+vuiAcquisitionType :: Lens' VolumeUserInfo (Maybe Int32)
+vuiAcquisitionType
+  = lens _vuiAcquisitionType
+      (\ s a -> s{_vuiAcquisitionType = a})
+      . mapping _Coerce
+
+-- | Whether this book is an active or an expired rental.
+vuiRentalState :: Lens' VolumeUserInfo (Maybe Text)
+vuiRentalState
+  = lens _vuiRentalState
+      (\ s a -> s{_vuiRentalState = a})
+
+-- | Whether or not this volume was pre-ordered by the authenticated user
+-- making the request. (In LITE projection.)
+vuiIsPreOrdered :: Lens' VolumeUserInfo (Maybe Bool)
+vuiIsPreOrdered
+  = lens _vuiIsPreOrdered
+      (\ s a -> s{_vuiIsPreOrdered = a})
+
+-- | This user\'s review of this volume, if one exists.
+vuiReview :: Lens' VolumeUserInfo (Maybe Review)
+vuiReview
+  = lens _vuiReview (\ s a -> s{_vuiReview = a})
+
+-- | Period during this book is\/was a valid rental.
+vuiRentalPeriod :: Lens' VolumeUserInfo (Maybe VolumeUserInfoRentalPeriod)
+vuiRentalPeriod
+  = lens _vuiRentalPeriod
+      (\ s a -> s{_vuiRentalPeriod = a})
+
+-- | Timestamp when this volume was last modified by a user action, such as a
+-- reading position update, volume purchase or writing a review. (RFC 3339
+-- UTC date-time format).
+vuiUpdated :: Lens' VolumeUserInfo (Maybe UTCTime)
+vuiUpdated
+  = lens _vuiUpdated (\ s a -> s{_vuiUpdated = a}) .
+      mapping _DateTime
+
+-- | Whether or not this volume was user uploaded.
+vuiIsUploaded :: Lens' VolumeUserInfo (Maybe Bool)
+vuiIsUploaded
+  = lens _vuiIsUploaded
+      (\ s a -> s{_vuiIsUploaded = a})
+
+-- | Whether or not this volume is currently in \"my books.\"
+vuiIsInMyBooks :: Lens' VolumeUserInfo (Maybe Bool)
+vuiIsInMyBooks
+  = lens _vuiIsInMyBooks
+      (\ s a -> s{_vuiIsInMyBooks = a})
+
+-- | The user\'s current reading position in the volume, if one is available.
+-- (In LITE projection.)
+vuiReadingPosition :: Lens' VolumeUserInfo (Maybe ReadingPosition)
+vuiReadingPosition
+  = lens _vuiReadingPosition
+      (\ s a -> s{_vuiReadingPosition = a})
+
+instance FromJSON VolumeUserInfo where
+        parseJSON
+          = withObject "VolumeUserInfo"
+              (\ o ->
+                 VolumeUserInfo <$>
+                   (o .:? "copy") <*> (o .:? "userUploadedVolumeInfo")
+                     <*> (o .:? "isPurchased")
+                     <*> (o .:? "entitlementType")
+                     <*> (o .:? "acquisitionType")
+                     <*> (o .:? "rentalState")
+                     <*> (o .:? "isPreordered")
+                     <*> (o .:? "review")
+                     <*> (o .:? "rentalPeriod")
+                     <*> (o .:? "updated")
+                     <*> (o .:? "isUploaded")
+                     <*> (o .:? "isInMyBooks")
+                     <*> (o .:? "readingPosition"))
+
+instance ToJSON VolumeUserInfo where
+        toJSON VolumeUserInfo{..}
+          = object
+              (catMaybes
+                 [("copy" .=) <$> _vuiCopy,
+                  ("userUploadedVolumeInfo" .=) <$>
+                    _vuiUserUploadedVolumeInfo,
+                  ("isPurchased" .=) <$> _vuiIsPurchased,
+                  ("entitlementType" .=) <$> _vuiEntitlementType,
+                  ("acquisitionType" .=) <$> _vuiAcquisitionType,
+                  ("rentalState" .=) <$> _vuiRentalState,
+                  ("isPreordered" .=) <$> _vuiIsPreOrdered,
+                  ("review" .=) <$> _vuiReview,
+                  ("rentalPeriod" .=) <$> _vuiRentalPeriod,
+                  ("updated" .=) <$> _vuiUpdated,
+                  ("isUploaded" .=) <$> _vuiIsUploaded,
+                  ("isInMyBooks" .=) <$> _vuiIsInMyBooks,
+                  ("readingPosition" .=) <$> _vuiReadingPosition])
+
+--
+-- /See:/ 'layersummary' smart constructor.
+data Layersummary = Layersummary
+    { _lAnnotationsDataLink      :: !(Maybe Text)
+    , _lAnnotationsLink          :: !(Maybe Text)
+    , _lKind                     :: !Text
+    , _lDataCount                :: !(Maybe (Textual Int32))
+    , _lContentVersion           :: !(Maybe Text)
+    , _lVolumeAnnotationsVersion :: !(Maybe Text)
+    , _lAnnotationCount          :: !(Maybe (Textual Int32))
+    , _lAnnotationTypes          :: !(Maybe [Text])
+    , _lSelfLink                 :: !(Maybe Text)
+    , _lVolumeId                 :: !(Maybe Text)
+    , _lId                       :: !(Maybe Text)
+    , _lUpdated                  :: !(Maybe DateTime')
+    , _lLayerId                  :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Layersummary' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'lAnnotationsDataLink'
+--
+-- * 'lAnnotationsLink'
+--
+-- * 'lKind'
+--
+-- * 'lDataCount'
+--
+-- * 'lContentVersion'
+--
+-- * 'lVolumeAnnotationsVersion'
+--
+-- * 'lAnnotationCount'
+--
+-- * 'lAnnotationTypes'
+--
+-- * 'lSelfLink'
+--
+-- * 'lVolumeId'
+--
+-- * 'lId'
+--
+-- * 'lUpdated'
+--
+-- * 'lLayerId'
+layersummary
+    :: Layersummary
+layersummary =
+    Layersummary
+    { _lAnnotationsDataLink = Nothing
+    , _lAnnotationsLink = Nothing
+    , _lKind = "books#layersummary"
+    , _lDataCount = Nothing
+    , _lContentVersion = Nothing
+    , _lVolumeAnnotationsVersion = Nothing
+    , _lAnnotationCount = Nothing
+    , _lAnnotationTypes = Nothing
+    , _lSelfLink = Nothing
+    , _lVolumeId = Nothing
+    , _lId = Nothing
+    , _lUpdated = Nothing
+    , _lLayerId = Nothing
+    }
+
+-- | Link to get data for this annotation.
+lAnnotationsDataLink :: Lens' Layersummary (Maybe Text)
+lAnnotationsDataLink
+  = lens _lAnnotationsDataLink
+      (\ s a -> s{_lAnnotationsDataLink = a})
+
+-- | The link to get the annotations for this layer.
+lAnnotationsLink :: Lens' Layersummary (Maybe Text)
+lAnnotationsLink
+  = lens _lAnnotationsLink
+      (\ s a -> s{_lAnnotationsLink = a})
+
+-- | Resource Type
+lKind :: Lens' Layersummary Text
+lKind = lens _lKind (\ s a -> s{_lKind = a})
+
+-- | The number of data items for this layer.
+lDataCount :: Lens' Layersummary (Maybe Int32)
+lDataCount
+  = lens _lDataCount (\ s a -> s{_lDataCount = a}) .
+      mapping _Coerce
+
+-- | The content version this resource is for.
+lContentVersion :: Lens' Layersummary (Maybe Text)
+lContentVersion
+  = lens _lContentVersion
+      (\ s a -> s{_lContentVersion = a})
+
+-- | The current version of this layer\'s volume annotations. Note that this
+-- version applies only to the data in the books.layers.volumeAnnotations.*
+-- responses. The actual annotation data is versioned separately.
+lVolumeAnnotationsVersion :: Lens' Layersummary (Maybe Text)
+lVolumeAnnotationsVersion
+  = lens _lVolumeAnnotationsVersion
+      (\ s a -> s{_lVolumeAnnotationsVersion = a})
+
+-- | The number of annotations for this layer.
+lAnnotationCount :: Lens' Layersummary (Maybe Int32)
+lAnnotationCount
+  = lens _lAnnotationCount
+      (\ s a -> s{_lAnnotationCount = a})
+      . mapping _Coerce
+
+-- | The list of annotation types contained for this layer.
+lAnnotationTypes :: Lens' Layersummary [Text]
+lAnnotationTypes
+  = lens _lAnnotationTypes
+      (\ s a -> s{_lAnnotationTypes = a})
+      . _Default
+      . _Coerce
+
+-- | URL to this resource.
+lSelfLink :: Lens' Layersummary (Maybe Text)
+lSelfLink
+  = lens _lSelfLink (\ s a -> s{_lSelfLink = a})
+
+-- | The volume id this resource is for.
+lVolumeId :: Lens' Layersummary (Maybe Text)
+lVolumeId
+  = lens _lVolumeId (\ s a -> s{_lVolumeId = a})
+
+-- | Unique id of this layer summary.
+lId :: Lens' Layersummary (Maybe Text)
+lId = lens _lId (\ s a -> s{_lId = a})
+
+-- | Timestamp for the last time an item in this layer was updated. (RFC 3339
+-- UTC date-time format).
+lUpdated :: Lens' Layersummary (Maybe UTCTime)
+lUpdated
+  = lens _lUpdated (\ s a -> s{_lUpdated = a}) .
+      mapping _DateTime
+
+-- | The layer id for this summary.
+lLayerId :: Lens' Layersummary (Maybe Text)
+lLayerId = lens _lLayerId (\ s a -> s{_lLayerId = a})
+
+instance FromJSON Layersummary where
+        parseJSON
+          = withObject "Layersummary"
+              (\ o ->
+                 Layersummary <$>
+                   (o .:? "annotationsDataLink") <*>
+                     (o .:? "annotationsLink")
+                     <*> (o .:? "kind" .!= "books#layersummary")
+                     <*> (o .:? "dataCount")
+                     <*> (o .:? "contentVersion")
+                     <*> (o .:? "volumeAnnotationsVersion")
+                     <*> (o .:? "annotationCount")
+                     <*> (o .:? "annotationTypes" .!= mempty)
+                     <*> (o .:? "selfLink")
+                     <*> (o .:? "volumeId")
+                     <*> (o .:? "id")
+                     <*> (o .:? "updated")
+                     <*> (o .:? "layerId"))
+
+instance ToJSON Layersummary where
+        toJSON Layersummary{..}
+          = object
+              (catMaybes
+                 [("annotationsDataLink" .=) <$>
+                    _lAnnotationsDataLink,
+                  ("annotationsLink" .=) <$> _lAnnotationsLink,
+                  Just ("kind" .= _lKind),
+                  ("dataCount" .=) <$> _lDataCount,
+                  ("contentVersion" .=) <$> _lContentVersion,
+                  ("volumeAnnotationsVersion" .=) <$>
+                    _lVolumeAnnotationsVersion,
+                  ("annotationCount" .=) <$> _lAnnotationCount,
+                  ("annotationTypes" .=) <$> _lAnnotationTypes,
+                  ("selfLink" .=) <$> _lSelfLink,
+                  ("volumeId" .=) <$> _lVolumeId, ("id" .=) <$> _lId,
+                  ("updated" .=) <$> _lUpdated,
+                  ("layerId" .=) <$> _lLayerId])
+
+-- | The content ranges to identify the selected text.
+--
+-- /See:/ 'volumeannotationContentRanges' smart constructor.
+data VolumeannotationContentRanges = VolumeannotationContentRanges
+    { _vcrGbImageRange   :: !(Maybe BooksAnnotationsRange)
+    , _vcrContentVersion :: !(Maybe Text)
+    , _vcrGbTextRange    :: !(Maybe BooksAnnotationsRange)
+    , _vcrCfiRange       :: !(Maybe BooksAnnotationsRange)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'VolumeannotationContentRanges' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'vcrGbImageRange'
+--
+-- * 'vcrContentVersion'
+--
+-- * 'vcrGbTextRange'
+--
+-- * 'vcrCfiRange'
+volumeannotationContentRanges
+    :: VolumeannotationContentRanges
+volumeannotationContentRanges =
+    VolumeannotationContentRanges
+    { _vcrGbImageRange = Nothing
+    , _vcrContentVersion = Nothing
+    , _vcrGbTextRange = Nothing
+    , _vcrCfiRange = Nothing
+    }
+
+-- | Range in GB image format for this annotation for version above.
+vcrGbImageRange :: Lens' VolumeannotationContentRanges (Maybe BooksAnnotationsRange)
+vcrGbImageRange
+  = lens _vcrGbImageRange
+      (\ s a -> s{_vcrGbImageRange = a})
+
+-- | Content version applicable to ranges below.
+vcrContentVersion :: Lens' VolumeannotationContentRanges (Maybe Text)
+vcrContentVersion
+  = lens _vcrContentVersion
+      (\ s a -> s{_vcrContentVersion = a})
+
+-- | Range in GB text format for this annotation for version above.
+vcrGbTextRange :: Lens' VolumeannotationContentRanges (Maybe BooksAnnotationsRange)
+vcrGbTextRange
+  = lens _vcrGbTextRange
+      (\ s a -> s{_vcrGbTextRange = a})
+
+-- | Range in CFI format for this annotation for version above.
+vcrCfiRange :: Lens' VolumeannotationContentRanges (Maybe BooksAnnotationsRange)
+vcrCfiRange
+  = lens _vcrCfiRange (\ s a -> s{_vcrCfiRange = a})
+
+instance FromJSON VolumeannotationContentRanges where
+        parseJSON
+          = withObject "VolumeannotationContentRanges"
+              (\ o ->
+                 VolumeannotationContentRanges <$>
+                   (o .:? "gbImageRange") <*> (o .:? "contentVersion")
+                     <*> (o .:? "gbTextRange")
+                     <*> (o .:? "cfiRange"))
+
+instance ToJSON VolumeannotationContentRanges where
+        toJSON VolumeannotationContentRanges{..}
+          = object
+              (catMaybes
+                 [("gbImageRange" .=) <$> _vcrGbImageRange,
+                  ("contentVersion" .=) <$> _vcrContentVersion,
+                  ("gbTextRange" .=) <$> _vcrGbTextRange,
+                  ("cfiRange" .=) <$> _vcrCfiRange])
+
+-- | Any information about a volume related to reading or obtaining that
+-- volume text. This information can depend on country (books may be public
+-- domain in one country but not in another, e.g.).
+--
+-- /See:/ 'volumeAccessInfo' smart constructor.
+data VolumeAccessInfo = VolumeAccessInfo
+    { _vaiWebReaderLink                    :: !(Maybe Text)
+    , _vaiCountry                          :: !(Maybe Text)
+    , _vaiDriveImportedContentLink         :: !(Maybe Text)
+    , _vaiExplicitOfflineLicenseManagement :: !(Maybe Bool)
+    , _vaiViewability                      :: !(Maybe Text)
+    , _vaiQuoteSharingAllowed              :: !(Maybe Bool)
+    , _vaiEpub                             :: !(Maybe VolumeAccessInfoEpub)
+    , _vaiPdf                              :: !(Maybe VolumeAccessInfoPdf)
+    , _vaiTextToSpeechPermission           :: !(Maybe Text)
+    , _vaiEmbeddable                       :: !(Maybe Bool)
+    , _vaiAccessViewStatus                 :: !(Maybe Text)
+    , _vaiDownloadAccess                   :: !(Maybe DownloadAccessRestriction)
+    , _vaiViewOrderURL                     :: !(Maybe Text)
+    , _vaiPublicDomain                     :: !(Maybe Bool)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'VolumeAccessInfo' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'vaiWebReaderLink'
+--
+-- * 'vaiCountry'
+--
+-- * 'vaiDriveImportedContentLink'
+--
+-- * 'vaiExplicitOfflineLicenseManagement'
+--
+-- * 'vaiViewability'
+--
+-- * 'vaiQuoteSharingAllowed'
+--
+-- * 'vaiEpub'
+--
+-- * 'vaiPdf'
+--
+-- * 'vaiTextToSpeechPermission'
+--
+-- * 'vaiEmbeddable'
+--
+-- * 'vaiAccessViewStatus'
+--
+-- * 'vaiDownloadAccess'
+--
+-- * 'vaiViewOrderURL'
+--
+-- * 'vaiPublicDomain'
+volumeAccessInfo
+    :: VolumeAccessInfo
+volumeAccessInfo =
+    VolumeAccessInfo
+    { _vaiWebReaderLink = Nothing
+    , _vaiCountry = Nothing
+    , _vaiDriveImportedContentLink = Nothing
+    , _vaiExplicitOfflineLicenseManagement = Nothing
+    , _vaiViewability = Nothing
+    , _vaiQuoteSharingAllowed = Nothing
+    , _vaiEpub = Nothing
+    , _vaiPdf = Nothing
+    , _vaiTextToSpeechPermission = Nothing
+    , _vaiEmbeddable = Nothing
+    , _vaiAccessViewStatus = Nothing
+    , _vaiDownloadAccess = Nothing
+    , _vaiViewOrderURL = Nothing
+    , _vaiPublicDomain = Nothing
+    }
+
+-- | URL to read this volume on the Google Books site. Link will not allow
+-- users to read non-viewable volumes.
+vaiWebReaderLink :: Lens' VolumeAccessInfo (Maybe Text)
+vaiWebReaderLink
+  = lens _vaiWebReaderLink
+      (\ s a -> s{_vaiWebReaderLink = a})
+
+-- | The two-letter ISO_3166-1 country code for which this access information
+-- is valid. (In LITE projection.)
+vaiCountry :: Lens' VolumeAccessInfo (Maybe Text)
+vaiCountry
+  = lens _vaiCountry (\ s a -> s{_vaiCountry = a})
+
+-- | URL to the Google Drive viewer if this volume is uploaded by the user by
+-- selecting the file from Google Drive.
+vaiDriveImportedContentLink :: Lens' VolumeAccessInfo (Maybe Text)
+vaiDriveImportedContentLink
+  = lens _vaiDriveImportedContentLink
+      (\ s a -> s{_vaiDriveImportedContentLink = a})
+
+-- | Whether this volume requires that the client explicitly request offline
+-- download license rather than have it done automatically when loading the
+-- content, if the client supports it.
+vaiExplicitOfflineLicenseManagement :: Lens' VolumeAccessInfo (Maybe Bool)
+vaiExplicitOfflineLicenseManagement
+  = lens _vaiExplicitOfflineLicenseManagement
+      (\ s a ->
+         s{_vaiExplicitOfflineLicenseManagement = a})
+
+-- | The read access of a volume. Possible values are PARTIAL, ALL_PAGES,
+-- NO_PAGES or UNKNOWN. This value depends on the country listed above. A
+-- value of PARTIAL means that the publisher has allowed some portion of
+-- the volume to be viewed publicly, without purchase. This can apply to
+-- eBooks as well as non-eBooks. Public domain books will always have a
+-- value of ALL_PAGES.
+vaiViewability :: Lens' VolumeAccessInfo (Maybe Text)
+vaiViewability
+  = lens _vaiViewability
+      (\ s a -> s{_vaiViewability = a})
+
+-- | Whether quote sharing is allowed for this volume.
+vaiQuoteSharingAllowed :: Lens' VolumeAccessInfo (Maybe Bool)
+vaiQuoteSharingAllowed
+  = lens _vaiQuoteSharingAllowed
+      (\ s a -> s{_vaiQuoteSharingAllowed = a})
+
+-- | Information about epub content. (In LITE projection.)
+vaiEpub :: Lens' VolumeAccessInfo (Maybe VolumeAccessInfoEpub)
+vaiEpub = lens _vaiEpub (\ s a -> s{_vaiEpub = a})
+
+-- | Information about pdf content. (In LITE projection.)
+vaiPdf :: Lens' VolumeAccessInfo (Maybe VolumeAccessInfoPdf)
+vaiPdf = lens _vaiPdf (\ s a -> s{_vaiPdf = a})
+
+-- | Whether text-to-speech is permitted for this volume. Values can be
+-- ALLOWED, ALLOWED_FOR_ACCESSIBILITY, or NOT_ALLOWED.
+vaiTextToSpeechPermission :: Lens' VolumeAccessInfo (Maybe Text)
+vaiTextToSpeechPermission
+  = lens _vaiTextToSpeechPermission
+      (\ s a -> s{_vaiTextToSpeechPermission = a})
+
+-- | Whether this volume can be embedded in a viewport using the Embedded
+-- Viewer API.
+vaiEmbeddable :: Lens' VolumeAccessInfo (Maybe Bool)
+vaiEmbeddable
+  = lens _vaiEmbeddable
+      (\ s a -> s{_vaiEmbeddable = a})
+
+-- | Combines the access and viewability of this volume into a single status
+-- field for this user. Values can be FULL_PURCHASED, FULL_PUBLIC_DOMAIN,
+-- SAMPLE or NONE. (In LITE projection.)
+vaiAccessViewStatus :: Lens' VolumeAccessInfo (Maybe Text)
+vaiAccessViewStatus
+  = lens _vaiAccessViewStatus
+      (\ s a -> s{_vaiAccessViewStatus = a})
+
+-- | Information about a volume\'s download license access restrictions.
+vaiDownloadAccess :: Lens' VolumeAccessInfo (Maybe DownloadAccessRestriction)
+vaiDownloadAccess
+  = lens _vaiDownloadAccess
+      (\ s a -> s{_vaiDownloadAccess = a})
+
+-- | For ordered but not yet processed orders, we give a URL that can be used
+-- to go to the appropriate Google Wallet page.
+vaiViewOrderURL :: Lens' VolumeAccessInfo (Maybe Text)
+vaiViewOrderURL
+  = lens _vaiViewOrderURL
+      (\ s a -> s{_vaiViewOrderURL = a})
+
+-- | Whether or not this book is public domain in the country listed above.
+vaiPublicDomain :: Lens' VolumeAccessInfo (Maybe Bool)
+vaiPublicDomain
+  = lens _vaiPublicDomain
+      (\ s a -> s{_vaiPublicDomain = a})
+
+instance FromJSON VolumeAccessInfo where
+        parseJSON
+          = withObject "VolumeAccessInfo"
+              (\ o ->
+                 VolumeAccessInfo <$>
+                   (o .:? "webReaderLink") <*> (o .:? "country") <*>
+                     (o .:? "driveImportedContentLink")
+                     <*> (o .:? "explicitOfflineLicenseManagement")
+                     <*> (o .:? "viewability")
+                     <*> (o .:? "quoteSharingAllowed")
+                     <*> (o .:? "epub")
+                     <*> (o .:? "pdf")
+                     <*> (o .:? "textToSpeechPermission")
+                     <*> (o .:? "embeddable")
+                     <*> (o .:? "accessViewStatus")
+                     <*> (o .:? "downloadAccess")
+                     <*> (o .:? "viewOrderUrl")
+                     <*> (o .:? "publicDomain"))
+
+instance ToJSON VolumeAccessInfo where
+        toJSON VolumeAccessInfo{..}
+          = object
+              (catMaybes
+                 [("webReaderLink" .=) <$> _vaiWebReaderLink,
+                  ("country" .=) <$> _vaiCountry,
+                  ("driveImportedContentLink" .=) <$>
+                    _vaiDriveImportedContentLink,
+                  ("explicitOfflineLicenseManagement" .=) <$>
+                    _vaiExplicitOfflineLicenseManagement,
+                  ("viewability" .=) <$> _vaiViewability,
+                  ("quoteSharingAllowed" .=) <$>
+                    _vaiQuoteSharingAllowed,
+                  ("epub" .=) <$> _vaiEpub, ("pdf" .=) <$> _vaiPdf,
+                  ("textToSpeechPermission" .=) <$>
+                    _vaiTextToSpeechPermission,
+                  ("embeddable" .=) <$> _vaiEmbeddable,
+                  ("accessViewStatus" .=) <$> _vaiAccessViewStatus,
+                  ("downloadAccess" .=) <$> _vaiDownloadAccess,
+                  ("viewOrderUrl" .=) <$> _vaiViewOrderURL,
+                  ("publicDomain" .=) <$> _vaiPublicDomain])
+
+-- | A list of image links for all the sizes that are available. (In LITE
+-- projection.)
+--
+-- /See:/ 'volumeVolumeInfoImageLinks' smart constructor.
+data VolumeVolumeInfoImageLinks = VolumeVolumeInfoImageLinks
+    { _vviilThumbnail      :: !(Maybe Text)
+    , _vviilSmall          :: !(Maybe Text)
+    , _vviilExtraLarge     :: !(Maybe Text)
+    , _vviilLarge          :: !(Maybe Text)
+    , _vviilMedium         :: !(Maybe Text)
+    , _vviilSmallThumbnail :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'VolumeVolumeInfoImageLinks' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'vviilThumbnail'
+--
+-- * 'vviilSmall'
+--
+-- * 'vviilExtraLarge'
+--
+-- * 'vviilLarge'
+--
+-- * 'vviilMedium'
+--
+-- * 'vviilSmallThumbnail'
+volumeVolumeInfoImageLinks
+    :: VolumeVolumeInfoImageLinks
+volumeVolumeInfoImageLinks =
+    VolumeVolumeInfoImageLinks
+    { _vviilThumbnail = Nothing
+    , _vviilSmall = Nothing
+    , _vviilExtraLarge = Nothing
+    , _vviilLarge = Nothing
+    , _vviilMedium = Nothing
+    , _vviilSmallThumbnail = Nothing
+    }
+
+-- | Image link for thumbnail size (width of ~128 pixels). (In LITE
+-- projection)
+vviilThumbnail :: Lens' VolumeVolumeInfoImageLinks (Maybe Text)
+vviilThumbnail
+  = lens _vviilThumbnail
+      (\ s a -> s{_vviilThumbnail = a})
+
+-- | Image link for small size (width of ~300 pixels). (In LITE projection)
+vviilSmall :: Lens' VolumeVolumeInfoImageLinks (Maybe Text)
+vviilSmall
+  = lens _vviilSmall (\ s a -> s{_vviilSmall = a})
+
+-- | Image link for extra large size (width of ~1280 pixels). (In LITE
+-- projection)
+vviilExtraLarge :: Lens' VolumeVolumeInfoImageLinks (Maybe Text)
+vviilExtraLarge
+  = lens _vviilExtraLarge
+      (\ s a -> s{_vviilExtraLarge = a})
+
+-- | Image link for large size (width of ~800 pixels). (In LITE projection)
+vviilLarge :: Lens' VolumeVolumeInfoImageLinks (Maybe Text)
+vviilLarge
+  = lens _vviilLarge (\ s a -> s{_vviilLarge = a})
+
+-- | Image link for medium size (width of ~575 pixels). (In LITE projection)
+vviilMedium :: Lens' VolumeVolumeInfoImageLinks (Maybe Text)
+vviilMedium
+  = lens _vviilMedium (\ s a -> s{_vviilMedium = a})
+
+-- | Image link for small thumbnail size (width of ~80 pixels). (In LITE
+-- projection)
+vviilSmallThumbnail :: Lens' VolumeVolumeInfoImageLinks (Maybe Text)
+vviilSmallThumbnail
+  = lens _vviilSmallThumbnail
+      (\ s a -> s{_vviilSmallThumbnail = a})
+
+instance FromJSON VolumeVolumeInfoImageLinks where
+        parseJSON
+          = withObject "VolumeVolumeInfoImageLinks"
+              (\ o ->
+                 VolumeVolumeInfoImageLinks <$>
+                   (o .:? "thumbnail") <*> (o .:? "small") <*>
+                     (o .:? "extraLarge")
+                     <*> (o .:? "large")
+                     <*> (o .:? "medium")
+                     <*> (o .:? "smallThumbnail"))
+
+instance ToJSON VolumeVolumeInfoImageLinks where
+        toJSON VolumeVolumeInfoImageLinks{..}
+          = object
+              (catMaybes
+                 [("thumbnail" .=) <$> _vviilThumbnail,
+                  ("small" .=) <$> _vviilSmall,
+                  ("extraLarge" .=) <$> _vviilExtraLarge,
+                  ("large" .=) <$> _vviilLarge,
+                  ("medium" .=) <$> _vviilMedium,
+                  ("smallThumbnail" .=) <$> _vviilSmallThumbnail])
+
+--
+-- /See:/ 'volumeUserInfoUserUploadedVolumeInfo' smart constructor.
+newtype VolumeUserInfoUserUploadedVolumeInfo = VolumeUserInfoUserUploadedVolumeInfo
+    { _vuiuuviProcessingState :: Maybe Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'VolumeUserInfoUserUploadedVolumeInfo' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'vuiuuviProcessingState'
+volumeUserInfoUserUploadedVolumeInfo
+    :: VolumeUserInfoUserUploadedVolumeInfo
+volumeUserInfoUserUploadedVolumeInfo =
+    VolumeUserInfoUserUploadedVolumeInfo
+    { _vuiuuviProcessingState = Nothing
+    }
+
+vuiuuviProcessingState :: Lens' VolumeUserInfoUserUploadedVolumeInfo (Maybe Text)
+vuiuuviProcessingState
+  = lens _vuiuuviProcessingState
+      (\ s a -> s{_vuiuuviProcessingState = a})
+
+instance FromJSON
+         VolumeUserInfoUserUploadedVolumeInfo where
+        parseJSON
+          = withObject "VolumeUserInfoUserUploadedVolumeInfo"
+              (\ o ->
+                 VolumeUserInfoUserUploadedVolumeInfo <$>
+                   (o .:? "processingState"))
+
+instance ToJSON VolumeUserInfoUserUploadedVolumeInfo
+         where
+        toJSON VolumeUserInfoUserUploadedVolumeInfo{..}
+          = object
+              (catMaybes
+                 [("processingState" .=) <$> _vuiuuviProcessingState])
+
+-- | Copy\/Paste accounting information.
+--
+-- /See:/ 'volumeUserInfoCopy' smart constructor.
+data VolumeUserInfoCopy = VolumeUserInfoCopy
+    { _vuicLimitType               :: !(Maybe Text)
+    , _vuicAllowedCharacterCount   :: !(Maybe (Textual Int32))
+    , _vuicUpdated                 :: !(Maybe DateTime')
+    , _vuicRemainingCharacterCount :: !(Maybe (Textual Int32))
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'VolumeUserInfoCopy' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'vuicLimitType'
+--
+-- * 'vuicAllowedCharacterCount'
+--
+-- * 'vuicUpdated'
+--
+-- * 'vuicRemainingCharacterCount'
+volumeUserInfoCopy
+    :: VolumeUserInfoCopy
+volumeUserInfoCopy =
+    VolumeUserInfoCopy
+    { _vuicLimitType = Nothing
+    , _vuicAllowedCharacterCount = Nothing
+    , _vuicUpdated = Nothing
+    , _vuicRemainingCharacterCount = Nothing
+    }
+
+vuicLimitType :: Lens' VolumeUserInfoCopy (Maybe Text)
+vuicLimitType
+  = lens _vuicLimitType
+      (\ s a -> s{_vuicLimitType = a})
+
+vuicAllowedCharacterCount :: Lens' VolumeUserInfoCopy (Maybe Int32)
+vuicAllowedCharacterCount
+  = lens _vuicAllowedCharacterCount
+      (\ s a -> s{_vuicAllowedCharacterCount = a})
+      . mapping _Coerce
+
+vuicUpdated :: Lens' VolumeUserInfoCopy (Maybe UTCTime)
+vuicUpdated
+  = lens _vuicUpdated (\ s a -> s{_vuicUpdated = a}) .
+      mapping _DateTime
+
+vuicRemainingCharacterCount :: Lens' VolumeUserInfoCopy (Maybe Int32)
+vuicRemainingCharacterCount
+  = lens _vuicRemainingCharacterCount
+      (\ s a -> s{_vuicRemainingCharacterCount = a})
+      . mapping _Coerce
+
+instance FromJSON VolumeUserInfoCopy where
+        parseJSON
+          = withObject "VolumeUserInfoCopy"
+              (\ o ->
+                 VolumeUserInfoCopy <$>
+                   (o .:? "limitType") <*>
+                     (o .:? "allowedCharacterCount")
+                     <*> (o .:? "updated")
+                     <*> (o .:? "remainingCharacterCount"))
+
+instance ToJSON VolumeUserInfoCopy where
+        toJSON VolumeUserInfoCopy{..}
+          = object
+              (catMaybes
+                 [("limitType" .=) <$> _vuicLimitType,
+                  ("allowedCharacterCount" .=) <$>
+                    _vuicAllowedCharacterCount,
+                  ("updated" .=) <$> _vuicUpdated,
+                  ("remainingCharacterCount" .=) <$>
+                    _vuicRemainingCharacterCount])
+
+--
+-- /See:/ 'booksVolumesRecommendedRateResponse' smart constructor.
+newtype BooksVolumesRecommendedRateResponse = BooksVolumesRecommendedRateResponse
+    { _bvrrrConsistencyToken :: Maybe Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'BooksVolumesRecommendedRateResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'bvrrrConsistencyToken'
+booksVolumesRecommendedRateResponse
+    :: BooksVolumesRecommendedRateResponse
+booksVolumesRecommendedRateResponse =
+    BooksVolumesRecommendedRateResponse
+    { _bvrrrConsistencyToken = Nothing
+    }
+
+bvrrrConsistencyToken :: Lens' BooksVolumesRecommendedRateResponse (Maybe Text)
+bvrrrConsistencyToken
+  = lens _bvrrrConsistencyToken
+      (\ s a -> s{_bvrrrConsistencyToken = a})
+
+instance FromJSON BooksVolumesRecommendedRateResponse
+         where
+        parseJSON
+          = withObject "BooksVolumesRecommendedRateResponse"
+              (\ o ->
+                 BooksVolumesRecommendedRateResponse <$>
+                   (o .:? "consistency_token"))
+
+instance ToJSON BooksVolumesRecommendedRateResponse
+         where
+        toJSON BooksVolumesRecommendedRateResponse{..}
+          = object
+              (catMaybes
+                 [("consistency_token" .=) <$>
+                    _bvrrrConsistencyToken])
+
+--
+-- /See:/ 'bookshelf' smart constructor.
+data Bookshelf = Bookshelf
+    { _bAccess             :: !(Maybe Text)
+    , _bVolumesLastUpdated :: !(Maybe DateTime')
+    , _bKind               :: !Text
+    , _bCreated            :: !(Maybe DateTime')
+    , _bVolumeCount        :: !(Maybe (Textual Int32))
+    , _bSelfLink           :: !(Maybe Text)
+    , _bId                 :: !(Maybe (Textual Int32))
+    , _bUpdated            :: !(Maybe DateTime')
+    , _bTitle              :: !(Maybe Text)
+    , _bDescription        :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Bookshelf' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'bAccess'
+--
+-- * 'bVolumesLastUpdated'
+--
+-- * 'bKind'
+--
+-- * 'bCreated'
+--
+-- * 'bVolumeCount'
+--
+-- * 'bSelfLink'
+--
+-- * 'bId'
+--
+-- * 'bUpdated'
+--
+-- * 'bTitle'
+--
+-- * 'bDescription'
+bookshelf
+    :: Bookshelf
+bookshelf =
+    Bookshelf
+    { _bAccess = Nothing
+    , _bVolumesLastUpdated = Nothing
+    , _bKind = "books#bookshelf"
+    , _bCreated = Nothing
+    , _bVolumeCount = Nothing
+    , _bSelfLink = Nothing
+    , _bId = Nothing
+    , _bUpdated = Nothing
+    , _bTitle = Nothing
+    , _bDescription = Nothing
+    }
+
+-- | Whether this bookshelf is PUBLIC or PRIVATE.
+bAccess :: Lens' Bookshelf (Maybe Text)
+bAccess = lens _bAccess (\ s a -> s{_bAccess = a})
+
+-- | Last time a volume was added or removed from this bookshelf (formatted
+-- UTC timestamp with millisecond resolution).
+bVolumesLastUpdated :: Lens' Bookshelf (Maybe UTCTime)
+bVolumesLastUpdated
+  = lens _bVolumesLastUpdated
+      (\ s a -> s{_bVolumesLastUpdated = a})
+      . mapping _DateTime
+
+-- | Resource type for bookshelf metadata.
+bKind :: Lens' Bookshelf Text
+bKind = lens _bKind (\ s a -> s{_bKind = a})
+
+-- | Created time for this bookshelf (formatted UTC timestamp with
+-- millisecond resolution).
+bCreated :: Lens' Bookshelf (Maybe UTCTime)
+bCreated
+  = lens _bCreated (\ s a -> s{_bCreated = a}) .
+      mapping _DateTime
+
+-- | Number of volumes in this bookshelf.
+bVolumeCount :: Lens' Bookshelf (Maybe Int32)
+bVolumeCount
+  = lens _bVolumeCount (\ s a -> s{_bVolumeCount = a})
+      . mapping _Coerce
+
+-- | URL to this resource.
+bSelfLink :: Lens' Bookshelf (Maybe Text)
+bSelfLink
+  = lens _bSelfLink (\ s a -> s{_bSelfLink = a})
+
+-- | Id of this bookshelf, only unique by user.
+bId :: Lens' Bookshelf (Maybe Int32)
+bId
+  = lens _bId (\ s a -> s{_bId = a}) . mapping _Coerce
+
+-- | Last modified time of this bookshelf (formatted UTC timestamp with
+-- millisecond resolution).
+bUpdated :: Lens' Bookshelf (Maybe UTCTime)
+bUpdated
+  = lens _bUpdated (\ s a -> s{_bUpdated = a}) .
+      mapping _DateTime
+
+-- | Title of this bookshelf.
+bTitle :: Lens' Bookshelf (Maybe Text)
+bTitle = lens _bTitle (\ s a -> s{_bTitle = a})
+
+-- | Description of this bookshelf.
+bDescription :: Lens' Bookshelf (Maybe Text)
+bDescription
+  = lens _bDescription (\ s a -> s{_bDescription = a})
+
+instance FromJSON Bookshelf where
+        parseJSON
+          = withObject "Bookshelf"
+              (\ o ->
+                 Bookshelf <$>
+                   (o .:? "access") <*> (o .:? "volumesLastUpdated") <*>
+                     (o .:? "kind" .!= "books#bookshelf")
+                     <*> (o .:? "created")
+                     <*> (o .:? "volumeCount")
+                     <*> (o .:? "selfLink")
+                     <*> (o .:? "id")
+                     <*> (o .:? "updated")
+                     <*> (o .:? "title")
+                     <*> (o .:? "description"))
+
+instance ToJSON Bookshelf where
+        toJSON Bookshelf{..}
+          = object
+              (catMaybes
+                 [("access" .=) <$> _bAccess,
+                  ("volumesLastUpdated" .=) <$> _bVolumesLastUpdated,
+                  Just ("kind" .= _bKind),
+                  ("created" .=) <$> _bCreated,
+                  ("volumeCount" .=) <$> _bVolumeCount,
+                  ("selfLink" .=) <$> _bSelfLink, ("id" .=) <$> _bId,
+                  ("updated" .=) <$> _bUpdated,
+                  ("title" .=) <$> _bTitle,
+                  ("description" .=) <$> _bDescription])
+
+--
+-- /See:/ 'notification' smart constructor.
+data Notification = Notification
+    { _nKind    :: !Text
+    , _nBody    :: !(Maybe Text)
+    , _nLinkURL :: !(Maybe Text)
+    , _nIconURL :: !(Maybe Text)
+    , _nTitle   :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Notification' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'nKind'
+--
+-- * 'nBody'
+--
+-- * 'nLinkURL'
+--
+-- * 'nIconURL'
+--
+-- * 'nTitle'
+notification
+    :: Notification
+notification =
+    Notification
+    { _nKind = "books#notification"
+    , _nBody = Nothing
+    , _nLinkURL = Nothing
+    , _nIconURL = Nothing
+    , _nTitle = Nothing
+    }
+
+-- | Resource type.
+nKind :: Lens' Notification Text
+nKind = lens _nKind (\ s a -> s{_nKind = a})
+
+nBody :: Lens' Notification (Maybe Text)
+nBody = lens _nBody (\ s a -> s{_nBody = a})
+
+nLinkURL :: Lens' Notification (Maybe Text)
+nLinkURL = lens _nLinkURL (\ s a -> s{_nLinkURL = a})
+
+nIconURL :: Lens' Notification (Maybe Text)
+nIconURL = lens _nIconURL (\ s a -> s{_nIconURL = a})
+
+nTitle :: Lens' Notification (Maybe Text)
+nTitle = lens _nTitle (\ s a -> s{_nTitle = a})
+
+instance FromJSON Notification where
+        parseJSON
+          = withObject "Notification"
+              (\ o ->
+                 Notification <$>
+                   (o .:? "kind" .!= "books#notification") <*>
+                     (o .:? "body")
+                     <*> (o .:? "linkUrl")
+                     <*> (o .:? "iconUrl")
+                     <*> (o .:? "title"))
+
+instance ToJSON Notification where
+        toJSON Notification{..}
+          = object
+              (catMaybes
+                 [Just ("kind" .= _nKind), ("body" .=) <$> _nBody,
+                  ("linkUrl" .=) <$> _nLinkURL,
+                  ("iconUrl" .=) <$> _nIconURL,
+                  ("title" .=) <$> _nTitle])
+
+--
+-- /See:/ 'annotationsSummaryLayersItem' smart constructor.
+data AnnotationsSummaryLayersItem = AnnotationsSummaryLayersItem
+    { _asliLimitType               :: !(Maybe Text)
+    , _asliAllowedCharacterCount   :: !(Maybe (Textual Int32))
+    , _asliUpdated                 :: !(Maybe DateTime')
+    , _asliLayerId                 :: !(Maybe Text)
+    , _asliRemainingCharacterCount :: !(Maybe (Textual Int32))
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'AnnotationsSummaryLayersItem' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'asliLimitType'
+--
+-- * 'asliAllowedCharacterCount'
+--
+-- * 'asliUpdated'
+--
+-- * 'asliLayerId'
+--
+-- * 'asliRemainingCharacterCount'
+annotationsSummaryLayersItem
+    :: AnnotationsSummaryLayersItem
+annotationsSummaryLayersItem =
+    AnnotationsSummaryLayersItem
+    { _asliLimitType = Nothing
+    , _asliAllowedCharacterCount = Nothing
+    , _asliUpdated = Nothing
+    , _asliLayerId = Nothing
+    , _asliRemainingCharacterCount = Nothing
+    }
+
+asliLimitType :: Lens' AnnotationsSummaryLayersItem (Maybe Text)
+asliLimitType
+  = lens _asliLimitType
+      (\ s a -> s{_asliLimitType = a})
+
+asliAllowedCharacterCount :: Lens' AnnotationsSummaryLayersItem (Maybe Int32)
+asliAllowedCharacterCount
+  = lens _asliAllowedCharacterCount
+      (\ s a -> s{_asliAllowedCharacterCount = a})
+      . mapping _Coerce
+
+asliUpdated :: Lens' AnnotationsSummaryLayersItem (Maybe UTCTime)
+asliUpdated
+  = lens _asliUpdated (\ s a -> s{_asliUpdated = a}) .
+      mapping _DateTime
+
+asliLayerId :: Lens' AnnotationsSummaryLayersItem (Maybe Text)
+asliLayerId
+  = lens _asliLayerId (\ s a -> s{_asliLayerId = a})
+
+asliRemainingCharacterCount :: Lens' AnnotationsSummaryLayersItem (Maybe Int32)
+asliRemainingCharacterCount
+  = lens _asliRemainingCharacterCount
+      (\ s a -> s{_asliRemainingCharacterCount = a})
+      . mapping _Coerce
+
+instance FromJSON AnnotationsSummaryLayersItem where
+        parseJSON
+          = withObject "AnnotationsSummaryLayersItem"
+              (\ o ->
+                 AnnotationsSummaryLayersItem <$>
+                   (o .:? "limitType") <*>
+                     (o .:? "allowedCharacterCount")
+                     <*> (o .:? "updated")
+                     <*> (o .:? "layerId")
+                     <*> (o .:? "remainingCharacterCount"))
+
+instance ToJSON AnnotationsSummaryLayersItem where
+        toJSON AnnotationsSummaryLayersItem{..}
+          = object
+              (catMaybes
+                 [("limitType" .=) <$> _asliLimitType,
+                  ("allowedCharacterCount" .=) <$>
+                    _asliAllowedCharacterCount,
+                  ("updated" .=) <$> _asliUpdated,
+                  ("layerId" .=) <$> _asliLayerId,
+                  ("remainingCharacterCount" .=) <$>
+                    _asliRemainingCharacterCount])
+
+-- | The rental duration (for rental offers only).
+--
+-- /See:/ 'volumeSaleInfoOffersItemRentalDuration' smart constructor.
+data VolumeSaleInfoOffersItemRentalDuration = VolumeSaleInfoOffersItemRentalDuration
+    { _vsioirdCount :: !(Maybe (Textual Double))
+    , _vsioirdUnit  :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'VolumeSaleInfoOffersItemRentalDuration' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'vsioirdCount'
+--
+-- * 'vsioirdUnit'
+volumeSaleInfoOffersItemRentalDuration
+    :: VolumeSaleInfoOffersItemRentalDuration
+volumeSaleInfoOffersItemRentalDuration =
+    VolumeSaleInfoOffersItemRentalDuration
+    { _vsioirdCount = Nothing
+    , _vsioirdUnit = Nothing
+    }
+
+vsioirdCount :: Lens' VolumeSaleInfoOffersItemRentalDuration (Maybe Double)
+vsioirdCount
+  = lens _vsioirdCount (\ s a -> s{_vsioirdCount = a})
+      . mapping _Coerce
+
+vsioirdUnit :: Lens' VolumeSaleInfoOffersItemRentalDuration (Maybe Text)
+vsioirdUnit
+  = lens _vsioirdUnit (\ s a -> s{_vsioirdUnit = a})
+
+instance FromJSON
+         VolumeSaleInfoOffersItemRentalDuration where
+        parseJSON
+          = withObject "VolumeSaleInfoOffersItemRentalDuration"
+              (\ o ->
+                 VolumeSaleInfoOffersItemRentalDuration <$>
+                   (o .:? "count") <*> (o .:? "unit"))
+
+instance ToJSON
+         VolumeSaleInfoOffersItemRentalDuration where
+        toJSON VolumeSaleInfoOffersItemRentalDuration{..}
+          = object
+              (catMaybes
+                 [("count" .=) <$> _vsioirdCount,
+                  ("unit" .=) <$> _vsioirdUnit])
+
+--
+-- /See:/ 'dictlayerDataDictWordsItemExamplesItem' smart constructor.
+data DictlayerDataDictWordsItemExamplesItem = DictlayerDataDictWordsItemExamplesItem
+    { _dddwieiText   :: !(Maybe Text)
+    , _dddwieiSource :: !(Maybe DictlayerDataDictWordsItemExamplesItemSource)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DictlayerDataDictWordsItemExamplesItem' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dddwieiText'
+--
+-- * 'dddwieiSource'
+dictlayerDataDictWordsItemExamplesItem
+    :: DictlayerDataDictWordsItemExamplesItem
+dictlayerDataDictWordsItemExamplesItem =
+    DictlayerDataDictWordsItemExamplesItem
+    { _dddwieiText = Nothing
+    , _dddwieiSource = Nothing
+    }
+
+dddwieiText :: Lens' DictlayerDataDictWordsItemExamplesItem (Maybe Text)
+dddwieiText
+  = lens _dddwieiText (\ s a -> s{_dddwieiText = a})
+
+dddwieiSource :: Lens' DictlayerDataDictWordsItemExamplesItem (Maybe DictlayerDataDictWordsItemExamplesItemSource)
+dddwieiSource
+  = lens _dddwieiSource
+      (\ s a -> s{_dddwieiSource = a})
+
+instance FromJSON
+         DictlayerDataDictWordsItemExamplesItem where
+        parseJSON
+          = withObject "DictlayerDataDictWordsItemExamplesItem"
+              (\ o ->
+                 DictlayerDataDictWordsItemExamplesItem <$>
+                   (o .:? "text") <*> (o .:? "source"))
+
+instance ToJSON
+         DictlayerDataDictWordsItemExamplesItem where
+        toJSON DictlayerDataDictWordsItemExamplesItem{..}
+          = object
+              (catMaybes
+                 [("text" .=) <$> _dddwieiText,
+                  ("source" .=) <$> _dddwieiSource])
+
+--
+-- /See:/ 'offersItemsItem' smart constructor.
+data OffersItemsItem = OffersItemsItem
+    { _oiiItems        :: !(Maybe [OffersItemsItemItemsItem])
+    , _oiiArtURL       :: !(Maybe Text)
+    , _oiiId           :: !(Maybe Text)
+    , _oiiGServicesKey :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'OffersItemsItem' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'oiiItems'
+--
+-- * 'oiiArtURL'
+--
+-- * 'oiiId'
+--
+-- * 'oiiGServicesKey'
+offersItemsItem
+    :: OffersItemsItem
+offersItemsItem =
+    OffersItemsItem
+    { _oiiItems = Nothing
+    , _oiiArtURL = Nothing
+    , _oiiId = Nothing
+    , _oiiGServicesKey = Nothing
+    }
+
+oiiItems :: Lens' OffersItemsItem [OffersItemsItemItemsItem]
+oiiItems
+  = lens _oiiItems (\ s a -> s{_oiiItems = a}) .
+      _Default
+      . _Coerce
+
+oiiArtURL :: Lens' OffersItemsItem (Maybe Text)
+oiiArtURL
+  = lens _oiiArtURL (\ s a -> s{_oiiArtURL = a})
+
+oiiId :: Lens' OffersItemsItem (Maybe Text)
+oiiId = lens _oiiId (\ s a -> s{_oiiId = a})
+
+oiiGServicesKey :: Lens' OffersItemsItem (Maybe Text)
+oiiGServicesKey
+  = lens _oiiGServicesKey
+      (\ s a -> s{_oiiGServicesKey = a})
+
+instance FromJSON OffersItemsItem where
+        parseJSON
+          = withObject "OffersItemsItem"
+              (\ o ->
+                 OffersItemsItem <$>
+                   (o .:? "items" .!= mempty) <*> (o .:? "artUrl") <*>
+                     (o .:? "id")
+                     <*> (o .:? "gservicesKey"))
+
+instance ToJSON OffersItemsItem where
+        toJSON OffersItemsItem{..}
+          = object
+              (catMaybes
+                 [("items" .=) <$> _oiiItems,
+                  ("artUrl" .=) <$> _oiiArtURL, ("id" .=) <$> _oiiId,
+                  ("gservicesKey" .=) <$> _oiiGServicesKey])
+
+--
+-- /See:/ 'annotationLayerSummary' smart constructor.
+data AnnotationLayerSummary = AnnotationLayerSummary
+    { _alsLimitType               :: !(Maybe Text)
+    , _alsAllowedCharacterCount   :: !(Maybe (Textual Int32))
+    , _alsRemainingCharacterCount :: !(Maybe (Textual Int32))
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'AnnotationLayerSummary' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'alsLimitType'
+--
+-- * 'alsAllowedCharacterCount'
+--
+-- * 'alsRemainingCharacterCount'
+annotationLayerSummary
+    :: AnnotationLayerSummary
+annotationLayerSummary =
+    AnnotationLayerSummary
+    { _alsLimitType = Nothing
+    , _alsAllowedCharacterCount = Nothing
+    , _alsRemainingCharacterCount = Nothing
+    }
+
+-- | Type of limitation on this layer. \"limited\" or \"unlimited\" for the
+-- \"copy\" layer.
+alsLimitType :: Lens' AnnotationLayerSummary (Maybe Text)
+alsLimitType
+  = lens _alsLimitType (\ s a -> s{_alsLimitType = a})
+
+-- | Maximum allowed characters on this layer, especially for the \"copy\"
+-- layer.
+alsAllowedCharacterCount :: Lens' AnnotationLayerSummary (Maybe Int32)
+alsAllowedCharacterCount
+  = lens _alsAllowedCharacterCount
+      (\ s a -> s{_alsAllowedCharacterCount = a})
+      . mapping _Coerce
+
+-- | Remaining allowed characters on this layer, especially for the \"copy\"
+-- layer.
+alsRemainingCharacterCount :: Lens' AnnotationLayerSummary (Maybe Int32)
+alsRemainingCharacterCount
+  = lens _alsRemainingCharacterCount
+      (\ s a -> s{_alsRemainingCharacterCount = a})
+      . mapping _Coerce
+
+instance FromJSON AnnotationLayerSummary where
+        parseJSON
+          = withObject "AnnotationLayerSummary"
+              (\ o ->
+                 AnnotationLayerSummary <$>
+                   (o .:? "limitType") <*>
+                     (o .:? "allowedCharacterCount")
+                     <*> (o .:? "remainingCharacterCount"))
+
+instance ToJSON AnnotationLayerSummary where
+        toJSON AnnotationLayerSummary{..}
+          = object
+              (catMaybes
+                 [("limitType" .=) <$> _alsLimitType,
+                  ("allowedCharacterCount" .=) <$>
+                    _alsAllowedCharacterCount,
+                  ("remainingCharacterCount" .=) <$>
+                    _alsRemainingCharacterCount])
+
+-- | Search result information related to this volume.
+--
+-- /See:/ 'volumeSearchInfo' smart constructor.
+newtype VolumeSearchInfo = VolumeSearchInfo
+    { _vsiTextSnippet :: Maybe Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'VolumeSearchInfo' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'vsiTextSnippet'
+volumeSearchInfo
+    :: VolumeSearchInfo
+volumeSearchInfo =
+    VolumeSearchInfo
+    { _vsiTextSnippet = Nothing
+    }
+
+-- | A text snippet containing the search query.
+vsiTextSnippet :: Lens' VolumeSearchInfo (Maybe Text)
+vsiTextSnippet
+  = lens _vsiTextSnippet
+      (\ s a -> s{_vsiTextSnippet = a})
+
+instance FromJSON VolumeSearchInfo where
+        parseJSON
+          = withObject "VolumeSearchInfo"
+              (\ o -> VolumeSearchInfo <$> (o .:? "textSnippet"))
+
+instance ToJSON VolumeSearchInfo where
+        toJSON VolumeSearchInfo{..}
+          = object
+              (catMaybes [("textSnippet" .=) <$> _vsiTextSnippet])
+
+--
+-- /See:/ 'annotationsSummary' smart constructor.
+data AnnotationsSummary = AnnotationsSummary
+    { _asKind   :: !Text
+    , _asLayers :: !(Maybe [AnnotationsSummaryLayersItem])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'AnnotationsSummary' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'asKind'
+--
+-- * 'asLayers'
+annotationsSummary
+    :: AnnotationsSummary
+annotationsSummary =
+    AnnotationsSummary
+    { _asKind = "books#annotationsSummary"
+    , _asLayers = Nothing
+    }
+
+asKind :: Lens' AnnotationsSummary Text
+asKind = lens _asKind (\ s a -> s{_asKind = a})
+
+asLayers :: Lens' AnnotationsSummary [AnnotationsSummaryLayersItem]
+asLayers
+  = lens _asLayers (\ s a -> s{_asLayers = a}) .
+      _Default
+      . _Coerce
+
+instance FromJSON AnnotationsSummary where
+        parseJSON
+          = withObject "AnnotationsSummary"
+              (\ o ->
+                 AnnotationsSummary <$>
+                   (o .:? "kind" .!= "books#annotationsSummary") <*>
+                     (o .:? "layers" .!= mempty))
+
+instance ToJSON AnnotationsSummary where
+        toJSON AnnotationsSummary{..}
+          = object
+              (catMaybes
+                 [Just ("kind" .= _asKind),
+                  ("layers" .=) <$> _asLayers])
+
+--
+-- /See:/ 'category' smart constructor.
+data Category = Category
+    { _cKind  :: !Text
+    , _cItems :: !(Maybe [CategoryItemsItem])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Category' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cKind'
+--
+-- * 'cItems'
+category
+    :: Category
+category =
+    Category
+    { _cKind = "onboarding#category"
+    , _cItems = Nothing
+    }
+
+-- | Resource type.
+cKind :: Lens' Category Text
+cKind = lens _cKind (\ s a -> s{_cKind = a})
+
+-- | A list of onboarding categories.
+cItems :: Lens' Category [CategoryItemsItem]
+cItems
+  = lens _cItems (\ s a -> s{_cItems = a}) . _Default .
+      _Coerce
+
+instance FromJSON Category where
+        parseJSON
+          = withObject "Category"
+              (\ o ->
+                 Category <$>
+                   (o .:? "kind" .!= "onboarding#category") <*>
+                     (o .:? "items" .!= mempty))
+
+instance ToJSON Category where
+        toJSON Category{..}
+          = object
+              (catMaybes
+                 [Just ("kind" .= _cKind), ("items" .=) <$> _cItems])
+
+--
+-- /See:/ 'discoveryclustersClustersItemBanner_with_content_container' smart constructor.
+data DiscoveryclustersClustersItemBanner_with_content_container = DiscoveryclustersClustersItemBanner_with_content_container
+    { _dcibFillColorArgb  :: !(Maybe Text)
+    , _dcibMoreButtonURL  :: !(Maybe Text)
+    , _dcibTextColorArgb  :: !(Maybe Text)
+    , _dcibMoreButtonText :: !(Maybe Text)
+    , _dcibImageURL       :: !(Maybe Text)
+    , _dcibMaskColorArgb  :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DiscoveryclustersClustersItemBanner_with_content_container' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dcibFillColorArgb'
+--
+-- * 'dcibMoreButtonURL'
+--
+-- * 'dcibTextColorArgb'
+--
+-- * 'dcibMoreButtonText'
+--
+-- * 'dcibImageURL'
+--
+-- * 'dcibMaskColorArgb'
+discoveryclustersClustersItemBanner_with_content_container
+    :: DiscoveryclustersClustersItemBanner_with_content_container
+discoveryclustersClustersItemBanner_with_content_container =
+    DiscoveryclustersClustersItemBanner_with_content_container
+    { _dcibFillColorArgb = Nothing
+    , _dcibMoreButtonURL = Nothing
+    , _dcibTextColorArgb = Nothing
+    , _dcibMoreButtonText = Nothing
+    , _dcibImageURL = Nothing
+    , _dcibMaskColorArgb = Nothing
+    }
+
+dcibFillColorArgb :: Lens' DiscoveryclustersClustersItemBanner_with_content_container (Maybe Text)
+dcibFillColorArgb
+  = lens _dcibFillColorArgb
+      (\ s a -> s{_dcibFillColorArgb = a})
+
+dcibMoreButtonURL :: Lens' DiscoveryclustersClustersItemBanner_with_content_container (Maybe Text)
+dcibMoreButtonURL
+  = lens _dcibMoreButtonURL
+      (\ s a -> s{_dcibMoreButtonURL = a})
+
+dcibTextColorArgb :: Lens' DiscoveryclustersClustersItemBanner_with_content_container (Maybe Text)
+dcibTextColorArgb
+  = lens _dcibTextColorArgb
+      (\ s a -> s{_dcibTextColorArgb = a})
+
+dcibMoreButtonText :: Lens' DiscoveryclustersClustersItemBanner_with_content_container (Maybe Text)
+dcibMoreButtonText
+  = lens _dcibMoreButtonText
+      (\ s a -> s{_dcibMoreButtonText = a})
+
+dcibImageURL :: Lens' DiscoveryclustersClustersItemBanner_with_content_container (Maybe Text)
+dcibImageURL
+  = lens _dcibImageURL (\ s a -> s{_dcibImageURL = a})
+
+dcibMaskColorArgb :: Lens' DiscoveryclustersClustersItemBanner_with_content_container (Maybe Text)
+dcibMaskColorArgb
+  = lens _dcibMaskColorArgb
+      (\ s a -> s{_dcibMaskColorArgb = a})
+
+instance FromJSON
+         DiscoveryclustersClustersItemBanner_with_content_container
+         where
+        parseJSON
+          = withObject
+              "DiscoveryclustersClustersItemBannerWithContentContainer"
+              (\ o ->
+                 DiscoveryclustersClustersItemBanner_with_content_container
+                   <$>
+                   (o .:? "fillColorArgb") <*> (o .:? "moreButtonUrl")
+                     <*> (o .:? "textColorArgb")
+                     <*> (o .:? "moreButtonText")
+                     <*> (o .:? "imageUrl")
+                     <*> (o .:? "maskColorArgb"))
+
+instance ToJSON
+         DiscoveryclustersClustersItemBanner_with_content_container
+         where
+        toJSON
+          DiscoveryclustersClustersItemBanner_with_content_container{..}
+          = object
+              (catMaybes
+                 [("fillColorArgb" .=) <$> _dcibFillColorArgb,
+                  ("moreButtonUrl" .=) <$> _dcibMoreButtonURL,
+                  ("textColorArgb" .=) <$> _dcibTextColorArgb,
+                  ("moreButtonText" .=) <$> _dcibMoreButtonText,
+                  ("imageUrl" .=) <$> _dcibImageURL,
+                  ("maskColorArgb" .=) <$> _dcibMaskColorArgb])
+
+--
+-- /See:/ 'volume' smart constructor.
+data Volume = Volume
+    { _vvUserInfo        :: !(Maybe VolumeUserInfo)
+    , _vvEtag            :: !(Maybe Text)
+    , _vvAccessInfo      :: !(Maybe VolumeAccessInfo)
+    , _vvKind            :: !Text
+    , _vvSearchInfo      :: !(Maybe VolumeSearchInfo)
+    , _vvSelfLink        :: !(Maybe Text)
+    , _vvLayerInfo       :: !(Maybe VolumeLayerInfo)
+    , _vvSaleInfo        :: !(Maybe VolumeSaleInfo)
+    , _vvId              :: !(Maybe Text)
+    , _vvRecommendedInfo :: !(Maybe VolumeRecommendedInfo)
+    , _vvVolumeInfo      :: !(Maybe VolumeVolumeInfo)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Volume' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'vvUserInfo'
+--
+-- * 'vvEtag'
+--
+-- * 'vvAccessInfo'
+--
+-- * 'vvKind'
+--
+-- * 'vvSearchInfo'
+--
+-- * 'vvSelfLink'
+--
+-- * 'vvLayerInfo'
+--
+-- * 'vvSaleInfo'
+--
+-- * 'vvId'
+--
+-- * 'vvRecommendedInfo'
+--
+-- * 'vvVolumeInfo'
+volume
+    :: Volume
+volume =
+    Volume
+    { _vvUserInfo = Nothing
+    , _vvEtag = Nothing
+    , _vvAccessInfo = Nothing
+    , _vvKind = "books#volume"
+    , _vvSearchInfo = Nothing
+    , _vvSelfLink = Nothing
+    , _vvLayerInfo = Nothing
+    , _vvSaleInfo = Nothing
+    , _vvId = Nothing
+    , _vvRecommendedInfo = Nothing
+    , _vvVolumeInfo = Nothing
+    }
+
+-- | User specific information related to this volume. (e.g. page this user
+-- last read or whether they purchased this book)
+vvUserInfo :: Lens' Volume (Maybe VolumeUserInfo)
+vvUserInfo
+  = lens _vvUserInfo (\ s a -> s{_vvUserInfo = a})
+
+-- | Opaque identifier for a specific version of a volume resource. (In LITE
+-- projection)
+vvEtag :: Lens' Volume (Maybe Text)
+vvEtag = lens _vvEtag (\ s a -> s{_vvEtag = a})
+
+-- | Any information about a volume related to reading or obtaining that
+-- volume text. This information can depend on country (books may be public
+-- domain in one country but not in another, e.g.).
+vvAccessInfo :: Lens' Volume (Maybe VolumeAccessInfo)
+vvAccessInfo
+  = lens _vvAccessInfo (\ s a -> s{_vvAccessInfo = a})
+
+-- | Resource type for a volume. (In LITE projection.)
+vvKind :: Lens' Volume Text
+vvKind = lens _vvKind (\ s a -> s{_vvKind = a})
+
+-- | Search result information related to this volume.
+vvSearchInfo :: Lens' Volume (Maybe VolumeSearchInfo)
+vvSearchInfo
+  = lens _vvSearchInfo (\ s a -> s{_vvSearchInfo = a})
+
+-- | URL to this resource. (In LITE projection.)
+vvSelfLink :: Lens' Volume (Maybe Text)
+vvSelfLink
+  = lens _vvSelfLink (\ s a -> s{_vvSelfLink = a})
+
+-- | What layers exist in this volume and high level information about them.
+vvLayerInfo :: Lens' Volume (Maybe VolumeLayerInfo)
+vvLayerInfo
+  = lens _vvLayerInfo (\ s a -> s{_vvLayerInfo = a})
+
+-- | Any information about a volume related to the eBookstore and\/or
+-- purchaseability. This information can depend on the country where the
+-- request originates from (i.e. books may not be for sale in certain
+-- countries).
+vvSaleInfo :: Lens' Volume (Maybe VolumeSaleInfo)
+vvSaleInfo
+  = lens _vvSaleInfo (\ s a -> s{_vvSaleInfo = a})
+
+-- | Unique identifier for a volume. (In LITE projection.)
+vvId :: Lens' Volume (Maybe Text)
+vvId = lens _vvId (\ s a -> s{_vvId = a})
+
+-- | Recommendation related information for this volume.
+vvRecommendedInfo :: Lens' Volume (Maybe VolumeRecommendedInfo)
+vvRecommendedInfo
+  = lens _vvRecommendedInfo
+      (\ s a -> s{_vvRecommendedInfo = a})
+
+-- | General volume information.
+vvVolumeInfo :: Lens' Volume (Maybe VolumeVolumeInfo)
+vvVolumeInfo
+  = lens _vvVolumeInfo (\ s a -> s{_vvVolumeInfo = a})
+
+instance FromJSON Volume where
+        parseJSON
+          = withObject "Volume"
+              (\ o ->
+                 Volume <$>
+                   (o .:? "userInfo") <*> (o .:? "etag") <*>
+                     (o .:? "accessInfo")
+                     <*> (o .:? "kind" .!= "books#volume")
+                     <*> (o .:? "searchInfo")
+                     <*> (o .:? "selfLink")
+                     <*> (o .:? "layerInfo")
+                     <*> (o .:? "saleInfo")
+                     <*> (o .:? "id")
+                     <*> (o .:? "recommendedInfo")
+                     <*> (o .:? "volumeInfo"))
+
+instance ToJSON Volume where
+        toJSON Volume{..}
+          = object
+              (catMaybes
+                 [("userInfo" .=) <$> _vvUserInfo,
+                  ("etag" .=) <$> _vvEtag,
+                  ("accessInfo" .=) <$> _vvAccessInfo,
+                  Just ("kind" .= _vvKind),
+                  ("searchInfo" .=) <$> _vvSearchInfo,
+                  ("selfLink" .=) <$> _vvSelfLink,
+                  ("layerInfo" .=) <$> _vvLayerInfo,
+                  ("saleInfo" .=) <$> _vvSaleInfo, ("id" .=) <$> _vvId,
+                  ("recommendedInfo" .=) <$> _vvRecommendedInfo,
+                  ("volumeInfo" .=) <$> _vvVolumeInfo])
+
+--
+-- /See:/ 'geolayerDataGeoBoundaryItemItem' smart constructor.
+data GeolayerDataGeoBoundaryItemItem = GeolayerDataGeoBoundaryItemItem
+    { _gdgbiiLatitude  :: !(Maybe (Textual Word32))
+    , _gdgbiiLongitude :: !(Maybe (Textual Word32))
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'GeolayerDataGeoBoundaryItemItem' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gdgbiiLatitude'
+--
+-- * 'gdgbiiLongitude'
+geolayerDataGeoBoundaryItemItem
+    :: GeolayerDataGeoBoundaryItemItem
+geolayerDataGeoBoundaryItemItem =
+    GeolayerDataGeoBoundaryItemItem
+    { _gdgbiiLatitude = Nothing
+    , _gdgbiiLongitude = Nothing
+    }
+
+gdgbiiLatitude :: Lens' GeolayerDataGeoBoundaryItemItem (Maybe Word32)
+gdgbiiLatitude
+  = lens _gdgbiiLatitude
+      (\ s a -> s{_gdgbiiLatitude = a})
+      . mapping _Coerce
+
+gdgbiiLongitude :: Lens' GeolayerDataGeoBoundaryItemItem (Maybe Word32)
+gdgbiiLongitude
+  = lens _gdgbiiLongitude
+      (\ s a -> s{_gdgbiiLongitude = a})
+      . mapping _Coerce
+
+instance FromJSON GeolayerDataGeoBoundaryItemItem
+         where
+        parseJSON
+          = withObject "GeolayerDataGeoBoundaryItemItem"
+              (\ o ->
+                 GeolayerDataGeoBoundaryItemItem <$>
+                   (o .:? "latitude") <*> (o .:? "longitude"))
+
+instance ToJSON GeolayerDataGeoBoundaryItemItem where
+        toJSON GeolayerDataGeoBoundaryItemItem{..}
+          = object
+              (catMaybes
+                 [("latitude" .=) <$> _gdgbiiLatitude,
+                  ("longitude" .=) <$> _gdgbiiLongitude])
+
+--
+-- /See:/ 'offersItemsItemItemsItem' smart constructor.
+data OffersItemsItemItemsItem = OffersItemsItemItemsItem
+    { _oiiiiCanonicalVolumeLink :: !(Maybe Text)
+    , _oiiiiCoverURL            :: !(Maybe Text)
+    , _oiiiiVolumeId            :: !(Maybe Text)
+    , _oiiiiAuthor              :: !(Maybe Text)
+    , _oiiiiTitle               :: !(Maybe Text)
+    , _oiiiiDescription         :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'OffersItemsItemItemsItem' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'oiiiiCanonicalVolumeLink'
+--
+-- * 'oiiiiCoverURL'
+--
+-- * 'oiiiiVolumeId'
+--
+-- * 'oiiiiAuthor'
+--
+-- * 'oiiiiTitle'
+--
+-- * 'oiiiiDescription'
+offersItemsItemItemsItem
+    :: OffersItemsItemItemsItem
+offersItemsItemItemsItem =
+    OffersItemsItemItemsItem
+    { _oiiiiCanonicalVolumeLink = Nothing
+    , _oiiiiCoverURL = Nothing
+    , _oiiiiVolumeId = Nothing
+    , _oiiiiAuthor = Nothing
+    , _oiiiiTitle = Nothing
+    , _oiiiiDescription = Nothing
+    }
+
+oiiiiCanonicalVolumeLink :: Lens' OffersItemsItemItemsItem (Maybe Text)
+oiiiiCanonicalVolumeLink
+  = lens _oiiiiCanonicalVolumeLink
+      (\ s a -> s{_oiiiiCanonicalVolumeLink = a})
+
+oiiiiCoverURL :: Lens' OffersItemsItemItemsItem (Maybe Text)
+oiiiiCoverURL
+  = lens _oiiiiCoverURL
+      (\ s a -> s{_oiiiiCoverURL = a})
+
+oiiiiVolumeId :: Lens' OffersItemsItemItemsItem (Maybe Text)
+oiiiiVolumeId
+  = lens _oiiiiVolumeId
+      (\ s a -> s{_oiiiiVolumeId = a})
+
+oiiiiAuthor :: Lens' OffersItemsItemItemsItem (Maybe Text)
+oiiiiAuthor
+  = lens _oiiiiAuthor (\ s a -> s{_oiiiiAuthor = a})
+
+oiiiiTitle :: Lens' OffersItemsItemItemsItem (Maybe Text)
+oiiiiTitle
+  = lens _oiiiiTitle (\ s a -> s{_oiiiiTitle = a})
+
+oiiiiDescription :: Lens' OffersItemsItemItemsItem (Maybe Text)
+oiiiiDescription
+  = lens _oiiiiDescription
+      (\ s a -> s{_oiiiiDescription = a})
+
+instance FromJSON OffersItemsItemItemsItem where
+        parseJSON
+          = withObject "OffersItemsItemItemsItem"
+              (\ o ->
+                 OffersItemsItemItemsItem <$>
+                   (o .:? "canonicalVolumeLink") <*> (o .:? "coverUrl")
+                     <*> (o .:? "volumeId")
+                     <*> (o .:? "author")
+                     <*> (o .:? "title")
+                     <*> (o .:? "description"))
+
+instance ToJSON OffersItemsItemItemsItem where
+        toJSON OffersItemsItemItemsItem{..}
+          = object
+              (catMaybes
+                 [("canonicalVolumeLink" .=) <$>
+                    _oiiiiCanonicalVolumeLink,
+                  ("coverUrl" .=) <$> _oiiiiCoverURL,
+                  ("volumeId" .=) <$> _oiiiiVolumeId,
+                  ("author" .=) <$> _oiiiiAuthor,
+                  ("title" .=) <$> _oiiiiTitle,
+                  ("description" .=) <$> _oiiiiDescription])
+
+--
+-- /See:/ 'dictlayerDataDictWordsItemSensesItemDefinitionsItemExamplesItemSource' smart constructor.
+data DictlayerDataDictWordsItemSensesItemDefinitionsItemExamplesItemSource = DictlayerDataDictWordsItemSensesItemDefinitionsItemExamplesItemSource
+    { _dddwisidieisURL         :: !(Maybe Text)
+    , _dddwisidieisAttribution :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DictlayerDataDictWordsItemSensesItemDefinitionsItemExamplesItemSource' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dddwisidieisURL'
+--
+-- * 'dddwisidieisAttribution'
+dictlayerDataDictWordsItemSensesItemDefinitionsItemExamplesItemSource
+    :: DictlayerDataDictWordsItemSensesItemDefinitionsItemExamplesItemSource
+dictlayerDataDictWordsItemSensesItemDefinitionsItemExamplesItemSource =
+    DictlayerDataDictWordsItemSensesItemDefinitionsItemExamplesItemSource
+    { _dddwisidieisURL = Nothing
+    , _dddwisidieisAttribution = Nothing
+    }
+
+dddwisidieisURL :: Lens' DictlayerDataDictWordsItemSensesItemDefinitionsItemExamplesItemSource (Maybe Text)
+dddwisidieisURL
+  = lens _dddwisidieisURL
+      (\ s a -> s{_dddwisidieisURL = a})
+
+dddwisidieisAttribution :: Lens' DictlayerDataDictWordsItemSensesItemDefinitionsItemExamplesItemSource (Maybe Text)
+dddwisidieisAttribution
+  = lens _dddwisidieisAttribution
+      (\ s a -> s{_dddwisidieisAttribution = a})
+
+instance FromJSON
+         DictlayerDataDictWordsItemSensesItemDefinitionsItemExamplesItemSource
+         where
+        parseJSON
+          = withObject
+              "DictlayerDataDictWordsItemSensesItemDefinitionsItemExamplesItemSource"
+              (\ o ->
+                 DictlayerDataDictWordsItemSensesItemDefinitionsItemExamplesItemSource
+                   <$> (o .:? "url") <*> (o .:? "attribution"))
+
+instance ToJSON
+         DictlayerDataDictWordsItemSensesItemDefinitionsItemExamplesItemSource
+         where
+        toJSON
+          DictlayerDataDictWordsItemSensesItemDefinitionsItemExamplesItemSource{..}
+          = object
+              (catMaybes
+                 [("url" .=) <$> _dddwisidieisURL,
+                  ("attribution" .=) <$> _dddwisidieisAttribution])
+
+--
+-- /See:/ 'geolayerDataCommon' smart constructor.
+data GeolayerDataCommon = GeolayerDataCommon
+    { _gdcSnippet         :: !(Maybe Text)
+    , _gdcSnippetURL      :: !(Maybe Text)
+    , _gdcLang            :: !(Maybe Text)
+    , _gdcTitle           :: !(Maybe Text)
+    , _gdcPreviewImageURL :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'GeolayerDataCommon' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gdcSnippet'
+--
+-- * 'gdcSnippetURL'
+--
+-- * 'gdcLang'
+--
+-- * 'gdcTitle'
+--
+-- * 'gdcPreviewImageURL'
+geolayerDataCommon
+    :: GeolayerDataCommon
+geolayerDataCommon =
+    GeolayerDataCommon
+    { _gdcSnippet = Nothing
+    , _gdcSnippetURL = Nothing
+    , _gdcLang = Nothing
+    , _gdcTitle = Nothing
+    , _gdcPreviewImageURL = Nothing
+    }
+
+-- | The description for this location.
+gdcSnippet :: Lens' GeolayerDataCommon (Maybe Text)
+gdcSnippet
+  = lens _gdcSnippet (\ s a -> s{_gdcSnippet = a})
+
+-- | The URL for information for this location. Ex: wikipedia link.
+gdcSnippetURL :: Lens' GeolayerDataCommon (Maybe Text)
+gdcSnippetURL
+  = lens _gdcSnippetURL
+      (\ s a -> s{_gdcSnippetURL = a})
+
+-- | The language of the information url and description.
+gdcLang :: Lens' GeolayerDataCommon (Maybe Text)
+gdcLang = lens _gdcLang (\ s a -> s{_gdcLang = a})
+
+-- | The display title and localized canonical name to use when searching for
+-- this entity on Google search.
+gdcTitle :: Lens' GeolayerDataCommon (Maybe Text)
+gdcTitle = lens _gdcTitle (\ s a -> s{_gdcTitle = a})
+
+-- | The URL for the preview image information.
+gdcPreviewImageURL :: Lens' GeolayerDataCommon (Maybe Text)
+gdcPreviewImageURL
+  = lens _gdcPreviewImageURL
+      (\ s a -> s{_gdcPreviewImageURL = a})
+
+instance FromJSON GeolayerDataCommon where
+        parseJSON
+          = withObject "GeolayerDataCommon"
+              (\ o ->
+                 GeolayerDataCommon <$>
+                   (o .:? "snippet") <*> (o .:? "snippetUrl") <*>
+                     (o .:? "lang")
+                     <*> (o .:? "title")
+                     <*> (o .:? "previewImageUrl"))
+
+instance ToJSON GeolayerDataCommon where
+        toJSON GeolayerDataCommon{..}
+          = object
+              (catMaybes
+                 [("snippet" .=) <$> _gdcSnippet,
+                  ("snippetUrl" .=) <$> _gdcSnippetURL,
+                  ("lang" .=) <$> _gdcLang, ("title" .=) <$> _gdcTitle,
+                  ("previewImageUrl" .=) <$> _gdcPreviewImageURL])
+
+--
+-- /See:/ 'geolayerDataGeo' smart constructor.
+data GeolayerDataGeo = GeolayerDataGeo
+    { _gdgMapType     :: !(Maybe Text)
+    , _gdgCachePolicy :: !(Maybe Text)
+    , _gdgViewport    :: !(Maybe GeolayerDataGeoViewport)
+    , _gdgBoundary    :: !(Maybe [[GeolayerDataGeoBoundaryItemItem]])
+    , _gdgLatitude    :: !(Maybe (Textual Double))
+    , _gdgZoom        :: !(Maybe (Textual Int32))
+    , _gdgCountryCode :: !(Maybe Text)
+    , _gdgLongitude   :: !(Maybe (Textual Double))
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'GeolayerDataGeo' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gdgMapType'
+--
+-- * 'gdgCachePolicy'
+--
+-- * 'gdgViewport'
+--
+-- * 'gdgBoundary'
+--
+-- * 'gdgLatitude'
+--
+-- * 'gdgZoom'
+--
+-- * 'gdgCountryCode'
+--
+-- * 'gdgLongitude'
+geolayerDataGeo
+    :: GeolayerDataGeo
+geolayerDataGeo =
+    GeolayerDataGeo
+    { _gdgMapType = Nothing
+    , _gdgCachePolicy = Nothing
+    , _gdgViewport = Nothing
+    , _gdgBoundary = Nothing
+    , _gdgLatitude = Nothing
+    , _gdgZoom = Nothing
+    , _gdgCountryCode = Nothing
+    , _gdgLongitude = Nothing
+    }
+
+-- | The type of map that should be used for this location. EX: HYBRID,
+-- ROADMAP, SATELLITE, TERRAIN
+gdgMapType :: Lens' GeolayerDataGeo (Maybe Text)
+gdgMapType
+  = lens _gdgMapType (\ s a -> s{_gdgMapType = a})
+
+-- | The cache policy active for this data. EX: UNRESTRICTED, RESTRICTED,
+-- NEVER
+gdgCachePolicy :: Lens' GeolayerDataGeo (Maybe Text)
+gdgCachePolicy
+  = lens _gdgCachePolicy
+      (\ s a -> s{_gdgCachePolicy = a})
+
+-- | The viewport for showing this location. This is a latitude, longitude
+-- rectangle.
+gdgViewport :: Lens' GeolayerDataGeo (Maybe GeolayerDataGeoViewport)
+gdgViewport
+  = lens _gdgViewport (\ s a -> s{_gdgViewport = a})
+
+-- | The boundary of the location as a set of loops containing pairs of
+-- latitude, longitude coordinates.
+gdgBoundary :: Lens' GeolayerDataGeo [[GeolayerDataGeoBoundaryItemItem]]
+gdgBoundary
+  = lens _gdgBoundary (\ s a -> s{_gdgBoundary = a}) .
+      _Default
+      . _Coerce
+
+-- | The latitude of the location.
+gdgLatitude :: Lens' GeolayerDataGeo (Maybe Double)
+gdgLatitude
+  = lens _gdgLatitude (\ s a -> s{_gdgLatitude = a}) .
+      mapping _Coerce
+
+-- | The Zoom level to use for the map. Zoom levels between 0 (the lowest
+-- zoom level, in which the entire world can be seen on one map) to 21+
+-- (down to individual buildings). See:
+-- https:\/\/developers.google.com\/maps\/documentation\/staticmaps\/#Zoomlevels
+gdgZoom :: Lens' GeolayerDataGeo (Maybe Int32)
+gdgZoom
+  = lens _gdgZoom (\ s a -> s{_gdgZoom = a}) .
+      mapping _Coerce
+
+-- | The country code of the location.
+gdgCountryCode :: Lens' GeolayerDataGeo (Maybe Text)
+gdgCountryCode
+  = lens _gdgCountryCode
+      (\ s a -> s{_gdgCountryCode = a})
+
+-- | The longitude of the location.
+gdgLongitude :: Lens' GeolayerDataGeo (Maybe Double)
+gdgLongitude
+  = lens _gdgLongitude (\ s a -> s{_gdgLongitude = a})
+      . mapping _Coerce
+
+instance FromJSON GeolayerDataGeo where
+        parseJSON
+          = withObject "GeolayerDataGeo"
+              (\ o ->
+                 GeolayerDataGeo <$>
+                   (o .:? "mapType") <*> (o .:? "cachePolicy") <*>
+                     (o .:? "viewport")
+                     <*> (o .:? "boundary" .!= mempty)
+                     <*> (o .:? "latitude")
+                     <*> (o .:? "zoom")
+                     <*> (o .:? "countryCode")
+                     <*> (o .:? "longitude"))
+
+instance ToJSON GeolayerDataGeo where
+        toJSON GeolayerDataGeo{..}
+          = object
+              (catMaybes
+                 [("mapType" .=) <$> _gdgMapType,
+                  ("cachePolicy" .=) <$> _gdgCachePolicy,
+                  ("viewport" .=) <$> _gdgViewport,
+                  ("boundary" .=) <$> _gdgBoundary,
+                  ("latitude" .=) <$> _gdgLatitude,
+                  ("zoom" .=) <$> _gdgZoom,
+                  ("countryCode" .=) <$> _gdgCountryCode,
+                  ("longitude" .=) <$> _gdgLongitude])
+
+--
+-- /See:/ 'dictlayerDataDictWordsItem' smart constructor.
+data DictlayerDataDictWordsItem = DictlayerDataDictWordsItem
+    { _dddwiSenses      :: !(Maybe [DictlayerDataDictWordsItemSensesItem])
+    , _dddwiSource      :: !(Maybe DictlayerDataDictWordsItemSource)
+    , _dddwiDerivatives :: !(Maybe [DictlayerDataDictWordsItemDerivativesItem])
+    , _dddwiExamples    :: !(Maybe [DictlayerDataDictWordsItemExamplesItem])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DictlayerDataDictWordsItem' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dddwiSenses'
+--
+-- * 'dddwiSource'
+--
+-- * 'dddwiDerivatives'
+--
+-- * 'dddwiExamples'
+dictlayerDataDictWordsItem
+    :: DictlayerDataDictWordsItem
+dictlayerDataDictWordsItem =
+    DictlayerDataDictWordsItem
+    { _dddwiSenses = Nothing
+    , _dddwiSource = Nothing
+    , _dddwiDerivatives = Nothing
+    , _dddwiExamples = Nothing
+    }
+
+dddwiSenses :: Lens' DictlayerDataDictWordsItem [DictlayerDataDictWordsItemSensesItem]
+dddwiSenses
+  = lens _dddwiSenses (\ s a -> s{_dddwiSenses = a}) .
+      _Default
+      . _Coerce
+
+-- | The words with different meanings but not related words, e.g. \"go\"
+-- (game) and \"go\" (verb).
+dddwiSource :: Lens' DictlayerDataDictWordsItem (Maybe DictlayerDataDictWordsItemSource)
+dddwiSource
+  = lens _dddwiSource (\ s a -> s{_dddwiSource = a})
+
+dddwiDerivatives :: Lens' DictlayerDataDictWordsItem [DictlayerDataDictWordsItemDerivativesItem]
+dddwiDerivatives
+  = lens _dddwiDerivatives
+      (\ s a -> s{_dddwiDerivatives = a})
+      . _Default
+      . _Coerce
+
+dddwiExamples :: Lens' DictlayerDataDictWordsItem [DictlayerDataDictWordsItemExamplesItem]
+dddwiExamples
+  = lens _dddwiExamples
+      (\ s a -> s{_dddwiExamples = a})
+      . _Default
+      . _Coerce
+
+instance FromJSON DictlayerDataDictWordsItem where
+        parseJSON
+          = withObject "DictlayerDataDictWordsItem"
+              (\ o ->
+                 DictlayerDataDictWordsItem <$>
+                   (o .:? "senses" .!= mempty) <*> (o .:? "source") <*>
+                     (o .:? "derivatives" .!= mempty)
+                     <*> (o .:? "examples" .!= mempty))
+
+instance ToJSON DictlayerDataDictWordsItem where
+        toJSON DictlayerDataDictWordsItem{..}
+          = object
+              (catMaybes
+                 [("senses" .=) <$> _dddwiSenses,
+                  ("source" .=) <$> _dddwiSource,
+                  ("derivatives" .=) <$> _dddwiDerivatives,
+                  ("examples" .=) <$> _dddwiExamples])
+
+--
+-- /See:/ 'categoryItemsItem' smart constructor.
+data CategoryItemsItem = CategoryItemsItem
+    { _ciiName       :: !(Maybe Text)
+    , _ciiCategoryId :: !(Maybe Text)
+    , _ciiBadgeURL   :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CategoryItemsItem' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ciiName'
+--
+-- * 'ciiCategoryId'
+--
+-- * 'ciiBadgeURL'
+categoryItemsItem
+    :: CategoryItemsItem
+categoryItemsItem =
+    CategoryItemsItem
+    { _ciiName = Nothing
+    , _ciiCategoryId = Nothing
+    , _ciiBadgeURL = Nothing
+    }
+
+ciiName :: Lens' CategoryItemsItem (Maybe Text)
+ciiName = lens _ciiName (\ s a -> s{_ciiName = a})
+
+ciiCategoryId :: Lens' CategoryItemsItem (Maybe Text)
+ciiCategoryId
+  = lens _ciiCategoryId
+      (\ s a -> s{_ciiCategoryId = a})
+
+ciiBadgeURL :: Lens' CategoryItemsItem (Maybe Text)
+ciiBadgeURL
+  = lens _ciiBadgeURL (\ s a -> s{_ciiBadgeURL = a})
+
+instance FromJSON CategoryItemsItem where
+        parseJSON
+          = withObject "CategoryItemsItem"
+              (\ o ->
+                 CategoryItemsItem <$>
+                   (o .:? "name") <*> (o .:? "categoryId") <*>
+                     (o .:? "badgeUrl"))
+
+instance ToJSON CategoryItemsItem where
+        toJSON CategoryItemsItem{..}
+          = object
+              (catMaybes
+                 [("name" .=) <$> _ciiName,
+                  ("categoryId" .=) <$> _ciiCategoryId,
+                  ("badgeUrl" .=) <$> _ciiBadgeURL])
+
+--
+-- /See:/ 'dictlayerDataDictWordsItemDerivativesItemSource' smart constructor.
+data DictlayerDataDictWordsItemDerivativesItemSource = DictlayerDataDictWordsItemDerivativesItemSource
+    { _dddwidisURL         :: !(Maybe Text)
+    , _dddwidisAttribution :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DictlayerDataDictWordsItemDerivativesItemSource' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dddwidisURL'
+--
+-- * 'dddwidisAttribution'
+dictlayerDataDictWordsItemDerivativesItemSource
+    :: DictlayerDataDictWordsItemDerivativesItemSource
+dictlayerDataDictWordsItemDerivativesItemSource =
+    DictlayerDataDictWordsItemDerivativesItemSource
+    { _dddwidisURL = Nothing
+    , _dddwidisAttribution = Nothing
+    }
+
+dddwidisURL :: Lens' DictlayerDataDictWordsItemDerivativesItemSource (Maybe Text)
+dddwidisURL
+  = lens _dddwidisURL (\ s a -> s{_dddwidisURL = a})
+
+dddwidisAttribution :: Lens' DictlayerDataDictWordsItemDerivativesItemSource (Maybe Text)
+dddwidisAttribution
+  = lens _dddwidisAttribution
+      (\ s a -> s{_dddwidisAttribution = a})
+
+instance FromJSON
+         DictlayerDataDictWordsItemDerivativesItemSource where
+        parseJSON
+          = withObject
+              "DictlayerDataDictWordsItemDerivativesItemSource"
+              (\ o ->
+                 DictlayerDataDictWordsItemDerivativesItemSource <$>
+                   (o .:? "url") <*> (o .:? "attribution"))
+
+instance ToJSON
+         DictlayerDataDictWordsItemDerivativesItemSource where
+        toJSON
+          DictlayerDataDictWordsItemDerivativesItemSource{..}
+          = object
+              (catMaybes
+                 [("url" .=) <$> _dddwidisURL,
+                  ("attribution" .=) <$> _dddwidisAttribution])
+
+--
+-- /See:/ 'geolayerData' smart constructor.
+data GeolayerData = GeolayerData
+    { _gdKind   :: !Text
+    , _gdGeo    :: !(Maybe GeolayerDataGeo)
+    , _gdCommon :: !(Maybe GeolayerDataCommon)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'GeolayerData' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gdKind'
+--
+-- * 'gdGeo'
+--
+-- * 'gdCommon'
+geolayerData
+    :: GeolayerData
+geolayerData =
+    GeolayerData
+    { _gdKind = "books#geolayerdata"
+    , _gdGeo = Nothing
+    , _gdCommon = Nothing
+    }
+
+gdKind :: Lens' GeolayerData Text
+gdKind = lens _gdKind (\ s a -> s{_gdKind = a})
+
+gdGeo :: Lens' GeolayerData (Maybe GeolayerDataGeo)
+gdGeo = lens _gdGeo (\ s a -> s{_gdGeo = a})
+
+gdCommon :: Lens' GeolayerData (Maybe GeolayerDataCommon)
+gdCommon = lens _gdCommon (\ s a -> s{_gdCommon = a})
+
+instance FromJSON GeolayerData where
+        parseJSON
+          = withObject "GeolayerData"
+              (\ o ->
+                 GeolayerData <$>
+                   (o .:? "kind" .!= "books#geolayerdata") <*>
+                     (o .:? "geo")
+                     <*> (o .:? "common"))
+
+instance ToJSON GeolayerData where
+        toJSON GeolayerData{..}
+          = object
+              (catMaybes
+                 [Just ("kind" .= _gdKind), ("geo" .=) <$> _gdGeo,
+                  ("common" .=) <$> _gdCommon])
+
+-- | The words with different meanings but not related words, e.g. \"go\"
+-- (game) and \"go\" (verb).
+--
+-- /See:/ 'dictlayerDataDictWordsItemSource' smart constructor.
+data DictlayerDataDictWordsItemSource = DictlayerDataDictWordsItemSource
+    { _dddwisURL         :: !(Maybe Text)
+    , _dddwisAttribution :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DictlayerDataDictWordsItemSource' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dddwisURL'
+--
+-- * 'dddwisAttribution'
+dictlayerDataDictWordsItemSource
+    :: DictlayerDataDictWordsItemSource
+dictlayerDataDictWordsItemSource =
+    DictlayerDataDictWordsItemSource
+    { _dddwisURL = Nothing
+    , _dddwisAttribution = Nothing
+    }
+
+dddwisURL :: Lens' DictlayerDataDictWordsItemSource (Maybe Text)
+dddwisURL
+  = lens _dddwisURL (\ s a -> s{_dddwisURL = a})
+
+dddwisAttribution :: Lens' DictlayerDataDictWordsItemSource (Maybe Text)
+dddwisAttribution
+  = lens _dddwisAttribution
+      (\ s a -> s{_dddwisAttribution = a})
+
+instance FromJSON DictlayerDataDictWordsItemSource
+         where
+        parseJSON
+          = withObject "DictlayerDataDictWordsItemSource"
+              (\ o ->
+                 DictlayerDataDictWordsItemSource <$>
+                   (o .:? "url") <*> (o .:? "attribution"))
+
+instance ToJSON DictlayerDataDictWordsItemSource
+         where
+        toJSON DictlayerDataDictWordsItemSource{..}
+          = object
+              (catMaybes
+                 [("url" .=) <$> _dddwisURL,
+                  ("attribution" .=) <$> _dddwisAttribution])
+
+--
+-- /See:/ 'dictlayerDataDictWordsItemDerivativesItem' smart constructor.
+data DictlayerDataDictWordsItemDerivativesItem = DictlayerDataDictWordsItemDerivativesItem
+    { _dddwidiText   :: !(Maybe Text)
+    , _dddwidiSource :: !(Maybe DictlayerDataDictWordsItemDerivativesItemSource)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DictlayerDataDictWordsItemDerivativesItem' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dddwidiText'
+--
+-- * 'dddwidiSource'
+dictlayerDataDictWordsItemDerivativesItem
+    :: DictlayerDataDictWordsItemDerivativesItem
+dictlayerDataDictWordsItemDerivativesItem =
+    DictlayerDataDictWordsItemDerivativesItem
+    { _dddwidiText = Nothing
+    , _dddwidiSource = Nothing
+    }
+
+dddwidiText :: Lens' DictlayerDataDictWordsItemDerivativesItem (Maybe Text)
+dddwidiText
+  = lens _dddwidiText (\ s a -> s{_dddwidiText = a})
+
+dddwidiSource :: Lens' DictlayerDataDictWordsItemDerivativesItem (Maybe DictlayerDataDictWordsItemDerivativesItemSource)
+dddwidiSource
+  = lens _dddwidiSource
+      (\ s a -> s{_dddwidiSource = a})
+
+instance FromJSON
+         DictlayerDataDictWordsItemDerivativesItem where
+        parseJSON
+          = withObject
+              "DictlayerDataDictWordsItemDerivativesItem"
+              (\ o ->
+                 DictlayerDataDictWordsItemDerivativesItem <$>
+                   (o .:? "text") <*> (o .:? "source"))
+
+instance ToJSON
+         DictlayerDataDictWordsItemDerivativesItem where
+        toJSON DictlayerDataDictWordsItemDerivativesItem{..}
+          = object
+              (catMaybes
+                 [("text" .=) <$> _dddwidiText,
+                  ("source" .=) <$> _dddwidiSource])
+
+--
+-- /See:/ 'dictlayerDataDictWordsItemSensesItemDefinitionsItemExamplesItem' smart constructor.
+data DictlayerDataDictWordsItemSensesItemDefinitionsItemExamplesItem = DictlayerDataDictWordsItemSensesItemDefinitionsItemExamplesItem
+    { _dddwisidieiText   :: !(Maybe Text)
+    , _dddwisidieiSource :: !(Maybe DictlayerDataDictWordsItemSensesItemDefinitionsItemExamplesItemSource)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DictlayerDataDictWordsItemSensesItemDefinitionsItemExamplesItem' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dddwisidieiText'
+--
+-- * 'dddwisidieiSource'
+dictlayerDataDictWordsItemSensesItemDefinitionsItemExamplesItem
+    :: DictlayerDataDictWordsItemSensesItemDefinitionsItemExamplesItem
+dictlayerDataDictWordsItemSensesItemDefinitionsItemExamplesItem =
+    DictlayerDataDictWordsItemSensesItemDefinitionsItemExamplesItem
+    { _dddwisidieiText = Nothing
+    , _dddwisidieiSource = Nothing
+    }
+
+dddwisidieiText :: Lens' DictlayerDataDictWordsItemSensesItemDefinitionsItemExamplesItem (Maybe Text)
+dddwisidieiText
+  = lens _dddwisidieiText
+      (\ s a -> s{_dddwisidieiText = a})
+
+dddwisidieiSource :: Lens' DictlayerDataDictWordsItemSensesItemDefinitionsItemExamplesItem (Maybe DictlayerDataDictWordsItemSensesItemDefinitionsItemExamplesItemSource)
+dddwisidieiSource
+  = lens _dddwisidieiSource
+      (\ s a -> s{_dddwisidieiSource = a})
+
+instance FromJSON
+         DictlayerDataDictWordsItemSensesItemDefinitionsItemExamplesItem
+         where
+        parseJSON
+          = withObject
+              "DictlayerDataDictWordsItemSensesItemDefinitionsItemExamplesItem"
+              (\ o ->
+                 DictlayerDataDictWordsItemSensesItemDefinitionsItemExamplesItem
+                   <$> (o .:? "text") <*> (o .:? "source"))
+
+instance ToJSON
+         DictlayerDataDictWordsItemSensesItemDefinitionsItemExamplesItem
+         where
+        toJSON
+          DictlayerDataDictWordsItemSensesItemDefinitionsItemExamplesItem{..}
+          = object
+              (catMaybes
+                 [("text" .=) <$> _dddwisidieiText,
+                  ("source" .=) <$> _dddwisidieiSource])
+
+--
+-- /See:/ 'dictlayerData' smart constructor.
+data DictlayerData = DictlayerData
+    { _ddKind   :: !Text
+    , _ddDict   :: !(Maybe DictlayerDataDict)
+    , _ddCommon :: !(Maybe DictlayerDataCommon)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DictlayerData' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ddKind'
+--
+-- * 'ddDict'
+--
+-- * 'ddCommon'
+dictlayerData
+    :: DictlayerData
+dictlayerData =
+    DictlayerData
+    { _ddKind = "books#dictlayerdata"
+    , _ddDict = Nothing
+    , _ddCommon = Nothing
+    }
+
+ddKind :: Lens' DictlayerData Text
+ddKind = lens _ddKind (\ s a -> s{_ddKind = a})
+
+ddDict :: Lens' DictlayerData (Maybe DictlayerDataDict)
+ddDict = lens _ddDict (\ s a -> s{_ddDict = a})
+
+ddCommon :: Lens' DictlayerData (Maybe DictlayerDataCommon)
+ddCommon = lens _ddCommon (\ s a -> s{_ddCommon = a})
+
+instance FromJSON DictlayerData where
+        parseJSON
+          = withObject "DictlayerData"
+              (\ o ->
+                 DictlayerData <$>
+                   (o .:? "kind" .!= "books#dictlayerdata") <*>
+                     (o .:? "dict")
+                     <*> (o .:? "common"))
+
+instance ToJSON DictlayerData where
+        toJSON DictlayerData{..}
+          = object
+              (catMaybes
+                 [Just ("kind" .= _ddKind), ("dict" .=) <$> _ddDict,
+                  ("common" .=) <$> _ddCommon])
+
+--
+-- /See:/ 'dictlayerDataDictWordsItemSensesItemSynonymsItemSource' smart constructor.
+data DictlayerDataDictWordsItemSensesItemSynonymsItemSource = DictlayerDataDictWordsItemSensesItemSynonymsItemSource
+    { _dddwisisisURL         :: !(Maybe Text)
+    , _dddwisisisAttribution :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DictlayerDataDictWordsItemSensesItemSynonymsItemSource' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dddwisisisURL'
+--
+-- * 'dddwisisisAttribution'
+dictlayerDataDictWordsItemSensesItemSynonymsItemSource
+    :: DictlayerDataDictWordsItemSensesItemSynonymsItemSource
+dictlayerDataDictWordsItemSensesItemSynonymsItemSource =
+    DictlayerDataDictWordsItemSensesItemSynonymsItemSource
+    { _dddwisisisURL = Nothing
+    , _dddwisisisAttribution = Nothing
+    }
+
+dddwisisisURL :: Lens' DictlayerDataDictWordsItemSensesItemSynonymsItemSource (Maybe Text)
+dddwisisisURL
+  = lens _dddwisisisURL
+      (\ s a -> s{_dddwisisisURL = a})
+
+dddwisisisAttribution :: Lens' DictlayerDataDictWordsItemSensesItemSynonymsItemSource (Maybe Text)
+dddwisisisAttribution
+  = lens _dddwisisisAttribution
+      (\ s a -> s{_dddwisisisAttribution = a})
+
+instance FromJSON
+         DictlayerDataDictWordsItemSensesItemSynonymsItemSource
+         where
+        parseJSON
+          = withObject
+              "DictlayerDataDictWordsItemSensesItemSynonymsItemSource"
+              (\ o ->
+                 DictlayerDataDictWordsItemSensesItemSynonymsItemSource
+                   <$> (o .:? "url") <*> (o .:? "attribution"))
+
+instance ToJSON
+         DictlayerDataDictWordsItemSensesItemSynonymsItemSource
+         where
+        toJSON
+          DictlayerDataDictWordsItemSensesItemSynonymsItemSource{..}
+          = object
+              (catMaybes
+                 [("url" .=) <$> _dddwisisisURL,
+                  ("attribution" .=) <$> _dddwisisisAttribution])
+
+--
+-- /See:/ 'userSettingsNotification' smart constructor.
+newtype UserSettingsNotification = UserSettingsNotification
+    { _usnMoreFromAuthors :: Maybe UserSettingsNotificationMoreFromAuthors
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'UserSettingsNotification' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'usnMoreFromAuthors'
+userSettingsNotification
+    :: UserSettingsNotification
+userSettingsNotification =
+    UserSettingsNotification
+    { _usnMoreFromAuthors = Nothing
+    }
+
+usnMoreFromAuthors :: Lens' UserSettingsNotification (Maybe UserSettingsNotificationMoreFromAuthors)
+usnMoreFromAuthors
+  = lens _usnMoreFromAuthors
+      (\ s a -> s{_usnMoreFromAuthors = a})
+
+instance FromJSON UserSettingsNotification where
+        parseJSON
+          = withObject "UserSettingsNotification"
+              (\ o ->
+                 UserSettingsNotification <$>
+                   (o .:? "moreFromAuthors"))
+
+instance ToJSON UserSettingsNotification where
+        toJSON UserSettingsNotification{..}
+          = object
+              (catMaybes
+                 [("moreFromAuthors" .=) <$> _usnMoreFromAuthors])
+
+--
+-- /See:/ 'dictlayerDataDictWordsItemSensesItemSynonymsItem' smart constructor.
+data DictlayerDataDictWordsItemSensesItemSynonymsItem = DictlayerDataDictWordsItemSensesItemSynonymsItem
+    { _dddwisisiText   :: !(Maybe Text)
+    , _dddwisisiSource :: !(Maybe DictlayerDataDictWordsItemSensesItemSynonymsItemSource)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DictlayerDataDictWordsItemSensesItemSynonymsItem' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dddwisisiText'
+--
+-- * 'dddwisisiSource'
+dictlayerDataDictWordsItemSensesItemSynonymsItem
+    :: DictlayerDataDictWordsItemSensesItemSynonymsItem
+dictlayerDataDictWordsItemSensesItemSynonymsItem =
+    DictlayerDataDictWordsItemSensesItemSynonymsItem
+    { _dddwisisiText = Nothing
+    , _dddwisisiSource = Nothing
+    }
+
+dddwisisiText :: Lens' DictlayerDataDictWordsItemSensesItemSynonymsItem (Maybe Text)
+dddwisisiText
+  = lens _dddwisisiText
+      (\ s a -> s{_dddwisisiText = a})
+
+dddwisisiSource :: Lens' DictlayerDataDictWordsItemSensesItemSynonymsItem (Maybe DictlayerDataDictWordsItemSensesItemSynonymsItemSource)
+dddwisisiSource
+  = lens _dddwisisiSource
+      (\ s a -> s{_dddwisisiSource = a})
+
+instance FromJSON
+         DictlayerDataDictWordsItemSensesItemSynonymsItem
+         where
+        parseJSON
+          = withObject
+              "DictlayerDataDictWordsItemSensesItemSynonymsItem"
+              (\ o ->
+                 DictlayerDataDictWordsItemSensesItemSynonymsItem <$>
+                   (o .:? "text") <*> (o .:? "source"))
+
+instance ToJSON
+         DictlayerDataDictWordsItemSensesItemSynonymsItem
+         where
+        toJSON
+          DictlayerDataDictWordsItemSensesItemSynonymsItem{..}
+          = object
+              (catMaybes
+                 [("text" .=) <$> _dddwisisiText,
+                  ("source" .=) <$> _dddwisisiSource])
+
+--
+-- /See:/ 'geolayerDataGeoViewportLo' smart constructor.
+data GeolayerDataGeoViewportLo = GeolayerDataGeoViewportLo
+    { _gdgvlLatitude  :: !(Maybe (Textual Double))
+    , _gdgvlLongitude :: !(Maybe (Textual Double))
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'GeolayerDataGeoViewportLo' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gdgvlLatitude'
+--
+-- * 'gdgvlLongitude'
+geolayerDataGeoViewportLo
+    :: GeolayerDataGeoViewportLo
+geolayerDataGeoViewportLo =
+    GeolayerDataGeoViewportLo
+    { _gdgvlLatitude = Nothing
+    , _gdgvlLongitude = Nothing
+    }
+
+gdgvlLatitude :: Lens' GeolayerDataGeoViewportLo (Maybe Double)
+gdgvlLatitude
+  = lens _gdgvlLatitude
+      (\ s a -> s{_gdgvlLatitude = a})
+      . mapping _Coerce
+
+gdgvlLongitude :: Lens' GeolayerDataGeoViewportLo (Maybe Double)
+gdgvlLongitude
+  = lens _gdgvlLongitude
+      (\ s a -> s{_gdgvlLongitude = a})
+      . mapping _Coerce
+
+instance FromJSON GeolayerDataGeoViewportLo where
+        parseJSON
+          = withObject "GeolayerDataGeoViewportLo"
+              (\ o ->
+                 GeolayerDataGeoViewportLo <$>
+                   (o .:? "latitude") <*> (o .:? "longitude"))
+
+instance ToJSON GeolayerDataGeoViewportLo where
+        toJSON GeolayerDataGeoViewportLo{..}
+          = object
+              (catMaybes
+                 [("latitude" .=) <$> _gdgvlLatitude,
+                  ("longitude" .=) <$> _gdgvlLongitude])
+
+-- | Offer list (=undiscounted) price in Micros.
+--
+-- /See:/ 'volumeSaleInfoOffersItemListPrice' smart constructor.
+data VolumeSaleInfoOffersItemListPrice = VolumeSaleInfoOffersItemListPrice
+    { _vsioilpCurrencyCode   :: !(Maybe Text)
+    , _vsioilpAmountInMicros :: !(Maybe (Textual Double))
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'VolumeSaleInfoOffersItemListPrice' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'vsioilpCurrencyCode'
+--
+-- * 'vsioilpAmountInMicros'
+volumeSaleInfoOffersItemListPrice
+    :: VolumeSaleInfoOffersItemListPrice
+volumeSaleInfoOffersItemListPrice =
+    VolumeSaleInfoOffersItemListPrice
+    { _vsioilpCurrencyCode = Nothing
+    , _vsioilpAmountInMicros = Nothing
+    }
+
+vsioilpCurrencyCode :: Lens' VolumeSaleInfoOffersItemListPrice (Maybe Text)
+vsioilpCurrencyCode
+  = lens _vsioilpCurrencyCode
+      (\ s a -> s{_vsioilpCurrencyCode = a})
+
+vsioilpAmountInMicros :: Lens' VolumeSaleInfoOffersItemListPrice (Maybe Double)
+vsioilpAmountInMicros
+  = lens _vsioilpAmountInMicros
+      (\ s a -> s{_vsioilpAmountInMicros = a})
+      . mapping _Coerce
+
+instance FromJSON VolumeSaleInfoOffersItemListPrice
+         where
+        parseJSON
+          = withObject "VolumeSaleInfoOffersItemListPrice"
+              (\ o ->
+                 VolumeSaleInfoOffersItemListPrice <$>
+                   (o .:? "currencyCode") <*> (o .:? "amountInMicros"))
+
+instance ToJSON VolumeSaleInfoOffersItemListPrice
+         where
+        toJSON VolumeSaleInfoOffersItemListPrice{..}
+          = object
+              (catMaybes
+                 [("currencyCode" .=) <$> _vsioilpCurrencyCode,
+                  ("amountInMicros" .=) <$> _vsioilpAmountInMicros])
+
+--
+-- /See:/ 'downloadAccessRestriction' smart constructor.
+data DownloadAccessRestriction = DownloadAccessRestriction
+    { _darJustAcquired       :: !(Maybe Bool)
+    , _darSignature          :: !(Maybe Text)
+    , _darKind               :: !Text
+    , _darMaxDownloadDevices :: !(Maybe (Textual Int32))
+    , _darDownloadsAcquired  :: !(Maybe (Textual Int32))
+    , _darReasonCode         :: !(Maybe Text)
+    , _darVolumeId           :: !(Maybe Text)
+    , _darRestricted         :: !(Maybe Bool)
+    , _darSource             :: !(Maybe Text)
+    , _darDeviceAllowed      :: !(Maybe Bool)
+    , _darMessage            :: !(Maybe Text)
+    , _darNonce              :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DownloadAccessRestriction' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'darJustAcquired'
+--
+-- * 'darSignature'
+--
+-- * 'darKind'
+--
+-- * 'darMaxDownloadDevices'
+--
+-- * 'darDownloadsAcquired'
+--
+-- * 'darReasonCode'
+--
+-- * 'darVolumeId'
+--
+-- * 'darRestricted'
+--
+-- * 'darSource'
+--
+-- * 'darDeviceAllowed'
+--
+-- * 'darMessage'
+--
+-- * 'darNonce'
+downloadAccessRestriction
+    :: DownloadAccessRestriction
+downloadAccessRestriction =
+    DownloadAccessRestriction
+    { _darJustAcquired = Nothing
+    , _darSignature = Nothing
+    , _darKind = "books#downloadAccessRestriction"
+    , _darMaxDownloadDevices = Nothing
+    , _darDownloadsAcquired = Nothing
+    , _darReasonCode = Nothing
+    , _darVolumeId = Nothing
+    , _darRestricted = Nothing
+    , _darSource = Nothing
+    , _darDeviceAllowed = Nothing
+    , _darMessage = Nothing
+    , _darNonce = Nothing
+    }
+
+-- | If deviceAllowed, whether access was just acquired with this request.
+darJustAcquired :: Lens' DownloadAccessRestriction (Maybe Bool)
+darJustAcquired
+  = lens _darJustAcquired
+      (\ s a -> s{_darJustAcquired = a})
+
+-- | Response signature.
+darSignature :: Lens' DownloadAccessRestriction (Maybe Text)
+darSignature
+  = lens _darSignature (\ s a -> s{_darSignature = a})
+
+-- | Resource type.
+darKind :: Lens' DownloadAccessRestriction Text
+darKind = lens _darKind (\ s a -> s{_darKind = a})
+
+-- | If restricted, the maximum number of content download licenses for this
+-- volume.
+darMaxDownloadDevices :: Lens' DownloadAccessRestriction (Maybe Int32)
+darMaxDownloadDevices
+  = lens _darMaxDownloadDevices
+      (\ s a -> s{_darMaxDownloadDevices = a})
+      . mapping _Coerce
+
+-- | If restricted, the number of content download licenses already acquired
+-- (including the requesting client, if licensed).
+darDownloadsAcquired :: Lens' DownloadAccessRestriction (Maybe Int32)
+darDownloadsAcquired
+  = lens _darDownloadsAcquired
+      (\ s a -> s{_darDownloadsAcquired = a})
+      . mapping _Coerce
+
+-- | Error\/warning reason code. Additional codes may be added in the future.
+-- 0 OK 100 ACCESS_DENIED_PUBLISHER_LIMIT 101 ACCESS_DENIED_LIMIT 200
+-- WARNING_USED_LAST_ACCESS
+darReasonCode :: Lens' DownloadAccessRestriction (Maybe Text)
+darReasonCode
+  = lens _darReasonCode
+      (\ s a -> s{_darReasonCode = a})
+
+-- | Identifies the volume for which this entry applies.
+darVolumeId :: Lens' DownloadAccessRestriction (Maybe Text)
+darVolumeId
+  = lens _darVolumeId (\ s a -> s{_darVolumeId = a})
+
+-- | Whether this volume has any download access restrictions.
+darRestricted :: Lens' DownloadAccessRestriction (Maybe Bool)
+darRestricted
+  = lens _darRestricted
+      (\ s a -> s{_darRestricted = a})
+
+-- | Client app identifier for verification. Download access and
+-- client-validation only.
+darSource :: Lens' DownloadAccessRestriction (Maybe Text)
+darSource
+  = lens _darSource (\ s a -> s{_darSource = a})
+
+-- | If restricted, whether access is granted for this (user, device,
+-- volume).
+darDeviceAllowed :: Lens' DownloadAccessRestriction (Maybe Bool)
+darDeviceAllowed
+  = lens _darDeviceAllowed
+      (\ s a -> s{_darDeviceAllowed = a})
+
+-- | Error\/warning message.
+darMessage :: Lens' DownloadAccessRestriction (Maybe Text)
+darMessage
+  = lens _darMessage (\ s a -> s{_darMessage = a})
+
+-- | Client nonce for verification. Download access and client-validation
+-- only.
+darNonce :: Lens' DownloadAccessRestriction (Maybe Text)
+darNonce = lens _darNonce (\ s a -> s{_darNonce = a})
+
+instance FromJSON DownloadAccessRestriction where
+        parseJSON
+          = withObject "DownloadAccessRestriction"
+              (\ o ->
+                 DownloadAccessRestriction <$>
+                   (o .:? "justAcquired") <*> (o .:? "signature") <*>
+                     (o .:? "kind" .!= "books#downloadAccessRestriction")
+                     <*> (o .:? "maxDownloadDevices")
+                     <*> (o .:? "downloadsAcquired")
+                     <*> (o .:? "reasonCode")
+                     <*> (o .:? "volumeId")
+                     <*> (o .:? "restricted")
+                     <*> (o .:? "source")
+                     <*> (o .:? "deviceAllowed")
+                     <*> (o .:? "message")
+                     <*> (o .:? "nonce"))
+
+instance ToJSON DownloadAccessRestriction where
+        toJSON DownloadAccessRestriction{..}
+          = object
+              (catMaybes
+                 [("justAcquired" .=) <$> _darJustAcquired,
+                  ("signature" .=) <$> _darSignature,
+                  Just ("kind" .= _darKind),
+                  ("maxDownloadDevices" .=) <$> _darMaxDownloadDevices,
+                  ("downloadsAcquired" .=) <$> _darDownloadsAcquired,
+                  ("reasonCode" .=) <$> _darReasonCode,
+                  ("volumeId" .=) <$> _darVolumeId,
+                  ("restricted" .=) <$> _darRestricted,
+                  ("source" .=) <$> _darSource,
+                  ("deviceAllowed" .=) <$> _darDeviceAllowed,
+                  ("message" .=) <$> _darMessage,
+                  ("nonce" .=) <$> _darNonce])
+
+--
+-- /See:/ 'dictlayerDataCommon' smart constructor.
+newtype DictlayerDataCommon = DictlayerDataCommon
+    { _ddcTitle :: Maybe Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DictlayerDataCommon' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ddcTitle'
+dictlayerDataCommon
+    :: DictlayerDataCommon
+dictlayerDataCommon =
+    DictlayerDataCommon
+    { _ddcTitle = Nothing
+    }
+
+-- | The display title and localized canonical name to use when searching for
+-- this entity on Google search.
+ddcTitle :: Lens' DictlayerDataCommon (Maybe Text)
+ddcTitle = lens _ddcTitle (\ s a -> s{_ddcTitle = a})
+
+instance FromJSON DictlayerDataCommon where
+        parseJSON
+          = withObject "DictlayerDataCommon"
+              (\ o -> DictlayerDataCommon <$> (o .:? "title"))
+
+instance ToJSON DictlayerDataCommon where
+        toJSON DictlayerDataCommon{..}
+          = object (catMaybes [("title" .=) <$> _ddcTitle])
+
+--
+-- /See:/ 'discoveryclustersClustersItem' smart constructor.
+data DiscoveryclustersClustersItem = DiscoveryclustersClustersItem
+    { _dciBannerWithContentContainer :: !(Maybe DiscoveryclustersClustersItemBanner_with_content_container)
+    , _dciUid                        :: !(Maybe Text)
+    , _dciTotalVolumes               :: !(Maybe (Textual Int32))
+    , _dciSubTitle                   :: !(Maybe Text)
+    , _dciTitle                      :: !(Maybe Text)
+    , _dciVolumes                    :: !(Maybe [Volume])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DiscoveryclustersClustersItem' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dciBannerWithContentContainer'
+--
+-- * 'dciUid'
+--
+-- * 'dciTotalVolumes'
+--
+-- * 'dciSubTitle'
+--
+-- * 'dciTitle'
+--
+-- * 'dciVolumes'
+discoveryclustersClustersItem
+    :: DiscoveryclustersClustersItem
+discoveryclustersClustersItem =
+    DiscoveryclustersClustersItem
+    { _dciBannerWithContentContainer = Nothing
+    , _dciUid = Nothing
+    , _dciTotalVolumes = Nothing
+    , _dciSubTitle = Nothing
+    , _dciTitle = Nothing
+    , _dciVolumes = Nothing
+    }
+
+dciBannerWithContentContainer :: Lens' DiscoveryclustersClustersItem (Maybe DiscoveryclustersClustersItemBanner_with_content_container)
+dciBannerWithContentContainer
+  = lens _dciBannerWithContentContainer
+      (\ s a -> s{_dciBannerWithContentContainer = a})
+
+dciUid :: Lens' DiscoveryclustersClustersItem (Maybe Text)
+dciUid = lens _dciUid (\ s a -> s{_dciUid = a})
+
+dciTotalVolumes :: Lens' DiscoveryclustersClustersItem (Maybe Int32)
+dciTotalVolumes
+  = lens _dciTotalVolumes
+      (\ s a -> s{_dciTotalVolumes = a})
+      . mapping _Coerce
+
+dciSubTitle :: Lens' DiscoveryclustersClustersItem (Maybe Text)
+dciSubTitle
+  = lens _dciSubTitle (\ s a -> s{_dciSubTitle = a})
+
+dciTitle :: Lens' DiscoveryclustersClustersItem (Maybe Text)
+dciTitle = lens _dciTitle (\ s a -> s{_dciTitle = a})
+
+dciVolumes :: Lens' DiscoveryclustersClustersItem [Volume]
+dciVolumes
+  = lens _dciVolumes (\ s a -> s{_dciVolumes = a}) .
+      _Default
+      . _Coerce
+
+instance FromJSON DiscoveryclustersClustersItem where
+        parseJSON
+          = withObject "DiscoveryclustersClustersItem"
+              (\ o ->
+                 DiscoveryclustersClustersItem <$>
+                   (o .:? "banner_with_content_container") <*>
+                     (o .:? "uid")
+                     <*> (o .:? "totalVolumes")
+                     <*> (o .:? "subTitle")
+                     <*> (o .:? "title")
+                     <*> (o .:? "volumes" .!= mempty))
+
+instance ToJSON DiscoveryclustersClustersItem where
+        toJSON DiscoveryclustersClustersItem{..}
+          = object
+              (catMaybes
+                 [("banner_with_content_container" .=) <$>
+                    _dciBannerWithContentContainer,
+                  ("uid" .=) <$> _dciUid,
+                  ("totalVolumes" .=) <$> _dciTotalVolumes,
+                  ("subTitle" .=) <$> _dciSubTitle,
+                  ("title" .=) <$> _dciTitle,
+                  ("volumes" .=) <$> _dciVolumes])
+
+-- | The actual selling price of the book. This is the same as the suggested
+-- retail or list price unless there are offers or discounts on this
+-- volume. (In LITE projection.)
+--
+-- /See:/ 'volumeSaleInfoRetailPrice' smart constructor.
+data VolumeSaleInfoRetailPrice = VolumeSaleInfoRetailPrice
+    { _vsirpAmount       :: !(Maybe (Textual Double))
+    , _vsirpCurrencyCode :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'VolumeSaleInfoRetailPrice' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'vsirpAmount'
+--
+-- * 'vsirpCurrencyCode'
+volumeSaleInfoRetailPrice
+    :: VolumeSaleInfoRetailPrice
+volumeSaleInfoRetailPrice =
+    VolumeSaleInfoRetailPrice
+    { _vsirpAmount = Nothing
+    , _vsirpCurrencyCode = Nothing
+    }
+
+-- | Amount in the currency listed below. (In LITE projection.)
+vsirpAmount :: Lens' VolumeSaleInfoRetailPrice (Maybe Double)
+vsirpAmount
+  = lens _vsirpAmount (\ s a -> s{_vsirpAmount = a}) .
+      mapping _Coerce
+
+-- | An ISO 4217, three-letter currency code. (In LITE projection.)
+vsirpCurrencyCode :: Lens' VolumeSaleInfoRetailPrice (Maybe Text)
+vsirpCurrencyCode
+  = lens _vsirpCurrencyCode
+      (\ s a -> s{_vsirpCurrencyCode = a})
+
+instance FromJSON VolumeSaleInfoRetailPrice where
+        parseJSON
+          = withObject "VolumeSaleInfoRetailPrice"
+              (\ o ->
+                 VolumeSaleInfoRetailPrice <$>
+                   (o .:? "amount") <*> (o .:? "currencyCode"))
+
+instance ToJSON VolumeSaleInfoRetailPrice where
+        toJSON VolumeSaleInfoRetailPrice{..}
+          = object
+              (catMaybes
+                 [("amount" .=) <$> _vsirpAmount,
+                  ("currencyCode" .=) <$> _vsirpCurrencyCode])
+
+-- | Suggested retail price. (In LITE projection.)
+--
+-- /See:/ 'volumeSaleInfoListPrice' smart constructor.
+data VolumeSaleInfoListPrice = VolumeSaleInfoListPrice
+    { _vsilpAmount       :: !(Maybe (Textual Double))
+    , _vsilpCurrencyCode :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'VolumeSaleInfoListPrice' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'vsilpAmount'
+--
+-- * 'vsilpCurrencyCode'
+volumeSaleInfoListPrice
+    :: VolumeSaleInfoListPrice
+volumeSaleInfoListPrice =
+    VolumeSaleInfoListPrice
+    { _vsilpAmount = Nothing
+    , _vsilpCurrencyCode = Nothing
+    }
+
+-- | Amount in the currency listed below. (In LITE projection.)
+vsilpAmount :: Lens' VolumeSaleInfoListPrice (Maybe Double)
+vsilpAmount
+  = lens _vsilpAmount (\ s a -> s{_vsilpAmount = a}) .
+      mapping _Coerce
+
+-- | An ISO 4217, three-letter currency code. (In LITE projection.)
+vsilpCurrencyCode :: Lens' VolumeSaleInfoListPrice (Maybe Text)
+vsilpCurrencyCode
+  = lens _vsilpCurrencyCode
+      (\ s a -> s{_vsilpCurrencyCode = a})
+
+instance FromJSON VolumeSaleInfoListPrice where
+        parseJSON
+          = withObject "VolumeSaleInfoListPrice"
+              (\ o ->
+                 VolumeSaleInfoListPrice <$>
+                   (o .:? "amount") <*> (o .:? "currencyCode"))
+
+instance ToJSON VolumeSaleInfoListPrice where
+        toJSON VolumeSaleInfoListPrice{..}
+          = object
+              (catMaybes
+                 [("amount" .=) <$> _vsilpAmount,
+                  ("currencyCode" .=) <$> _vsilpCurrencyCode])
+
+--
+-- /See:/ 'dictlayerDataDictWordsItemSensesItemConjugationsItem' smart constructor.
+data DictlayerDataDictWordsItemSensesItemConjugationsItem = DictlayerDataDictWordsItemSensesItemConjugationsItem
+    { _dddwisiciValue :: !(Maybe Text)
+    , _dddwisiciType  :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DictlayerDataDictWordsItemSensesItemConjugationsItem' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dddwisiciValue'
+--
+-- * 'dddwisiciType'
+dictlayerDataDictWordsItemSensesItemConjugationsItem
+    :: DictlayerDataDictWordsItemSensesItemConjugationsItem
+dictlayerDataDictWordsItemSensesItemConjugationsItem =
+    DictlayerDataDictWordsItemSensesItemConjugationsItem
+    { _dddwisiciValue = Nothing
+    , _dddwisiciType = Nothing
+    }
+
+dddwisiciValue :: Lens' DictlayerDataDictWordsItemSensesItemConjugationsItem (Maybe Text)
+dddwisiciValue
+  = lens _dddwisiciValue
+      (\ s a -> s{_dddwisiciValue = a})
+
+dddwisiciType :: Lens' DictlayerDataDictWordsItemSensesItemConjugationsItem (Maybe Text)
+dddwisiciType
+  = lens _dddwisiciType
+      (\ s a -> s{_dddwisiciType = a})
+
+instance FromJSON
+         DictlayerDataDictWordsItemSensesItemConjugationsItem
+         where
+        parseJSON
+          = withObject
+              "DictlayerDataDictWordsItemSensesItemConjugationsItem"
+              (\ o ->
+                 DictlayerDataDictWordsItemSensesItemConjugationsItem
+                   <$> (o .:? "value") <*> (o .:? "type"))
+
+instance ToJSON
+         DictlayerDataDictWordsItemSensesItemConjugationsItem
+         where
+        toJSON
+          DictlayerDataDictWordsItemSensesItemConjugationsItem{..}
+          = object
+              (catMaybes
+                 [("value" .=) <$> _dddwisiciValue,
+                  ("type" .=) <$> _dddwisiciType])
+
+--
+-- /See:/ 'volume2' smart constructor.
+data Volume2 = Volume2
+    { _voloNextPageToken :: !(Maybe Text)
+    , _voloKind          :: !Text
+    , _voloItems         :: !(Maybe [Volume])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Volume2' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'voloNextPageToken'
+--
+-- * 'voloKind'
+--
+-- * 'voloItems'
+volume2
+    :: Volume2
+volume2 =
+    Volume2
+    { _voloNextPageToken = Nothing
+    , _voloKind = "onboarding#volume"
+    , _voloItems = Nothing
+    }
+
+voloNextPageToken :: Lens' Volume2 (Maybe Text)
+voloNextPageToken
+  = lens _voloNextPageToken
+      (\ s a -> s{_voloNextPageToken = a})
+
+-- | Resource type.
+voloKind :: Lens' Volume2 Text
+voloKind = lens _voloKind (\ s a -> s{_voloKind = a})
+
+-- | A list of volumes.
+voloItems :: Lens' Volume2 [Volume]
+voloItems
+  = lens _voloItems (\ s a -> s{_voloItems = a}) .
+      _Default
+      . _Coerce
+
+instance FromJSON Volume2 where
+        parseJSON
+          = withObject "Volume2"
+              (\ o ->
+                 Volume2 <$>
+                   (o .:? "nextPageToken") <*>
+                     (o .:? "kind" .!= "onboarding#volume")
+                     <*> (o .:? "items" .!= mempty))
+
+instance ToJSON Volume2 where
+        toJSON Volume2{..}
+          = object
+              (catMaybes
+                 [("nextPageToken" .=) <$> _voloNextPageToken,
+                  Just ("kind" .= _voloKind),
+                  ("items" .=) <$> _voloItems])
+
+--
+-- /See:/ 'review' smart constructor.
+data Review = Review
+    { _rRating      :: !(Maybe Text)
+    , _rKind        :: !Text
+    , _rContent     :: !(Maybe Text)
+    , _rDate        :: !(Maybe Text)
+    , _rVolumeId    :: !(Maybe Text)
+    , _rAuthor      :: !(Maybe ReviewAuthor)
+    , _rSource      :: !(Maybe ReviewSource)
+    , _rFullTextURL :: !(Maybe Text)
+    , _rTitle       :: !(Maybe Text)
+    , _rType        :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Review' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'rRating'
+--
+-- * 'rKind'
+--
+-- * 'rContent'
+--
+-- * 'rDate'
+--
+-- * 'rVolumeId'
+--
+-- * 'rAuthor'
+--
+-- * 'rSource'
+--
+-- * 'rFullTextURL'
+--
+-- * 'rTitle'
+--
+-- * 'rType'
+review
+    :: Review
+review =
+    Review
+    { _rRating = Nothing
+    , _rKind = "books#review"
+    , _rContent = Nothing
+    , _rDate = Nothing
+    , _rVolumeId = Nothing
+    , _rAuthor = Nothing
+    , _rSource = Nothing
+    , _rFullTextURL = Nothing
+    , _rTitle = Nothing
+    , _rType = Nothing
+    }
+
+-- | Star rating for this review. Possible values are ONE, TWO, THREE, FOUR,
+-- FIVE or NOT_RATED.
+rRating :: Lens' Review (Maybe Text)
+rRating = lens _rRating (\ s a -> s{_rRating = a})
+
+-- | Resource type for a review.
+rKind :: Lens' Review Text
+rKind = lens _rKind (\ s a -> s{_rKind = a})
+
+-- | Review text.
+rContent :: Lens' Review (Maybe Text)
+rContent = lens _rContent (\ s a -> s{_rContent = a})
+
+-- | Date of this review.
+rDate :: Lens' Review (Maybe Text)
+rDate = lens _rDate (\ s a -> s{_rDate = a})
+
+-- | Volume that this review is for.
+rVolumeId :: Lens' Review (Maybe Text)
+rVolumeId
+  = lens _rVolumeId (\ s a -> s{_rVolumeId = a})
+
+-- | Author of this review.
+rAuthor :: Lens' Review (Maybe ReviewAuthor)
+rAuthor = lens _rAuthor (\ s a -> s{_rAuthor = a})
+
+-- | Information regarding the source of this review, when the review is not
+-- from a Google Books user.
+rSource :: Lens' Review (Maybe ReviewSource)
+rSource = lens _rSource (\ s a -> s{_rSource = a})
+
+-- | URL for the full review text, for reviews gathered from the web.
+rFullTextURL :: Lens' Review (Maybe Text)
+rFullTextURL
+  = lens _rFullTextURL (\ s a -> s{_rFullTextURL = a})
+
+-- | Title for this review.
+rTitle :: Lens' Review (Maybe Text)
+rTitle = lens _rTitle (\ s a -> s{_rTitle = a})
+
+-- | Source type for this review. Possible values are EDITORIAL, WEB_USER or
+-- GOOGLE_USER.
+rType :: Lens' Review (Maybe Text)
+rType = lens _rType (\ s a -> s{_rType = a})
+
+instance FromJSON Review where
+        parseJSON
+          = withObject "Review"
+              (\ o ->
+                 Review <$>
+                   (o .:? "rating") <*>
+                     (o .:? "kind" .!= "books#review")
+                     <*> (o .:? "content")
+                     <*> (o .:? "date")
+                     <*> (o .:? "volumeId")
+                     <*> (o .:? "author")
+                     <*> (o .:? "source")
+                     <*> (o .:? "fullTextUrl")
+                     <*> (o .:? "title")
+                     <*> (o .:? "type"))
+
+instance ToJSON Review where
+        toJSON Review{..}
+          = object
+              (catMaybes
+                 [("rating" .=) <$> _rRating, Just ("kind" .= _rKind),
+                  ("content" .=) <$> _rContent, ("date" .=) <$> _rDate,
+                  ("volumeId" .=) <$> _rVolumeId,
+                  ("author" .=) <$> _rAuthor,
+                  ("source" .=) <$> _rSource,
+                  ("fullTextUrl" .=) <$> _rFullTextURL,
+                  ("title" .=) <$> _rTitle, ("type" .=) <$> _rType])
+
+-- | Period during this book is\/was a valid rental.
+--
+-- /See:/ 'volumeUserInfoRentalPeriod' smart constructor.
+data VolumeUserInfoRentalPeriod = VolumeUserInfoRentalPeriod
+    { _vuirpEndUtcSec   :: !(Maybe (Textual Int64))
+    , _vuirpStartUtcSec :: !(Maybe (Textual Int64))
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'VolumeUserInfoRentalPeriod' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'vuirpEndUtcSec'
+--
+-- * 'vuirpStartUtcSec'
+volumeUserInfoRentalPeriod
+    :: VolumeUserInfoRentalPeriod
+volumeUserInfoRentalPeriod =
+    VolumeUserInfoRentalPeriod
+    { _vuirpEndUtcSec = Nothing
+    , _vuirpStartUtcSec = Nothing
+    }
+
+vuirpEndUtcSec :: Lens' VolumeUserInfoRentalPeriod (Maybe Int64)
+vuirpEndUtcSec
+  = lens _vuirpEndUtcSec
+      (\ s a -> s{_vuirpEndUtcSec = a})
+      . mapping _Coerce
+
+vuirpStartUtcSec :: Lens' VolumeUserInfoRentalPeriod (Maybe Int64)
+vuirpStartUtcSec
+  = lens _vuirpStartUtcSec
+      (\ s a -> s{_vuirpStartUtcSec = a})
+      . mapping _Coerce
+
+instance FromJSON VolumeUserInfoRentalPeriod where
+        parseJSON
+          = withObject "VolumeUserInfoRentalPeriod"
+              (\ o ->
+                 VolumeUserInfoRentalPeriod <$>
+                   (o .:? "endUtcSec") <*> (o .:? "startUtcSec"))
+
+instance ToJSON VolumeUserInfoRentalPeriod where
+        toJSON VolumeUserInfoRentalPeriod{..}
+          = object
+              (catMaybes
+                 [("endUtcSec" .=) <$> _vuirpEndUtcSec,
+                  ("startUtcSec" .=) <$> _vuirpStartUtcSec])
+
+-- | Any information about a volume related to the eBookstore and\/or
+-- purchaseability. This information can depend on the country where the
+-- request originates from (i.e. books may not be for sale in certain
+-- countries).
+--
+-- /See:/ 'volumeSaleInfo' smart constructor.
+data VolumeSaleInfo = VolumeSaleInfo
+    { _vsiCountry     :: !(Maybe Text)
+    , _vsiOnSaleDate  :: !(Maybe DateTime')
+    , _vsiListPrice   :: !(Maybe VolumeSaleInfoListPrice)
+    , _vsiRetailPrice :: !(Maybe VolumeSaleInfoRetailPrice)
+    , _vsiOffers      :: !(Maybe [VolumeSaleInfoOffersItem])
+    , _vsiBuyLink     :: !(Maybe Text)
+    , _vsiIsEbook     :: !(Maybe Bool)
+    , _vsiSaleability :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'VolumeSaleInfo' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'vsiCountry'
+--
+-- * 'vsiOnSaleDate'
+--
+-- * 'vsiListPrice'
+--
+-- * 'vsiRetailPrice'
+--
+-- * 'vsiOffers'
+--
+-- * 'vsiBuyLink'
+--
+-- * 'vsiIsEbook'
+--
+-- * 'vsiSaleability'
+volumeSaleInfo
+    :: VolumeSaleInfo
+volumeSaleInfo =
+    VolumeSaleInfo
+    { _vsiCountry = Nothing
+    , _vsiOnSaleDate = Nothing
+    , _vsiListPrice = Nothing
+    , _vsiRetailPrice = Nothing
+    , _vsiOffers = Nothing
+    , _vsiBuyLink = Nothing
+    , _vsiIsEbook = Nothing
+    , _vsiSaleability = Nothing
+    }
+
+-- | The two-letter ISO_3166-1 country code for which this sale information
+-- is valid. (In LITE projection.)
+vsiCountry :: Lens' VolumeSaleInfo (Maybe Text)
+vsiCountry
+  = lens _vsiCountry (\ s a -> s{_vsiCountry = a})
+
+-- | The date on which this book is available for sale.
+vsiOnSaleDate :: Lens' VolumeSaleInfo (Maybe UTCTime)
+vsiOnSaleDate
+  = lens _vsiOnSaleDate
+      (\ s a -> s{_vsiOnSaleDate = a})
+      . mapping _DateTime
+
+-- | Suggested retail price. (In LITE projection.)
+vsiListPrice :: Lens' VolumeSaleInfo (Maybe VolumeSaleInfoListPrice)
+vsiListPrice
+  = lens _vsiListPrice (\ s a -> s{_vsiListPrice = a})
+
+-- | The actual selling price of the book. This is the same as the suggested
+-- retail or list price unless there are offers or discounts on this
+-- volume. (In LITE projection.)
+vsiRetailPrice :: Lens' VolumeSaleInfo (Maybe VolumeSaleInfoRetailPrice)
+vsiRetailPrice
+  = lens _vsiRetailPrice
+      (\ s a -> s{_vsiRetailPrice = a})
+
+-- | Offers available for this volume (sales and rentals).
+vsiOffers :: Lens' VolumeSaleInfo [VolumeSaleInfoOffersItem]
+vsiOffers
+  = lens _vsiOffers (\ s a -> s{_vsiOffers = a}) .
+      _Default
+      . _Coerce
+
+-- | URL to purchase this volume on the Google Books site. (In LITE
+-- projection)
+vsiBuyLink :: Lens' VolumeSaleInfo (Maybe Text)
+vsiBuyLink
+  = lens _vsiBuyLink (\ s a -> s{_vsiBuyLink = a})
+
+-- | Whether or not this volume is an eBook (can be added to the My eBooks
+-- shelf).
+vsiIsEbook :: Lens' VolumeSaleInfo (Maybe Bool)
+vsiIsEbook
+  = lens _vsiIsEbook (\ s a -> s{_vsiIsEbook = a})
+
+-- | Whether or not this book is available for sale or offered for free in
+-- the Google eBookstore for the country listed above. Possible values are
+-- FOR_SALE, FOR_RENTAL_ONLY, FOR_SALE_AND_RENTAL, FREE, NOT_FOR_SALE, or
+-- FOR_PREORDER.
+vsiSaleability :: Lens' VolumeSaleInfo (Maybe Text)
+vsiSaleability
+  = lens _vsiSaleability
+      (\ s a -> s{_vsiSaleability = a})
+
+instance FromJSON VolumeSaleInfo where
+        parseJSON
+          = withObject "VolumeSaleInfo"
+              (\ o ->
+                 VolumeSaleInfo <$>
+                   (o .:? "country") <*> (o .:? "onSaleDate") <*>
+                     (o .:? "listPrice")
+                     <*> (o .:? "retailPrice")
+                     <*> (o .:? "offers" .!= mempty)
+                     <*> (o .:? "buyLink")
+                     <*> (o .:? "isEbook")
+                     <*> (o .:? "saleability"))
+
+instance ToJSON VolumeSaleInfo where
+        toJSON VolumeSaleInfo{..}
+          = object
+              (catMaybes
+                 [("country" .=) <$> _vsiCountry,
+                  ("onSaleDate" .=) <$> _vsiOnSaleDate,
+                  ("listPrice" .=) <$> _vsiListPrice,
+                  ("retailPrice" .=) <$> _vsiRetailPrice,
+                  ("offers" .=) <$> _vsiOffers,
+                  ("buyLink" .=) <$> _vsiBuyLink,
+                  ("isEbook" .=) <$> _vsiIsEbook,
+                  ("saleability" .=) <$> _vsiSaleability])
+
+--
+-- /See:/ 'metadata' smart constructor.
+data Metadata = Metadata
+    { _mKind  :: !Text
+    , _mItems :: !(Maybe [MetadataItemsItem])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Metadata' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'mKind'
+--
+-- * 'mItems'
+metadata
+    :: Metadata
+metadata =
+    Metadata
+    { _mKind = "dictionary#metadata"
+    , _mItems = Nothing
+    }
+
+-- | Resource type.
+mKind :: Lens' Metadata Text
+mKind = lens _mKind (\ s a -> s{_mKind = a})
+
+-- | A list of offline dictionary metadata.
+mItems :: Lens' Metadata [MetadataItemsItem]
+mItems
+  = lens _mItems (\ s a -> s{_mItems = a}) . _Default .
+      _Coerce
+
+instance FromJSON Metadata where
+        parseJSON
+          = withObject "Metadata"
+              (\ o ->
+                 Metadata <$>
+                   (o .:? "kind" .!= "dictionary#metadata") <*>
+                     (o .:? "items" .!= mempty))
+
+instance ToJSON Metadata where
+        toJSON Metadata{..}
+          = object
+              (catMaybes
+                 [Just ("kind" .= _mKind), ("items" .=) <$> _mItems])
+
+-- | What layers exist in this volume and high level information about them.
+--
+-- /See:/ 'volumeLayerInfo' smart constructor.
+newtype VolumeLayerInfo = VolumeLayerInfo
+    { _vliLayers :: Maybe [VolumeLayerInfoLayersItem]
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'VolumeLayerInfo' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'vliLayers'
+volumeLayerInfo
+    :: VolumeLayerInfo
+volumeLayerInfo =
+    VolumeLayerInfo
+    { _vliLayers = Nothing
+    }
+
+-- | A layer should appear here if and only if the layer exists for this
+-- book.
+vliLayers :: Lens' VolumeLayerInfo [VolumeLayerInfoLayersItem]
+vliLayers
+  = lens _vliLayers (\ s a -> s{_vliLayers = a}) .
+      _Default
+      . _Coerce
+
+instance FromJSON VolumeLayerInfo where
+        parseJSON
+          = withObject "VolumeLayerInfo"
+              (\ o ->
+                 VolumeLayerInfo <$> (o .:? "layers" .!= mempty))
+
+instance ToJSON VolumeLayerInfo where
+        toJSON VolumeLayerInfo{..}
+          = object (catMaybes [("layers" .=) <$> _vliLayers])
+
+-- | Physical dimensions of this volume.
+--
+-- /See:/ 'volumeVolumeInfoDimensions' smart constructor.
+data VolumeVolumeInfoDimensions = VolumeVolumeInfoDimensions
+    { _vvidHeight    :: !(Maybe Text)
+    , _vvidWidth     :: !(Maybe Text)
+    , _vvidThickness :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'VolumeVolumeInfoDimensions' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'vvidHeight'
+--
+-- * 'vvidWidth'
+--
+-- * 'vvidThickness'
+volumeVolumeInfoDimensions
+    :: VolumeVolumeInfoDimensions
+volumeVolumeInfoDimensions =
+    VolumeVolumeInfoDimensions
+    { _vvidHeight = Nothing
+    , _vvidWidth = Nothing
+    , _vvidThickness = Nothing
+    }
+
+-- | Height or length of this volume (in cm).
+vvidHeight :: Lens' VolumeVolumeInfoDimensions (Maybe Text)
+vvidHeight
+  = lens _vvidHeight (\ s a -> s{_vvidHeight = a})
+
+-- | Width of this volume (in cm).
+vvidWidth :: Lens' VolumeVolumeInfoDimensions (Maybe Text)
+vvidWidth
+  = lens _vvidWidth (\ s a -> s{_vvidWidth = a})
+
+-- | Thickness of this volume (in cm).
+vvidThickness :: Lens' VolumeVolumeInfoDimensions (Maybe Text)
+vvidThickness
+  = lens _vvidThickness
+      (\ s a -> s{_vvidThickness = a})
+
+instance FromJSON VolumeVolumeInfoDimensions where
+        parseJSON
+          = withObject "VolumeVolumeInfoDimensions"
+              (\ o ->
+                 VolumeVolumeInfoDimensions <$>
+                   (o .:? "height") <*> (o .:? "width") <*>
+                     (o .:? "thickness"))
+
+instance ToJSON VolumeVolumeInfoDimensions where
+        toJSON VolumeVolumeInfoDimensions{..}
+          = object
+              (catMaybes
+                 [("height" .=) <$> _vvidHeight,
+                  ("width" .=) <$> _vvidWidth,
+                  ("thickness" .=) <$> _vvidThickness])
+
+--
+-- /See:/ 'requestAccess' smart constructor.
+data RequestAccess = RequestAccess
+    { _raConcurrentAccess :: !(Maybe ConcurrentAccessRestriction)
+    , _raKind             :: !Text
+    , _raDownloadAccess   :: !(Maybe DownloadAccessRestriction)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'RequestAccess' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'raConcurrentAccess'
+--
+-- * 'raKind'
+--
+-- * 'raDownloadAccess'
+requestAccess
+    :: RequestAccess
+requestAccess =
+    RequestAccess
+    { _raConcurrentAccess = Nothing
+    , _raKind = "books#requestAccess"
+    , _raDownloadAccess = Nothing
+    }
+
+-- | A concurrent access response.
+raConcurrentAccess :: Lens' RequestAccess (Maybe ConcurrentAccessRestriction)
+raConcurrentAccess
+  = lens _raConcurrentAccess
+      (\ s a -> s{_raConcurrentAccess = a})
+
+-- | Resource type.
+raKind :: Lens' RequestAccess Text
+raKind = lens _raKind (\ s a -> s{_raKind = a})
+
+-- | A download access response.
+raDownloadAccess :: Lens' RequestAccess (Maybe DownloadAccessRestriction)
+raDownloadAccess
+  = lens _raDownloadAccess
+      (\ s a -> s{_raDownloadAccess = a})
+
+instance FromJSON RequestAccess where
+        parseJSON
+          = withObject "RequestAccess"
+              (\ o ->
+                 RequestAccess <$>
+                   (o .:? "concurrentAccess") <*>
+                     (o .:? "kind" .!= "books#requestAccess")
+                     <*> (o .:? "downloadAccess"))
+
+instance ToJSON RequestAccess where
+        toJSON RequestAccess{..}
+          = object
+              (catMaybes
+                 [("concurrentAccess" .=) <$> _raConcurrentAccess,
+                  Just ("kind" .= _raKind),
+                  ("downloadAccess" .=) <$> _raDownloadAccess])
+
+-- | Selection ranges sent from the client.
+--
+-- /See:/ 'annotationClientVersionRanges' smart constructor.
+data AnnotationClientVersionRanges = AnnotationClientVersionRanges
+    { _acvrGbImageRange   :: !(Maybe BooksAnnotationsRange)
+    , _acvrContentVersion :: !(Maybe Text)
+    , _acvrImageCfiRange  :: !(Maybe BooksAnnotationsRange)
+    , _acvrGbTextRange    :: !(Maybe BooksAnnotationsRange)
+    , _acvrCfiRange       :: !(Maybe BooksAnnotationsRange)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'AnnotationClientVersionRanges' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'acvrGbImageRange'
+--
+-- * 'acvrContentVersion'
+--
+-- * 'acvrImageCfiRange'
+--
+-- * 'acvrGbTextRange'
+--
+-- * 'acvrCfiRange'
+annotationClientVersionRanges
+    :: AnnotationClientVersionRanges
+annotationClientVersionRanges =
+    AnnotationClientVersionRanges
+    { _acvrGbImageRange = Nothing
+    , _acvrContentVersion = Nothing
+    , _acvrImageCfiRange = Nothing
+    , _acvrGbTextRange = Nothing
+    , _acvrCfiRange = Nothing
+    }
+
+-- | Range in GB image format for this annotation sent by client.
+acvrGbImageRange :: Lens' AnnotationClientVersionRanges (Maybe BooksAnnotationsRange)
+acvrGbImageRange
+  = lens _acvrGbImageRange
+      (\ s a -> s{_acvrGbImageRange = a})
+
+-- | Content version the client sent in.
+acvrContentVersion :: Lens' AnnotationClientVersionRanges (Maybe Text)
+acvrContentVersion
+  = lens _acvrContentVersion
+      (\ s a -> s{_acvrContentVersion = a})
+
+-- | Range in image CFI format for this annotation sent by client.
+acvrImageCfiRange :: Lens' AnnotationClientVersionRanges (Maybe BooksAnnotationsRange)
+acvrImageCfiRange
+  = lens _acvrImageCfiRange
+      (\ s a -> s{_acvrImageCfiRange = a})
+
+-- | Range in GB text format for this annotation sent by client.
+acvrGbTextRange :: Lens' AnnotationClientVersionRanges (Maybe BooksAnnotationsRange)
+acvrGbTextRange
+  = lens _acvrGbTextRange
+      (\ s a -> s{_acvrGbTextRange = a})
+
+-- | Range in CFI format for this annotation sent by client.
+acvrCfiRange :: Lens' AnnotationClientVersionRanges (Maybe BooksAnnotationsRange)
+acvrCfiRange
+  = lens _acvrCfiRange (\ s a -> s{_acvrCfiRange = a})
+
+instance FromJSON AnnotationClientVersionRanges where
+        parseJSON
+          = withObject "AnnotationClientVersionRanges"
+              (\ o ->
+                 AnnotationClientVersionRanges <$>
+                   (o .:? "gbImageRange") <*> (o .:? "contentVersion")
+                     <*> (o .:? "imageCfiRange")
+                     <*> (o .:? "gbTextRange")
+                     <*> (o .:? "cfiRange"))
+
+instance ToJSON AnnotationClientVersionRanges where
+        toJSON AnnotationClientVersionRanges{..}
+          = object
+              (catMaybes
+                 [("gbImageRange" .=) <$> _acvrGbImageRange,
+                  ("contentVersion" .=) <$> _acvrContentVersion,
+                  ("imageCfiRange" .=) <$> _acvrImageCfiRange,
+                  ("gbTextRange" .=) <$> _acvrGbTextRange,
+                  ("cfiRange" .=) <$> _acvrCfiRange])
+
+--
+-- /See:/ 'dictlayerDataDictWordsItemSensesItemDefinitionsItem' smart constructor.
+data DictlayerDataDictWordsItemSensesItemDefinitionsItem = DictlayerDataDictWordsItemSensesItemDefinitionsItem
+    { _dddwisidiDefinition :: !(Maybe Text)
+    , _dddwisidiExamples   :: !(Maybe [DictlayerDataDictWordsItemSensesItemDefinitionsItemExamplesItem])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DictlayerDataDictWordsItemSensesItemDefinitionsItem' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dddwisidiDefinition'
+--
+-- * 'dddwisidiExamples'
+dictlayerDataDictWordsItemSensesItemDefinitionsItem
+    :: DictlayerDataDictWordsItemSensesItemDefinitionsItem
+dictlayerDataDictWordsItemSensesItemDefinitionsItem =
+    DictlayerDataDictWordsItemSensesItemDefinitionsItem
+    { _dddwisidiDefinition = Nothing
+    , _dddwisidiExamples = Nothing
+    }
+
+dddwisidiDefinition :: Lens' DictlayerDataDictWordsItemSensesItemDefinitionsItem (Maybe Text)
+dddwisidiDefinition
+  = lens _dddwisidiDefinition
+      (\ s a -> s{_dddwisidiDefinition = a})
+
+dddwisidiExamples :: Lens' DictlayerDataDictWordsItemSensesItemDefinitionsItem [DictlayerDataDictWordsItemSensesItemDefinitionsItemExamplesItem]
+dddwisidiExamples
+  = lens _dddwisidiExamples
+      (\ s a -> s{_dddwisidiExamples = a})
+      . _Default
+      . _Coerce
+
+instance FromJSON
+         DictlayerDataDictWordsItemSensesItemDefinitionsItem
+         where
+        parseJSON
+          = withObject
+              "DictlayerDataDictWordsItemSensesItemDefinitionsItem"
+              (\ o ->
+                 DictlayerDataDictWordsItemSensesItemDefinitionsItem
+                   <$>
+                   (o .:? "definition") <*>
+                     (o .:? "examples" .!= mempty))
+
+instance ToJSON
+         DictlayerDataDictWordsItemSensesItemDefinitionsItem
+         where
+        toJSON
+          DictlayerDataDictWordsItemSensesItemDefinitionsItem{..}
+          = object
+              (catMaybes
+                 [("definition" .=) <$> _dddwisidiDefinition,
+                  ("examples" .=) <$> _dddwisidiExamples])
+
+--
+-- /See:/ 'volumeLayerInfoLayersItem' smart constructor.
+data VolumeLayerInfoLayersItem = VolumeLayerInfoLayersItem
+    { _vliliVolumeAnnotationsVersion :: !(Maybe Text)
+    , _vliliLayerId                  :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'VolumeLayerInfoLayersItem' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'vliliVolumeAnnotationsVersion'
+--
+-- * 'vliliLayerId'
+volumeLayerInfoLayersItem
+    :: VolumeLayerInfoLayersItem
+volumeLayerInfoLayersItem =
+    VolumeLayerInfoLayersItem
+    { _vliliVolumeAnnotationsVersion = Nothing
+    , _vliliLayerId = Nothing
+    }
+
+-- | The current version of this layer\'s volume annotations. Note that this
+-- version applies only to the data in the books.layers.volumeAnnotations.*
+-- responses. The actual annotation data is versioned separately.
+vliliVolumeAnnotationsVersion :: Lens' VolumeLayerInfoLayersItem (Maybe Text)
+vliliVolumeAnnotationsVersion
+  = lens _vliliVolumeAnnotationsVersion
+      (\ s a -> s{_vliliVolumeAnnotationsVersion = a})
+
+-- | The layer id of this layer (e.g. \"geo\").
+vliliLayerId :: Lens' VolumeLayerInfoLayersItem (Maybe Text)
+vliliLayerId
+  = lens _vliliLayerId (\ s a -> s{_vliliLayerId = a})
+
+instance FromJSON VolumeLayerInfoLayersItem where
+        parseJSON
+          = withObject "VolumeLayerInfoLayersItem"
+              (\ o ->
+                 VolumeLayerInfoLayersItem <$>
+                   (o .:? "volumeAnnotationsVersion") <*>
+                     (o .:? "layerId"))
+
+instance ToJSON VolumeLayerInfoLayersItem where
+        toJSON VolumeLayerInfoLayersItem{..}
+          = object
+              (catMaybes
+                 [("volumeAnnotationsVersion" .=) <$>
+                    _vliliVolumeAnnotationsVersion,
+                  ("layerId" .=) <$> _vliliLayerId])
+
+-- | Selection ranges for the most recent content version.
+--
+-- /See:/ 'annotationCurrentVersionRanges' smart constructor.
+data AnnotationCurrentVersionRanges = AnnotationCurrentVersionRanges
+    { _aGbImageRange   :: !(Maybe BooksAnnotationsRange)
+    , _aContentVersion :: !(Maybe Text)
+    , _aImageCfiRange  :: !(Maybe BooksAnnotationsRange)
+    , _aGbTextRange    :: !(Maybe BooksAnnotationsRange)
+    , _aCfiRange       :: !(Maybe BooksAnnotationsRange)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'AnnotationCurrentVersionRanges' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'aGbImageRange'
+--
+-- * 'aContentVersion'
+--
+-- * 'aImageCfiRange'
+--
+-- * 'aGbTextRange'
+--
+-- * 'aCfiRange'
+annotationCurrentVersionRanges
+    :: AnnotationCurrentVersionRanges
+annotationCurrentVersionRanges =
+    AnnotationCurrentVersionRanges
+    { _aGbImageRange = Nothing
+    , _aContentVersion = Nothing
+    , _aImageCfiRange = Nothing
+    , _aGbTextRange = Nothing
+    , _aCfiRange = Nothing
+    }
+
+-- | Range in GB image format for this annotation for version above.
+aGbImageRange :: Lens' AnnotationCurrentVersionRanges (Maybe BooksAnnotationsRange)
+aGbImageRange
+  = lens _aGbImageRange
+      (\ s a -> s{_aGbImageRange = a})
+
+-- | Content version applicable to ranges below.
+aContentVersion :: Lens' AnnotationCurrentVersionRanges (Maybe Text)
+aContentVersion
+  = lens _aContentVersion
+      (\ s a -> s{_aContentVersion = a})
+
+-- | Range in image CFI format for this annotation for version above.
+aImageCfiRange :: Lens' AnnotationCurrentVersionRanges (Maybe BooksAnnotationsRange)
+aImageCfiRange
+  = lens _aImageCfiRange
+      (\ s a -> s{_aImageCfiRange = a})
+
+-- | Range in GB text format for this annotation for version above.
+aGbTextRange :: Lens' AnnotationCurrentVersionRanges (Maybe BooksAnnotationsRange)
+aGbTextRange
+  = lens _aGbTextRange (\ s a -> s{_aGbTextRange = a})
+
+-- | Range in CFI format for this annotation for version above.
+aCfiRange :: Lens' AnnotationCurrentVersionRanges (Maybe BooksAnnotationsRange)
+aCfiRange
+  = lens _aCfiRange (\ s a -> s{_aCfiRange = a})
+
+instance FromJSON AnnotationCurrentVersionRanges
+         where
+        parseJSON
+          = withObject "AnnotationCurrentVersionRanges"
+              (\ o ->
+                 AnnotationCurrentVersionRanges <$>
+                   (o .:? "gbImageRange") <*> (o .:? "contentVersion")
+                     <*> (o .:? "imageCfiRange")
+                     <*> (o .:? "gbTextRange")
+                     <*> (o .:? "cfiRange"))
+
+instance ToJSON AnnotationCurrentVersionRanges where
+        toJSON AnnotationCurrentVersionRanges{..}
+          = object
+              (catMaybes
+                 [("gbImageRange" .=) <$> _aGbImageRange,
+                  ("contentVersion" .=) <$> _aContentVersion,
+                  ("imageCfiRange" .=) <$> _aImageCfiRange,
+                  ("gbTextRange" .=) <$> _aGbTextRange,
+                  ("cfiRange" .=) <$> _aCfiRange])
+
+-- | Information about pdf content. (In LITE projection.)
+--
+-- /See:/ 'volumeAccessInfoPdf' smart constructor.
+data VolumeAccessInfoPdf = VolumeAccessInfoPdf
+    { _vaipAcsTokenLink :: !(Maybe Text)
+    , _vaipIsAvailable  :: !(Maybe Bool)
+    , _vaipDownloadLink :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'VolumeAccessInfoPdf' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'vaipAcsTokenLink'
+--
+-- * 'vaipIsAvailable'
+--
+-- * 'vaipDownloadLink'
+volumeAccessInfoPdf
+    :: VolumeAccessInfoPdf
+volumeAccessInfoPdf =
+    VolumeAccessInfoPdf
+    { _vaipAcsTokenLink = Nothing
+    , _vaipIsAvailable = Nothing
+    , _vaipDownloadLink = Nothing
+    }
+
+-- | URL to retrieve ACS token for pdf download. (In LITE projection.)
+vaipAcsTokenLink :: Lens' VolumeAccessInfoPdf (Maybe Text)
+vaipAcsTokenLink
+  = lens _vaipAcsTokenLink
+      (\ s a -> s{_vaipAcsTokenLink = a})
+
+-- | Is a scanned image pdf available either as public domain or for
+-- purchase. (In LITE projection.)
+vaipIsAvailable :: Lens' VolumeAccessInfoPdf (Maybe Bool)
+vaipIsAvailable
+  = lens _vaipIsAvailable
+      (\ s a -> s{_vaipIsAvailable = a})
+
+-- | URL to download pdf. (In LITE projection.)
+vaipDownloadLink :: Lens' VolumeAccessInfoPdf (Maybe Text)
+vaipDownloadLink
+  = lens _vaipDownloadLink
+      (\ s a -> s{_vaipDownloadLink = a})
+
+instance FromJSON VolumeAccessInfoPdf where
+        parseJSON
+          = withObject "VolumeAccessInfoPdf"
+              (\ o ->
+                 VolumeAccessInfoPdf <$>
+                   (o .:? "acsTokenLink") <*> (o .:? "isAvailable") <*>
+                     (o .:? "downloadLink"))
+
+instance ToJSON VolumeAccessInfoPdf where
+        toJSON VolumeAccessInfoPdf{..}
+          = object
+              (catMaybes
+                 [("acsTokenLink" .=) <$> _vaipAcsTokenLink,
+                  ("isAvailable" .=) <$> _vaipIsAvailable,
+                  ("downloadLink" .=) <$> _vaipDownloadLink])
+
+--
+-- /See:/ 'dictlayerDataDictWordsItemExamplesItemSource' smart constructor.
+data DictlayerDataDictWordsItemExamplesItemSource = DictlayerDataDictWordsItemExamplesItemSource
+    { _dddwieisURL         :: !(Maybe Text)
+    , _dddwieisAttribution :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DictlayerDataDictWordsItemExamplesItemSource' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dddwieisURL'
+--
+-- * 'dddwieisAttribution'
+dictlayerDataDictWordsItemExamplesItemSource
+    :: DictlayerDataDictWordsItemExamplesItemSource
+dictlayerDataDictWordsItemExamplesItemSource =
+    DictlayerDataDictWordsItemExamplesItemSource
+    { _dddwieisURL = Nothing
+    , _dddwieisAttribution = Nothing
+    }
+
+dddwieisURL :: Lens' DictlayerDataDictWordsItemExamplesItemSource (Maybe Text)
+dddwieisURL
+  = lens _dddwieisURL (\ s a -> s{_dddwieisURL = a})
+
+dddwieisAttribution :: Lens' DictlayerDataDictWordsItemExamplesItemSource (Maybe Text)
+dddwieisAttribution
+  = lens _dddwieisAttribution
+      (\ s a -> s{_dddwieisAttribution = a})
+
+instance FromJSON
+         DictlayerDataDictWordsItemExamplesItemSource where
+        parseJSON
+          = withObject
+              "DictlayerDataDictWordsItemExamplesItemSource"
+              (\ o ->
+                 DictlayerDataDictWordsItemExamplesItemSource <$>
+                   (o .:? "url") <*> (o .:? "attribution"))
+
+instance ToJSON
+         DictlayerDataDictWordsItemExamplesItemSource where
+        toJSON
+          DictlayerDataDictWordsItemExamplesItemSource{..}
+          = object
+              (catMaybes
+                 [("url" .=) <$> _dddwieisURL,
+                  ("attribution" .=) <$> _dddwieisAttribution])
+
+-- | Information about epub content. (In LITE projection.)
+--
+-- /See:/ 'volumeAccessInfoEpub' smart constructor.
+data VolumeAccessInfoEpub = VolumeAccessInfoEpub
+    { _vaieAcsTokenLink :: !(Maybe Text)
+    , _vaieIsAvailable  :: !(Maybe Bool)
+    , _vaieDownloadLink :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'VolumeAccessInfoEpub' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'vaieAcsTokenLink'
+--
+-- * 'vaieIsAvailable'
+--
+-- * 'vaieDownloadLink'
+volumeAccessInfoEpub
+    :: VolumeAccessInfoEpub
+volumeAccessInfoEpub =
+    VolumeAccessInfoEpub
+    { _vaieAcsTokenLink = Nothing
+    , _vaieIsAvailable = Nothing
+    , _vaieDownloadLink = Nothing
+    }
+
+-- | URL to retrieve ACS token for epub download. (In LITE projection.)
+vaieAcsTokenLink :: Lens' VolumeAccessInfoEpub (Maybe Text)
+vaieAcsTokenLink
+  = lens _vaieAcsTokenLink
+      (\ s a -> s{_vaieAcsTokenLink = a})
+
+-- | Is a flowing text epub available either as public domain or for
+-- purchase. (In LITE projection.)
+vaieIsAvailable :: Lens' VolumeAccessInfoEpub (Maybe Bool)
+vaieIsAvailable
+  = lens _vaieIsAvailable
+      (\ s a -> s{_vaieIsAvailable = a})
+
+-- | URL to download epub. (In LITE projection.)
+vaieDownloadLink :: Lens' VolumeAccessInfoEpub (Maybe Text)
+vaieDownloadLink
+  = lens _vaieDownloadLink
+      (\ s a -> s{_vaieDownloadLink = a})
+
+instance FromJSON VolumeAccessInfoEpub where
+        parseJSON
+          = withObject "VolumeAccessInfoEpub"
+              (\ o ->
+                 VolumeAccessInfoEpub <$>
+                   (o .:? "acsTokenLink") <*> (o .:? "isAvailable") <*>
+                     (o .:? "downloadLink"))
+
+instance ToJSON VolumeAccessInfoEpub where
+        toJSON VolumeAccessInfoEpub{..}
+          = object
+              (catMaybes
+                 [("acsTokenLink" .=) <$> _vaieAcsTokenLink,
+                  ("isAvailable" .=) <$> _vaieIsAvailable,
+                  ("downloadLink" .=) <$> _vaieDownloadLink])
+
+--
+-- /See:/ 'readingPosition' smart constructor.
+data ReadingPosition = ReadingPosition
+    { _rpEpubCfiPosition :: !(Maybe Text)
+    , _rpKind            :: !Text
+    , _rpGbImagePosition :: !(Maybe Text)
+    , _rpPdfPosition     :: !(Maybe Text)
+    , _rpVolumeId        :: !(Maybe Text)
+    , _rpUpdated         :: !(Maybe DateTime')
+    , _rpGbTextPosition  :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ReadingPosition' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'rpEpubCfiPosition'
+--
+-- * 'rpKind'
+--
+-- * 'rpGbImagePosition'
+--
+-- * 'rpPdfPosition'
+--
+-- * 'rpVolumeId'
+--
+-- * 'rpUpdated'
+--
+-- * 'rpGbTextPosition'
+readingPosition
+    :: ReadingPosition
+readingPosition =
+    ReadingPosition
+    { _rpEpubCfiPosition = Nothing
+    , _rpKind = "books#readingPosition"
+    , _rpGbImagePosition = Nothing
+    , _rpPdfPosition = Nothing
+    , _rpVolumeId = Nothing
+    , _rpUpdated = Nothing
+    , _rpGbTextPosition = Nothing
+    }
+
+-- | Position in an EPUB as a CFI.
+rpEpubCfiPosition :: Lens' ReadingPosition (Maybe Text)
+rpEpubCfiPosition
+  = lens _rpEpubCfiPosition
+      (\ s a -> s{_rpEpubCfiPosition = a})
+
+-- | Resource type for a reading position.
+rpKind :: Lens' ReadingPosition Text
+rpKind = lens _rpKind (\ s a -> s{_rpKind = a})
+
+-- | Position in a volume for image-based content.
+rpGbImagePosition :: Lens' ReadingPosition (Maybe Text)
+rpGbImagePosition
+  = lens _rpGbImagePosition
+      (\ s a -> s{_rpGbImagePosition = a})
+
+-- | Position in a PDF file.
+rpPdfPosition :: Lens' ReadingPosition (Maybe Text)
+rpPdfPosition
+  = lens _rpPdfPosition
+      (\ s a -> s{_rpPdfPosition = a})
+
+-- | Volume id associated with this reading position.
+rpVolumeId :: Lens' ReadingPosition (Maybe Text)
+rpVolumeId
+  = lens _rpVolumeId (\ s a -> s{_rpVolumeId = a})
+
+-- | Timestamp when this reading position was last updated (formatted UTC
+-- timestamp with millisecond resolution).
+rpUpdated :: Lens' ReadingPosition (Maybe UTCTime)
+rpUpdated
+  = lens _rpUpdated (\ s a -> s{_rpUpdated = a}) .
+      mapping _DateTime
+
+-- | Position in a volume for text-based content.
+rpGbTextPosition :: Lens' ReadingPosition (Maybe Text)
+rpGbTextPosition
+  = lens _rpGbTextPosition
+      (\ s a -> s{_rpGbTextPosition = a})
+
+instance FromJSON ReadingPosition where
+        parseJSON
+          = withObject "ReadingPosition"
+              (\ o ->
+                 ReadingPosition <$>
+                   (o .:? "epubCfiPosition") <*>
+                     (o .:? "kind" .!= "books#readingPosition")
+                     <*> (o .:? "gbImagePosition")
+                     <*> (o .:? "pdfPosition")
+                     <*> (o .:? "volumeId")
+                     <*> (o .:? "updated")
+                     <*> (o .:? "gbTextPosition"))
+
+instance ToJSON ReadingPosition where
+        toJSON ReadingPosition{..}
+          = object
+              (catMaybes
+                 [("epubCfiPosition" .=) <$> _rpEpubCfiPosition,
+                  Just ("kind" .= _rpKind),
+                  ("gbImagePosition" .=) <$> _rpGbImagePosition,
+                  ("pdfPosition" .=) <$> _rpPdfPosition,
+                  ("volumeId" .=) <$> _rpVolumeId,
+                  ("updated" .=) <$> _rpUpdated,
+                  ("gbTextPosition" .=) <$> _rpGbTextPosition])
+
+--
+-- /See:/ 'volumeSaleInfoOffersItem' smart constructor.
+data VolumeSaleInfoOffersItem = VolumeSaleInfoOffersItem
+    { _vsioiFinskyOfferType :: !(Maybe (Textual Int32))
+    , _vsioiRentalDuration  :: !(Maybe VolumeSaleInfoOffersItemRentalDuration)
+    , _vsioiListPrice       :: !(Maybe VolumeSaleInfoOffersItemListPrice)
+    , _vsioiRetailPrice     :: !(Maybe VolumeSaleInfoOffersItemRetailPrice)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'VolumeSaleInfoOffersItem' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'vsioiFinskyOfferType'
+--
+-- * 'vsioiRentalDuration'
+--
+-- * 'vsioiListPrice'
+--
+-- * 'vsioiRetailPrice'
+volumeSaleInfoOffersItem
+    :: VolumeSaleInfoOffersItem
+volumeSaleInfoOffersItem =
+    VolumeSaleInfoOffersItem
+    { _vsioiFinskyOfferType = Nothing
+    , _vsioiRentalDuration = Nothing
+    , _vsioiListPrice = Nothing
+    , _vsioiRetailPrice = Nothing
+    }
+
+-- | The finsky offer type (e.g., PURCHASE=0 RENTAL=3)
+vsioiFinskyOfferType :: Lens' VolumeSaleInfoOffersItem (Maybe Int32)
+vsioiFinskyOfferType
+  = lens _vsioiFinskyOfferType
+      (\ s a -> s{_vsioiFinskyOfferType = a})
+      . mapping _Coerce
+
+-- | The rental duration (for rental offers only).
+vsioiRentalDuration :: Lens' VolumeSaleInfoOffersItem (Maybe VolumeSaleInfoOffersItemRentalDuration)
+vsioiRentalDuration
+  = lens _vsioiRentalDuration
+      (\ s a -> s{_vsioiRentalDuration = a})
+
+-- | Offer list (=undiscounted) price in Micros.
+vsioiListPrice :: Lens' VolumeSaleInfoOffersItem (Maybe VolumeSaleInfoOffersItemListPrice)
+vsioiListPrice
+  = lens _vsioiListPrice
+      (\ s a -> s{_vsioiListPrice = a})
+
+-- | Offer retail (=discounted) price in Micros
+vsioiRetailPrice :: Lens' VolumeSaleInfoOffersItem (Maybe VolumeSaleInfoOffersItemRetailPrice)
+vsioiRetailPrice
+  = lens _vsioiRetailPrice
+      (\ s a -> s{_vsioiRetailPrice = a})
+
+instance FromJSON VolumeSaleInfoOffersItem where
+        parseJSON
+          = withObject "VolumeSaleInfoOffersItem"
+              (\ o ->
+                 VolumeSaleInfoOffersItem <$>
+                   (o .:? "finskyOfferType") <*>
+                     (o .:? "rentalDuration")
+                     <*> (o .:? "listPrice")
+                     <*> (o .:? "retailPrice"))
+
+instance ToJSON VolumeSaleInfoOffersItem where
+        toJSON VolumeSaleInfoOffersItem{..}
+          = object
+              (catMaybes
+                 [("finskyOfferType" .=) <$> _vsioiFinskyOfferType,
+                  ("rentalDuration" .=) <$> _vsioiRentalDuration,
+                  ("listPrice" .=) <$> _vsioiListPrice,
+                  ("retailPrice" .=) <$> _vsioiRetailPrice])
+
+--
+-- /See:/ 'dictlayerDataDict' smart constructor.
+data DictlayerDataDict = DictlayerDataDict
+    { _dddSource :: !(Maybe DictlayerDataDictSource)
+    , _dddWords  :: !(Maybe [DictlayerDataDictWordsItem])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DictlayerDataDict' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dddSource'
+--
+-- * 'dddWords'
+dictlayerDataDict
+    :: DictlayerDataDict
+dictlayerDataDict =
+    DictlayerDataDict
+    { _dddSource = Nothing
+    , _dddWords = Nothing
+    }
+
+-- | The source, url and attribution for this dictionary data.
+dddSource :: Lens' DictlayerDataDict (Maybe DictlayerDataDictSource)
+dddSource
+  = lens _dddSource (\ s a -> s{_dddSource = a})
+
+dddWords :: Lens' DictlayerDataDict [DictlayerDataDictWordsItem]
+dddWords
+  = lens _dddWords (\ s a -> s{_dddWords = a}) .
+      _Default
+      . _Coerce
+
+instance FromJSON DictlayerDataDict where
+        parseJSON
+          = withObject "DictlayerDataDict"
+              (\ o ->
+                 DictlayerDataDict <$>
+                   (o .:? "source") <*> (o .:? "words" .!= mempty))
+
+instance ToJSON DictlayerDataDict where
+        toJSON DictlayerDataDict{..}
+          = object
+              (catMaybes
+                 [("source" .=) <$> _dddSource,
+                  ("words" .=) <$> _dddWords])
+
+--
+-- /See:/ 'dictlayerDataDictWordsItemSensesItem' smart constructor.
+data DictlayerDataDictWordsItemSensesItem = DictlayerDataDictWordsItemSensesItem
+    { _dddwisiPronunciationURL :: !(Maybe Text)
+    , _dddwisiConjugations     :: !(Maybe [DictlayerDataDictWordsItemSensesItemConjugationsItem])
+    , _dddwisiPronunciation    :: !(Maybe Text)
+    , _dddwisiSynonyms         :: !(Maybe [DictlayerDataDictWordsItemSensesItemSynonymsItem])
+    , _dddwisiSource           :: !(Maybe DictlayerDataDictWordsItemSensesItemSource)
+    , _dddwisiPartOfSpeech     :: !(Maybe Text)
+    , _dddwisiDefinitions      :: !(Maybe [DictlayerDataDictWordsItemSensesItemDefinitionsItem])
+    , _dddwisiSyllabification  :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DictlayerDataDictWordsItemSensesItem' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dddwisiPronunciationURL'
+--
+-- * 'dddwisiConjugations'
+--
+-- * 'dddwisiPronunciation'
+--
+-- * 'dddwisiSynonyms'
+--
+-- * 'dddwisiSource'
+--
+-- * 'dddwisiPartOfSpeech'
+--
+-- * 'dddwisiDefinitions'
+--
+-- * 'dddwisiSyllabification'
+dictlayerDataDictWordsItemSensesItem
+    :: DictlayerDataDictWordsItemSensesItem
+dictlayerDataDictWordsItemSensesItem =
+    DictlayerDataDictWordsItemSensesItem
+    { _dddwisiPronunciationURL = Nothing
+    , _dddwisiConjugations = Nothing
+    , _dddwisiPronunciation = Nothing
+    , _dddwisiSynonyms = Nothing
+    , _dddwisiSource = Nothing
+    , _dddwisiPartOfSpeech = Nothing
+    , _dddwisiDefinitions = Nothing
+    , _dddwisiSyllabification = Nothing
+    }
+
+dddwisiPronunciationURL :: Lens' DictlayerDataDictWordsItemSensesItem (Maybe Text)
+dddwisiPronunciationURL
+  = lens _dddwisiPronunciationURL
+      (\ s a -> s{_dddwisiPronunciationURL = a})
+
+dddwisiConjugations :: Lens' DictlayerDataDictWordsItemSensesItem [DictlayerDataDictWordsItemSensesItemConjugationsItem]
+dddwisiConjugations
+  = lens _dddwisiConjugations
+      (\ s a -> s{_dddwisiConjugations = a})
+      . _Default
+      . _Coerce
+
+dddwisiPronunciation :: Lens' DictlayerDataDictWordsItemSensesItem (Maybe Text)
+dddwisiPronunciation
+  = lens _dddwisiPronunciation
+      (\ s a -> s{_dddwisiPronunciation = a})
+
+dddwisiSynonyms :: Lens' DictlayerDataDictWordsItemSensesItem [DictlayerDataDictWordsItemSensesItemSynonymsItem]
+dddwisiSynonyms
+  = lens _dddwisiSynonyms
+      (\ s a -> s{_dddwisiSynonyms = a})
+      . _Default
+      . _Coerce
+
+dddwisiSource :: Lens' DictlayerDataDictWordsItemSensesItem (Maybe DictlayerDataDictWordsItemSensesItemSource)
+dddwisiSource
+  = lens _dddwisiSource
+      (\ s a -> s{_dddwisiSource = a})
+
+dddwisiPartOfSpeech :: Lens' DictlayerDataDictWordsItemSensesItem (Maybe Text)
+dddwisiPartOfSpeech
+  = lens _dddwisiPartOfSpeech
+      (\ s a -> s{_dddwisiPartOfSpeech = a})
+
+dddwisiDefinitions :: Lens' DictlayerDataDictWordsItemSensesItem [DictlayerDataDictWordsItemSensesItemDefinitionsItem]
+dddwisiDefinitions
+  = lens _dddwisiDefinitions
+      (\ s a -> s{_dddwisiDefinitions = a})
+      . _Default
+      . _Coerce
+
+dddwisiSyllabification :: Lens' DictlayerDataDictWordsItemSensesItem (Maybe Text)
+dddwisiSyllabification
+  = lens _dddwisiSyllabification
+      (\ s a -> s{_dddwisiSyllabification = a})
+
+instance FromJSON
+         DictlayerDataDictWordsItemSensesItem where
+        parseJSON
+          = withObject "DictlayerDataDictWordsItemSensesItem"
+              (\ o ->
+                 DictlayerDataDictWordsItemSensesItem <$>
+                   (o .:? "pronunciationUrl") <*>
+                     (o .:? "conjugations" .!= mempty)
+                     <*> (o .:? "pronunciation")
+                     <*> (o .:? "synonyms" .!= mempty)
+                     <*> (o .:? "source")
+                     <*> (o .:? "partOfSpeech")
+                     <*> (o .:? "definitions" .!= mempty)
+                     <*> (o .:? "syllabification"))
+
+instance ToJSON DictlayerDataDictWordsItemSensesItem
+         where
+        toJSON DictlayerDataDictWordsItemSensesItem{..}
+          = object
+              (catMaybes
+                 [("pronunciationUrl" .=) <$>
+                    _dddwisiPronunciationURL,
+                  ("conjugations" .=) <$> _dddwisiConjugations,
+                  ("pronunciation" .=) <$> _dddwisiPronunciation,
+                  ("synonyms" .=) <$> _dddwisiSynonyms,
+                  ("source" .=) <$> _dddwisiSource,
+                  ("partOfSpeech" .=) <$> _dddwisiPartOfSpeech,
+                  ("definitions" .=) <$> _dddwisiDefinitions,
+                  ("syllabification" .=) <$> _dddwisiSyllabification])
+
+-- | Recommendation related information for this volume.
+--
+-- /See:/ 'volumeRecommendedInfo' smart constructor.
+newtype VolumeRecommendedInfo = VolumeRecommendedInfo
+    { _vriExplanation :: Maybe Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'VolumeRecommendedInfo' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'vriExplanation'
+volumeRecommendedInfo
+    :: VolumeRecommendedInfo
+volumeRecommendedInfo =
+    VolumeRecommendedInfo
+    { _vriExplanation = Nothing
+    }
+
+-- | A text explaining why this volume is recommended.
+vriExplanation :: Lens' VolumeRecommendedInfo (Maybe Text)
+vriExplanation
+  = lens _vriExplanation
+      (\ s a -> s{_vriExplanation = a})
+
+instance FromJSON VolumeRecommendedInfo where
+        parseJSON
+          = withObject "VolumeRecommendedInfo"
+              (\ o ->
+                 VolumeRecommendedInfo <$> (o .:? "explanation"))
+
+instance ToJSON VolumeRecommendedInfo where
+        toJSON VolumeRecommendedInfo{..}
+          = object
+              (catMaybes [("explanation" .=) <$> _vriExplanation])
+
+--
+-- /See:/ 'offers' smart constructor.
+data Offers = Offers
+    { _oKind  :: !Text
+    , _oItems :: !(Maybe [OffersItemsItem])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Offers' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'oKind'
+--
+-- * 'oItems'
+offers
+    :: Offers
+offers =
+    Offers
+    { _oKind = "promooffer#offers"
+    , _oItems = Nothing
+    }
+
+-- | Resource type.
+oKind :: Lens' Offers Text
+oKind = lens _oKind (\ s a -> s{_oKind = a})
+
+-- | A list of offers.
+oItems :: Lens' Offers [OffersItemsItem]
+oItems
+  = lens _oItems (\ s a -> s{_oItems = a}) . _Default .
+      _Coerce
+
+instance FromJSON Offers where
+        parseJSON
+          = withObject "Offers"
+              (\ o ->
+                 Offers <$>
+                   (o .:? "kind" .!= "promooffer#offers") <*>
+                     (o .:? "items" .!= mempty))
+
+instance ToJSON Offers where
+        toJSON Offers{..}
+          = object
+              (catMaybes
+                 [Just ("kind" .= _oKind), ("items" .=) <$> _oItems])
+
+--
+-- /See:/ 'discoveryclusters' smart constructor.
+data Discoveryclusters = Discoveryclusters
+    { _dKind          :: !Text
+    , _dTotalClusters :: !(Maybe (Textual Int32))
+    , _dClusters      :: !(Maybe [DiscoveryclustersClustersItem])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Discoveryclusters' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dKind'
+--
+-- * 'dTotalClusters'
+--
+-- * 'dClusters'
+discoveryclusters
+    :: Discoveryclusters
+discoveryclusters =
+    Discoveryclusters
+    { _dKind = "books#discovery#clusters"
+    , _dTotalClusters = Nothing
+    , _dClusters = Nothing
+    }
+
+-- | Resorce type.
+dKind :: Lens' Discoveryclusters Text
+dKind = lens _dKind (\ s a -> s{_dKind = a})
+
+dTotalClusters :: Lens' Discoveryclusters (Maybe Int32)
+dTotalClusters
+  = lens _dTotalClusters
+      (\ s a -> s{_dTotalClusters = a})
+      . mapping _Coerce
+
+dClusters :: Lens' Discoveryclusters [DiscoveryclustersClustersItem]
+dClusters
+  = lens _dClusters (\ s a -> s{_dClusters = a}) .
+      _Default
+      . _Coerce
+
+instance FromJSON Discoveryclusters where
+        parseJSON
+          = withObject "Discoveryclusters"
+              (\ o ->
+                 Discoveryclusters <$>
+                   (o .:? "kind" .!= "books#discovery#clusters") <*>
+                     (o .:? "totalClusters")
+                     <*> (o .:? "clusters" .!= mempty))
+
+instance ToJSON Discoveryclusters where
+        toJSON Discoveryclusters{..}
+          = object
+              (catMaybes
+                 [Just ("kind" .= _dKind),
+                  ("totalClusters" .=) <$> _dTotalClusters,
+                  ("clusters" .=) <$> _dClusters])
+
+-- | User settings in sub-objects, each for different purposes.
+--
+-- /See:/ 'userSettingsNotesExport' smart constructor.
+data UserSettingsNotesExport = UserSettingsNotesExport
+    { _usneFolderName :: !(Maybe Text)
+    , _usneIsEnabled  :: !(Maybe Bool)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'UserSettingsNotesExport' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'usneFolderName'
+--
+-- * 'usneIsEnabled'
+userSettingsNotesExport
+    :: UserSettingsNotesExport
+userSettingsNotesExport =
+    UserSettingsNotesExport
+    { _usneFolderName = Nothing
+    , _usneIsEnabled = Nothing
+    }
+
+usneFolderName :: Lens' UserSettingsNotesExport (Maybe Text)
+usneFolderName
+  = lens _usneFolderName
+      (\ s a -> s{_usneFolderName = a})
+
+usneIsEnabled :: Lens' UserSettingsNotesExport (Maybe Bool)
+usneIsEnabled
+  = lens _usneIsEnabled
+      (\ s a -> s{_usneIsEnabled = a})
+
+instance FromJSON UserSettingsNotesExport where
+        parseJSON
+          = withObject "UserSettingsNotesExport"
+              (\ o ->
+                 UserSettingsNotesExport <$>
+                   (o .:? "folderName") <*> (o .:? "isEnabled"))
+
+instance ToJSON UserSettingsNotesExport where
+        toJSON UserSettingsNotesExport{..}
+          = object
+              (catMaybes
+                 [("folderName" .=) <$> _usneFolderName,
+                  ("isEnabled" .=) <$> _usneIsEnabled])
+
+--
+-- /See:/ 'concurrentAccessRestriction' smart constructor.
+data ConcurrentAccessRestriction = ConcurrentAccessRestriction
+    { _carMaxConcurrentDevices :: !(Maybe (Textual Int32))
+    , _carSignature            :: !(Maybe Text)
+    , _carTimeWindowSeconds    :: !(Maybe (Textual Int32))
+    , _carKind                 :: !Text
+    , _carReasonCode           :: !(Maybe Text)
+    , _carVolumeId             :: !(Maybe Text)
+    , _carRestricted           :: !(Maybe Bool)
+    , _carSource               :: !(Maybe Text)
+    , _carDeviceAllowed        :: !(Maybe Bool)
+    , _carMessage              :: !(Maybe Text)
+    , _carNonce                :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ConcurrentAccessRestriction' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'carMaxConcurrentDevices'
+--
+-- * 'carSignature'
+--
+-- * 'carTimeWindowSeconds'
+--
+-- * 'carKind'
+--
+-- * 'carReasonCode'
+--
+-- * 'carVolumeId'
+--
+-- * 'carRestricted'
+--
+-- * 'carSource'
+--
+-- * 'carDeviceAllowed'
+--
+-- * 'carMessage'
+--
+-- * 'carNonce'
+concurrentAccessRestriction
+    :: ConcurrentAccessRestriction
+concurrentAccessRestriction =
+    ConcurrentAccessRestriction
+    { _carMaxConcurrentDevices = Nothing
+    , _carSignature = Nothing
+    , _carTimeWindowSeconds = Nothing
+    , _carKind = "books#concurrentAccessRestriction"
+    , _carReasonCode = Nothing
+    , _carVolumeId = Nothing
+    , _carRestricted = Nothing
+    , _carSource = Nothing
+    , _carDeviceAllowed = Nothing
+    , _carMessage = Nothing
+    , _carNonce = Nothing
+    }
+
+-- | The maximum number of concurrent access licenses for this volume.
+carMaxConcurrentDevices :: Lens' ConcurrentAccessRestriction (Maybe Int32)
+carMaxConcurrentDevices
+  = lens _carMaxConcurrentDevices
+      (\ s a -> s{_carMaxConcurrentDevices = a})
+      . mapping _Coerce
+
+-- | Response signature.
+carSignature :: Lens' ConcurrentAccessRestriction (Maybe Text)
+carSignature
+  = lens _carSignature (\ s a -> s{_carSignature = a})
+
+-- | Time in seconds for license auto-expiration.
+carTimeWindowSeconds :: Lens' ConcurrentAccessRestriction (Maybe Int32)
+carTimeWindowSeconds
+  = lens _carTimeWindowSeconds
+      (\ s a -> s{_carTimeWindowSeconds = a})
+      . mapping _Coerce
+
+-- | Resource type.
+carKind :: Lens' ConcurrentAccessRestriction Text
+carKind = lens _carKind (\ s a -> s{_carKind = a})
+
+-- | Error\/warning reason code.
+carReasonCode :: Lens' ConcurrentAccessRestriction (Maybe Text)
+carReasonCode
+  = lens _carReasonCode
+      (\ s a -> s{_carReasonCode = a})
+
+-- | Identifies the volume for which this entry applies.
+carVolumeId :: Lens' ConcurrentAccessRestriction (Maybe Text)
+carVolumeId
+  = lens _carVolumeId (\ s a -> s{_carVolumeId = a})
+
+-- | Whether this volume has any concurrent access restrictions.
+carRestricted :: Lens' ConcurrentAccessRestriction (Maybe Bool)
+carRestricted
+  = lens _carRestricted
+      (\ s a -> s{_carRestricted = a})
+
+-- | Client app identifier for verification. Download access and
+-- client-validation only.
+carSource :: Lens' ConcurrentAccessRestriction (Maybe Text)
+carSource
+  = lens _carSource (\ s a -> s{_carSource = a})
+
+-- | Whether access is granted for this (user, device, volume).
+carDeviceAllowed :: Lens' ConcurrentAccessRestriction (Maybe Bool)
+carDeviceAllowed
+  = lens _carDeviceAllowed
+      (\ s a -> s{_carDeviceAllowed = a})
+
+-- | Error\/warning message.
+carMessage :: Lens' ConcurrentAccessRestriction (Maybe Text)
+carMessage
+  = lens _carMessage (\ s a -> s{_carMessage = a})
+
+-- | Client nonce for verification. Download access and client-validation
+-- only.
+carNonce :: Lens' ConcurrentAccessRestriction (Maybe Text)
+carNonce = lens _carNonce (\ s a -> s{_carNonce = a})
+
+instance FromJSON ConcurrentAccessRestriction where
+        parseJSON
+          = withObject "ConcurrentAccessRestriction"
+              (\ o ->
+                 ConcurrentAccessRestriction <$>
+                   (o .:? "maxConcurrentDevices") <*>
+                     (o .:? "signature")
+                     <*> (o .:? "timeWindowSeconds")
+                     <*>
+                     (o .:? "kind" .!=
+                        "books#concurrentAccessRestriction")
+                     <*> (o .:? "reasonCode")
+                     <*> (o .:? "volumeId")
+                     <*> (o .:? "restricted")
+                     <*> (o .:? "source")
+                     <*> (o .:? "deviceAllowed")
+                     <*> (o .:? "message")
+                     <*> (o .:? "nonce"))
+
+instance ToJSON ConcurrentAccessRestriction where
+        toJSON ConcurrentAccessRestriction{..}
+          = object
+              (catMaybes
+                 [("maxConcurrentDevices" .=) <$>
+                    _carMaxConcurrentDevices,
+                  ("signature" .=) <$> _carSignature,
+                  ("timeWindowSeconds" .=) <$> _carTimeWindowSeconds,
+                  Just ("kind" .= _carKind),
+                  ("reasonCode" .=) <$> _carReasonCode,
+                  ("volumeId" .=) <$> _carVolumeId,
+                  ("restricted" .=) <$> _carRestricted,
+                  ("source" .=) <$> _carSource,
+                  ("deviceAllowed" .=) <$> _carDeviceAllowed,
+                  ("message" .=) <$> _carMessage,
+                  ("nonce" .=) <$> _carNonce])
+
+--
+-- /See:/ 'volumes' smart constructor.
+data Volumes = Volumes
+    { _v1TotalItems :: !(Maybe (Textual Int32))
+    , _v1Kind       :: !Text
+    , _v1Items      :: !(Maybe [Volume])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Volumes' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'v1TotalItems'
+--
+-- * 'v1Kind'
+--
+-- * 'v1Items'
+volumes
+    :: Volumes
+volumes =
+    Volumes
+    { _v1TotalItems = Nothing
+    , _v1Kind = "books#volumes"
+    , _v1Items = Nothing
+    }
+
+-- | Total number of volumes found. This might be greater than the number of
+-- volumes returned in this response if results have been paginated.
+v1TotalItems :: Lens' Volumes (Maybe Int32)
+v1TotalItems
+  = lens _v1TotalItems (\ s a -> s{_v1TotalItems = a})
+      . mapping _Coerce
+
+-- | Resource type.
+v1Kind :: Lens' Volumes Text
+v1Kind = lens _v1Kind (\ s a -> s{_v1Kind = a})
+
+-- | A list of volumes.
+v1Items :: Lens' Volumes [Volume]
+v1Items
+  = lens _v1Items (\ s a -> s{_v1Items = a}) . _Default
+      . _Coerce
+
+instance FromJSON Volumes where
+        parseJSON
+          = withObject "Volumes"
+              (\ o ->
+                 Volumes <$>
+                   (o .:? "totalItems") <*>
+                     (o .:? "kind" .!= "books#volumes")
+                     <*> (o .:? "items" .!= mempty))
+
+instance ToJSON Volumes where
+        toJSON Volumes{..}
+          = object
+              (catMaybes
+                 [("totalItems" .=) <$> _v1TotalItems,
+                  Just ("kind" .= _v1Kind), ("items" .=) <$> _v1Items])
+
+--
+-- /See:/ 'bookshelves' smart constructor.
+data Bookshelves = Bookshelves
+    { _booKind  :: !Text
+    , _booItems :: !(Maybe [Bookshelf])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Bookshelves' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'booKind'
+--
+-- * 'booItems'
+bookshelves
+    :: Bookshelves
+bookshelves =
+    Bookshelves
+    { _booKind = "books#bookshelves"
+    , _booItems = Nothing
+    }
+
+-- | Resource type.
+booKind :: Lens' Bookshelves Text
+booKind = lens _booKind (\ s a -> s{_booKind = a})
+
+-- | A list of bookshelves.
+booItems :: Lens' Bookshelves [Bookshelf]
+booItems
+  = lens _booItems (\ s a -> s{_booItems = a}) .
+      _Default
+      . _Coerce
+
+instance FromJSON Bookshelves where
+        parseJSON
+          = withObject "Bookshelves"
+              (\ o ->
+                 Bookshelves <$>
+                   (o .:? "kind" .!= "books#bookshelves") <*>
+                     (o .:? "items" .!= mempty))
+
+instance ToJSON Bookshelves where
+        toJSON Bookshelves{..}
+          = object
+              (catMaybes
+                 [Just ("kind" .= _booKind),
+                  ("items" .=) <$> _booItems])
+
+-- | The source, url and attribution for this dictionary data.
+--
+-- /See:/ 'dictlayerDataDictSource' smart constructor.
+data DictlayerDataDictSource = DictlayerDataDictSource
+    { _dddsURL         :: !(Maybe Text)
+    , _dddsAttribution :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DictlayerDataDictSource' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dddsURL'
+--
+-- * 'dddsAttribution'
+dictlayerDataDictSource
+    :: DictlayerDataDictSource
+dictlayerDataDictSource =
+    DictlayerDataDictSource
+    { _dddsURL = Nothing
+    , _dddsAttribution = Nothing
+    }
+
+dddsURL :: Lens' DictlayerDataDictSource (Maybe Text)
+dddsURL = lens _dddsURL (\ s a -> s{_dddsURL = a})
+
+dddsAttribution :: Lens' DictlayerDataDictSource (Maybe Text)
+dddsAttribution
+  = lens _dddsAttribution
+      (\ s a -> s{_dddsAttribution = a})
+
+instance FromJSON DictlayerDataDictSource where
+        parseJSON
+          = withObject "DictlayerDataDictSource"
+              (\ o ->
+                 DictlayerDataDictSource <$>
+                   (o .:? "url") <*> (o .:? "attribution"))
+
+instance ToJSON DictlayerDataDictSource where
+        toJSON DictlayerDataDictSource{..}
+          = object
+              (catMaybes
+                 [("url" .=) <$> _dddsURL,
+                  ("attribution" .=) <$> _dddsAttribution])
+
+--
+-- /See:/ 'downloadAccesses' smart constructor.
+data DownloadAccesses = DownloadAccesses
+    { _daKind               :: !Text
+    , _daDownloadAccessList :: !(Maybe [DownloadAccessRestriction])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DownloadAccesses' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'daKind'
+--
+-- * 'daDownloadAccessList'
+downloadAccesses
+    :: DownloadAccesses
+downloadAccesses =
+    DownloadAccesses
+    { _daKind = "books#downloadAccesses"
+    , _daDownloadAccessList = Nothing
+    }
+
+-- | Resource type.
+daKind :: Lens' DownloadAccesses Text
+daKind = lens _daKind (\ s a -> s{_daKind = a})
+
+-- | A list of download access responses.
+daDownloadAccessList :: Lens' DownloadAccesses [DownloadAccessRestriction]
+daDownloadAccessList
+  = lens _daDownloadAccessList
+      (\ s a -> s{_daDownloadAccessList = a})
+      . _Default
+      . _Coerce
+
+instance FromJSON DownloadAccesses where
+        parseJSON
+          = withObject "DownloadAccesses"
+              (\ o ->
+                 DownloadAccesses <$>
+                   (o .:? "kind" .!= "books#downloadAccesses") <*>
+                     (o .:? "downloadAccessList" .!= mempty))
+
+instance ToJSON DownloadAccesses where
+        toJSON DownloadAccesses{..}
+          = object
+              (catMaybes
+                 [Just ("kind" .= _daKind),
+                  ("downloadAccessList" .=) <$> _daDownloadAccessList])
+
+--
+-- /See:/ 'geolayerDataGeoViewportHi' smart constructor.
+data GeolayerDataGeoViewportHi = GeolayerDataGeoViewportHi
+    { _gdgvhLatitude  :: !(Maybe (Textual Double))
+    , _gdgvhLongitude :: !(Maybe (Textual Double))
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'GeolayerDataGeoViewportHi' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gdgvhLatitude'
+--
+-- * 'gdgvhLongitude'
+geolayerDataGeoViewportHi
+    :: GeolayerDataGeoViewportHi
+geolayerDataGeoViewportHi =
+    GeolayerDataGeoViewportHi
+    { _gdgvhLatitude = Nothing
+    , _gdgvhLongitude = Nothing
+    }
+
+gdgvhLatitude :: Lens' GeolayerDataGeoViewportHi (Maybe Double)
+gdgvhLatitude
+  = lens _gdgvhLatitude
+      (\ s a -> s{_gdgvhLatitude = a})
+      . mapping _Coerce
+
+gdgvhLongitude :: Lens' GeolayerDataGeoViewportHi (Maybe Double)
+gdgvhLongitude
+  = lens _gdgvhLongitude
+      (\ s a -> s{_gdgvhLongitude = a})
+      . mapping _Coerce
+
+instance FromJSON GeolayerDataGeoViewportHi where
+        parseJSON
+          = withObject "GeolayerDataGeoViewportHi"
+              (\ o ->
+                 GeolayerDataGeoViewportHi <$>
+                   (o .:? "latitude") <*> (o .:? "longitude"))
+
+instance ToJSON GeolayerDataGeoViewportHi where
+        toJSON GeolayerDataGeoViewportHi{..}
+          = object
+              (catMaybes
+                 [("latitude" .=) <$> _gdgvhLatitude,
+                  ("longitude" .=) <$> _gdgvhLongitude])
+
+-- | General volume information.
+--
+-- /See:/ 'volumeVolumeInfo' smart constructor.
+data VolumeVolumeInfo = VolumeVolumeInfo
+    { _vviImageLinks          :: !(Maybe VolumeVolumeInfoImageLinks)
+    , _vviAverageRating       :: !(Maybe (Textual Double))
+    , _vviRatingsCount        :: !(Maybe (Textual Int32))
+    , _vviCanonicalVolumeLink :: !(Maybe Text)
+    , _vviReadingModes        :: !(Maybe JSONValue)
+    , _vviIndustryIdentifiers :: !(Maybe [VolumeVolumeInfoIndustryIdentifiersItem])
+    , _vviPrintedPageCount    :: !(Maybe (Textual Int32))
+    , _vviMainCategory        :: !(Maybe Text)
+    , _vviContentVersion      :: !(Maybe Text)
+    , _vviSamplePageCount     :: !(Maybe (Textual Int32))
+    , _vviCategories          :: !(Maybe [Text])
+    , _vviAuthors             :: !(Maybe [Text])
+    , _vviAllowAnonLogging    :: !(Maybe Bool)
+    , _vviSubtitle            :: !(Maybe Text)
+    , _vviPublishedDate       :: !(Maybe Text)
+    , _vviMaturityRating      :: !(Maybe Text)
+    , _vviPreviewLink         :: !(Maybe Text)
+    , _vviLanguage            :: !(Maybe Text)
+    , _vviTitle               :: !(Maybe Text)
+    , _vviPageCount           :: !(Maybe (Textual Int32))
+    , _vviDimensions          :: !(Maybe VolumeVolumeInfoDimensions)
+    , _vviInfoLink            :: !(Maybe Text)
+    , _vviPublisher           :: !(Maybe Text)
+    , _vviDescription         :: !(Maybe Text)
+    , _vviPrintType           :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'VolumeVolumeInfo' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'vviImageLinks'
+--
+-- * 'vviAverageRating'
+--
+-- * 'vviRatingsCount'
+--
+-- * 'vviCanonicalVolumeLink'
+--
+-- * 'vviReadingModes'
+--
+-- * 'vviIndustryIdentifiers'
+--
+-- * 'vviPrintedPageCount'
+--
+-- * 'vviMainCategory'
+--
+-- * 'vviContentVersion'
+--
+-- * 'vviSamplePageCount'
+--
+-- * 'vviCategories'
+--
+-- * 'vviAuthors'
+--
+-- * 'vviAllowAnonLogging'
+--
+-- * 'vviSubtitle'
+--
+-- * 'vviPublishedDate'
+--
+-- * 'vviMaturityRating'
+--
+-- * 'vviPreviewLink'
+--
+-- * 'vviLanguage'
+--
+-- * 'vviTitle'
+--
+-- * 'vviPageCount'
+--
+-- * 'vviDimensions'
+--
+-- * 'vviInfoLink'
+--
+-- * 'vviPublisher'
+--
+-- * 'vviDescription'
+--
+-- * 'vviPrintType'
+volumeVolumeInfo
+    :: VolumeVolumeInfo
+volumeVolumeInfo =
+    VolumeVolumeInfo
+    { _vviImageLinks = Nothing
+    , _vviAverageRating = Nothing
+    , _vviRatingsCount = Nothing
+    , _vviCanonicalVolumeLink = Nothing
+    , _vviReadingModes = Nothing
+    , _vviIndustryIdentifiers = Nothing
+    , _vviPrintedPageCount = Nothing
+    , _vviMainCategory = Nothing
+    , _vviContentVersion = Nothing
+    , _vviSamplePageCount = Nothing
+    , _vviCategories = Nothing
+    , _vviAuthors = Nothing
+    , _vviAllowAnonLogging = Nothing
+    , _vviSubtitle = Nothing
+    , _vviPublishedDate = Nothing
+    , _vviMaturityRating = Nothing
+    , _vviPreviewLink = Nothing
+    , _vviLanguage = Nothing
+    , _vviTitle = Nothing
+    , _vviPageCount = Nothing
+    , _vviDimensions = Nothing
+    , _vviInfoLink = Nothing
+    , _vviPublisher = Nothing
+    , _vviDescription = Nothing
+    , _vviPrintType = Nothing
+    }
+
+-- | A list of image links for all the sizes that are available. (In LITE
+-- projection.)
+vviImageLinks :: Lens' VolumeVolumeInfo (Maybe VolumeVolumeInfoImageLinks)
+vviImageLinks
+  = lens _vviImageLinks
+      (\ s a -> s{_vviImageLinks = a})
+
+-- | The mean review rating for this volume. (min = 1.0, max = 5.0)
+vviAverageRating :: Lens' VolumeVolumeInfo (Maybe Double)
+vviAverageRating
+  = lens _vviAverageRating
+      (\ s a -> s{_vviAverageRating = a})
+      . mapping _Coerce
+
+-- | The number of review ratings for this volume.
+vviRatingsCount :: Lens' VolumeVolumeInfo (Maybe Int32)
+vviRatingsCount
+  = lens _vviRatingsCount
+      (\ s a -> s{_vviRatingsCount = a})
+      . mapping _Coerce
+
+-- | Canonical URL for a volume. (In LITE projection.)
+vviCanonicalVolumeLink :: Lens' VolumeVolumeInfo (Maybe Text)
+vviCanonicalVolumeLink
+  = lens _vviCanonicalVolumeLink
+      (\ s a -> s{_vviCanonicalVolumeLink = a})
+
+-- | The reading modes available for this volume.
+vviReadingModes :: Lens' VolumeVolumeInfo (Maybe JSONValue)
+vviReadingModes
+  = lens _vviReadingModes
+      (\ s a -> s{_vviReadingModes = a})
+
+-- | Industry standard identifiers for this volume.
+vviIndustryIdentifiers :: Lens' VolumeVolumeInfo [VolumeVolumeInfoIndustryIdentifiersItem]
+vviIndustryIdentifiers
+  = lens _vviIndustryIdentifiers
+      (\ s a -> s{_vviIndustryIdentifiers = a})
+      . _Default
+      . _Coerce
+
+-- | Total number of printed pages in generated pdf representation.
+vviPrintedPageCount :: Lens' VolumeVolumeInfo (Maybe Int32)
+vviPrintedPageCount
+  = lens _vviPrintedPageCount
+      (\ s a -> s{_vviPrintedPageCount = a})
+      . mapping _Coerce
+
+-- | The main category to which this volume belongs. It will be the category
+-- from the categories list returned below that has the highest weight.
+vviMainCategory :: Lens' VolumeVolumeInfo (Maybe Text)
+vviMainCategory
+  = lens _vviMainCategory
+      (\ s a -> s{_vviMainCategory = a})
+
+-- | An identifier for the version of the volume content (text & images). (In
+-- LITE projection)
+vviContentVersion :: Lens' VolumeVolumeInfo (Maybe Text)
+vviContentVersion
+  = lens _vviContentVersion
+      (\ s a -> s{_vviContentVersion = a})
+
+-- | Total number of sample pages as per publisher metadata.
+vviSamplePageCount :: Lens' VolumeVolumeInfo (Maybe Int32)
+vviSamplePageCount
+  = lens _vviSamplePageCount
+      (\ s a -> s{_vviSamplePageCount = a})
+      . mapping _Coerce
+
+-- | A list of subject categories, such as \"Fiction\", \"Suspense\", etc.
+vviCategories :: Lens' VolumeVolumeInfo [Text]
+vviCategories
+  = lens _vviCategories
+      (\ s a -> s{_vviCategories = a})
+      . _Default
+      . _Coerce
+
+-- | The names of the authors and\/or editors for this volume. (In LITE
+-- projection)
+vviAuthors :: Lens' VolumeVolumeInfo [Text]
+vviAuthors
+  = lens _vviAuthors (\ s a -> s{_vviAuthors = a}) .
+      _Default
+      . _Coerce
+
+-- | Whether anonymous logging should be allowed.
+vviAllowAnonLogging :: Lens' VolumeVolumeInfo (Maybe Bool)
+vviAllowAnonLogging
+  = lens _vviAllowAnonLogging
+      (\ s a -> s{_vviAllowAnonLogging = a})
+
+-- | Volume subtitle. (In LITE projection.)
+vviSubtitle :: Lens' VolumeVolumeInfo (Maybe Text)
+vviSubtitle
+  = lens _vviSubtitle (\ s a -> s{_vviSubtitle = a})
+
+-- | Date of publication. (In LITE projection.)
+vviPublishedDate :: Lens' VolumeVolumeInfo (Maybe Text)
+vviPublishedDate
+  = lens _vviPublishedDate
+      (\ s a -> s{_vviPublishedDate = a})
+
+vviMaturityRating :: Lens' VolumeVolumeInfo (Maybe Text)
+vviMaturityRating
+  = lens _vviMaturityRating
+      (\ s a -> s{_vviMaturityRating = a})
+
+-- | URL to preview this volume on the Google Books site.
+vviPreviewLink :: Lens' VolumeVolumeInfo (Maybe Text)
+vviPreviewLink
+  = lens _vviPreviewLink
+      (\ s a -> s{_vviPreviewLink = a})
+
+-- | Best language for this volume (based on content). It is the two-letter
+-- ISO 639-1 code such as \'fr\', \'en\', etc.
+vviLanguage :: Lens' VolumeVolumeInfo (Maybe Text)
+vviLanguage
+  = lens _vviLanguage (\ s a -> s{_vviLanguage = a})
+
+-- | Volume title. (In LITE projection.)
+vviTitle :: Lens' VolumeVolumeInfo (Maybe Text)
+vviTitle = lens _vviTitle (\ s a -> s{_vviTitle = a})
+
+-- | Total number of pages as per publisher metadata.
+vviPageCount :: Lens' VolumeVolumeInfo (Maybe Int32)
+vviPageCount
+  = lens _vviPageCount (\ s a -> s{_vviPageCount = a})
+      . mapping _Coerce
+
+-- | Physical dimensions of this volume.
+vviDimensions :: Lens' VolumeVolumeInfo (Maybe VolumeVolumeInfoDimensions)
+vviDimensions
+  = lens _vviDimensions
+      (\ s a -> s{_vviDimensions = a})
+
+-- | URL to view information about this volume on the Google Books site. (In
+-- LITE projection)
+vviInfoLink :: Lens' VolumeVolumeInfo (Maybe Text)
+vviInfoLink
+  = lens _vviInfoLink (\ s a -> s{_vviInfoLink = a})
+
+-- | Publisher of this volume. (In LITE projection.)
+vviPublisher :: Lens' VolumeVolumeInfo (Maybe Text)
+vviPublisher
+  = lens _vviPublisher (\ s a -> s{_vviPublisher = a})
+
+-- | A synopsis of the volume. The text of the description is formatted in
+-- HTML and includes simple formatting elements, such as b, i, and br tags.
+-- (In LITE projection.)
+vviDescription :: Lens' VolumeVolumeInfo (Maybe Text)
+vviDescription
+  = lens _vviDescription
+      (\ s a -> s{_vviDescription = a})
+
+-- | Type of publication of this volume. Possible values are BOOK or
+-- MAGAZINE.
+vviPrintType :: Lens' VolumeVolumeInfo (Maybe Text)
+vviPrintType
+  = lens _vviPrintType (\ s a -> s{_vviPrintType = a})
+
+instance FromJSON VolumeVolumeInfo where
+        parseJSON
+          = withObject "VolumeVolumeInfo"
+              (\ o ->
+                 VolumeVolumeInfo <$>
+                   (o .:? "imageLinks") <*> (o .:? "averageRating") <*>
+                     (o .:? "ratingsCount")
+                     <*> (o .:? "canonicalVolumeLink")
+                     <*> (o .:? "readingModes")
+                     <*> (o .:? "industryIdentifiers" .!= mempty)
+                     <*> (o .:? "printedPageCount")
+                     <*> (o .:? "mainCategory")
+                     <*> (o .:? "contentVersion")
+                     <*> (o .:? "samplePageCount")
+                     <*> (o .:? "categories" .!= mempty)
+                     <*> (o .:? "authors" .!= mempty)
+                     <*> (o .:? "allowAnonLogging")
+                     <*> (o .:? "subtitle")
+                     <*> (o .:? "publishedDate")
+                     <*> (o .:? "maturityRating")
+                     <*> (o .:? "previewLink")
+                     <*> (o .:? "language")
+                     <*> (o .:? "title")
+                     <*> (o .:? "pageCount")
+                     <*> (o .:? "dimensions")
+                     <*> (o .:? "infoLink")
+                     <*> (o .:? "publisher")
+                     <*> (o .:? "description")
+                     <*> (o .:? "printType"))
+
+instance ToJSON VolumeVolumeInfo where
+        toJSON VolumeVolumeInfo{..}
+          = object
+              (catMaybes
+                 [("imageLinks" .=) <$> _vviImageLinks,
+                  ("averageRating" .=) <$> _vviAverageRating,
+                  ("ratingsCount" .=) <$> _vviRatingsCount,
+                  ("canonicalVolumeLink" .=) <$>
+                    _vviCanonicalVolumeLink,
+                  ("readingModes" .=) <$> _vviReadingModes,
+                  ("industryIdentifiers" .=) <$>
+                    _vviIndustryIdentifiers,
+                  ("printedPageCount" .=) <$> _vviPrintedPageCount,
+                  ("mainCategory" .=) <$> _vviMainCategory,
+                  ("contentVersion" .=) <$> _vviContentVersion,
+                  ("samplePageCount" .=) <$> _vviSamplePageCount,
+                  ("categories" .=) <$> _vviCategories,
+                  ("authors" .=) <$> _vviAuthors,
+                  ("allowAnonLogging" .=) <$> _vviAllowAnonLogging,
+                  ("subtitle" .=) <$> _vviSubtitle,
+                  ("publishedDate" .=) <$> _vviPublishedDate,
+                  ("maturityRating" .=) <$> _vviMaturityRating,
+                  ("previewLink" .=) <$> _vviPreviewLink,
+                  ("language" .=) <$> _vviLanguage,
+                  ("title" .=) <$> _vviTitle,
+                  ("pageCount" .=) <$> _vviPageCount,
+                  ("dimensions" .=) <$> _vviDimensions,
+                  ("infoLink" .=) <$> _vviInfoLink,
+                  ("publisher" .=) <$> _vviPublisher,
+                  ("description" .=) <$> _vviDescription,
+                  ("printType" .=) <$> _vviPrintType])
+
+--
+-- /See:/ 'metadataItemsItem' smart constructor.
+data MetadataItemsItem = MetadataItemsItem
+    { _miiSize         :: !(Maybe (Textual Int64))
+    , _miiVersion      :: !(Maybe (Textual Int64))
+    , _miiLanguage     :: !(Maybe Text)
+    , _miiDownloadURL  :: !(Maybe Text)
+    , _miiEncryptedKey :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'MetadataItemsItem' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'miiSize'
+--
+-- * 'miiVersion'
+--
+-- * 'miiLanguage'
+--
+-- * 'miiDownloadURL'
+--
+-- * 'miiEncryptedKey'
+metadataItemsItem
+    :: MetadataItemsItem
+metadataItemsItem =
+    MetadataItemsItem
+    { _miiSize = Nothing
+    , _miiVersion = Nothing
+    , _miiLanguage = Nothing
+    , _miiDownloadURL = Nothing
+    , _miiEncryptedKey = Nothing
+    }
+
+miiSize :: Lens' MetadataItemsItem (Maybe Int64)
+miiSize
+  = lens _miiSize (\ s a -> s{_miiSize = a}) .
+      mapping _Coerce
+
+miiVersion :: Lens' MetadataItemsItem (Maybe Int64)
+miiVersion
+  = lens _miiVersion (\ s a -> s{_miiVersion = a}) .
+      mapping _Coerce
+
+miiLanguage :: Lens' MetadataItemsItem (Maybe Text)
+miiLanguage
+  = lens _miiLanguage (\ s a -> s{_miiLanguage = a})
+
+miiDownloadURL :: Lens' MetadataItemsItem (Maybe Text)
+miiDownloadURL
+  = lens _miiDownloadURL
+      (\ s a -> s{_miiDownloadURL = a})
+
+miiEncryptedKey :: Lens' MetadataItemsItem (Maybe Text)
+miiEncryptedKey
+  = lens _miiEncryptedKey
+      (\ s a -> s{_miiEncryptedKey = a})
+
+instance FromJSON MetadataItemsItem where
+        parseJSON
+          = withObject "MetadataItemsItem"
+              (\ o ->
+                 MetadataItemsItem <$>
+                   (o .:? "size") <*> (o .:? "version") <*>
+                     (o .:? "language")
+                     <*> (o .:? "download_url")
+                     <*> (o .:? "encrypted_key"))
+
+instance ToJSON MetadataItemsItem where
+        toJSON MetadataItemsItem{..}
+          = object
+              (catMaybes
+                 [("size" .=) <$> _miiSize,
+                  ("version" .=) <$> _miiVersion,
+                  ("language" .=) <$> _miiLanguage,
+                  ("download_url" .=) <$> _miiDownloadURL,
+                  ("encrypted_key" .=) <$> _miiEncryptedKey])
+
+--
+-- /See:/ 'dictlayerDataDictWordsItemSensesItemSource' smart constructor.
+data DictlayerDataDictWordsItemSensesItemSource = DictlayerDataDictWordsItemSensesItemSource
+    { _dddwisisURL         :: !(Maybe Text)
+    , _dddwisisAttribution :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DictlayerDataDictWordsItemSensesItemSource' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dddwisisURL'
+--
+-- * 'dddwisisAttribution'
+dictlayerDataDictWordsItemSensesItemSource
+    :: DictlayerDataDictWordsItemSensesItemSource
+dictlayerDataDictWordsItemSensesItemSource =
+    DictlayerDataDictWordsItemSensesItemSource
+    { _dddwisisURL = Nothing
+    , _dddwisisAttribution = Nothing
+    }
+
+dddwisisURL :: Lens' DictlayerDataDictWordsItemSensesItemSource (Maybe Text)
+dddwisisURL
+  = lens _dddwisisURL (\ s a -> s{_dddwisisURL = a})
+
+dddwisisAttribution :: Lens' DictlayerDataDictWordsItemSensesItemSource (Maybe Text)
+dddwisisAttribution
+  = lens _dddwisisAttribution
+      (\ s a -> s{_dddwisisAttribution = a})
+
+instance FromJSON
+         DictlayerDataDictWordsItemSensesItemSource where
+        parseJSON
+          = withObject
+              "DictlayerDataDictWordsItemSensesItemSource"
+              (\ o ->
+                 DictlayerDataDictWordsItemSensesItemSource <$>
+                   (o .:? "url") <*> (o .:? "attribution"))
+
+instance ToJSON
+         DictlayerDataDictWordsItemSensesItemSource where
+        toJSON DictlayerDataDictWordsItemSensesItemSource{..}
+          = object
+              (catMaybes
+                 [("url" .=) <$> _dddwisisURL,
+                  ("attribution" .=) <$> _dddwisisAttribution])
+
+-- | Offer retail (=discounted) price in Micros
+--
+-- /See:/ 'volumeSaleInfoOffersItemRetailPrice' smart constructor.
+data VolumeSaleInfoOffersItemRetailPrice = VolumeSaleInfoOffersItemRetailPrice
+    { _vsioirpCurrencyCode   :: !(Maybe Text)
+    , _vsioirpAmountInMicros :: !(Maybe (Textual Double))
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'VolumeSaleInfoOffersItemRetailPrice' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'vsioirpCurrencyCode'
+--
+-- * 'vsioirpAmountInMicros'
+volumeSaleInfoOffersItemRetailPrice
+    :: VolumeSaleInfoOffersItemRetailPrice
+volumeSaleInfoOffersItemRetailPrice =
+    VolumeSaleInfoOffersItemRetailPrice
+    { _vsioirpCurrencyCode = Nothing
+    , _vsioirpAmountInMicros = Nothing
+    }
+
+vsioirpCurrencyCode :: Lens' VolumeSaleInfoOffersItemRetailPrice (Maybe Text)
+vsioirpCurrencyCode
+  = lens _vsioirpCurrencyCode
+      (\ s a -> s{_vsioirpCurrencyCode = a})
+
+vsioirpAmountInMicros :: Lens' VolumeSaleInfoOffersItemRetailPrice (Maybe Double)
+vsioirpAmountInMicros
+  = lens _vsioirpAmountInMicros
+      (\ s a -> s{_vsioirpAmountInMicros = a})
+      . mapping _Coerce
+
+instance FromJSON VolumeSaleInfoOffersItemRetailPrice
+         where
+        parseJSON
+          = withObject "VolumeSaleInfoOffersItemRetailPrice"
+              (\ o ->
+                 VolumeSaleInfoOffersItemRetailPrice <$>
+                   (o .:? "currencyCode") <*> (o .:? "amountInMicros"))
+
+instance ToJSON VolumeSaleInfoOffersItemRetailPrice
+         where
+        toJSON VolumeSaleInfoOffersItemRetailPrice{..}
+          = object
+              (catMaybes
+                 [("currencyCode" .=) <$> _vsioirpCurrencyCode,
+                  ("amountInMicros" .=) <$> _vsioirpAmountInMicros])
+
+--
+-- /See:/ 'volumeVolumeInfoIndustryIdentifiersItem' smart constructor.
+data VolumeVolumeInfoIndustryIdentifiersItem = VolumeVolumeInfoIndustryIdentifiersItem
+    { _vviiiiIdentifier :: !(Maybe Text)
+    , _vviiiiType       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'VolumeVolumeInfoIndustryIdentifiersItem' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'vviiiiIdentifier'
+--
+-- * 'vviiiiType'
+volumeVolumeInfoIndustryIdentifiersItem
+    :: VolumeVolumeInfoIndustryIdentifiersItem
+volumeVolumeInfoIndustryIdentifiersItem =
+    VolumeVolumeInfoIndustryIdentifiersItem
+    { _vviiiiIdentifier = Nothing
+    , _vviiiiType = Nothing
+    }
+
+-- | Industry specific volume identifier.
+vviiiiIdentifier :: Lens' VolumeVolumeInfoIndustryIdentifiersItem (Maybe Text)
+vviiiiIdentifier
+  = lens _vviiiiIdentifier
+      (\ s a -> s{_vviiiiIdentifier = a})
+
+-- | Identifier type. Possible values are ISBN_10, ISBN_13, ISSN and OTHER.
+vviiiiType :: Lens' VolumeVolumeInfoIndustryIdentifiersItem (Maybe Text)
+vviiiiType
+  = lens _vviiiiType (\ s a -> s{_vviiiiType = a})
+
+instance FromJSON
+         VolumeVolumeInfoIndustryIdentifiersItem where
+        parseJSON
+          = withObject
+              "VolumeVolumeInfoIndustryIdentifiersItem"
+              (\ o ->
+                 VolumeVolumeInfoIndustryIdentifiersItem <$>
+                   (o .:? "identifier") <*> (o .:? "type"))
+
+instance ToJSON
+         VolumeVolumeInfoIndustryIdentifiersItem where
+        toJSON VolumeVolumeInfoIndustryIdentifiersItem{..}
+          = object
+              (catMaybes
+                 [("identifier" .=) <$> _vviiiiIdentifier,
+                  ("type" .=) <$> _vviiiiType])
+
+--
+-- /See:/ 'booksAnnotationsRange' smart constructor.
+data BooksAnnotationsRange = BooksAnnotationsRange
+    { _barStartOffSet   :: !(Maybe Text)
+    , _barEndOffSet     :: !(Maybe Text)
+    , _barEndPosition   :: !(Maybe Text)
+    , _barStartPosition :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'BooksAnnotationsRange' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'barStartOffSet'
+--
+-- * 'barEndOffSet'
+--
+-- * 'barEndPosition'
+--
+-- * 'barStartPosition'
+booksAnnotationsRange
+    :: BooksAnnotationsRange
+booksAnnotationsRange =
+    BooksAnnotationsRange
+    { _barStartOffSet = Nothing
+    , _barEndOffSet = Nothing
+    , _barEndPosition = Nothing
+    , _barStartPosition = Nothing
+    }
+
+-- | The offset from the starting position.
+barStartOffSet :: Lens' BooksAnnotationsRange (Maybe Text)
+barStartOffSet
+  = lens _barStartOffSet
+      (\ s a -> s{_barStartOffSet = a})
+
+-- | The offset from the ending position.
+barEndOffSet :: Lens' BooksAnnotationsRange (Maybe Text)
+barEndOffSet
+  = lens _barEndOffSet (\ s a -> s{_barEndOffSet = a})
+
+-- | The ending position for the range.
+barEndPosition :: Lens' BooksAnnotationsRange (Maybe Text)
+barEndPosition
+  = lens _barEndPosition
+      (\ s a -> s{_barEndPosition = a})
+
+-- | The starting position for the range.
+barStartPosition :: Lens' BooksAnnotationsRange (Maybe Text)
+barStartPosition
+  = lens _barStartPosition
+      (\ s a -> s{_barStartPosition = a})
+
+instance FromJSON BooksAnnotationsRange where
+        parseJSON
+          = withObject "BooksAnnotationsRange"
+              (\ o ->
+                 BooksAnnotationsRange <$>
+                   (o .:? "startOffset") <*> (o .:? "endOffset") <*>
+                     (o .:? "endPosition")
+                     <*> (o .:? "startPosition"))
+
+instance ToJSON BooksAnnotationsRange where
+        toJSON BooksAnnotationsRange{..}
+          = object
+              (catMaybes
+                 [("startOffset" .=) <$> _barStartOffSet,
+                  ("endOffset" .=) <$> _barEndOffSet,
+                  ("endPosition" .=) <$> _barEndPosition,
+                  ("startPosition" .=) <$> _barStartPosition])
+
+--
+-- /See:/ 'layersummaries' smart constructor.
+data Layersummaries = Layersummaries
+    { _layTotalItems :: !(Maybe (Textual Int32))
+    , _layKind       :: !Text
+    , _layItems      :: !(Maybe [Layersummary])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Layersummaries' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'layTotalItems'
+--
+-- * 'layKind'
+--
+-- * 'layItems'
+layersummaries
+    :: Layersummaries
+layersummaries =
+    Layersummaries
+    { _layTotalItems = Nothing
+    , _layKind = "books#layersummaries"
+    , _layItems = Nothing
+    }
+
+-- | The total number of layer summaries found.
+layTotalItems :: Lens' Layersummaries (Maybe Int32)
+layTotalItems
+  = lens _layTotalItems
+      (\ s a -> s{_layTotalItems = a})
+      . mapping _Coerce
+
+-- | Resource type.
+layKind :: Lens' Layersummaries Text
+layKind = lens _layKind (\ s a -> s{_layKind = a})
+
+-- | A list of layer summary items.
+layItems :: Lens' Layersummaries [Layersummary]
+layItems
+  = lens _layItems (\ s a -> s{_layItems = a}) .
+      _Default
+      . _Coerce
+
+instance FromJSON Layersummaries where
+        parseJSON
+          = withObject "Layersummaries"
+              (\ o ->
+                 Layersummaries <$>
+                   (o .:? "totalItems") <*>
+                     (o .:? "kind" .!= "books#layersummaries")
+                     <*> (o .:? "items" .!= mempty))
+
+instance ToJSON Layersummaries where
+        toJSON Layersummaries{..}
+          = object
+              (catMaybes
+                 [("totalItems" .=) <$> _layTotalItems,
+                  Just ("kind" .= _layKind),
+                  ("items" .=) <$> _layItems])
diff --git a/gen/Network/Google/Books/Types/Sum.hs b/gen/Network/Google/Books/Types/Sum.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Books/Types/Sum.hs
@@ -0,0 +1,738 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE LambdaCase         #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- |
+-- Module      : Network.Google.Books.Types.Sum
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+module Network.Google.Books.Types.Sum where
+
+import           Network.Google.Prelude
+
+-- | Restrict information returned to a set of selected fields.
+data VolumesListProjection
+    = Full
+      -- ^ @full@
+      -- Includes all volume data.
+    | Lite
+      -- ^ @lite@
+      -- Includes a subset of fields in volumeInfo and accessInfo.
+      deriving (Eq,Ord,Enum,Read,Show,Data,Typeable,Generic)
+
+instance Hashable VolumesListProjection
+
+instance FromText VolumesListProjection where
+    fromText = \case
+        "full" -> Just Full
+        "lite" -> Just Lite
+        _ -> Nothing
+
+instance ToText VolumesListProjection where
+    toText = \case
+        Full -> "full"
+        Lite -> "lite"
+
+instance FromJSON VolumesListProjection where
+    parseJSON = parseJSONText "VolumesListProjection"
+
+instance ToJSON VolumesListProjection where
+    toJSON = toJSONText
+
+-- | Restrict information returned to a set of selected fields.
+data MyLibraryBookshelvesVolumesListProjection
+    = MLBVLPFull
+      -- ^ @full@
+      -- Includes all volume data.
+    | MLBVLPLite
+      -- ^ @lite@
+      -- Includes a subset of fields in volumeInfo and accessInfo.
+      deriving (Eq,Ord,Enum,Read,Show,Data,Typeable,Generic)
+
+instance Hashable MyLibraryBookshelvesVolumesListProjection
+
+instance FromText MyLibraryBookshelvesVolumesListProjection where
+    fromText = \case
+        "full" -> Just MLBVLPFull
+        "lite" -> Just MLBVLPLite
+        _ -> Nothing
+
+instance ToText MyLibraryBookshelvesVolumesListProjection where
+    toText = \case
+        MLBVLPFull -> "full"
+        MLBVLPLite -> "lite"
+
+instance FromJSON MyLibraryBookshelvesVolumesListProjection where
+    parseJSON = parseJSONText "MyLibraryBookshelvesVolumesListProjection"
+
+instance ToJSON MyLibraryBookshelvesVolumesListProjection where
+    toJSON = toJSONText
+
+-- | Sort search results.
+data VolumesListOrderBy
+    = Newest
+      -- ^ @newest@
+      -- Most recently published.
+    | Relevance
+      -- ^ @relevance@
+      -- Relevance to search terms.
+      deriving (Eq,Ord,Enum,Read,Show,Data,Typeable,Generic)
+
+instance Hashable VolumesListOrderBy
+
+instance FromText VolumesListOrderBy where
+    fromText = \case
+        "newest" -> Just Newest
+        "relevance" -> Just Relevance
+        _ -> Nothing
+
+instance ToText VolumesListOrderBy where
+    toText = \case
+        Newest -> "newest"
+        Relevance -> "relevance"
+
+instance FromJSON VolumesListOrderBy where
+    parseJSON = parseJSONText "VolumesListOrderBy"
+
+instance ToJSON VolumesListOrderBy where
+    toJSON = toJSONText
+
+-- | Restrict search to this user\'s library.
+data VolumesListLibraryRestrict
+    = MyLibrary
+      -- ^ @my-library@
+      -- Restrict to the user\'s library, any shelf.
+    | NoRestrict
+      -- ^ @no-restrict@
+      -- Do not restrict based on user\'s library.
+      deriving (Eq,Ord,Enum,Read,Show,Data,Typeable,Generic)
+
+instance Hashable VolumesListLibraryRestrict
+
+instance FromText VolumesListLibraryRestrict where
+    fromText = \case
+        "my-library" -> Just MyLibrary
+        "no-restrict" -> Just NoRestrict
+        _ -> Nothing
+
+instance ToText VolumesListLibraryRestrict where
+    toText = \case
+        MyLibrary -> "my-library"
+        NoRestrict -> "no-restrict"
+
+instance FromJSON VolumesListLibraryRestrict where
+    parseJSON = parseJSONText "VolumesListLibraryRestrict"
+
+instance ToJSON VolumesListLibraryRestrict where
+    toJSON = toJSONText
+
+-- | The reason for which the book is removed from the library.
+data MyLibraryBookshelvesRemoveVolumeReason
+    = Onboarding
+      -- ^ @ONBOARDING@
+      -- Samples removed from the Onboarding flow.
+      deriving (Eq,Ord,Enum,Read,Show,Data,Typeable,Generic)
+
+instance Hashable MyLibraryBookshelvesRemoveVolumeReason
+
+instance FromText MyLibraryBookshelvesRemoveVolumeReason where
+    fromText = \case
+        "ONBOARDING" -> Just Onboarding
+        _ -> Nothing
+
+instance ToText MyLibraryBookshelvesRemoveVolumeReason where
+    toText = \case
+        Onboarding -> "ONBOARDING"
+
+instance FromJSON MyLibraryBookshelvesRemoveVolumeReason where
+    parseJSON = parseJSONText "MyLibraryBookshelvesRemoveVolumeReason"
+
+instance ToJSON MyLibraryBookshelvesRemoveVolumeReason where
+    toJSON = toJSONText
+
+-- | The maximum allowed maturity rating of returned volumes. Books with a
+-- higher maturity rating are filtered out.
+data OnboardingListCategoryVolumesMaxAllowedMaturityRating
+    = Mature
+      -- ^ @mature@
+      -- Show books which are rated mature or lower.
+    | NotMature
+      -- ^ @not-mature@
+      -- Show books which are rated not mature.
+      deriving (Eq,Ord,Enum,Read,Show,Data,Typeable,Generic)
+
+instance Hashable OnboardingListCategoryVolumesMaxAllowedMaturityRating
+
+instance FromText OnboardingListCategoryVolumesMaxAllowedMaturityRating where
+    fromText = \case
+        "mature" -> Just Mature
+        "not-mature" -> Just NotMature
+        _ -> Nothing
+
+instance ToText OnboardingListCategoryVolumesMaxAllowedMaturityRating where
+    toText = \case
+        Mature -> "mature"
+        NotMature -> "not-mature"
+
+instance FromJSON OnboardingListCategoryVolumesMaxAllowedMaturityRating where
+    parseJSON = parseJSONText "OnboardingListCategoryVolumesMaxAllowedMaturityRating"
+
+instance ToJSON OnboardingListCategoryVolumesMaxAllowedMaturityRating where
+    toJSON = toJSONText
+
+-- | Restrict to volumes by download availability.
+data VolumesListDownload
+    = Epub
+      -- ^ @epub@
+      -- All volumes with epub.
+      deriving (Eq,Ord,Enum,Read,Show,Data,Typeable,Generic)
+
+instance Hashable VolumesListDownload
+
+instance FromText VolumesListDownload where
+    fromText = \case
+        "epub" -> Just Epub
+        _ -> Nothing
+
+instance ToText VolumesListDownload where
+    toText = \case
+        Epub -> "epub"
+
+instance FromJSON VolumesListDownload where
+    parseJSON = parseJSONText "VolumesListDownload"
+
+instance ToJSON VolumesListDownload where
+    toJSON = toJSONText
+
+-- | Restrict information returned to a set of selected fields.
+data VolumesGetProjection
+    = VGPFull
+      -- ^ @full@
+      -- Includes all volume data.
+    | VGPLite
+      -- ^ @lite@
+      -- Includes a subset of fields in volumeInfo and accessInfo.
+      deriving (Eq,Ord,Enum,Read,Show,Data,Typeable,Generic)
+
+instance Hashable VolumesGetProjection
+
+instance FromText VolumesGetProjection where
+    fromText = \case
+        "full" -> Just VGPFull
+        "lite" -> Just VGPLite
+        _ -> Nothing
+
+instance ToText VolumesGetProjection where
+    toText = \case
+        VGPFull -> "full"
+        VGPLite -> "lite"
+
+instance FromJSON VolumesGetProjection where
+    parseJSON = parseJSONText "VolumesGetProjection"
+
+instance ToJSON VolumesGetProjection where
+    toJSON = toJSONText
+
+-- | Association type.
+data VolumesAssociatedListAssociation
+    = EndOfSample
+      -- ^ @end-of-sample@
+      -- Recommendations for display end-of-sample.
+    | EndOfVolume
+      -- ^ @end-of-volume@
+      -- Recommendations for display end-of-volume.
+    | RelatedForPlay
+      -- ^ @related-for-play@
+      -- Related volumes for Play Store.
+      deriving (Eq,Ord,Enum,Read,Show,Data,Typeable,Generic)
+
+instance Hashable VolumesAssociatedListAssociation
+
+instance FromText VolumesAssociatedListAssociation where
+    fromText = \case
+        "end-of-sample" -> Just EndOfSample
+        "end-of-volume" -> Just EndOfVolume
+        "related-for-play" -> Just RelatedForPlay
+        _ -> Nothing
+
+instance ToText VolumesAssociatedListAssociation where
+    toText = \case
+        EndOfSample -> "end-of-sample"
+        EndOfVolume -> "end-of-volume"
+        RelatedForPlay -> "related-for-play"
+
+instance FromJSON VolumesAssociatedListAssociation where
+    parseJSON = parseJSONText "VolumesAssociatedListAssociation"
+
+instance ToJSON VolumesAssociatedListAssociation where
+    toJSON = toJSONText
+
+-- | Rating to be given to the volume.
+data VolumesRecommendedRateRating
+    = HaveIt
+      -- ^ @HAVE_IT@
+      -- Rating indicating a dismissal due to ownership.
+    | NotInterested
+      -- ^ @NOT_INTERESTED@
+      -- Rating indicating a negative dismissal of a volume.
+      deriving (Eq,Ord,Enum,Read,Show,Data,Typeable,Generic)
+
+instance Hashable VolumesRecommendedRateRating
+
+instance FromText VolumesRecommendedRateRating where
+    fromText = \case
+        "HAVE_IT" -> Just HaveIt
+        "NOT_INTERESTED" -> Just NotInterested
+        _ -> Nothing
+
+instance ToText VolumesRecommendedRateRating where
+    toText = \case
+        HaveIt -> "HAVE_IT"
+        NotInterested -> "NOT_INTERESTED"
+
+instance FromJSON VolumesRecommendedRateRating where
+    parseJSON = parseJSONText "VolumesRecommendedRateRating"
+
+instance ToJSON VolumesRecommendedRateRating where
+    toJSON = toJSONText
+
+-- | The processing state of the user uploaded volumes to be returned.
+data VolumesUserUploadedListProcessingState
+    = CompletedFailed
+      -- ^ @COMPLETED_FAILED@
+      -- The volume processing hase failed.
+    | CompletedSuccess
+      -- ^ @COMPLETED_SUCCESS@
+      -- The volume processing was completed.
+    | Running
+      -- ^ @RUNNING@
+      -- The volume processing is not completed.
+      deriving (Eq,Ord,Enum,Read,Show,Data,Typeable,Generic)
+
+instance Hashable VolumesUserUploadedListProcessingState
+
+instance FromText VolumesUserUploadedListProcessingState where
+    fromText = \case
+        "COMPLETED_FAILED" -> Just CompletedFailed
+        "COMPLETED_SUCCESS" -> Just CompletedSuccess
+        "RUNNING" -> Just Running
+        _ -> Nothing
+
+instance ToText VolumesUserUploadedListProcessingState where
+    toText = \case
+        CompletedFailed -> "COMPLETED_FAILED"
+        CompletedSuccess -> "COMPLETED_SUCCESS"
+        Running -> "RUNNING"
+
+instance FromJSON VolumesUserUploadedListProcessingState where
+    parseJSON = parseJSONText "VolumesUserUploadedListProcessingState"
+
+instance ToJSON VolumesUserUploadedListProcessingState where
+    toJSON = toJSONText
+
+-- | List of features supported by the client, i.e., \'RENTALS\'
+data MyConfigSyncVolumeLicensesFeatures
+    = Rentals
+      -- ^ @RENTALS@
+      -- Client supports rentals.
+      deriving (Eq,Ord,Enum,Read,Show,Data,Typeable,Generic)
+
+instance Hashable MyConfigSyncVolumeLicensesFeatures
+
+instance FromText MyConfigSyncVolumeLicensesFeatures where
+    fromText = \case
+        "RENTALS" -> Just Rentals
+        _ -> Nothing
+
+instance ToText MyConfigSyncVolumeLicensesFeatures where
+    toText = \case
+        Rentals -> "RENTALS"
+
+instance FromJSON MyConfigSyncVolumeLicensesFeatures where
+    parseJSON = parseJSONText "MyConfigSyncVolumeLicensesFeatures"
+
+instance ToJSON MyConfigSyncVolumeLicensesFeatures where
+    toJSON = toJSONText
+
+-- | The maximum allowed maturity rating of returned recommendations. Books
+-- with a higher maturity rating are filtered out.
+data VolumesAssociatedListMaxAllowedMaturityRating
+    = VALMAMRMature
+      -- ^ @mature@
+      -- Show books which are rated mature or lower.
+    | VALMAMRNotMature
+      -- ^ @not-mature@
+      -- Show books which are rated not mature.
+      deriving (Eq,Ord,Enum,Read,Show,Data,Typeable,Generic)
+
+instance Hashable VolumesAssociatedListMaxAllowedMaturityRating
+
+instance FromText VolumesAssociatedListMaxAllowedMaturityRating where
+    fromText = \case
+        "mature" -> Just VALMAMRMature
+        "not-mature" -> Just VALMAMRNotMature
+        _ -> Nothing
+
+instance ToText VolumesAssociatedListMaxAllowedMaturityRating where
+    toText = \case
+        VALMAMRMature -> "mature"
+        VALMAMRNotMature -> "not-mature"
+
+instance FromJSON VolumesAssociatedListMaxAllowedMaturityRating where
+    parseJSON = parseJSONText "VolumesAssociatedListMaxAllowedMaturityRating"
+
+instance ToJSON VolumesAssociatedListMaxAllowedMaturityRating where
+    toJSON = toJSONText
+
+-- | Filter search results.
+data VolumesListFilter
+    = VLFEbooks
+      -- ^ @ebooks@
+      -- All Google eBooks.
+    | VLFFreeEbooks
+      -- ^ @free-ebooks@
+      -- Google eBook with full volume text viewability.
+    | VLFFull
+      -- ^ @full@
+      -- Public can view entire volume text.
+    | VLFPaidEbooks
+      -- ^ @paid-ebooks@
+      -- Google eBook with a price.
+    | VLFPartial
+      -- ^ @partial@
+      -- Public able to see parts of text.
+      deriving (Eq,Ord,Enum,Read,Show,Data,Typeable,Generic)
+
+instance Hashable VolumesListFilter
+
+instance FromText VolumesListFilter where
+    fromText = \case
+        "ebooks" -> Just VLFEbooks
+        "free-ebooks" -> Just VLFFreeEbooks
+        "full" -> Just VLFFull
+        "paid-ebooks" -> Just VLFPaidEbooks
+        "partial" -> Just VLFPartial
+        _ -> Nothing
+
+instance ToText VolumesListFilter where
+    toText = \case
+        VLFEbooks -> "ebooks"
+        VLFFreeEbooks -> "free-ebooks"
+        VLFFull -> "full"
+        VLFPaidEbooks -> "paid-ebooks"
+        VLFPartial -> "partial"
+
+instance FromJSON VolumesListFilter where
+    parseJSON = parseJSONText "VolumesListFilter"
+
+instance ToJSON VolumesListFilter where
+    toJSON = toJSONText
+
+-- | The maximum allowed maturity rating of returned recommendations. Books
+-- with a higher maturity rating are filtered out.
+data VolumesRecommendedListMaxAllowedMaturityRating
+    = VRLMAMRMature
+      -- ^ @mature@
+      -- Show books which are rated mature or lower.
+    | VRLMAMRNotMature
+      -- ^ @not-mature@
+      -- Show books which are rated not mature.
+      deriving (Eq,Ord,Enum,Read,Show,Data,Typeable,Generic)
+
+instance Hashable VolumesRecommendedListMaxAllowedMaturityRating
+
+instance FromText VolumesRecommendedListMaxAllowedMaturityRating where
+    fromText = \case
+        "mature" -> Just VRLMAMRMature
+        "not-mature" -> Just VRLMAMRNotMature
+        _ -> Nothing
+
+instance ToText VolumesRecommendedListMaxAllowedMaturityRating where
+    toText = \case
+        VRLMAMRMature -> "mature"
+        VRLMAMRNotMature -> "not-mature"
+
+instance FromJSON VolumesRecommendedListMaxAllowedMaturityRating where
+    parseJSON = parseJSONText "VolumesRecommendedListMaxAllowedMaturityRating"
+
+instance ToJSON VolumesRecommendedListMaxAllowedMaturityRating where
+    toJSON = toJSONText
+
+-- | The reason for which the book is added to the library.
+data MyLibraryBookshelvesAddVolumeReason
+    = MLBAVRIosPrex
+      -- ^ @IOS_PREX@
+      -- Volumes added from the PREX flow on iOS.
+    | MLBAVRIosSearch
+      -- ^ @IOS_SEARCH@
+      -- Volumes added from the Search flow on iOS.
+    | MLBAVROnboarding
+      -- ^ @ONBOARDING@
+      -- Volumes added from the Onboarding flow.
+      deriving (Eq,Ord,Enum,Read,Show,Data,Typeable,Generic)
+
+instance Hashable MyLibraryBookshelvesAddVolumeReason
+
+instance FromText MyLibraryBookshelvesAddVolumeReason where
+    fromText = \case
+        "IOS_PREX" -> Just MLBAVRIosPrex
+        "IOS_SEARCH" -> Just MLBAVRIosSearch
+        "ONBOARDING" -> Just MLBAVROnboarding
+        _ -> Nothing
+
+instance ToText MyLibraryBookshelvesAddVolumeReason where
+    toText = \case
+        MLBAVRIosPrex -> "IOS_PREX"
+        MLBAVRIosSearch -> "IOS_SEARCH"
+        MLBAVROnboarding -> "ONBOARDING"
+
+instance FromJSON MyLibraryBookshelvesAddVolumeReason where
+    parseJSON = parseJSONText "MyLibraryBookshelvesAddVolumeReason"
+
+instance ToJSON MyLibraryBookshelvesAddVolumeReason where
+    toJSON = toJSONText
+
+-- | How the book was aquired
+data VolumesMybooksListAcquireMethod
+    = PreOrdered
+      -- ^ @PREORDERED@
+      -- Preordered books (not yet available)
+    | PreviouslyRented
+      -- ^ @PREVIOUSLY_RENTED@
+      -- User-rented books past their expiration time
+    | PublicDomain
+      -- ^ @PUBLIC_DOMAIN@
+      -- Public domain books
+    | Purchased
+      -- ^ @PURCHASED@
+      -- Purchased books
+    | Rented
+      -- ^ @RENTED@
+      -- User-rented books
+    | Sample
+      -- ^ @SAMPLE@
+      -- Sample books
+    | Uploaded
+      -- ^ @UPLOADED@
+      -- User uploaded books
+      deriving (Eq,Ord,Enum,Read,Show,Data,Typeable,Generic)
+
+instance Hashable VolumesMybooksListAcquireMethod
+
+instance FromText VolumesMybooksListAcquireMethod where
+    fromText = \case
+        "PREORDERED" -> Just PreOrdered
+        "PREVIOUSLY_RENTED" -> Just PreviouslyRented
+        "PUBLIC_DOMAIN" -> Just PublicDomain
+        "PURCHASED" -> Just Purchased
+        "RENTED" -> Just Rented
+        "SAMPLE" -> Just Sample
+        "UPLOADED" -> Just Uploaded
+        _ -> Nothing
+
+instance ToText VolumesMybooksListAcquireMethod where
+    toText = \case
+        PreOrdered -> "PREORDERED"
+        PreviouslyRented -> "PREVIOUSLY_RENTED"
+        PublicDomain -> "PUBLIC_DOMAIN"
+        Purchased -> "PURCHASED"
+        Rented -> "RENTED"
+        Sample -> "SAMPLE"
+        Uploaded -> "UPLOADED"
+
+instance FromJSON VolumesMybooksListAcquireMethod where
+    parseJSON = parseJSONText "VolumesMybooksListAcquireMethod"
+
+instance ToJSON VolumesMybooksListAcquireMethod where
+    toJSON = toJSONText
+
+-- | The maximum allowed maturity rating of returned recommendations. Books
+-- with a higher maturity rating are filtered out.
+data PersonalizedstreamGetMaxAllowedMaturityRating
+    = PGMAMRMature
+      -- ^ @mature@
+      -- Show books which are rated mature or lower.
+    | PGMAMRNotMature
+      -- ^ @not-mature@
+      -- Show books which are rated not mature.
+      deriving (Eq,Ord,Enum,Read,Show,Data,Typeable,Generic)
+
+instance Hashable PersonalizedstreamGetMaxAllowedMaturityRating
+
+instance FromText PersonalizedstreamGetMaxAllowedMaturityRating where
+    fromText = \case
+        "mature" -> Just PGMAMRMature
+        "not-mature" -> Just PGMAMRNotMature
+        _ -> Nothing
+
+instance ToText PersonalizedstreamGetMaxAllowedMaturityRating where
+    toText = \case
+        PGMAMRMature -> "mature"
+        PGMAMRNotMature -> "not-mature"
+
+instance FromJSON PersonalizedstreamGetMaxAllowedMaturityRating where
+    parseJSON = parseJSONText "PersonalizedstreamGetMaxAllowedMaturityRating"
+
+instance ToJSON PersonalizedstreamGetMaxAllowedMaturityRating where
+    toJSON = toJSONText
+
+-- | Restrict to books or magazines.
+data VolumesListPrintType
+    = All
+      -- ^ @all@
+      -- All volume content types.
+    | Books
+      -- ^ @books@
+      -- Just books.
+    | Magazines
+      -- ^ @magazines@
+      -- Just magazines.
+      deriving (Eq,Ord,Enum,Read,Show,Data,Typeable,Generic)
+
+instance Hashable VolumesListPrintType
+
+instance FromText VolumesListPrintType where
+    fromText = \case
+        "all" -> Just All
+        "books" -> Just Books
+        "magazines" -> Just Magazines
+        _ -> Nothing
+
+instance ToText VolumesListPrintType where
+    toText = \case
+        All -> "all"
+        Books -> "books"
+        Magazines -> "magazines"
+
+instance FromJSON VolumesListPrintType where
+    parseJSON = parseJSONText "VolumesListPrintType"
+
+instance ToJSON VolumesListPrintType where
+    toJSON = toJSONText
+
+-- | The processing state of the user uploaded volumes to be returned.
+-- Applicable only if the UPLOADED is specified in the acquireMethod.
+data VolumesMybooksListProcessingState
+    = VMLPSCompletedFailed
+      -- ^ @COMPLETED_FAILED@
+      -- The volume processing hase failed.
+    | VMLPSCompletedSuccess
+      -- ^ @COMPLETED_SUCCESS@
+      -- The volume processing was completed.
+    | VMLPSRunning
+      -- ^ @RUNNING@
+      -- The volume processing is not completed.
+      deriving (Eq,Ord,Enum,Read,Show,Data,Typeable,Generic)
+
+instance Hashable VolumesMybooksListProcessingState
+
+instance FromText VolumesMybooksListProcessingState where
+    fromText = \case
+        "COMPLETED_FAILED" -> Just VMLPSCompletedFailed
+        "COMPLETED_SUCCESS" -> Just VMLPSCompletedSuccess
+        "RUNNING" -> Just VMLPSRunning
+        _ -> Nothing
+
+instance ToText VolumesMybooksListProcessingState where
+    toText = \case
+        VMLPSCompletedFailed -> "COMPLETED_FAILED"
+        VMLPSCompletedSuccess -> "COMPLETED_SUCCESS"
+        VMLPSRunning -> "RUNNING"
+
+instance FromJSON VolumesMybooksListProcessingState where
+    parseJSON = parseJSONText "VolumesMybooksListProcessingState"
+
+instance ToJSON VolumesMybooksListProcessingState where
+    toJSON = toJSONText
+
+-- | The type of access license to request. If not specified, the default is
+-- BOTH.
+data MyConfigRequestAccessLicenseTypes
+    = Both
+      -- ^ @BOTH@
+      -- Both concurrent and download licenses.
+    | Concurrent
+      -- ^ @CONCURRENT@
+      -- Concurrent access license.
+    | Download
+      -- ^ @DOWNLOAD@
+      -- Offline download access license.
+      deriving (Eq,Ord,Enum,Read,Show,Data,Typeable,Generic)
+
+instance Hashable MyConfigRequestAccessLicenseTypes
+
+instance FromText MyConfigRequestAccessLicenseTypes where
+    fromText = \case
+        "BOTH" -> Just Both
+        "CONCURRENT" -> Just Concurrent
+        "DOWNLOAD" -> Just Download
+        _ -> Nothing
+
+instance ToText MyConfigRequestAccessLicenseTypes where
+    toText = \case
+        Both -> "BOTH"
+        Concurrent -> "CONCURRENT"
+        Download -> "DOWNLOAD"
+
+instance FromJSON MyConfigRequestAccessLicenseTypes where
+    parseJSON = parseJSONText "MyConfigRequestAccessLicenseTypes"
+
+instance ToJSON MyConfigRequestAccessLicenseTypes where
+    toJSON = toJSONText
+
+-- | Action that caused this reading position to be set.
+data MyLibraryReadingPositionsSetPositionAction
+    = Bookmark
+      -- ^ @bookmark@
+      -- User chose bookmark within volume.
+    | Chapter
+      -- ^ @chapter@
+      -- User selected chapter from list.
+    | NextPage
+      -- ^ @next-page@
+      -- Next page event.
+    | PrevPage
+      -- ^ @prev-page@
+      -- Previous page event.
+    | Scroll
+      -- ^ @scroll@
+      -- User navigated to page.
+    | Search
+      -- ^ @search@
+      -- User chose search results within volume.
+      deriving (Eq,Ord,Enum,Read,Show,Data,Typeable,Generic)
+
+instance Hashable MyLibraryReadingPositionsSetPositionAction
+
+instance FromText MyLibraryReadingPositionsSetPositionAction where
+    fromText = \case
+        "bookmark" -> Just Bookmark
+        "chapter" -> Just Chapter
+        "next-page" -> Just NextPage
+        "prev-page" -> Just PrevPage
+        "scroll" -> Just Scroll
+        "search" -> Just Search
+        _ -> Nothing
+
+instance ToText MyLibraryReadingPositionsSetPositionAction where
+    toText = \case
+        Bookmark -> "bookmark"
+        Chapter -> "chapter"
+        NextPage -> "next-page"
+        PrevPage -> "prev-page"
+        Scroll -> "scroll"
+        Search -> "search"
+
+instance FromJSON MyLibraryReadingPositionsSetPositionAction where
+    parseJSON = parseJSONText "MyLibraryReadingPositionsSetPositionAction"
+
+instance ToJSON MyLibraryReadingPositionsSetPositionAction where
+    toJSON = toJSONText
diff --git a/gen/Network/Google/Resource/Books/Bookshelves/Get.hs b/gen/Network/Google/Resource/Books/Bookshelves/Get.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Books/Bookshelves/Get.hs
@@ -0,0 +1,104 @@
+{-# 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.Books.Bookshelves.Get
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Retrieves metadata for a specific bookshelf for the specified user.
+--
+-- /See:/ <https://developers.google.com/books/docs/v1/getting_started Books API Reference> for @books.bookshelves.get@.
+module Network.Google.Resource.Books.Bookshelves.Get
+    (
+    -- * REST Resource
+      BookshelvesGetResource
+
+    -- * Creating a Request
+    , bookshelvesGet
+    , BookshelvesGet
+
+    -- * Request Lenses
+    , bgUserId
+    , bgShelf
+    , bgSource
+    ) where
+
+import           Network.Google.Books.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @books.bookshelves.get@ method which the
+-- 'BookshelvesGet' request conforms to.
+type BookshelvesGetResource =
+     "books" :>
+       "v1" :>
+         "users" :>
+           Capture "userId" Text :>
+             "bookshelves" :>
+               Capture "shelf" Text :>
+                 QueryParam "source" Text :>
+                   QueryParam "alt" AltJSON :> Get '[JSON] Bookshelf
+
+-- | Retrieves metadata for a specific bookshelf for the specified user.
+--
+-- /See:/ 'bookshelvesGet' smart constructor.
+data BookshelvesGet = BookshelvesGet
+    { _bgUserId :: !Text
+    , _bgShelf  :: !Text
+    , _bgSource :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'BookshelvesGet' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'bgUserId'
+--
+-- * 'bgShelf'
+--
+-- * 'bgSource'
+bookshelvesGet
+    :: Text -- ^ 'bgUserId'
+    -> Text -- ^ 'bgShelf'
+    -> BookshelvesGet
+bookshelvesGet pBgUserId_ pBgShelf_ =
+    BookshelvesGet
+    { _bgUserId = pBgUserId_
+    , _bgShelf = pBgShelf_
+    , _bgSource = Nothing
+    }
+
+-- | ID of user for whom to retrieve bookshelves.
+bgUserId :: Lens' BookshelvesGet Text
+bgUserId = lens _bgUserId (\ s a -> s{_bgUserId = a})
+
+-- | ID of bookshelf to retrieve.
+bgShelf :: Lens' BookshelvesGet Text
+bgShelf = lens _bgShelf (\ s a -> s{_bgShelf = a})
+
+-- | String to identify the originator of this request.
+bgSource :: Lens' BookshelvesGet (Maybe Text)
+bgSource = lens _bgSource (\ s a -> s{_bgSource = a})
+
+instance GoogleRequest BookshelvesGet where
+        type Rs BookshelvesGet = Bookshelf
+        requestClient BookshelvesGet{..}
+          = go _bgUserId _bgShelf _bgSource (Just AltJSON)
+              booksService
+          where go
+                  = buildClient (Proxy :: Proxy BookshelvesGetResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Books/Bookshelves/List.hs b/gen/Network/Google/Resource/Books/Bookshelves/List.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Books/Bookshelves/List.hs
@@ -0,0 +1,93 @@
+{-# 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.Books.Bookshelves.List
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Retrieves a list of public bookshelves for the specified user.
+--
+-- /See:/ <https://developers.google.com/books/docs/v1/getting_started Books API Reference> for @books.bookshelves.list@.
+module Network.Google.Resource.Books.Bookshelves.List
+    (
+    -- * REST Resource
+      BookshelvesListResource
+
+    -- * Creating a Request
+    , bookshelvesList
+    , BookshelvesList
+
+    -- * Request Lenses
+    , blUserId
+    , blSource
+    ) where
+
+import           Network.Google.Books.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @books.bookshelves.list@ method which the
+-- 'BookshelvesList' request conforms to.
+type BookshelvesListResource =
+     "books" :>
+       "v1" :>
+         "users" :>
+           Capture "userId" Text :>
+             "bookshelves" :>
+               QueryParam "source" Text :>
+                 QueryParam "alt" AltJSON :> Get '[JSON] Bookshelves
+
+-- | Retrieves a list of public bookshelves for the specified user.
+--
+-- /See:/ 'bookshelvesList' smart constructor.
+data BookshelvesList = BookshelvesList
+    { _blUserId :: !Text
+    , _blSource :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'BookshelvesList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'blUserId'
+--
+-- * 'blSource'
+bookshelvesList
+    :: Text -- ^ 'blUserId'
+    -> BookshelvesList
+bookshelvesList pBlUserId_ =
+    BookshelvesList
+    { _blUserId = pBlUserId_
+    , _blSource = Nothing
+    }
+
+-- | ID of user for whom to retrieve bookshelves.
+blUserId :: Lens' BookshelvesList Text
+blUserId = lens _blUserId (\ s a -> s{_blUserId = a})
+
+-- | String to identify the originator of this request.
+blSource :: Lens' BookshelvesList (Maybe Text)
+blSource = lens _blSource (\ s a -> s{_blSource = a})
+
+instance GoogleRequest BookshelvesList where
+        type Rs BookshelvesList = Bookshelves
+        requestClient BookshelvesList{..}
+          = go _blUserId _blSource (Just AltJSON) booksService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy BookshelvesListResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Books/Bookshelves/Volumes/List.hs b/gen/Network/Google/Resource/Books/Bookshelves/Volumes/List.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Books/Bookshelves/Volumes/List.hs
@@ -0,0 +1,149 @@
+{-# 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.Books.Bookshelves.Volumes.List
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Retrieves volumes in a specific bookshelf for the specified user.
+--
+-- /See:/ <https://developers.google.com/books/docs/v1/getting_started Books API Reference> for @books.bookshelves.volumes.list@.
+module Network.Google.Resource.Books.Bookshelves.Volumes.List
+    (
+    -- * REST Resource
+      BookshelvesVolumesListResource
+
+    -- * Creating a Request
+    , bookshelvesVolumesList
+    , BookshelvesVolumesList
+
+    -- * Request Lenses
+    , bvlUserId
+    , bvlShelf
+    , bvlSource
+    , bvlStartIndex
+    , bvlMaxResults
+    , bvlShowPreOrders
+    ) where
+
+import           Network.Google.Books.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @books.bookshelves.volumes.list@ method which the
+-- 'BookshelvesVolumesList' request conforms to.
+type BookshelvesVolumesListResource =
+     "books" :>
+       "v1" :>
+         "users" :>
+           Capture "userId" Text :>
+             "bookshelves" :>
+               Capture "shelf" Text :>
+                 "volumes" :>
+                   QueryParam "source" Text :>
+                     QueryParam "startIndex" (Textual Word32) :>
+                       QueryParam "maxResults" (Textual Word32) :>
+                         QueryParam "showPreorders" Bool :>
+                           QueryParam "alt" AltJSON :> Get '[JSON] Volumes
+
+-- | Retrieves volumes in a specific bookshelf for the specified user.
+--
+-- /See:/ 'bookshelvesVolumesList' smart constructor.
+data BookshelvesVolumesList = BookshelvesVolumesList
+    { _bvlUserId        :: !Text
+    , _bvlShelf         :: !Text
+    , _bvlSource        :: !(Maybe Text)
+    , _bvlStartIndex    :: !(Maybe (Textual Word32))
+    , _bvlMaxResults    :: !(Maybe (Textual Word32))
+    , _bvlShowPreOrders :: !(Maybe Bool)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'BookshelvesVolumesList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'bvlUserId'
+--
+-- * 'bvlShelf'
+--
+-- * 'bvlSource'
+--
+-- * 'bvlStartIndex'
+--
+-- * 'bvlMaxResults'
+--
+-- * 'bvlShowPreOrders'
+bookshelvesVolumesList
+    :: Text -- ^ 'bvlUserId'
+    -> Text -- ^ 'bvlShelf'
+    -> BookshelvesVolumesList
+bookshelvesVolumesList pBvlUserId_ pBvlShelf_ =
+    BookshelvesVolumesList
+    { _bvlUserId = pBvlUserId_
+    , _bvlShelf = pBvlShelf_
+    , _bvlSource = Nothing
+    , _bvlStartIndex = Nothing
+    , _bvlMaxResults = Nothing
+    , _bvlShowPreOrders = Nothing
+    }
+
+-- | ID of user for whom to retrieve bookshelf volumes.
+bvlUserId :: Lens' BookshelvesVolumesList Text
+bvlUserId
+  = lens _bvlUserId (\ s a -> s{_bvlUserId = a})
+
+-- | ID of bookshelf to retrieve volumes.
+bvlShelf :: Lens' BookshelvesVolumesList Text
+bvlShelf = lens _bvlShelf (\ s a -> s{_bvlShelf = a})
+
+-- | String to identify the originator of this request.
+bvlSource :: Lens' BookshelvesVolumesList (Maybe Text)
+bvlSource
+  = lens _bvlSource (\ s a -> s{_bvlSource = a})
+
+-- | Index of the first element to return (starts at 0)
+bvlStartIndex :: Lens' BookshelvesVolumesList (Maybe Word32)
+bvlStartIndex
+  = lens _bvlStartIndex
+      (\ s a -> s{_bvlStartIndex = a})
+      . mapping _Coerce
+
+-- | Maximum number of results to return
+bvlMaxResults :: Lens' BookshelvesVolumesList (Maybe Word32)
+bvlMaxResults
+  = lens _bvlMaxResults
+      (\ s a -> s{_bvlMaxResults = a})
+      . mapping _Coerce
+
+-- | Set to true to show pre-ordered books. Defaults to false.
+bvlShowPreOrders :: Lens' BookshelvesVolumesList (Maybe Bool)
+bvlShowPreOrders
+  = lens _bvlShowPreOrders
+      (\ s a -> s{_bvlShowPreOrders = a})
+
+instance GoogleRequest BookshelvesVolumesList where
+        type Rs BookshelvesVolumesList = Volumes
+        requestClient BookshelvesVolumesList{..}
+          = go _bvlUserId _bvlShelf _bvlSource _bvlStartIndex
+              _bvlMaxResults
+              _bvlShowPreOrders
+              (Just AltJSON)
+              booksService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy BookshelvesVolumesListResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Books/CloudLoading/AddBook.hs b/gen/Network/Google/Resource/Books/CloudLoading/AddBook.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Books/CloudLoading/AddBook.hs
@@ -0,0 +1,122 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.Books.CloudLoading.AddBook
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- -- |
+--
+-- /See:/ <https://developers.google.com/books/docs/v1/getting_started Books API Reference> for @books.cloudloading.addBook@.
+module Network.Google.Resource.Books.CloudLoading.AddBook
+    (
+    -- * REST Resource
+      CloudLoadingAddBookResource
+
+    -- * Creating a Request
+    , cloudLoadingAddBook
+    , CloudLoadingAddBook
+
+    -- * Request Lenses
+    , clabMimeType
+    , clabUploadClientToken
+    , clabName
+    , clabDriveDocumentId
+    ) where
+
+import           Network.Google.Books.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @books.cloudloading.addBook@ method which the
+-- 'CloudLoadingAddBook' request conforms to.
+type CloudLoadingAddBookResource =
+     "books" :>
+       "v1" :>
+         "cloudloading" :>
+           "addBook" :>
+             QueryParam "mime_type" Text :>
+               QueryParam "upload_client_token" Text :>
+                 QueryParam "name" Text :>
+                   QueryParam "drive_document_id" Text :>
+                     QueryParam "alt" AltJSON :>
+                       Post '[JSON] BooksCloudLoadingResource
+
+-- |
+--
+-- /See:/ 'cloudLoadingAddBook' smart constructor.
+data CloudLoadingAddBook = CloudLoadingAddBook
+    { _clabMimeType          :: !(Maybe Text)
+    , _clabUploadClientToken :: !(Maybe Text)
+    , _clabName              :: !(Maybe Text)
+    , _clabDriveDocumentId   :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CloudLoadingAddBook' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'clabMimeType'
+--
+-- * 'clabUploadClientToken'
+--
+-- * 'clabName'
+--
+-- * 'clabDriveDocumentId'
+cloudLoadingAddBook
+    :: CloudLoadingAddBook
+cloudLoadingAddBook =
+    CloudLoadingAddBook
+    { _clabMimeType = Nothing
+    , _clabUploadClientToken = Nothing
+    , _clabName = Nothing
+    , _clabDriveDocumentId = Nothing
+    }
+
+-- | The document MIME type. It can be set only if the drive_document_id is
+-- set.
+clabMimeType :: Lens' CloudLoadingAddBook (Maybe Text)
+clabMimeType
+  = lens _clabMimeType (\ s a -> s{_clabMimeType = a})
+
+clabUploadClientToken :: Lens' CloudLoadingAddBook (Maybe Text)
+clabUploadClientToken
+  = lens _clabUploadClientToken
+      (\ s a -> s{_clabUploadClientToken = a})
+
+-- | The document name. It can be set only if the drive_document_id is set.
+clabName :: Lens' CloudLoadingAddBook (Maybe Text)
+clabName = lens _clabName (\ s a -> s{_clabName = a})
+
+-- | A drive document id. The upload_client_token must not be set.
+clabDriveDocumentId :: Lens' CloudLoadingAddBook (Maybe Text)
+clabDriveDocumentId
+  = lens _clabDriveDocumentId
+      (\ s a -> s{_clabDriveDocumentId = a})
+
+instance GoogleRequest CloudLoadingAddBook where
+        type Rs CloudLoadingAddBook =
+             BooksCloudLoadingResource
+        requestClient CloudLoadingAddBook{..}
+          = go _clabMimeType _clabUploadClientToken _clabName
+              _clabDriveDocumentId
+              (Just AltJSON)
+              booksService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy CloudLoadingAddBookResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Books/CloudLoading/DeleteBook.hs b/gen/Network/Google/Resource/Books/CloudLoading/DeleteBook.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Books/CloudLoading/DeleteBook.hs
@@ -0,0 +1,84 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.Books.CloudLoading.DeleteBook
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Remove the book and its contents
+--
+-- /See:/ <https://developers.google.com/books/docs/v1/getting_started Books API Reference> for @books.cloudloading.deleteBook@.
+module Network.Google.Resource.Books.CloudLoading.DeleteBook
+    (
+    -- * REST Resource
+      CloudLoadingDeleteBookResource
+
+    -- * Creating a Request
+    , cloudLoadingDeleteBook
+    , CloudLoadingDeleteBook
+
+    -- * Request Lenses
+    , cldbVolumeId
+    ) where
+
+import           Network.Google.Books.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @books.cloudloading.deleteBook@ method which the
+-- 'CloudLoadingDeleteBook' request conforms to.
+type CloudLoadingDeleteBookResource =
+     "books" :>
+       "v1" :>
+         "cloudloading" :>
+           "deleteBook" :>
+             QueryParam "volumeId" Text :>
+               QueryParam "alt" AltJSON :> Post '[JSON] ()
+
+-- | Remove the book and its contents
+--
+-- /See:/ 'cloudLoadingDeleteBook' smart constructor.
+newtype CloudLoadingDeleteBook = CloudLoadingDeleteBook
+    { _cldbVolumeId :: Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CloudLoadingDeleteBook' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cldbVolumeId'
+cloudLoadingDeleteBook
+    :: Text -- ^ 'cldbVolumeId'
+    -> CloudLoadingDeleteBook
+cloudLoadingDeleteBook pCldbVolumeId_ =
+    CloudLoadingDeleteBook
+    { _cldbVolumeId = pCldbVolumeId_
+    }
+
+-- | The id of the book to be removed.
+cldbVolumeId :: Lens' CloudLoadingDeleteBook Text
+cldbVolumeId
+  = lens _cldbVolumeId (\ s a -> s{_cldbVolumeId = a})
+
+instance GoogleRequest CloudLoadingDeleteBook where
+        type Rs CloudLoadingDeleteBook = ()
+        requestClient CloudLoadingDeleteBook{..}
+          = go (Just _cldbVolumeId) (Just AltJSON) booksService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy CloudLoadingDeleteBookResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Books/CloudLoading/UpdateBook.hs b/gen/Network/Google/Resource/Books/CloudLoading/UpdateBook.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Books/CloudLoading/UpdateBook.hs
@@ -0,0 +1,86 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.Books.CloudLoading.UpdateBook
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- -- |
+--
+-- /See:/ <https://developers.google.com/books/docs/v1/getting_started Books API Reference> for @books.cloudloading.updateBook@.
+module Network.Google.Resource.Books.CloudLoading.UpdateBook
+    (
+    -- * REST Resource
+      CloudLoadingUpdateBookResource
+
+    -- * Creating a Request
+    , cloudLoadingUpdateBook
+    , CloudLoadingUpdateBook
+
+    -- * Request Lenses
+    , clubPayload
+    ) where
+
+import           Network.Google.Books.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @books.cloudloading.updateBook@ method which the
+-- 'CloudLoadingUpdateBook' request conforms to.
+type CloudLoadingUpdateBookResource =
+     "books" :>
+       "v1" :>
+         "cloudloading" :>
+           "updateBook" :>
+             QueryParam "alt" AltJSON :>
+               ReqBody '[JSON] BooksCloudLoadingResource :>
+                 Post '[JSON] BooksCloudLoadingResource
+
+-- |
+--
+-- /See:/ 'cloudLoadingUpdateBook' smart constructor.
+newtype CloudLoadingUpdateBook = CloudLoadingUpdateBook
+    { _clubPayload :: BooksCloudLoadingResource
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CloudLoadingUpdateBook' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'clubPayload'
+cloudLoadingUpdateBook
+    :: BooksCloudLoadingResource -- ^ 'clubPayload'
+    -> CloudLoadingUpdateBook
+cloudLoadingUpdateBook pClubPayload_ =
+    CloudLoadingUpdateBook
+    { _clubPayload = pClubPayload_
+    }
+
+-- | Multipart request metadata.
+clubPayload :: Lens' CloudLoadingUpdateBook BooksCloudLoadingResource
+clubPayload
+  = lens _clubPayload (\ s a -> s{_clubPayload = a})
+
+instance GoogleRequest CloudLoadingUpdateBook where
+        type Rs CloudLoadingUpdateBook =
+             BooksCloudLoadingResource
+        requestClient CloudLoadingUpdateBook{..}
+          = go (Just AltJSON) _clubPayload booksService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy CloudLoadingUpdateBookResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Books/Dictionary/ListOfflineMetadata.hs b/gen/Network/Google/Resource/Books/Dictionary/ListOfflineMetadata.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Books/Dictionary/ListOfflineMetadata.hs
@@ -0,0 +1,86 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.Books.Dictionary.ListOfflineMetadata
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns a list of offline dictionary metadata available
+--
+-- /See:/ <https://developers.google.com/books/docs/v1/getting_started Books API Reference> for @books.dictionary.listOfflineMetadata@.
+module Network.Google.Resource.Books.Dictionary.ListOfflineMetadata
+    (
+    -- * REST Resource
+      DictionaryListOfflineMetadataResource
+
+    -- * Creating a Request
+    , dictionaryListOfflineMetadata
+    , DictionaryListOfflineMetadata
+
+    -- * Request Lenses
+    , dlomCpksver
+    ) where
+
+import           Network.Google.Books.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @books.dictionary.listOfflineMetadata@ method which the
+-- 'DictionaryListOfflineMetadata' request conforms to.
+type DictionaryListOfflineMetadataResource =
+     "books" :>
+       "v1" :>
+         "dictionary" :>
+           "listOfflineMetadata" :>
+             QueryParam "cpksver" Text :>
+               QueryParam "alt" AltJSON :> Get '[JSON] Metadata
+
+-- | Returns a list of offline dictionary metadata available
+--
+-- /See:/ 'dictionaryListOfflineMetadata' smart constructor.
+newtype DictionaryListOfflineMetadata = DictionaryListOfflineMetadata
+    { _dlomCpksver :: Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DictionaryListOfflineMetadata' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dlomCpksver'
+dictionaryListOfflineMetadata
+    :: Text -- ^ 'dlomCpksver'
+    -> DictionaryListOfflineMetadata
+dictionaryListOfflineMetadata pDlomCpksver_ =
+    DictionaryListOfflineMetadata
+    { _dlomCpksver = pDlomCpksver_
+    }
+
+-- | The device\/version ID from which to request the data.
+dlomCpksver :: Lens' DictionaryListOfflineMetadata Text
+dlomCpksver
+  = lens _dlomCpksver (\ s a -> s{_dlomCpksver = a})
+
+instance GoogleRequest DictionaryListOfflineMetadata
+         where
+        type Rs DictionaryListOfflineMetadata = Metadata
+        requestClient DictionaryListOfflineMetadata{..}
+          = go (Just _dlomCpksver) (Just AltJSON) booksService
+          where go
+                  = buildClient
+                      (Proxy ::
+                         Proxy DictionaryListOfflineMetadataResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Books/Layers/AnnotationData/Get.hs b/gen/Network/Google/Resource/Books/Layers/AnnotationData/Get.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Books/Layers/AnnotationData/Get.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.Books.Layers.AnnotationData.Get
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Gets the annotation data.
+--
+-- /See:/ <https://developers.google.com/books/docs/v1/getting_started Books API Reference> for @books.layers.annotationData.get@.
+module Network.Google.Resource.Books.Layers.AnnotationData.Get
+    (
+    -- * REST Resource
+      LayersAnnotationDataGetResource
+
+    -- * Creating a Request
+    , layersAnnotationDataGet
+    , LayersAnnotationDataGet
+
+    -- * Request Lenses
+    , ladgW
+    , ladgScale
+    , ladgLocale
+    , ladgContentVersion
+    , ladgAllowWebDefinitions
+    , ladgAnnotationDataId
+    , ladgVolumeId
+    , ladgSource
+    , ladgH
+    , ladgLayerId
+    ) where
+
+import           Network.Google.Books.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @books.layers.annotationData.get@ method which the
+-- 'LayersAnnotationDataGet' request conforms to.
+type LayersAnnotationDataGetResource =
+     "books" :>
+       "v1" :>
+         "volumes" :>
+           Capture "volumeId" Text :>
+             "layers" :>
+               Capture "layerId" Text :>
+                 "data" :>
+                   Capture "annotationDataId" Text :>
+                     QueryParam "contentVersion" Text :>
+                       QueryParam "w" (Textual Int32) :>
+                         QueryParam "scale" (Textual Int32) :>
+                           QueryParam "locale" Text :>
+                             QueryParam "allowWebDefinitions" Bool :>
+                               QueryParam "source" Text :>
+                                 QueryParam "h" (Textual Int32) :>
+                                   QueryParam "alt" AltJSON :>
+                                     Get '[JSON] AnnotationData
+
+-- | Gets the annotation data.
+--
+-- /See:/ 'layersAnnotationDataGet' smart constructor.
+data LayersAnnotationDataGet = LayersAnnotationDataGet
+    { _ladgW                   :: !(Maybe (Textual Int32))
+    , _ladgScale               :: !(Maybe (Textual Int32))
+    , _ladgLocale              :: !(Maybe Text)
+    , _ladgContentVersion      :: !Text
+    , _ladgAllowWebDefinitions :: !(Maybe Bool)
+    , _ladgAnnotationDataId    :: !Text
+    , _ladgVolumeId            :: !Text
+    , _ladgSource              :: !(Maybe Text)
+    , _ladgH                   :: !(Maybe (Textual Int32))
+    , _ladgLayerId             :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'LayersAnnotationDataGet' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ladgW'
+--
+-- * 'ladgScale'
+--
+-- * 'ladgLocale'
+--
+-- * 'ladgContentVersion'
+--
+-- * 'ladgAllowWebDefinitions'
+--
+-- * 'ladgAnnotationDataId'
+--
+-- * 'ladgVolumeId'
+--
+-- * 'ladgSource'
+--
+-- * 'ladgH'
+--
+-- * 'ladgLayerId'
+layersAnnotationDataGet
+    :: Text -- ^ 'ladgContentVersion'
+    -> Text -- ^ 'ladgAnnotationDataId'
+    -> Text -- ^ 'ladgVolumeId'
+    -> Text -- ^ 'ladgLayerId'
+    -> LayersAnnotationDataGet
+layersAnnotationDataGet pLadgContentVersion_ pLadgAnnotationDataId_ pLadgVolumeId_ pLadgLayerId_ =
+    LayersAnnotationDataGet
+    { _ladgW = Nothing
+    , _ladgScale = Nothing
+    , _ladgLocale = Nothing
+    , _ladgContentVersion = pLadgContentVersion_
+    , _ladgAllowWebDefinitions = Nothing
+    , _ladgAnnotationDataId = pLadgAnnotationDataId_
+    , _ladgVolumeId = pLadgVolumeId_
+    , _ladgSource = Nothing
+    , _ladgH = Nothing
+    , _ladgLayerId = pLadgLayerId_
+    }
+
+-- | The requested pixel width for any images. If width is provided height
+-- must also be provided.
+ladgW :: Lens' LayersAnnotationDataGet (Maybe Int32)
+ladgW
+  = lens _ladgW (\ s a -> s{_ladgW = a}) .
+      mapping _Coerce
+
+-- | The requested scale for the image.
+ladgScale :: Lens' LayersAnnotationDataGet (Maybe Int32)
+ladgScale
+  = lens _ladgScale (\ s a -> s{_ladgScale = a}) .
+      mapping _Coerce
+
+-- | The locale information for the data. ISO-639-1 language and ISO-3166-1
+-- country code. Ex: \'en_US\'.
+ladgLocale :: Lens' LayersAnnotationDataGet (Maybe Text)
+ladgLocale
+  = lens _ladgLocale (\ s a -> s{_ladgLocale = a})
+
+-- | The content version for the volume you are trying to retrieve.
+ladgContentVersion :: Lens' LayersAnnotationDataGet Text
+ladgContentVersion
+  = lens _ladgContentVersion
+      (\ s a -> s{_ladgContentVersion = a})
+
+-- | For the dictionary layer. Whether or not to allow web definitions.
+ladgAllowWebDefinitions :: Lens' LayersAnnotationDataGet (Maybe Bool)
+ladgAllowWebDefinitions
+  = lens _ladgAllowWebDefinitions
+      (\ s a -> s{_ladgAllowWebDefinitions = a})
+
+-- | The ID of the annotation data to retrieve.
+ladgAnnotationDataId :: Lens' LayersAnnotationDataGet Text
+ladgAnnotationDataId
+  = lens _ladgAnnotationDataId
+      (\ s a -> s{_ladgAnnotationDataId = a})
+
+-- | The volume to retrieve annotations for.
+ladgVolumeId :: Lens' LayersAnnotationDataGet Text
+ladgVolumeId
+  = lens _ladgVolumeId (\ s a -> s{_ladgVolumeId = a})
+
+-- | String to identify the originator of this request.
+ladgSource :: Lens' LayersAnnotationDataGet (Maybe Text)
+ladgSource
+  = lens _ladgSource (\ s a -> s{_ladgSource = a})
+
+-- | The requested pixel height for any images. If height is provided width
+-- must also be provided.
+ladgH :: Lens' LayersAnnotationDataGet (Maybe Int32)
+ladgH
+  = lens _ladgH (\ s a -> s{_ladgH = a}) .
+      mapping _Coerce
+
+-- | The ID for the layer to get the annotations.
+ladgLayerId :: Lens' LayersAnnotationDataGet Text
+ladgLayerId
+  = lens _ladgLayerId (\ s a -> s{_ladgLayerId = a})
+
+instance GoogleRequest LayersAnnotationDataGet where
+        type Rs LayersAnnotationDataGet = AnnotationData
+        requestClient LayersAnnotationDataGet{..}
+          = go _ladgVolumeId _ladgLayerId _ladgAnnotationDataId
+              (Just _ladgContentVersion)
+              _ladgW
+              _ladgScale
+              _ladgLocale
+              _ladgAllowWebDefinitions
+              _ladgSource
+              _ladgH
+              (Just AltJSON)
+              booksService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy LayersAnnotationDataGetResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Books/Layers/AnnotationData/List.hs b/gen/Network/Google/Resource/Books/Layers/AnnotationData/List.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Books/Layers/AnnotationData/List.hs
@@ -0,0 +1,252 @@
+{-# 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.Books.Layers.AnnotationData.List
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Gets the annotation data for a volume and layer.
+--
+-- /See:/ <https://developers.google.com/books/docs/v1/getting_started Books API Reference> for @books.layers.annotationData.list@.
+module Network.Google.Resource.Books.Layers.AnnotationData.List
+    (
+    -- * REST Resource
+      LayersAnnotationDataListResource
+
+    -- * Creating a Request
+    , layersAnnotationDataList
+    , LayersAnnotationDataList
+
+    -- * Request Lenses
+    , ladlW
+    , ladlScale
+    , ladlLocale
+    , ladlContentVersion
+    , ladlUpdatedMax
+    , ladlUpdatedMin
+    , ladlAnnotationDataId
+    , ladlVolumeId
+    , ladlSource
+    , ladlH
+    , ladlPageToken
+    , ladlLayerId
+    , ladlMaxResults
+    ) where
+
+import           Network.Google.Books.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @books.layers.annotationData.list@ method which the
+-- 'LayersAnnotationDataList' request conforms to.
+type LayersAnnotationDataListResource =
+     "books" :>
+       "v1" :>
+         "volumes" :>
+           Capture "volumeId" Text :>
+             "layers" :>
+               Capture "layerId" Text :>
+                 "data" :>
+                   QueryParam "contentVersion" Text :>
+                     QueryParam "w" (Textual Int32) :>
+                       QueryParam "scale" (Textual Int32) :>
+                         QueryParam "locale" Text :>
+                           QueryParam "updatedMax" Text :>
+                             QueryParam "updatedMin" Text :>
+                               QueryParams "annotationDataId" Text :>
+                                 QueryParam "source" Text :>
+                                   QueryParam "h" (Textual Int32) :>
+                                     QueryParam "pageToken" Text :>
+                                       QueryParam "maxResults" (Textual Word32)
+                                         :>
+                                         QueryParam "alt" AltJSON :>
+                                           Get '[JSON] AnnotationsData
+
+-- | Gets the annotation data for a volume and layer.
+--
+-- /See:/ 'layersAnnotationDataList' smart constructor.
+data LayersAnnotationDataList = LayersAnnotationDataList
+    { _ladlW                :: !(Maybe (Textual Int32))
+    , _ladlScale            :: !(Maybe (Textual Int32))
+    , _ladlLocale           :: !(Maybe Text)
+    , _ladlContentVersion   :: !Text
+    , _ladlUpdatedMax       :: !(Maybe Text)
+    , _ladlUpdatedMin       :: !(Maybe Text)
+    , _ladlAnnotationDataId :: !(Maybe [Text])
+    , _ladlVolumeId         :: !Text
+    , _ladlSource           :: !(Maybe Text)
+    , _ladlH                :: !(Maybe (Textual Int32))
+    , _ladlPageToken        :: !(Maybe Text)
+    , _ladlLayerId          :: !Text
+    , _ladlMaxResults       :: !(Maybe (Textual Word32))
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'LayersAnnotationDataList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ladlW'
+--
+-- * 'ladlScale'
+--
+-- * 'ladlLocale'
+--
+-- * 'ladlContentVersion'
+--
+-- * 'ladlUpdatedMax'
+--
+-- * 'ladlUpdatedMin'
+--
+-- * 'ladlAnnotationDataId'
+--
+-- * 'ladlVolumeId'
+--
+-- * 'ladlSource'
+--
+-- * 'ladlH'
+--
+-- * 'ladlPageToken'
+--
+-- * 'ladlLayerId'
+--
+-- * 'ladlMaxResults'
+layersAnnotationDataList
+    :: Text -- ^ 'ladlContentVersion'
+    -> Text -- ^ 'ladlVolumeId'
+    -> Text -- ^ 'ladlLayerId'
+    -> LayersAnnotationDataList
+layersAnnotationDataList pLadlContentVersion_ pLadlVolumeId_ pLadlLayerId_ =
+    LayersAnnotationDataList
+    { _ladlW = Nothing
+    , _ladlScale = Nothing
+    , _ladlLocale = Nothing
+    , _ladlContentVersion = pLadlContentVersion_
+    , _ladlUpdatedMax = Nothing
+    , _ladlUpdatedMin = Nothing
+    , _ladlAnnotationDataId = Nothing
+    , _ladlVolumeId = pLadlVolumeId_
+    , _ladlSource = Nothing
+    , _ladlH = Nothing
+    , _ladlPageToken = Nothing
+    , _ladlLayerId = pLadlLayerId_
+    , _ladlMaxResults = Nothing
+    }
+
+-- | The requested pixel width for any images. If width is provided height
+-- must also be provided.
+ladlW :: Lens' LayersAnnotationDataList (Maybe Int32)
+ladlW
+  = lens _ladlW (\ s a -> s{_ladlW = a}) .
+      mapping _Coerce
+
+-- | The requested scale for the image.
+ladlScale :: Lens' LayersAnnotationDataList (Maybe Int32)
+ladlScale
+  = lens _ladlScale (\ s a -> s{_ladlScale = a}) .
+      mapping _Coerce
+
+-- | The locale information for the data. ISO-639-1 language and ISO-3166-1
+-- country code. Ex: \'en_US\'.
+ladlLocale :: Lens' LayersAnnotationDataList (Maybe Text)
+ladlLocale
+  = lens _ladlLocale (\ s a -> s{_ladlLocale = a})
+
+-- | The content version for the requested volume.
+ladlContentVersion :: Lens' LayersAnnotationDataList Text
+ladlContentVersion
+  = lens _ladlContentVersion
+      (\ s a -> s{_ladlContentVersion = a})
+
+-- | RFC 3339 timestamp to restrict to items updated prior to this timestamp
+-- (exclusive).
+ladlUpdatedMax :: Lens' LayersAnnotationDataList (Maybe Text)
+ladlUpdatedMax
+  = lens _ladlUpdatedMax
+      (\ s a -> s{_ladlUpdatedMax = a})
+
+-- | RFC 3339 timestamp to restrict to items updated since this timestamp
+-- (inclusive).
+ladlUpdatedMin :: Lens' LayersAnnotationDataList (Maybe Text)
+ladlUpdatedMin
+  = lens _ladlUpdatedMin
+      (\ s a -> s{_ladlUpdatedMin = a})
+
+-- | The list of Annotation Data Ids to retrieve. Pagination is ignored if
+-- this is set.
+ladlAnnotationDataId :: Lens' LayersAnnotationDataList [Text]
+ladlAnnotationDataId
+  = lens _ladlAnnotationDataId
+      (\ s a -> s{_ladlAnnotationDataId = a})
+      . _Default
+      . _Coerce
+
+-- | The volume to retrieve annotation data for.
+ladlVolumeId :: Lens' LayersAnnotationDataList Text
+ladlVolumeId
+  = lens _ladlVolumeId (\ s a -> s{_ladlVolumeId = a})
+
+-- | String to identify the originator of this request.
+ladlSource :: Lens' LayersAnnotationDataList (Maybe Text)
+ladlSource
+  = lens _ladlSource (\ s a -> s{_ladlSource = a})
+
+-- | The requested pixel height for any images. If height is provided width
+-- must also be provided.
+ladlH :: Lens' LayersAnnotationDataList (Maybe Int32)
+ladlH
+  = lens _ladlH (\ s a -> s{_ladlH = a}) .
+      mapping _Coerce
+
+-- | The value of the nextToken from the previous page.
+ladlPageToken :: Lens' LayersAnnotationDataList (Maybe Text)
+ladlPageToken
+  = lens _ladlPageToken
+      (\ s a -> s{_ladlPageToken = a})
+
+-- | The ID for the layer to get the annotation data.
+ladlLayerId :: Lens' LayersAnnotationDataList Text
+ladlLayerId
+  = lens _ladlLayerId (\ s a -> s{_ladlLayerId = a})
+
+-- | Maximum number of results to return
+ladlMaxResults :: Lens' LayersAnnotationDataList (Maybe Word32)
+ladlMaxResults
+  = lens _ladlMaxResults
+      (\ s a -> s{_ladlMaxResults = a})
+      . mapping _Coerce
+
+instance GoogleRequest LayersAnnotationDataList where
+        type Rs LayersAnnotationDataList = AnnotationsData
+        requestClient LayersAnnotationDataList{..}
+          = go _ladlVolumeId _ladlLayerId
+              (Just _ladlContentVersion)
+              _ladlW
+              _ladlScale
+              _ladlLocale
+              _ladlUpdatedMax
+              _ladlUpdatedMin
+              (_ladlAnnotationDataId ^. _Default)
+              _ladlSource
+              _ladlH
+              _ladlPageToken
+              _ladlMaxResults
+              (Just AltJSON)
+              booksService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy LayersAnnotationDataListResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Books/Layers/Get.hs b/gen/Network/Google/Resource/Books/Layers/Get.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Books/Layers/Get.hs
@@ -0,0 +1,120 @@
+{-# 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.Books.Layers.Get
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Gets the layer summary for a volume.
+--
+-- /See:/ <https://developers.google.com/books/docs/v1/getting_started Books API Reference> for @books.layers.get@.
+module Network.Google.Resource.Books.Layers.Get
+    (
+    -- * REST Resource
+      LayersGetResource
+
+    -- * Creating a Request
+    , layersGet
+    , LayersGet
+
+    -- * Request Lenses
+    , lgContentVersion
+    , lgVolumeId
+    , lgSource
+    , lgSummaryId
+    ) where
+
+import           Network.Google.Books.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @books.layers.get@ method which the
+-- 'LayersGet' request conforms to.
+type LayersGetResource =
+     "books" :>
+       "v1" :>
+         "volumes" :>
+           Capture "volumeId" Text :>
+             "layersummary" :>
+               Capture "summaryId" Text :>
+                 QueryParam "contentVersion" Text :>
+                   QueryParam "source" Text :>
+                     QueryParam "alt" AltJSON :> Get '[JSON] Layersummary
+
+-- | Gets the layer summary for a volume.
+--
+-- /See:/ 'layersGet' smart constructor.
+data LayersGet = LayersGet
+    { _lgContentVersion :: !(Maybe Text)
+    , _lgVolumeId       :: !Text
+    , _lgSource         :: !(Maybe Text)
+    , _lgSummaryId      :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'LayersGet' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'lgContentVersion'
+--
+-- * 'lgVolumeId'
+--
+-- * 'lgSource'
+--
+-- * 'lgSummaryId'
+layersGet
+    :: Text -- ^ 'lgVolumeId'
+    -> Text -- ^ 'lgSummaryId'
+    -> LayersGet
+layersGet pLgVolumeId_ pLgSummaryId_ =
+    LayersGet
+    { _lgContentVersion = Nothing
+    , _lgVolumeId = pLgVolumeId_
+    , _lgSource = Nothing
+    , _lgSummaryId = pLgSummaryId_
+    }
+
+-- | The content version for the requested volume.
+lgContentVersion :: Lens' LayersGet (Maybe Text)
+lgContentVersion
+  = lens _lgContentVersion
+      (\ s a -> s{_lgContentVersion = a})
+
+-- | The volume to retrieve layers for.
+lgVolumeId :: Lens' LayersGet Text
+lgVolumeId
+  = lens _lgVolumeId (\ s a -> s{_lgVolumeId = a})
+
+-- | String to identify the originator of this request.
+lgSource :: Lens' LayersGet (Maybe Text)
+lgSource = lens _lgSource (\ s a -> s{_lgSource = a})
+
+-- | The ID for the layer to get the summary for.
+lgSummaryId :: Lens' LayersGet Text
+lgSummaryId
+  = lens _lgSummaryId (\ s a -> s{_lgSummaryId = a})
+
+instance GoogleRequest LayersGet where
+        type Rs LayersGet = Layersummary
+        requestClient LayersGet{..}
+          = go _lgVolumeId _lgSummaryId _lgContentVersion
+              _lgSource
+              (Just AltJSON)
+              booksService
+          where go
+                  = buildClient (Proxy :: Proxy LayersGetResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Books/Layers/List.hs b/gen/Network/Google/Resource/Books/Layers/List.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Books/Layers/List.hs
@@ -0,0 +1,133 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.Books.Layers.List
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- List the layer summaries for a volume.
+--
+-- /See:/ <https://developers.google.com/books/docs/v1/getting_started Books API Reference> for @books.layers.list@.
+module Network.Google.Resource.Books.Layers.List
+    (
+    -- * REST Resource
+      LayersListResource
+
+    -- * Creating a Request
+    , layersList
+    , LayersList
+
+    -- * Request Lenses
+    , llContentVersion
+    , llVolumeId
+    , llSource
+    , llPageToken
+    , llMaxResults
+    ) where
+
+import           Network.Google.Books.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @books.layers.list@ method which the
+-- 'LayersList' request conforms to.
+type LayersListResource =
+     "books" :>
+       "v1" :>
+         "volumes" :>
+           Capture "volumeId" Text :>
+             "layersummary" :>
+               QueryParam "contentVersion" Text :>
+                 QueryParam "source" Text :>
+                   QueryParam "pageToken" Text :>
+                     QueryParam "maxResults" (Textual Word32) :>
+                       QueryParam "alt" AltJSON :>
+                         Get '[JSON] Layersummaries
+
+-- | List the layer summaries for a volume.
+--
+-- /See:/ 'layersList' smart constructor.
+data LayersList = LayersList
+    { _llContentVersion :: !(Maybe Text)
+    , _llVolumeId       :: !Text
+    , _llSource         :: !(Maybe Text)
+    , _llPageToken      :: !(Maybe Text)
+    , _llMaxResults     :: !(Maybe (Textual Word32))
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'LayersList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'llContentVersion'
+--
+-- * 'llVolumeId'
+--
+-- * 'llSource'
+--
+-- * 'llPageToken'
+--
+-- * 'llMaxResults'
+layersList
+    :: Text -- ^ 'llVolumeId'
+    -> LayersList
+layersList pLlVolumeId_ =
+    LayersList
+    { _llContentVersion = Nothing
+    , _llVolumeId = pLlVolumeId_
+    , _llSource = Nothing
+    , _llPageToken = Nothing
+    , _llMaxResults = Nothing
+    }
+
+-- | The content version for the requested volume.
+llContentVersion :: Lens' LayersList (Maybe Text)
+llContentVersion
+  = lens _llContentVersion
+      (\ s a -> s{_llContentVersion = a})
+
+-- | The volume to retrieve layers for.
+llVolumeId :: Lens' LayersList Text
+llVolumeId
+  = lens _llVolumeId (\ s a -> s{_llVolumeId = a})
+
+-- | String to identify the originator of this request.
+llSource :: Lens' LayersList (Maybe Text)
+llSource = lens _llSource (\ s a -> s{_llSource = a})
+
+-- | The value of the nextToken from the previous page.
+llPageToken :: Lens' LayersList (Maybe Text)
+llPageToken
+  = lens _llPageToken (\ s a -> s{_llPageToken = a})
+
+-- | Maximum number of results to return
+llMaxResults :: Lens' LayersList (Maybe Word32)
+llMaxResults
+  = lens _llMaxResults (\ s a -> s{_llMaxResults = a})
+      . mapping _Coerce
+
+instance GoogleRequest LayersList where
+        type Rs LayersList = Layersummaries
+        requestClient LayersList{..}
+          = go _llVolumeId _llContentVersion _llSource
+              _llPageToken
+              _llMaxResults
+              (Just AltJSON)
+              booksService
+          where go
+                  = buildClient (Proxy :: Proxy LayersListResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Books/Layers/VolumeAnnotations/Get.hs b/gen/Network/Google/Resource/Books/Layers/VolumeAnnotations/Get.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Books/Layers/VolumeAnnotations/Get.hs
@@ -0,0 +1,139 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.Books.Layers.VolumeAnnotations.Get
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Gets the volume annotation.
+--
+-- /See:/ <https://developers.google.com/books/docs/v1/getting_started Books API Reference> for @books.layers.volumeAnnotations.get@.
+module Network.Google.Resource.Books.Layers.VolumeAnnotations.Get
+    (
+    -- * REST Resource
+      LayersVolumeAnnotationsGetResource
+
+    -- * Creating a Request
+    , layersVolumeAnnotationsGet
+    , LayersVolumeAnnotationsGet
+
+    -- * Request Lenses
+    , lvagLocale
+    , lvagAnnotationId
+    , lvagVolumeId
+    , lvagSource
+    , lvagLayerId
+    ) where
+
+import           Network.Google.Books.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @books.layers.volumeAnnotations.get@ method which the
+-- 'LayersVolumeAnnotationsGet' request conforms to.
+type LayersVolumeAnnotationsGetResource =
+     "books" :>
+       "v1" :>
+         "volumes" :>
+           Capture "volumeId" Text :>
+             "layers" :>
+               Capture "layerId" Text :>
+                 "annotations" :>
+                   Capture "annotationId" Text :>
+                     QueryParam "locale" Text :>
+                       QueryParam "source" Text :>
+                         QueryParam "alt" AltJSON :>
+                           Get '[JSON] Volumeannotation
+
+-- | Gets the volume annotation.
+--
+-- /See:/ 'layersVolumeAnnotationsGet' smart constructor.
+data LayersVolumeAnnotationsGet = LayersVolumeAnnotationsGet
+    { _lvagLocale       :: !(Maybe Text)
+    , _lvagAnnotationId :: !Text
+    , _lvagVolumeId     :: !Text
+    , _lvagSource       :: !(Maybe Text)
+    , _lvagLayerId      :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'LayersVolumeAnnotationsGet' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'lvagLocale'
+--
+-- * 'lvagAnnotationId'
+--
+-- * 'lvagVolumeId'
+--
+-- * 'lvagSource'
+--
+-- * 'lvagLayerId'
+layersVolumeAnnotationsGet
+    :: Text -- ^ 'lvagAnnotationId'
+    -> Text -- ^ 'lvagVolumeId'
+    -> Text -- ^ 'lvagLayerId'
+    -> LayersVolumeAnnotationsGet
+layersVolumeAnnotationsGet pLvagAnnotationId_ pLvagVolumeId_ pLvagLayerId_ =
+    LayersVolumeAnnotationsGet
+    { _lvagLocale = Nothing
+    , _lvagAnnotationId = pLvagAnnotationId_
+    , _lvagVolumeId = pLvagVolumeId_
+    , _lvagSource = Nothing
+    , _lvagLayerId = pLvagLayerId_
+    }
+
+-- | The locale information for the data. ISO-639-1 language and ISO-3166-1
+-- country code. Ex: \'en_US\'.
+lvagLocale :: Lens' LayersVolumeAnnotationsGet (Maybe Text)
+lvagLocale
+  = lens _lvagLocale (\ s a -> s{_lvagLocale = a})
+
+-- | The ID of the volume annotation to retrieve.
+lvagAnnotationId :: Lens' LayersVolumeAnnotationsGet Text
+lvagAnnotationId
+  = lens _lvagAnnotationId
+      (\ s a -> s{_lvagAnnotationId = a})
+
+-- | The volume to retrieve annotations for.
+lvagVolumeId :: Lens' LayersVolumeAnnotationsGet Text
+lvagVolumeId
+  = lens _lvagVolumeId (\ s a -> s{_lvagVolumeId = a})
+
+-- | String to identify the originator of this request.
+lvagSource :: Lens' LayersVolumeAnnotationsGet (Maybe Text)
+lvagSource
+  = lens _lvagSource (\ s a -> s{_lvagSource = a})
+
+-- | The ID for the layer to get the annotations.
+lvagLayerId :: Lens' LayersVolumeAnnotationsGet Text
+lvagLayerId
+  = lens _lvagLayerId (\ s a -> s{_lvagLayerId = a})
+
+instance GoogleRequest LayersVolumeAnnotationsGet
+         where
+        type Rs LayersVolumeAnnotationsGet = Volumeannotation
+        requestClient LayersVolumeAnnotationsGet{..}
+          = go _lvagVolumeId _lvagLayerId _lvagAnnotationId
+              _lvagLocale
+              _lvagSource
+              (Just AltJSON)
+              booksService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy LayersVolumeAnnotationsGetResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Books/Layers/VolumeAnnotations/List.hs b/gen/Network/Google/Resource/Books/Layers/VolumeAnnotations/List.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Books/Layers/VolumeAnnotations/List.hs
@@ -0,0 +1,275 @@
+{-# 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.Books.Layers.VolumeAnnotations.List
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Gets the volume annotations for a volume and layer.
+--
+-- /See:/ <https://developers.google.com/books/docs/v1/getting_started Books API Reference> for @books.layers.volumeAnnotations.list@.
+module Network.Google.Resource.Books.Layers.VolumeAnnotations.List
+    (
+    -- * REST Resource
+      LayersVolumeAnnotationsListResource
+
+    -- * Creating a Request
+    , layersVolumeAnnotationsList
+    , LayersVolumeAnnotationsList
+
+    -- * Request Lenses
+    , lvalStartOffSet
+    , lvalLocale
+    , lvalContentVersion
+    , lvalShowDeleted
+    , lvalVolumeAnnotationsVersion
+    , lvalUpdatedMax
+    , lvalUpdatedMin
+    , lvalEndOffSet
+    , lvalVolumeId
+    , lvalSource
+    , lvalPageToken
+    , lvalEndPosition
+    , lvalLayerId
+    , lvalMaxResults
+    , lvalStartPosition
+    ) where
+
+import           Network.Google.Books.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @books.layers.volumeAnnotations.list@ method which the
+-- 'LayersVolumeAnnotationsList' request conforms to.
+type LayersVolumeAnnotationsListResource =
+     "books" :>
+       "v1" :>
+         "volumes" :>
+           Capture "volumeId" Text :>
+             "layers" :>
+               Capture "layerId" Text :>
+                 QueryParam "contentVersion" Text :>
+                   QueryParam "startOffset" Text :>
+                     QueryParam "locale" Text :>
+                       QueryParam "showDeleted" Bool :>
+                         QueryParam "volumeAnnotationsVersion" Text :>
+                           QueryParam "updatedMax" Text :>
+                             QueryParam "updatedMin" Text :>
+                               QueryParam "endOffset" Text :>
+                                 QueryParam "source" Text :>
+                                   QueryParam "pageToken" Text :>
+                                     QueryParam "endPosition" Text :>
+                                       QueryParam "maxResults" (Textual Word32)
+                                         :>
+                                         QueryParam "startPosition" Text :>
+                                           QueryParam "alt" AltJSON :>
+                                             Get '[JSON] Volumeannotations
+
+-- | Gets the volume annotations for a volume and layer.
+--
+-- /See:/ 'layersVolumeAnnotationsList' smart constructor.
+data LayersVolumeAnnotationsList = LayersVolumeAnnotationsList
+    { _lvalStartOffSet              :: !(Maybe Text)
+    , _lvalLocale                   :: !(Maybe Text)
+    , _lvalContentVersion           :: !Text
+    , _lvalShowDeleted              :: !(Maybe Bool)
+    , _lvalVolumeAnnotationsVersion :: !(Maybe Text)
+    , _lvalUpdatedMax               :: !(Maybe Text)
+    , _lvalUpdatedMin               :: !(Maybe Text)
+    , _lvalEndOffSet                :: !(Maybe Text)
+    , _lvalVolumeId                 :: !Text
+    , _lvalSource                   :: !(Maybe Text)
+    , _lvalPageToken                :: !(Maybe Text)
+    , _lvalEndPosition              :: !(Maybe Text)
+    , _lvalLayerId                  :: !Text
+    , _lvalMaxResults               :: !(Maybe (Textual Word32))
+    , _lvalStartPosition            :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'LayersVolumeAnnotationsList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'lvalStartOffSet'
+--
+-- * 'lvalLocale'
+--
+-- * 'lvalContentVersion'
+--
+-- * 'lvalShowDeleted'
+--
+-- * 'lvalVolumeAnnotationsVersion'
+--
+-- * 'lvalUpdatedMax'
+--
+-- * 'lvalUpdatedMin'
+--
+-- * 'lvalEndOffSet'
+--
+-- * 'lvalVolumeId'
+--
+-- * 'lvalSource'
+--
+-- * 'lvalPageToken'
+--
+-- * 'lvalEndPosition'
+--
+-- * 'lvalLayerId'
+--
+-- * 'lvalMaxResults'
+--
+-- * 'lvalStartPosition'
+layersVolumeAnnotationsList
+    :: Text -- ^ 'lvalContentVersion'
+    -> Text -- ^ 'lvalVolumeId'
+    -> Text -- ^ 'lvalLayerId'
+    -> LayersVolumeAnnotationsList
+layersVolumeAnnotationsList pLvalContentVersion_ pLvalVolumeId_ pLvalLayerId_ =
+    LayersVolumeAnnotationsList
+    { _lvalStartOffSet = Nothing
+    , _lvalLocale = Nothing
+    , _lvalContentVersion = pLvalContentVersion_
+    , _lvalShowDeleted = Nothing
+    , _lvalVolumeAnnotationsVersion = Nothing
+    , _lvalUpdatedMax = Nothing
+    , _lvalUpdatedMin = Nothing
+    , _lvalEndOffSet = Nothing
+    , _lvalVolumeId = pLvalVolumeId_
+    , _lvalSource = Nothing
+    , _lvalPageToken = Nothing
+    , _lvalEndPosition = Nothing
+    , _lvalLayerId = pLvalLayerId_
+    , _lvalMaxResults = Nothing
+    , _lvalStartPosition = Nothing
+    }
+
+-- | The start offset to start retrieving data from.
+lvalStartOffSet :: Lens' LayersVolumeAnnotationsList (Maybe Text)
+lvalStartOffSet
+  = lens _lvalStartOffSet
+      (\ s a -> s{_lvalStartOffSet = a})
+
+-- | The locale information for the data. ISO-639-1 language and ISO-3166-1
+-- country code. Ex: \'en_US\'.
+lvalLocale :: Lens' LayersVolumeAnnotationsList (Maybe Text)
+lvalLocale
+  = lens _lvalLocale (\ s a -> s{_lvalLocale = a})
+
+-- | The content version for the requested volume.
+lvalContentVersion :: Lens' LayersVolumeAnnotationsList Text
+lvalContentVersion
+  = lens _lvalContentVersion
+      (\ s a -> s{_lvalContentVersion = a})
+
+-- | Set to true to return deleted annotations. updatedMin must be in the
+-- request to use this. Defaults to false.
+lvalShowDeleted :: Lens' LayersVolumeAnnotationsList (Maybe Bool)
+lvalShowDeleted
+  = lens _lvalShowDeleted
+      (\ s a -> s{_lvalShowDeleted = a})
+
+-- | The version of the volume annotations that you are requesting.
+lvalVolumeAnnotationsVersion :: Lens' LayersVolumeAnnotationsList (Maybe Text)
+lvalVolumeAnnotationsVersion
+  = lens _lvalVolumeAnnotationsVersion
+      (\ s a -> s{_lvalVolumeAnnotationsVersion = a})
+
+-- | RFC 3339 timestamp to restrict to items updated prior to this timestamp
+-- (exclusive).
+lvalUpdatedMax :: Lens' LayersVolumeAnnotationsList (Maybe Text)
+lvalUpdatedMax
+  = lens _lvalUpdatedMax
+      (\ s a -> s{_lvalUpdatedMax = a})
+
+-- | RFC 3339 timestamp to restrict to items updated since this timestamp
+-- (inclusive).
+lvalUpdatedMin :: Lens' LayersVolumeAnnotationsList (Maybe Text)
+lvalUpdatedMin
+  = lens _lvalUpdatedMin
+      (\ s a -> s{_lvalUpdatedMin = a})
+
+-- | The end offset to end retrieving data from.
+lvalEndOffSet :: Lens' LayersVolumeAnnotationsList (Maybe Text)
+lvalEndOffSet
+  = lens _lvalEndOffSet
+      (\ s a -> s{_lvalEndOffSet = a})
+
+-- | The volume to retrieve annotations for.
+lvalVolumeId :: Lens' LayersVolumeAnnotationsList Text
+lvalVolumeId
+  = lens _lvalVolumeId (\ s a -> s{_lvalVolumeId = a})
+
+-- | String to identify the originator of this request.
+lvalSource :: Lens' LayersVolumeAnnotationsList (Maybe Text)
+lvalSource
+  = lens _lvalSource (\ s a -> s{_lvalSource = a})
+
+-- | The value of the nextToken from the previous page.
+lvalPageToken :: Lens' LayersVolumeAnnotationsList (Maybe Text)
+lvalPageToken
+  = lens _lvalPageToken
+      (\ s a -> s{_lvalPageToken = a})
+
+-- | The end position to end retrieving data from.
+lvalEndPosition :: Lens' LayersVolumeAnnotationsList (Maybe Text)
+lvalEndPosition
+  = lens _lvalEndPosition
+      (\ s a -> s{_lvalEndPosition = a})
+
+-- | The ID for the layer to get the annotations.
+lvalLayerId :: Lens' LayersVolumeAnnotationsList Text
+lvalLayerId
+  = lens _lvalLayerId (\ s a -> s{_lvalLayerId = a})
+
+-- | Maximum number of results to return
+lvalMaxResults :: Lens' LayersVolumeAnnotationsList (Maybe Word32)
+lvalMaxResults
+  = lens _lvalMaxResults
+      (\ s a -> s{_lvalMaxResults = a})
+      . mapping _Coerce
+
+-- | The start position to start retrieving data from.
+lvalStartPosition :: Lens' LayersVolumeAnnotationsList (Maybe Text)
+lvalStartPosition
+  = lens _lvalStartPosition
+      (\ s a -> s{_lvalStartPosition = a})
+
+instance GoogleRequest LayersVolumeAnnotationsList
+         where
+        type Rs LayersVolumeAnnotationsList =
+             Volumeannotations
+        requestClient LayersVolumeAnnotationsList{..}
+          = go _lvalVolumeId _lvalLayerId
+              (Just _lvalContentVersion)
+              _lvalStartOffSet
+              _lvalLocale
+              _lvalShowDeleted
+              _lvalVolumeAnnotationsVersion
+              _lvalUpdatedMax
+              _lvalUpdatedMin
+              _lvalEndOffSet
+              _lvalSource
+              _lvalPageToken
+              _lvalEndPosition
+              _lvalMaxResults
+              _lvalStartPosition
+              (Just AltJSON)
+              booksService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy LayersVolumeAnnotationsListResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Books/MyConfig/GetUserSettings.hs b/gen/Network/Google/Resource/Books/MyConfig/GetUserSettings.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Books/MyConfig/GetUserSettings.hs
@@ -0,0 +1,69 @@
+{-# 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.Books.MyConfig.GetUserSettings
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Gets the current settings for the user.
+--
+-- /See:/ <https://developers.google.com/books/docs/v1/getting_started Books API Reference> for @books.myconfig.getUserSettings@.
+module Network.Google.Resource.Books.MyConfig.GetUserSettings
+    (
+    -- * REST Resource
+      MyConfigGetUserSettingsResource
+
+    -- * Creating a Request
+    , myConfigGetUserSettings
+    , MyConfigGetUserSettings
+
+    ) where
+
+import           Network.Google.Books.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @books.myconfig.getUserSettings@ method which the
+-- 'MyConfigGetUserSettings' request conforms to.
+type MyConfigGetUserSettingsResource =
+     "books" :>
+       "v1" :>
+         "myconfig" :>
+           "getUserSettings" :>
+             QueryParam "alt" AltJSON :> Get '[JSON] UserSettings
+
+-- | Gets the current settings for the user.
+--
+-- /See:/ 'myConfigGetUserSettings' smart constructor.
+data MyConfigGetUserSettings =
+    MyConfigGetUserSettings
+    deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'MyConfigGetUserSettings' with the minimum fields required to make a request.
+--
+myConfigGetUserSettings
+    :: MyConfigGetUserSettings
+myConfigGetUserSettings = MyConfigGetUserSettings
+
+instance GoogleRequest MyConfigGetUserSettings where
+        type Rs MyConfigGetUserSettings = UserSettings
+        requestClient MyConfigGetUserSettings{}
+          = go (Just AltJSON) booksService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy MyConfigGetUserSettingsResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Books/MyConfig/ReleaseDownloadAccess.hs b/gen/Network/Google/Resource/Books/MyConfig/ReleaseDownloadAccess.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Books/MyConfig/ReleaseDownloadAccess.hs
@@ -0,0 +1,128 @@
+{-# 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.Books.MyConfig.ReleaseDownloadAccess
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Release downloaded content access restriction.
+--
+-- /See:/ <https://developers.google.com/books/docs/v1/getting_started Books API Reference> for @books.myconfig.releaseDownloadAccess@.
+module Network.Google.Resource.Books.MyConfig.ReleaseDownloadAccess
+    (
+    -- * REST Resource
+      MyConfigReleaseDownloadAccessResource
+
+    -- * Creating a Request
+    , myConfigReleaseDownloadAccess
+    , MyConfigReleaseDownloadAccess
+
+    -- * Request Lenses
+    , mcrdaCpksver
+    , mcrdaLocale
+    , mcrdaVolumeIds
+    , mcrdaSource
+    ) where
+
+import           Network.Google.Books.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @books.myconfig.releaseDownloadAccess@ method which the
+-- 'MyConfigReleaseDownloadAccess' request conforms to.
+type MyConfigReleaseDownloadAccessResource =
+     "books" :>
+       "v1" :>
+         "myconfig" :>
+           "releaseDownloadAccess" :>
+             QueryParams "volumeIds" Text :>
+               QueryParam "cpksver" Text :>
+                 QueryParam "locale" Text :>
+                   QueryParam "source" Text :>
+                     QueryParam "alt" AltJSON :>
+                       Post '[JSON] DownloadAccesses
+
+-- | Release downloaded content access restriction.
+--
+-- /See:/ 'myConfigReleaseDownloadAccess' smart constructor.
+data MyConfigReleaseDownloadAccess = MyConfigReleaseDownloadAccess
+    { _mcrdaCpksver   :: !Text
+    , _mcrdaLocale    :: !(Maybe Text)
+    , _mcrdaVolumeIds :: ![Text]
+    , _mcrdaSource    :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'MyConfigReleaseDownloadAccess' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'mcrdaCpksver'
+--
+-- * 'mcrdaLocale'
+--
+-- * 'mcrdaVolumeIds'
+--
+-- * 'mcrdaSource'
+myConfigReleaseDownloadAccess
+    :: Text -- ^ 'mcrdaCpksver'
+    -> [Text] -- ^ 'mcrdaVolumeIds'
+    -> MyConfigReleaseDownloadAccess
+myConfigReleaseDownloadAccess pMcrdaCpksver_ pMcrdaVolumeIds_ =
+    MyConfigReleaseDownloadAccess
+    { _mcrdaCpksver = pMcrdaCpksver_
+    , _mcrdaLocale = Nothing
+    , _mcrdaVolumeIds = _Coerce # pMcrdaVolumeIds_
+    , _mcrdaSource = Nothing
+    }
+
+-- | The device\/version ID from which to release the restriction.
+mcrdaCpksver :: Lens' MyConfigReleaseDownloadAccess Text
+mcrdaCpksver
+  = lens _mcrdaCpksver (\ s a -> s{_mcrdaCpksver = a})
+
+-- | ISO-639-1, ISO-3166-1 codes for message localization, i.e. en_US.
+mcrdaLocale :: Lens' MyConfigReleaseDownloadAccess (Maybe Text)
+mcrdaLocale
+  = lens _mcrdaLocale (\ s a -> s{_mcrdaLocale = a})
+
+-- | The volume(s) to release restrictions for.
+mcrdaVolumeIds :: Lens' MyConfigReleaseDownloadAccess [Text]
+mcrdaVolumeIds
+  = lens _mcrdaVolumeIds
+      (\ s a -> s{_mcrdaVolumeIds = a})
+      . _Coerce
+
+-- | String to identify the originator of this request.
+mcrdaSource :: Lens' MyConfigReleaseDownloadAccess (Maybe Text)
+mcrdaSource
+  = lens _mcrdaSource (\ s a -> s{_mcrdaSource = a})
+
+instance GoogleRequest MyConfigReleaseDownloadAccess
+         where
+        type Rs MyConfigReleaseDownloadAccess =
+             DownloadAccesses
+        requestClient MyConfigReleaseDownloadAccess{..}
+          = go _mcrdaVolumeIds (Just _mcrdaCpksver)
+              _mcrdaLocale
+              _mcrdaSource
+              (Just AltJSON)
+              booksService
+          where go
+                  = buildClient
+                      (Proxy ::
+                         Proxy MyConfigReleaseDownloadAccessResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Books/MyConfig/RequestAccess.hs b/gen/Network/Google/Resource/Books/MyConfig/RequestAccess.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Books/MyConfig/RequestAccess.hs
@@ -0,0 +1,153 @@
+{-# 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.Books.MyConfig.RequestAccess
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Request concurrent and download access restrictions.
+--
+-- /See:/ <https://developers.google.com/books/docs/v1/getting_started Books API Reference> for @books.myconfig.requestAccess@.
+module Network.Google.Resource.Books.MyConfig.RequestAccess
+    (
+    -- * REST Resource
+      MyConfigRequestAccessResource
+
+    -- * Creating a Request
+    , myConfigRequestAccess
+    , MyConfigRequestAccess
+
+    -- * Request Lenses
+    , mcraCpksver
+    , mcraLocale
+    , mcraLicenseTypes
+    , mcraVolumeId
+    , mcraSource
+    , mcraNonce
+    ) where
+
+import           Network.Google.Books.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @books.myconfig.requestAccess@ method which the
+-- 'MyConfigRequestAccess' request conforms to.
+type MyConfigRequestAccessResource =
+     "books" :>
+       "v1" :>
+         "myconfig" :>
+           "requestAccess" :>
+             QueryParam "source" Text :>
+               QueryParam "volumeId" Text :>
+                 QueryParam "nonce" Text :>
+                   QueryParam "cpksver" Text :>
+                     QueryParam "locale" Text :>
+                       QueryParam "licenseTypes"
+                         MyConfigRequestAccessLicenseTypes
+                         :>
+                         QueryParam "alt" AltJSON :>
+                           Post '[JSON] RequestAccess
+
+-- | Request concurrent and download access restrictions.
+--
+-- /See:/ 'myConfigRequestAccess' smart constructor.
+data MyConfigRequestAccess = MyConfigRequestAccess
+    { _mcraCpksver      :: !Text
+    , _mcraLocale       :: !(Maybe Text)
+    , _mcraLicenseTypes :: !(Maybe MyConfigRequestAccessLicenseTypes)
+    , _mcraVolumeId     :: !Text
+    , _mcraSource       :: !Text
+    , _mcraNonce        :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'MyConfigRequestAccess' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'mcraCpksver'
+--
+-- * 'mcraLocale'
+--
+-- * 'mcraLicenseTypes'
+--
+-- * 'mcraVolumeId'
+--
+-- * 'mcraSource'
+--
+-- * 'mcraNonce'
+myConfigRequestAccess
+    :: Text -- ^ 'mcraCpksver'
+    -> Text -- ^ 'mcraVolumeId'
+    -> Text -- ^ 'mcraSource'
+    -> Text -- ^ 'mcraNonce'
+    -> MyConfigRequestAccess
+myConfigRequestAccess pMcraCpksver_ pMcraVolumeId_ pMcraSource_ pMcraNonce_ =
+    MyConfigRequestAccess
+    { _mcraCpksver = pMcraCpksver_
+    , _mcraLocale = Nothing
+    , _mcraLicenseTypes = Nothing
+    , _mcraVolumeId = pMcraVolumeId_
+    , _mcraSource = pMcraSource_
+    , _mcraNonce = pMcraNonce_
+    }
+
+-- | The device\/version ID from which to request the restrictions.
+mcraCpksver :: Lens' MyConfigRequestAccess Text
+mcraCpksver
+  = lens _mcraCpksver (\ s a -> s{_mcraCpksver = a})
+
+-- | ISO-639-1, ISO-3166-1 codes for message localization, i.e. en_US.
+mcraLocale :: Lens' MyConfigRequestAccess (Maybe Text)
+mcraLocale
+  = lens _mcraLocale (\ s a -> s{_mcraLocale = a})
+
+-- | The type of access license to request. If not specified, the default is
+-- BOTH.
+mcraLicenseTypes :: Lens' MyConfigRequestAccess (Maybe MyConfigRequestAccessLicenseTypes)
+mcraLicenseTypes
+  = lens _mcraLicenseTypes
+      (\ s a -> s{_mcraLicenseTypes = a})
+
+-- | The volume to request concurrent\/download restrictions for.
+mcraVolumeId :: Lens' MyConfigRequestAccess Text
+mcraVolumeId
+  = lens _mcraVolumeId (\ s a -> s{_mcraVolumeId = a})
+
+-- | String to identify the originator of this request.
+mcraSource :: Lens' MyConfigRequestAccess Text
+mcraSource
+  = lens _mcraSource (\ s a -> s{_mcraSource = a})
+
+-- | The client nonce value.
+mcraNonce :: Lens' MyConfigRequestAccess Text
+mcraNonce
+  = lens _mcraNonce (\ s a -> s{_mcraNonce = a})
+
+instance GoogleRequest MyConfigRequestAccess where
+        type Rs MyConfigRequestAccess = RequestAccess
+        requestClient MyConfigRequestAccess{..}
+          = go (Just _mcraSource) (Just _mcraVolumeId)
+              (Just _mcraNonce)
+              (Just _mcraCpksver)
+              _mcraLocale
+              _mcraLicenseTypes
+              (Just AltJSON)
+              booksService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy MyConfigRequestAccessResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Books/MyConfig/SyncVolumeLicenses.hs b/gen/Network/Google/Resource/Books/MyConfig/SyncVolumeLicenses.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Books/MyConfig/SyncVolumeLicenses.hs
@@ -0,0 +1,171 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.Books.MyConfig.SyncVolumeLicenses
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Request downloaded content access for specified volumes on the My eBooks
+-- shelf.
+--
+-- /See:/ <https://developers.google.com/books/docs/v1/getting_started Books API Reference> for @books.myconfig.syncVolumeLicenses@.
+module Network.Google.Resource.Books.MyConfig.SyncVolumeLicenses
+    (
+    -- * REST Resource
+      MyConfigSyncVolumeLicensesResource
+
+    -- * Creating a Request
+    , myConfigSyncVolumeLicenses
+    , MyConfigSyncVolumeLicenses
+
+    -- * Request Lenses
+    , mcsvlCpksver
+    , mcsvlLocale
+    , mcsvlVolumeIds
+    , mcsvlFeatures
+    , mcsvlSource
+    , mcsvlShowPreOrders
+    , mcsvlNonce
+    ) where
+
+import           Network.Google.Books.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @books.myconfig.syncVolumeLicenses@ method which the
+-- 'MyConfigSyncVolumeLicenses' request conforms to.
+type MyConfigSyncVolumeLicensesResource =
+     "books" :>
+       "v1" :>
+         "myconfig" :>
+           "syncVolumeLicenses" :>
+             QueryParam "source" Text :>
+               QueryParam "nonce" Text :>
+                 QueryParam "cpksver" Text :>
+                   QueryParam "locale" Text :>
+                     QueryParams "volumeIds" Text :>
+                       QueryParams "features"
+                         MyConfigSyncVolumeLicensesFeatures
+                         :>
+                         QueryParam "showPreorders" Bool :>
+                           QueryParam "alt" AltJSON :> Post '[JSON] Volumes
+
+-- | Request downloaded content access for specified volumes on the My eBooks
+-- shelf.
+--
+-- /See:/ 'myConfigSyncVolumeLicenses' smart constructor.
+data MyConfigSyncVolumeLicenses = MyConfigSyncVolumeLicenses
+    { _mcsvlCpksver       :: !Text
+    , _mcsvlLocale        :: !(Maybe Text)
+    , _mcsvlVolumeIds     :: !(Maybe [Text])
+    , _mcsvlFeatures      :: !(Maybe [MyConfigSyncVolumeLicensesFeatures])
+    , _mcsvlSource        :: !Text
+    , _mcsvlShowPreOrders :: !(Maybe Bool)
+    , _mcsvlNonce         :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'MyConfigSyncVolumeLicenses' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'mcsvlCpksver'
+--
+-- * 'mcsvlLocale'
+--
+-- * 'mcsvlVolumeIds'
+--
+-- * 'mcsvlFeatures'
+--
+-- * 'mcsvlSource'
+--
+-- * 'mcsvlShowPreOrders'
+--
+-- * 'mcsvlNonce'
+myConfigSyncVolumeLicenses
+    :: Text -- ^ 'mcsvlCpksver'
+    -> Text -- ^ 'mcsvlSource'
+    -> Text -- ^ 'mcsvlNonce'
+    -> MyConfigSyncVolumeLicenses
+myConfigSyncVolumeLicenses pMcsvlCpksver_ pMcsvlSource_ pMcsvlNonce_ =
+    MyConfigSyncVolumeLicenses
+    { _mcsvlCpksver = pMcsvlCpksver_
+    , _mcsvlLocale = Nothing
+    , _mcsvlVolumeIds = Nothing
+    , _mcsvlFeatures = Nothing
+    , _mcsvlSource = pMcsvlSource_
+    , _mcsvlShowPreOrders = Nothing
+    , _mcsvlNonce = pMcsvlNonce_
+    }
+
+-- | The device\/version ID from which to release the restriction.
+mcsvlCpksver :: Lens' MyConfigSyncVolumeLicenses Text
+mcsvlCpksver
+  = lens _mcsvlCpksver (\ s a -> s{_mcsvlCpksver = a})
+
+-- | ISO-639-1, ISO-3166-1 codes for message localization, i.e. en_US.
+mcsvlLocale :: Lens' MyConfigSyncVolumeLicenses (Maybe Text)
+mcsvlLocale
+  = lens _mcsvlLocale (\ s a -> s{_mcsvlLocale = a})
+
+-- | The volume(s) to request download restrictions for.
+mcsvlVolumeIds :: Lens' MyConfigSyncVolumeLicenses [Text]
+mcsvlVolumeIds
+  = lens _mcsvlVolumeIds
+      (\ s a -> s{_mcsvlVolumeIds = a})
+      . _Default
+      . _Coerce
+
+-- | List of features supported by the client, i.e., \'RENTALS\'
+mcsvlFeatures :: Lens' MyConfigSyncVolumeLicenses [MyConfigSyncVolumeLicensesFeatures]
+mcsvlFeatures
+  = lens _mcsvlFeatures
+      (\ s a -> s{_mcsvlFeatures = a})
+      . _Default
+      . _Coerce
+
+-- | String to identify the originator of this request.
+mcsvlSource :: Lens' MyConfigSyncVolumeLicenses Text
+mcsvlSource
+  = lens _mcsvlSource (\ s a -> s{_mcsvlSource = a})
+
+-- | Set to true to show pre-ordered books. Defaults to false.
+mcsvlShowPreOrders :: Lens' MyConfigSyncVolumeLicenses (Maybe Bool)
+mcsvlShowPreOrders
+  = lens _mcsvlShowPreOrders
+      (\ s a -> s{_mcsvlShowPreOrders = a})
+
+-- | The client nonce value.
+mcsvlNonce :: Lens' MyConfigSyncVolumeLicenses Text
+mcsvlNonce
+  = lens _mcsvlNonce (\ s a -> s{_mcsvlNonce = a})
+
+instance GoogleRequest MyConfigSyncVolumeLicenses
+         where
+        type Rs MyConfigSyncVolumeLicenses = Volumes
+        requestClient MyConfigSyncVolumeLicenses{..}
+          = go (Just _mcsvlSource) (Just _mcsvlNonce)
+              (Just _mcsvlCpksver)
+              _mcsvlLocale
+              (_mcsvlVolumeIds ^. _Default)
+              (_mcsvlFeatures ^. _Default)
+              _mcsvlShowPreOrders
+              (Just AltJSON)
+              booksService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy MyConfigSyncVolumeLicensesResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Books/MyConfig/UpdateUserSettings.hs b/gen/Network/Google/Resource/Books/MyConfig/UpdateUserSettings.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Books/MyConfig/UpdateUserSettings.hs
@@ -0,0 +1,90 @@
+{-# 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.Books.MyConfig.UpdateUserSettings
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Sets the settings for the user. If a sub-object is specified, it will
+-- overwrite the existing sub-object stored in the server. Unspecified
+-- sub-objects will retain the existing value.
+--
+-- /See:/ <https://developers.google.com/books/docs/v1/getting_started Books API Reference> for @books.myconfig.updateUserSettings@.
+module Network.Google.Resource.Books.MyConfig.UpdateUserSettings
+    (
+    -- * REST Resource
+      MyConfigUpdateUserSettingsResource
+
+    -- * Creating a Request
+    , myConfigUpdateUserSettings
+    , MyConfigUpdateUserSettings
+
+    -- * Request Lenses
+    , mcuusPayload
+    ) where
+
+import           Network.Google.Books.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @books.myconfig.updateUserSettings@ method which the
+-- 'MyConfigUpdateUserSettings' request conforms to.
+type MyConfigUpdateUserSettingsResource =
+     "books" :>
+       "v1" :>
+         "myconfig" :>
+           "updateUserSettings" :>
+             QueryParam "alt" AltJSON :>
+               ReqBody '[JSON] UserSettings :>
+                 Post '[JSON] UserSettings
+
+-- | Sets the settings for the user. If a sub-object is specified, it will
+-- overwrite the existing sub-object stored in the server. Unspecified
+-- sub-objects will retain the existing value.
+--
+-- /See:/ 'myConfigUpdateUserSettings' smart constructor.
+newtype MyConfigUpdateUserSettings = MyConfigUpdateUserSettings
+    { _mcuusPayload :: UserSettings
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'MyConfigUpdateUserSettings' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'mcuusPayload'
+myConfigUpdateUserSettings
+    :: UserSettings -- ^ 'mcuusPayload'
+    -> MyConfigUpdateUserSettings
+myConfigUpdateUserSettings pMcuusPayload_ =
+    MyConfigUpdateUserSettings
+    { _mcuusPayload = pMcuusPayload_
+    }
+
+-- | Multipart request metadata.
+mcuusPayload :: Lens' MyConfigUpdateUserSettings UserSettings
+mcuusPayload
+  = lens _mcuusPayload (\ s a -> s{_mcuusPayload = a})
+
+instance GoogleRequest MyConfigUpdateUserSettings
+         where
+        type Rs MyConfigUpdateUserSettings = UserSettings
+        requestClient MyConfigUpdateUserSettings{..}
+          = go (Just AltJSON) _mcuusPayload booksService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy MyConfigUpdateUserSettingsResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Books/MyLibrary/Annotations/Delete.hs b/gen/Network/Google/Resource/Books/MyLibrary/Annotations/Delete.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Books/MyLibrary/Annotations/Delete.hs
@@ -0,0 +1,98 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.Books.MyLibrary.Annotations.Delete
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes an annotation.
+--
+-- /See:/ <https://developers.google.com/books/docs/v1/getting_started Books API Reference> for @books.mylibrary.annotations.delete@.
+module Network.Google.Resource.Books.MyLibrary.Annotations.Delete
+    (
+    -- * REST Resource
+      MyLibraryAnnotationsDeleteResource
+
+    -- * Creating a Request
+    , myLibraryAnnotationsDelete
+    , MyLibraryAnnotationsDelete
+
+    -- * Request Lenses
+    , mladAnnotationId
+    , mladSource
+    ) where
+
+import           Network.Google.Books.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @books.mylibrary.annotations.delete@ method which the
+-- 'MyLibraryAnnotationsDelete' request conforms to.
+type MyLibraryAnnotationsDeleteResource =
+     "books" :>
+       "v1" :>
+         "mylibrary" :>
+           "annotations" :>
+             Capture "annotationId" Text :>
+               QueryParam "source" Text :>
+                 QueryParam "alt" AltJSON :> Delete '[JSON] ()
+
+-- | Deletes an annotation.
+--
+-- /See:/ 'myLibraryAnnotationsDelete' smart constructor.
+data MyLibraryAnnotationsDelete = MyLibraryAnnotationsDelete
+    { _mladAnnotationId :: !Text
+    , _mladSource       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'MyLibraryAnnotationsDelete' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'mladAnnotationId'
+--
+-- * 'mladSource'
+myLibraryAnnotationsDelete
+    :: Text -- ^ 'mladAnnotationId'
+    -> MyLibraryAnnotationsDelete
+myLibraryAnnotationsDelete pMladAnnotationId_ =
+    MyLibraryAnnotationsDelete
+    { _mladAnnotationId = pMladAnnotationId_
+    , _mladSource = Nothing
+    }
+
+-- | The ID for the annotation to delete.
+mladAnnotationId :: Lens' MyLibraryAnnotationsDelete Text
+mladAnnotationId
+  = lens _mladAnnotationId
+      (\ s a -> s{_mladAnnotationId = a})
+
+-- | String to identify the originator of this request.
+mladSource :: Lens' MyLibraryAnnotationsDelete (Maybe Text)
+mladSource
+  = lens _mladSource (\ s a -> s{_mladSource = a})
+
+instance GoogleRequest MyLibraryAnnotationsDelete
+         where
+        type Rs MyLibraryAnnotationsDelete = ()
+        requestClient MyLibraryAnnotationsDelete{..}
+          = go _mladAnnotationId _mladSource (Just AltJSON)
+              booksService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy MyLibraryAnnotationsDeleteResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Books/MyLibrary/Annotations/Insert.hs b/gen/Network/Google/Resource/Books/MyLibrary/Annotations/Insert.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Books/MyLibrary/Annotations/Insert.hs
@@ -0,0 +1,124 @@
+{-# 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.Books.MyLibrary.Annotations.Insert
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Inserts a new annotation.
+--
+-- /See:/ <https://developers.google.com/books/docs/v1/getting_started Books API Reference> for @books.mylibrary.annotations.insert@.
+module Network.Google.Resource.Books.MyLibrary.Annotations.Insert
+    (
+    -- * REST Resource
+      MyLibraryAnnotationsInsertResource
+
+    -- * Creating a Request
+    , myLibraryAnnotationsInsert
+    , MyLibraryAnnotationsInsert
+
+    -- * Request Lenses
+    , mlaiCountry
+    , mlaiPayload
+    , mlaiShowOnlySummaryInResponse
+    , mlaiSource
+    ) where
+
+import           Network.Google.Books.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @books.mylibrary.annotations.insert@ method which the
+-- 'MyLibraryAnnotationsInsert' request conforms to.
+type MyLibraryAnnotationsInsertResource =
+     "books" :>
+       "v1" :>
+         "mylibrary" :>
+           "annotations" :>
+             QueryParam "country" Text :>
+               QueryParam "showOnlySummaryInResponse" Bool :>
+                 QueryParam "source" Text :>
+                   QueryParam "alt" AltJSON :>
+                     ReqBody '[JSON] Annotation :> Post '[JSON] Annotation
+
+-- | Inserts a new annotation.
+--
+-- /See:/ 'myLibraryAnnotationsInsert' smart constructor.
+data MyLibraryAnnotationsInsert = MyLibraryAnnotationsInsert
+    { _mlaiCountry                   :: !(Maybe Text)
+    , _mlaiPayload                   :: !Annotation
+    , _mlaiShowOnlySummaryInResponse :: !(Maybe Bool)
+    , _mlaiSource                    :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'MyLibraryAnnotationsInsert' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'mlaiCountry'
+--
+-- * 'mlaiPayload'
+--
+-- * 'mlaiShowOnlySummaryInResponse'
+--
+-- * 'mlaiSource'
+myLibraryAnnotationsInsert
+    :: Annotation -- ^ 'mlaiPayload'
+    -> MyLibraryAnnotationsInsert
+myLibraryAnnotationsInsert pMlaiPayload_ =
+    MyLibraryAnnotationsInsert
+    { _mlaiCountry = Nothing
+    , _mlaiPayload = pMlaiPayload_
+    , _mlaiShowOnlySummaryInResponse = Nothing
+    , _mlaiSource = Nothing
+    }
+
+-- | ISO-3166-1 code to override the IP-based location.
+mlaiCountry :: Lens' MyLibraryAnnotationsInsert (Maybe Text)
+mlaiCountry
+  = lens _mlaiCountry (\ s a -> s{_mlaiCountry = a})
+
+-- | Multipart request metadata.
+mlaiPayload :: Lens' MyLibraryAnnotationsInsert Annotation
+mlaiPayload
+  = lens _mlaiPayload (\ s a -> s{_mlaiPayload = a})
+
+-- | Requests that only the summary of the specified layer be provided in the
+-- response.
+mlaiShowOnlySummaryInResponse :: Lens' MyLibraryAnnotationsInsert (Maybe Bool)
+mlaiShowOnlySummaryInResponse
+  = lens _mlaiShowOnlySummaryInResponse
+      (\ s a -> s{_mlaiShowOnlySummaryInResponse = a})
+
+-- | String to identify the originator of this request.
+mlaiSource :: Lens' MyLibraryAnnotationsInsert (Maybe Text)
+mlaiSource
+  = lens _mlaiSource (\ s a -> s{_mlaiSource = a})
+
+instance GoogleRequest MyLibraryAnnotationsInsert
+         where
+        type Rs MyLibraryAnnotationsInsert = Annotation
+        requestClient MyLibraryAnnotationsInsert{..}
+          = go _mlaiCountry _mlaiShowOnlySummaryInResponse
+              _mlaiSource
+              (Just AltJSON)
+              _mlaiPayload
+              booksService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy MyLibraryAnnotationsInsertResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Books/MyLibrary/Annotations/List.hs b/gen/Network/Google/Resource/Books/MyLibrary/Annotations/List.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Books/MyLibrary/Annotations/List.hs
@@ -0,0 +1,205 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.Books.MyLibrary.Annotations.List
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Retrieves a list of annotations, possibly filtered.
+--
+-- /See:/ <https://developers.google.com/books/docs/v1/getting_started Books API Reference> for @books.mylibrary.annotations.list@.
+module Network.Google.Resource.Books.MyLibrary.Annotations.List
+    (
+    -- * REST Resource
+      MyLibraryAnnotationsListResource
+
+    -- * Creating a Request
+    , myLibraryAnnotationsList
+    , MyLibraryAnnotationsList
+
+    -- * Request Lenses
+    , mlalContentVersion
+    , mlalShowDeleted
+    , mlalUpdatedMax
+    , mlalUpdatedMin
+    , mlalLayerIds
+    , mlalVolumeId
+    , mlalSource
+    , mlalPageToken
+    , mlalLayerId
+    , mlalMaxResults
+    ) where
+
+import           Network.Google.Books.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @books.mylibrary.annotations.list@ method which the
+-- 'MyLibraryAnnotationsList' request conforms to.
+type MyLibraryAnnotationsListResource =
+     "books" :>
+       "v1" :>
+         "mylibrary" :>
+           "annotations" :>
+             QueryParam "contentVersion" Text :>
+               QueryParam "showDeleted" Bool :>
+                 QueryParam "updatedMax" Text :>
+                   QueryParam "updatedMin" Text :>
+                     QueryParams "layerIds" Text :>
+                       QueryParam "volumeId" Text :>
+                         QueryParam "source" Text :>
+                           QueryParam "pageToken" Text :>
+                             QueryParam "layerId" Text :>
+                               QueryParam "maxResults" (Textual Word32) :>
+                                 QueryParam "alt" AltJSON :>
+                                   Get '[JSON] Annotations
+
+-- | Retrieves a list of annotations, possibly filtered.
+--
+-- /See:/ 'myLibraryAnnotationsList' smart constructor.
+data MyLibraryAnnotationsList = MyLibraryAnnotationsList
+    { _mlalContentVersion :: !(Maybe Text)
+    , _mlalShowDeleted    :: !(Maybe Bool)
+    , _mlalUpdatedMax     :: !(Maybe Text)
+    , _mlalUpdatedMin     :: !(Maybe Text)
+    , _mlalLayerIds       :: !(Maybe [Text])
+    , _mlalVolumeId       :: !(Maybe Text)
+    , _mlalSource         :: !(Maybe Text)
+    , _mlalPageToken      :: !(Maybe Text)
+    , _mlalLayerId        :: !(Maybe Text)
+    , _mlalMaxResults     :: !(Maybe (Textual Word32))
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'MyLibraryAnnotationsList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'mlalContentVersion'
+--
+-- * 'mlalShowDeleted'
+--
+-- * 'mlalUpdatedMax'
+--
+-- * 'mlalUpdatedMin'
+--
+-- * 'mlalLayerIds'
+--
+-- * 'mlalVolumeId'
+--
+-- * 'mlalSource'
+--
+-- * 'mlalPageToken'
+--
+-- * 'mlalLayerId'
+--
+-- * 'mlalMaxResults'
+myLibraryAnnotationsList
+    :: MyLibraryAnnotationsList
+myLibraryAnnotationsList =
+    MyLibraryAnnotationsList
+    { _mlalContentVersion = Nothing
+    , _mlalShowDeleted = Nothing
+    , _mlalUpdatedMax = Nothing
+    , _mlalUpdatedMin = Nothing
+    , _mlalLayerIds = Nothing
+    , _mlalVolumeId = Nothing
+    , _mlalSource = Nothing
+    , _mlalPageToken = Nothing
+    , _mlalLayerId = Nothing
+    , _mlalMaxResults = Nothing
+    }
+
+-- | The content version for the requested volume.
+mlalContentVersion :: Lens' MyLibraryAnnotationsList (Maybe Text)
+mlalContentVersion
+  = lens _mlalContentVersion
+      (\ s a -> s{_mlalContentVersion = a})
+
+-- | Set to true to return deleted annotations. updatedMin must be in the
+-- request to use this. Defaults to false.
+mlalShowDeleted :: Lens' MyLibraryAnnotationsList (Maybe Bool)
+mlalShowDeleted
+  = lens _mlalShowDeleted
+      (\ s a -> s{_mlalShowDeleted = a})
+
+-- | RFC 3339 timestamp to restrict to items updated prior to this timestamp
+-- (exclusive).
+mlalUpdatedMax :: Lens' MyLibraryAnnotationsList (Maybe Text)
+mlalUpdatedMax
+  = lens _mlalUpdatedMax
+      (\ s a -> s{_mlalUpdatedMax = a})
+
+-- | RFC 3339 timestamp to restrict to items updated since this timestamp
+-- (inclusive).
+mlalUpdatedMin :: Lens' MyLibraryAnnotationsList (Maybe Text)
+mlalUpdatedMin
+  = lens _mlalUpdatedMin
+      (\ s a -> s{_mlalUpdatedMin = a})
+
+-- | The layer ID(s) to limit annotation by.
+mlalLayerIds :: Lens' MyLibraryAnnotationsList [Text]
+mlalLayerIds
+  = lens _mlalLayerIds (\ s a -> s{_mlalLayerIds = a})
+      . _Default
+      . _Coerce
+
+-- | The volume to restrict annotations to.
+mlalVolumeId :: Lens' MyLibraryAnnotationsList (Maybe Text)
+mlalVolumeId
+  = lens _mlalVolumeId (\ s a -> s{_mlalVolumeId = a})
+
+-- | String to identify the originator of this request.
+mlalSource :: Lens' MyLibraryAnnotationsList (Maybe Text)
+mlalSource
+  = lens _mlalSource (\ s a -> s{_mlalSource = a})
+
+-- | The value of the nextToken from the previous page.
+mlalPageToken :: Lens' MyLibraryAnnotationsList (Maybe Text)
+mlalPageToken
+  = lens _mlalPageToken
+      (\ s a -> s{_mlalPageToken = a})
+
+-- | The layer ID to limit annotation by.
+mlalLayerId :: Lens' MyLibraryAnnotationsList (Maybe Text)
+mlalLayerId
+  = lens _mlalLayerId (\ s a -> s{_mlalLayerId = a})
+
+-- | Maximum number of results to return
+mlalMaxResults :: Lens' MyLibraryAnnotationsList (Maybe Word32)
+mlalMaxResults
+  = lens _mlalMaxResults
+      (\ s a -> s{_mlalMaxResults = a})
+      . mapping _Coerce
+
+instance GoogleRequest MyLibraryAnnotationsList where
+        type Rs MyLibraryAnnotationsList = Annotations
+        requestClient MyLibraryAnnotationsList{..}
+          = go _mlalContentVersion _mlalShowDeleted
+              _mlalUpdatedMax
+              _mlalUpdatedMin
+              (_mlalLayerIds ^. _Default)
+              _mlalVolumeId
+              _mlalSource
+              _mlalPageToken
+              _mlalLayerId
+              _mlalMaxResults
+              (Just AltJSON)
+              booksService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy MyLibraryAnnotationsListResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Books/MyLibrary/Annotations/Summary.hs b/gen/Network/Google/Resource/Books/MyLibrary/Annotations/Summary.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Books/MyLibrary/Annotations/Summary.hs
@@ -0,0 +1,103 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.Books.MyLibrary.Annotations.Summary
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Gets the summary of specified layers.
+--
+-- /See:/ <https://developers.google.com/books/docs/v1/getting_started Books API Reference> for @books.mylibrary.annotations.summary@.
+module Network.Google.Resource.Books.MyLibrary.Annotations.Summary
+    (
+    -- * REST Resource
+      MyLibraryAnnotationsSummaryResource
+
+    -- * Creating a Request
+    , myLibraryAnnotationsSummary
+    , MyLibraryAnnotationsSummary
+
+    -- * Request Lenses
+    , mlasLayerIds
+    , mlasVolumeId
+    ) where
+
+import           Network.Google.Books.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @books.mylibrary.annotations.summary@ method which the
+-- 'MyLibraryAnnotationsSummary' request conforms to.
+type MyLibraryAnnotationsSummaryResource =
+     "books" :>
+       "v1" :>
+         "mylibrary" :>
+           "annotations" :>
+             "summary" :>
+               QueryParams "layerIds" Text :>
+                 QueryParam "volumeId" Text :>
+                   QueryParam "alt" AltJSON :>
+                     Post '[JSON] AnnotationsSummary
+
+-- | Gets the summary of specified layers.
+--
+-- /See:/ 'myLibraryAnnotationsSummary' smart constructor.
+data MyLibraryAnnotationsSummary = MyLibraryAnnotationsSummary
+    { _mlasLayerIds :: ![Text]
+    , _mlasVolumeId :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'MyLibraryAnnotationsSummary' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'mlasLayerIds'
+--
+-- * 'mlasVolumeId'
+myLibraryAnnotationsSummary
+    :: [Text] -- ^ 'mlasLayerIds'
+    -> Text -- ^ 'mlasVolumeId'
+    -> MyLibraryAnnotationsSummary
+myLibraryAnnotationsSummary pMlasLayerIds_ pMlasVolumeId_ =
+    MyLibraryAnnotationsSummary
+    { _mlasLayerIds = _Coerce # pMlasLayerIds_
+    , _mlasVolumeId = pMlasVolumeId_
+    }
+
+-- | Array of layer IDs to get the summary for.
+mlasLayerIds :: Lens' MyLibraryAnnotationsSummary [Text]
+mlasLayerIds
+  = lens _mlasLayerIds (\ s a -> s{_mlasLayerIds = a})
+      . _Coerce
+
+-- | Volume id to get the summary for.
+mlasVolumeId :: Lens' MyLibraryAnnotationsSummary Text
+mlasVolumeId
+  = lens _mlasVolumeId (\ s a -> s{_mlasVolumeId = a})
+
+instance GoogleRequest MyLibraryAnnotationsSummary
+         where
+        type Rs MyLibraryAnnotationsSummary =
+             AnnotationsSummary
+        requestClient MyLibraryAnnotationsSummary{..}
+          = go _mlasLayerIds (Just _mlasVolumeId)
+              (Just AltJSON)
+              booksService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy MyLibraryAnnotationsSummaryResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Books/MyLibrary/Annotations/Update.hs b/gen/Network/Google/Resource/Books/MyLibrary/Annotations/Update.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Books/MyLibrary/Annotations/Update.hs
@@ -0,0 +1,111 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.Books.MyLibrary.Annotations.Update
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Updates an existing annotation.
+--
+-- /See:/ <https://developers.google.com/books/docs/v1/getting_started Books API Reference> for @books.mylibrary.annotations.update@.
+module Network.Google.Resource.Books.MyLibrary.Annotations.Update
+    (
+    -- * REST Resource
+      MyLibraryAnnotationsUpdateResource
+
+    -- * Creating a Request
+    , myLibraryAnnotationsUpdate
+    , MyLibraryAnnotationsUpdate
+
+    -- * Request Lenses
+    , mlauPayload
+    , mlauAnnotationId
+    , mlauSource
+    ) where
+
+import           Network.Google.Books.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @books.mylibrary.annotations.update@ method which the
+-- 'MyLibraryAnnotationsUpdate' request conforms to.
+type MyLibraryAnnotationsUpdateResource =
+     "books" :>
+       "v1" :>
+         "mylibrary" :>
+           "annotations" :>
+             Capture "annotationId" Text :>
+               QueryParam "source" Text :>
+                 QueryParam "alt" AltJSON :>
+                   ReqBody '[JSON] Annotation :> Put '[JSON] Annotation
+
+-- | Updates an existing annotation.
+--
+-- /See:/ 'myLibraryAnnotationsUpdate' smart constructor.
+data MyLibraryAnnotationsUpdate = MyLibraryAnnotationsUpdate
+    { _mlauPayload      :: !Annotation
+    , _mlauAnnotationId :: !Text
+    , _mlauSource       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'MyLibraryAnnotationsUpdate' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'mlauPayload'
+--
+-- * 'mlauAnnotationId'
+--
+-- * 'mlauSource'
+myLibraryAnnotationsUpdate
+    :: Annotation -- ^ 'mlauPayload'
+    -> Text -- ^ 'mlauAnnotationId'
+    -> MyLibraryAnnotationsUpdate
+myLibraryAnnotationsUpdate pMlauPayload_ pMlauAnnotationId_ =
+    MyLibraryAnnotationsUpdate
+    { _mlauPayload = pMlauPayload_
+    , _mlauAnnotationId = pMlauAnnotationId_
+    , _mlauSource = Nothing
+    }
+
+-- | Multipart request metadata.
+mlauPayload :: Lens' MyLibraryAnnotationsUpdate Annotation
+mlauPayload
+  = lens _mlauPayload (\ s a -> s{_mlauPayload = a})
+
+-- | The ID for the annotation to update.
+mlauAnnotationId :: Lens' MyLibraryAnnotationsUpdate Text
+mlauAnnotationId
+  = lens _mlauAnnotationId
+      (\ s a -> s{_mlauAnnotationId = a})
+
+-- | String to identify the originator of this request.
+mlauSource :: Lens' MyLibraryAnnotationsUpdate (Maybe Text)
+mlauSource
+  = lens _mlauSource (\ s a -> s{_mlauSource = a})
+
+instance GoogleRequest MyLibraryAnnotationsUpdate
+         where
+        type Rs MyLibraryAnnotationsUpdate = Annotation
+        requestClient MyLibraryAnnotationsUpdate{..}
+          = go _mlauAnnotationId _mlauSource (Just AltJSON)
+              _mlauPayload
+              booksService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy MyLibraryAnnotationsUpdateResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Books/MyLibrary/Bookshelves/AddVolume.hs b/gen/Network/Google/Resource/Books/MyLibrary/Bookshelves/AddVolume.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Books/MyLibrary/Bookshelves/AddVolume.hs
@@ -0,0 +1,127 @@
+{-# 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.Books.MyLibrary.Bookshelves.AddVolume
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Adds a volume to a bookshelf.
+--
+-- /See:/ <https://developers.google.com/books/docs/v1/getting_started Books API Reference> for @books.mylibrary.bookshelves.addVolume@.
+module Network.Google.Resource.Books.MyLibrary.Bookshelves.AddVolume
+    (
+    -- * REST Resource
+      MyLibraryBookshelvesAddVolumeResource
+
+    -- * Creating a Request
+    , myLibraryBookshelvesAddVolume
+    , MyLibraryBookshelvesAddVolume
+
+    -- * Request Lenses
+    , mlbavReason
+    , mlbavShelf
+    , mlbavVolumeId
+    , mlbavSource
+    ) where
+
+import           Network.Google.Books.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @books.mylibrary.bookshelves.addVolume@ method which the
+-- 'MyLibraryBookshelvesAddVolume' request conforms to.
+type MyLibraryBookshelvesAddVolumeResource =
+     "books" :>
+       "v1" :>
+         "mylibrary" :>
+           "bookshelves" :>
+             Capture "shelf" Text :>
+               "addVolume" :>
+                 QueryParam "volumeId" Text :>
+                   QueryParam "reason"
+                     MyLibraryBookshelvesAddVolumeReason
+                     :>
+                     QueryParam "source" Text :>
+                       QueryParam "alt" AltJSON :> Post '[JSON] ()
+
+-- | Adds a volume to a bookshelf.
+--
+-- /See:/ 'myLibraryBookshelvesAddVolume' smart constructor.
+data MyLibraryBookshelvesAddVolume = MyLibraryBookshelvesAddVolume
+    { _mlbavReason   :: !(Maybe MyLibraryBookshelvesAddVolumeReason)
+    , _mlbavShelf    :: !Text
+    , _mlbavVolumeId :: !Text
+    , _mlbavSource   :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'MyLibraryBookshelvesAddVolume' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'mlbavReason'
+--
+-- * 'mlbavShelf'
+--
+-- * 'mlbavVolumeId'
+--
+-- * 'mlbavSource'
+myLibraryBookshelvesAddVolume
+    :: Text -- ^ 'mlbavShelf'
+    -> Text -- ^ 'mlbavVolumeId'
+    -> MyLibraryBookshelvesAddVolume
+myLibraryBookshelvesAddVolume pMlbavShelf_ pMlbavVolumeId_ =
+    MyLibraryBookshelvesAddVolume
+    { _mlbavReason = Nothing
+    , _mlbavShelf = pMlbavShelf_
+    , _mlbavVolumeId = pMlbavVolumeId_
+    , _mlbavSource = Nothing
+    }
+
+-- | The reason for which the book is added to the library.
+mlbavReason :: Lens' MyLibraryBookshelvesAddVolume (Maybe MyLibraryBookshelvesAddVolumeReason)
+mlbavReason
+  = lens _mlbavReason (\ s a -> s{_mlbavReason = a})
+
+-- | ID of bookshelf to which to add a volume.
+mlbavShelf :: Lens' MyLibraryBookshelvesAddVolume Text
+mlbavShelf
+  = lens _mlbavShelf (\ s a -> s{_mlbavShelf = a})
+
+-- | ID of volume to add.
+mlbavVolumeId :: Lens' MyLibraryBookshelvesAddVolume Text
+mlbavVolumeId
+  = lens _mlbavVolumeId
+      (\ s a -> s{_mlbavVolumeId = a})
+
+-- | String to identify the originator of this request.
+mlbavSource :: Lens' MyLibraryBookshelvesAddVolume (Maybe Text)
+mlbavSource
+  = lens _mlbavSource (\ s a -> s{_mlbavSource = a})
+
+instance GoogleRequest MyLibraryBookshelvesAddVolume
+         where
+        type Rs MyLibraryBookshelvesAddVolume = ()
+        requestClient MyLibraryBookshelvesAddVolume{..}
+          = go _mlbavShelf (Just _mlbavVolumeId) _mlbavReason
+              _mlbavSource
+              (Just AltJSON)
+              booksService
+          where go
+                  = buildClient
+                      (Proxy ::
+                         Proxy MyLibraryBookshelvesAddVolumeResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Books/MyLibrary/Bookshelves/ClearVolumes.hs b/gen/Network/Google/Resource/Books/MyLibrary/Bookshelves/ClearVolumes.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Books/MyLibrary/Bookshelves/ClearVolumes.hs
@@ -0,0 +1,99 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.Books.MyLibrary.Bookshelves.ClearVolumes
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Clears all volumes from a bookshelf.
+--
+-- /See:/ <https://developers.google.com/books/docs/v1/getting_started Books API Reference> for @books.mylibrary.bookshelves.clearVolumes@.
+module Network.Google.Resource.Books.MyLibrary.Bookshelves.ClearVolumes
+    (
+    -- * REST Resource
+      MyLibraryBookshelvesClearVolumesResource
+
+    -- * Creating a Request
+    , myLibraryBookshelvesClearVolumes
+    , MyLibraryBookshelvesClearVolumes
+
+    -- * Request Lenses
+    , mlbcvShelf
+    , mlbcvSource
+    ) where
+
+import           Network.Google.Books.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @books.mylibrary.bookshelves.clearVolumes@ method which the
+-- 'MyLibraryBookshelvesClearVolumes' request conforms to.
+type MyLibraryBookshelvesClearVolumesResource =
+     "books" :>
+       "v1" :>
+         "mylibrary" :>
+           "bookshelves" :>
+             Capture "shelf" Text :>
+               "clearVolumes" :>
+                 QueryParam "source" Text :>
+                   QueryParam "alt" AltJSON :> Post '[JSON] ()
+
+-- | Clears all volumes from a bookshelf.
+--
+-- /See:/ 'myLibraryBookshelvesClearVolumes' smart constructor.
+data MyLibraryBookshelvesClearVolumes = MyLibraryBookshelvesClearVolumes
+    { _mlbcvShelf  :: !Text
+    , _mlbcvSource :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'MyLibraryBookshelvesClearVolumes' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'mlbcvShelf'
+--
+-- * 'mlbcvSource'
+myLibraryBookshelvesClearVolumes
+    :: Text -- ^ 'mlbcvShelf'
+    -> MyLibraryBookshelvesClearVolumes
+myLibraryBookshelvesClearVolumes pMlbcvShelf_ =
+    MyLibraryBookshelvesClearVolumes
+    { _mlbcvShelf = pMlbcvShelf_
+    , _mlbcvSource = Nothing
+    }
+
+-- | ID of bookshelf from which to remove a volume.
+mlbcvShelf :: Lens' MyLibraryBookshelvesClearVolumes Text
+mlbcvShelf
+  = lens _mlbcvShelf (\ s a -> s{_mlbcvShelf = a})
+
+-- | String to identify the originator of this request.
+mlbcvSource :: Lens' MyLibraryBookshelvesClearVolumes (Maybe Text)
+mlbcvSource
+  = lens _mlbcvSource (\ s a -> s{_mlbcvSource = a})
+
+instance GoogleRequest
+         MyLibraryBookshelvesClearVolumes where
+        type Rs MyLibraryBookshelvesClearVolumes = ()
+        requestClient MyLibraryBookshelvesClearVolumes{..}
+          = go _mlbcvShelf _mlbcvSource (Just AltJSON)
+              booksService
+          where go
+                  = buildClient
+                      (Proxy ::
+                         Proxy MyLibraryBookshelvesClearVolumesResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Books/MyLibrary/Bookshelves/Get.hs b/gen/Network/Google/Resource/Books/MyLibrary/Bookshelves/Get.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Books/MyLibrary/Bookshelves/Get.hs
@@ -0,0 +1,98 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.Books.MyLibrary.Bookshelves.Get
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Retrieves metadata for a specific bookshelf belonging to the
+-- authenticated user.
+--
+-- /See:/ <https://developers.google.com/books/docs/v1/getting_started Books API Reference> for @books.mylibrary.bookshelves.get@.
+module Network.Google.Resource.Books.MyLibrary.Bookshelves.Get
+    (
+    -- * REST Resource
+      MyLibraryBookshelvesGetResource
+
+    -- * Creating a Request
+    , myLibraryBookshelvesGet
+    , MyLibraryBookshelvesGet
+
+    -- * Request Lenses
+    , mlbgShelf
+    , mlbgSource
+    ) where
+
+import           Network.Google.Books.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @books.mylibrary.bookshelves.get@ method which the
+-- 'MyLibraryBookshelvesGet' request conforms to.
+type MyLibraryBookshelvesGetResource =
+     "books" :>
+       "v1" :>
+         "mylibrary" :>
+           "bookshelves" :>
+             Capture "shelf" Text :>
+               QueryParam "source" Text :>
+                 QueryParam "alt" AltJSON :> Get '[JSON] Bookshelf
+
+-- | Retrieves metadata for a specific bookshelf belonging to the
+-- authenticated user.
+--
+-- /See:/ 'myLibraryBookshelvesGet' smart constructor.
+data MyLibraryBookshelvesGet = MyLibraryBookshelvesGet
+    { _mlbgShelf  :: !Text
+    , _mlbgSource :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'MyLibraryBookshelvesGet' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'mlbgShelf'
+--
+-- * 'mlbgSource'
+myLibraryBookshelvesGet
+    :: Text -- ^ 'mlbgShelf'
+    -> MyLibraryBookshelvesGet
+myLibraryBookshelvesGet pMlbgShelf_ =
+    MyLibraryBookshelvesGet
+    { _mlbgShelf = pMlbgShelf_
+    , _mlbgSource = Nothing
+    }
+
+-- | ID of bookshelf to retrieve.
+mlbgShelf :: Lens' MyLibraryBookshelvesGet Text
+mlbgShelf
+  = lens _mlbgShelf (\ s a -> s{_mlbgShelf = a})
+
+-- | String to identify the originator of this request.
+mlbgSource :: Lens' MyLibraryBookshelvesGet (Maybe Text)
+mlbgSource
+  = lens _mlbgSource (\ s a -> s{_mlbgSource = a})
+
+instance GoogleRequest MyLibraryBookshelvesGet where
+        type Rs MyLibraryBookshelvesGet = Bookshelf
+        requestClient MyLibraryBookshelvesGet{..}
+          = go _mlbgShelf _mlbgSource (Just AltJSON)
+              booksService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy MyLibraryBookshelvesGetResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Books/MyLibrary/Bookshelves/List.hs b/gen/Network/Google/Resource/Books/MyLibrary/Bookshelves/List.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Books/MyLibrary/Bookshelves/List.hs
@@ -0,0 +1,83 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.Books.MyLibrary.Bookshelves.List
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Retrieves a list of bookshelves belonging to the authenticated user.
+--
+-- /See:/ <https://developers.google.com/books/docs/v1/getting_started Books API Reference> for @books.mylibrary.bookshelves.list@.
+module Network.Google.Resource.Books.MyLibrary.Bookshelves.List
+    (
+    -- * REST Resource
+      MyLibraryBookshelvesListResource
+
+    -- * Creating a Request
+    , myLibraryBookshelvesList
+    , MyLibraryBookshelvesList
+
+    -- * Request Lenses
+    , mlblSource
+    ) where
+
+import           Network.Google.Books.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @books.mylibrary.bookshelves.list@ method which the
+-- 'MyLibraryBookshelvesList' request conforms to.
+type MyLibraryBookshelvesListResource =
+     "books" :>
+       "v1" :>
+         "mylibrary" :>
+           "bookshelves" :>
+             QueryParam "source" Text :>
+               QueryParam "alt" AltJSON :> Get '[JSON] Bookshelves
+
+-- | Retrieves a list of bookshelves belonging to the authenticated user.
+--
+-- /See:/ 'myLibraryBookshelvesList' smart constructor.
+newtype MyLibraryBookshelvesList = MyLibraryBookshelvesList
+    { _mlblSource :: Maybe Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'MyLibraryBookshelvesList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'mlblSource'
+myLibraryBookshelvesList
+    :: MyLibraryBookshelvesList
+myLibraryBookshelvesList =
+    MyLibraryBookshelvesList
+    { _mlblSource = Nothing
+    }
+
+-- | String to identify the originator of this request.
+mlblSource :: Lens' MyLibraryBookshelvesList (Maybe Text)
+mlblSource
+  = lens _mlblSource (\ s a -> s{_mlblSource = a})
+
+instance GoogleRequest MyLibraryBookshelvesList where
+        type Rs MyLibraryBookshelvesList = Bookshelves
+        requestClient MyLibraryBookshelvesList{..}
+          = go _mlblSource (Just AltJSON) booksService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy MyLibraryBookshelvesListResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Books/MyLibrary/Bookshelves/MoveVolume.hs b/gen/Network/Google/Resource/Books/MyLibrary/Bookshelves/MoveVolume.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Books/MyLibrary/Bookshelves/MoveVolume.hs
@@ -0,0 +1,130 @@
+{-# 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.Books.MyLibrary.Bookshelves.MoveVolume
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Moves a volume within a bookshelf.
+--
+-- /See:/ <https://developers.google.com/books/docs/v1/getting_started Books API Reference> for @books.mylibrary.bookshelves.moveVolume@.
+module Network.Google.Resource.Books.MyLibrary.Bookshelves.MoveVolume
+    (
+    -- * REST Resource
+      MyLibraryBookshelvesMoveVolumeResource
+
+    -- * Creating a Request
+    , myLibraryBookshelvesMoveVolume
+    , MyLibraryBookshelvesMoveVolume
+
+    -- * Request Lenses
+    , mlbmvShelf
+    , mlbmvVolumeId
+    , mlbmvSource
+    , mlbmvVolumePosition
+    ) where
+
+import           Network.Google.Books.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @books.mylibrary.bookshelves.moveVolume@ method which the
+-- 'MyLibraryBookshelvesMoveVolume' request conforms to.
+type MyLibraryBookshelvesMoveVolumeResource =
+     "books" :>
+       "v1" :>
+         "mylibrary" :>
+           "bookshelves" :>
+             Capture "shelf" Text :>
+               "moveVolume" :>
+                 QueryParam "volumeId" Text :>
+                   QueryParam "volumePosition" (Textual Int32) :>
+                     QueryParam "source" Text :>
+                       QueryParam "alt" AltJSON :> Post '[JSON] ()
+
+-- | Moves a volume within a bookshelf.
+--
+-- /See:/ 'myLibraryBookshelvesMoveVolume' smart constructor.
+data MyLibraryBookshelvesMoveVolume = MyLibraryBookshelvesMoveVolume
+    { _mlbmvShelf          :: !Text
+    , _mlbmvVolumeId       :: !Text
+    , _mlbmvSource         :: !(Maybe Text)
+    , _mlbmvVolumePosition :: !(Textual Int32)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'MyLibraryBookshelvesMoveVolume' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'mlbmvShelf'
+--
+-- * 'mlbmvVolumeId'
+--
+-- * 'mlbmvSource'
+--
+-- * 'mlbmvVolumePosition'
+myLibraryBookshelvesMoveVolume
+    :: Text -- ^ 'mlbmvShelf'
+    -> Text -- ^ 'mlbmvVolumeId'
+    -> Int32 -- ^ 'mlbmvVolumePosition'
+    -> MyLibraryBookshelvesMoveVolume
+myLibraryBookshelvesMoveVolume pMlbmvShelf_ pMlbmvVolumeId_ pMlbmvVolumePosition_ =
+    MyLibraryBookshelvesMoveVolume
+    { _mlbmvShelf = pMlbmvShelf_
+    , _mlbmvVolumeId = pMlbmvVolumeId_
+    , _mlbmvSource = Nothing
+    , _mlbmvVolumePosition = _Coerce # pMlbmvVolumePosition_
+    }
+
+-- | ID of bookshelf with the volume.
+mlbmvShelf :: Lens' MyLibraryBookshelvesMoveVolume Text
+mlbmvShelf
+  = lens _mlbmvShelf (\ s a -> s{_mlbmvShelf = a})
+
+-- | ID of volume to move.
+mlbmvVolumeId :: Lens' MyLibraryBookshelvesMoveVolume Text
+mlbmvVolumeId
+  = lens _mlbmvVolumeId
+      (\ s a -> s{_mlbmvVolumeId = a})
+
+-- | String to identify the originator of this request.
+mlbmvSource :: Lens' MyLibraryBookshelvesMoveVolume (Maybe Text)
+mlbmvSource
+  = lens _mlbmvSource (\ s a -> s{_mlbmvSource = a})
+
+-- | Position on shelf to move the item (0 puts the item before the current
+-- first item, 1 puts it between the first and the second and so on.)
+mlbmvVolumePosition :: Lens' MyLibraryBookshelvesMoveVolume Int32
+mlbmvVolumePosition
+  = lens _mlbmvVolumePosition
+      (\ s a -> s{_mlbmvVolumePosition = a})
+      . _Coerce
+
+instance GoogleRequest MyLibraryBookshelvesMoveVolume
+         where
+        type Rs MyLibraryBookshelvesMoveVolume = ()
+        requestClient MyLibraryBookshelvesMoveVolume{..}
+          = go _mlbmvShelf (Just _mlbmvVolumeId)
+              (Just _mlbmvVolumePosition)
+              _mlbmvSource
+              (Just AltJSON)
+              booksService
+          where go
+                  = buildClient
+                      (Proxy ::
+                         Proxy MyLibraryBookshelvesMoveVolumeResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Books/MyLibrary/Bookshelves/RemoveVolume.hs b/gen/Network/Google/Resource/Books/MyLibrary/Bookshelves/RemoveVolume.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Books/MyLibrary/Bookshelves/RemoveVolume.hs
@@ -0,0 +1,127 @@
+{-# 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.Books.MyLibrary.Bookshelves.RemoveVolume
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Removes a volume from a bookshelf.
+--
+-- /See:/ <https://developers.google.com/books/docs/v1/getting_started Books API Reference> for @books.mylibrary.bookshelves.removeVolume@.
+module Network.Google.Resource.Books.MyLibrary.Bookshelves.RemoveVolume
+    (
+    -- * REST Resource
+      MyLibraryBookshelvesRemoveVolumeResource
+
+    -- * Creating a Request
+    , myLibraryBookshelvesRemoveVolume
+    , MyLibraryBookshelvesRemoveVolume
+
+    -- * Request Lenses
+    , mlbrvReason
+    , mlbrvShelf
+    , mlbrvVolumeId
+    , mlbrvSource
+    ) where
+
+import           Network.Google.Books.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @books.mylibrary.bookshelves.removeVolume@ method which the
+-- 'MyLibraryBookshelvesRemoveVolume' request conforms to.
+type MyLibraryBookshelvesRemoveVolumeResource =
+     "books" :>
+       "v1" :>
+         "mylibrary" :>
+           "bookshelves" :>
+             Capture "shelf" Text :>
+               "removeVolume" :>
+                 QueryParam "volumeId" Text :>
+                   QueryParam "reason"
+                     MyLibraryBookshelvesRemoveVolumeReason
+                     :>
+                     QueryParam "source" Text :>
+                       QueryParam "alt" AltJSON :> Post '[JSON] ()
+
+-- | Removes a volume from a bookshelf.
+--
+-- /See:/ 'myLibraryBookshelvesRemoveVolume' smart constructor.
+data MyLibraryBookshelvesRemoveVolume = MyLibraryBookshelvesRemoveVolume
+    { _mlbrvReason   :: !(Maybe MyLibraryBookshelvesRemoveVolumeReason)
+    , _mlbrvShelf    :: !Text
+    , _mlbrvVolumeId :: !Text
+    , _mlbrvSource   :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'MyLibraryBookshelvesRemoveVolume' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'mlbrvReason'
+--
+-- * 'mlbrvShelf'
+--
+-- * 'mlbrvVolumeId'
+--
+-- * 'mlbrvSource'
+myLibraryBookshelvesRemoveVolume
+    :: Text -- ^ 'mlbrvShelf'
+    -> Text -- ^ 'mlbrvVolumeId'
+    -> MyLibraryBookshelvesRemoveVolume
+myLibraryBookshelvesRemoveVolume pMlbrvShelf_ pMlbrvVolumeId_ =
+    MyLibraryBookshelvesRemoveVolume
+    { _mlbrvReason = Nothing
+    , _mlbrvShelf = pMlbrvShelf_
+    , _mlbrvVolumeId = pMlbrvVolumeId_
+    , _mlbrvSource = Nothing
+    }
+
+-- | The reason for which the book is removed from the library.
+mlbrvReason :: Lens' MyLibraryBookshelvesRemoveVolume (Maybe MyLibraryBookshelvesRemoveVolumeReason)
+mlbrvReason
+  = lens _mlbrvReason (\ s a -> s{_mlbrvReason = a})
+
+-- | ID of bookshelf from which to remove a volume.
+mlbrvShelf :: Lens' MyLibraryBookshelvesRemoveVolume Text
+mlbrvShelf
+  = lens _mlbrvShelf (\ s a -> s{_mlbrvShelf = a})
+
+-- | ID of volume to remove.
+mlbrvVolumeId :: Lens' MyLibraryBookshelvesRemoveVolume Text
+mlbrvVolumeId
+  = lens _mlbrvVolumeId
+      (\ s a -> s{_mlbrvVolumeId = a})
+
+-- | String to identify the originator of this request.
+mlbrvSource :: Lens' MyLibraryBookshelvesRemoveVolume (Maybe Text)
+mlbrvSource
+  = lens _mlbrvSource (\ s a -> s{_mlbrvSource = a})
+
+instance GoogleRequest
+         MyLibraryBookshelvesRemoveVolume where
+        type Rs MyLibraryBookshelvesRemoveVolume = ()
+        requestClient MyLibraryBookshelvesRemoveVolume{..}
+          = go _mlbrvShelf (Just _mlbrvVolumeId) _mlbrvReason
+              _mlbrvSource
+              (Just AltJSON)
+              booksService
+          where go
+                  = buildClient
+                      (Proxy ::
+                         Proxy MyLibraryBookshelvesRemoveVolumeResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Books/MyLibrary/Bookshelves/Volumes/List.hs b/gen/Network/Google/Resource/Books/MyLibrary/Bookshelves/Volumes/List.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Books/MyLibrary/Bookshelves/Volumes/List.hs
@@ -0,0 +1,177 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.Books.MyLibrary.Bookshelves.Volumes.List
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Gets volume information for volumes on a bookshelf.
+--
+-- /See:/ <https://developers.google.com/books/docs/v1/getting_started Books API Reference> for @books.mylibrary.bookshelves.volumes.list@.
+module Network.Google.Resource.Books.MyLibrary.Bookshelves.Volumes.List
+    (
+    -- * REST Resource
+      MyLibraryBookshelvesVolumesListResource
+
+    -- * Creating a Request
+    , myLibraryBookshelvesVolumesList
+    , MyLibraryBookshelvesVolumesList
+
+    -- * Request Lenses
+    , mlbvlCountry
+    , mlbvlQ
+    , mlbvlShelf
+    , mlbvlSource
+    , mlbvlProjection
+    , mlbvlStartIndex
+    , mlbvlMaxResults
+    , mlbvlShowPreOrders
+    ) where
+
+import           Network.Google.Books.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @books.mylibrary.bookshelves.volumes.list@ method which the
+-- 'MyLibraryBookshelvesVolumesList' request conforms to.
+type MyLibraryBookshelvesVolumesListResource =
+     "books" :>
+       "v1" :>
+         "mylibrary" :>
+           "bookshelves" :>
+             Capture "shelf" Text :>
+               "volumes" :>
+                 QueryParam "country" Text :>
+                   QueryParam "q" Text :>
+                     QueryParam "source" Text :>
+                       QueryParam "projection"
+                         MyLibraryBookshelvesVolumesListProjection
+                         :>
+                         QueryParam "startIndex" (Textual Word32) :>
+                           QueryParam "maxResults" (Textual Word32) :>
+                             QueryParam "showPreorders" Bool :>
+                               QueryParam "alt" AltJSON :> Get '[JSON] Volumes
+
+-- | Gets volume information for volumes on a bookshelf.
+--
+-- /See:/ 'myLibraryBookshelvesVolumesList' smart constructor.
+data MyLibraryBookshelvesVolumesList = MyLibraryBookshelvesVolumesList
+    { _mlbvlCountry       :: !(Maybe Text)
+    , _mlbvlQ             :: !(Maybe Text)
+    , _mlbvlShelf         :: !Text
+    , _mlbvlSource        :: !(Maybe Text)
+    , _mlbvlProjection    :: !(Maybe MyLibraryBookshelvesVolumesListProjection)
+    , _mlbvlStartIndex    :: !(Maybe (Textual Word32))
+    , _mlbvlMaxResults    :: !(Maybe (Textual Word32))
+    , _mlbvlShowPreOrders :: !(Maybe Bool)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'MyLibraryBookshelvesVolumesList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'mlbvlCountry'
+--
+-- * 'mlbvlQ'
+--
+-- * 'mlbvlShelf'
+--
+-- * 'mlbvlSource'
+--
+-- * 'mlbvlProjection'
+--
+-- * 'mlbvlStartIndex'
+--
+-- * 'mlbvlMaxResults'
+--
+-- * 'mlbvlShowPreOrders'
+myLibraryBookshelvesVolumesList
+    :: Text -- ^ 'mlbvlShelf'
+    -> MyLibraryBookshelvesVolumesList
+myLibraryBookshelvesVolumesList pMlbvlShelf_ =
+    MyLibraryBookshelvesVolumesList
+    { _mlbvlCountry = Nothing
+    , _mlbvlQ = Nothing
+    , _mlbvlShelf = pMlbvlShelf_
+    , _mlbvlSource = Nothing
+    , _mlbvlProjection = Nothing
+    , _mlbvlStartIndex = Nothing
+    , _mlbvlMaxResults = Nothing
+    , _mlbvlShowPreOrders = Nothing
+    }
+
+-- | ISO-3166-1 code to override the IP-based location.
+mlbvlCountry :: Lens' MyLibraryBookshelvesVolumesList (Maybe Text)
+mlbvlCountry
+  = lens _mlbvlCountry (\ s a -> s{_mlbvlCountry = a})
+
+-- | Full-text search query string in this bookshelf.
+mlbvlQ :: Lens' MyLibraryBookshelvesVolumesList (Maybe Text)
+mlbvlQ = lens _mlbvlQ (\ s a -> s{_mlbvlQ = a})
+
+-- | The bookshelf ID or name retrieve volumes for.
+mlbvlShelf :: Lens' MyLibraryBookshelvesVolumesList Text
+mlbvlShelf
+  = lens _mlbvlShelf (\ s a -> s{_mlbvlShelf = a})
+
+-- | String to identify the originator of this request.
+mlbvlSource :: Lens' MyLibraryBookshelvesVolumesList (Maybe Text)
+mlbvlSource
+  = lens _mlbvlSource (\ s a -> s{_mlbvlSource = a})
+
+-- | Restrict information returned to a set of selected fields.
+mlbvlProjection :: Lens' MyLibraryBookshelvesVolumesList (Maybe MyLibraryBookshelvesVolumesListProjection)
+mlbvlProjection
+  = lens _mlbvlProjection
+      (\ s a -> s{_mlbvlProjection = a})
+
+-- | Index of the first element to return (starts at 0)
+mlbvlStartIndex :: Lens' MyLibraryBookshelvesVolumesList (Maybe Word32)
+mlbvlStartIndex
+  = lens _mlbvlStartIndex
+      (\ s a -> s{_mlbvlStartIndex = a})
+      . mapping _Coerce
+
+-- | Maximum number of results to return
+mlbvlMaxResults :: Lens' MyLibraryBookshelvesVolumesList (Maybe Word32)
+mlbvlMaxResults
+  = lens _mlbvlMaxResults
+      (\ s a -> s{_mlbvlMaxResults = a})
+      . mapping _Coerce
+
+-- | Set to true to show pre-ordered books. Defaults to false.
+mlbvlShowPreOrders :: Lens' MyLibraryBookshelvesVolumesList (Maybe Bool)
+mlbvlShowPreOrders
+  = lens _mlbvlShowPreOrders
+      (\ s a -> s{_mlbvlShowPreOrders = a})
+
+instance GoogleRequest
+         MyLibraryBookshelvesVolumesList where
+        type Rs MyLibraryBookshelvesVolumesList = Volumes
+        requestClient MyLibraryBookshelvesVolumesList{..}
+          = go _mlbvlShelf _mlbvlCountry _mlbvlQ _mlbvlSource
+              _mlbvlProjection
+              _mlbvlStartIndex
+              _mlbvlMaxResults
+              _mlbvlShowPreOrders
+              (Just AltJSON)
+              booksService
+          where go
+                  = buildClient
+                      (Proxy ::
+                         Proxy MyLibraryBookshelvesVolumesListResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Books/MyLibrary/ReadingPositions/Get.hs b/gen/Network/Google/Resource/Books/MyLibrary/ReadingPositions/Get.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Books/MyLibrary/ReadingPositions/Get.hs
@@ -0,0 +1,113 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.Books.MyLibrary.ReadingPositions.Get
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Retrieves my reading position information for a volume.
+--
+-- /See:/ <https://developers.google.com/books/docs/v1/getting_started Books API Reference> for @books.mylibrary.readingpositions.get@.
+module Network.Google.Resource.Books.MyLibrary.ReadingPositions.Get
+    (
+    -- * REST Resource
+      MyLibraryReadingPositionsGetResource
+
+    -- * Creating a Request
+    , myLibraryReadingPositionsGet
+    , MyLibraryReadingPositionsGet
+
+    -- * Request Lenses
+    , mlrpgContentVersion
+    , mlrpgVolumeId
+    , mlrpgSource
+    ) where
+
+import           Network.Google.Books.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @books.mylibrary.readingpositions.get@ method which the
+-- 'MyLibraryReadingPositionsGet' request conforms to.
+type MyLibraryReadingPositionsGetResource =
+     "books" :>
+       "v1" :>
+         "mylibrary" :>
+           "readingpositions" :>
+             Capture "volumeId" Text :>
+               QueryParam "contentVersion" Text :>
+                 QueryParam "source" Text :>
+                   QueryParam "alt" AltJSON :>
+                     Get '[JSON] ReadingPosition
+
+-- | Retrieves my reading position information for a volume.
+--
+-- /See:/ 'myLibraryReadingPositionsGet' smart constructor.
+data MyLibraryReadingPositionsGet = MyLibraryReadingPositionsGet
+    { _mlrpgContentVersion :: !(Maybe Text)
+    , _mlrpgVolumeId       :: !Text
+    , _mlrpgSource         :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'MyLibraryReadingPositionsGet' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'mlrpgContentVersion'
+--
+-- * 'mlrpgVolumeId'
+--
+-- * 'mlrpgSource'
+myLibraryReadingPositionsGet
+    :: Text -- ^ 'mlrpgVolumeId'
+    -> MyLibraryReadingPositionsGet
+myLibraryReadingPositionsGet pMlrpgVolumeId_ =
+    MyLibraryReadingPositionsGet
+    { _mlrpgContentVersion = Nothing
+    , _mlrpgVolumeId = pMlrpgVolumeId_
+    , _mlrpgSource = Nothing
+    }
+
+-- | Volume content version for which this reading position is requested.
+mlrpgContentVersion :: Lens' MyLibraryReadingPositionsGet (Maybe Text)
+mlrpgContentVersion
+  = lens _mlrpgContentVersion
+      (\ s a -> s{_mlrpgContentVersion = a})
+
+-- | ID of volume for which to retrieve a reading position.
+mlrpgVolumeId :: Lens' MyLibraryReadingPositionsGet Text
+mlrpgVolumeId
+  = lens _mlrpgVolumeId
+      (\ s a -> s{_mlrpgVolumeId = a})
+
+-- | String to identify the originator of this request.
+mlrpgSource :: Lens' MyLibraryReadingPositionsGet (Maybe Text)
+mlrpgSource
+  = lens _mlrpgSource (\ s a -> s{_mlrpgSource = a})
+
+instance GoogleRequest MyLibraryReadingPositionsGet
+         where
+        type Rs MyLibraryReadingPositionsGet =
+             ReadingPosition
+        requestClient MyLibraryReadingPositionsGet{..}
+          = go _mlrpgVolumeId _mlrpgContentVersion _mlrpgSource
+              (Just AltJSON)
+              booksService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy MyLibraryReadingPositionsGetResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Books/MyLibrary/ReadingPositions/SetPosition.hs b/gen/Network/Google/Resource/Books/MyLibrary/ReadingPositions/SetPosition.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Books/MyLibrary/ReadingPositions/SetPosition.hs
@@ -0,0 +1,170 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.Books.MyLibrary.ReadingPositions.SetPosition
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Sets my reading position information for a volume.
+--
+-- /See:/ <https://developers.google.com/books/docs/v1/getting_started Books API Reference> for @books.mylibrary.readingpositions.setPosition@.
+module Network.Google.Resource.Books.MyLibrary.ReadingPositions.SetPosition
+    (
+    -- * REST Resource
+      MyLibraryReadingPositionsSetPositionResource
+
+    -- * Creating a Request
+    , myLibraryReadingPositionsSetPosition
+    , MyLibraryReadingPositionsSetPosition
+
+    -- * Request Lenses
+    , mlrpspDeviceCookie
+    , mlrpspContentVersion
+    , mlrpspAction
+    , mlrpspVolumeId
+    , mlrpspSource
+    , mlrpspTimestamp
+    , mlrpspPosition
+    ) where
+
+import           Network.Google.Books.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @books.mylibrary.readingpositions.setPosition@ method which the
+-- 'MyLibraryReadingPositionsSetPosition' request conforms to.
+type MyLibraryReadingPositionsSetPositionResource =
+     "books" :>
+       "v1" :>
+         "mylibrary" :>
+           "readingpositions" :>
+             Capture "volumeId" Text :>
+               "setPosition" :>
+                 QueryParam "timestamp" Text :>
+                   QueryParam "position" Text :>
+                     QueryParam "deviceCookie" Text :>
+                       QueryParam "contentVersion" Text :>
+                         QueryParam "action"
+                           MyLibraryReadingPositionsSetPositionAction
+                           :>
+                           QueryParam "source" Text :>
+                             QueryParam "alt" AltJSON :> Post '[JSON] ()
+
+-- | Sets my reading position information for a volume.
+--
+-- /See:/ 'myLibraryReadingPositionsSetPosition' smart constructor.
+data MyLibraryReadingPositionsSetPosition = MyLibraryReadingPositionsSetPosition
+    { _mlrpspDeviceCookie   :: !(Maybe Text)
+    , _mlrpspContentVersion :: !(Maybe Text)
+    , _mlrpspAction         :: !(Maybe MyLibraryReadingPositionsSetPositionAction)
+    , _mlrpspVolumeId       :: !Text
+    , _mlrpspSource         :: !(Maybe Text)
+    , _mlrpspTimestamp      :: !Text
+    , _mlrpspPosition       :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'MyLibraryReadingPositionsSetPosition' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'mlrpspDeviceCookie'
+--
+-- * 'mlrpspContentVersion'
+--
+-- * 'mlrpspAction'
+--
+-- * 'mlrpspVolumeId'
+--
+-- * 'mlrpspSource'
+--
+-- * 'mlrpspTimestamp'
+--
+-- * 'mlrpspPosition'
+myLibraryReadingPositionsSetPosition
+    :: Text -- ^ 'mlrpspVolumeId'
+    -> Text -- ^ 'mlrpspTimestamp'
+    -> Text -- ^ 'mlrpspPosition'
+    -> MyLibraryReadingPositionsSetPosition
+myLibraryReadingPositionsSetPosition pMlrpspVolumeId_ pMlrpspTimestamp_ pMlrpspPosition_ =
+    MyLibraryReadingPositionsSetPosition
+    { _mlrpspDeviceCookie = Nothing
+    , _mlrpspContentVersion = Nothing
+    , _mlrpspAction = Nothing
+    , _mlrpspVolumeId = pMlrpspVolumeId_
+    , _mlrpspSource = Nothing
+    , _mlrpspTimestamp = pMlrpspTimestamp_
+    , _mlrpspPosition = pMlrpspPosition_
+    }
+
+-- | Random persistent device cookie optional on set position.
+mlrpspDeviceCookie :: Lens' MyLibraryReadingPositionsSetPosition (Maybe Text)
+mlrpspDeviceCookie
+  = lens _mlrpspDeviceCookie
+      (\ s a -> s{_mlrpspDeviceCookie = a})
+
+-- | Volume content version for which this reading position applies.
+mlrpspContentVersion :: Lens' MyLibraryReadingPositionsSetPosition (Maybe Text)
+mlrpspContentVersion
+  = lens _mlrpspContentVersion
+      (\ s a -> s{_mlrpspContentVersion = a})
+
+-- | Action that caused this reading position to be set.
+mlrpspAction :: Lens' MyLibraryReadingPositionsSetPosition (Maybe MyLibraryReadingPositionsSetPositionAction)
+mlrpspAction
+  = lens _mlrpspAction (\ s a -> s{_mlrpspAction = a})
+
+-- | ID of volume for which to update the reading position.
+mlrpspVolumeId :: Lens' MyLibraryReadingPositionsSetPosition Text
+mlrpspVolumeId
+  = lens _mlrpspVolumeId
+      (\ s a -> s{_mlrpspVolumeId = a})
+
+-- | String to identify the originator of this request.
+mlrpspSource :: Lens' MyLibraryReadingPositionsSetPosition (Maybe Text)
+mlrpspSource
+  = lens _mlrpspSource (\ s a -> s{_mlrpspSource = a})
+
+-- | RFC 3339 UTC format timestamp associated with this reading position.
+mlrpspTimestamp :: Lens' MyLibraryReadingPositionsSetPosition Text
+mlrpspTimestamp
+  = lens _mlrpspTimestamp
+      (\ s a -> s{_mlrpspTimestamp = a})
+
+-- | Position string for the new volume reading position.
+mlrpspPosition :: Lens' MyLibraryReadingPositionsSetPosition Text
+mlrpspPosition
+  = lens _mlrpspPosition
+      (\ s a -> s{_mlrpspPosition = a})
+
+instance GoogleRequest
+         MyLibraryReadingPositionsSetPosition where
+        type Rs MyLibraryReadingPositionsSetPosition = ()
+        requestClient
+          MyLibraryReadingPositionsSetPosition{..}
+          = go _mlrpspVolumeId (Just _mlrpspTimestamp)
+              (Just _mlrpspPosition)
+              _mlrpspDeviceCookie
+              _mlrpspContentVersion
+              _mlrpspAction
+              _mlrpspSource
+              (Just AltJSON)
+              booksService
+          where go
+                  = buildClient
+                      (Proxy ::
+                         Proxy MyLibraryReadingPositionsSetPositionResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Books/Notification/Get.hs b/gen/Network/Google/Resource/Books/Notification/Get.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Books/Notification/Get.hs
@@ -0,0 +1,108 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.Books.Notification.Get
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns notification details for a given notification id.
+--
+-- /See:/ <https://developers.google.com/books/docs/v1/getting_started Books API Reference> for @books.notification.get@.
+module Network.Google.Resource.Books.Notification.Get
+    (
+    -- * REST Resource
+      NotificationGetResource
+
+    -- * Creating a Request
+    , notificationGet
+    , NotificationGet
+
+    -- * Request Lenses
+    , ngLocale
+    , ngNotificationId
+    , ngSource
+    ) where
+
+import           Network.Google.Books.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @books.notification.get@ method which the
+-- 'NotificationGet' request conforms to.
+type NotificationGetResource =
+     "books" :>
+       "v1" :>
+         "notification" :>
+           "get" :>
+             QueryParam "notification_id" Text :>
+               QueryParam "locale" Text :>
+                 QueryParam "source" Text :>
+                   QueryParam "alt" AltJSON :> Get '[JSON] Notification
+
+-- | Returns notification details for a given notification id.
+--
+-- /See:/ 'notificationGet' smart constructor.
+data NotificationGet = NotificationGet
+    { _ngLocale         :: !(Maybe Text)
+    , _ngNotificationId :: !Text
+    , _ngSource         :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'NotificationGet' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ngLocale'
+--
+-- * 'ngNotificationId'
+--
+-- * 'ngSource'
+notificationGet
+    :: Text -- ^ 'ngNotificationId'
+    -> NotificationGet
+notificationGet pNgNotificationId_ =
+    NotificationGet
+    { _ngLocale = Nothing
+    , _ngNotificationId = pNgNotificationId_
+    , _ngSource = Nothing
+    }
+
+-- | ISO-639-1 language and ISO-3166-1 country code. Ex: \'en_US\'. Used for
+-- generating notification title and body.
+ngLocale :: Lens' NotificationGet (Maybe Text)
+ngLocale = lens _ngLocale (\ s a -> s{_ngLocale = a})
+
+-- | String to identify the notification.
+ngNotificationId :: Lens' NotificationGet Text
+ngNotificationId
+  = lens _ngNotificationId
+      (\ s a -> s{_ngNotificationId = a})
+
+-- | String to identify the originator of this request.
+ngSource :: Lens' NotificationGet (Maybe Text)
+ngSource = lens _ngSource (\ s a -> s{_ngSource = a})
+
+instance GoogleRequest NotificationGet where
+        type Rs NotificationGet = Notification
+        requestClient NotificationGet{..}
+          = go (Just _ngNotificationId) _ngLocale _ngSource
+              (Just AltJSON)
+              booksService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy NotificationGetResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Books/Onboarding/ListCategories.hs b/gen/Network/Google/Resource/Books/Onboarding/ListCategories.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Books/Onboarding/ListCategories.hs
@@ -0,0 +1,84 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.Books.Onboarding.ListCategories
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- List categories for onboarding experience.
+--
+-- /See:/ <https://developers.google.com/books/docs/v1/getting_started Books API Reference> for @books.onboarding.listCategories@.
+module Network.Google.Resource.Books.Onboarding.ListCategories
+    (
+    -- * REST Resource
+      OnboardingListCategoriesResource
+
+    -- * Creating a Request
+    , onboardingListCategories
+    , OnboardingListCategories
+
+    -- * Request Lenses
+    , olcLocale
+    ) where
+
+import           Network.Google.Books.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @books.onboarding.listCategories@ method which the
+-- 'OnboardingListCategories' request conforms to.
+type OnboardingListCategoriesResource =
+     "books" :>
+       "v1" :>
+         "onboarding" :>
+           "listCategories" :>
+             QueryParam "locale" Text :>
+               QueryParam "alt" AltJSON :> Get '[JSON] Category
+
+-- | List categories for onboarding experience.
+--
+-- /See:/ 'onboardingListCategories' smart constructor.
+newtype OnboardingListCategories = OnboardingListCategories
+    { _olcLocale :: Maybe Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'OnboardingListCategories' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'olcLocale'
+onboardingListCategories
+    :: OnboardingListCategories
+onboardingListCategories =
+    OnboardingListCategories
+    { _olcLocale = Nothing
+    }
+
+-- | ISO-639-1 language and ISO-3166-1 country code. Default is en-US if
+-- unset.
+olcLocale :: Lens' OnboardingListCategories (Maybe Text)
+olcLocale
+  = lens _olcLocale (\ s a -> s{_olcLocale = a})
+
+instance GoogleRequest OnboardingListCategories where
+        type Rs OnboardingListCategories = Category
+        requestClient OnboardingListCategories{..}
+          = go _olcLocale (Just AltJSON) booksService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy OnboardingListCategoriesResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Books/Onboarding/ListCategoryVolumes.hs b/gen/Network/Google/Resource/Books/Onboarding/ListCategoryVolumes.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Books/Onboarding/ListCategoryVolumes.hs
@@ -0,0 +1,144 @@
+{-# 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.Books.Onboarding.ListCategoryVolumes
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- List available volumes under categories for onboarding experience.
+--
+-- /See:/ <https://developers.google.com/books/docs/v1/getting_started Books API Reference> for @books.onboarding.listCategoryVolumes@.
+module Network.Google.Resource.Books.Onboarding.ListCategoryVolumes
+    (
+    -- * REST Resource
+      OnboardingListCategoryVolumesResource
+
+    -- * Creating a Request
+    , onboardingListCategoryVolumes
+    , OnboardingListCategoryVolumes
+
+    -- * Request Lenses
+    , olcvLocale
+    , olcvMaxAllowedMaturityRating
+    , olcvCategoryId
+    , olcvPageToken
+    , olcvPageSize
+    ) where
+
+import           Network.Google.Books.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @books.onboarding.listCategoryVolumes@ method which the
+-- 'OnboardingListCategoryVolumes' request conforms to.
+type OnboardingListCategoryVolumesResource =
+     "books" :>
+       "v1" :>
+         "onboarding" :>
+           "listCategoryVolumes" :>
+             QueryParam "locale" Text :>
+               QueryParam "maxAllowedMaturityRating"
+                 OnboardingListCategoryVolumesMaxAllowedMaturityRating
+                 :>
+                 QueryParams "categoryId" Text :>
+                   QueryParam "pageToken" Text :>
+                     QueryParam "pageSize" (Textual Word32) :>
+                       QueryParam "alt" AltJSON :> Get '[JSON] Volume2
+
+-- | List available volumes under categories for onboarding experience.
+--
+-- /See:/ 'onboardingListCategoryVolumes' smart constructor.
+data OnboardingListCategoryVolumes = OnboardingListCategoryVolumes
+    { _olcvLocale                   :: !(Maybe Text)
+    , _olcvMaxAllowedMaturityRating :: !(Maybe OnboardingListCategoryVolumesMaxAllowedMaturityRating)
+    , _olcvCategoryId               :: !(Maybe [Text])
+    , _olcvPageToken                :: !(Maybe Text)
+    , _olcvPageSize                 :: !(Maybe (Textual Word32))
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'OnboardingListCategoryVolumes' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'olcvLocale'
+--
+-- * 'olcvMaxAllowedMaturityRating'
+--
+-- * 'olcvCategoryId'
+--
+-- * 'olcvPageToken'
+--
+-- * 'olcvPageSize'
+onboardingListCategoryVolumes
+    :: OnboardingListCategoryVolumes
+onboardingListCategoryVolumes =
+    OnboardingListCategoryVolumes
+    { _olcvLocale = Nothing
+    , _olcvMaxAllowedMaturityRating = Nothing
+    , _olcvCategoryId = Nothing
+    , _olcvPageToken = Nothing
+    , _olcvPageSize = Nothing
+    }
+
+-- | ISO-639-1 language and ISO-3166-1 country code. Default is en-US if
+-- unset.
+olcvLocale :: Lens' OnboardingListCategoryVolumes (Maybe Text)
+olcvLocale
+  = lens _olcvLocale (\ s a -> s{_olcvLocale = a})
+
+-- | The maximum allowed maturity rating of returned volumes. Books with a
+-- higher maturity rating are filtered out.
+olcvMaxAllowedMaturityRating :: Lens' OnboardingListCategoryVolumes (Maybe OnboardingListCategoryVolumesMaxAllowedMaturityRating)
+olcvMaxAllowedMaturityRating
+  = lens _olcvMaxAllowedMaturityRating
+      (\ s a -> s{_olcvMaxAllowedMaturityRating = a})
+
+-- | List of category ids requested.
+olcvCategoryId :: Lens' OnboardingListCategoryVolumes [Text]
+olcvCategoryId
+  = lens _olcvCategoryId
+      (\ s a -> s{_olcvCategoryId = a})
+      . _Default
+      . _Coerce
+
+-- | The value of the nextToken from the previous page.
+olcvPageToken :: Lens' OnboardingListCategoryVolumes (Maybe Text)
+olcvPageToken
+  = lens _olcvPageToken
+      (\ s a -> s{_olcvPageToken = a})
+
+-- | Number of maximum results per page to be included in the response.
+olcvPageSize :: Lens' OnboardingListCategoryVolumes (Maybe Word32)
+olcvPageSize
+  = lens _olcvPageSize (\ s a -> s{_olcvPageSize = a})
+      . mapping _Coerce
+
+instance GoogleRequest OnboardingListCategoryVolumes
+         where
+        type Rs OnboardingListCategoryVolumes = Volume2
+        requestClient OnboardingListCategoryVolumes{..}
+          = go _olcvLocale _olcvMaxAllowedMaturityRating
+              (_olcvCategoryId ^. _Default)
+              _olcvPageToken
+              _olcvPageSize
+              (Just AltJSON)
+              booksService
+          where go
+                  = buildClient
+                      (Proxy ::
+                         Proxy OnboardingListCategoryVolumesResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Books/Personalizedstream/Get.hs b/gen/Network/Google/Resource/Books/Personalizedstream/Get.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Books/Personalizedstream/Get.hs
@@ -0,0 +1,111 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.Books.Personalizedstream.Get
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns a stream of personalized book clusters
+--
+-- /See:/ <https://developers.google.com/books/docs/v1/getting_started Books API Reference> for @books.personalizedstream.get@.
+module Network.Google.Resource.Books.Personalizedstream.Get
+    (
+    -- * REST Resource
+      PersonalizedstreamGetResource
+
+    -- * Creating a Request
+    , personalizedstreamGet
+    , PersonalizedstreamGet
+
+    -- * Request Lenses
+    , pgLocale
+    , pgMaxAllowedMaturityRating
+    , pgSource
+    ) where
+
+import           Network.Google.Books.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @books.personalizedstream.get@ method which the
+-- 'PersonalizedstreamGet' request conforms to.
+type PersonalizedstreamGetResource =
+     "books" :>
+       "v1" :>
+         "personalizedstream" :>
+           "get" :>
+             QueryParam "locale" Text :>
+               QueryParam "maxAllowedMaturityRating"
+                 PersonalizedstreamGetMaxAllowedMaturityRating
+                 :>
+                 QueryParam "source" Text :>
+                   QueryParam "alt" AltJSON :>
+                     Get '[JSON] Discoveryclusters
+
+-- | Returns a stream of personalized book clusters
+--
+-- /See:/ 'personalizedstreamGet' smart constructor.
+data PersonalizedstreamGet = PersonalizedstreamGet
+    { _pgLocale                   :: !(Maybe Text)
+    , _pgMaxAllowedMaturityRating :: !(Maybe PersonalizedstreamGetMaxAllowedMaturityRating)
+    , _pgSource                   :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'PersonalizedstreamGet' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pgLocale'
+--
+-- * 'pgMaxAllowedMaturityRating'
+--
+-- * 'pgSource'
+personalizedstreamGet
+    :: PersonalizedstreamGet
+personalizedstreamGet =
+    PersonalizedstreamGet
+    { _pgLocale = Nothing
+    , _pgMaxAllowedMaturityRating = Nothing
+    , _pgSource = Nothing
+    }
+
+-- | ISO-639-1 language and ISO-3166-1 country code. Ex: \'en_US\'. Used for
+-- generating recommendations.
+pgLocale :: Lens' PersonalizedstreamGet (Maybe Text)
+pgLocale = lens _pgLocale (\ s a -> s{_pgLocale = a})
+
+-- | The maximum allowed maturity rating of returned recommendations. Books
+-- with a higher maturity rating are filtered out.
+pgMaxAllowedMaturityRating :: Lens' PersonalizedstreamGet (Maybe PersonalizedstreamGetMaxAllowedMaturityRating)
+pgMaxAllowedMaturityRating
+  = lens _pgMaxAllowedMaturityRating
+      (\ s a -> s{_pgMaxAllowedMaturityRating = a})
+
+-- | String to identify the originator of this request.
+pgSource :: Lens' PersonalizedstreamGet (Maybe Text)
+pgSource = lens _pgSource (\ s a -> s{_pgSource = a})
+
+instance GoogleRequest PersonalizedstreamGet where
+        type Rs PersonalizedstreamGet = Discoveryclusters
+        requestClient PersonalizedstreamGet{..}
+          = go _pgLocale _pgMaxAllowedMaturityRating _pgSource
+              (Just AltJSON)
+              booksService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy PersonalizedstreamGetResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Books/PromoOffer/Accept.hs b/gen/Network/Google/Resource/Books/PromoOffer/Accept.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Books/PromoOffer/Accept.hs
@@ -0,0 +1,165 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.Books.PromoOffer.Accept
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- -- |
+--
+-- /See:/ <https://developers.google.com/books/docs/v1/getting_started Books API Reference> for @books.promooffer.accept@.
+module Network.Google.Resource.Books.PromoOffer.Accept
+    (
+    -- * REST Resource
+      PromoOfferAcceptResource
+
+    -- * Creating a Request
+    , promoOfferAccept
+    , PromoOfferAccept
+
+    -- * Request Lenses
+    , poaManufacturer
+    , poaSerial
+    , poaDevice
+    , poaModel
+    , poaVolumeId
+    , poaOfferId
+    , poaProduct
+    , poaAndroidId
+    ) where
+
+import           Network.Google.Books.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @books.promooffer.accept@ method which the
+-- 'PromoOfferAccept' request conforms to.
+type PromoOfferAcceptResource =
+     "books" :>
+       "v1" :>
+         "promooffer" :>
+           "accept" :>
+             QueryParam "manufacturer" Text :>
+               QueryParam "serial" Text :>
+                 QueryParam "device" Text :>
+                   QueryParam "model" Text :>
+                     QueryParam "volumeId" Text :>
+                       QueryParam "offerId" Text :>
+                         QueryParam "product" Text :>
+                           QueryParam "androidId" Text :>
+                             QueryParam "alt" AltJSON :> Post '[JSON] ()
+
+-- |
+--
+-- /See:/ 'promoOfferAccept' smart constructor.
+data PromoOfferAccept = PromoOfferAccept
+    { _poaManufacturer :: !(Maybe Text)
+    , _poaSerial       :: !(Maybe Text)
+    , _poaDevice       :: !(Maybe Text)
+    , _poaModel        :: !(Maybe Text)
+    , _poaVolumeId     :: !(Maybe Text)
+    , _poaOfferId      :: !(Maybe Text)
+    , _poaProduct      :: !(Maybe Text)
+    , _poaAndroidId    :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'PromoOfferAccept' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'poaManufacturer'
+--
+-- * 'poaSerial'
+--
+-- * 'poaDevice'
+--
+-- * 'poaModel'
+--
+-- * 'poaVolumeId'
+--
+-- * 'poaOfferId'
+--
+-- * 'poaProduct'
+--
+-- * 'poaAndroidId'
+promoOfferAccept
+    :: PromoOfferAccept
+promoOfferAccept =
+    PromoOfferAccept
+    { _poaManufacturer = Nothing
+    , _poaSerial = Nothing
+    , _poaDevice = Nothing
+    , _poaModel = Nothing
+    , _poaVolumeId = Nothing
+    , _poaOfferId = Nothing
+    , _poaProduct = Nothing
+    , _poaAndroidId = Nothing
+    }
+
+-- | device manufacturer
+poaManufacturer :: Lens' PromoOfferAccept (Maybe Text)
+poaManufacturer
+  = lens _poaManufacturer
+      (\ s a -> s{_poaManufacturer = a})
+
+-- | device serial
+poaSerial :: Lens' PromoOfferAccept (Maybe Text)
+poaSerial
+  = lens _poaSerial (\ s a -> s{_poaSerial = a})
+
+-- | device device
+poaDevice :: Lens' PromoOfferAccept (Maybe Text)
+poaDevice
+  = lens _poaDevice (\ s a -> s{_poaDevice = a})
+
+-- | device model
+poaModel :: Lens' PromoOfferAccept (Maybe Text)
+poaModel = lens _poaModel (\ s a -> s{_poaModel = a})
+
+-- | Volume id to exercise the offer
+poaVolumeId :: Lens' PromoOfferAccept (Maybe Text)
+poaVolumeId
+  = lens _poaVolumeId (\ s a -> s{_poaVolumeId = a})
+
+poaOfferId :: Lens' PromoOfferAccept (Maybe Text)
+poaOfferId
+  = lens _poaOfferId (\ s a -> s{_poaOfferId = a})
+
+-- | device product
+poaProduct :: Lens' PromoOfferAccept (Maybe Text)
+poaProduct
+  = lens _poaProduct (\ s a -> s{_poaProduct = a})
+
+-- | device android_id
+poaAndroidId :: Lens' PromoOfferAccept (Maybe Text)
+poaAndroidId
+  = lens _poaAndroidId (\ s a -> s{_poaAndroidId = a})
+
+instance GoogleRequest PromoOfferAccept where
+        type Rs PromoOfferAccept = ()
+        requestClient PromoOfferAccept{..}
+          = go _poaManufacturer _poaSerial _poaDevice _poaModel
+              _poaVolumeId
+              _poaOfferId
+              _poaProduct
+              _poaAndroidId
+              (Just AltJSON)
+              booksService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy PromoOfferAcceptResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Books/PromoOffer/Dismiss.hs b/gen/Network/Google/Resource/Books/PromoOffer/Dismiss.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Books/PromoOffer/Dismiss.hs
@@ -0,0 +1,154 @@
+{-# 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.Books.PromoOffer.Dismiss
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- -- |
+--
+-- /See:/ <https://developers.google.com/books/docs/v1/getting_started Books API Reference> for @books.promooffer.dismiss@.
+module Network.Google.Resource.Books.PromoOffer.Dismiss
+    (
+    -- * REST Resource
+      PromoOfferDismissResource
+
+    -- * Creating a Request
+    , promoOfferDismiss
+    , PromoOfferDismiss
+
+    -- * Request Lenses
+    , podManufacturer
+    , podSerial
+    , podDevice
+    , podModel
+    , podOfferId
+    , podProduct
+    , podAndroidId
+    ) where
+
+import           Network.Google.Books.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @books.promooffer.dismiss@ method which the
+-- 'PromoOfferDismiss' request conforms to.
+type PromoOfferDismissResource =
+     "books" :>
+       "v1" :>
+         "promooffer" :>
+           "dismiss" :>
+             QueryParam "manufacturer" Text :>
+               QueryParam "serial" Text :>
+                 QueryParam "device" Text :>
+                   QueryParam "model" Text :>
+                     QueryParam "offerId" Text :>
+                       QueryParam "product" Text :>
+                         QueryParam "androidId" Text :>
+                           QueryParam "alt" AltJSON :> Post '[JSON] ()
+
+-- |
+--
+-- /See:/ 'promoOfferDismiss' smart constructor.
+data PromoOfferDismiss = PromoOfferDismiss
+    { _podManufacturer :: !(Maybe Text)
+    , _podSerial       :: !(Maybe Text)
+    , _podDevice       :: !(Maybe Text)
+    , _podModel        :: !(Maybe Text)
+    , _podOfferId      :: !(Maybe Text)
+    , _podProduct      :: !(Maybe Text)
+    , _podAndroidId    :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'PromoOfferDismiss' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'podManufacturer'
+--
+-- * 'podSerial'
+--
+-- * 'podDevice'
+--
+-- * 'podModel'
+--
+-- * 'podOfferId'
+--
+-- * 'podProduct'
+--
+-- * 'podAndroidId'
+promoOfferDismiss
+    :: PromoOfferDismiss
+promoOfferDismiss =
+    PromoOfferDismiss
+    { _podManufacturer = Nothing
+    , _podSerial = Nothing
+    , _podDevice = Nothing
+    , _podModel = Nothing
+    , _podOfferId = Nothing
+    , _podProduct = Nothing
+    , _podAndroidId = Nothing
+    }
+
+-- | device manufacturer
+podManufacturer :: Lens' PromoOfferDismiss (Maybe Text)
+podManufacturer
+  = lens _podManufacturer
+      (\ s a -> s{_podManufacturer = a})
+
+-- | device serial
+podSerial :: Lens' PromoOfferDismiss (Maybe Text)
+podSerial
+  = lens _podSerial (\ s a -> s{_podSerial = a})
+
+-- | device device
+podDevice :: Lens' PromoOfferDismiss (Maybe Text)
+podDevice
+  = lens _podDevice (\ s a -> s{_podDevice = a})
+
+-- | device model
+podModel :: Lens' PromoOfferDismiss (Maybe Text)
+podModel = lens _podModel (\ s a -> s{_podModel = a})
+
+-- | Offer to dimiss
+podOfferId :: Lens' PromoOfferDismiss (Maybe Text)
+podOfferId
+  = lens _podOfferId (\ s a -> s{_podOfferId = a})
+
+-- | device product
+podProduct :: Lens' PromoOfferDismiss (Maybe Text)
+podProduct
+  = lens _podProduct (\ s a -> s{_podProduct = a})
+
+-- | device android_id
+podAndroidId :: Lens' PromoOfferDismiss (Maybe Text)
+podAndroidId
+  = lens _podAndroidId (\ s a -> s{_podAndroidId = a})
+
+instance GoogleRequest PromoOfferDismiss where
+        type Rs PromoOfferDismiss = ()
+        requestClient PromoOfferDismiss{..}
+          = go _podManufacturer _podSerial _podDevice _podModel
+              _podOfferId
+              _podProduct
+              _podAndroidId
+              (Just AltJSON)
+              booksService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy PromoOfferDismissResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Books/PromoOffer/Get.hs b/gen/Network/Google/Resource/Books/PromoOffer/Get.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Books/PromoOffer/Get.hs
@@ -0,0 +1,141 @@
+{-# 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.Books.PromoOffer.Get
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns a list of promo offers available to the user
+--
+-- /See:/ <https://developers.google.com/books/docs/v1/getting_started Books API Reference> for @books.promooffer.get@.
+module Network.Google.Resource.Books.PromoOffer.Get
+    (
+    -- * REST Resource
+      PromoOfferGetResource
+
+    -- * Creating a Request
+    , promoOfferGet
+    , PromoOfferGet
+
+    -- * Request Lenses
+    , pogManufacturer
+    , pogSerial
+    , pogDevice
+    , pogModel
+    , pogProduct
+    , pogAndroidId
+    ) where
+
+import           Network.Google.Books.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @books.promooffer.get@ method which the
+-- 'PromoOfferGet' request conforms to.
+type PromoOfferGetResource =
+     "books" :>
+       "v1" :>
+         "promooffer" :>
+           "get" :>
+             QueryParam "manufacturer" Text :>
+               QueryParam "serial" Text :>
+                 QueryParam "device" Text :>
+                   QueryParam "model" Text :>
+                     QueryParam "product" Text :>
+                       QueryParam "androidId" Text :>
+                         QueryParam "alt" AltJSON :> Get '[JSON] Offers
+
+-- | Returns a list of promo offers available to the user
+--
+-- /See:/ 'promoOfferGet' smart constructor.
+data PromoOfferGet = PromoOfferGet
+    { _pogManufacturer :: !(Maybe Text)
+    , _pogSerial       :: !(Maybe Text)
+    , _pogDevice       :: !(Maybe Text)
+    , _pogModel        :: !(Maybe Text)
+    , _pogProduct      :: !(Maybe Text)
+    , _pogAndroidId    :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'PromoOfferGet' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pogManufacturer'
+--
+-- * 'pogSerial'
+--
+-- * 'pogDevice'
+--
+-- * 'pogModel'
+--
+-- * 'pogProduct'
+--
+-- * 'pogAndroidId'
+promoOfferGet
+    :: PromoOfferGet
+promoOfferGet =
+    PromoOfferGet
+    { _pogManufacturer = Nothing
+    , _pogSerial = Nothing
+    , _pogDevice = Nothing
+    , _pogModel = Nothing
+    , _pogProduct = Nothing
+    , _pogAndroidId = Nothing
+    }
+
+-- | device manufacturer
+pogManufacturer :: Lens' PromoOfferGet (Maybe Text)
+pogManufacturer
+  = lens _pogManufacturer
+      (\ s a -> s{_pogManufacturer = a})
+
+-- | device serial
+pogSerial :: Lens' PromoOfferGet (Maybe Text)
+pogSerial
+  = lens _pogSerial (\ s a -> s{_pogSerial = a})
+
+-- | device device
+pogDevice :: Lens' PromoOfferGet (Maybe Text)
+pogDevice
+  = lens _pogDevice (\ s a -> s{_pogDevice = a})
+
+-- | device model
+pogModel :: Lens' PromoOfferGet (Maybe Text)
+pogModel = lens _pogModel (\ s a -> s{_pogModel = a})
+
+-- | device product
+pogProduct :: Lens' PromoOfferGet (Maybe Text)
+pogProduct
+  = lens _pogProduct (\ s a -> s{_pogProduct = a})
+
+-- | device android_id
+pogAndroidId :: Lens' PromoOfferGet (Maybe Text)
+pogAndroidId
+  = lens _pogAndroidId (\ s a -> s{_pogAndroidId = a})
+
+instance GoogleRequest PromoOfferGet where
+        type Rs PromoOfferGet = Offers
+        requestClient PromoOfferGet{..}
+          = go _pogManufacturer _pogSerial _pogDevice _pogModel
+              _pogProduct
+              _pogAndroidId
+              (Just AltJSON)
+              booksService
+          where go
+                  = buildClient (Proxy :: Proxy PromoOfferGetResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Books/Volumes/Associated/List.hs b/gen/Network/Google/Resource/Books/Volumes/Associated/List.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Books/Volumes/Associated/List.hs
@@ -0,0 +1,140 @@
+{-# 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.Books.Volumes.Associated.List
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Return a list of associated books.
+--
+-- /See:/ <https://developers.google.com/books/docs/v1/getting_started Books API Reference> for @books.volumes.associated.list@.
+module Network.Google.Resource.Books.Volumes.Associated.List
+    (
+    -- * REST Resource
+      VolumesAssociatedListResource
+
+    -- * Creating a Request
+    , volumesAssociatedList
+    , VolumesAssociatedList
+
+    -- * Request Lenses
+    , valLocale
+    , valMaxAllowedMaturityRating
+    , valVolumeId
+    , valSource
+    , valAssociation
+    ) where
+
+import           Network.Google.Books.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @books.volumes.associated.list@ method which the
+-- 'VolumesAssociatedList' request conforms to.
+type VolumesAssociatedListResource =
+     "books" :>
+       "v1" :>
+         "volumes" :>
+           Capture "volumeId" Text :>
+             "associated" :>
+               QueryParam "locale" Text :>
+                 QueryParam "maxAllowedMaturityRating"
+                   VolumesAssociatedListMaxAllowedMaturityRating
+                   :>
+                   QueryParam "source" Text :>
+                     QueryParam "association"
+                       VolumesAssociatedListAssociation
+                       :> QueryParam "alt" AltJSON :> Get '[JSON] Volumes
+
+-- | Return a list of associated books.
+--
+-- /See:/ 'volumesAssociatedList' smart constructor.
+data VolumesAssociatedList = VolumesAssociatedList
+    { _valLocale                   :: !(Maybe Text)
+    , _valMaxAllowedMaturityRating :: !(Maybe VolumesAssociatedListMaxAllowedMaturityRating)
+    , _valVolumeId                 :: !Text
+    , _valSource                   :: !(Maybe Text)
+    , _valAssociation              :: !(Maybe VolumesAssociatedListAssociation)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'VolumesAssociatedList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'valLocale'
+--
+-- * 'valMaxAllowedMaturityRating'
+--
+-- * 'valVolumeId'
+--
+-- * 'valSource'
+--
+-- * 'valAssociation'
+volumesAssociatedList
+    :: Text -- ^ 'valVolumeId'
+    -> VolumesAssociatedList
+volumesAssociatedList pValVolumeId_ =
+    VolumesAssociatedList
+    { _valLocale = Nothing
+    , _valMaxAllowedMaturityRating = Nothing
+    , _valVolumeId = pValVolumeId_
+    , _valSource = Nothing
+    , _valAssociation = Nothing
+    }
+
+-- | ISO-639-1 language and ISO-3166-1 country code. Ex: \'en_US\'. Used for
+-- generating recommendations.
+valLocale :: Lens' VolumesAssociatedList (Maybe Text)
+valLocale
+  = lens _valLocale (\ s a -> s{_valLocale = a})
+
+-- | The maximum allowed maturity rating of returned recommendations. Books
+-- with a higher maturity rating are filtered out.
+valMaxAllowedMaturityRating :: Lens' VolumesAssociatedList (Maybe VolumesAssociatedListMaxAllowedMaturityRating)
+valMaxAllowedMaturityRating
+  = lens _valMaxAllowedMaturityRating
+      (\ s a -> s{_valMaxAllowedMaturityRating = a})
+
+-- | ID of the source volume.
+valVolumeId :: Lens' VolumesAssociatedList Text
+valVolumeId
+  = lens _valVolumeId (\ s a -> s{_valVolumeId = a})
+
+-- | String to identify the originator of this request.
+valSource :: Lens' VolumesAssociatedList (Maybe Text)
+valSource
+  = lens _valSource (\ s a -> s{_valSource = a})
+
+-- | Association type.
+valAssociation :: Lens' VolumesAssociatedList (Maybe VolumesAssociatedListAssociation)
+valAssociation
+  = lens _valAssociation
+      (\ s a -> s{_valAssociation = a})
+
+instance GoogleRequest VolumesAssociatedList where
+        type Rs VolumesAssociatedList = Volumes
+        requestClient VolumesAssociatedList{..}
+          = go _valVolumeId _valLocale
+              _valMaxAllowedMaturityRating
+              _valSource
+              _valAssociation
+              (Just AltJSON)
+              booksService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy VolumesAssociatedListResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Books/Volumes/Get.hs b/gen/Network/Google/Resource/Books/Volumes/Get.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Books/Volumes/Get.hs
@@ -0,0 +1,140 @@
+{-# 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.Books.Volumes.Get
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Gets volume information for a single volume.
+--
+-- /See:/ <https://developers.google.com/books/docs/v1/getting_started Books API Reference> for @books.volumes.get@.
+module Network.Google.Resource.Books.Volumes.Get
+    (
+    -- * REST Resource
+      VolumesGetResource
+
+    -- * Creating a Request
+    , volumesGet
+    , VolumesGet
+
+    -- * Request Lenses
+    , vgCountry
+    , vgPartner
+    , vgVolumeId
+    , vgSource
+    , vgProjection
+    , vgUserLibraryConsistentRead
+    ) where
+
+import           Network.Google.Books.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @books.volumes.get@ method which the
+-- 'VolumesGet' request conforms to.
+type VolumesGetResource =
+     "books" :>
+       "v1" :>
+         "volumes" :>
+           Capture "volumeId" Text :>
+             QueryParam "country" Text :>
+               QueryParam "partner" Text :>
+                 QueryParam "source" Text :>
+                   QueryParam "projection" VolumesGetProjection :>
+                     QueryParam "user_library_consistent_read" Bool :>
+                       QueryParam "alt" AltJSON :> Get '[JSON] Volume
+
+-- | Gets volume information for a single volume.
+--
+-- /See:/ 'volumesGet' smart constructor.
+data VolumesGet = VolumesGet
+    { _vgCountry                   :: !(Maybe Text)
+    , _vgPartner                   :: !(Maybe Text)
+    , _vgVolumeId                  :: !Text
+    , _vgSource                    :: !(Maybe Text)
+    , _vgProjection                :: !(Maybe VolumesGetProjection)
+    , _vgUserLibraryConsistentRead :: !(Maybe Bool)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'VolumesGet' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'vgCountry'
+--
+-- * 'vgPartner'
+--
+-- * 'vgVolumeId'
+--
+-- * 'vgSource'
+--
+-- * 'vgProjection'
+--
+-- * 'vgUserLibraryConsistentRead'
+volumesGet
+    :: Text -- ^ 'vgVolumeId'
+    -> VolumesGet
+volumesGet pVgVolumeId_ =
+    VolumesGet
+    { _vgCountry = Nothing
+    , _vgPartner = Nothing
+    , _vgVolumeId = pVgVolumeId_
+    , _vgSource = Nothing
+    , _vgProjection = Nothing
+    , _vgUserLibraryConsistentRead = Nothing
+    }
+
+-- | ISO-3166-1 code to override the IP-based location.
+vgCountry :: Lens' VolumesGet (Maybe Text)
+vgCountry
+  = lens _vgCountry (\ s a -> s{_vgCountry = a})
+
+-- | Brand results for partner ID.
+vgPartner :: Lens' VolumesGet (Maybe Text)
+vgPartner
+  = lens _vgPartner (\ s a -> s{_vgPartner = a})
+
+-- | ID of volume to retrieve.
+vgVolumeId :: Lens' VolumesGet Text
+vgVolumeId
+  = lens _vgVolumeId (\ s a -> s{_vgVolumeId = a})
+
+-- | String to identify the originator of this request.
+vgSource :: Lens' VolumesGet (Maybe Text)
+vgSource = lens _vgSource (\ s a -> s{_vgSource = a})
+
+-- | Restrict information returned to a set of selected fields.
+vgProjection :: Lens' VolumesGet (Maybe VolumesGetProjection)
+vgProjection
+  = lens _vgProjection (\ s a -> s{_vgProjection = a})
+
+vgUserLibraryConsistentRead :: Lens' VolumesGet (Maybe Bool)
+vgUserLibraryConsistentRead
+  = lens _vgUserLibraryConsistentRead
+      (\ s a -> s{_vgUserLibraryConsistentRead = a})
+
+instance GoogleRequest VolumesGet where
+        type Rs VolumesGet = Volume
+        requestClient VolumesGet{..}
+          = go _vgVolumeId _vgCountry _vgPartner _vgSource
+              _vgProjection
+              _vgUserLibraryConsistentRead
+              (Just AltJSON)
+              booksService
+          where go
+                  = buildClient (Proxy :: Proxy VolumesGetResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Books/Volumes/List.hs b/gen/Network/Google/Resource/Books/Volumes/List.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Books/Volumes/List.hs
@@ -0,0 +1,232 @@
+{-# 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.Books.Volumes.List
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Performs a book search.
+--
+-- /See:/ <https://developers.google.com/books/docs/v1/getting_started Books API Reference> for @books.volumes.list@.
+module Network.Google.Resource.Books.Volumes.List
+    (
+    -- * REST Resource
+      VolumesListResource
+
+    -- * Creating a Request
+    , volumesList
+    , VolumesList
+
+    -- * Request Lenses
+    , vlOrderBy
+    , vlLibraryRestrict
+    , vlPartner
+    , vlQ
+    , vlDownload
+    , vlSource
+    , vlProjection
+    , vlFilter
+    , vlLangRestrict
+    , vlStartIndex
+    , vlMaxResults
+    , vlShowPreOrders
+    , vlPrintType
+    ) where
+
+import           Network.Google.Books.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @books.volumes.list@ method which the
+-- 'VolumesList' request conforms to.
+type VolumesListResource =
+     "books" :>
+       "v1" :>
+         "volumes" :>
+           QueryParam "q" Text :>
+             QueryParam "orderBy" VolumesListOrderBy :>
+               QueryParam "libraryRestrict"
+                 VolumesListLibraryRestrict
+                 :>
+                 QueryParam "partner" Text :>
+                   QueryParam "download" VolumesListDownload :>
+                     QueryParam "source" Text :>
+                       QueryParam "projection" VolumesListProjection :>
+                         QueryParam "filter" VolumesListFilter :>
+                           QueryParam "langRestrict" Text :>
+                             QueryParam "startIndex" (Textual Word32) :>
+                               QueryParam "maxResults" (Textual Word32) :>
+                                 QueryParam "showPreorders" Bool :>
+                                   QueryParam "printType" VolumesListPrintType
+                                     :>
+                                     QueryParam "alt" AltJSON :>
+                                       Get '[JSON] Volumes
+
+-- | Performs a book search.
+--
+-- /See:/ 'volumesList' smart constructor.
+data VolumesList = VolumesList
+    { _vlOrderBy         :: !(Maybe VolumesListOrderBy)
+    , _vlLibraryRestrict :: !(Maybe VolumesListLibraryRestrict)
+    , _vlPartner         :: !(Maybe Text)
+    , _vlQ               :: !Text
+    , _vlDownload        :: !(Maybe VolumesListDownload)
+    , _vlSource          :: !(Maybe Text)
+    , _vlProjection      :: !(Maybe VolumesListProjection)
+    , _vlFilter          :: !(Maybe VolumesListFilter)
+    , _vlLangRestrict    :: !(Maybe Text)
+    , _vlStartIndex      :: !(Maybe (Textual Word32))
+    , _vlMaxResults      :: !(Maybe (Textual Word32))
+    , _vlShowPreOrders   :: !(Maybe Bool)
+    , _vlPrintType       :: !(Maybe VolumesListPrintType)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'VolumesList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'vlOrderBy'
+--
+-- * 'vlLibraryRestrict'
+--
+-- * 'vlPartner'
+--
+-- * 'vlQ'
+--
+-- * 'vlDownload'
+--
+-- * 'vlSource'
+--
+-- * 'vlProjection'
+--
+-- * 'vlFilter'
+--
+-- * 'vlLangRestrict'
+--
+-- * 'vlStartIndex'
+--
+-- * 'vlMaxResults'
+--
+-- * 'vlShowPreOrders'
+--
+-- * 'vlPrintType'
+volumesList
+    :: Text -- ^ 'vlQ'
+    -> VolumesList
+volumesList pVlQ_ =
+    VolumesList
+    { _vlOrderBy = Nothing
+    , _vlLibraryRestrict = Nothing
+    , _vlPartner = Nothing
+    , _vlQ = pVlQ_
+    , _vlDownload = Nothing
+    , _vlSource = Nothing
+    , _vlProjection = Nothing
+    , _vlFilter = Nothing
+    , _vlLangRestrict = Nothing
+    , _vlStartIndex = Nothing
+    , _vlMaxResults = Nothing
+    , _vlShowPreOrders = Nothing
+    , _vlPrintType = Nothing
+    }
+
+-- | Sort search results.
+vlOrderBy :: Lens' VolumesList (Maybe VolumesListOrderBy)
+vlOrderBy
+  = lens _vlOrderBy (\ s a -> s{_vlOrderBy = a})
+
+-- | Restrict search to this user\'s library.
+vlLibraryRestrict :: Lens' VolumesList (Maybe VolumesListLibraryRestrict)
+vlLibraryRestrict
+  = lens _vlLibraryRestrict
+      (\ s a -> s{_vlLibraryRestrict = a})
+
+-- | Restrict and brand results for partner ID.
+vlPartner :: Lens' VolumesList (Maybe Text)
+vlPartner
+  = lens _vlPartner (\ s a -> s{_vlPartner = a})
+
+-- | Full-text search query string.
+vlQ :: Lens' VolumesList Text
+vlQ = lens _vlQ (\ s a -> s{_vlQ = a})
+
+-- | Restrict to volumes by download availability.
+vlDownload :: Lens' VolumesList (Maybe VolumesListDownload)
+vlDownload
+  = lens _vlDownload (\ s a -> s{_vlDownload = a})
+
+-- | String to identify the originator of this request.
+vlSource :: Lens' VolumesList (Maybe Text)
+vlSource = lens _vlSource (\ s a -> s{_vlSource = a})
+
+-- | Restrict information returned to a set of selected fields.
+vlProjection :: Lens' VolumesList (Maybe VolumesListProjection)
+vlProjection
+  = lens _vlProjection (\ s a -> s{_vlProjection = a})
+
+-- | Filter search results.
+vlFilter :: Lens' VolumesList (Maybe VolumesListFilter)
+vlFilter = lens _vlFilter (\ s a -> s{_vlFilter = a})
+
+-- | Restrict results to books with this language code.
+vlLangRestrict :: Lens' VolumesList (Maybe Text)
+vlLangRestrict
+  = lens _vlLangRestrict
+      (\ s a -> s{_vlLangRestrict = a})
+
+-- | Index of the first result to return (starts at 0)
+vlStartIndex :: Lens' VolumesList (Maybe Word32)
+vlStartIndex
+  = lens _vlStartIndex (\ s a -> s{_vlStartIndex = a})
+      . mapping _Coerce
+
+-- | Maximum number of results to return.
+vlMaxResults :: Lens' VolumesList (Maybe Word32)
+vlMaxResults
+  = lens _vlMaxResults (\ s a -> s{_vlMaxResults = a})
+      . mapping _Coerce
+
+-- | Set to true to show books available for preorder. Defaults to false.
+vlShowPreOrders :: Lens' VolumesList (Maybe Bool)
+vlShowPreOrders
+  = lens _vlShowPreOrders
+      (\ s a -> s{_vlShowPreOrders = a})
+
+-- | Restrict to books or magazines.
+vlPrintType :: Lens' VolumesList (Maybe VolumesListPrintType)
+vlPrintType
+  = lens _vlPrintType (\ s a -> s{_vlPrintType = a})
+
+instance GoogleRequest VolumesList where
+        type Rs VolumesList = Volumes
+        requestClient VolumesList{..}
+          = go (Just _vlQ) _vlOrderBy _vlLibraryRestrict
+              _vlPartner
+              _vlDownload
+              _vlSource
+              _vlProjection
+              _vlFilter
+              _vlLangRestrict
+              _vlStartIndex
+              _vlMaxResults
+              _vlShowPreOrders
+              _vlPrintType
+              (Just AltJSON)
+              booksService
+          where go
+                  = buildClient (Proxy :: Proxy VolumesListResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Books/Volumes/Mybooks/List.hs b/gen/Network/Google/Resource/Books/Volumes/Mybooks/List.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Books/Volumes/Mybooks/List.hs
@@ -0,0 +1,161 @@
+{-# 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.Books.Volumes.Mybooks.List
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Return a list of books in My Library.
+--
+-- /See:/ <https://developers.google.com/books/docs/v1/getting_started Books API Reference> for @books.volumes.mybooks.list@.
+module Network.Google.Resource.Books.Volumes.Mybooks.List
+    (
+    -- * REST Resource
+      VolumesMybooksListResource
+
+    -- * Creating a Request
+    , volumesMybooksList
+    , VolumesMybooksList
+
+    -- * Request Lenses
+    , vmlProcessingState
+    , vmlAcquireMethod
+    , vmlLocale
+    , vmlSource
+    , vmlStartIndex
+    , vmlMaxResults
+    ) where
+
+import           Network.Google.Books.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @books.volumes.mybooks.list@ method which the
+-- 'VolumesMybooksList' request conforms to.
+type VolumesMybooksListResource =
+     "books" :>
+       "v1" :>
+         "volumes" :>
+           "mybooks" :>
+             QueryParams "processingState"
+               VolumesMybooksListProcessingState
+               :>
+               QueryParams "acquireMethod"
+                 VolumesMybooksListAcquireMethod
+                 :>
+                 QueryParam "locale" Text :>
+                   QueryParam "source" Text :>
+                     QueryParam "startIndex" (Textual Word32) :>
+                       QueryParam "maxResults" (Textual Word32) :>
+                         QueryParam "alt" AltJSON :> Get '[JSON] Volumes
+
+-- | Return a list of books in My Library.
+--
+-- /See:/ 'volumesMybooksList' smart constructor.
+data VolumesMybooksList = VolumesMybooksList
+    { _vmlProcessingState :: !(Maybe [VolumesMybooksListProcessingState])
+    , _vmlAcquireMethod   :: !(Maybe [VolumesMybooksListAcquireMethod])
+    , _vmlLocale          :: !(Maybe Text)
+    , _vmlSource          :: !(Maybe Text)
+    , _vmlStartIndex      :: !(Maybe (Textual Word32))
+    , _vmlMaxResults      :: !(Maybe (Textual Word32))
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'VolumesMybooksList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'vmlProcessingState'
+--
+-- * 'vmlAcquireMethod'
+--
+-- * 'vmlLocale'
+--
+-- * 'vmlSource'
+--
+-- * 'vmlStartIndex'
+--
+-- * 'vmlMaxResults'
+volumesMybooksList
+    :: VolumesMybooksList
+volumesMybooksList =
+    VolumesMybooksList
+    { _vmlProcessingState = Nothing
+    , _vmlAcquireMethod = Nothing
+    , _vmlLocale = Nothing
+    , _vmlSource = Nothing
+    , _vmlStartIndex = Nothing
+    , _vmlMaxResults = Nothing
+    }
+
+-- | The processing state of the user uploaded volumes to be returned.
+-- Applicable only if the UPLOADED is specified in the acquireMethod.
+vmlProcessingState :: Lens' VolumesMybooksList [VolumesMybooksListProcessingState]
+vmlProcessingState
+  = lens _vmlProcessingState
+      (\ s a -> s{_vmlProcessingState = a})
+      . _Default
+      . _Coerce
+
+-- | How the book was aquired
+vmlAcquireMethod :: Lens' VolumesMybooksList [VolumesMybooksListAcquireMethod]
+vmlAcquireMethod
+  = lens _vmlAcquireMethod
+      (\ s a -> s{_vmlAcquireMethod = a})
+      . _Default
+      . _Coerce
+
+-- | ISO-639-1 language and ISO-3166-1 country code. Ex:\'en_US\'. Used for
+-- generating recommendations.
+vmlLocale :: Lens' VolumesMybooksList (Maybe Text)
+vmlLocale
+  = lens _vmlLocale (\ s a -> s{_vmlLocale = a})
+
+-- | String to identify the originator of this request.
+vmlSource :: Lens' VolumesMybooksList (Maybe Text)
+vmlSource
+  = lens _vmlSource (\ s a -> s{_vmlSource = a})
+
+-- | Index of the first result to return (starts at 0)
+vmlStartIndex :: Lens' VolumesMybooksList (Maybe Word32)
+vmlStartIndex
+  = lens _vmlStartIndex
+      (\ s a -> s{_vmlStartIndex = a})
+      . mapping _Coerce
+
+-- | Maximum number of results to return.
+vmlMaxResults :: Lens' VolumesMybooksList (Maybe Word32)
+vmlMaxResults
+  = lens _vmlMaxResults
+      (\ s a -> s{_vmlMaxResults = a})
+      . mapping _Coerce
+
+instance GoogleRequest VolumesMybooksList where
+        type Rs VolumesMybooksList = Volumes
+        requestClient VolumesMybooksList{..}
+          = go (_vmlProcessingState ^. _Default)
+              (_vmlAcquireMethod ^. _Default)
+              _vmlLocale
+              _vmlSource
+              _vmlStartIndex
+              _vmlMaxResults
+              (Just AltJSON)
+              booksService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy VolumesMybooksListResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Books/Volumes/Recommended/List.hs b/gen/Network/Google/Resource/Books/Volumes/Recommended/List.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Books/Volumes/Recommended/List.hs
@@ -0,0 +1,113 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.Books.Volumes.Recommended.List
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Return a list of recommended books for the current user.
+--
+-- /See:/ <https://developers.google.com/books/docs/v1/getting_started Books API Reference> for @books.volumes.recommended.list@.
+module Network.Google.Resource.Books.Volumes.Recommended.List
+    (
+    -- * REST Resource
+      VolumesRecommendedListResource
+
+    -- * Creating a Request
+    , volumesRecommendedList
+    , VolumesRecommendedList
+
+    -- * Request Lenses
+    , vrlLocale
+    , vrlMaxAllowedMaturityRating
+    , vrlSource
+    ) where
+
+import           Network.Google.Books.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @books.volumes.recommended.list@ method which the
+-- 'VolumesRecommendedList' request conforms to.
+type VolumesRecommendedListResource =
+     "books" :>
+       "v1" :>
+         "volumes" :>
+           "recommended" :>
+             QueryParam "locale" Text :>
+               QueryParam "maxAllowedMaturityRating"
+                 VolumesRecommendedListMaxAllowedMaturityRating
+                 :>
+                 QueryParam "source" Text :>
+                   QueryParam "alt" AltJSON :> Get '[JSON] Volumes
+
+-- | Return a list of recommended books for the current user.
+--
+-- /See:/ 'volumesRecommendedList' smart constructor.
+data VolumesRecommendedList = VolumesRecommendedList
+    { _vrlLocale                   :: !(Maybe Text)
+    , _vrlMaxAllowedMaturityRating :: !(Maybe VolumesRecommendedListMaxAllowedMaturityRating)
+    , _vrlSource                   :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'VolumesRecommendedList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'vrlLocale'
+--
+-- * 'vrlMaxAllowedMaturityRating'
+--
+-- * 'vrlSource'
+volumesRecommendedList
+    :: VolumesRecommendedList
+volumesRecommendedList =
+    VolumesRecommendedList
+    { _vrlLocale = Nothing
+    , _vrlMaxAllowedMaturityRating = Nothing
+    , _vrlSource = Nothing
+    }
+
+-- | ISO-639-1 language and ISO-3166-1 country code. Ex: \'en_US\'. Used for
+-- generating recommendations.
+vrlLocale :: Lens' VolumesRecommendedList (Maybe Text)
+vrlLocale
+  = lens _vrlLocale (\ s a -> s{_vrlLocale = a})
+
+-- | The maximum allowed maturity rating of returned recommendations. Books
+-- with a higher maturity rating are filtered out.
+vrlMaxAllowedMaturityRating :: Lens' VolumesRecommendedList (Maybe VolumesRecommendedListMaxAllowedMaturityRating)
+vrlMaxAllowedMaturityRating
+  = lens _vrlMaxAllowedMaturityRating
+      (\ s a -> s{_vrlMaxAllowedMaturityRating = a})
+
+-- | String to identify the originator of this request.
+vrlSource :: Lens' VolumesRecommendedList (Maybe Text)
+vrlSource
+  = lens _vrlSource (\ s a -> s{_vrlSource = a})
+
+instance GoogleRequest VolumesRecommendedList where
+        type Rs VolumesRecommendedList = Volumes
+        requestClient VolumesRecommendedList{..}
+          = go _vrlLocale _vrlMaxAllowedMaturityRating
+              _vrlSource
+              (Just AltJSON)
+              booksService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy VolumesRecommendedListResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Books/Volumes/Recommended/Rate.hs b/gen/Network/Google/Resource/Books/Volumes/Recommended/Rate.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Books/Volumes/Recommended/Rate.hs
@@ -0,0 +1,125 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.Books.Volumes.Recommended.Rate
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Rate a recommended book for the current user.
+--
+-- /See:/ <https://developers.google.com/books/docs/v1/getting_started Books API Reference> for @books.volumes.recommended.rate@.
+module Network.Google.Resource.Books.Volumes.Recommended.Rate
+    (
+    -- * REST Resource
+      VolumesRecommendedRateResource
+
+    -- * Creating a Request
+    , volumesRecommendedRate
+    , VolumesRecommendedRate
+
+    -- * Request Lenses
+    , vrrRating
+    , vrrLocale
+    , vrrVolumeId
+    , vrrSource
+    ) where
+
+import           Network.Google.Books.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @books.volumes.recommended.rate@ method which the
+-- 'VolumesRecommendedRate' request conforms to.
+type VolumesRecommendedRateResource =
+     "books" :>
+       "v1" :>
+         "volumes" :>
+           "recommended" :>
+             "rate" :>
+               QueryParam "rating" VolumesRecommendedRateRating :>
+                 QueryParam "volumeId" Text :>
+                   QueryParam "locale" Text :>
+                     QueryParam "source" Text :>
+                       QueryParam "alt" AltJSON :>
+                         Post '[JSON] BooksVolumesRecommendedRateResponse
+
+-- | Rate a recommended book for the current user.
+--
+-- /See:/ 'volumesRecommendedRate' smart constructor.
+data VolumesRecommendedRate = VolumesRecommendedRate
+    { _vrrRating   :: !VolumesRecommendedRateRating
+    , _vrrLocale   :: !(Maybe Text)
+    , _vrrVolumeId :: !Text
+    , _vrrSource   :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'VolumesRecommendedRate' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'vrrRating'
+--
+-- * 'vrrLocale'
+--
+-- * 'vrrVolumeId'
+--
+-- * 'vrrSource'
+volumesRecommendedRate
+    :: VolumesRecommendedRateRating -- ^ 'vrrRating'
+    -> Text -- ^ 'vrrVolumeId'
+    -> VolumesRecommendedRate
+volumesRecommendedRate pVrrRating_ pVrrVolumeId_ =
+    VolumesRecommendedRate
+    { _vrrRating = pVrrRating_
+    , _vrrLocale = Nothing
+    , _vrrVolumeId = pVrrVolumeId_
+    , _vrrSource = Nothing
+    }
+
+-- | Rating to be given to the volume.
+vrrRating :: Lens' VolumesRecommendedRate VolumesRecommendedRateRating
+vrrRating
+  = lens _vrrRating (\ s a -> s{_vrrRating = a})
+
+-- | ISO-639-1 language and ISO-3166-1 country code. Ex: \'en_US\'. Used for
+-- generating recommendations.
+vrrLocale :: Lens' VolumesRecommendedRate (Maybe Text)
+vrrLocale
+  = lens _vrrLocale (\ s a -> s{_vrrLocale = a})
+
+-- | ID of the source volume.
+vrrVolumeId :: Lens' VolumesRecommendedRate Text
+vrrVolumeId
+  = lens _vrrVolumeId (\ s a -> s{_vrrVolumeId = a})
+
+-- | String to identify the originator of this request.
+vrrSource :: Lens' VolumesRecommendedRate (Maybe Text)
+vrrSource
+  = lens _vrrSource (\ s a -> s{_vrrSource = a})
+
+instance GoogleRequest VolumesRecommendedRate where
+        type Rs VolumesRecommendedRate =
+             BooksVolumesRecommendedRateResponse
+        requestClient VolumesRecommendedRate{..}
+          = go (Just _vrrRating) (Just _vrrVolumeId) _vrrLocale
+              _vrrSource
+              (Just AltJSON)
+              booksService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy VolumesRecommendedRateResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Books/Volumes/UserUploaded/List.hs b/gen/Network/Google/Resource/Books/Volumes/UserUploaded/List.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Books/Volumes/UserUploaded/List.hs
@@ -0,0 +1,157 @@
+{-# 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.Books.Volumes.UserUploaded.List
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Return a list of books uploaded by the current user.
+--
+-- /See:/ <https://developers.google.com/books/docs/v1/getting_started Books API Reference> for @books.volumes.useruploaded.list@.
+module Network.Google.Resource.Books.Volumes.UserUploaded.List
+    (
+    -- * REST Resource
+      VolumesUserUploadedListResource
+
+    -- * Creating a Request
+    , volumesUserUploadedList
+    , VolumesUserUploadedList
+
+    -- * Request Lenses
+    , vuulProcessingState
+    , vuulLocale
+    , vuulVolumeId
+    , vuulSource
+    , vuulStartIndex
+    , vuulMaxResults
+    ) where
+
+import           Network.Google.Books.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @books.volumes.useruploaded.list@ method which the
+-- 'VolumesUserUploadedList' request conforms to.
+type VolumesUserUploadedListResource =
+     "books" :>
+       "v1" :>
+         "volumes" :>
+           "useruploaded" :>
+             QueryParams "processingState"
+               VolumesUserUploadedListProcessingState
+               :>
+               QueryParam "locale" Text :>
+                 QueryParams "volumeId" Text :>
+                   QueryParam "source" Text :>
+                     QueryParam "startIndex" (Textual Word32) :>
+                       QueryParam "maxResults" (Textual Word32) :>
+                         QueryParam "alt" AltJSON :> Get '[JSON] Volumes
+
+-- | Return a list of books uploaded by the current user.
+--
+-- /See:/ 'volumesUserUploadedList' smart constructor.
+data VolumesUserUploadedList = VolumesUserUploadedList
+    { _vuulProcessingState :: !(Maybe [VolumesUserUploadedListProcessingState])
+    , _vuulLocale          :: !(Maybe Text)
+    , _vuulVolumeId        :: !(Maybe [Text])
+    , _vuulSource          :: !(Maybe Text)
+    , _vuulStartIndex      :: !(Maybe (Textual Word32))
+    , _vuulMaxResults      :: !(Maybe (Textual Word32))
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'VolumesUserUploadedList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'vuulProcessingState'
+--
+-- * 'vuulLocale'
+--
+-- * 'vuulVolumeId'
+--
+-- * 'vuulSource'
+--
+-- * 'vuulStartIndex'
+--
+-- * 'vuulMaxResults'
+volumesUserUploadedList
+    :: VolumesUserUploadedList
+volumesUserUploadedList =
+    VolumesUserUploadedList
+    { _vuulProcessingState = Nothing
+    , _vuulLocale = Nothing
+    , _vuulVolumeId = Nothing
+    , _vuulSource = Nothing
+    , _vuulStartIndex = Nothing
+    , _vuulMaxResults = Nothing
+    }
+
+-- | The processing state of the user uploaded volumes to be returned.
+vuulProcessingState :: Lens' VolumesUserUploadedList [VolumesUserUploadedListProcessingState]
+vuulProcessingState
+  = lens _vuulProcessingState
+      (\ s a -> s{_vuulProcessingState = a})
+      . _Default
+      . _Coerce
+
+-- | ISO-639-1 language and ISO-3166-1 country code. Ex: \'en_US\'. Used for
+-- generating recommendations.
+vuulLocale :: Lens' VolumesUserUploadedList (Maybe Text)
+vuulLocale
+  = lens _vuulLocale (\ s a -> s{_vuulLocale = a})
+
+-- | The ids of the volumes to be returned. If not specified all that match
+-- the processingState are returned.
+vuulVolumeId :: Lens' VolumesUserUploadedList [Text]
+vuulVolumeId
+  = lens _vuulVolumeId (\ s a -> s{_vuulVolumeId = a})
+      . _Default
+      . _Coerce
+
+-- | String to identify the originator of this request.
+vuulSource :: Lens' VolumesUserUploadedList (Maybe Text)
+vuulSource
+  = lens _vuulSource (\ s a -> s{_vuulSource = a})
+
+-- | Index of the first result to return (starts at 0)
+vuulStartIndex :: Lens' VolumesUserUploadedList (Maybe Word32)
+vuulStartIndex
+  = lens _vuulStartIndex
+      (\ s a -> s{_vuulStartIndex = a})
+      . mapping _Coerce
+
+-- | Maximum number of results to return.
+vuulMaxResults :: Lens' VolumesUserUploadedList (Maybe Word32)
+vuulMaxResults
+  = lens _vuulMaxResults
+      (\ s a -> s{_vuulMaxResults = a})
+      . mapping _Coerce
+
+instance GoogleRequest VolumesUserUploadedList where
+        type Rs VolumesUserUploadedList = Volumes
+        requestClient VolumesUserUploadedList{..}
+          = go (_vuulProcessingState ^. _Default) _vuulLocale
+              (_vuulVolumeId ^. _Default)
+              _vuulSource
+              _vuulStartIndex
+              _vuulMaxResults
+              (Just AltJSON)
+              booksService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy VolumesUserUploadedListResource)
+                      mempty
diff --git a/gogol-books.cabal b/gogol-books.cabal
new file mode 100644
--- /dev/null
+++ b/gogol-books.cabal
@@ -0,0 +1,91 @@
+name:                  gogol-books
+version:               0.0.1
+synopsis:              Google Books SDK.
+homepage:              https://github.com/brendanhay/gogol
+bug-reports:           https://github.com/brendanhay/gogol/issues
+license:               OtherLicense
+license-file:          LICENSE
+author:                Brendan Hay
+maintainer:            Brendan Hay <brendan.g.hay@gmail.com>
+copyright:             Copyright (c) 2015 Brendan Hay
+category:              Network, Google, Cloud
+build-type:            Simple
+cabal-version:         >= 1.10
+extra-source-files:    README.md
+
+description:
+    Lets you search for books and manage your Google Books library.
+    .
+    /Warning:/ This is an experimental prototype/preview release which is still
+    under exploratory development and not intended for public use, caveat emptor!
+    .
+    This library is compatible with version @v1@
+    of the API.
+
+source-repository head
+    type:     git
+    location: git://github.com/brendanhay/gogol.git
+
+library
+    default-language:  Haskell2010
+    hs-source-dirs:    src gen
+
+    ghc-options:       -Wall
+
+    exposed-modules:
+          Network.Google.Books
+        , Network.Google.Books.Types
+        , Network.Google.Resource.Books.Bookshelves.Get
+        , Network.Google.Resource.Books.Bookshelves.List
+        , Network.Google.Resource.Books.Bookshelves.Volumes.List
+        , Network.Google.Resource.Books.CloudLoading.AddBook
+        , Network.Google.Resource.Books.CloudLoading.DeleteBook
+        , Network.Google.Resource.Books.CloudLoading.UpdateBook
+        , Network.Google.Resource.Books.Dictionary.ListOfflineMetadata
+        , Network.Google.Resource.Books.Layers.AnnotationData.Get
+        , Network.Google.Resource.Books.Layers.AnnotationData.List
+        , Network.Google.Resource.Books.Layers.Get
+        , Network.Google.Resource.Books.Layers.List
+        , Network.Google.Resource.Books.Layers.VolumeAnnotations.Get
+        , Network.Google.Resource.Books.Layers.VolumeAnnotations.List
+        , Network.Google.Resource.Books.MyConfig.GetUserSettings
+        , Network.Google.Resource.Books.MyConfig.ReleaseDownloadAccess
+        , Network.Google.Resource.Books.MyConfig.RequestAccess
+        , Network.Google.Resource.Books.MyConfig.SyncVolumeLicenses
+        , Network.Google.Resource.Books.MyConfig.UpdateUserSettings
+        , Network.Google.Resource.Books.MyLibrary.Annotations.Delete
+        , Network.Google.Resource.Books.MyLibrary.Annotations.Insert
+        , Network.Google.Resource.Books.MyLibrary.Annotations.List
+        , Network.Google.Resource.Books.MyLibrary.Annotations.Summary
+        , Network.Google.Resource.Books.MyLibrary.Annotations.Update
+        , Network.Google.Resource.Books.MyLibrary.Bookshelves.AddVolume
+        , Network.Google.Resource.Books.MyLibrary.Bookshelves.ClearVolumes
+        , Network.Google.Resource.Books.MyLibrary.Bookshelves.Get
+        , Network.Google.Resource.Books.MyLibrary.Bookshelves.List
+        , Network.Google.Resource.Books.MyLibrary.Bookshelves.MoveVolume
+        , Network.Google.Resource.Books.MyLibrary.Bookshelves.RemoveVolume
+        , Network.Google.Resource.Books.MyLibrary.Bookshelves.Volumes.List
+        , Network.Google.Resource.Books.MyLibrary.ReadingPositions.Get
+        , Network.Google.Resource.Books.MyLibrary.ReadingPositions.SetPosition
+        , Network.Google.Resource.Books.Notification.Get
+        , Network.Google.Resource.Books.Onboarding.ListCategories
+        , Network.Google.Resource.Books.Onboarding.ListCategoryVolumes
+        , Network.Google.Resource.Books.Personalizedstream.Get
+        , Network.Google.Resource.Books.PromoOffer.Accept
+        , Network.Google.Resource.Books.PromoOffer.Dismiss
+        , Network.Google.Resource.Books.PromoOffer.Get
+        , Network.Google.Resource.Books.Volumes.Associated.List
+        , Network.Google.Resource.Books.Volumes.Get
+        , Network.Google.Resource.Books.Volumes.List
+        , Network.Google.Resource.Books.Volumes.Mybooks.List
+        , Network.Google.Resource.Books.Volumes.Recommended.List
+        , Network.Google.Resource.Books.Volumes.Recommended.Rate
+        , Network.Google.Resource.Books.Volumes.UserUploaded.List
+
+    other-modules:
+          Network.Google.Books.Types.Product
+        , Network.Google.Books.Types.Sum
+
+    build-depends:
+          gogol-core == 0.0.1.*
+        , base       >= 4.7 && < 5
