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-blogger
+
+* [Version](#version)
+* [Description](#description)
+* [Contribute](#contribute)
+* [Licence](#licence)
+
+
+## Version
+
+`0.0.1`
+
+
+## Description
+
+A client library for the Google Blogger.
+
+
+## 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-blogger` 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/Blogger.hs b/gen/Network/Google/Blogger.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Blogger.hs
@@ -0,0 +1,556 @@
+{-# LANGUAGE DataKinds         #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# LANGUAGE TypeOperators     #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+
+-- |
+-- Module      : Network.Google.Blogger
+-- 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)
+--
+-- API for access to the data within Blogger.
+--
+-- /See:/ <https://developers.google.com/blogger/docs/3.0/getting_started Blogger API Reference>
+module Network.Google.Blogger
+    (
+    -- * Service Configuration
+      bloggerService
+
+    -- * API Declaration
+    , BloggerAPI
+
+    -- * Resources
+
+    -- ** blogger.blogUserInfos.get
+    , module Network.Google.Resource.Blogger.BlogUserInfos.Get
+
+    -- ** blogger.blogs.get
+    , module Network.Google.Resource.Blogger.Blogs.Get
+
+    -- ** blogger.blogs.getByUrl
+    , module Network.Google.Resource.Blogger.Blogs.GetByURL
+
+    -- ** blogger.blogs.listByUser
+    , module Network.Google.Resource.Blogger.Blogs.ListByUser
+
+    -- ** blogger.comments.approve
+    , module Network.Google.Resource.Blogger.Comments.Approve
+
+    -- ** blogger.comments.delete
+    , module Network.Google.Resource.Blogger.Comments.Delete
+
+    -- ** blogger.comments.get
+    , module Network.Google.Resource.Blogger.Comments.Get
+
+    -- ** blogger.comments.list
+    , module Network.Google.Resource.Blogger.Comments.List
+
+    -- ** blogger.comments.listByBlog
+    , module Network.Google.Resource.Blogger.Comments.ListByBlog
+
+    -- ** blogger.comments.markAsSpam
+    , module Network.Google.Resource.Blogger.Comments.MarkAsSpam
+
+    -- ** blogger.comments.removeContent
+    , module Network.Google.Resource.Blogger.Comments.RemoveContent
+
+    -- ** blogger.pageViews.get
+    , module Network.Google.Resource.Blogger.PageViews.Get
+
+    -- ** blogger.pages.delete
+    , module Network.Google.Resource.Blogger.Pages.Delete
+
+    -- ** blogger.pages.get
+    , module Network.Google.Resource.Blogger.Pages.Get
+
+    -- ** blogger.pages.insert
+    , module Network.Google.Resource.Blogger.Pages.Insert
+
+    -- ** blogger.pages.list
+    , module Network.Google.Resource.Blogger.Pages.List
+
+    -- ** blogger.pages.patch
+    , module Network.Google.Resource.Blogger.Pages.Patch
+
+    -- ** blogger.pages.publish
+    , module Network.Google.Resource.Blogger.Pages.Publish
+
+    -- ** blogger.pages.revert
+    , module Network.Google.Resource.Blogger.Pages.Revert
+
+    -- ** blogger.pages.update
+    , module Network.Google.Resource.Blogger.Pages.Update
+
+    -- ** blogger.postUserInfos.get
+    , module Network.Google.Resource.Blogger.PostUserInfos.Get
+
+    -- ** blogger.postUserInfos.list
+    , module Network.Google.Resource.Blogger.PostUserInfos.List
+
+    -- ** blogger.posts.delete
+    , module Network.Google.Resource.Blogger.Posts.Delete
+
+    -- ** blogger.posts.get
+    , module Network.Google.Resource.Blogger.Posts.Get
+
+    -- ** blogger.posts.getByPath
+    , module Network.Google.Resource.Blogger.Posts.GetByPath
+
+    -- ** blogger.posts.insert
+    , module Network.Google.Resource.Blogger.Posts.Insert
+
+    -- ** blogger.posts.list
+    , module Network.Google.Resource.Blogger.Posts.List
+
+    -- ** blogger.posts.patch
+    , module Network.Google.Resource.Blogger.Posts.Patch
+
+    -- ** blogger.posts.publish
+    , module Network.Google.Resource.Blogger.Posts.Publish
+
+    -- ** blogger.posts.revert
+    , module Network.Google.Resource.Blogger.Posts.Revert
+
+    -- ** blogger.posts.search
+    , module Network.Google.Resource.Blogger.Posts.Search
+
+    -- ** blogger.posts.update
+    , module Network.Google.Resource.Blogger.Posts.Update
+
+    -- ** blogger.users.get
+    , module Network.Google.Resource.Blogger.Users.Get
+
+    -- * Types
+
+    -- ** PostsListOrderBy
+    , PostsListOrderBy (..)
+
+    -- ** PostsListView
+    , PostsListView (..)
+
+    -- ** PageViewsGetRange
+    , PageViewsGetRange (..)
+
+    -- ** PostUserInfo
+    , PostUserInfo
+    , postUserInfo
+    , puiPostUserInfo
+    , puiPost
+    , puiKind
+
+    -- ** CommentsListView
+    , CommentsListView (..)
+
+    -- ** PostAuthorImage
+    , PostAuthorImage
+    , postAuthorImage
+    , paiURL
+
+    -- ** PostUserInfosListStatus
+    , PostUserInfosListStatus (..)
+
+    -- ** PostList
+    , PostList
+    , postList
+    , plEtag
+    , plNextPageToken
+    , plKind
+    , plItems
+
+    -- ** CommentInReplyTo
+    , CommentInReplyTo
+    , commentInReplyTo
+    , cirtId
+
+    -- ** CommentBlog
+    , CommentBlog
+    , commentBlog
+    , cbId
+
+    -- ** Pageviews
+    , Pageviews
+    , pageviews
+    , pKind
+    , pCounts
+    , pBlogId
+
+    -- ** PostLocation
+    , PostLocation
+    , postLocation
+    , plSpan
+    , plLat
+    , plName
+    , plLng
+
+    -- ** BlogPosts
+    , BlogPosts
+    , blogPosts
+    , bpTotalItems
+    , bpItems
+    , bpSelfLink
+
+    -- ** PostsGetView
+    , PostsGetView (..)
+
+    -- ** Post'
+    , Post'
+    , post
+    , posImages
+    , posStatus
+    , posEtag
+    , posReaderComments
+    , posLocation
+    , posKind
+    , posPublished
+    , posURL
+    , posBlog
+    , posCustomMetaData
+    , posContent
+    , posReplies
+    , posSelfLink
+    , posAuthor
+    , posId
+    , posLabels
+    , posUpdated
+    , posTitleLink
+    , posTitle
+
+    -- ** PostsSearchOrderBy
+    , PostsSearchOrderBy (..)
+
+    -- ** CommentsListByBlogStatus
+    , CommentsListByBlogStatus (..)
+
+    -- ** PagesGetView
+    , PagesGetView (..)
+
+    -- ** PostUserInfosListOrderBy
+    , PostUserInfosListOrderBy (..)
+
+    -- ** Page
+    , Page
+    , page
+    , pagStatus
+    , pagEtag
+    , pagKind
+    , pagPublished
+    , pagURL
+    , pagBlog
+    , pagContent
+    , pagSelfLink
+    , pagAuthor
+    , pagId
+    , pagUpdated
+    , pagTitle
+
+    -- ** BlogLocale
+    , BlogLocale
+    , blogLocale
+    , blVariant
+    , blCountry
+    , blLanguage
+
+    -- ** PageAuthor
+    , PageAuthor
+    , pageAuthor
+    , paImage
+    , paURL
+    , paDisplayName
+    , paId
+
+    -- ** BlogsGetView
+    , BlogsGetView (..)
+
+    -- ** Blog
+    , Blog
+    , blog
+    , bStatus
+    , bKind
+    , bPages
+    , bLocale
+    , bPublished
+    , bURL
+    , bCustomMetaData
+    , bSelfLink
+    , bName
+    , bId
+    , bUpdated
+    , bPosts
+    , bDescription
+
+    -- ** BlogsGetByURLView
+    , BlogsGetByURLView (..)
+
+    -- ** CommentsListStatus
+    , CommentsListStatus (..)
+
+    -- ** BlogPages
+    , BlogPages
+    , blogPages
+    , bpsTotalItems
+    , bpsSelfLink
+
+    -- ** PostBlog
+    , PostBlog
+    , postBlog
+    , pbId
+
+    -- ** BlogsListByUserStatus
+    , BlogsListByUserStatus (..)
+
+    -- ** PageList
+    , PageList
+    , pageList
+    , pllEtag
+    , pllNextPageToken
+    , pllKind
+    , pllItems
+
+    -- ** UserLocale
+    , UserLocale
+    , userLocale
+    , ulVariant
+    , ulCountry
+    , ulLanguage
+
+    -- ** CommentAuthorImage
+    , CommentAuthorImage
+    , commentAuthorImage
+    , caiURL
+
+    -- ** User
+    , User
+    , user
+    , uBlogs
+    , uKind
+    , uCreated
+    , uLocale
+    , uURL
+    , uSelfLink
+    , uAbout
+    , uDisplayName
+    , uId
+
+    -- ** UserBlogs
+    , UserBlogs
+    , userBlogs
+    , ubSelfLink
+
+    -- ** PostReplies
+    , PostReplies
+    , postReplies
+    , prTotalItems
+    , prItems
+    , prSelfLink
+
+    -- ** BlogList
+    , BlogList
+    , blogList
+    , blKind
+    , blItems
+    , blBlogUserInfos
+
+    -- ** PagesListView
+    , PagesListView (..)
+
+    -- ** PageBlog
+    , PageBlog
+    , pageBlog
+    , pId
+
+    -- ** PostsListStatus
+    , PostsListStatus (..)
+
+    -- ** PostAuthor
+    , PostAuthor
+    , postAuthor
+    , paaImage
+    , paaURL
+    , paaDisplayName
+    , paaId
+
+    -- ** PostPerUserInfo
+    , PostPerUserInfo
+    , postPerUserInfo
+    , ppuiKind
+    , ppuiBlogId
+    , ppuiUserId
+    , ppuiHasEditAccess
+    , ppuiPostId
+
+    -- ** BlogsListByUserView
+    , BlogsListByUserView (..)
+
+    -- ** PageviewsCountsItem
+    , PageviewsCountsItem
+    , pageviewsCountsItem
+    , pciTimeRange
+    , pciCount
+
+    -- ** PostUserInfosListView
+    , PostUserInfosListView (..)
+
+    -- ** Comment
+    , Comment
+    , comment
+    , cStatus
+    , cPost
+    , cKind
+    , cPublished
+    , cBlog
+    , cContent
+    , cSelfLink
+    , cAuthor
+    , cId
+    , cUpdated
+    , cInReplyTo
+
+    -- ** CommentsGetView
+    , CommentsGetView (..)
+
+    -- ** CommentPost
+    , CommentPost
+    , commentPost
+    , cpId
+
+    -- ** PostsGetByPathView
+    , PostsGetByPathView (..)
+
+    -- ** BlogPerUserInfo
+    , BlogPerUserInfo
+    , blogPerUserInfo
+    , bpuiPhotosAlbumKey
+    , bpuiKind
+    , bpuiBlogId
+    , bpuiUserId
+    , bpuiRole
+    , bpuiHasAdminAccess
+
+    -- ** PostUserInfosList
+    , PostUserInfosList
+    , postUserInfosList
+    , puilNextPageToken
+    , puilKind
+    , puilItems
+
+    -- ** PagesListStatus
+    , PagesListStatus (..)
+
+    -- ** CommentAuthor
+    , CommentAuthor
+    , commentAuthor
+    , caImage
+    , caURL
+    , caDisplayName
+    , caId
+
+    -- ** BlogsListByUserRole
+    , BlogsListByUserRole (..)
+
+    -- ** BlogUserInfo
+    , BlogUserInfo
+    , blogUserInfo
+    , buiKind
+    , buiBlog
+    , buiBlogUserInfo
+
+    -- ** PageAuthorImage
+    , PageAuthorImage
+    , pageAuthorImage
+    , pURL
+
+    -- ** CommentList
+    , CommentList
+    , commentList
+    , clEtag
+    , clNextPageToken
+    , clKind
+    , clItems
+    , clPrevPageToken
+
+    -- ** PostImagesItem
+    , PostImagesItem
+    , postImagesItem
+    , piiURL
+    ) where
+
+import           Network.Google.Blogger.Types
+import           Network.Google.Prelude
+import           Network.Google.Resource.Blogger.Blogs.Get
+import           Network.Google.Resource.Blogger.Blogs.GetByURL
+import           Network.Google.Resource.Blogger.Blogs.ListByUser
+import           Network.Google.Resource.Blogger.BlogUserInfos.Get
+import           Network.Google.Resource.Blogger.Comments.Approve
+import           Network.Google.Resource.Blogger.Comments.Delete
+import           Network.Google.Resource.Blogger.Comments.Get
+import           Network.Google.Resource.Blogger.Comments.List
+import           Network.Google.Resource.Blogger.Comments.ListByBlog
+import           Network.Google.Resource.Blogger.Comments.MarkAsSpam
+import           Network.Google.Resource.Blogger.Comments.RemoveContent
+import           Network.Google.Resource.Blogger.Pages.Delete
+import           Network.Google.Resource.Blogger.Pages.Get
+import           Network.Google.Resource.Blogger.Pages.Insert
+import           Network.Google.Resource.Blogger.Pages.List
+import           Network.Google.Resource.Blogger.Pages.Patch
+import           Network.Google.Resource.Blogger.Pages.Publish
+import           Network.Google.Resource.Blogger.Pages.Revert
+import           Network.Google.Resource.Blogger.Pages.Update
+import           Network.Google.Resource.Blogger.PageViews.Get
+import           Network.Google.Resource.Blogger.Posts.Delete
+import           Network.Google.Resource.Blogger.Posts.Get
+import           Network.Google.Resource.Blogger.Posts.GetByPath
+import           Network.Google.Resource.Blogger.Posts.Insert
+import           Network.Google.Resource.Blogger.Posts.List
+import           Network.Google.Resource.Blogger.Posts.Patch
+import           Network.Google.Resource.Blogger.Posts.Publish
+import           Network.Google.Resource.Blogger.Posts.Revert
+import           Network.Google.Resource.Blogger.Posts.Search
+import           Network.Google.Resource.Blogger.Posts.Update
+import           Network.Google.Resource.Blogger.PostUserInfos.Get
+import           Network.Google.Resource.Blogger.PostUserInfos.List
+import           Network.Google.Resource.Blogger.Users.Get
+
+{- $resources
+TODO
+-}
+
+-- | Represents the entirety of the methods and resources available for the Blogger API service.
+type BloggerAPI =
+     PostUserInfosListResource :<|>
+       PostUserInfosGetResource
+       :<|> UsersGetResource
+       :<|> PageViewsGetResource
+       :<|> BlogsListByUserResource
+       :<|> BlogsGetResource
+       :<|> BlogsGetByURLResource
+       :<|> PagesInsertResource
+       :<|> PagesListResource
+       :<|> PagesPatchResource
+       :<|> PagesGetResource
+       :<|> PagesRevertResource
+       :<|> PagesDeleteResource
+       :<|> PagesUpdateResource
+       :<|> PagesPublishResource
+       :<|> BlogUserInfosGetResource
+       :<|> CommentsListResource
+       :<|> CommentsGetResource
+       :<|> CommentsListByBlogResource
+       :<|> CommentsRemoveContentResource
+       :<|> CommentsApproveResource
+       :<|> CommentsMarkAsSpamResource
+       :<|> CommentsDeleteResource
+       :<|> PostsInsertResource
+       :<|> PostsListResource
+       :<|> PostsPatchResource
+       :<|> PostsGetResource
+       :<|> PostsRevertResource
+       :<|> PostsGetByPathResource
+       :<|> PostsSearchResource
+       :<|> PostsDeleteResource
+       :<|> PostsUpdateResource
+       :<|> PostsPublishResource
diff --git a/gen/Network/Google/Blogger/Types.hs b/gen/Network/Google/Blogger/Types.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Blogger/Types.hs
@@ -0,0 +1,393 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- |
+-- Module      : Network.Google.Blogger.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.Blogger.Types
+    (
+    -- * Service Configuration
+      bloggerService
+
+    -- * OAuth Scopes
+    , bloggerScope
+    , bloggerReadonlyScope
+
+    -- * PostsListOrderBy
+    , PostsListOrderBy (..)
+
+    -- * PostsListView
+    , PostsListView (..)
+
+    -- * PageViewsGetRange
+    , PageViewsGetRange (..)
+
+    -- * PostUserInfo
+    , PostUserInfo
+    , postUserInfo
+    , puiPostUserInfo
+    , puiPost
+    , puiKind
+
+    -- * CommentsListView
+    , CommentsListView (..)
+
+    -- * PostAuthorImage
+    , PostAuthorImage
+    , postAuthorImage
+    , paiURL
+
+    -- * PostUserInfosListStatus
+    , PostUserInfosListStatus (..)
+
+    -- * PostList
+    , PostList
+    , postList
+    , plEtag
+    , plNextPageToken
+    , plKind
+    , plItems
+
+    -- * CommentInReplyTo
+    , CommentInReplyTo
+    , commentInReplyTo
+    , cirtId
+
+    -- * CommentBlog
+    , CommentBlog
+    , commentBlog
+    , cbId
+
+    -- * Pageviews
+    , Pageviews
+    , pageviews
+    , pKind
+    , pCounts
+    , pBlogId
+
+    -- * PostLocation
+    , PostLocation
+    , postLocation
+    , plSpan
+    , plLat
+    , plName
+    , plLng
+
+    -- * BlogPosts
+    , BlogPosts
+    , blogPosts
+    , bpTotalItems
+    , bpItems
+    , bpSelfLink
+
+    -- * PostsGetView
+    , PostsGetView (..)
+
+    -- * Post'
+    , Post'
+    , post
+    , posImages
+    , posStatus
+    , posEtag
+    , posReaderComments
+    , posLocation
+    , posKind
+    , posPublished
+    , posURL
+    , posBlog
+    , posCustomMetaData
+    , posContent
+    , posReplies
+    , posSelfLink
+    , posAuthor
+    , posId
+    , posLabels
+    , posUpdated
+    , posTitleLink
+    , posTitle
+
+    -- * PostsSearchOrderBy
+    , PostsSearchOrderBy (..)
+
+    -- * CommentsListByBlogStatus
+    , CommentsListByBlogStatus (..)
+
+    -- * PagesGetView
+    , PagesGetView (..)
+
+    -- * PostUserInfosListOrderBy
+    , PostUserInfosListOrderBy (..)
+
+    -- * Page
+    , Page
+    , page
+    , pagStatus
+    , pagEtag
+    , pagKind
+    , pagPublished
+    , pagURL
+    , pagBlog
+    , pagContent
+    , pagSelfLink
+    , pagAuthor
+    , pagId
+    , pagUpdated
+    , pagTitle
+
+    -- * BlogLocale
+    , BlogLocale
+    , blogLocale
+    , blVariant
+    , blCountry
+    , blLanguage
+
+    -- * PageAuthor
+    , PageAuthor
+    , pageAuthor
+    , paImage
+    , paURL
+    , paDisplayName
+    , paId
+
+    -- * BlogsGetView
+    , BlogsGetView (..)
+
+    -- * Blog
+    , Blog
+    , blog
+    , bStatus
+    , bKind
+    , bPages
+    , bLocale
+    , bPublished
+    , bURL
+    , bCustomMetaData
+    , bSelfLink
+    , bName
+    , bId
+    , bUpdated
+    , bPosts
+    , bDescription
+
+    -- * BlogsGetByURLView
+    , BlogsGetByURLView (..)
+
+    -- * CommentsListStatus
+    , CommentsListStatus (..)
+
+    -- * BlogPages
+    , BlogPages
+    , blogPages
+    , bpsTotalItems
+    , bpsSelfLink
+
+    -- * PostBlog
+    , PostBlog
+    , postBlog
+    , pbId
+
+    -- * BlogsListByUserStatus
+    , BlogsListByUserStatus (..)
+
+    -- * PageList
+    , PageList
+    , pageList
+    , pllEtag
+    , pllNextPageToken
+    , pllKind
+    , pllItems
+
+    -- * UserLocale
+    , UserLocale
+    , userLocale
+    , ulVariant
+    , ulCountry
+    , ulLanguage
+
+    -- * CommentAuthorImage
+    , CommentAuthorImage
+    , commentAuthorImage
+    , caiURL
+
+    -- * User
+    , User
+    , user
+    , uBlogs
+    , uKind
+    , uCreated
+    , uLocale
+    , uURL
+    , uSelfLink
+    , uAbout
+    , uDisplayName
+    , uId
+
+    -- * UserBlogs
+    , UserBlogs
+    , userBlogs
+    , ubSelfLink
+
+    -- * PostReplies
+    , PostReplies
+    , postReplies
+    , prTotalItems
+    , prItems
+    , prSelfLink
+
+    -- * BlogList
+    , BlogList
+    , blogList
+    , blKind
+    , blItems
+    , blBlogUserInfos
+
+    -- * PagesListView
+    , PagesListView (..)
+
+    -- * PageBlog
+    , PageBlog
+    , pageBlog
+    , pId
+
+    -- * PostsListStatus
+    , PostsListStatus (..)
+
+    -- * PostAuthor
+    , PostAuthor
+    , postAuthor
+    , paaImage
+    , paaURL
+    , paaDisplayName
+    , paaId
+
+    -- * PostPerUserInfo
+    , PostPerUserInfo
+    , postPerUserInfo
+    , ppuiKind
+    , ppuiBlogId
+    , ppuiUserId
+    , ppuiHasEditAccess
+    , ppuiPostId
+
+    -- * BlogsListByUserView
+    , BlogsListByUserView (..)
+
+    -- * PageviewsCountsItem
+    , PageviewsCountsItem
+    , pageviewsCountsItem
+    , pciTimeRange
+    , pciCount
+
+    -- * PostUserInfosListView
+    , PostUserInfosListView (..)
+
+    -- * Comment
+    , Comment
+    , comment
+    , cStatus
+    , cPost
+    , cKind
+    , cPublished
+    , cBlog
+    , cContent
+    , cSelfLink
+    , cAuthor
+    , cId
+    , cUpdated
+    , cInReplyTo
+
+    -- * CommentsGetView
+    , CommentsGetView (..)
+
+    -- * CommentPost
+    , CommentPost
+    , commentPost
+    , cpId
+
+    -- * PostsGetByPathView
+    , PostsGetByPathView (..)
+
+    -- * BlogPerUserInfo
+    , BlogPerUserInfo
+    , blogPerUserInfo
+    , bpuiPhotosAlbumKey
+    , bpuiKind
+    , bpuiBlogId
+    , bpuiUserId
+    , bpuiRole
+    , bpuiHasAdminAccess
+
+    -- * PostUserInfosList
+    , PostUserInfosList
+    , postUserInfosList
+    , puilNextPageToken
+    , puilKind
+    , puilItems
+
+    -- * PagesListStatus
+    , PagesListStatus (..)
+
+    -- * CommentAuthor
+    , CommentAuthor
+    , commentAuthor
+    , caImage
+    , caURL
+    , caDisplayName
+    , caId
+
+    -- * BlogsListByUserRole
+    , BlogsListByUserRole (..)
+
+    -- * BlogUserInfo
+    , BlogUserInfo
+    , blogUserInfo
+    , buiKind
+    , buiBlog
+    , buiBlogUserInfo
+
+    -- * PageAuthorImage
+    , PageAuthorImage
+    , pageAuthorImage
+    , pURL
+
+    -- * CommentList
+    , CommentList
+    , commentList
+    , clEtag
+    , clNextPageToken
+    , clKind
+    , clItems
+    , clPrevPageToken
+
+    -- * PostImagesItem
+    , PostImagesItem
+    , postImagesItem
+    , piiURL
+    ) where
+
+import           Network.Google.Blogger.Types.Product
+import           Network.Google.Blogger.Types.Sum
+import           Network.Google.Prelude
+
+-- | Default request referring to version 'v3' of the Blogger API. This contains the host and root path used as a starting point for constructing service requests.
+bloggerService :: Service
+bloggerService
+  = defaultService (ServiceId "blogger:v3")
+      "www.googleapis.com"
+
+-- | Manage your Blogger account
+bloggerScope :: OAuthScope
+bloggerScope = "https://www.googleapis.com/auth/blogger";
+
+-- | View your Blogger account
+bloggerReadonlyScope :: OAuthScope
+bloggerReadonlyScope = "https://www.googleapis.com/auth/blogger.readonly";
diff --git a/gen/Network/Google/Blogger/Types/Product.hs b/gen/Network/Google/Blogger/Types/Product.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Blogger/Types/Product.hs
@@ -0,0 +1,2407 @@
+{-# 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.Blogger.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.Blogger.Types.Product where
+
+import           Network.Google.Blogger.Types.Sum
+import           Network.Google.Prelude
+
+--
+-- /See:/ 'postUserInfo' smart constructor.
+data PostUserInfo = PostUserInfo
+    { _puiPostUserInfo :: !(Maybe PostPerUserInfo)
+    , _puiPost         :: !(Maybe Post')
+    , _puiKind         :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'PostUserInfo' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'puiPostUserInfo'
+--
+-- * 'puiPost'
+--
+-- * 'puiKind'
+postUserInfo
+    :: PostUserInfo
+postUserInfo =
+    PostUserInfo
+    { _puiPostUserInfo = Nothing
+    , _puiPost = Nothing
+    , _puiKind = "blogger#postUserInfo"
+    }
+
+-- | Information about a User for the Post.
+puiPostUserInfo :: Lens' PostUserInfo (Maybe PostPerUserInfo)
+puiPostUserInfo
+  = lens _puiPostUserInfo
+      (\ s a -> s{_puiPostUserInfo = a})
+
+-- | The Post resource.
+puiPost :: Lens' PostUserInfo (Maybe Post')
+puiPost = lens _puiPost (\ s a -> s{_puiPost = a})
+
+-- | The kind of this entity. Always blogger#postUserInfo
+puiKind :: Lens' PostUserInfo Text
+puiKind = lens _puiKind (\ s a -> s{_puiKind = a})
+
+instance FromJSON PostUserInfo where
+        parseJSON
+          = withObject "PostUserInfo"
+              (\ o ->
+                 PostUserInfo <$>
+                   (o .:? "post_user_info") <*> (o .:? "post") <*>
+                     (o .:? "kind" .!= "blogger#postUserInfo"))
+
+instance ToJSON PostUserInfo where
+        toJSON PostUserInfo{..}
+          = object
+              (catMaybes
+                 [("post_user_info" .=) <$> _puiPostUserInfo,
+                  ("post" .=) <$> _puiPost, Just ("kind" .= _puiKind)])
+
+-- | The Post author\'s avatar.
+--
+-- /See:/ 'postAuthorImage' smart constructor.
+newtype PostAuthorImage = PostAuthorImage
+    { _paiURL :: Maybe Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'PostAuthorImage' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'paiURL'
+postAuthorImage
+    :: PostAuthorImage
+postAuthorImage =
+    PostAuthorImage
+    { _paiURL = Nothing
+    }
+
+-- | The Post author\'s avatar URL.
+paiURL :: Lens' PostAuthorImage (Maybe Text)
+paiURL = lens _paiURL (\ s a -> s{_paiURL = a})
+
+instance FromJSON PostAuthorImage where
+        parseJSON
+          = withObject "PostAuthorImage"
+              (\ o -> PostAuthorImage <$> (o .:? "url"))
+
+instance ToJSON PostAuthorImage where
+        toJSON PostAuthorImage{..}
+          = object (catMaybes [("url" .=) <$> _paiURL])
+
+--
+-- /See:/ 'postList' smart constructor.
+data PostList = PostList
+    { _plEtag          :: !(Maybe Text)
+    , _plNextPageToken :: !(Maybe Text)
+    , _plKind          :: !Text
+    , _plItems         :: !(Maybe [Post'])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'PostList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'plEtag'
+--
+-- * 'plNextPageToken'
+--
+-- * 'plKind'
+--
+-- * 'plItems'
+postList
+    :: PostList
+postList =
+    PostList
+    { _plEtag = Nothing
+    , _plNextPageToken = Nothing
+    , _plKind = "blogger#postList"
+    , _plItems = Nothing
+    }
+
+-- | Etag of the response.
+plEtag :: Lens' PostList (Maybe Text)
+plEtag = lens _plEtag (\ s a -> s{_plEtag = a})
+
+-- | Pagination token to fetch the next page, if one exists.
+plNextPageToken :: Lens' PostList (Maybe Text)
+plNextPageToken
+  = lens _plNextPageToken
+      (\ s a -> s{_plNextPageToken = a})
+
+-- | The kind of this entity. Always blogger#postList
+plKind :: Lens' PostList Text
+plKind = lens _plKind (\ s a -> s{_plKind = a})
+
+-- | The list of Posts for this Blog.
+plItems :: Lens' PostList [Post']
+plItems
+  = lens _plItems (\ s a -> s{_plItems = a}) . _Default
+      . _Coerce
+
+instance FromJSON PostList where
+        parseJSON
+          = withObject "PostList"
+              (\ o ->
+                 PostList <$>
+                   (o .:? "etag") <*> (o .:? "nextPageToken") <*>
+                     (o .:? "kind" .!= "blogger#postList")
+                     <*> (o .:? "items" .!= mempty))
+
+instance ToJSON PostList where
+        toJSON PostList{..}
+          = object
+              (catMaybes
+                 [("etag" .=) <$> _plEtag,
+                  ("nextPageToken" .=) <$> _plNextPageToken,
+                  Just ("kind" .= _plKind), ("items" .=) <$> _plItems])
+
+-- | Data about the comment this is in reply to.
+--
+-- /See:/ 'commentInReplyTo' smart constructor.
+newtype CommentInReplyTo = CommentInReplyTo
+    { _cirtId :: Maybe Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CommentInReplyTo' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cirtId'
+commentInReplyTo
+    :: CommentInReplyTo
+commentInReplyTo =
+    CommentInReplyTo
+    { _cirtId = Nothing
+    }
+
+-- | The identified of the parent of this comment.
+cirtId :: Lens' CommentInReplyTo (Maybe Text)
+cirtId = lens _cirtId (\ s a -> s{_cirtId = a})
+
+instance FromJSON CommentInReplyTo where
+        parseJSON
+          = withObject "CommentInReplyTo"
+              (\ o -> CommentInReplyTo <$> (o .:? "id"))
+
+instance ToJSON CommentInReplyTo where
+        toJSON CommentInReplyTo{..}
+          = object (catMaybes [("id" .=) <$> _cirtId])
+
+-- | Data about the blog containing this comment.
+--
+-- /See:/ 'commentBlog' smart constructor.
+newtype CommentBlog = CommentBlog
+    { _cbId :: Maybe Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CommentBlog' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cbId'
+commentBlog
+    :: CommentBlog
+commentBlog =
+    CommentBlog
+    { _cbId = Nothing
+    }
+
+-- | The identifier of the blog containing this comment.
+cbId :: Lens' CommentBlog (Maybe Text)
+cbId = lens _cbId (\ s a -> s{_cbId = a})
+
+instance FromJSON CommentBlog where
+        parseJSON
+          = withObject "CommentBlog"
+              (\ o -> CommentBlog <$> (o .:? "id"))
+
+instance ToJSON CommentBlog where
+        toJSON CommentBlog{..}
+          = object (catMaybes [("id" .=) <$> _cbId])
+
+--
+-- /See:/ 'pageviews' smart constructor.
+data Pageviews = Pageviews
+    { _pKind   :: !Text
+    , _pCounts :: !(Maybe [PageviewsCountsItem])
+    , _pBlogId :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Pageviews' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pKind'
+--
+-- * 'pCounts'
+--
+-- * 'pBlogId'
+pageviews
+    :: Pageviews
+pageviews =
+    Pageviews
+    { _pKind = "blogger#page_views"
+    , _pCounts = Nothing
+    , _pBlogId = Nothing
+    }
+
+-- | The kind of this entry. Always blogger#page_views
+pKind :: Lens' Pageviews Text
+pKind = lens _pKind (\ s a -> s{_pKind = a})
+
+-- | The container of posts in this blog.
+pCounts :: Lens' Pageviews [PageviewsCountsItem]
+pCounts
+  = lens _pCounts (\ s a -> s{_pCounts = a}) . _Default
+      . _Coerce
+
+-- | Blog Id
+pBlogId :: Lens' Pageviews (Maybe Text)
+pBlogId = lens _pBlogId (\ s a -> s{_pBlogId = a})
+
+instance FromJSON Pageviews where
+        parseJSON
+          = withObject "Pageviews"
+              (\ o ->
+                 Pageviews <$>
+                   (o .:? "kind" .!= "blogger#page_views") <*>
+                     (o .:? "counts" .!= mempty)
+                     <*> (o .:? "blogId"))
+
+instance ToJSON Pageviews where
+        toJSON Pageviews{..}
+          = object
+              (catMaybes
+                 [Just ("kind" .= _pKind), ("counts" .=) <$> _pCounts,
+                  ("blogId" .=) <$> _pBlogId])
+
+-- | The location for geotagged posts.
+--
+-- /See:/ 'postLocation' smart constructor.
+data PostLocation = PostLocation
+    { _plSpan :: !(Maybe Text)
+    , _plLat  :: !(Maybe (Textual Double))
+    , _plName :: !(Maybe Text)
+    , _plLng  :: !(Maybe (Textual Double))
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'PostLocation' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'plSpan'
+--
+-- * 'plLat'
+--
+-- * 'plName'
+--
+-- * 'plLng'
+postLocation
+    :: PostLocation
+postLocation =
+    PostLocation
+    { _plSpan = Nothing
+    , _plLat = Nothing
+    , _plName = Nothing
+    , _plLng = Nothing
+    }
+
+-- | Location\'s viewport span. Can be used when rendering a map preview.
+plSpan :: Lens' PostLocation (Maybe Text)
+plSpan = lens _plSpan (\ s a -> s{_plSpan = a})
+
+-- | Location\'s latitude.
+plLat :: Lens' PostLocation (Maybe Double)
+plLat
+  = lens _plLat (\ s a -> s{_plLat = a}) .
+      mapping _Coerce
+
+-- | Location name.
+plName :: Lens' PostLocation (Maybe Text)
+plName = lens _plName (\ s a -> s{_plName = a})
+
+-- | Location\'s longitude.
+plLng :: Lens' PostLocation (Maybe Double)
+plLng
+  = lens _plLng (\ s a -> s{_plLng = a}) .
+      mapping _Coerce
+
+instance FromJSON PostLocation where
+        parseJSON
+          = withObject "PostLocation"
+              (\ o ->
+                 PostLocation <$>
+                   (o .:? "span") <*> (o .:? "lat") <*> (o .:? "name")
+                     <*> (o .:? "lng"))
+
+instance ToJSON PostLocation where
+        toJSON PostLocation{..}
+          = object
+              (catMaybes
+                 [("span" .=) <$> _plSpan, ("lat" .=) <$> _plLat,
+                  ("name" .=) <$> _plName, ("lng" .=) <$> _plLng])
+
+-- | The container of posts in this blog.
+--
+-- /See:/ 'blogPosts' smart constructor.
+data BlogPosts = BlogPosts
+    { _bpTotalItems :: !(Maybe (Textual Int32))
+    , _bpItems      :: !(Maybe [Post'])
+    , _bpSelfLink   :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'BlogPosts' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'bpTotalItems'
+--
+-- * 'bpItems'
+--
+-- * 'bpSelfLink'
+blogPosts
+    :: BlogPosts
+blogPosts =
+    BlogPosts
+    { _bpTotalItems = Nothing
+    , _bpItems = Nothing
+    , _bpSelfLink = Nothing
+    }
+
+-- | The count of posts in this blog.
+bpTotalItems :: Lens' BlogPosts (Maybe Int32)
+bpTotalItems
+  = lens _bpTotalItems (\ s a -> s{_bpTotalItems = a})
+      . mapping _Coerce
+
+-- | The List of Posts for this Blog.
+bpItems :: Lens' BlogPosts [Post']
+bpItems
+  = lens _bpItems (\ s a -> s{_bpItems = a}) . _Default
+      . _Coerce
+
+-- | The URL of the container for posts in this blog.
+bpSelfLink :: Lens' BlogPosts (Maybe Text)
+bpSelfLink
+  = lens _bpSelfLink (\ s a -> s{_bpSelfLink = a})
+
+instance FromJSON BlogPosts where
+        parseJSON
+          = withObject "BlogPosts"
+              (\ o ->
+                 BlogPosts <$>
+                   (o .:? "totalItems") <*> (o .:? "items" .!= mempty)
+                     <*> (o .:? "selfLink"))
+
+instance ToJSON BlogPosts where
+        toJSON BlogPosts{..}
+          = object
+              (catMaybes
+                 [("totalItems" .=) <$> _bpTotalItems,
+                  ("items" .=) <$> _bpItems,
+                  ("selfLink" .=) <$> _bpSelfLink])
+
+--
+-- /See:/ 'post' smart constructor.
+data Post' = Post'
+    { _posImages         :: !(Maybe [PostImagesItem])
+    , _posStatus         :: !(Maybe Text)
+    , _posEtag           :: !(Maybe Text)
+    , _posReaderComments :: !(Maybe Text)
+    , _posLocation       :: !(Maybe PostLocation)
+    , _posKind           :: !Text
+    , _posPublished      :: !(Maybe DateTime')
+    , _posURL            :: !(Maybe Text)
+    , _posBlog           :: !(Maybe PostBlog)
+    , _posCustomMetaData :: !(Maybe Text)
+    , _posContent        :: !(Maybe Text)
+    , _posReplies        :: !(Maybe PostReplies)
+    , _posSelfLink       :: !(Maybe Text)
+    , _posAuthor         :: !(Maybe PostAuthor)
+    , _posId             :: !(Maybe Text)
+    , _posLabels         :: !(Maybe [Text])
+    , _posUpdated        :: !(Maybe DateTime')
+    , _posTitleLink      :: !(Maybe Text)
+    , _posTitle          :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Post' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'posImages'
+--
+-- * 'posStatus'
+--
+-- * 'posEtag'
+--
+-- * 'posReaderComments'
+--
+-- * 'posLocation'
+--
+-- * 'posKind'
+--
+-- * 'posPublished'
+--
+-- * 'posURL'
+--
+-- * 'posBlog'
+--
+-- * 'posCustomMetaData'
+--
+-- * 'posContent'
+--
+-- * 'posReplies'
+--
+-- * 'posSelfLink'
+--
+-- * 'posAuthor'
+--
+-- * 'posId'
+--
+-- * 'posLabels'
+--
+-- * 'posUpdated'
+--
+-- * 'posTitleLink'
+--
+-- * 'posTitle'
+post
+    :: Post'
+post =
+    Post'
+    { _posImages = Nothing
+    , _posStatus = Nothing
+    , _posEtag = Nothing
+    , _posReaderComments = Nothing
+    , _posLocation = Nothing
+    , _posKind = "blogger#post"
+    , _posPublished = Nothing
+    , _posURL = Nothing
+    , _posBlog = Nothing
+    , _posCustomMetaData = Nothing
+    , _posContent = Nothing
+    , _posReplies = Nothing
+    , _posSelfLink = Nothing
+    , _posAuthor = Nothing
+    , _posId = Nothing
+    , _posLabels = Nothing
+    , _posUpdated = Nothing
+    , _posTitleLink = Nothing
+    , _posTitle = Nothing
+    }
+
+-- | Display image for the Post.
+posImages :: Lens' Post' [PostImagesItem]
+posImages
+  = lens _posImages (\ s a -> s{_posImages = a}) .
+      _Default
+      . _Coerce
+
+-- | Status of the post. Only set for admin-level requests
+posStatus :: Lens' Post' (Maybe Text)
+posStatus
+  = lens _posStatus (\ s a -> s{_posStatus = a})
+
+-- | Etag of the resource.
+posEtag :: Lens' Post' (Maybe Text)
+posEtag = lens _posEtag (\ s a -> s{_posEtag = a})
+
+-- | Comment control and display setting for readers of this post.
+posReaderComments :: Lens' Post' (Maybe Text)
+posReaderComments
+  = lens _posReaderComments
+      (\ s a -> s{_posReaderComments = a})
+
+-- | The location for geotagged posts.
+posLocation :: Lens' Post' (Maybe PostLocation)
+posLocation
+  = lens _posLocation (\ s a -> s{_posLocation = a})
+
+-- | The kind of this entity. Always blogger#post
+posKind :: Lens' Post' Text
+posKind = lens _posKind (\ s a -> s{_posKind = a})
+
+-- | RFC 3339 date-time when this Post was published.
+posPublished :: Lens' Post' (Maybe UTCTime)
+posPublished
+  = lens _posPublished (\ s a -> s{_posPublished = a})
+      . mapping _DateTime
+
+-- | The URL where this Post is displayed.
+posURL :: Lens' Post' (Maybe Text)
+posURL = lens _posURL (\ s a -> s{_posURL = a})
+
+-- | Data about the blog containing this Post.
+posBlog :: Lens' Post' (Maybe PostBlog)
+posBlog = lens _posBlog (\ s a -> s{_posBlog = a})
+
+-- | The JSON meta-data for the Post.
+posCustomMetaData :: Lens' Post' (Maybe Text)
+posCustomMetaData
+  = lens _posCustomMetaData
+      (\ s a -> s{_posCustomMetaData = a})
+
+-- | The content of the Post. May contain HTML markup.
+posContent :: Lens' Post' (Maybe Text)
+posContent
+  = lens _posContent (\ s a -> s{_posContent = a})
+
+-- | The container of comments on this Post.
+posReplies :: Lens' Post' (Maybe PostReplies)
+posReplies
+  = lens _posReplies (\ s a -> s{_posReplies = a})
+
+-- | The API REST URL to fetch this resource from.
+posSelfLink :: Lens' Post' (Maybe Text)
+posSelfLink
+  = lens _posSelfLink (\ s a -> s{_posSelfLink = a})
+
+-- | The author of this Post.
+posAuthor :: Lens' Post' (Maybe PostAuthor)
+posAuthor
+  = lens _posAuthor (\ s a -> s{_posAuthor = a})
+
+-- | The identifier of this Post.
+posId :: Lens' Post' (Maybe Text)
+posId = lens _posId (\ s a -> s{_posId = a})
+
+-- | The list of labels this Post was tagged with.
+posLabels :: Lens' Post' [Text]
+posLabels
+  = lens _posLabels (\ s a -> s{_posLabels = a}) .
+      _Default
+      . _Coerce
+
+-- | RFC 3339 date-time when this Post was last updated.
+posUpdated :: Lens' Post' (Maybe UTCTime)
+posUpdated
+  = lens _posUpdated (\ s a -> s{_posUpdated = a}) .
+      mapping _DateTime
+
+-- | The title link URL, similar to atom\'s related link.
+posTitleLink :: Lens' Post' (Maybe Text)
+posTitleLink
+  = lens _posTitleLink (\ s a -> s{_posTitleLink = a})
+
+-- | The title of the Post.
+posTitle :: Lens' Post' (Maybe Text)
+posTitle = lens _posTitle (\ s a -> s{_posTitle = a})
+
+instance FromJSON Post' where
+        parseJSON
+          = withObject "Post"
+              (\ o ->
+                 Post' <$>
+                   (o .:? "images" .!= mempty) <*> (o .:? "status") <*>
+                     (o .:? "etag")
+                     <*> (o .:? "readerComments")
+                     <*> (o .:? "location")
+                     <*> (o .:? "kind" .!= "blogger#post")
+                     <*> (o .:? "published")
+                     <*> (o .:? "url")
+                     <*> (o .:? "blog")
+                     <*> (o .:? "customMetaData")
+                     <*> (o .:? "content")
+                     <*> (o .:? "replies")
+                     <*> (o .:? "selfLink")
+                     <*> (o .:? "author")
+                     <*> (o .:? "id")
+                     <*> (o .:? "labels" .!= mempty)
+                     <*> (o .:? "updated")
+                     <*> (o .:? "titleLink")
+                     <*> (o .:? "title"))
+
+instance ToJSON Post' where
+        toJSON Post'{..}
+          = object
+              (catMaybes
+                 [("images" .=) <$> _posImages,
+                  ("status" .=) <$> _posStatus,
+                  ("etag" .=) <$> _posEtag,
+                  ("readerComments" .=) <$> _posReaderComments,
+                  ("location" .=) <$> _posLocation,
+                  Just ("kind" .= _posKind),
+                  ("published" .=) <$> _posPublished,
+                  ("url" .=) <$> _posURL, ("blog" .=) <$> _posBlog,
+                  ("customMetaData" .=) <$> _posCustomMetaData,
+                  ("content" .=) <$> _posContent,
+                  ("replies" .=) <$> _posReplies,
+                  ("selfLink" .=) <$> _posSelfLink,
+                  ("author" .=) <$> _posAuthor, ("id" .=) <$> _posId,
+                  ("labels" .=) <$> _posLabels,
+                  ("updated" .=) <$> _posUpdated,
+                  ("titleLink" .=) <$> _posTitleLink,
+                  ("title" .=) <$> _posTitle])
+
+--
+-- /See:/ 'page' smart constructor.
+data Page = Page
+    { _pagStatus    :: !(Maybe Text)
+    , _pagEtag      :: !(Maybe Text)
+    , _pagKind      :: !Text
+    , _pagPublished :: !(Maybe DateTime')
+    , _pagURL       :: !(Maybe Text)
+    , _pagBlog      :: !(Maybe PageBlog)
+    , _pagContent   :: !(Maybe Text)
+    , _pagSelfLink  :: !(Maybe Text)
+    , _pagAuthor    :: !(Maybe PageAuthor)
+    , _pagId        :: !(Maybe Text)
+    , _pagUpdated   :: !(Maybe DateTime')
+    , _pagTitle     :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Page' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pagStatus'
+--
+-- * 'pagEtag'
+--
+-- * 'pagKind'
+--
+-- * 'pagPublished'
+--
+-- * 'pagURL'
+--
+-- * 'pagBlog'
+--
+-- * 'pagContent'
+--
+-- * 'pagSelfLink'
+--
+-- * 'pagAuthor'
+--
+-- * 'pagId'
+--
+-- * 'pagUpdated'
+--
+-- * 'pagTitle'
+page
+    :: Page
+page =
+    Page
+    { _pagStatus = Nothing
+    , _pagEtag = Nothing
+    , _pagKind = "blogger#page"
+    , _pagPublished = Nothing
+    , _pagURL = Nothing
+    , _pagBlog = Nothing
+    , _pagContent = Nothing
+    , _pagSelfLink = Nothing
+    , _pagAuthor = Nothing
+    , _pagId = Nothing
+    , _pagUpdated = Nothing
+    , _pagTitle = Nothing
+    }
+
+-- | The status of the page for admin resources (either LIVE or DRAFT).
+pagStatus :: Lens' Page (Maybe Text)
+pagStatus
+  = lens _pagStatus (\ s a -> s{_pagStatus = a})
+
+-- | Etag of the resource.
+pagEtag :: Lens' Page (Maybe Text)
+pagEtag = lens _pagEtag (\ s a -> s{_pagEtag = a})
+
+-- | The kind of this entity. Always blogger#page
+pagKind :: Lens' Page Text
+pagKind = lens _pagKind (\ s a -> s{_pagKind = a})
+
+-- | RFC 3339 date-time when this Page was published.
+pagPublished :: Lens' Page (Maybe UTCTime)
+pagPublished
+  = lens _pagPublished (\ s a -> s{_pagPublished = a})
+      . mapping _DateTime
+
+-- | The URL that this Page is displayed at.
+pagURL :: Lens' Page (Maybe Text)
+pagURL = lens _pagURL (\ s a -> s{_pagURL = a})
+
+-- | Data about the blog containing this Page.
+pagBlog :: Lens' Page (Maybe PageBlog)
+pagBlog = lens _pagBlog (\ s a -> s{_pagBlog = a})
+
+-- | The body content of this Page, in HTML.
+pagContent :: Lens' Page (Maybe Text)
+pagContent
+  = lens _pagContent (\ s a -> s{_pagContent = a})
+
+-- | The API REST URL to fetch this resource from.
+pagSelfLink :: Lens' Page (Maybe Text)
+pagSelfLink
+  = lens _pagSelfLink (\ s a -> s{_pagSelfLink = a})
+
+-- | The author of this Page.
+pagAuthor :: Lens' Page (Maybe PageAuthor)
+pagAuthor
+  = lens _pagAuthor (\ s a -> s{_pagAuthor = a})
+
+-- | The identifier for this resource.
+pagId :: Lens' Page (Maybe Text)
+pagId = lens _pagId (\ s a -> s{_pagId = a})
+
+-- | RFC 3339 date-time when this Page was last updated.
+pagUpdated :: Lens' Page (Maybe UTCTime)
+pagUpdated
+  = lens _pagUpdated (\ s a -> s{_pagUpdated = a}) .
+      mapping _DateTime
+
+-- | The title of this entity. This is the name displayed in the Admin user
+-- interface.
+pagTitle :: Lens' Page (Maybe Text)
+pagTitle = lens _pagTitle (\ s a -> s{_pagTitle = a})
+
+instance FromJSON Page where
+        parseJSON
+          = withObject "Page"
+              (\ o ->
+                 Page <$>
+                   (o .:? "status") <*> (o .:? "etag") <*>
+                     (o .:? "kind" .!= "blogger#page")
+                     <*> (o .:? "published")
+                     <*> (o .:? "url")
+                     <*> (o .:? "blog")
+                     <*> (o .:? "content")
+                     <*> (o .:? "selfLink")
+                     <*> (o .:? "author")
+                     <*> (o .:? "id")
+                     <*> (o .:? "updated")
+                     <*> (o .:? "title"))
+
+instance ToJSON Page where
+        toJSON Page{..}
+          = object
+              (catMaybes
+                 [("status" .=) <$> _pagStatus,
+                  ("etag" .=) <$> _pagEtag, Just ("kind" .= _pagKind),
+                  ("published" .=) <$> _pagPublished,
+                  ("url" .=) <$> _pagURL, ("blog" .=) <$> _pagBlog,
+                  ("content" .=) <$> _pagContent,
+                  ("selfLink" .=) <$> _pagSelfLink,
+                  ("author" .=) <$> _pagAuthor, ("id" .=) <$> _pagId,
+                  ("updated" .=) <$> _pagUpdated,
+                  ("title" .=) <$> _pagTitle])
+
+-- | The locale this Blog is set to.
+--
+-- /See:/ 'blogLocale' smart constructor.
+data BlogLocale = BlogLocale
+    { _blVariant  :: !(Maybe Text)
+    , _blCountry  :: !(Maybe Text)
+    , _blLanguage :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'BlogLocale' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'blVariant'
+--
+-- * 'blCountry'
+--
+-- * 'blLanguage'
+blogLocale
+    :: BlogLocale
+blogLocale =
+    BlogLocale
+    { _blVariant = Nothing
+    , _blCountry = Nothing
+    , _blLanguage = Nothing
+    }
+
+-- | The language variant this blog is authored in.
+blVariant :: Lens' BlogLocale (Maybe Text)
+blVariant
+  = lens _blVariant (\ s a -> s{_blVariant = a})
+
+-- | The country this blog\'s locale is set to.
+blCountry :: Lens' BlogLocale (Maybe Text)
+blCountry
+  = lens _blCountry (\ s a -> s{_blCountry = a})
+
+-- | The language this blog is authored in.
+blLanguage :: Lens' BlogLocale (Maybe Text)
+blLanguage
+  = lens _blLanguage (\ s a -> s{_blLanguage = a})
+
+instance FromJSON BlogLocale where
+        parseJSON
+          = withObject "BlogLocale"
+              (\ o ->
+                 BlogLocale <$>
+                   (o .:? "variant") <*> (o .:? "country") <*>
+                     (o .:? "language"))
+
+instance ToJSON BlogLocale where
+        toJSON BlogLocale{..}
+          = object
+              (catMaybes
+                 [("variant" .=) <$> _blVariant,
+                  ("country" .=) <$> _blCountry,
+                  ("language" .=) <$> _blLanguage])
+
+-- | The author of this Page.
+--
+-- /See:/ 'pageAuthor' smart constructor.
+data PageAuthor = PageAuthor
+    { _paImage       :: !(Maybe PageAuthorImage)
+    , _paURL         :: !(Maybe Text)
+    , _paDisplayName :: !(Maybe Text)
+    , _paId          :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'PageAuthor' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'paImage'
+--
+-- * 'paURL'
+--
+-- * 'paDisplayName'
+--
+-- * 'paId'
+pageAuthor
+    :: PageAuthor
+pageAuthor =
+    PageAuthor
+    { _paImage = Nothing
+    , _paURL = Nothing
+    , _paDisplayName = Nothing
+    , _paId = Nothing
+    }
+
+-- | The page author\'s avatar.
+paImage :: Lens' PageAuthor (Maybe PageAuthorImage)
+paImage = lens _paImage (\ s a -> s{_paImage = a})
+
+-- | The URL of the Page creator\'s Profile page.
+paURL :: Lens' PageAuthor (Maybe Text)
+paURL = lens _paURL (\ s a -> s{_paURL = a})
+
+-- | The display name.
+paDisplayName :: Lens' PageAuthor (Maybe Text)
+paDisplayName
+  = lens _paDisplayName
+      (\ s a -> s{_paDisplayName = a})
+
+-- | The identifier of the Page creator.
+paId :: Lens' PageAuthor (Maybe Text)
+paId = lens _paId (\ s a -> s{_paId = a})
+
+instance FromJSON PageAuthor where
+        parseJSON
+          = withObject "PageAuthor"
+              (\ o ->
+                 PageAuthor <$>
+                   (o .:? "image") <*> (o .:? "url") <*>
+                     (o .:? "displayName")
+                     <*> (o .:? "id"))
+
+instance ToJSON PageAuthor where
+        toJSON PageAuthor{..}
+          = object
+              (catMaybes
+                 [("image" .=) <$> _paImage, ("url" .=) <$> _paURL,
+                  ("displayName" .=) <$> _paDisplayName,
+                  ("id" .=) <$> _paId])
+
+--
+-- /See:/ 'blog' smart constructor.
+data Blog = Blog
+    { _bStatus         :: !(Maybe Text)
+    , _bKind           :: !Text
+    , _bPages          :: !(Maybe BlogPages)
+    , _bLocale         :: !(Maybe BlogLocale)
+    , _bPublished      :: !(Maybe DateTime')
+    , _bURL            :: !(Maybe Text)
+    , _bCustomMetaData :: !(Maybe Text)
+    , _bSelfLink       :: !(Maybe Text)
+    , _bName           :: !(Maybe Text)
+    , _bId             :: !(Maybe Text)
+    , _bUpdated        :: !(Maybe DateTime')
+    , _bPosts          :: !(Maybe BlogPosts)
+    , _bDescription    :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Blog' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'bStatus'
+--
+-- * 'bKind'
+--
+-- * 'bPages'
+--
+-- * 'bLocale'
+--
+-- * 'bPublished'
+--
+-- * 'bURL'
+--
+-- * 'bCustomMetaData'
+--
+-- * 'bSelfLink'
+--
+-- * 'bName'
+--
+-- * 'bId'
+--
+-- * 'bUpdated'
+--
+-- * 'bPosts'
+--
+-- * 'bDescription'
+blog
+    :: Blog
+blog =
+    Blog
+    { _bStatus = Nothing
+    , _bKind = "blogger#blog"
+    , _bPages = Nothing
+    , _bLocale = Nothing
+    , _bPublished = Nothing
+    , _bURL = Nothing
+    , _bCustomMetaData = Nothing
+    , _bSelfLink = Nothing
+    , _bName = Nothing
+    , _bId = Nothing
+    , _bUpdated = Nothing
+    , _bPosts = Nothing
+    , _bDescription = Nothing
+    }
+
+-- | The status of the blog.
+bStatus :: Lens' Blog (Maybe Text)
+bStatus = lens _bStatus (\ s a -> s{_bStatus = a})
+
+-- | The kind of this entry. Always blogger#blog
+bKind :: Lens' Blog Text
+bKind = lens _bKind (\ s a -> s{_bKind = a})
+
+-- | The container of pages in this blog.
+bPages :: Lens' Blog (Maybe BlogPages)
+bPages = lens _bPages (\ s a -> s{_bPages = a})
+
+-- | The locale this Blog is set to.
+bLocale :: Lens' Blog (Maybe BlogLocale)
+bLocale = lens _bLocale (\ s a -> s{_bLocale = a})
+
+-- | RFC 3339 date-time when this blog was published.
+bPublished :: Lens' Blog (Maybe UTCTime)
+bPublished
+  = lens _bPublished (\ s a -> s{_bPublished = a}) .
+      mapping _DateTime
+
+-- | The URL where this blog is published.
+bURL :: Lens' Blog (Maybe Text)
+bURL = lens _bURL (\ s a -> s{_bURL = a})
+
+-- | The JSON custom meta-data for the Blog
+bCustomMetaData :: Lens' Blog (Maybe Text)
+bCustomMetaData
+  = lens _bCustomMetaData
+      (\ s a -> s{_bCustomMetaData = a})
+
+-- | The API REST URL to fetch this resource from.
+bSelfLink :: Lens' Blog (Maybe Text)
+bSelfLink
+  = lens _bSelfLink (\ s a -> s{_bSelfLink = a})
+
+-- | The name of this blog. This is displayed as the title.
+bName :: Lens' Blog (Maybe Text)
+bName = lens _bName (\ s a -> s{_bName = a})
+
+-- | The identifier for this resource.
+bId :: Lens' Blog (Maybe Text)
+bId = lens _bId (\ s a -> s{_bId = a})
+
+-- | RFC 3339 date-time when this blog was last updated.
+bUpdated :: Lens' Blog (Maybe UTCTime)
+bUpdated
+  = lens _bUpdated (\ s a -> s{_bUpdated = a}) .
+      mapping _DateTime
+
+-- | The container of posts in this blog.
+bPosts :: Lens' Blog (Maybe BlogPosts)
+bPosts = lens _bPosts (\ s a -> s{_bPosts = a})
+
+-- | The description of this blog. This is displayed underneath the title.
+bDescription :: Lens' Blog (Maybe Text)
+bDescription
+  = lens _bDescription (\ s a -> s{_bDescription = a})
+
+instance FromJSON Blog where
+        parseJSON
+          = withObject "Blog"
+              (\ o ->
+                 Blog <$>
+                   (o .:? "status") <*>
+                     (o .:? "kind" .!= "blogger#blog")
+                     <*> (o .:? "pages")
+                     <*> (o .:? "locale")
+                     <*> (o .:? "published")
+                     <*> (o .:? "url")
+                     <*> (o .:? "customMetaData")
+                     <*> (o .:? "selfLink")
+                     <*> (o .:? "name")
+                     <*> (o .:? "id")
+                     <*> (o .:? "updated")
+                     <*> (o .:? "posts")
+                     <*> (o .:? "description"))
+
+instance ToJSON Blog where
+        toJSON Blog{..}
+          = object
+              (catMaybes
+                 [("status" .=) <$> _bStatus, Just ("kind" .= _bKind),
+                  ("pages" .=) <$> _bPages, ("locale" .=) <$> _bLocale,
+                  ("published" .=) <$> _bPublished,
+                  ("url" .=) <$> _bURL,
+                  ("customMetaData" .=) <$> _bCustomMetaData,
+                  ("selfLink" .=) <$> _bSelfLink,
+                  ("name" .=) <$> _bName, ("id" .=) <$> _bId,
+                  ("updated" .=) <$> _bUpdated,
+                  ("posts" .=) <$> _bPosts,
+                  ("description" .=) <$> _bDescription])
+
+-- | The container of pages in this blog.
+--
+-- /See:/ 'blogPages' smart constructor.
+data BlogPages = BlogPages
+    { _bpsTotalItems :: !(Maybe (Textual Int32))
+    , _bpsSelfLink   :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'BlogPages' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'bpsTotalItems'
+--
+-- * 'bpsSelfLink'
+blogPages
+    :: BlogPages
+blogPages =
+    BlogPages
+    { _bpsTotalItems = Nothing
+    , _bpsSelfLink = Nothing
+    }
+
+-- | The count of pages in this blog.
+bpsTotalItems :: Lens' BlogPages (Maybe Int32)
+bpsTotalItems
+  = lens _bpsTotalItems
+      (\ s a -> s{_bpsTotalItems = a})
+      . mapping _Coerce
+
+-- | The URL of the container for pages in this blog.
+bpsSelfLink :: Lens' BlogPages (Maybe Text)
+bpsSelfLink
+  = lens _bpsSelfLink (\ s a -> s{_bpsSelfLink = a})
+
+instance FromJSON BlogPages where
+        parseJSON
+          = withObject "BlogPages"
+              (\ o ->
+                 BlogPages <$>
+                   (o .:? "totalItems") <*> (o .:? "selfLink"))
+
+instance ToJSON BlogPages where
+        toJSON BlogPages{..}
+          = object
+              (catMaybes
+                 [("totalItems" .=) <$> _bpsTotalItems,
+                  ("selfLink" .=) <$> _bpsSelfLink])
+
+-- | Data about the blog containing this Post.
+--
+-- /See:/ 'postBlog' smart constructor.
+newtype PostBlog = PostBlog
+    { _pbId :: Maybe Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'PostBlog' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pbId'
+postBlog
+    :: PostBlog
+postBlog =
+    PostBlog
+    { _pbId = Nothing
+    }
+
+-- | The identifier of the Blog that contains this Post.
+pbId :: Lens' PostBlog (Maybe Text)
+pbId = lens _pbId (\ s a -> s{_pbId = a})
+
+instance FromJSON PostBlog where
+        parseJSON
+          = withObject "PostBlog"
+              (\ o -> PostBlog <$> (o .:? "id"))
+
+instance ToJSON PostBlog where
+        toJSON PostBlog{..}
+          = object (catMaybes [("id" .=) <$> _pbId])
+
+--
+-- /See:/ 'pageList' smart constructor.
+data PageList = PageList
+    { _pllEtag          :: !(Maybe Text)
+    , _pllNextPageToken :: !(Maybe Text)
+    , _pllKind          :: !Text
+    , _pllItems         :: !(Maybe [Page])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'PageList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pllEtag'
+--
+-- * 'pllNextPageToken'
+--
+-- * 'pllKind'
+--
+-- * 'pllItems'
+pageList
+    :: PageList
+pageList =
+    PageList
+    { _pllEtag = Nothing
+    , _pllNextPageToken = Nothing
+    , _pllKind = "blogger#pageList"
+    , _pllItems = Nothing
+    }
+
+-- | Etag of the response.
+pllEtag :: Lens' PageList (Maybe Text)
+pllEtag = lens _pllEtag (\ s a -> s{_pllEtag = a})
+
+-- | Pagination token to fetch the next page, if one exists.
+pllNextPageToken :: Lens' PageList (Maybe Text)
+pllNextPageToken
+  = lens _pllNextPageToken
+      (\ s a -> s{_pllNextPageToken = a})
+
+-- | The kind of this entity. Always blogger#pageList
+pllKind :: Lens' PageList Text
+pllKind = lens _pllKind (\ s a -> s{_pllKind = a})
+
+-- | The list of Pages for a Blog.
+pllItems :: Lens' PageList [Page]
+pllItems
+  = lens _pllItems (\ s a -> s{_pllItems = a}) .
+      _Default
+      . _Coerce
+
+instance FromJSON PageList where
+        parseJSON
+          = withObject "PageList"
+              (\ o ->
+                 PageList <$>
+                   (o .:? "etag") <*> (o .:? "nextPageToken") <*>
+                     (o .:? "kind" .!= "blogger#pageList")
+                     <*> (o .:? "items" .!= mempty))
+
+instance ToJSON PageList where
+        toJSON PageList{..}
+          = object
+              (catMaybes
+                 [("etag" .=) <$> _pllEtag,
+                  ("nextPageToken" .=) <$> _pllNextPageToken,
+                  Just ("kind" .= _pllKind),
+                  ("items" .=) <$> _pllItems])
+
+-- | This user\'s locale
+--
+-- /See:/ 'userLocale' smart constructor.
+data UserLocale = UserLocale
+    { _ulVariant  :: !(Maybe Text)
+    , _ulCountry  :: !(Maybe Text)
+    , _ulLanguage :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'UserLocale' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ulVariant'
+--
+-- * 'ulCountry'
+--
+-- * 'ulLanguage'
+userLocale
+    :: UserLocale
+userLocale =
+    UserLocale
+    { _ulVariant = Nothing
+    , _ulCountry = Nothing
+    , _ulLanguage = Nothing
+    }
+
+-- | The user\'s language variant setting.
+ulVariant :: Lens' UserLocale (Maybe Text)
+ulVariant
+  = lens _ulVariant (\ s a -> s{_ulVariant = a})
+
+-- | The user\'s country setting.
+ulCountry :: Lens' UserLocale (Maybe Text)
+ulCountry
+  = lens _ulCountry (\ s a -> s{_ulCountry = a})
+
+-- | The user\'s language setting.
+ulLanguage :: Lens' UserLocale (Maybe Text)
+ulLanguage
+  = lens _ulLanguage (\ s a -> s{_ulLanguage = a})
+
+instance FromJSON UserLocale where
+        parseJSON
+          = withObject "UserLocale"
+              (\ o ->
+                 UserLocale <$>
+                   (o .:? "variant") <*> (o .:? "country") <*>
+                     (o .:? "language"))
+
+instance ToJSON UserLocale where
+        toJSON UserLocale{..}
+          = object
+              (catMaybes
+                 [("variant" .=) <$> _ulVariant,
+                  ("country" .=) <$> _ulCountry,
+                  ("language" .=) <$> _ulLanguage])
+
+-- | The comment creator\'s avatar.
+--
+-- /See:/ 'commentAuthorImage' smart constructor.
+newtype CommentAuthorImage = CommentAuthorImage
+    { _caiURL :: Maybe Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CommentAuthorImage' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'caiURL'
+commentAuthorImage
+    :: CommentAuthorImage
+commentAuthorImage =
+    CommentAuthorImage
+    { _caiURL = Nothing
+    }
+
+-- | The comment creator\'s avatar URL.
+caiURL :: Lens' CommentAuthorImage (Maybe Text)
+caiURL = lens _caiURL (\ s a -> s{_caiURL = a})
+
+instance FromJSON CommentAuthorImage where
+        parseJSON
+          = withObject "CommentAuthorImage"
+              (\ o -> CommentAuthorImage <$> (o .:? "url"))
+
+instance ToJSON CommentAuthorImage where
+        toJSON CommentAuthorImage{..}
+          = object (catMaybes [("url" .=) <$> _caiURL])
+
+--
+-- /See:/ 'user' smart constructor.
+data User = User
+    { _uBlogs       :: !(Maybe UserBlogs)
+    , _uKind        :: !Text
+    , _uCreated     :: !(Maybe DateTime')
+    , _uLocale      :: !(Maybe UserLocale)
+    , _uURL         :: !(Maybe Text)
+    , _uSelfLink    :: !(Maybe Text)
+    , _uAbout       :: !(Maybe Text)
+    , _uDisplayName :: !(Maybe Text)
+    , _uId          :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'User' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'uBlogs'
+--
+-- * 'uKind'
+--
+-- * 'uCreated'
+--
+-- * 'uLocale'
+--
+-- * 'uURL'
+--
+-- * 'uSelfLink'
+--
+-- * 'uAbout'
+--
+-- * 'uDisplayName'
+--
+-- * 'uId'
+user
+    :: User
+user =
+    User
+    { _uBlogs = Nothing
+    , _uKind = "blogger#user"
+    , _uCreated = Nothing
+    , _uLocale = Nothing
+    , _uURL = Nothing
+    , _uSelfLink = Nothing
+    , _uAbout = Nothing
+    , _uDisplayName = Nothing
+    , _uId = Nothing
+    }
+
+-- | The container of blogs for this user.
+uBlogs :: Lens' User (Maybe UserBlogs)
+uBlogs = lens _uBlogs (\ s a -> s{_uBlogs = a})
+
+-- | The kind of this entity. Always blogger#user
+uKind :: Lens' User Text
+uKind = lens _uKind (\ s a -> s{_uKind = a})
+
+-- | The timestamp of when this profile was created, in seconds since epoch.
+uCreated :: Lens' User (Maybe UTCTime)
+uCreated
+  = lens _uCreated (\ s a -> s{_uCreated = a}) .
+      mapping _DateTime
+
+-- | This user\'s locale
+uLocale :: Lens' User (Maybe UserLocale)
+uLocale = lens _uLocale (\ s a -> s{_uLocale = a})
+
+-- | The user\'s profile page.
+uURL :: Lens' User (Maybe Text)
+uURL = lens _uURL (\ s a -> s{_uURL = a})
+
+-- | The API REST URL to fetch this resource from.
+uSelfLink :: Lens' User (Maybe Text)
+uSelfLink
+  = lens _uSelfLink (\ s a -> s{_uSelfLink = a})
+
+-- | Profile summary information.
+uAbout :: Lens' User (Maybe Text)
+uAbout = lens _uAbout (\ s a -> s{_uAbout = a})
+
+-- | The display name.
+uDisplayName :: Lens' User (Maybe Text)
+uDisplayName
+  = lens _uDisplayName (\ s a -> s{_uDisplayName = a})
+
+-- | The identifier for this User.
+uId :: Lens' User (Maybe Text)
+uId = lens _uId (\ s a -> s{_uId = a})
+
+instance FromJSON User where
+        parseJSON
+          = withObject "User"
+              (\ o ->
+                 User <$>
+                   (o .:? "blogs") <*> (o .:? "kind" .!= "blogger#user")
+                     <*> (o .:? "created")
+                     <*> (o .:? "locale")
+                     <*> (o .:? "url")
+                     <*> (o .:? "selfLink")
+                     <*> (o .:? "about")
+                     <*> (o .:? "displayName")
+                     <*> (o .:? "id"))
+
+instance ToJSON User where
+        toJSON User{..}
+          = object
+              (catMaybes
+                 [("blogs" .=) <$> _uBlogs, Just ("kind" .= _uKind),
+                  ("created" .=) <$> _uCreated,
+                  ("locale" .=) <$> _uLocale, ("url" .=) <$> _uURL,
+                  ("selfLink" .=) <$> _uSelfLink,
+                  ("about" .=) <$> _uAbout,
+                  ("displayName" .=) <$> _uDisplayName,
+                  ("id" .=) <$> _uId])
+
+-- | The container of blogs for this user.
+--
+-- /See:/ 'userBlogs' smart constructor.
+newtype UserBlogs = UserBlogs
+    { _ubSelfLink :: Maybe Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'UserBlogs' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ubSelfLink'
+userBlogs
+    :: UserBlogs
+userBlogs =
+    UserBlogs
+    { _ubSelfLink = Nothing
+    }
+
+-- | The URL of the Blogs for this user.
+ubSelfLink :: Lens' UserBlogs (Maybe Text)
+ubSelfLink
+  = lens _ubSelfLink (\ s a -> s{_ubSelfLink = a})
+
+instance FromJSON UserBlogs where
+        parseJSON
+          = withObject "UserBlogs"
+              (\ o -> UserBlogs <$> (o .:? "selfLink"))
+
+instance ToJSON UserBlogs where
+        toJSON UserBlogs{..}
+          = object
+              (catMaybes [("selfLink" .=) <$> _ubSelfLink])
+
+-- | The container of comments on this Post.
+--
+-- /See:/ 'postReplies' smart constructor.
+data PostReplies = PostReplies
+    { _prTotalItems :: !(Maybe (Textual Int64))
+    , _prItems      :: !(Maybe [Comment])
+    , _prSelfLink   :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'PostReplies' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'prTotalItems'
+--
+-- * 'prItems'
+--
+-- * 'prSelfLink'
+postReplies
+    :: PostReplies
+postReplies =
+    PostReplies
+    { _prTotalItems = Nothing
+    , _prItems = Nothing
+    , _prSelfLink = Nothing
+    }
+
+-- | The count of comments on this post.
+prTotalItems :: Lens' PostReplies (Maybe Int64)
+prTotalItems
+  = lens _prTotalItems (\ s a -> s{_prTotalItems = a})
+      . mapping _Coerce
+
+-- | The List of Comments for this Post.
+prItems :: Lens' PostReplies [Comment]
+prItems
+  = lens _prItems (\ s a -> s{_prItems = a}) . _Default
+      . _Coerce
+
+-- | The URL of the comments on this post.
+prSelfLink :: Lens' PostReplies (Maybe Text)
+prSelfLink
+  = lens _prSelfLink (\ s a -> s{_prSelfLink = a})
+
+instance FromJSON PostReplies where
+        parseJSON
+          = withObject "PostReplies"
+              (\ o ->
+                 PostReplies <$>
+                   (o .:? "totalItems") <*> (o .:? "items" .!= mempty)
+                     <*> (o .:? "selfLink"))
+
+instance ToJSON PostReplies where
+        toJSON PostReplies{..}
+          = object
+              (catMaybes
+                 [("totalItems" .=) <$> _prTotalItems,
+                  ("items" .=) <$> _prItems,
+                  ("selfLink" .=) <$> _prSelfLink])
+
+--
+-- /See:/ 'blogList' smart constructor.
+data BlogList = BlogList
+    { _blKind          :: !Text
+    , _blItems         :: !(Maybe [Blog])
+    , _blBlogUserInfos :: !(Maybe [BlogUserInfo])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'BlogList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'blKind'
+--
+-- * 'blItems'
+--
+-- * 'blBlogUserInfos'
+blogList
+    :: BlogList
+blogList =
+    BlogList
+    { _blKind = "blogger#blogList"
+    , _blItems = Nothing
+    , _blBlogUserInfos = Nothing
+    }
+
+-- | The kind of this entity. Always blogger#blogList
+blKind :: Lens' BlogList Text
+blKind = lens _blKind (\ s a -> s{_blKind = a})
+
+-- | The list of Blogs this user has Authorship or Admin rights over.
+blItems :: Lens' BlogList [Blog]
+blItems
+  = lens _blItems (\ s a -> s{_blItems = a}) . _Default
+      . _Coerce
+
+-- | Admin level list of blog per-user information
+blBlogUserInfos :: Lens' BlogList [BlogUserInfo]
+blBlogUserInfos
+  = lens _blBlogUserInfos
+      (\ s a -> s{_blBlogUserInfos = a})
+      . _Default
+      . _Coerce
+
+instance FromJSON BlogList where
+        parseJSON
+          = withObject "BlogList"
+              (\ o ->
+                 BlogList <$>
+                   (o .:? "kind" .!= "blogger#blogList") <*>
+                     (o .:? "items" .!= mempty)
+                     <*> (o .:? "blogUserInfos" .!= mempty))
+
+instance ToJSON BlogList where
+        toJSON BlogList{..}
+          = object
+              (catMaybes
+                 [Just ("kind" .= _blKind), ("items" .=) <$> _blItems,
+                  ("blogUserInfos" .=) <$> _blBlogUserInfos])
+
+-- | Data about the blog containing this Page.
+--
+-- /See:/ 'pageBlog' smart constructor.
+newtype PageBlog = PageBlog
+    { _pId :: Maybe Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'PageBlog' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pId'
+pageBlog
+    :: PageBlog
+pageBlog =
+    PageBlog
+    { _pId = Nothing
+    }
+
+-- | The identifier of the blog containing this page.
+pId :: Lens' PageBlog (Maybe Text)
+pId = lens _pId (\ s a -> s{_pId = a})
+
+instance FromJSON PageBlog where
+        parseJSON
+          = withObject "PageBlog"
+              (\ o -> PageBlog <$> (o .:? "id"))
+
+instance ToJSON PageBlog where
+        toJSON PageBlog{..}
+          = object (catMaybes [("id" .=) <$> _pId])
+
+-- | The author of this Post.
+--
+-- /See:/ 'postAuthor' smart constructor.
+data PostAuthor = PostAuthor
+    { _paaImage       :: !(Maybe PostAuthorImage)
+    , _paaURL         :: !(Maybe Text)
+    , _paaDisplayName :: !(Maybe Text)
+    , _paaId          :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'PostAuthor' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'paaImage'
+--
+-- * 'paaURL'
+--
+-- * 'paaDisplayName'
+--
+-- * 'paaId'
+postAuthor
+    :: PostAuthor
+postAuthor =
+    PostAuthor
+    { _paaImage = Nothing
+    , _paaURL = Nothing
+    , _paaDisplayName = Nothing
+    , _paaId = Nothing
+    }
+
+-- | The Post author\'s avatar.
+paaImage :: Lens' PostAuthor (Maybe PostAuthorImage)
+paaImage = lens _paaImage (\ s a -> s{_paaImage = a})
+
+-- | The URL of the Post creator\'s Profile page.
+paaURL :: Lens' PostAuthor (Maybe Text)
+paaURL = lens _paaURL (\ s a -> s{_paaURL = a})
+
+-- | The display name.
+paaDisplayName :: Lens' PostAuthor (Maybe Text)
+paaDisplayName
+  = lens _paaDisplayName
+      (\ s a -> s{_paaDisplayName = a})
+
+-- | The identifier of the Post creator.
+paaId :: Lens' PostAuthor (Maybe Text)
+paaId = lens _paaId (\ s a -> s{_paaId = a})
+
+instance FromJSON PostAuthor where
+        parseJSON
+          = withObject "PostAuthor"
+              (\ o ->
+                 PostAuthor <$>
+                   (o .:? "image") <*> (o .:? "url") <*>
+                     (o .:? "displayName")
+                     <*> (o .:? "id"))
+
+instance ToJSON PostAuthor where
+        toJSON PostAuthor{..}
+          = object
+              (catMaybes
+                 [("image" .=) <$> _paaImage, ("url" .=) <$> _paaURL,
+                  ("displayName" .=) <$> _paaDisplayName,
+                  ("id" .=) <$> _paaId])
+
+--
+-- /See:/ 'postPerUserInfo' smart constructor.
+data PostPerUserInfo = PostPerUserInfo
+    { _ppuiKind          :: !Text
+    , _ppuiBlogId        :: !(Maybe Text)
+    , _ppuiUserId        :: !(Maybe Text)
+    , _ppuiHasEditAccess :: !(Maybe Bool)
+    , _ppuiPostId        :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'PostPerUserInfo' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ppuiKind'
+--
+-- * 'ppuiBlogId'
+--
+-- * 'ppuiUserId'
+--
+-- * 'ppuiHasEditAccess'
+--
+-- * 'ppuiPostId'
+postPerUserInfo
+    :: PostPerUserInfo
+postPerUserInfo =
+    PostPerUserInfo
+    { _ppuiKind = "blogger#postPerUserInfo"
+    , _ppuiBlogId = Nothing
+    , _ppuiUserId = Nothing
+    , _ppuiHasEditAccess = Nothing
+    , _ppuiPostId = Nothing
+    }
+
+-- | The kind of this entity. Always blogger#postPerUserInfo
+ppuiKind :: Lens' PostPerUserInfo Text
+ppuiKind = lens _ppuiKind (\ s a -> s{_ppuiKind = a})
+
+-- | ID of the Blog that the post resource belongs to.
+ppuiBlogId :: Lens' PostPerUserInfo (Maybe Text)
+ppuiBlogId
+  = lens _ppuiBlogId (\ s a -> s{_ppuiBlogId = a})
+
+-- | ID of the User.
+ppuiUserId :: Lens' PostPerUserInfo (Maybe Text)
+ppuiUserId
+  = lens _ppuiUserId (\ s a -> s{_ppuiUserId = a})
+
+-- | True if the user has Author level access to the post.
+ppuiHasEditAccess :: Lens' PostPerUserInfo (Maybe Bool)
+ppuiHasEditAccess
+  = lens _ppuiHasEditAccess
+      (\ s a -> s{_ppuiHasEditAccess = a})
+
+-- | ID of the Post resource.
+ppuiPostId :: Lens' PostPerUserInfo (Maybe Text)
+ppuiPostId
+  = lens _ppuiPostId (\ s a -> s{_ppuiPostId = a})
+
+instance FromJSON PostPerUserInfo where
+        parseJSON
+          = withObject "PostPerUserInfo"
+              (\ o ->
+                 PostPerUserInfo <$>
+                   (o .:? "kind" .!= "blogger#postPerUserInfo") <*>
+                     (o .:? "blogId")
+                     <*> (o .:? "userId")
+                     <*> (o .:? "hasEditAccess")
+                     <*> (o .:? "postId"))
+
+instance ToJSON PostPerUserInfo where
+        toJSON PostPerUserInfo{..}
+          = object
+              (catMaybes
+                 [Just ("kind" .= _ppuiKind),
+                  ("blogId" .=) <$> _ppuiBlogId,
+                  ("userId" .=) <$> _ppuiUserId,
+                  ("hasEditAccess" .=) <$> _ppuiHasEditAccess,
+                  ("postId" .=) <$> _ppuiPostId])
+
+--
+-- /See:/ 'pageviewsCountsItem' smart constructor.
+data PageviewsCountsItem = PageviewsCountsItem
+    { _pciTimeRange :: !(Maybe Text)
+    , _pciCount     :: !(Maybe (Textual Int64))
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'PageviewsCountsItem' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pciTimeRange'
+--
+-- * 'pciCount'
+pageviewsCountsItem
+    :: PageviewsCountsItem
+pageviewsCountsItem =
+    PageviewsCountsItem
+    { _pciTimeRange = Nothing
+    , _pciCount = Nothing
+    }
+
+-- | Time range the given count applies to
+pciTimeRange :: Lens' PageviewsCountsItem (Maybe Text)
+pciTimeRange
+  = lens _pciTimeRange (\ s a -> s{_pciTimeRange = a})
+
+-- | Count of page views for the given time range
+pciCount :: Lens' PageviewsCountsItem (Maybe Int64)
+pciCount
+  = lens _pciCount (\ s a -> s{_pciCount = a}) .
+      mapping _Coerce
+
+instance FromJSON PageviewsCountsItem where
+        parseJSON
+          = withObject "PageviewsCountsItem"
+              (\ o ->
+                 PageviewsCountsItem <$>
+                   (o .:? "timeRange") <*> (o .:? "count"))
+
+instance ToJSON PageviewsCountsItem where
+        toJSON PageviewsCountsItem{..}
+          = object
+              (catMaybes
+                 [("timeRange" .=) <$> _pciTimeRange,
+                  ("count" .=) <$> _pciCount])
+
+--
+-- /See:/ 'comment' smart constructor.
+data Comment = Comment
+    { _cStatus    :: !(Maybe Text)
+    , _cPost      :: !(Maybe CommentPost)
+    , _cKind      :: !Text
+    , _cPublished :: !(Maybe DateTime')
+    , _cBlog      :: !(Maybe CommentBlog)
+    , _cContent   :: !(Maybe Text)
+    , _cSelfLink  :: !(Maybe Text)
+    , _cAuthor    :: !(Maybe CommentAuthor)
+    , _cId        :: !(Maybe Text)
+    , _cUpdated   :: !(Maybe DateTime')
+    , _cInReplyTo :: !(Maybe CommentInReplyTo)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Comment' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cStatus'
+--
+-- * 'cPost'
+--
+-- * 'cKind'
+--
+-- * 'cPublished'
+--
+-- * 'cBlog'
+--
+-- * 'cContent'
+--
+-- * 'cSelfLink'
+--
+-- * 'cAuthor'
+--
+-- * 'cId'
+--
+-- * 'cUpdated'
+--
+-- * 'cInReplyTo'
+comment
+    :: Comment
+comment =
+    Comment
+    { _cStatus = Nothing
+    , _cPost = Nothing
+    , _cKind = "blogger#comment"
+    , _cPublished = Nothing
+    , _cBlog = Nothing
+    , _cContent = Nothing
+    , _cSelfLink = Nothing
+    , _cAuthor = Nothing
+    , _cId = Nothing
+    , _cUpdated = Nothing
+    , _cInReplyTo = Nothing
+    }
+
+-- | The status of the comment (only populated for admin users)
+cStatus :: Lens' Comment (Maybe Text)
+cStatus = lens _cStatus (\ s a -> s{_cStatus = a})
+
+-- | Data about the post containing this comment.
+cPost :: Lens' Comment (Maybe CommentPost)
+cPost = lens _cPost (\ s a -> s{_cPost = a})
+
+-- | The kind of this entry. Always blogger#comment
+cKind :: Lens' Comment Text
+cKind = lens _cKind (\ s a -> s{_cKind = a})
+
+-- | RFC 3339 date-time when this comment was published.
+cPublished :: Lens' Comment (Maybe UTCTime)
+cPublished
+  = lens _cPublished (\ s a -> s{_cPublished = a}) .
+      mapping _DateTime
+
+-- | Data about the blog containing this comment.
+cBlog :: Lens' Comment (Maybe CommentBlog)
+cBlog = lens _cBlog (\ s a -> s{_cBlog = a})
+
+-- | The actual content of the comment. May include HTML markup.
+cContent :: Lens' Comment (Maybe Text)
+cContent = lens _cContent (\ s a -> s{_cContent = a})
+
+-- | The API REST URL to fetch this resource from.
+cSelfLink :: Lens' Comment (Maybe Text)
+cSelfLink
+  = lens _cSelfLink (\ s a -> s{_cSelfLink = a})
+
+-- | The author of this Comment.
+cAuthor :: Lens' Comment (Maybe CommentAuthor)
+cAuthor = lens _cAuthor (\ s a -> s{_cAuthor = a})
+
+-- | The identifier for this resource.
+cId :: Lens' Comment (Maybe Text)
+cId = lens _cId (\ s a -> s{_cId = a})
+
+-- | RFC 3339 date-time when this comment was last updated.
+cUpdated :: Lens' Comment (Maybe UTCTime)
+cUpdated
+  = lens _cUpdated (\ s a -> s{_cUpdated = a}) .
+      mapping _DateTime
+
+-- | Data about the comment this is in reply to.
+cInReplyTo :: Lens' Comment (Maybe CommentInReplyTo)
+cInReplyTo
+  = lens _cInReplyTo (\ s a -> s{_cInReplyTo = a})
+
+instance FromJSON Comment where
+        parseJSON
+          = withObject "Comment"
+              (\ o ->
+                 Comment <$>
+                   (o .:? "status") <*> (o .:? "post") <*>
+                     (o .:? "kind" .!= "blogger#comment")
+                     <*> (o .:? "published")
+                     <*> (o .:? "blog")
+                     <*> (o .:? "content")
+                     <*> (o .:? "selfLink")
+                     <*> (o .:? "author")
+                     <*> (o .:? "id")
+                     <*> (o .:? "updated")
+                     <*> (o .:? "inReplyTo"))
+
+instance ToJSON Comment where
+        toJSON Comment{..}
+          = object
+              (catMaybes
+                 [("status" .=) <$> _cStatus, ("post" .=) <$> _cPost,
+                  Just ("kind" .= _cKind),
+                  ("published" .=) <$> _cPublished,
+                  ("blog" .=) <$> _cBlog, ("content" .=) <$> _cContent,
+                  ("selfLink" .=) <$> _cSelfLink,
+                  ("author" .=) <$> _cAuthor, ("id" .=) <$> _cId,
+                  ("updated" .=) <$> _cUpdated,
+                  ("inReplyTo" .=) <$> _cInReplyTo])
+
+-- | Data about the post containing this comment.
+--
+-- /See:/ 'commentPost' smart constructor.
+newtype CommentPost = CommentPost
+    { _cpId :: Maybe Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CommentPost' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cpId'
+commentPost
+    :: CommentPost
+commentPost =
+    CommentPost
+    { _cpId = Nothing
+    }
+
+-- | The identifier of the post containing this comment.
+cpId :: Lens' CommentPost (Maybe Text)
+cpId = lens _cpId (\ s a -> s{_cpId = a})
+
+instance FromJSON CommentPost where
+        parseJSON
+          = withObject "CommentPost"
+              (\ o -> CommentPost <$> (o .:? "id"))
+
+instance ToJSON CommentPost where
+        toJSON CommentPost{..}
+          = object (catMaybes [("id" .=) <$> _cpId])
+
+--
+-- /See:/ 'blogPerUserInfo' smart constructor.
+data BlogPerUserInfo = BlogPerUserInfo
+    { _bpuiPhotosAlbumKey :: !(Maybe Text)
+    , _bpuiKind           :: !Text
+    , _bpuiBlogId         :: !(Maybe Text)
+    , _bpuiUserId         :: !(Maybe Text)
+    , _bpuiRole           :: !(Maybe Text)
+    , _bpuiHasAdminAccess :: !(Maybe Bool)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'BlogPerUserInfo' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'bpuiPhotosAlbumKey'
+--
+-- * 'bpuiKind'
+--
+-- * 'bpuiBlogId'
+--
+-- * 'bpuiUserId'
+--
+-- * 'bpuiRole'
+--
+-- * 'bpuiHasAdminAccess'
+blogPerUserInfo
+    :: BlogPerUserInfo
+blogPerUserInfo =
+    BlogPerUserInfo
+    { _bpuiPhotosAlbumKey = Nothing
+    , _bpuiKind = "blogger#blogPerUserInfo"
+    , _bpuiBlogId = Nothing
+    , _bpuiUserId = Nothing
+    , _bpuiRole = Nothing
+    , _bpuiHasAdminAccess = Nothing
+    }
+
+-- | The Photo Album Key for the user when adding photos to the blog
+bpuiPhotosAlbumKey :: Lens' BlogPerUserInfo (Maybe Text)
+bpuiPhotosAlbumKey
+  = lens _bpuiPhotosAlbumKey
+      (\ s a -> s{_bpuiPhotosAlbumKey = a})
+
+-- | The kind of this entity. Always blogger#blogPerUserInfo
+bpuiKind :: Lens' BlogPerUserInfo Text
+bpuiKind = lens _bpuiKind (\ s a -> s{_bpuiKind = a})
+
+-- | ID of the Blog resource
+bpuiBlogId :: Lens' BlogPerUserInfo (Maybe Text)
+bpuiBlogId
+  = lens _bpuiBlogId (\ s a -> s{_bpuiBlogId = a})
+
+-- | ID of the User
+bpuiUserId :: Lens' BlogPerUserInfo (Maybe Text)
+bpuiUserId
+  = lens _bpuiUserId (\ s a -> s{_bpuiUserId = a})
+
+-- | Access permissions that the user has for the blog (ADMIN, AUTHOR, or
+-- READER).
+bpuiRole :: Lens' BlogPerUserInfo (Maybe Text)
+bpuiRole = lens _bpuiRole (\ s a -> s{_bpuiRole = a})
+
+-- | True if the user has Admin level access to the blog.
+bpuiHasAdminAccess :: Lens' BlogPerUserInfo (Maybe Bool)
+bpuiHasAdminAccess
+  = lens _bpuiHasAdminAccess
+      (\ s a -> s{_bpuiHasAdminAccess = a})
+
+instance FromJSON BlogPerUserInfo where
+        parseJSON
+          = withObject "BlogPerUserInfo"
+              (\ o ->
+                 BlogPerUserInfo <$>
+                   (o .:? "photosAlbumKey") <*>
+                     (o .:? "kind" .!= "blogger#blogPerUserInfo")
+                     <*> (o .:? "blogId")
+                     <*> (o .:? "userId")
+                     <*> (o .:? "role")
+                     <*> (o .:? "hasAdminAccess"))
+
+instance ToJSON BlogPerUserInfo where
+        toJSON BlogPerUserInfo{..}
+          = object
+              (catMaybes
+                 [("photosAlbumKey" .=) <$> _bpuiPhotosAlbumKey,
+                  Just ("kind" .= _bpuiKind),
+                  ("blogId" .=) <$> _bpuiBlogId,
+                  ("userId" .=) <$> _bpuiUserId,
+                  ("role" .=) <$> _bpuiRole,
+                  ("hasAdminAccess" .=) <$> _bpuiHasAdminAccess])
+
+--
+-- /See:/ 'postUserInfosList' smart constructor.
+data PostUserInfosList = PostUserInfosList
+    { _puilNextPageToken :: !(Maybe Text)
+    , _puilKind          :: !Text
+    , _puilItems         :: !(Maybe [PostUserInfo])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'PostUserInfosList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'puilNextPageToken'
+--
+-- * 'puilKind'
+--
+-- * 'puilItems'
+postUserInfosList
+    :: PostUserInfosList
+postUserInfosList =
+    PostUserInfosList
+    { _puilNextPageToken = Nothing
+    , _puilKind = "blogger#postUserInfosList"
+    , _puilItems = Nothing
+    }
+
+-- | Pagination token to fetch the next page, if one exists.
+puilNextPageToken :: Lens' PostUserInfosList (Maybe Text)
+puilNextPageToken
+  = lens _puilNextPageToken
+      (\ s a -> s{_puilNextPageToken = a})
+
+-- | The kind of this entity. Always blogger#postList
+puilKind :: Lens' PostUserInfosList Text
+puilKind = lens _puilKind (\ s a -> s{_puilKind = a})
+
+-- | The list of Posts with User information for the post, for this Blog.
+puilItems :: Lens' PostUserInfosList [PostUserInfo]
+puilItems
+  = lens _puilItems (\ s a -> s{_puilItems = a}) .
+      _Default
+      . _Coerce
+
+instance FromJSON PostUserInfosList where
+        parseJSON
+          = withObject "PostUserInfosList"
+              (\ o ->
+                 PostUserInfosList <$>
+                   (o .:? "nextPageToken") <*>
+                     (o .:? "kind" .!= "blogger#postUserInfosList")
+                     <*> (o .:? "items" .!= mempty))
+
+instance ToJSON PostUserInfosList where
+        toJSON PostUserInfosList{..}
+          = object
+              (catMaybes
+                 [("nextPageToken" .=) <$> _puilNextPageToken,
+                  Just ("kind" .= _puilKind),
+                  ("items" .=) <$> _puilItems])
+
+-- | The author of this Comment.
+--
+-- /See:/ 'commentAuthor' smart constructor.
+data CommentAuthor = CommentAuthor
+    { _caImage       :: !(Maybe CommentAuthorImage)
+    , _caURL         :: !(Maybe Text)
+    , _caDisplayName :: !(Maybe Text)
+    , _caId          :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CommentAuthor' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'caImage'
+--
+-- * 'caURL'
+--
+-- * 'caDisplayName'
+--
+-- * 'caId'
+commentAuthor
+    :: CommentAuthor
+commentAuthor =
+    CommentAuthor
+    { _caImage = Nothing
+    , _caURL = Nothing
+    , _caDisplayName = Nothing
+    , _caId = Nothing
+    }
+
+-- | The comment creator\'s avatar.
+caImage :: Lens' CommentAuthor (Maybe CommentAuthorImage)
+caImage = lens _caImage (\ s a -> s{_caImage = a})
+
+-- | The URL of the Comment creator\'s Profile page.
+caURL :: Lens' CommentAuthor (Maybe Text)
+caURL = lens _caURL (\ s a -> s{_caURL = a})
+
+-- | The display name.
+caDisplayName :: Lens' CommentAuthor (Maybe Text)
+caDisplayName
+  = lens _caDisplayName
+      (\ s a -> s{_caDisplayName = a})
+
+-- | The identifier of the Comment creator.
+caId :: Lens' CommentAuthor (Maybe Text)
+caId = lens _caId (\ s a -> s{_caId = a})
+
+instance FromJSON CommentAuthor where
+        parseJSON
+          = withObject "CommentAuthor"
+              (\ o ->
+                 CommentAuthor <$>
+                   (o .:? "image") <*> (o .:? "url") <*>
+                     (o .:? "displayName")
+                     <*> (o .:? "id"))
+
+instance ToJSON CommentAuthor where
+        toJSON CommentAuthor{..}
+          = object
+              (catMaybes
+                 [("image" .=) <$> _caImage, ("url" .=) <$> _caURL,
+                  ("displayName" .=) <$> _caDisplayName,
+                  ("id" .=) <$> _caId])
+
+--
+-- /See:/ 'blogUserInfo' smart constructor.
+data BlogUserInfo = BlogUserInfo
+    { _buiKind         :: !Text
+    , _buiBlog         :: !(Maybe Blog)
+    , _buiBlogUserInfo :: !(Maybe BlogPerUserInfo)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'BlogUserInfo' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'buiKind'
+--
+-- * 'buiBlog'
+--
+-- * 'buiBlogUserInfo'
+blogUserInfo
+    :: BlogUserInfo
+blogUserInfo =
+    BlogUserInfo
+    { _buiKind = "blogger#blogUserInfo"
+    , _buiBlog = Nothing
+    , _buiBlogUserInfo = Nothing
+    }
+
+-- | The kind of this entity. Always blogger#blogUserInfo
+buiKind :: Lens' BlogUserInfo Text
+buiKind = lens _buiKind (\ s a -> s{_buiKind = a})
+
+-- | The Blog resource.
+buiBlog :: Lens' BlogUserInfo (Maybe Blog)
+buiBlog = lens _buiBlog (\ s a -> s{_buiBlog = a})
+
+-- | Information about a User for the Blog.
+buiBlogUserInfo :: Lens' BlogUserInfo (Maybe BlogPerUserInfo)
+buiBlogUserInfo
+  = lens _buiBlogUserInfo
+      (\ s a -> s{_buiBlogUserInfo = a})
+
+instance FromJSON BlogUserInfo where
+        parseJSON
+          = withObject "BlogUserInfo"
+              (\ o ->
+                 BlogUserInfo <$>
+                   (o .:? "kind" .!= "blogger#blogUserInfo") <*>
+                     (o .:? "blog")
+                     <*> (o .:? "blog_user_info"))
+
+instance ToJSON BlogUserInfo where
+        toJSON BlogUserInfo{..}
+          = object
+              (catMaybes
+                 [Just ("kind" .= _buiKind), ("blog" .=) <$> _buiBlog,
+                  ("blog_user_info" .=) <$> _buiBlogUserInfo])
+
+-- | The page author\'s avatar.
+--
+-- /See:/ 'pageAuthorImage' smart constructor.
+newtype PageAuthorImage = PageAuthorImage
+    { _pURL :: Maybe Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'PageAuthorImage' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pURL'
+pageAuthorImage
+    :: PageAuthorImage
+pageAuthorImage =
+    PageAuthorImage
+    { _pURL = Nothing
+    }
+
+-- | The page author\'s avatar URL.
+pURL :: Lens' PageAuthorImage (Maybe Text)
+pURL = lens _pURL (\ s a -> s{_pURL = a})
+
+instance FromJSON PageAuthorImage where
+        parseJSON
+          = withObject "PageAuthorImage"
+              (\ o -> PageAuthorImage <$> (o .:? "url"))
+
+instance ToJSON PageAuthorImage where
+        toJSON PageAuthorImage{..}
+          = object (catMaybes [("url" .=) <$> _pURL])
+
+--
+-- /See:/ 'commentList' smart constructor.
+data CommentList = CommentList
+    { _clEtag          :: !(Maybe Text)
+    , _clNextPageToken :: !(Maybe Text)
+    , _clKind          :: !Text
+    , _clItems         :: !(Maybe [Comment])
+    , _clPrevPageToken :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CommentList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'clEtag'
+--
+-- * 'clNextPageToken'
+--
+-- * 'clKind'
+--
+-- * 'clItems'
+--
+-- * 'clPrevPageToken'
+commentList
+    :: CommentList
+commentList =
+    CommentList
+    { _clEtag = Nothing
+    , _clNextPageToken = Nothing
+    , _clKind = "blogger#commentList"
+    , _clItems = Nothing
+    , _clPrevPageToken = Nothing
+    }
+
+-- | Etag of the response.
+clEtag :: Lens' CommentList (Maybe Text)
+clEtag = lens _clEtag (\ s a -> s{_clEtag = a})
+
+-- | Pagination token to fetch the next page, if one exists.
+clNextPageToken :: Lens' CommentList (Maybe Text)
+clNextPageToken
+  = lens _clNextPageToken
+      (\ s a -> s{_clNextPageToken = a})
+
+-- | The kind of this entry. Always blogger#commentList
+clKind :: Lens' CommentList Text
+clKind = lens _clKind (\ s a -> s{_clKind = a})
+
+-- | The List of Comments for a Post.
+clItems :: Lens' CommentList [Comment]
+clItems
+  = lens _clItems (\ s a -> s{_clItems = a}) . _Default
+      . _Coerce
+
+-- | Pagination token to fetch the previous page, if one exists.
+clPrevPageToken :: Lens' CommentList (Maybe Text)
+clPrevPageToken
+  = lens _clPrevPageToken
+      (\ s a -> s{_clPrevPageToken = a})
+
+instance FromJSON CommentList where
+        parseJSON
+          = withObject "CommentList"
+              (\ o ->
+                 CommentList <$>
+                   (o .:? "etag") <*> (o .:? "nextPageToken") <*>
+                     (o .:? "kind" .!= "blogger#commentList")
+                     <*> (o .:? "items" .!= mempty)
+                     <*> (o .:? "prevPageToken"))
+
+instance ToJSON CommentList where
+        toJSON CommentList{..}
+          = object
+              (catMaybes
+                 [("etag" .=) <$> _clEtag,
+                  ("nextPageToken" .=) <$> _clNextPageToken,
+                  Just ("kind" .= _clKind), ("items" .=) <$> _clItems,
+                  ("prevPageToken" .=) <$> _clPrevPageToken])
+
+--
+-- /See:/ 'postImagesItem' smart constructor.
+newtype PostImagesItem = PostImagesItem
+    { _piiURL :: Maybe Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'PostImagesItem' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'piiURL'
+postImagesItem
+    :: PostImagesItem
+postImagesItem =
+    PostImagesItem
+    { _piiURL = Nothing
+    }
+
+piiURL :: Lens' PostImagesItem (Maybe Text)
+piiURL = lens _piiURL (\ s a -> s{_piiURL = a})
+
+instance FromJSON PostImagesItem where
+        parseJSON
+          = withObject "PostImagesItem"
+              (\ o -> PostImagesItem <$> (o .:? "url"))
+
+instance ToJSON PostImagesItem where
+        toJSON PostImagesItem{..}
+          = object (catMaybes [("url" .=) <$> _piiURL])
diff --git a/gen/Network/Google/Blogger/Types/Sum.hs b/gen/Network/Google/Blogger/Types/Sum.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Blogger/Types/Sum.hs
@@ -0,0 +1,762 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE LambdaCase         #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- |
+-- Module      : Network.Google.Blogger.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.Blogger.Types.Sum where
+
+import           Network.Google.Prelude
+
+-- | Sort search results
+data PostsListOrderBy
+    = Published
+      -- ^ @published@
+      -- Order by the date the post was published
+    | Updated
+      -- ^ @updated@
+      -- Order by the date the post was last updated
+      deriving (Eq,Ord,Enum,Read,Show,Data,Typeable,Generic)
+
+instance Hashable PostsListOrderBy
+
+instance FromText PostsListOrderBy where
+    fromText = \case
+        "published" -> Just Published
+        "updated" -> Just Updated
+        _ -> Nothing
+
+instance ToText PostsListOrderBy where
+    toText = \case
+        Published -> "published"
+        Updated -> "updated"
+
+instance FromJSON PostsListOrderBy where
+    parseJSON = parseJSONText "PostsListOrderBy"
+
+instance ToJSON PostsListOrderBy where
+    toJSON = toJSONText
+
+-- | Access level with which to view the returned result. Note that some
+-- fields require escalated access.
+data PostsListView
+    = Admin
+      -- ^ @ADMIN@
+      -- Admin level detail
+    | Author
+      -- ^ @AUTHOR@
+      -- Author level detail
+    | Reader
+      -- ^ @READER@
+      -- Reader level detail
+      deriving (Eq,Ord,Enum,Read,Show,Data,Typeable,Generic)
+
+instance Hashable PostsListView
+
+instance FromText PostsListView where
+    fromText = \case
+        "ADMIN" -> Just Admin
+        "AUTHOR" -> Just Author
+        "READER" -> Just Reader
+        _ -> Nothing
+
+instance ToText PostsListView where
+    toText = \case
+        Admin -> "ADMIN"
+        Author -> "AUTHOR"
+        Reader -> "READER"
+
+instance FromJSON PostsListView where
+    parseJSON = parseJSONText "PostsListView"
+
+instance ToJSON PostsListView where
+    toJSON = toJSONText
+
+data PageViewsGetRange
+    = PVGR30DAYS
+      -- ^ @30DAYS@
+      -- Page view counts from the last thirty days.
+    | PVGR7DAYS
+      -- ^ @7DAYS@
+      -- Page view counts from the last seven days.
+    | PVGRAll
+      -- ^ @all@
+      -- Total page view counts from all time.
+      deriving (Eq,Ord,Enum,Read,Show,Data,Typeable,Generic)
+
+instance Hashable PageViewsGetRange
+
+instance FromText PageViewsGetRange where
+    fromText = \case
+        "30DAYS" -> Just PVGR30DAYS
+        "7DAYS" -> Just PVGR7DAYS
+        "all" -> Just PVGRAll
+        _ -> Nothing
+
+instance ToText PageViewsGetRange where
+    toText = \case
+        PVGR30DAYS -> "30DAYS"
+        PVGR7DAYS -> "7DAYS"
+        PVGRAll -> "all"
+
+instance FromJSON PageViewsGetRange where
+    parseJSON = parseJSONText "PageViewsGetRange"
+
+instance ToJSON PageViewsGetRange where
+    toJSON = toJSONText
+
+-- | Access level with which to view the returned result. Note that some
+-- fields require elevated access.
+data CommentsListView
+    = CLVAdmin
+      -- ^ @ADMIN@
+      -- Admin level detail
+    | CLVAuthor
+      -- ^ @AUTHOR@
+      -- Author level detail
+    | CLVReader
+      -- ^ @READER@
+      -- Reader level detail
+      deriving (Eq,Ord,Enum,Read,Show,Data,Typeable,Generic)
+
+instance Hashable CommentsListView
+
+instance FromText CommentsListView where
+    fromText = \case
+        "ADMIN" -> Just CLVAdmin
+        "AUTHOR" -> Just CLVAuthor
+        "READER" -> Just CLVReader
+        _ -> Nothing
+
+instance ToText CommentsListView where
+    toText = \case
+        CLVAdmin -> "ADMIN"
+        CLVAuthor -> "AUTHOR"
+        CLVReader -> "READER"
+
+instance FromJSON CommentsListView where
+    parseJSON = parseJSONText "CommentsListView"
+
+instance ToJSON CommentsListView where
+    toJSON = toJSONText
+
+data PostUserInfosListStatus
+    = Draft
+      -- ^ @draft@
+      -- Draft posts
+    | Live
+      -- ^ @live@
+      -- Published posts
+    | Scheduled
+      -- ^ @scheduled@
+      -- Posts that are scheduled to publish in future.
+      deriving (Eq,Ord,Enum,Read,Show,Data,Typeable,Generic)
+
+instance Hashable PostUserInfosListStatus
+
+instance FromText PostUserInfosListStatus where
+    fromText = \case
+        "draft" -> Just Draft
+        "live" -> Just Live
+        "scheduled" -> Just Scheduled
+        _ -> Nothing
+
+instance ToText PostUserInfosListStatus where
+    toText = \case
+        Draft -> "draft"
+        Live -> "live"
+        Scheduled -> "scheduled"
+
+instance FromJSON PostUserInfosListStatus where
+    parseJSON = parseJSONText "PostUserInfosListStatus"
+
+instance ToJSON PostUserInfosListStatus where
+    toJSON = toJSONText
+
+-- | Access level with which to view the returned result. Note that some
+-- fields require elevated access.
+data PostsGetView
+    = PGVAdmin
+      -- ^ @ADMIN@
+      -- Admin level detail
+    | PGVAuthor
+      -- ^ @AUTHOR@
+      -- Author level detail
+    | PGVReader
+      -- ^ @READER@
+      -- Reader level detail
+      deriving (Eq,Ord,Enum,Read,Show,Data,Typeable,Generic)
+
+instance Hashable PostsGetView
+
+instance FromText PostsGetView where
+    fromText = \case
+        "ADMIN" -> Just PGVAdmin
+        "AUTHOR" -> Just PGVAuthor
+        "READER" -> Just PGVReader
+        _ -> Nothing
+
+instance ToText PostsGetView where
+    toText = \case
+        PGVAdmin -> "ADMIN"
+        PGVAuthor -> "AUTHOR"
+        PGVReader -> "READER"
+
+instance FromJSON PostsGetView where
+    parseJSON = parseJSONText "PostsGetView"
+
+instance ToJSON PostsGetView where
+    toJSON = toJSONText
+
+-- | Sort search results
+data PostsSearchOrderBy
+    = PSOBPublished
+      -- ^ @published@
+      -- Order by the date the post was published
+    | PSOBUpdated
+      -- ^ @updated@
+      -- Order by the date the post was last updated
+      deriving (Eq,Ord,Enum,Read,Show,Data,Typeable,Generic)
+
+instance Hashable PostsSearchOrderBy
+
+instance FromText PostsSearchOrderBy where
+    fromText = \case
+        "published" -> Just PSOBPublished
+        "updated" -> Just PSOBUpdated
+        _ -> Nothing
+
+instance ToText PostsSearchOrderBy where
+    toText = \case
+        PSOBPublished -> "published"
+        PSOBUpdated -> "updated"
+
+instance FromJSON PostsSearchOrderBy where
+    parseJSON = parseJSONText "PostsSearchOrderBy"
+
+instance ToJSON PostsSearchOrderBy where
+    toJSON = toJSONText
+
+data CommentsListByBlogStatus
+    = CLBBSEmptied
+      -- ^ @emptied@
+      -- Comments that have had their content removed
+    | CLBBSLive
+      -- ^ @live@
+      -- Comments that are publicly visible
+    | CLBBSPending
+      -- ^ @pending@
+      -- Comments that are awaiting administrator approval
+    | CLBBSSpam
+      -- ^ @spam@
+      -- Comments marked as spam by the administrator
+      deriving (Eq,Ord,Enum,Read,Show,Data,Typeable,Generic)
+
+instance Hashable CommentsListByBlogStatus
+
+instance FromText CommentsListByBlogStatus where
+    fromText = \case
+        "emptied" -> Just CLBBSEmptied
+        "live" -> Just CLBBSLive
+        "pending" -> Just CLBBSPending
+        "spam" -> Just CLBBSSpam
+        _ -> Nothing
+
+instance ToText CommentsListByBlogStatus where
+    toText = \case
+        CLBBSEmptied -> "emptied"
+        CLBBSLive -> "live"
+        CLBBSPending -> "pending"
+        CLBBSSpam -> "spam"
+
+instance FromJSON CommentsListByBlogStatus where
+    parseJSON = parseJSONText "CommentsListByBlogStatus"
+
+instance ToJSON CommentsListByBlogStatus where
+    toJSON = toJSONText
+
+data PagesGetView
+    = PAdmin
+      -- ^ @ADMIN@
+      -- Admin level detail
+    | PAuthor
+      -- ^ @AUTHOR@
+      -- Author level detail
+    | PReader
+      -- ^ @READER@
+      -- Reader level detail
+      deriving (Eq,Ord,Enum,Read,Show,Data,Typeable,Generic)
+
+instance Hashable PagesGetView
+
+instance FromText PagesGetView where
+    fromText = \case
+        "ADMIN" -> Just PAdmin
+        "AUTHOR" -> Just PAuthor
+        "READER" -> Just PReader
+        _ -> Nothing
+
+instance ToText PagesGetView where
+    toText = \case
+        PAdmin -> "ADMIN"
+        PAuthor -> "AUTHOR"
+        PReader -> "READER"
+
+instance FromJSON PagesGetView where
+    parseJSON = parseJSONText "PagesGetView"
+
+instance ToJSON PagesGetView where
+    toJSON = toJSONText
+
+-- | Sort order applied to search results. Default is published.
+data PostUserInfosListOrderBy
+    = PUILOBPublished
+      -- ^ @published@
+      -- Order by the date the post was published
+    | PUILOBUpdated
+      -- ^ @updated@
+      -- Order by the date the post was last updated
+      deriving (Eq,Ord,Enum,Read,Show,Data,Typeable,Generic)
+
+instance Hashable PostUserInfosListOrderBy
+
+instance FromText PostUserInfosListOrderBy where
+    fromText = \case
+        "published" -> Just PUILOBPublished
+        "updated" -> Just PUILOBUpdated
+        _ -> Nothing
+
+instance ToText PostUserInfosListOrderBy where
+    toText = \case
+        PUILOBPublished -> "published"
+        PUILOBUpdated -> "updated"
+
+instance FromJSON PostUserInfosListOrderBy where
+    parseJSON = parseJSONText "PostUserInfosListOrderBy"
+
+instance ToJSON PostUserInfosListOrderBy where
+    toJSON = toJSONText
+
+-- | Access level with which to view the blog. Note that some fields require
+-- elevated access.
+data BlogsGetView
+    = BGVAdmin
+      -- ^ @ADMIN@
+      -- Admin level detail.
+    | BGVAuthor
+      -- ^ @AUTHOR@
+      -- Author level detail.
+    | BGVReader
+      -- ^ @READER@
+      -- Reader level detail.
+      deriving (Eq,Ord,Enum,Read,Show,Data,Typeable,Generic)
+
+instance Hashable BlogsGetView
+
+instance FromText BlogsGetView where
+    fromText = \case
+        "ADMIN" -> Just BGVAdmin
+        "AUTHOR" -> Just BGVAuthor
+        "READER" -> Just BGVReader
+        _ -> Nothing
+
+instance ToText BlogsGetView where
+    toText = \case
+        BGVAdmin -> "ADMIN"
+        BGVAuthor -> "AUTHOR"
+        BGVReader -> "READER"
+
+instance FromJSON BlogsGetView where
+    parseJSON = parseJSONText "BlogsGetView"
+
+instance ToJSON BlogsGetView where
+    toJSON = toJSONText
+
+-- | Access level with which to view the blog. Note that some fields require
+-- elevated access.
+data BlogsGetByURLView
+    = BGBUVAdmin
+      -- ^ @ADMIN@
+      -- Admin level detail.
+    | BGBUVAuthor
+      -- ^ @AUTHOR@
+      -- Author level detail.
+    | BGBUVReader
+      -- ^ @READER@
+      -- Reader level detail.
+      deriving (Eq,Ord,Enum,Read,Show,Data,Typeable,Generic)
+
+instance Hashable BlogsGetByURLView
+
+instance FromText BlogsGetByURLView where
+    fromText = \case
+        "ADMIN" -> Just BGBUVAdmin
+        "AUTHOR" -> Just BGBUVAuthor
+        "READER" -> Just BGBUVReader
+        _ -> Nothing
+
+instance ToText BlogsGetByURLView where
+    toText = \case
+        BGBUVAdmin -> "ADMIN"
+        BGBUVAuthor -> "AUTHOR"
+        BGBUVReader -> "READER"
+
+instance FromJSON BlogsGetByURLView where
+    parseJSON = parseJSONText "BlogsGetByURLView"
+
+instance ToJSON BlogsGetByURLView where
+    toJSON = toJSONText
+
+data CommentsListStatus
+    = CLSEmptied
+      -- ^ @emptied@
+      -- Comments that have had their content removed
+    | CLSLive
+      -- ^ @live@
+      -- Comments that are publicly visible
+    | CLSPending
+      -- ^ @pending@
+      -- Comments that are awaiting administrator approval
+    | CLSSpam
+      -- ^ @spam@
+      -- Comments marked as spam by the administrator
+      deriving (Eq,Ord,Enum,Read,Show,Data,Typeable,Generic)
+
+instance Hashable CommentsListStatus
+
+instance FromText CommentsListStatus where
+    fromText = \case
+        "emptied" -> Just CLSEmptied
+        "live" -> Just CLSLive
+        "pending" -> Just CLSPending
+        "spam" -> Just CLSSpam
+        _ -> Nothing
+
+instance ToText CommentsListStatus where
+    toText = \case
+        CLSEmptied -> "emptied"
+        CLSLive -> "live"
+        CLSPending -> "pending"
+        CLSSpam -> "spam"
+
+instance FromJSON CommentsListStatus where
+    parseJSON = parseJSONText "CommentsListStatus"
+
+instance ToJSON CommentsListStatus where
+    toJSON = toJSONText
+
+-- | Blog statuses to include in the result (default: Live blogs only). Note
+-- that ADMIN access is required to view deleted blogs.
+data BlogsListByUserStatus
+    = BLBUSDeleted
+      -- ^ @DELETED@
+      -- Blog has been deleted by an administrator.
+    | BLBUSLive
+      -- ^ @LIVE@
+      -- Blog is currently live.
+      deriving (Eq,Ord,Enum,Read,Show,Data,Typeable,Generic)
+
+instance Hashable BlogsListByUserStatus
+
+instance FromText BlogsListByUserStatus where
+    fromText = \case
+        "DELETED" -> Just BLBUSDeleted
+        "LIVE" -> Just BLBUSLive
+        _ -> Nothing
+
+instance ToText BlogsListByUserStatus where
+    toText = \case
+        BLBUSDeleted -> "DELETED"
+        BLBUSLive -> "LIVE"
+
+instance FromJSON BlogsListByUserStatus where
+    parseJSON = parseJSONText "BlogsListByUserStatus"
+
+instance ToJSON BlogsListByUserStatus where
+    toJSON = toJSONText
+
+-- | Access level with which to view the returned result. Note that some
+-- fields require elevated access.
+data PagesListView
+    = PLVAdmin
+      -- ^ @ADMIN@
+      -- Admin level detail
+    | PLVAuthor
+      -- ^ @AUTHOR@
+      -- Author level detail
+    | PLVReader
+      -- ^ @READER@
+      -- Reader level detail
+      deriving (Eq,Ord,Enum,Read,Show,Data,Typeable,Generic)
+
+instance Hashable PagesListView
+
+instance FromText PagesListView where
+    fromText = \case
+        "ADMIN" -> Just PLVAdmin
+        "AUTHOR" -> Just PLVAuthor
+        "READER" -> Just PLVReader
+        _ -> Nothing
+
+instance ToText PagesListView where
+    toText = \case
+        PLVAdmin -> "ADMIN"
+        PLVAuthor -> "AUTHOR"
+        PLVReader -> "READER"
+
+instance FromJSON PagesListView where
+    parseJSON = parseJSONText "PagesListView"
+
+instance ToJSON PagesListView where
+    toJSON = toJSONText
+
+-- | Statuses to include in the results.
+data PostsListStatus
+    = PLSDraft
+      -- ^ @draft@
+      -- Draft (non-published) posts.
+    | PLSLive
+      -- ^ @live@
+      -- Published posts
+    | PLSScheduled
+      -- ^ @scheduled@
+      -- Posts that are scheduled to publish in the future.
+      deriving (Eq,Ord,Enum,Read,Show,Data,Typeable,Generic)
+
+instance Hashable PostsListStatus
+
+instance FromText PostsListStatus where
+    fromText = \case
+        "draft" -> Just PLSDraft
+        "live" -> Just PLSLive
+        "scheduled" -> Just PLSScheduled
+        _ -> Nothing
+
+instance ToText PostsListStatus where
+    toText = \case
+        PLSDraft -> "draft"
+        PLSLive -> "live"
+        PLSScheduled -> "scheduled"
+
+instance FromJSON PostsListStatus where
+    parseJSON = parseJSONText "PostsListStatus"
+
+instance ToJSON PostsListStatus where
+    toJSON = toJSONText
+
+-- | Access level with which to view the blogs. Note that some fields require
+-- elevated access.
+data BlogsListByUserView
+    = BLBUVAdmin
+      -- ^ @ADMIN@
+      -- Admin level detail.
+    | BLBUVAuthor
+      -- ^ @AUTHOR@
+      -- Author level detail.
+    | BLBUVReader
+      -- ^ @READER@
+      -- Reader level detail.
+      deriving (Eq,Ord,Enum,Read,Show,Data,Typeable,Generic)
+
+instance Hashable BlogsListByUserView
+
+instance FromText BlogsListByUserView where
+    fromText = \case
+        "ADMIN" -> Just BLBUVAdmin
+        "AUTHOR" -> Just BLBUVAuthor
+        "READER" -> Just BLBUVReader
+        _ -> Nothing
+
+instance ToText BlogsListByUserView where
+    toText = \case
+        BLBUVAdmin -> "ADMIN"
+        BLBUVAuthor -> "AUTHOR"
+        BLBUVReader -> "READER"
+
+instance FromJSON BlogsListByUserView where
+    parseJSON = parseJSONText "BlogsListByUserView"
+
+instance ToJSON BlogsListByUserView where
+    toJSON = toJSONText
+
+-- | Access level with which to view the returned result. Note that some
+-- fields require elevated access.
+data PostUserInfosListView
+    = PUILVAdmin
+      -- ^ @ADMIN@
+      -- Admin level detail
+    | PUILVAuthor
+      -- ^ @AUTHOR@
+      -- Author level detail
+    | PUILVReader
+      -- ^ @READER@
+      -- Reader level detail
+      deriving (Eq,Ord,Enum,Read,Show,Data,Typeable,Generic)
+
+instance Hashable PostUserInfosListView
+
+instance FromText PostUserInfosListView where
+    fromText = \case
+        "ADMIN" -> Just PUILVAdmin
+        "AUTHOR" -> Just PUILVAuthor
+        "READER" -> Just PUILVReader
+        _ -> Nothing
+
+instance ToText PostUserInfosListView where
+    toText = \case
+        PUILVAdmin -> "ADMIN"
+        PUILVAuthor -> "AUTHOR"
+        PUILVReader -> "READER"
+
+instance FromJSON PostUserInfosListView where
+    parseJSON = parseJSONText "PostUserInfosListView"
+
+instance ToJSON PostUserInfosListView where
+    toJSON = toJSONText
+
+-- | Access level for the requested comment (default: READER). Note that some
+-- comments will require elevated permissions, for example comments where
+-- the parent posts which is in a draft state, or comments that are pending
+-- moderation.
+data CommentsGetView
+    = CGVAdmin
+      -- ^ @ADMIN@
+      -- Admin level detail
+    | CGVAuthor
+      -- ^ @AUTHOR@
+      -- Author level detail
+    | CGVReader
+      -- ^ @READER@
+      -- Admin level detail
+      deriving (Eq,Ord,Enum,Read,Show,Data,Typeable,Generic)
+
+instance Hashable CommentsGetView
+
+instance FromText CommentsGetView where
+    fromText = \case
+        "ADMIN" -> Just CGVAdmin
+        "AUTHOR" -> Just CGVAuthor
+        "READER" -> Just CGVReader
+        _ -> Nothing
+
+instance ToText CommentsGetView where
+    toText = \case
+        CGVAdmin -> "ADMIN"
+        CGVAuthor -> "AUTHOR"
+        CGVReader -> "READER"
+
+instance FromJSON CommentsGetView where
+    parseJSON = parseJSONText "CommentsGetView"
+
+instance ToJSON CommentsGetView where
+    toJSON = toJSONText
+
+-- | Access level with which to view the returned result. Note that some
+-- fields require elevated access.
+data PostsGetByPathView
+    = PGBPVAdmin
+      -- ^ @ADMIN@
+      -- Admin level detail
+    | PGBPVAuthor
+      -- ^ @AUTHOR@
+      -- Author level detail
+    | PGBPVReader
+      -- ^ @READER@
+      -- Reader level detail
+      deriving (Eq,Ord,Enum,Read,Show,Data,Typeable,Generic)
+
+instance Hashable PostsGetByPathView
+
+instance FromText PostsGetByPathView where
+    fromText = \case
+        "ADMIN" -> Just PGBPVAdmin
+        "AUTHOR" -> Just PGBPVAuthor
+        "READER" -> Just PGBPVReader
+        _ -> Nothing
+
+instance ToText PostsGetByPathView where
+    toText = \case
+        PGBPVAdmin -> "ADMIN"
+        PGBPVAuthor -> "AUTHOR"
+        PGBPVReader -> "READER"
+
+instance FromJSON PostsGetByPathView where
+    parseJSON = parseJSONText "PostsGetByPathView"
+
+instance ToJSON PostsGetByPathView where
+    toJSON = toJSONText
+
+data PagesListStatus
+    = PDraft
+      -- ^ @draft@
+      -- Draft (unpublished) Pages
+    | PLive
+      -- ^ @live@
+      -- Pages that are publicly visible
+      deriving (Eq,Ord,Enum,Read,Show,Data,Typeable,Generic)
+
+instance Hashable PagesListStatus
+
+instance FromText PagesListStatus where
+    fromText = \case
+        "draft" -> Just PDraft
+        "live" -> Just PLive
+        _ -> Nothing
+
+instance ToText PagesListStatus where
+    toText = \case
+        PDraft -> "draft"
+        PLive -> "live"
+
+instance FromJSON PagesListStatus where
+    parseJSON = parseJSONText "PagesListStatus"
+
+instance ToJSON PagesListStatus where
+    toJSON = toJSONText
+
+-- | User access types for blogs to include in the results, e.g. AUTHOR will
+-- return blogs where the user has author level access. If no roles are
+-- specified, defaults to ADMIN and AUTHOR roles.
+data BlogsListByUserRole
+    = BLBURAdmin
+      -- ^ @ADMIN@
+      -- Admin role - Blogs where the user has Admin level access.
+    | BLBURAuthor
+      -- ^ @AUTHOR@
+      -- Author role - Blogs where the user has Author level access.
+    | BLBURReader
+      -- ^ @READER@
+      -- Reader role - Blogs where the user has Reader level access (to a private
+      -- blog).
+      deriving (Eq,Ord,Enum,Read,Show,Data,Typeable,Generic)
+
+instance Hashable BlogsListByUserRole
+
+instance FromText BlogsListByUserRole where
+    fromText = \case
+        "ADMIN" -> Just BLBURAdmin
+        "AUTHOR" -> Just BLBURAuthor
+        "READER" -> Just BLBURReader
+        _ -> Nothing
+
+instance ToText BlogsListByUserRole where
+    toText = \case
+        BLBURAdmin -> "ADMIN"
+        BLBURAuthor -> "AUTHOR"
+        BLBURReader -> "READER"
+
+instance FromJSON BlogsListByUserRole where
+    parseJSON = parseJSONText "BlogsListByUserRole"
+
+instance ToJSON BlogsListByUserRole where
+    toJSON = toJSONText
diff --git a/gen/Network/Google/Resource/Blogger/BlogUserInfos/Get.hs b/gen/Network/Google/Resource/Blogger/BlogUserInfos/Get.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Blogger/BlogUserInfos/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.Blogger.BlogUserInfos.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 one blog and user info pair by blogId and userId.
+--
+-- /See:/ <https://developers.google.com/blogger/docs/3.0/getting_started Blogger API Reference> for @blogger.blogUserInfos.get@.
+module Network.Google.Resource.Blogger.BlogUserInfos.Get
+    (
+    -- * REST Resource
+      BlogUserInfosGetResource
+
+    -- * Creating a Request
+    , blogUserInfosGet
+    , BlogUserInfosGet
+
+    -- * Request Lenses
+    , buigBlogId
+    , buigUserId
+    , buigMaxPosts
+    ) where
+
+import           Network.Google.Blogger.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @blogger.blogUserInfos.get@ method which the
+-- 'BlogUserInfosGet' request conforms to.
+type BlogUserInfosGetResource =
+     "blogger" :>
+       "v3" :>
+         "users" :>
+           Capture "userId" Text :>
+             "blogs" :>
+               Capture "blogId" Text :>
+                 QueryParam "maxPosts" (Textual Word32) :>
+                   QueryParam "alt" AltJSON :> Get '[JSON] BlogUserInfo
+
+-- | Gets one blog and user info pair by blogId and userId.
+--
+-- /See:/ 'blogUserInfosGet' smart constructor.
+data BlogUserInfosGet = BlogUserInfosGet
+    { _buigBlogId   :: !Text
+    , _buigUserId   :: !Text
+    , _buigMaxPosts :: !(Maybe (Textual Word32))
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'BlogUserInfosGet' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'buigBlogId'
+--
+-- * 'buigUserId'
+--
+-- * 'buigMaxPosts'
+blogUserInfosGet
+    :: Text -- ^ 'buigBlogId'
+    -> Text -- ^ 'buigUserId'
+    -> BlogUserInfosGet
+blogUserInfosGet pBuigBlogId_ pBuigUserId_ =
+    BlogUserInfosGet
+    { _buigBlogId = pBuigBlogId_
+    , _buigUserId = pBuigUserId_
+    , _buigMaxPosts = Nothing
+    }
+
+-- | The ID of the blog to get.
+buigBlogId :: Lens' BlogUserInfosGet Text
+buigBlogId
+  = lens _buigBlogId (\ s a -> s{_buigBlogId = a})
+
+-- | ID of the user whose blogs are to be fetched. Either the word \'self\'
+-- (sans quote marks) or the user\'s profile identifier.
+buigUserId :: Lens' BlogUserInfosGet Text
+buigUserId
+  = lens _buigUserId (\ s a -> s{_buigUserId = a})
+
+-- | Maximum number of posts to pull back with the blog.
+buigMaxPosts :: Lens' BlogUserInfosGet (Maybe Word32)
+buigMaxPosts
+  = lens _buigMaxPosts (\ s a -> s{_buigMaxPosts = a})
+      . mapping _Coerce
+
+instance GoogleRequest BlogUserInfosGet where
+        type Rs BlogUserInfosGet = BlogUserInfo
+        requestClient BlogUserInfosGet{..}
+          = go _buigUserId _buigBlogId _buigMaxPosts
+              (Just AltJSON)
+              bloggerService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy BlogUserInfosGetResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Blogger/Blogs/Get.hs b/gen/Network/Google/Resource/Blogger/Blogs/Get.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Blogger/Blogs/Get.hs
@@ -0,0 +1,105 @@
+{-# 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.Blogger.Blogs.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 one blog by ID.
+--
+-- /See:/ <https://developers.google.com/blogger/docs/3.0/getting_started Blogger API Reference> for @blogger.blogs.get@.
+module Network.Google.Resource.Blogger.Blogs.Get
+    (
+    -- * REST Resource
+      BlogsGetResource
+
+    -- * Creating a Request
+    , blogsGet
+    , BlogsGet
+
+    -- * Request Lenses
+    , bgBlogId
+    , bgMaxPosts
+    , bgView
+    ) where
+
+import           Network.Google.Blogger.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @blogger.blogs.get@ method which the
+-- 'BlogsGet' request conforms to.
+type BlogsGetResource =
+     "blogger" :>
+       "v3" :>
+         "blogs" :>
+           Capture "blogId" Text :>
+             QueryParam "maxPosts" (Textual Word32) :>
+               QueryParam "view" BlogsGetView :>
+                 QueryParam "alt" AltJSON :> Get '[JSON] Blog
+
+-- | Gets one blog by ID.
+--
+-- /See:/ 'blogsGet' smart constructor.
+data BlogsGet = BlogsGet
+    { _bgBlogId   :: !Text
+    , _bgMaxPosts :: !(Maybe (Textual Word32))
+    , _bgView     :: !(Maybe BlogsGetView)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'BlogsGet' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'bgBlogId'
+--
+-- * 'bgMaxPosts'
+--
+-- * 'bgView'
+blogsGet
+    :: Text -- ^ 'bgBlogId'
+    -> BlogsGet
+blogsGet pBgBlogId_ =
+    BlogsGet
+    { _bgBlogId = pBgBlogId_
+    , _bgMaxPosts = Nothing
+    , _bgView = Nothing
+    }
+
+-- | The ID of the blog to get.
+bgBlogId :: Lens' BlogsGet Text
+bgBlogId = lens _bgBlogId (\ s a -> s{_bgBlogId = a})
+
+-- | Maximum number of posts to pull back with the blog.
+bgMaxPosts :: Lens' BlogsGet (Maybe Word32)
+bgMaxPosts
+  = lens _bgMaxPosts (\ s a -> s{_bgMaxPosts = a}) .
+      mapping _Coerce
+
+-- | Access level with which to view the blog. Note that some fields require
+-- elevated access.
+bgView :: Lens' BlogsGet (Maybe BlogsGetView)
+bgView = lens _bgView (\ s a -> s{_bgView = a})
+
+instance GoogleRequest BlogsGet where
+        type Rs BlogsGet = Blog
+        requestClient BlogsGet{..}
+          = go _bgBlogId _bgMaxPosts _bgView (Just AltJSON)
+              bloggerService
+          where go
+                  = buildClient (Proxy :: Proxy BlogsGetResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Blogger/Blogs/GetByURL.hs b/gen/Network/Google/Resource/Blogger/Blogs/GetByURL.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Blogger/Blogs/GetByURL.hs
@@ -0,0 +1,94 @@
+{-# 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.Blogger.Blogs.GetByURL
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Retrieve a Blog by URL.
+--
+-- /See:/ <https://developers.google.com/blogger/docs/3.0/getting_started Blogger API Reference> for @blogger.blogs.getByUrl@.
+module Network.Google.Resource.Blogger.Blogs.GetByURL
+    (
+    -- * REST Resource
+      BlogsGetByURLResource
+
+    -- * Creating a Request
+    , blogsGetByURL
+    , BlogsGetByURL
+
+    -- * Request Lenses
+    , bgbuURL
+    , bgbuView
+    ) where
+
+import           Network.Google.Blogger.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @blogger.blogs.getByUrl@ method which the
+-- 'BlogsGetByURL' request conforms to.
+type BlogsGetByURLResource =
+     "blogger" :>
+       "v3" :>
+         "blogs" :>
+           "byurl" :>
+             QueryParam "url" Text :>
+               QueryParam "view" BlogsGetByURLView :>
+                 QueryParam "alt" AltJSON :> Get '[JSON] Blog
+
+-- | Retrieve a Blog by URL.
+--
+-- /See:/ 'blogsGetByURL' smart constructor.
+data BlogsGetByURL = BlogsGetByURL
+    { _bgbuURL  :: !Text
+    , _bgbuView :: !(Maybe BlogsGetByURLView)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'BlogsGetByURL' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'bgbuURL'
+--
+-- * 'bgbuView'
+blogsGetByURL
+    :: Text -- ^ 'bgbuURL'
+    -> BlogsGetByURL
+blogsGetByURL pBgbuURL_ =
+    BlogsGetByURL
+    { _bgbuURL = pBgbuURL_
+    , _bgbuView = Nothing
+    }
+
+-- | The URL of the blog to retrieve.
+bgbuURL :: Lens' BlogsGetByURL Text
+bgbuURL = lens _bgbuURL (\ s a -> s{_bgbuURL = a})
+
+-- | Access level with which to view the blog. Note that some fields require
+-- elevated access.
+bgbuView :: Lens' BlogsGetByURL (Maybe BlogsGetByURLView)
+bgbuView = lens _bgbuView (\ s a -> s{_bgbuView = a})
+
+instance GoogleRequest BlogsGetByURL where
+        type Rs BlogsGetByURL = Blog
+        requestClient BlogsGetByURL{..}
+          = go (Just _bgbuURL) _bgbuView (Just AltJSON)
+              bloggerService
+          where go
+                  = buildClient (Proxy :: Proxy BlogsGetByURLResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Blogger/Blogs/ListByUser.hs b/gen/Network/Google/Resource/Blogger/Blogs/ListByUser.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Blogger/Blogs/ListByUser.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.Blogger.Blogs.ListByUser
+-- 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 blogs, possibly filtered.
+--
+-- /See:/ <https://developers.google.com/blogger/docs/3.0/getting_started Blogger API Reference> for @blogger.blogs.listByUser@.
+module Network.Google.Resource.Blogger.Blogs.ListByUser
+    (
+    -- * REST Resource
+      BlogsListByUserResource
+
+    -- * Creating a Request
+    , blogsListByUser
+    , BlogsListByUser
+
+    -- * Request Lenses
+    , blbuStatus
+    , blbuFetchUserInfo
+    , blbuUserId
+    , blbuRole
+    , blbuView
+    ) where
+
+import           Network.Google.Blogger.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @blogger.blogs.listByUser@ method which the
+-- 'BlogsListByUser' request conforms to.
+type BlogsListByUserResource =
+     "blogger" :>
+       "v3" :>
+         "users" :>
+           Capture "userId" Text :>
+             "blogs" :>
+               QueryParams "status" BlogsListByUserStatus :>
+                 QueryParam "fetchUserInfo" Bool :>
+                   QueryParams "role" BlogsListByUserRole :>
+                     QueryParam "view" BlogsListByUserView :>
+                       QueryParam "alt" AltJSON :> Get '[JSON] BlogList
+
+-- | Retrieves a list of blogs, possibly filtered.
+--
+-- /See:/ 'blogsListByUser' smart constructor.
+data BlogsListByUser = BlogsListByUser
+    { _blbuStatus        :: ![BlogsListByUserStatus]
+    , _blbuFetchUserInfo :: !(Maybe Bool)
+    , _blbuUserId        :: !Text
+    , _blbuRole          :: !(Maybe [BlogsListByUserRole])
+    , _blbuView          :: !(Maybe BlogsListByUserView)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'BlogsListByUser' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'blbuStatus'
+--
+-- * 'blbuFetchUserInfo'
+--
+-- * 'blbuUserId'
+--
+-- * 'blbuRole'
+--
+-- * 'blbuView'
+blogsListByUser
+    :: Text -- ^ 'blbuUserId'
+    -> BlogsListByUser
+blogsListByUser pBlbuUserId_ =
+    BlogsListByUser
+    { _blbuStatus = [BLBUSLive]
+    , _blbuFetchUserInfo = Nothing
+    , _blbuUserId = pBlbuUserId_
+    , _blbuRole = Nothing
+    , _blbuView = Nothing
+    }
+
+-- | Blog statuses to include in the result (default: Live blogs only). Note
+-- that ADMIN access is required to view deleted blogs.
+blbuStatus :: Lens' BlogsListByUser [BlogsListByUserStatus]
+blbuStatus
+  = lens _blbuStatus (\ s a -> s{_blbuStatus = a}) .
+      _Coerce
+
+-- | Whether the response is a list of blogs with per-user information
+-- instead of just blogs.
+blbuFetchUserInfo :: Lens' BlogsListByUser (Maybe Bool)
+blbuFetchUserInfo
+  = lens _blbuFetchUserInfo
+      (\ s a -> s{_blbuFetchUserInfo = a})
+
+-- | ID of the user whose blogs are to be fetched. Either the word \'self\'
+-- (sans quote marks) or the user\'s profile identifier.
+blbuUserId :: Lens' BlogsListByUser Text
+blbuUserId
+  = lens _blbuUserId (\ s a -> s{_blbuUserId = a})
+
+-- | User access types for blogs to include in the results, e.g. AUTHOR will
+-- return blogs where the user has author level access. If no roles are
+-- specified, defaults to ADMIN and AUTHOR roles.
+blbuRole :: Lens' BlogsListByUser [BlogsListByUserRole]
+blbuRole
+  = lens _blbuRole (\ s a -> s{_blbuRole = a}) .
+      _Default
+      . _Coerce
+
+-- | Access level with which to view the blogs. Note that some fields require
+-- elevated access.
+blbuView :: Lens' BlogsListByUser (Maybe BlogsListByUserView)
+blbuView = lens _blbuView (\ s a -> s{_blbuView = a})
+
+instance GoogleRequest BlogsListByUser where
+        type Rs BlogsListByUser = BlogList
+        requestClient BlogsListByUser{..}
+          = go _blbuUserId _blbuStatus _blbuFetchUserInfo
+              (_blbuRole ^. _Default)
+              _blbuView
+              (Just AltJSON)
+              bloggerService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy BlogsListByUserResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Blogger/Comments/Approve.hs b/gen/Network/Google/Resource/Blogger/Comments/Approve.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Blogger/Comments/Approve.hs
@@ -0,0 +1,109 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.Blogger.Comments.Approve
+-- 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)
+--
+-- Marks a comment as not spam.
+--
+-- /See:/ <https://developers.google.com/blogger/docs/3.0/getting_started Blogger API Reference> for @blogger.comments.approve@.
+module Network.Google.Resource.Blogger.Comments.Approve
+    (
+    -- * REST Resource
+      CommentsApproveResource
+
+    -- * Creating a Request
+    , commentsApprove
+    , CommentsApprove
+
+    -- * Request Lenses
+    , caBlogId
+    , caPostId
+    , caCommentId
+    ) where
+
+import           Network.Google.Blogger.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @blogger.comments.approve@ method which the
+-- 'CommentsApprove' request conforms to.
+type CommentsApproveResource =
+     "blogger" :>
+       "v3" :>
+         "blogs" :>
+           Capture "blogId" Text :>
+             "posts" :>
+               Capture "postId" Text :>
+                 "comments" :>
+                   Capture "commentId" Text :>
+                     "approve" :>
+                       QueryParam "alt" AltJSON :> Post '[JSON] Comment
+
+-- | Marks a comment as not spam.
+--
+-- /See:/ 'commentsApprove' smart constructor.
+data CommentsApprove = CommentsApprove
+    { _caBlogId    :: !Text
+    , _caPostId    :: !Text
+    , _caCommentId :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CommentsApprove' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'caBlogId'
+--
+-- * 'caPostId'
+--
+-- * 'caCommentId'
+commentsApprove
+    :: Text -- ^ 'caBlogId'
+    -> Text -- ^ 'caPostId'
+    -> Text -- ^ 'caCommentId'
+    -> CommentsApprove
+commentsApprove pCaBlogId_ pCaPostId_ pCaCommentId_ =
+    CommentsApprove
+    { _caBlogId = pCaBlogId_
+    , _caPostId = pCaPostId_
+    , _caCommentId = pCaCommentId_
+    }
+
+-- | The ID of the Blog.
+caBlogId :: Lens' CommentsApprove Text
+caBlogId = lens _caBlogId (\ s a -> s{_caBlogId = a})
+
+-- | The ID of the Post.
+caPostId :: Lens' CommentsApprove Text
+caPostId = lens _caPostId (\ s a -> s{_caPostId = a})
+
+-- | The ID of the comment to mark as not spam.
+caCommentId :: Lens' CommentsApprove Text
+caCommentId
+  = lens _caCommentId (\ s a -> s{_caCommentId = a})
+
+instance GoogleRequest CommentsApprove where
+        type Rs CommentsApprove = Comment
+        requestClient CommentsApprove{..}
+          = go _caBlogId _caPostId _caCommentId (Just AltJSON)
+              bloggerService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy CommentsApproveResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Blogger/Comments/Delete.hs b/gen/Network/Google/Resource/Blogger/Comments/Delete.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Blogger/Comments/Delete.hs
@@ -0,0 +1,107 @@
+{-# 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.Blogger.Comments.Delete
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Delete a comment by ID.
+--
+-- /See:/ <https://developers.google.com/blogger/docs/3.0/getting_started Blogger API Reference> for @blogger.comments.delete@.
+module Network.Google.Resource.Blogger.Comments.Delete
+    (
+    -- * REST Resource
+      CommentsDeleteResource
+
+    -- * Creating a Request
+    , commentsDelete
+    , CommentsDelete
+
+    -- * Request Lenses
+    , cdBlogId
+    , cdPostId
+    , cdCommentId
+    ) where
+
+import           Network.Google.Blogger.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @blogger.comments.delete@ method which the
+-- 'CommentsDelete' request conforms to.
+type CommentsDeleteResource =
+     "blogger" :>
+       "v3" :>
+         "blogs" :>
+           Capture "blogId" Text :>
+             "posts" :>
+               Capture "postId" Text :>
+                 "comments" :>
+                   Capture "commentId" Text :>
+                     QueryParam "alt" AltJSON :> Delete '[JSON] ()
+
+-- | Delete a comment by ID.
+--
+-- /See:/ 'commentsDelete' smart constructor.
+data CommentsDelete = CommentsDelete
+    { _cdBlogId    :: !Text
+    , _cdPostId    :: !Text
+    , _cdCommentId :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CommentsDelete' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cdBlogId'
+--
+-- * 'cdPostId'
+--
+-- * 'cdCommentId'
+commentsDelete
+    :: Text -- ^ 'cdBlogId'
+    -> Text -- ^ 'cdPostId'
+    -> Text -- ^ 'cdCommentId'
+    -> CommentsDelete
+commentsDelete pCdBlogId_ pCdPostId_ pCdCommentId_ =
+    CommentsDelete
+    { _cdBlogId = pCdBlogId_
+    , _cdPostId = pCdPostId_
+    , _cdCommentId = pCdCommentId_
+    }
+
+-- | The ID of the Blog.
+cdBlogId :: Lens' CommentsDelete Text
+cdBlogId = lens _cdBlogId (\ s a -> s{_cdBlogId = a})
+
+-- | The ID of the Post.
+cdPostId :: Lens' CommentsDelete Text
+cdPostId = lens _cdPostId (\ s a -> s{_cdPostId = a})
+
+-- | The ID of the comment to delete.
+cdCommentId :: Lens' CommentsDelete Text
+cdCommentId
+  = lens _cdCommentId (\ s a -> s{_cdCommentId = a})
+
+instance GoogleRequest CommentsDelete where
+        type Rs CommentsDelete = ()
+        requestClient CommentsDelete{..}
+          = go _cdBlogId _cdPostId _cdCommentId (Just AltJSON)
+              bloggerService
+          where go
+                  = buildClient (Proxy :: Proxy CommentsDeleteResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Blogger/Comments/Get.hs b/gen/Network/Google/Resource/Blogger/Comments/Get.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Blogger/Comments/Get.hs
@@ -0,0 +1,121 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.Blogger.Comments.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 one comment by ID.
+--
+-- /See:/ <https://developers.google.com/blogger/docs/3.0/getting_started Blogger API Reference> for @blogger.comments.get@.
+module Network.Google.Resource.Blogger.Comments.Get
+    (
+    -- * REST Resource
+      CommentsGetResource
+
+    -- * Creating a Request
+    , commentsGet
+    , CommentsGet
+
+    -- * Request Lenses
+    , cgBlogId
+    , cgView
+    , cgPostId
+    , cgCommentId
+    ) where
+
+import           Network.Google.Blogger.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @blogger.comments.get@ method which the
+-- 'CommentsGet' request conforms to.
+type CommentsGetResource =
+     "blogger" :>
+       "v3" :>
+         "blogs" :>
+           Capture "blogId" Text :>
+             "posts" :>
+               Capture "postId" Text :>
+                 "comments" :>
+                   Capture "commentId" Text :>
+                     QueryParam "view" CommentsGetView :>
+                       QueryParam "alt" AltJSON :> Get '[JSON] Comment
+
+-- | Gets one comment by ID.
+--
+-- /See:/ 'commentsGet' smart constructor.
+data CommentsGet = CommentsGet
+    { _cgBlogId    :: !Text
+    , _cgView      :: !(Maybe CommentsGetView)
+    , _cgPostId    :: !Text
+    , _cgCommentId :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CommentsGet' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cgBlogId'
+--
+-- * 'cgView'
+--
+-- * 'cgPostId'
+--
+-- * 'cgCommentId'
+commentsGet
+    :: Text -- ^ 'cgBlogId'
+    -> Text -- ^ 'cgPostId'
+    -> Text -- ^ 'cgCommentId'
+    -> CommentsGet
+commentsGet pCgBlogId_ pCgPostId_ pCgCommentId_ =
+    CommentsGet
+    { _cgBlogId = pCgBlogId_
+    , _cgView = Nothing
+    , _cgPostId = pCgPostId_
+    , _cgCommentId = pCgCommentId_
+    }
+
+-- | ID of the blog to containing the comment.
+cgBlogId :: Lens' CommentsGet Text
+cgBlogId = lens _cgBlogId (\ s a -> s{_cgBlogId = a})
+
+-- | Access level for the requested comment (default: READER). Note that some
+-- comments will require elevated permissions, for example comments where
+-- the parent posts which is in a draft state, or comments that are pending
+-- moderation.
+cgView :: Lens' CommentsGet (Maybe CommentsGetView)
+cgView = lens _cgView (\ s a -> s{_cgView = a})
+
+-- | ID of the post to fetch posts from.
+cgPostId :: Lens' CommentsGet Text
+cgPostId = lens _cgPostId (\ s a -> s{_cgPostId = a})
+
+-- | The ID of the comment to get.
+cgCommentId :: Lens' CommentsGet Text
+cgCommentId
+  = lens _cgCommentId (\ s a -> s{_cgCommentId = a})
+
+instance GoogleRequest CommentsGet where
+        type Rs CommentsGet = Comment
+        requestClient CommentsGet{..}
+          = go _cgBlogId _cgPostId _cgCommentId _cgView
+              (Just AltJSON)
+              bloggerService
+          where go
+                  = buildClient (Proxy :: Proxy CommentsGetResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Blogger/Comments/List.hs b/gen/Network/Google/Resource/Blogger/Comments/List.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Blogger/Comments/List.hs
@@ -0,0 +1,185 @@
+{-# 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.Blogger.Comments.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 the comments for a post, possibly filtered.
+--
+-- /See:/ <https://developers.google.com/blogger/docs/3.0/getting_started Blogger API Reference> for @blogger.comments.list@.
+module Network.Google.Resource.Blogger.Comments.List
+    (
+    -- * REST Resource
+      CommentsListResource
+
+    -- * Creating a Request
+    , commentsList
+    , CommentsList
+
+    -- * Request Lenses
+    , clStatus
+    , clEndDate
+    , clBlogId
+    , clStartDate
+    , clFetchBodies
+    , clView
+    , clPostId
+    , clPageToken
+    , clMaxResults
+    ) where
+
+import           Network.Google.Blogger.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @blogger.comments.list@ method which the
+-- 'CommentsList' request conforms to.
+type CommentsListResource =
+     "blogger" :>
+       "v3" :>
+         "blogs" :>
+           Capture "blogId" Text :>
+             "posts" :>
+               Capture "postId" Text :>
+                 "comments" :>
+                   QueryParams "status" CommentsListStatus :>
+                     QueryParam "endDate" DateTime' :>
+                       QueryParam "startDate" DateTime' :>
+                         QueryParam "fetchBodies" Bool :>
+                           QueryParam "view" CommentsListView :>
+                             QueryParam "pageToken" Text :>
+                               QueryParam "maxResults" (Textual Word32) :>
+                                 QueryParam "alt" AltJSON :>
+                                   Get '[JSON] CommentList
+
+-- | Retrieves the comments for a post, possibly filtered.
+--
+-- /See:/ 'commentsList' smart constructor.
+data CommentsList = CommentsList
+    { _clStatus      :: !(Maybe [CommentsListStatus])
+    , _clEndDate     :: !(Maybe DateTime')
+    , _clBlogId      :: !Text
+    , _clStartDate   :: !(Maybe DateTime')
+    , _clFetchBodies :: !(Maybe Bool)
+    , _clView        :: !(Maybe CommentsListView)
+    , _clPostId      :: !Text
+    , _clPageToken   :: !(Maybe Text)
+    , _clMaxResults  :: !(Maybe (Textual Word32))
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CommentsList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'clStatus'
+--
+-- * 'clEndDate'
+--
+-- * 'clBlogId'
+--
+-- * 'clStartDate'
+--
+-- * 'clFetchBodies'
+--
+-- * 'clView'
+--
+-- * 'clPostId'
+--
+-- * 'clPageToken'
+--
+-- * 'clMaxResults'
+commentsList
+    :: Text -- ^ 'clBlogId'
+    -> Text -- ^ 'clPostId'
+    -> CommentsList
+commentsList pClBlogId_ pClPostId_ =
+    CommentsList
+    { _clStatus = Nothing
+    , _clEndDate = Nothing
+    , _clBlogId = pClBlogId_
+    , _clStartDate = Nothing
+    , _clFetchBodies = Nothing
+    , _clView = Nothing
+    , _clPostId = pClPostId_
+    , _clPageToken = Nothing
+    , _clMaxResults = Nothing
+    }
+
+clStatus :: Lens' CommentsList [CommentsListStatus]
+clStatus
+  = lens _clStatus (\ s a -> s{_clStatus = a}) .
+      _Default
+      . _Coerce
+
+-- | Latest date of comment to fetch, a date-time with RFC 3339 formatting.
+clEndDate :: Lens' CommentsList (Maybe UTCTime)
+clEndDate
+  = lens _clEndDate (\ s a -> s{_clEndDate = a}) .
+      mapping _DateTime
+
+-- | ID of the blog to fetch comments from.
+clBlogId :: Lens' CommentsList Text
+clBlogId = lens _clBlogId (\ s a -> s{_clBlogId = a})
+
+-- | Earliest date of comment to fetch, a date-time with RFC 3339 formatting.
+clStartDate :: Lens' CommentsList (Maybe UTCTime)
+clStartDate
+  = lens _clStartDate (\ s a -> s{_clStartDate = a}) .
+      mapping _DateTime
+
+-- | Whether the body content of the comments is included.
+clFetchBodies :: Lens' CommentsList (Maybe Bool)
+clFetchBodies
+  = lens _clFetchBodies
+      (\ s a -> s{_clFetchBodies = a})
+
+-- | Access level with which to view the returned result. Note that some
+-- fields require elevated access.
+clView :: Lens' CommentsList (Maybe CommentsListView)
+clView = lens _clView (\ s a -> s{_clView = a})
+
+-- | ID of the post to fetch posts from.
+clPostId :: Lens' CommentsList Text
+clPostId = lens _clPostId (\ s a -> s{_clPostId = a})
+
+-- | Continuation token if request is paged.
+clPageToken :: Lens' CommentsList (Maybe Text)
+clPageToken
+  = lens _clPageToken (\ s a -> s{_clPageToken = a})
+
+-- | Maximum number of comments to include in the result.
+clMaxResults :: Lens' CommentsList (Maybe Word32)
+clMaxResults
+  = lens _clMaxResults (\ s a -> s{_clMaxResults = a})
+      . mapping _Coerce
+
+instance GoogleRequest CommentsList where
+        type Rs CommentsList = CommentList
+        requestClient CommentsList{..}
+          = go _clBlogId _clPostId (_clStatus ^. _Default)
+              _clEndDate
+              _clStartDate
+              _clFetchBodies
+              _clView
+              _clPageToken
+              _clMaxResults
+              (Just AltJSON)
+              bloggerService
+          where go
+                  = buildClient (Proxy :: Proxy CommentsListResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Blogger/Comments/ListByBlog.hs b/gen/Network/Google/Resource/Blogger/Comments/ListByBlog.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Blogger/Comments/ListByBlog.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.Blogger.Comments.ListByBlog
+-- 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 the comments for a blog, across all posts, possibly filtered.
+--
+-- /See:/ <https://developers.google.com/blogger/docs/3.0/getting_started Blogger API Reference> for @blogger.comments.listByBlog@.
+module Network.Google.Resource.Blogger.Comments.ListByBlog
+    (
+    -- * REST Resource
+      CommentsListByBlogResource
+
+    -- * Creating a Request
+    , commentsListByBlog
+    , CommentsListByBlog
+
+    -- * Request Lenses
+    , clbbStatus
+    , clbbEndDate
+    , clbbBlogId
+    , clbbStartDate
+    , clbbFetchBodies
+    , clbbPageToken
+    , clbbMaxResults
+    ) where
+
+import           Network.Google.Blogger.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @blogger.comments.listByBlog@ method which the
+-- 'CommentsListByBlog' request conforms to.
+type CommentsListByBlogResource =
+     "blogger" :>
+       "v3" :>
+         "blogs" :>
+           Capture "blogId" Text :>
+             "comments" :>
+               QueryParams "status" CommentsListByBlogStatus :>
+                 QueryParam "endDate" DateTime' :>
+                   QueryParam "startDate" DateTime' :>
+                     QueryParam "fetchBodies" Bool :>
+                       QueryParam "pageToken" Text :>
+                         QueryParam "maxResults" (Textual Word32) :>
+                           QueryParam "alt" AltJSON :> Get '[JSON] CommentList
+
+-- | Retrieves the comments for a blog, across all posts, possibly filtered.
+--
+-- /See:/ 'commentsListByBlog' smart constructor.
+data CommentsListByBlog = CommentsListByBlog
+    { _clbbStatus      :: !(Maybe [CommentsListByBlogStatus])
+    , _clbbEndDate     :: !(Maybe DateTime')
+    , _clbbBlogId      :: !Text
+    , _clbbStartDate   :: !(Maybe DateTime')
+    , _clbbFetchBodies :: !(Maybe Bool)
+    , _clbbPageToken   :: !(Maybe Text)
+    , _clbbMaxResults  :: !(Maybe (Textual Word32))
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CommentsListByBlog' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'clbbStatus'
+--
+-- * 'clbbEndDate'
+--
+-- * 'clbbBlogId'
+--
+-- * 'clbbStartDate'
+--
+-- * 'clbbFetchBodies'
+--
+-- * 'clbbPageToken'
+--
+-- * 'clbbMaxResults'
+commentsListByBlog
+    :: Text -- ^ 'clbbBlogId'
+    -> CommentsListByBlog
+commentsListByBlog pClbbBlogId_ =
+    CommentsListByBlog
+    { _clbbStatus = Nothing
+    , _clbbEndDate = Nothing
+    , _clbbBlogId = pClbbBlogId_
+    , _clbbStartDate = Nothing
+    , _clbbFetchBodies = Nothing
+    , _clbbPageToken = Nothing
+    , _clbbMaxResults = Nothing
+    }
+
+clbbStatus :: Lens' CommentsListByBlog [CommentsListByBlogStatus]
+clbbStatus
+  = lens _clbbStatus (\ s a -> s{_clbbStatus = a}) .
+      _Default
+      . _Coerce
+
+-- | Latest date of comment to fetch, a date-time with RFC 3339 formatting.
+clbbEndDate :: Lens' CommentsListByBlog (Maybe UTCTime)
+clbbEndDate
+  = lens _clbbEndDate (\ s a -> s{_clbbEndDate = a}) .
+      mapping _DateTime
+
+-- | ID of the blog to fetch comments from.
+clbbBlogId :: Lens' CommentsListByBlog Text
+clbbBlogId
+  = lens _clbbBlogId (\ s a -> s{_clbbBlogId = a})
+
+-- | Earliest date of comment to fetch, a date-time with RFC 3339 formatting.
+clbbStartDate :: Lens' CommentsListByBlog (Maybe UTCTime)
+clbbStartDate
+  = lens _clbbStartDate
+      (\ s a -> s{_clbbStartDate = a})
+      . mapping _DateTime
+
+-- | Whether the body content of the comments is included.
+clbbFetchBodies :: Lens' CommentsListByBlog (Maybe Bool)
+clbbFetchBodies
+  = lens _clbbFetchBodies
+      (\ s a -> s{_clbbFetchBodies = a})
+
+-- | Continuation token if request is paged.
+clbbPageToken :: Lens' CommentsListByBlog (Maybe Text)
+clbbPageToken
+  = lens _clbbPageToken
+      (\ s a -> s{_clbbPageToken = a})
+
+-- | Maximum number of comments to include in the result.
+clbbMaxResults :: Lens' CommentsListByBlog (Maybe Word32)
+clbbMaxResults
+  = lens _clbbMaxResults
+      (\ s a -> s{_clbbMaxResults = a})
+      . mapping _Coerce
+
+instance GoogleRequest CommentsListByBlog where
+        type Rs CommentsListByBlog = CommentList
+        requestClient CommentsListByBlog{..}
+          = go _clbbBlogId (_clbbStatus ^. _Default)
+              _clbbEndDate
+              _clbbStartDate
+              _clbbFetchBodies
+              _clbbPageToken
+              _clbbMaxResults
+              (Just AltJSON)
+              bloggerService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy CommentsListByBlogResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Blogger/Comments/MarkAsSpam.hs b/gen/Network/Google/Resource/Blogger/Comments/MarkAsSpam.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Blogger/Comments/MarkAsSpam.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.Blogger.Comments.MarkAsSpam
+-- 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)
+--
+-- Marks a comment as spam.
+--
+-- /See:/ <https://developers.google.com/blogger/docs/3.0/getting_started Blogger API Reference> for @blogger.comments.markAsSpam@.
+module Network.Google.Resource.Blogger.Comments.MarkAsSpam
+    (
+    -- * REST Resource
+      CommentsMarkAsSpamResource
+
+    -- * Creating a Request
+    , commentsMarkAsSpam
+    , CommentsMarkAsSpam
+
+    -- * Request Lenses
+    , cmasBlogId
+    , cmasPostId
+    , cmasCommentId
+    ) where
+
+import           Network.Google.Blogger.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @blogger.comments.markAsSpam@ method which the
+-- 'CommentsMarkAsSpam' request conforms to.
+type CommentsMarkAsSpamResource =
+     "blogger" :>
+       "v3" :>
+         "blogs" :>
+           Capture "blogId" Text :>
+             "posts" :>
+               Capture "postId" Text :>
+                 "comments" :>
+                   Capture "commentId" Text :>
+                     "spam" :>
+                       QueryParam "alt" AltJSON :> Post '[JSON] Comment
+
+-- | Marks a comment as spam.
+--
+-- /See:/ 'commentsMarkAsSpam' smart constructor.
+data CommentsMarkAsSpam = CommentsMarkAsSpam
+    { _cmasBlogId    :: !Text
+    , _cmasPostId    :: !Text
+    , _cmasCommentId :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CommentsMarkAsSpam' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cmasBlogId'
+--
+-- * 'cmasPostId'
+--
+-- * 'cmasCommentId'
+commentsMarkAsSpam
+    :: Text -- ^ 'cmasBlogId'
+    -> Text -- ^ 'cmasPostId'
+    -> Text -- ^ 'cmasCommentId'
+    -> CommentsMarkAsSpam
+commentsMarkAsSpam pCmasBlogId_ pCmasPostId_ pCmasCommentId_ =
+    CommentsMarkAsSpam
+    { _cmasBlogId = pCmasBlogId_
+    , _cmasPostId = pCmasPostId_
+    , _cmasCommentId = pCmasCommentId_
+    }
+
+-- | The ID of the Blog.
+cmasBlogId :: Lens' CommentsMarkAsSpam Text
+cmasBlogId
+  = lens _cmasBlogId (\ s a -> s{_cmasBlogId = a})
+
+-- | The ID of the Post.
+cmasPostId :: Lens' CommentsMarkAsSpam Text
+cmasPostId
+  = lens _cmasPostId (\ s a -> s{_cmasPostId = a})
+
+-- | The ID of the comment to mark as spam.
+cmasCommentId :: Lens' CommentsMarkAsSpam Text
+cmasCommentId
+  = lens _cmasCommentId
+      (\ s a -> s{_cmasCommentId = a})
+
+instance GoogleRequest CommentsMarkAsSpam where
+        type Rs CommentsMarkAsSpam = Comment
+        requestClient CommentsMarkAsSpam{..}
+          = go _cmasBlogId _cmasPostId _cmasCommentId
+              (Just AltJSON)
+              bloggerService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy CommentsMarkAsSpamResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Blogger/Comments/RemoveContent.hs b/gen/Network/Google/Resource/Blogger/Comments/RemoveContent.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Blogger/Comments/RemoveContent.hs
@@ -0,0 +1,112 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.Blogger.Comments.RemoveContent
+-- 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 the content of a comment.
+--
+-- /See:/ <https://developers.google.com/blogger/docs/3.0/getting_started Blogger API Reference> for @blogger.comments.removeContent@.
+module Network.Google.Resource.Blogger.Comments.RemoveContent
+    (
+    -- * REST Resource
+      CommentsRemoveContentResource
+
+    -- * Creating a Request
+    , commentsRemoveContent
+    , CommentsRemoveContent
+
+    -- * Request Lenses
+    , crcBlogId
+    , crcPostId
+    , crcCommentId
+    ) where
+
+import           Network.Google.Blogger.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @blogger.comments.removeContent@ method which the
+-- 'CommentsRemoveContent' request conforms to.
+type CommentsRemoveContentResource =
+     "blogger" :>
+       "v3" :>
+         "blogs" :>
+           Capture "blogId" Text :>
+             "posts" :>
+               Capture "postId" Text :>
+                 "comments" :>
+                   Capture "commentId" Text :>
+                     "removecontent" :>
+                       QueryParam "alt" AltJSON :> Post '[JSON] Comment
+
+-- | Removes the content of a comment.
+--
+-- /See:/ 'commentsRemoveContent' smart constructor.
+data CommentsRemoveContent = CommentsRemoveContent
+    { _crcBlogId    :: !Text
+    , _crcPostId    :: !Text
+    , _crcCommentId :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CommentsRemoveContent' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'crcBlogId'
+--
+-- * 'crcPostId'
+--
+-- * 'crcCommentId'
+commentsRemoveContent
+    :: Text -- ^ 'crcBlogId'
+    -> Text -- ^ 'crcPostId'
+    -> Text -- ^ 'crcCommentId'
+    -> CommentsRemoveContent
+commentsRemoveContent pCrcBlogId_ pCrcPostId_ pCrcCommentId_ =
+    CommentsRemoveContent
+    { _crcBlogId = pCrcBlogId_
+    , _crcPostId = pCrcPostId_
+    , _crcCommentId = pCrcCommentId_
+    }
+
+-- | The ID of the Blog.
+crcBlogId :: Lens' CommentsRemoveContent Text
+crcBlogId
+  = lens _crcBlogId (\ s a -> s{_crcBlogId = a})
+
+-- | The ID of the Post.
+crcPostId :: Lens' CommentsRemoveContent Text
+crcPostId
+  = lens _crcPostId (\ s a -> s{_crcPostId = a})
+
+-- | The ID of the comment to delete content from.
+crcCommentId :: Lens' CommentsRemoveContent Text
+crcCommentId
+  = lens _crcCommentId (\ s a -> s{_crcCommentId = a})
+
+instance GoogleRequest CommentsRemoveContent where
+        type Rs CommentsRemoveContent = Comment
+        requestClient CommentsRemoveContent{..}
+          = go _crcBlogId _crcPostId _crcCommentId
+              (Just AltJSON)
+              bloggerService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy CommentsRemoveContentResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Blogger/PageViews/Get.hs b/gen/Network/Google/Resource/Blogger/PageViews/Get.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Blogger/PageViews/Get.hs
@@ -0,0 +1,97 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.Blogger.PageViews.Get
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Retrieve pageview stats for a Blog.
+--
+-- /See:/ <https://developers.google.com/blogger/docs/3.0/getting_started Blogger API Reference> for @blogger.pageViews.get@.
+module Network.Google.Resource.Blogger.PageViews.Get
+    (
+    -- * REST Resource
+      PageViewsGetResource
+
+    -- * Creating a Request
+    , pageViewsGet
+    , PageViewsGet
+
+    -- * Request Lenses
+    , pvgBlogId
+    , pvgRange
+    ) where
+
+import           Network.Google.Blogger.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @blogger.pageViews.get@ method which the
+-- 'PageViewsGet' request conforms to.
+type PageViewsGetResource =
+     "blogger" :>
+       "v3" :>
+         "blogs" :>
+           Capture "blogId" Text :>
+             "pageviews" :>
+               QueryParams "range" PageViewsGetRange :>
+                 QueryParam "alt" AltJSON :> Get '[JSON] Pageviews
+
+-- | Retrieve pageview stats for a Blog.
+--
+-- /See:/ 'pageViewsGet' smart constructor.
+data PageViewsGet = PageViewsGet
+    { _pvgBlogId :: !Text
+    , _pvgRange  :: !(Maybe [PageViewsGetRange])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'PageViewsGet' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pvgBlogId'
+--
+-- * 'pvgRange'
+pageViewsGet
+    :: Text -- ^ 'pvgBlogId'
+    -> PageViewsGet
+pageViewsGet pPvgBlogId_ =
+    PageViewsGet
+    { _pvgBlogId = pPvgBlogId_
+    , _pvgRange = Nothing
+    }
+
+-- | The ID of the blog to get.
+pvgBlogId :: Lens' PageViewsGet Text
+pvgBlogId
+  = lens _pvgBlogId (\ s a -> s{_pvgBlogId = a})
+
+pvgRange :: Lens' PageViewsGet [PageViewsGetRange]
+pvgRange
+  = lens _pvgRange (\ s a -> s{_pvgRange = a}) .
+      _Default
+      . _Coerce
+
+instance GoogleRequest PageViewsGet where
+        type Rs PageViewsGet = Pageviews
+        requestClient PageViewsGet{..}
+          = go _pvgBlogId (_pvgRange ^. _Default)
+              (Just AltJSON)
+              bloggerService
+          where go
+                  = buildClient (Proxy :: Proxy PageViewsGetResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Blogger/Pages/Delete.hs b/gen/Network/Google/Resource/Blogger/Pages/Delete.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Blogger/Pages/Delete.hs
@@ -0,0 +1,96 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.Blogger.Pages.Delete
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Delete a page by ID.
+--
+-- /See:/ <https://developers.google.com/blogger/docs/3.0/getting_started Blogger API Reference> for @blogger.pages.delete@.
+module Network.Google.Resource.Blogger.Pages.Delete
+    (
+    -- * REST Resource
+      PagesDeleteResource
+
+    -- * Creating a Request
+    , pagesDelete
+    , PagesDelete
+
+    -- * Request Lenses
+    , pddBlogId
+    , pddPageId
+    ) where
+
+import           Network.Google.Blogger.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @blogger.pages.delete@ method which the
+-- 'PagesDelete' request conforms to.
+type PagesDeleteResource =
+     "blogger" :>
+       "v3" :>
+         "blogs" :>
+           Capture "blogId" Text :>
+             "pages" :>
+               Capture "pageId" Text :>
+                 QueryParam "alt" AltJSON :> Delete '[JSON] ()
+
+-- | Delete a page by ID.
+--
+-- /See:/ 'pagesDelete' smart constructor.
+data PagesDelete = PagesDelete
+    { _pddBlogId :: !Text
+    , _pddPageId :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'PagesDelete' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pddBlogId'
+--
+-- * 'pddPageId'
+pagesDelete
+    :: Text -- ^ 'pddBlogId'
+    -> Text -- ^ 'pddPageId'
+    -> PagesDelete
+pagesDelete pPddBlogId_ pPddPageId_ =
+    PagesDelete
+    { _pddBlogId = pPddBlogId_
+    , _pddPageId = pPddPageId_
+    }
+
+-- | The ID of the Blog.
+pddBlogId :: Lens' PagesDelete Text
+pddBlogId
+  = lens _pddBlogId (\ s a -> s{_pddBlogId = a})
+
+-- | The ID of the Page.
+pddPageId :: Lens' PagesDelete Text
+pddPageId
+  = lens _pddPageId (\ s a -> s{_pddPageId = a})
+
+instance GoogleRequest PagesDelete where
+        type Rs PagesDelete = ()
+        requestClient PagesDelete{..}
+          = go _pddBlogId _pddPageId (Just AltJSON)
+              bloggerService
+          where go
+                  = buildClient (Proxy :: Proxy PagesDeleteResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Blogger/Pages/Get.hs b/gen/Network/Google/Resource/Blogger/Pages/Get.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Blogger/Pages/Get.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.Blogger.Pages.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 one blog page by ID.
+--
+-- /See:/ <https://developers.google.com/blogger/docs/3.0/getting_started Blogger API Reference> for @blogger.pages.get@.
+module Network.Google.Resource.Blogger.Pages.Get
+    (
+    -- * REST Resource
+      PagesGetResource
+
+    -- * Creating a Request
+    , pagesGet
+    , PagesGet
+
+    -- * Request Lenses
+    , pgBlogId
+    , pgPageId
+    , pgView
+    ) where
+
+import           Network.Google.Blogger.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @blogger.pages.get@ method which the
+-- 'PagesGet' request conforms to.
+type PagesGetResource =
+     "blogger" :>
+       "v3" :>
+         "blogs" :>
+           Capture "blogId" Text :>
+             "pages" :>
+               Capture "pageId" Text :>
+                 QueryParam "view" PagesGetView :>
+                   QueryParam "alt" AltJSON :> Get '[JSON] Page
+
+-- | Gets one blog page by ID.
+--
+-- /See:/ 'pagesGet' smart constructor.
+data PagesGet = PagesGet
+    { _pgBlogId :: !Text
+    , _pgPageId :: !Text
+    , _pgView   :: !(Maybe PagesGetView)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'PagesGet' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pgBlogId'
+--
+-- * 'pgPageId'
+--
+-- * 'pgView'
+pagesGet
+    :: Text -- ^ 'pgBlogId'
+    -> Text -- ^ 'pgPageId'
+    -> PagesGet
+pagesGet pPgBlogId_ pPgPageId_ =
+    PagesGet
+    { _pgBlogId = pPgBlogId_
+    , _pgPageId = pPgPageId_
+    , _pgView = Nothing
+    }
+
+-- | ID of the blog containing the page.
+pgBlogId :: Lens' PagesGet Text
+pgBlogId = lens _pgBlogId (\ s a -> s{_pgBlogId = a})
+
+-- | The ID of the page to get.
+pgPageId :: Lens' PagesGet Text
+pgPageId = lens _pgPageId (\ s a -> s{_pgPageId = a})
+
+pgView :: Lens' PagesGet (Maybe PagesGetView)
+pgView = lens _pgView (\ s a -> s{_pgView = a})
+
+instance GoogleRequest PagesGet where
+        type Rs PagesGet = Page
+        requestClient PagesGet{..}
+          = go _pgBlogId _pgPageId _pgView (Just AltJSON)
+              bloggerService
+          where go
+                  = buildClient (Proxy :: Proxy PagesGetResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Blogger/Pages/Insert.hs b/gen/Network/Google/Resource/Blogger/Pages/Insert.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Blogger/Pages/Insert.hs
@@ -0,0 +1,106 @@
+{-# 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.Blogger.Pages.Insert
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Add a page.
+--
+-- /See:/ <https://developers.google.com/blogger/docs/3.0/getting_started Blogger API Reference> for @blogger.pages.insert@.
+module Network.Google.Resource.Blogger.Pages.Insert
+    (
+    -- * REST Resource
+      PagesInsertResource
+
+    -- * Creating a Request
+    , pagesInsert
+    , PagesInsert
+
+    -- * Request Lenses
+    , piIsDraft
+    , piBlogId
+    , piPayload
+    ) where
+
+import           Network.Google.Blogger.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @blogger.pages.insert@ method which the
+-- 'PagesInsert' request conforms to.
+type PagesInsertResource =
+     "blogger" :>
+       "v3" :>
+         "blogs" :>
+           Capture "blogId" Text :>
+             "pages" :>
+               QueryParam "isDraft" Bool :>
+                 QueryParam "alt" AltJSON :>
+                   ReqBody '[JSON] Page :> Post '[JSON] Page
+
+-- | Add a page.
+--
+-- /See:/ 'pagesInsert' smart constructor.
+data PagesInsert = PagesInsert
+    { _piIsDraft :: !(Maybe Bool)
+    , _piBlogId  :: !Text
+    , _piPayload :: !Page
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'PagesInsert' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'piIsDraft'
+--
+-- * 'piBlogId'
+--
+-- * 'piPayload'
+pagesInsert
+    :: Text -- ^ 'piBlogId'
+    -> Page -- ^ 'piPayload'
+    -> PagesInsert
+pagesInsert pPiBlogId_ pPiPayload_ =
+    PagesInsert
+    { _piIsDraft = Nothing
+    , _piBlogId = pPiBlogId_
+    , _piPayload = pPiPayload_
+    }
+
+-- | Whether to create the page as a draft (default: false).
+piIsDraft :: Lens' PagesInsert (Maybe Bool)
+piIsDraft
+  = lens _piIsDraft (\ s a -> s{_piIsDraft = a})
+
+-- | ID of the blog to add the page to.
+piBlogId :: Lens' PagesInsert Text
+piBlogId = lens _piBlogId (\ s a -> s{_piBlogId = a})
+
+-- | Multipart request metadata.
+piPayload :: Lens' PagesInsert Page
+piPayload
+  = lens _piPayload (\ s a -> s{_piPayload = a})
+
+instance GoogleRequest PagesInsert where
+        type Rs PagesInsert = Page
+        requestClient PagesInsert{..}
+          = go _piBlogId _piIsDraft (Just AltJSON) _piPayload
+              bloggerService
+          where go
+                  = buildClient (Proxy :: Proxy PagesInsertResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Blogger/Pages/List.hs b/gen/Network/Google/Resource/Blogger/Pages/List.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Blogger/Pages/List.hs
@@ -0,0 +1,145 @@
+{-# 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.Blogger.Pages.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 the pages for a blog, optionally including non-LIVE statuses.
+--
+-- /See:/ <https://developers.google.com/blogger/docs/3.0/getting_started Blogger API Reference> for @blogger.pages.list@.
+module Network.Google.Resource.Blogger.Pages.List
+    (
+    -- * REST Resource
+      PagesListResource
+
+    -- * Creating a Request
+    , pagesList
+    , PagesList
+
+    -- * Request Lenses
+    , plStatus
+    , plBlogId
+    , plFetchBodies
+    , plView
+    , plPageToken
+    , plMaxResults
+    ) where
+
+import           Network.Google.Blogger.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @blogger.pages.list@ method which the
+-- 'PagesList' request conforms to.
+type PagesListResource =
+     "blogger" :>
+       "v3" :>
+         "blogs" :>
+           Capture "blogId" Text :>
+             "pages" :>
+               QueryParams "status" PagesListStatus :>
+                 QueryParam "fetchBodies" Bool :>
+                   QueryParam "view" PagesListView :>
+                     QueryParam "pageToken" Text :>
+                       QueryParam "maxResults" (Textual Word32) :>
+                         QueryParam "alt" AltJSON :> Get '[JSON] PageList
+
+-- | Retrieves the pages for a blog, optionally including non-LIVE statuses.
+--
+-- /See:/ 'pagesList' smart constructor.
+data PagesList = PagesList
+    { _plStatus      :: !(Maybe [PagesListStatus])
+    , _plBlogId      :: !Text
+    , _plFetchBodies :: !(Maybe Bool)
+    , _plView        :: !(Maybe PagesListView)
+    , _plPageToken   :: !(Maybe Text)
+    , _plMaxResults  :: !(Maybe (Textual Word32))
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'PagesList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'plStatus'
+--
+-- * 'plBlogId'
+--
+-- * 'plFetchBodies'
+--
+-- * 'plView'
+--
+-- * 'plPageToken'
+--
+-- * 'plMaxResults'
+pagesList
+    :: Text -- ^ 'plBlogId'
+    -> PagesList
+pagesList pPlBlogId_ =
+    PagesList
+    { _plStatus = Nothing
+    , _plBlogId = pPlBlogId_
+    , _plFetchBodies = Nothing
+    , _plView = Nothing
+    , _plPageToken = Nothing
+    , _plMaxResults = Nothing
+    }
+
+plStatus :: Lens' PagesList [PagesListStatus]
+plStatus
+  = lens _plStatus (\ s a -> s{_plStatus = a}) .
+      _Default
+      . _Coerce
+
+-- | ID of the blog to fetch Pages from.
+plBlogId :: Lens' PagesList Text
+plBlogId = lens _plBlogId (\ s a -> s{_plBlogId = a})
+
+-- | Whether to retrieve the Page bodies.
+plFetchBodies :: Lens' PagesList (Maybe Bool)
+plFetchBodies
+  = lens _plFetchBodies
+      (\ s a -> s{_plFetchBodies = a})
+
+-- | Access level with which to view the returned result. Note that some
+-- fields require elevated access.
+plView :: Lens' PagesList (Maybe PagesListView)
+plView = lens _plView (\ s a -> s{_plView = a})
+
+-- | Continuation token if the request is paged.
+plPageToken :: Lens' PagesList (Maybe Text)
+plPageToken
+  = lens _plPageToken (\ s a -> s{_plPageToken = a})
+
+-- | Maximum number of Pages to fetch.
+plMaxResults :: Lens' PagesList (Maybe Word32)
+plMaxResults
+  = lens _plMaxResults (\ s a -> s{_plMaxResults = a})
+      . mapping _Coerce
+
+instance GoogleRequest PagesList where
+        type Rs PagesList = PageList
+        requestClient PagesList{..}
+          = go _plBlogId (_plStatus ^. _Default) _plFetchBodies
+              _plView
+              _plPageToken
+              _plMaxResults
+              (Just AltJSON)
+              bloggerService
+          where go
+                  = buildClient (Proxy :: Proxy PagesListResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Blogger/Pages/Patch.hs b/gen/Network/Google/Resource/Blogger/Pages/Patch.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Blogger/Pages/Patch.hs
@@ -0,0 +1,131 @@
+{-# 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.Blogger.Pages.Patch
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Update a page. This method supports patch semantics.
+--
+-- /See:/ <https://developers.google.com/blogger/docs/3.0/getting_started Blogger API Reference> for @blogger.pages.patch@.
+module Network.Google.Resource.Blogger.Pages.Patch
+    (
+    -- * REST Resource
+      PagesPatchResource
+
+    -- * Creating a Request
+    , pagesPatch
+    , PagesPatch
+
+    -- * Request Lenses
+    , ppBlogId
+    , ppPageId
+    , ppPayload
+    , ppRevert
+    , ppPublish
+    ) where
+
+import           Network.Google.Blogger.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @blogger.pages.patch@ method which the
+-- 'PagesPatch' request conforms to.
+type PagesPatchResource =
+     "blogger" :>
+       "v3" :>
+         "blogs" :>
+           Capture "blogId" Text :>
+             "pages" :>
+               Capture "pageId" Text :>
+                 QueryParam "revert" Bool :>
+                   QueryParam "publish" Bool :>
+                     QueryParam "alt" AltJSON :>
+                       ReqBody '[JSON] Page :> Patch '[JSON] Page
+
+-- | Update a page. This method supports patch semantics.
+--
+-- /See:/ 'pagesPatch' smart constructor.
+data PagesPatch = PagesPatch
+    { _ppBlogId  :: !Text
+    , _ppPageId  :: !Text
+    , _ppPayload :: !Page
+    , _ppRevert  :: !(Maybe Bool)
+    , _ppPublish :: !(Maybe Bool)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'PagesPatch' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ppBlogId'
+--
+-- * 'ppPageId'
+--
+-- * 'ppPayload'
+--
+-- * 'ppRevert'
+--
+-- * 'ppPublish'
+pagesPatch
+    :: Text -- ^ 'ppBlogId'
+    -> Text -- ^ 'ppPageId'
+    -> Page -- ^ 'ppPayload'
+    -> PagesPatch
+pagesPatch pPpBlogId_ pPpPageId_ pPpPayload_ =
+    PagesPatch
+    { _ppBlogId = pPpBlogId_
+    , _ppPageId = pPpPageId_
+    , _ppPayload = pPpPayload_
+    , _ppRevert = Nothing
+    , _ppPublish = Nothing
+    }
+
+-- | The ID of the Blog.
+ppBlogId :: Lens' PagesPatch Text
+ppBlogId = lens _ppBlogId (\ s a -> s{_ppBlogId = a})
+
+-- | The ID of the Page.
+ppPageId :: Lens' PagesPatch Text
+ppPageId = lens _ppPageId (\ s a -> s{_ppPageId = a})
+
+-- | Multipart request metadata.
+ppPayload :: Lens' PagesPatch Page
+ppPayload
+  = lens _ppPayload (\ s a -> s{_ppPayload = a})
+
+-- | Whether a revert action should be performed when the page is updated
+-- (default: false).
+ppRevert :: Lens' PagesPatch (Maybe Bool)
+ppRevert = lens _ppRevert (\ s a -> s{_ppRevert = a})
+
+-- | Whether a publish action should be performed when the page is updated
+-- (default: false).
+ppPublish :: Lens' PagesPatch (Maybe Bool)
+ppPublish
+  = lens _ppPublish (\ s a -> s{_ppPublish = a})
+
+instance GoogleRequest PagesPatch where
+        type Rs PagesPatch = Page
+        requestClient PagesPatch{..}
+          = go _ppBlogId _ppPageId _ppRevert _ppPublish
+              (Just AltJSON)
+              _ppPayload
+              bloggerService
+          where go
+                  = buildClient (Proxy :: Proxy PagesPatchResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Blogger/Pages/Publish.hs b/gen/Network/Google/Resource/Blogger/Pages/Publish.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Blogger/Pages/Publish.hs
@@ -0,0 +1,97 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.Blogger.Pages.Publish
+-- 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)
+--
+-- Publishes a draft page.
+--
+-- /See:/ <https://developers.google.com/blogger/docs/3.0/getting_started Blogger API Reference> for @blogger.pages.publish@.
+module Network.Google.Resource.Blogger.Pages.Publish
+    (
+    -- * REST Resource
+      PagesPublishResource
+
+    -- * Creating a Request
+    , pagesPublish
+    , PagesPublish
+
+    -- * Request Lenses
+    , pagaBlogId
+    , pagaPageId
+    ) where
+
+import           Network.Google.Blogger.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @blogger.pages.publish@ method which the
+-- 'PagesPublish' request conforms to.
+type PagesPublishResource =
+     "blogger" :>
+       "v3" :>
+         "blogs" :>
+           Capture "blogId" Text :>
+             "pages" :>
+               Capture "pageId" Text :>
+                 "publish" :>
+                   QueryParam "alt" AltJSON :> Post '[JSON] Page
+
+-- | Publishes a draft page.
+--
+-- /See:/ 'pagesPublish' smart constructor.
+data PagesPublish = PagesPublish
+    { _pagaBlogId :: !Text
+    , _pagaPageId :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'PagesPublish' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pagaBlogId'
+--
+-- * 'pagaPageId'
+pagesPublish
+    :: Text -- ^ 'pagaBlogId'
+    -> Text -- ^ 'pagaPageId'
+    -> PagesPublish
+pagesPublish pPagaBlogId_ pPagaPageId_ =
+    PagesPublish
+    { _pagaBlogId = pPagaBlogId_
+    , _pagaPageId = pPagaPageId_
+    }
+
+-- | The ID of the blog.
+pagaBlogId :: Lens' PagesPublish Text
+pagaBlogId
+  = lens _pagaBlogId (\ s a -> s{_pagaBlogId = a})
+
+-- | The ID of the page.
+pagaPageId :: Lens' PagesPublish Text
+pagaPageId
+  = lens _pagaPageId (\ s a -> s{_pagaPageId = a})
+
+instance GoogleRequest PagesPublish where
+        type Rs PagesPublish = Page
+        requestClient PagesPublish{..}
+          = go _pagaBlogId _pagaPageId (Just AltJSON)
+              bloggerService
+          where go
+                  = buildClient (Proxy :: Proxy PagesPublishResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Blogger/Pages/Revert.hs b/gen/Network/Google/Resource/Blogger/Pages/Revert.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Blogger/Pages/Revert.hs
@@ -0,0 +1,97 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.Blogger.Pages.Revert
+-- 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)
+--
+-- Revert a published or scheduled page to draft state.
+--
+-- /See:/ <https://developers.google.com/blogger/docs/3.0/getting_started Blogger API Reference> for @blogger.pages.revert@.
+module Network.Google.Resource.Blogger.Pages.Revert
+    (
+    -- * REST Resource
+      PagesRevertResource
+
+    -- * Creating a Request
+    , pagesRevert
+    , PagesRevert
+
+    -- * Request Lenses
+    , pagBlogId
+    , pagPageId
+    ) where
+
+import           Network.Google.Blogger.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @blogger.pages.revert@ method which the
+-- 'PagesRevert' request conforms to.
+type PagesRevertResource =
+     "blogger" :>
+       "v3" :>
+         "blogs" :>
+           Capture "blogId" Text :>
+             "pages" :>
+               Capture "pageId" Text :>
+                 "revert" :>
+                   QueryParam "alt" AltJSON :> Post '[JSON] Page
+
+-- | Revert a published or scheduled page to draft state.
+--
+-- /See:/ 'pagesRevert' smart constructor.
+data PagesRevert = PagesRevert
+    { _pagBlogId :: !Text
+    , _pagPageId :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'PagesRevert' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pagBlogId'
+--
+-- * 'pagPageId'
+pagesRevert
+    :: Text -- ^ 'pagBlogId'
+    -> Text -- ^ 'pagPageId'
+    -> PagesRevert
+pagesRevert pPagBlogId_ pPagPageId_ =
+    PagesRevert
+    { _pagBlogId = pPagBlogId_
+    , _pagPageId = pPagPageId_
+    }
+
+-- | The ID of the blog.
+pagBlogId :: Lens' PagesRevert Text
+pagBlogId
+  = lens _pagBlogId (\ s a -> s{_pagBlogId = a})
+
+-- | The ID of the page.
+pagPageId :: Lens' PagesRevert Text
+pagPageId
+  = lens _pagPageId (\ s a -> s{_pagPageId = a})
+
+instance GoogleRequest PagesRevert where
+        type Rs PagesRevert = Page
+        requestClient PagesRevert{..}
+          = go _pagBlogId _pagPageId (Just AltJSON)
+              bloggerService
+          where go
+                  = buildClient (Proxy :: Proxy PagesRevertResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Blogger/Pages/Update.hs b/gen/Network/Google/Resource/Blogger/Pages/Update.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Blogger/Pages/Update.hs
@@ -0,0 +1,134 @@
+{-# 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.Blogger.Pages.Update
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Update a page.
+--
+-- /See:/ <https://developers.google.com/blogger/docs/3.0/getting_started Blogger API Reference> for @blogger.pages.update@.
+module Network.Google.Resource.Blogger.Pages.Update
+    (
+    -- * REST Resource
+      PagesUpdateResource
+
+    -- * Creating a Request
+    , pagesUpdate
+    , PagesUpdate
+
+    -- * Request Lenses
+    , puuBlogId
+    , puuPageId
+    , puuPayload
+    , puuRevert
+    , puuPublish
+    ) where
+
+import           Network.Google.Blogger.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @blogger.pages.update@ method which the
+-- 'PagesUpdate' request conforms to.
+type PagesUpdateResource =
+     "blogger" :>
+       "v3" :>
+         "blogs" :>
+           Capture "blogId" Text :>
+             "pages" :>
+               Capture "pageId" Text :>
+                 QueryParam "revert" Bool :>
+                   QueryParam "publish" Bool :>
+                     QueryParam "alt" AltJSON :>
+                       ReqBody '[JSON] Page :> Put '[JSON] Page
+
+-- | Update a page.
+--
+-- /See:/ 'pagesUpdate' smart constructor.
+data PagesUpdate = PagesUpdate
+    { _puuBlogId  :: !Text
+    , _puuPageId  :: !Text
+    , _puuPayload :: !Page
+    , _puuRevert  :: !(Maybe Bool)
+    , _puuPublish :: !(Maybe Bool)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'PagesUpdate' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'puuBlogId'
+--
+-- * 'puuPageId'
+--
+-- * 'puuPayload'
+--
+-- * 'puuRevert'
+--
+-- * 'puuPublish'
+pagesUpdate
+    :: Text -- ^ 'puuBlogId'
+    -> Text -- ^ 'puuPageId'
+    -> Page -- ^ 'puuPayload'
+    -> PagesUpdate
+pagesUpdate pPuuBlogId_ pPuuPageId_ pPuuPayload_ =
+    PagesUpdate
+    { _puuBlogId = pPuuBlogId_
+    , _puuPageId = pPuuPageId_
+    , _puuPayload = pPuuPayload_
+    , _puuRevert = Nothing
+    , _puuPublish = Nothing
+    }
+
+-- | The ID of the Blog.
+puuBlogId :: Lens' PagesUpdate Text
+puuBlogId
+  = lens _puuBlogId (\ s a -> s{_puuBlogId = a})
+
+-- | The ID of the Page.
+puuPageId :: Lens' PagesUpdate Text
+puuPageId
+  = lens _puuPageId (\ s a -> s{_puuPageId = a})
+
+-- | Multipart request metadata.
+puuPayload :: Lens' PagesUpdate Page
+puuPayload
+  = lens _puuPayload (\ s a -> s{_puuPayload = a})
+
+-- | Whether a revert action should be performed when the page is updated
+-- (default: false).
+puuRevert :: Lens' PagesUpdate (Maybe Bool)
+puuRevert
+  = lens _puuRevert (\ s a -> s{_puuRevert = a})
+
+-- | Whether a publish action should be performed when the page is updated
+-- (default: false).
+puuPublish :: Lens' PagesUpdate (Maybe Bool)
+puuPublish
+  = lens _puuPublish (\ s a -> s{_puuPublish = a})
+
+instance GoogleRequest PagesUpdate where
+        type Rs PagesUpdate = Page
+        requestClient PagesUpdate{..}
+          = go _puuBlogId _puuPageId _puuRevert _puuPublish
+              (Just AltJSON)
+              _puuPayload
+              bloggerService
+          where go
+                  = buildClient (Proxy :: Proxy PagesUpdateResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Blogger/PostUserInfos/Get.hs b/gen/Network/Google/Resource/Blogger/PostUserInfos/Get.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Blogger/PostUserInfos/Get.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.Blogger.PostUserInfos.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 one post and user info pair, by post ID and user ID. The post user
+-- info contains per-user information about the post, such as access
+-- rights, specific to the user.
+--
+-- /See:/ <https://developers.google.com/blogger/docs/3.0/getting_started Blogger API Reference> for @blogger.postUserInfos.get@.
+module Network.Google.Resource.Blogger.PostUserInfos.Get
+    (
+    -- * REST Resource
+      PostUserInfosGetResource
+
+    -- * Creating a Request
+    , postUserInfosGet
+    , PostUserInfosGet
+
+    -- * Request Lenses
+    , puigBlogId
+    , puigMaxComments
+    , puigUserId
+    , puigPostId
+    ) where
+
+import           Network.Google.Blogger.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @blogger.postUserInfos.get@ method which the
+-- 'PostUserInfosGet' request conforms to.
+type PostUserInfosGetResource =
+     "blogger" :>
+       "v3" :>
+         "users" :>
+           Capture "userId" Text :>
+             "blogs" :>
+               Capture "blogId" Text :>
+                 "posts" :>
+                   Capture "postId" Text :>
+                     QueryParam "maxComments" (Textual Word32) :>
+                       QueryParam "alt" AltJSON :> Get '[JSON] PostUserInfo
+
+-- | Gets one post and user info pair, by post ID and user ID. The post user
+-- info contains per-user information about the post, such as access
+-- rights, specific to the user.
+--
+-- /See:/ 'postUserInfosGet' smart constructor.
+data PostUserInfosGet = PostUserInfosGet
+    { _puigBlogId      :: !Text
+    , _puigMaxComments :: !(Maybe (Textual Word32))
+    , _puigUserId      :: !Text
+    , _puigPostId      :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'PostUserInfosGet' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'puigBlogId'
+--
+-- * 'puigMaxComments'
+--
+-- * 'puigUserId'
+--
+-- * 'puigPostId'
+postUserInfosGet
+    :: Text -- ^ 'puigBlogId'
+    -> Text -- ^ 'puigUserId'
+    -> Text -- ^ 'puigPostId'
+    -> PostUserInfosGet
+postUserInfosGet pPuigBlogId_ pPuigUserId_ pPuigPostId_ =
+    PostUserInfosGet
+    { _puigBlogId = pPuigBlogId_
+    , _puigMaxComments = Nothing
+    , _puigUserId = pPuigUserId_
+    , _puigPostId = pPuigPostId_
+    }
+
+-- | The ID of the blog.
+puigBlogId :: Lens' PostUserInfosGet Text
+puigBlogId
+  = lens _puigBlogId (\ s a -> s{_puigBlogId = a})
+
+-- | Maximum number of comments to pull back on a post.
+puigMaxComments :: Lens' PostUserInfosGet (Maybe Word32)
+puigMaxComments
+  = lens _puigMaxComments
+      (\ s a -> s{_puigMaxComments = a})
+      . mapping _Coerce
+
+-- | ID of the user for the per-user information to be fetched. Either the
+-- word \'self\' (sans quote marks) or the user\'s profile identifier.
+puigUserId :: Lens' PostUserInfosGet Text
+puigUserId
+  = lens _puigUserId (\ s a -> s{_puigUserId = a})
+
+-- | The ID of the post to get.
+puigPostId :: Lens' PostUserInfosGet Text
+puigPostId
+  = lens _puigPostId (\ s a -> s{_puigPostId = a})
+
+instance GoogleRequest PostUserInfosGet where
+        type Rs PostUserInfosGet = PostUserInfo
+        requestClient PostUserInfosGet{..}
+          = go _puigUserId _puigBlogId _puigPostId
+              _puigMaxComments
+              (Just AltJSON)
+              bloggerService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy PostUserInfosGetResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Blogger/PostUserInfos/List.hs b/gen/Network/Google/Resource/Blogger/PostUserInfos/List.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Blogger/PostUserInfos/List.hs
@@ -0,0 +1,221 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.Blogger.PostUserInfos.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 post and post user info pairs, possibly filtered.
+-- The post user info contains per-user information about the post, such as
+-- access rights, specific to the user.
+--
+-- /See:/ <https://developers.google.com/blogger/docs/3.0/getting_started Blogger API Reference> for @blogger.postUserInfos.list@.
+module Network.Google.Resource.Blogger.PostUserInfos.List
+    (
+    -- * REST Resource
+      PostUserInfosListResource
+
+    -- * Creating a Request
+    , postUserInfosList'
+    , PostUserInfosList'
+
+    -- * Request Lenses
+    , puilStatus
+    , puilOrderBy
+    , puilEndDate
+    , puilBlogId
+    , puilUserId
+    , puilStartDate
+    , puilFetchBodies
+    , puilView
+    , puilLabels
+    , puilPageToken
+    , puilMaxResults
+    ) where
+
+import           Network.Google.Blogger.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @blogger.postUserInfos.list@ method which the
+-- 'PostUserInfosList'' request conforms to.
+type PostUserInfosListResource =
+     "blogger" :>
+       "v3" :>
+         "users" :>
+           Capture "userId" Text :>
+             "blogs" :>
+               Capture "blogId" Text :>
+                 "posts" :>
+                   QueryParams "status" PostUserInfosListStatus :>
+                     QueryParam "orderBy" PostUserInfosListOrderBy :>
+                       QueryParam "endDate" DateTime' :>
+                         QueryParam "startDate" DateTime' :>
+                           QueryParam "fetchBodies" Bool :>
+                             QueryParam "view" PostUserInfosListView :>
+                               QueryParam "labels" Text :>
+                                 QueryParam "pageToken" Text :>
+                                   QueryParam "maxResults" (Textual Word32) :>
+                                     QueryParam "alt" AltJSON :>
+                                       Get '[JSON] PostUserInfosList
+
+-- | Retrieves a list of post and post user info pairs, possibly filtered.
+-- The post user info contains per-user information about the post, such as
+-- access rights, specific to the user.
+--
+-- /See:/ 'postUserInfosList'' smart constructor.
+data PostUserInfosList' = PostUserInfosList'
+    { _puilStatus      :: !(Maybe [PostUserInfosListStatus])
+    , _puilOrderBy     :: !PostUserInfosListOrderBy
+    , _puilEndDate     :: !(Maybe DateTime')
+    , _puilBlogId      :: !Text
+    , _puilUserId      :: !Text
+    , _puilStartDate   :: !(Maybe DateTime')
+    , _puilFetchBodies :: !Bool
+    , _puilView        :: !(Maybe PostUserInfosListView)
+    , _puilLabels      :: !(Maybe Text)
+    , _puilPageToken   :: !(Maybe Text)
+    , _puilMaxResults  :: !(Maybe (Textual Word32))
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'PostUserInfosList'' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'puilStatus'
+--
+-- * 'puilOrderBy'
+--
+-- * 'puilEndDate'
+--
+-- * 'puilBlogId'
+--
+-- * 'puilUserId'
+--
+-- * 'puilStartDate'
+--
+-- * 'puilFetchBodies'
+--
+-- * 'puilView'
+--
+-- * 'puilLabels'
+--
+-- * 'puilPageToken'
+--
+-- * 'puilMaxResults'
+postUserInfosList'
+    :: Text -- ^ 'puilBlogId'
+    -> Text -- ^ 'puilUserId'
+    -> PostUserInfosList'
+postUserInfosList' pPuilBlogId_ pPuilUserId_ =
+    PostUserInfosList'
+    { _puilStatus = Nothing
+    , _puilOrderBy = PUILOBPublished
+    , _puilEndDate = Nothing
+    , _puilBlogId = pPuilBlogId_
+    , _puilUserId = pPuilUserId_
+    , _puilStartDate = Nothing
+    , _puilFetchBodies = False
+    , _puilView = Nothing
+    , _puilLabels = Nothing
+    , _puilPageToken = Nothing
+    , _puilMaxResults = Nothing
+    }
+
+puilStatus :: Lens' PostUserInfosList' [PostUserInfosListStatus]
+puilStatus
+  = lens _puilStatus (\ s a -> s{_puilStatus = a}) .
+      _Default
+      . _Coerce
+
+-- | Sort order applied to search results. Default is published.
+puilOrderBy :: Lens' PostUserInfosList' PostUserInfosListOrderBy
+puilOrderBy
+  = lens _puilOrderBy (\ s a -> s{_puilOrderBy = a})
+
+-- | Latest post date to fetch, a date-time with RFC 3339 formatting.
+puilEndDate :: Lens' PostUserInfosList' (Maybe UTCTime)
+puilEndDate
+  = lens _puilEndDate (\ s a -> s{_puilEndDate = a}) .
+      mapping _DateTime
+
+-- | ID of the blog to fetch posts from.
+puilBlogId :: Lens' PostUserInfosList' Text
+puilBlogId
+  = lens _puilBlogId (\ s a -> s{_puilBlogId = a})
+
+-- | ID of the user for the per-user information to be fetched. Either the
+-- word \'self\' (sans quote marks) or the user\'s profile identifier.
+puilUserId :: Lens' PostUserInfosList' Text
+puilUserId
+  = lens _puilUserId (\ s a -> s{_puilUserId = a})
+
+-- | Earliest post date to fetch, a date-time with RFC 3339 formatting.
+puilStartDate :: Lens' PostUserInfosList' (Maybe UTCTime)
+puilStartDate
+  = lens _puilStartDate
+      (\ s a -> s{_puilStartDate = a})
+      . mapping _DateTime
+
+-- | Whether the body content of posts is included. Default is false.
+puilFetchBodies :: Lens' PostUserInfosList' Bool
+puilFetchBodies
+  = lens _puilFetchBodies
+      (\ s a -> s{_puilFetchBodies = a})
+
+-- | Access level with which to view the returned result. Note that some
+-- fields require elevated access.
+puilView :: Lens' PostUserInfosList' (Maybe PostUserInfosListView)
+puilView = lens _puilView (\ s a -> s{_puilView = a})
+
+-- | Comma-separated list of labels to search for.
+puilLabels :: Lens' PostUserInfosList' (Maybe Text)
+puilLabels
+  = lens _puilLabels (\ s a -> s{_puilLabels = a})
+
+-- | Continuation token if the request is paged.
+puilPageToken :: Lens' PostUserInfosList' (Maybe Text)
+puilPageToken
+  = lens _puilPageToken
+      (\ s a -> s{_puilPageToken = a})
+
+-- | Maximum number of posts to fetch.
+puilMaxResults :: Lens' PostUserInfosList' (Maybe Word32)
+puilMaxResults
+  = lens _puilMaxResults
+      (\ s a -> s{_puilMaxResults = a})
+      . mapping _Coerce
+
+instance GoogleRequest PostUserInfosList' where
+        type Rs PostUserInfosList' = PostUserInfosList
+        requestClient PostUserInfosList'{..}
+          = go _puilUserId _puilBlogId
+              (_puilStatus ^. _Default)
+              (Just _puilOrderBy)
+              _puilEndDate
+              _puilStartDate
+              (Just _puilFetchBodies)
+              _puilView
+              _puilLabels
+              _puilPageToken
+              _puilMaxResults
+              (Just AltJSON)
+              bloggerService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy PostUserInfosListResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Blogger/Posts/Delete.hs b/gen/Network/Google/Resource/Blogger/Posts/Delete.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Blogger/Posts/Delete.hs
@@ -0,0 +1,94 @@
+{-# 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.Blogger.Posts.Delete
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Delete a post by ID.
+--
+-- /See:/ <https://developers.google.com/blogger/docs/3.0/getting_started Blogger API Reference> for @blogger.posts.delete@.
+module Network.Google.Resource.Blogger.Posts.Delete
+    (
+    -- * REST Resource
+      PostsDeleteResource
+
+    -- * Creating a Request
+    , postsDelete
+    , PostsDelete
+
+    -- * Request Lenses
+    , pdBlogId
+    , pdPostId
+    ) where
+
+import           Network.Google.Blogger.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @blogger.posts.delete@ method which the
+-- 'PostsDelete' request conforms to.
+type PostsDeleteResource =
+     "blogger" :>
+       "v3" :>
+         "blogs" :>
+           Capture "blogId" Text :>
+             "posts" :>
+               Capture "postId" Text :>
+                 QueryParam "alt" AltJSON :> Delete '[JSON] ()
+
+-- | Delete a post by ID.
+--
+-- /See:/ 'postsDelete' smart constructor.
+data PostsDelete = PostsDelete
+    { _pdBlogId :: !Text
+    , _pdPostId :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'PostsDelete' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pdBlogId'
+--
+-- * 'pdPostId'
+postsDelete
+    :: Text -- ^ 'pdBlogId'
+    -> Text -- ^ 'pdPostId'
+    -> PostsDelete
+postsDelete pPdBlogId_ pPdPostId_ =
+    PostsDelete
+    { _pdBlogId = pPdBlogId_
+    , _pdPostId = pPdPostId_
+    }
+
+-- | The ID of the Blog.
+pdBlogId :: Lens' PostsDelete Text
+pdBlogId = lens _pdBlogId (\ s a -> s{_pdBlogId = a})
+
+-- | The ID of the Post.
+pdPostId :: Lens' PostsDelete Text
+pdPostId = lens _pdPostId (\ s a -> s{_pdPostId = a})
+
+instance GoogleRequest PostsDelete where
+        type Rs PostsDelete = ()
+        requestClient PostsDelete{..}
+          = go _pdBlogId _pdPostId (Just AltJSON)
+              bloggerService
+          where go
+                  = buildClient (Proxy :: Proxy PostsDeleteResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Blogger/Posts/Get.hs b/gen/Network/Google/Resource/Blogger/Posts/Get.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Blogger/Posts/Get.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.Blogger.Posts.Get
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Get a post by ID.
+--
+-- /See:/ <https://developers.google.com/blogger/docs/3.0/getting_started Blogger API Reference> for @blogger.posts.get@.
+module Network.Google.Resource.Blogger.Posts.Get
+    (
+    -- * REST Resource
+      PostsGetResource
+
+    -- * Creating a Request
+    , postsGet
+    , PostsGet
+
+    -- * Request Lenses
+    , pggFetchBody
+    , pggFetchImages
+    , pggBlogId
+    , pggMaxComments
+    , pggView
+    , pggPostId
+    ) where
+
+import           Network.Google.Blogger.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @blogger.posts.get@ method which the
+-- 'PostsGet' request conforms to.
+type PostsGetResource =
+     "blogger" :>
+       "v3" :>
+         "blogs" :>
+           Capture "blogId" Text :>
+             "posts" :>
+               Capture "postId" Text :>
+                 QueryParam "fetchBody" Bool :>
+                   QueryParam "fetchImages" Bool :>
+                     QueryParam "maxComments" (Textual Word32) :>
+                       QueryParam "view" PostsGetView :>
+                         QueryParam "alt" AltJSON :> Get '[JSON] Post'
+
+-- | Get a post by ID.
+--
+-- /See:/ 'postsGet' smart constructor.
+data PostsGet = PostsGet
+    { _pggFetchBody   :: !Bool
+    , _pggFetchImages :: !(Maybe Bool)
+    , _pggBlogId      :: !Text
+    , _pggMaxComments :: !(Maybe (Textual Word32))
+    , _pggView        :: !(Maybe PostsGetView)
+    , _pggPostId      :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'PostsGet' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pggFetchBody'
+--
+-- * 'pggFetchImages'
+--
+-- * 'pggBlogId'
+--
+-- * 'pggMaxComments'
+--
+-- * 'pggView'
+--
+-- * 'pggPostId'
+postsGet
+    :: Text -- ^ 'pggBlogId'
+    -> Text -- ^ 'pggPostId'
+    -> PostsGet
+postsGet pPggBlogId_ pPggPostId_ =
+    PostsGet
+    { _pggFetchBody = True
+    , _pggFetchImages = Nothing
+    , _pggBlogId = pPggBlogId_
+    , _pggMaxComments = Nothing
+    , _pggView = Nothing
+    , _pggPostId = pPggPostId_
+    }
+
+-- | Whether the body content of the post is included (default: true). This
+-- should be set to false when the post bodies are not required, to help
+-- minimize traffic.
+pggFetchBody :: Lens' PostsGet Bool
+pggFetchBody
+  = lens _pggFetchBody (\ s a -> s{_pggFetchBody = a})
+
+-- | Whether image URL metadata for each post is included (default: false).
+pggFetchImages :: Lens' PostsGet (Maybe Bool)
+pggFetchImages
+  = lens _pggFetchImages
+      (\ s a -> s{_pggFetchImages = a})
+
+-- | ID of the blog to fetch the post from.
+pggBlogId :: Lens' PostsGet Text
+pggBlogId
+  = lens _pggBlogId (\ s a -> s{_pggBlogId = a})
+
+-- | Maximum number of comments to pull back on a post.
+pggMaxComments :: Lens' PostsGet (Maybe Word32)
+pggMaxComments
+  = lens _pggMaxComments
+      (\ s a -> s{_pggMaxComments = a})
+      . mapping _Coerce
+
+-- | Access level with which to view the returned result. Note that some
+-- fields require elevated access.
+pggView :: Lens' PostsGet (Maybe PostsGetView)
+pggView = lens _pggView (\ s a -> s{_pggView = a})
+
+-- | The ID of the post
+pggPostId :: Lens' PostsGet Text
+pggPostId
+  = lens _pggPostId (\ s a -> s{_pggPostId = a})
+
+instance GoogleRequest PostsGet where
+        type Rs PostsGet = Post'
+        requestClient PostsGet{..}
+          = go _pggBlogId _pggPostId (Just _pggFetchBody)
+              _pggFetchImages
+              _pggMaxComments
+              _pggView
+              (Just AltJSON)
+              bloggerService
+          where go
+                  = buildClient (Proxy :: Proxy PostsGetResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Blogger/Posts/GetByPath.hs b/gen/Network/Google/Resource/Blogger/Posts/GetByPath.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Blogger/Posts/GetByPath.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.Blogger.Posts.GetByPath
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Retrieve a Post by Path.
+--
+-- /See:/ <https://developers.google.com/blogger/docs/3.0/getting_started Blogger API Reference> for @blogger.posts.getByPath@.
+module Network.Google.Resource.Blogger.Posts.GetByPath
+    (
+    -- * REST Resource
+      PostsGetByPathResource
+
+    -- * Creating a Request
+    , postsGetByPath
+    , PostsGetByPath
+
+    -- * Request Lenses
+    , pgbpPath
+    , pgbpBlogId
+    , pgbpMaxComments
+    , pgbpView
+    ) where
+
+import           Network.Google.Blogger.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @blogger.posts.getByPath@ method which the
+-- 'PostsGetByPath' request conforms to.
+type PostsGetByPathResource =
+     "blogger" :>
+       "v3" :>
+         "blogs" :>
+           Capture "blogId" Text :>
+             "posts" :>
+               "bypath" :>
+                 QueryParam "path" Text :>
+                   QueryParam "maxComments" (Textual Word32) :>
+                     QueryParam "view" PostsGetByPathView :>
+                       QueryParam "alt" AltJSON :> Get '[JSON] Post'
+
+-- | Retrieve a Post by Path.
+--
+-- /See:/ 'postsGetByPath' smart constructor.
+data PostsGetByPath = PostsGetByPath
+    { _pgbpPath        :: !Text
+    , _pgbpBlogId      :: !Text
+    , _pgbpMaxComments :: !(Maybe (Textual Word32))
+    , _pgbpView        :: !(Maybe PostsGetByPathView)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'PostsGetByPath' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pgbpPath'
+--
+-- * 'pgbpBlogId'
+--
+-- * 'pgbpMaxComments'
+--
+-- * 'pgbpView'
+postsGetByPath
+    :: Text -- ^ 'pgbpPath'
+    -> Text -- ^ 'pgbpBlogId'
+    -> PostsGetByPath
+postsGetByPath pPgbpPath_ pPgbpBlogId_ =
+    PostsGetByPath
+    { _pgbpPath = pPgbpPath_
+    , _pgbpBlogId = pPgbpBlogId_
+    , _pgbpMaxComments = Nothing
+    , _pgbpView = Nothing
+    }
+
+-- | Path of the Post to retrieve.
+pgbpPath :: Lens' PostsGetByPath Text
+pgbpPath = lens _pgbpPath (\ s a -> s{_pgbpPath = a})
+
+-- | ID of the blog to fetch the post from.
+pgbpBlogId :: Lens' PostsGetByPath Text
+pgbpBlogId
+  = lens _pgbpBlogId (\ s a -> s{_pgbpBlogId = a})
+
+-- | Maximum number of comments to pull back on a post.
+pgbpMaxComments :: Lens' PostsGetByPath (Maybe Word32)
+pgbpMaxComments
+  = lens _pgbpMaxComments
+      (\ s a -> s{_pgbpMaxComments = a})
+      . mapping _Coerce
+
+-- | Access level with which to view the returned result. Note that some
+-- fields require elevated access.
+pgbpView :: Lens' PostsGetByPath (Maybe PostsGetByPathView)
+pgbpView = lens _pgbpView (\ s a -> s{_pgbpView = a})
+
+instance GoogleRequest PostsGetByPath where
+        type Rs PostsGetByPath = Post'
+        requestClient PostsGetByPath{..}
+          = go _pgbpBlogId (Just _pgbpPath) _pgbpMaxComments
+              _pgbpView
+              (Just AltJSON)
+              bloggerService
+          where go
+                  = buildClient (Proxy :: Proxy PostsGetByPathResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Blogger/Posts/Insert.hs b/gen/Network/Google/Resource/Blogger/Posts/Insert.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Blogger/Posts/Insert.hs
@@ -0,0 +1,135 @@
+{-# 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.Blogger.Posts.Insert
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Add a post.
+--
+-- /See:/ <https://developers.google.com/blogger/docs/3.0/getting_started Blogger API Reference> for @blogger.posts.insert@.
+module Network.Google.Resource.Blogger.Posts.Insert
+    (
+    -- * REST Resource
+      PostsInsertResource
+
+    -- * Creating a Request
+    , postsInsert
+    , PostsInsert
+
+    -- * Request Lenses
+    , posFetchBody
+    , posIsDraft
+    , posFetchImages
+    , posBlogId
+    , posPayload
+    ) where
+
+import           Network.Google.Blogger.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @blogger.posts.insert@ method which the
+-- 'PostsInsert' request conforms to.
+type PostsInsertResource =
+     "blogger" :>
+       "v3" :>
+         "blogs" :>
+           Capture "blogId" Text :>
+             "posts" :>
+               QueryParam "fetchBody" Bool :>
+                 QueryParam "isDraft" Bool :>
+                   QueryParam "fetchImages" Bool :>
+                     QueryParam "alt" AltJSON :>
+                       ReqBody '[JSON] Post' :> Post '[JSON] Post'
+
+-- | Add a post.
+--
+-- /See:/ 'postsInsert' smart constructor.
+data PostsInsert = PostsInsert
+    { _posFetchBody   :: !Bool
+    , _posIsDraft     :: !(Maybe Bool)
+    , _posFetchImages :: !(Maybe Bool)
+    , _posBlogId      :: !Text
+    , _posPayload     :: !Post'
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'PostsInsert' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'posFetchBody'
+--
+-- * 'posIsDraft'
+--
+-- * 'posFetchImages'
+--
+-- * 'posBlogId'
+--
+-- * 'posPayload'
+postsInsert
+    :: Text -- ^ 'posBlogId'
+    -> Post' -- ^ 'posPayload'
+    -> PostsInsert
+postsInsert pPosBlogId_ pPosPayload_ =
+    PostsInsert
+    { _posFetchBody = True
+    , _posIsDraft = Nothing
+    , _posFetchImages = Nothing
+    , _posBlogId = pPosBlogId_
+    , _posPayload = pPosPayload_
+    }
+
+-- | Whether the body content of the post is included with the result
+-- (default: true).
+posFetchBody :: Lens' PostsInsert Bool
+posFetchBody
+  = lens _posFetchBody (\ s a -> s{_posFetchBody = a})
+
+-- | Whether to create the post as a draft (default: false).
+posIsDraft :: Lens' PostsInsert (Maybe Bool)
+posIsDraft
+  = lens _posIsDraft (\ s a -> s{_posIsDraft = a})
+
+-- | Whether image URL metadata for each post is included in the returned
+-- result (default: false).
+posFetchImages :: Lens' PostsInsert (Maybe Bool)
+posFetchImages
+  = lens _posFetchImages
+      (\ s a -> s{_posFetchImages = a})
+
+-- | ID of the blog to add the post to.
+posBlogId :: Lens' PostsInsert Text
+posBlogId
+  = lens _posBlogId (\ s a -> s{_posBlogId = a})
+
+-- | Multipart request metadata.
+posPayload :: Lens' PostsInsert Post'
+posPayload
+  = lens _posPayload (\ s a -> s{_posPayload = a})
+
+instance GoogleRequest PostsInsert where
+        type Rs PostsInsert = Post'
+        requestClient PostsInsert{..}
+          = go _posBlogId (Just _posFetchBody) _posIsDraft
+              _posFetchImages
+              (Just AltJSON)
+              _posPayload
+              bloggerService
+          where go
+                  = buildClient (Proxy :: Proxy PostsInsertResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Blogger/Posts/List.hs b/gen/Network/Google/Resource/Blogger/Posts/List.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Blogger/Posts/List.hs
@@ -0,0 +1,215 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.Blogger.Posts.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 posts, possibly filtered.
+--
+-- /See:/ <https://developers.google.com/blogger/docs/3.0/getting_started Blogger API Reference> for @blogger.posts.list@.
+module Network.Google.Resource.Blogger.Posts.List
+    (
+    -- * REST Resource
+      PostsListResource
+
+    -- * Creating a Request
+    , postsList
+    , PostsList
+
+    -- * Request Lenses
+    , pllStatus
+    , pllOrderBy
+    , pllFetchImages
+    , pllEndDate
+    , pllBlogId
+    , pllStartDate
+    , pllFetchBodies
+    , pllView
+    , pllLabels
+    , pllPageToken
+    , pllMaxResults
+    ) where
+
+import           Network.Google.Blogger.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @blogger.posts.list@ method which the
+-- 'PostsList' request conforms to.
+type PostsListResource =
+     "blogger" :>
+       "v3" :>
+         "blogs" :>
+           Capture "blogId" Text :>
+             "posts" :>
+               QueryParams "status" PostsListStatus :>
+                 QueryParam "orderBy" PostsListOrderBy :>
+                   QueryParam "fetchImages" Bool :>
+                     QueryParam "endDate" DateTime' :>
+                       QueryParam "startDate" DateTime' :>
+                         QueryParam "fetchBodies" Bool :>
+                           QueryParam "view" PostsListView :>
+                             QueryParam "labels" Text :>
+                               QueryParam "pageToken" Text :>
+                                 QueryParam "maxResults" (Textual Word32) :>
+                                   QueryParam "alt" AltJSON :>
+                                     Get '[JSON] PostList
+
+-- | Retrieves a list of posts, possibly filtered.
+--
+-- /See:/ 'postsList' smart constructor.
+data PostsList = PostsList
+    { _pllStatus      :: !(Maybe [PostsListStatus])
+    , _pllOrderBy     :: !PostsListOrderBy
+    , _pllFetchImages :: !(Maybe Bool)
+    , _pllEndDate     :: !(Maybe DateTime')
+    , _pllBlogId      :: !Text
+    , _pllStartDate   :: !(Maybe DateTime')
+    , _pllFetchBodies :: !Bool
+    , _pllView        :: !(Maybe PostsListView)
+    , _pllLabels      :: !(Maybe Text)
+    , _pllPageToken   :: !(Maybe Text)
+    , _pllMaxResults  :: !(Maybe (Textual Word32))
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'PostsList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pllStatus'
+--
+-- * 'pllOrderBy'
+--
+-- * 'pllFetchImages'
+--
+-- * 'pllEndDate'
+--
+-- * 'pllBlogId'
+--
+-- * 'pllStartDate'
+--
+-- * 'pllFetchBodies'
+--
+-- * 'pllView'
+--
+-- * 'pllLabels'
+--
+-- * 'pllPageToken'
+--
+-- * 'pllMaxResults'
+postsList
+    :: Text -- ^ 'pllBlogId'
+    -> PostsList
+postsList pPllBlogId_ =
+    PostsList
+    { _pllStatus = Nothing
+    , _pllOrderBy = Published
+    , _pllFetchImages = Nothing
+    , _pllEndDate = Nothing
+    , _pllBlogId = pPllBlogId_
+    , _pllStartDate = Nothing
+    , _pllFetchBodies = True
+    , _pllView = Nothing
+    , _pllLabels = Nothing
+    , _pllPageToken = Nothing
+    , _pllMaxResults = Nothing
+    }
+
+-- | Statuses to include in the results.
+pllStatus :: Lens' PostsList [PostsListStatus]
+pllStatus
+  = lens _pllStatus (\ s a -> s{_pllStatus = a}) .
+      _Default
+      . _Coerce
+
+-- | Sort search results
+pllOrderBy :: Lens' PostsList PostsListOrderBy
+pllOrderBy
+  = lens _pllOrderBy (\ s a -> s{_pllOrderBy = a})
+
+-- | Whether image URL metadata for each post is included.
+pllFetchImages :: Lens' PostsList (Maybe Bool)
+pllFetchImages
+  = lens _pllFetchImages
+      (\ s a -> s{_pllFetchImages = a})
+
+-- | Latest post date to fetch, a date-time with RFC 3339 formatting.
+pllEndDate :: Lens' PostsList (Maybe UTCTime)
+pllEndDate
+  = lens _pllEndDate (\ s a -> s{_pllEndDate = a}) .
+      mapping _DateTime
+
+-- | ID of the blog to fetch posts from.
+pllBlogId :: Lens' PostsList Text
+pllBlogId
+  = lens _pllBlogId (\ s a -> s{_pllBlogId = a})
+
+-- | Earliest post date to fetch, a date-time with RFC 3339 formatting.
+pllStartDate :: Lens' PostsList (Maybe UTCTime)
+pllStartDate
+  = lens _pllStartDate (\ s a -> s{_pllStartDate = a})
+      . mapping _DateTime
+
+-- | Whether the body content of posts is included (default: true). This
+-- should be set to false when the post bodies are not required, to help
+-- minimize traffic.
+pllFetchBodies :: Lens' PostsList Bool
+pllFetchBodies
+  = lens _pllFetchBodies
+      (\ s a -> s{_pllFetchBodies = a})
+
+-- | Access level with which to view the returned result. Note that some
+-- fields require escalated access.
+pllView :: Lens' PostsList (Maybe PostsListView)
+pllView = lens _pllView (\ s a -> s{_pllView = a})
+
+-- | Comma-separated list of labels to search for.
+pllLabels :: Lens' PostsList (Maybe Text)
+pllLabels
+  = lens _pllLabels (\ s a -> s{_pllLabels = a})
+
+-- | Continuation token if the request is paged.
+pllPageToken :: Lens' PostsList (Maybe Text)
+pllPageToken
+  = lens _pllPageToken (\ s a -> s{_pllPageToken = a})
+
+-- | Maximum number of posts to fetch.
+pllMaxResults :: Lens' PostsList (Maybe Word32)
+pllMaxResults
+  = lens _pllMaxResults
+      (\ s a -> s{_pllMaxResults = a})
+      . mapping _Coerce
+
+instance GoogleRequest PostsList where
+        type Rs PostsList = PostList
+        requestClient PostsList{..}
+          = go _pllBlogId (_pllStatus ^. _Default)
+              (Just _pllOrderBy)
+              _pllFetchImages
+              _pllEndDate
+              _pllStartDate
+              (Just _pllFetchBodies)
+              _pllView
+              _pllLabels
+              _pllPageToken
+              _pllMaxResults
+              (Just AltJSON)
+              bloggerService
+          where go
+                  = buildClient (Proxy :: Proxy PostsListResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Blogger/Posts/Patch.hs b/gen/Network/Google/Resource/Blogger/Posts/Patch.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Blogger/Posts/Patch.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.Blogger.Posts.Patch
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Update a post. This method supports patch semantics.
+--
+-- /See:/ <https://developers.google.com/blogger/docs/3.0/getting_started Blogger API Reference> for @blogger.posts.patch@.
+module Network.Google.Resource.Blogger.Posts.Patch
+    (
+    -- * REST Resource
+      PostsPatchResource
+
+    -- * Creating a Request
+    , postsPatch
+    , PostsPatch
+
+    -- * Request Lenses
+    , posoFetchBody
+    , posoFetchImages
+    , posoBlogId
+    , posoPayload
+    , posoMaxComments
+    , posoRevert
+    , posoPostId
+    , posoPublish
+    ) where
+
+import           Network.Google.Blogger.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @blogger.posts.patch@ method which the
+-- 'PostsPatch' request conforms to.
+type PostsPatchResource =
+     "blogger" :>
+       "v3" :>
+         "blogs" :>
+           Capture "blogId" Text :>
+             "posts" :>
+               Capture "postId" Text :>
+                 QueryParam "fetchBody" Bool :>
+                   QueryParam "fetchImages" Bool :>
+                     QueryParam "maxComments" (Textual Word32) :>
+                       QueryParam "revert" Bool :>
+                         QueryParam "publish" Bool :>
+                           QueryParam "alt" AltJSON :>
+                             ReqBody '[JSON] Post' :> Patch '[JSON] Post'
+
+-- | Update a post. This method supports patch semantics.
+--
+-- /See:/ 'postsPatch' smart constructor.
+data PostsPatch = PostsPatch
+    { _posoFetchBody   :: !Bool
+    , _posoFetchImages :: !(Maybe Bool)
+    , _posoBlogId      :: !Text
+    , _posoPayload     :: !Post'
+    , _posoMaxComments :: !(Maybe (Textual Word32))
+    , _posoRevert      :: !(Maybe Bool)
+    , _posoPostId      :: !Text
+    , _posoPublish     :: !(Maybe Bool)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'PostsPatch' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'posoFetchBody'
+--
+-- * 'posoFetchImages'
+--
+-- * 'posoBlogId'
+--
+-- * 'posoPayload'
+--
+-- * 'posoMaxComments'
+--
+-- * 'posoRevert'
+--
+-- * 'posoPostId'
+--
+-- * 'posoPublish'
+postsPatch
+    :: Text -- ^ 'posoBlogId'
+    -> Post' -- ^ 'posoPayload'
+    -> Text -- ^ 'posoPostId'
+    -> PostsPatch
+postsPatch pPosoBlogId_ pPosoPayload_ pPosoPostId_ =
+    PostsPatch
+    { _posoFetchBody = True
+    , _posoFetchImages = Nothing
+    , _posoBlogId = pPosoBlogId_
+    , _posoPayload = pPosoPayload_
+    , _posoMaxComments = Nothing
+    , _posoRevert = Nothing
+    , _posoPostId = pPosoPostId_
+    , _posoPublish = Nothing
+    }
+
+-- | Whether the body content of the post is included with the result
+-- (default: true).
+posoFetchBody :: Lens' PostsPatch Bool
+posoFetchBody
+  = lens _posoFetchBody
+      (\ s a -> s{_posoFetchBody = a})
+
+-- | Whether image URL metadata for each post is included in the returned
+-- result (default: false).
+posoFetchImages :: Lens' PostsPatch (Maybe Bool)
+posoFetchImages
+  = lens _posoFetchImages
+      (\ s a -> s{_posoFetchImages = a})
+
+-- | The ID of the Blog.
+posoBlogId :: Lens' PostsPatch Text
+posoBlogId
+  = lens _posoBlogId (\ s a -> s{_posoBlogId = a})
+
+-- | Multipart request metadata.
+posoPayload :: Lens' PostsPatch Post'
+posoPayload
+  = lens _posoPayload (\ s a -> s{_posoPayload = a})
+
+-- | Maximum number of comments to retrieve with the returned post.
+posoMaxComments :: Lens' PostsPatch (Maybe Word32)
+posoMaxComments
+  = lens _posoMaxComments
+      (\ s a -> s{_posoMaxComments = a})
+      . mapping _Coerce
+
+-- | Whether a revert action should be performed when the post is updated
+-- (default: false).
+posoRevert :: Lens' PostsPatch (Maybe Bool)
+posoRevert
+  = lens _posoRevert (\ s a -> s{_posoRevert = a})
+
+-- | The ID of the Post.
+posoPostId :: Lens' PostsPatch Text
+posoPostId
+  = lens _posoPostId (\ s a -> s{_posoPostId = a})
+
+-- | Whether a publish action should be performed when the post is updated
+-- (default: false).
+posoPublish :: Lens' PostsPatch (Maybe Bool)
+posoPublish
+  = lens _posoPublish (\ s a -> s{_posoPublish = a})
+
+instance GoogleRequest PostsPatch where
+        type Rs PostsPatch = Post'
+        requestClient PostsPatch{..}
+          = go _posoBlogId _posoPostId (Just _posoFetchBody)
+              _posoFetchImages
+              _posoMaxComments
+              _posoRevert
+              _posoPublish
+              (Just AltJSON)
+              _posoPayload
+              bloggerService
+          where go
+                  = buildClient (Proxy :: Proxy PostsPatchResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Blogger/Posts/Publish.hs b/gen/Network/Google/Resource/Blogger/Posts/Publish.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Blogger/Posts/Publish.hs
@@ -0,0 +1,116 @@
+{-# 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.Blogger.Posts.Publish
+-- 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)
+--
+-- Publishes a draft post, optionally at the specific time of the given
+-- publishDate parameter.
+--
+-- /See:/ <https://developers.google.com/blogger/docs/3.0/getting_started Blogger API Reference> for @blogger.posts.publish@.
+module Network.Google.Resource.Blogger.Posts.Publish
+    (
+    -- * REST Resource
+      PostsPublishResource
+
+    -- * Creating a Request
+    , postsPublish
+    , PostsPublish
+
+    -- * Request Lenses
+    , pppPublishDate
+    , pppBlogId
+    , pppPostId
+    ) where
+
+import           Network.Google.Blogger.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @blogger.posts.publish@ method which the
+-- 'PostsPublish' request conforms to.
+type PostsPublishResource =
+     "blogger" :>
+       "v3" :>
+         "blogs" :>
+           Capture "blogId" Text :>
+             "posts" :>
+               Capture "postId" Text :>
+                 "publish" :>
+                   QueryParam "publishDate" DateTime' :>
+                     QueryParam "alt" AltJSON :> Post '[JSON] Post'
+
+-- | Publishes a draft post, optionally at the specific time of the given
+-- publishDate parameter.
+--
+-- /See:/ 'postsPublish' smart constructor.
+data PostsPublish = PostsPublish
+    { _pppPublishDate :: !(Maybe DateTime')
+    , _pppBlogId      :: !Text
+    , _pppPostId      :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'PostsPublish' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pppPublishDate'
+--
+-- * 'pppBlogId'
+--
+-- * 'pppPostId'
+postsPublish
+    :: Text -- ^ 'pppBlogId'
+    -> Text -- ^ 'pppPostId'
+    -> PostsPublish
+postsPublish pPppBlogId_ pPppPostId_ =
+    PostsPublish
+    { _pppPublishDate = Nothing
+    , _pppBlogId = pPppBlogId_
+    , _pppPostId = pPppPostId_
+    }
+
+-- | Optional date and time to schedule the publishing of the Blog. If no
+-- publishDate parameter is given, the post is either published at the a
+-- previously saved schedule date (if present), or the current time. If a
+-- future date is given, the post will be scheduled to be published.
+pppPublishDate :: Lens' PostsPublish (Maybe UTCTime)
+pppPublishDate
+  = lens _pppPublishDate
+      (\ s a -> s{_pppPublishDate = a})
+      . mapping _DateTime
+
+-- | The ID of the Blog.
+pppBlogId :: Lens' PostsPublish Text
+pppBlogId
+  = lens _pppBlogId (\ s a -> s{_pppBlogId = a})
+
+-- | The ID of the Post.
+pppPostId :: Lens' PostsPublish Text
+pppPostId
+  = lens _pppPostId (\ s a -> s{_pppPostId = a})
+
+instance GoogleRequest PostsPublish where
+        type Rs PostsPublish = Post'
+        requestClient PostsPublish{..}
+          = go _pppBlogId _pppPostId _pppPublishDate
+              (Just AltJSON)
+              bloggerService
+          where go
+                  = buildClient (Proxy :: Proxy PostsPublishResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Blogger/Posts/Revert.hs b/gen/Network/Google/Resource/Blogger/Posts/Revert.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Blogger/Posts/Revert.hs
@@ -0,0 +1,95 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.Blogger.Posts.Revert
+-- 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)
+--
+-- Revert a published or scheduled post to draft state.
+--
+-- /See:/ <https://developers.google.com/blogger/docs/3.0/getting_started Blogger API Reference> for @blogger.posts.revert@.
+module Network.Google.Resource.Blogger.Posts.Revert
+    (
+    -- * REST Resource
+      PostsRevertResource
+
+    -- * Creating a Request
+    , postsRevert
+    , PostsRevert
+
+    -- * Request Lenses
+    , prBlogId
+    , prPostId
+    ) where
+
+import           Network.Google.Blogger.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @blogger.posts.revert@ method which the
+-- 'PostsRevert' request conforms to.
+type PostsRevertResource =
+     "blogger" :>
+       "v3" :>
+         "blogs" :>
+           Capture "blogId" Text :>
+             "posts" :>
+               Capture "postId" Text :>
+                 "revert" :>
+                   QueryParam "alt" AltJSON :> Post '[JSON] Post'
+
+-- | Revert a published or scheduled post to draft state.
+--
+-- /See:/ 'postsRevert' smart constructor.
+data PostsRevert = PostsRevert
+    { _prBlogId :: !Text
+    , _prPostId :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'PostsRevert' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'prBlogId'
+--
+-- * 'prPostId'
+postsRevert
+    :: Text -- ^ 'prBlogId'
+    -> Text -- ^ 'prPostId'
+    -> PostsRevert
+postsRevert pPrBlogId_ pPrPostId_ =
+    PostsRevert
+    { _prBlogId = pPrBlogId_
+    , _prPostId = pPrPostId_
+    }
+
+-- | The ID of the Blog.
+prBlogId :: Lens' PostsRevert Text
+prBlogId = lens _prBlogId (\ s a -> s{_prBlogId = a})
+
+-- | The ID of the Post.
+prPostId :: Lens' PostsRevert Text
+prPostId = lens _prPostId (\ s a -> s{_prPostId = a})
+
+instance GoogleRequest PostsRevert where
+        type Rs PostsRevert = Post'
+        requestClient PostsRevert{..}
+          = go _prBlogId _prPostId (Just AltJSON)
+              bloggerService
+          where go
+                  = buildClient (Proxy :: Proxy PostsRevertResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Blogger/Posts/Search.hs b/gen/Network/Google/Resource/Blogger/Posts/Search.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Blogger/Posts/Search.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.Blogger.Posts.Search
+-- 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)
+--
+-- Search for a post.
+--
+-- /See:/ <https://developers.google.com/blogger/docs/3.0/getting_started Blogger API Reference> for @blogger.posts.search@.
+module Network.Google.Resource.Blogger.Posts.Search
+    (
+    -- * REST Resource
+      PostsSearchResource
+
+    -- * Creating a Request
+    , postsSearch
+    , PostsSearch
+
+    -- * Request Lenses
+    , psOrderBy
+    , psBlogId
+    , psQ
+    , psFetchBodies
+    ) where
+
+import           Network.Google.Blogger.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @blogger.posts.search@ method which the
+-- 'PostsSearch' request conforms to.
+type PostsSearchResource =
+     "blogger" :>
+       "v3" :>
+         "blogs" :>
+           Capture "blogId" Text :>
+             "posts" :>
+               "search" :>
+                 QueryParam "q" Text :>
+                   QueryParam "orderBy" PostsSearchOrderBy :>
+                     QueryParam "fetchBodies" Bool :>
+                       QueryParam "alt" AltJSON :> Get '[JSON] PostList
+
+-- | Search for a post.
+--
+-- /See:/ 'postsSearch' smart constructor.
+data PostsSearch = PostsSearch
+    { _psOrderBy     :: !PostsSearchOrderBy
+    , _psBlogId      :: !Text
+    , _psQ           :: !Text
+    , _psFetchBodies :: !Bool
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'PostsSearch' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'psOrderBy'
+--
+-- * 'psBlogId'
+--
+-- * 'psQ'
+--
+-- * 'psFetchBodies'
+postsSearch
+    :: Text -- ^ 'psBlogId'
+    -> Text -- ^ 'psQ'
+    -> PostsSearch
+postsSearch pPsBlogId_ pPsQ_ =
+    PostsSearch
+    { _psOrderBy = PSOBPublished
+    , _psBlogId = pPsBlogId_
+    , _psQ = pPsQ_
+    , _psFetchBodies = True
+    }
+
+-- | Sort search results
+psOrderBy :: Lens' PostsSearch PostsSearchOrderBy
+psOrderBy
+  = lens _psOrderBy (\ s a -> s{_psOrderBy = a})
+
+-- | ID of the blog to fetch the post from.
+psBlogId :: Lens' PostsSearch Text
+psBlogId = lens _psBlogId (\ s a -> s{_psBlogId = a})
+
+-- | Query terms to search this blog for matching posts.
+psQ :: Lens' PostsSearch Text
+psQ = lens _psQ (\ s a -> s{_psQ = a})
+
+-- | Whether the body content of posts is included (default: true). This
+-- should be set to false when the post bodies are not required, to help
+-- minimize traffic.
+psFetchBodies :: Lens' PostsSearch Bool
+psFetchBodies
+  = lens _psFetchBodies
+      (\ s a -> s{_psFetchBodies = a})
+
+instance GoogleRequest PostsSearch where
+        type Rs PostsSearch = PostList
+        requestClient PostsSearch{..}
+          = go _psBlogId (Just _psQ) (Just _psOrderBy)
+              (Just _psFetchBodies)
+              (Just AltJSON)
+              bloggerService
+          where go
+                  = buildClient (Proxy :: Proxy PostsSearchResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Blogger/Posts/Update.hs b/gen/Network/Google/Resource/Blogger/Posts/Update.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Blogger/Posts/Update.hs
@@ -0,0 +1,173 @@
+{-# 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.Blogger.Posts.Update
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Update a post.
+--
+-- /See:/ <https://developers.google.com/blogger/docs/3.0/getting_started Blogger API Reference> for @blogger.posts.update@.
+module Network.Google.Resource.Blogger.Posts.Update
+    (
+    -- * REST Resource
+      PostsUpdateResource
+
+    -- * Creating a Request
+    , postsUpdate
+    , PostsUpdate
+
+    -- * Request Lenses
+    , puFetchBody
+    , puFetchImages
+    , puBlogId
+    , puPayload
+    , puMaxComments
+    , puRevert
+    , puPostId
+    , puPublish
+    ) where
+
+import           Network.Google.Blogger.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @blogger.posts.update@ method which the
+-- 'PostsUpdate' request conforms to.
+type PostsUpdateResource =
+     "blogger" :>
+       "v3" :>
+         "blogs" :>
+           Capture "blogId" Text :>
+             "posts" :>
+               Capture "postId" Text :>
+                 QueryParam "fetchBody" Bool :>
+                   QueryParam "fetchImages" Bool :>
+                     QueryParam "maxComments" (Textual Word32) :>
+                       QueryParam "revert" Bool :>
+                         QueryParam "publish" Bool :>
+                           QueryParam "alt" AltJSON :>
+                             ReqBody '[JSON] Post' :> Put '[JSON] Post'
+
+-- | Update a post.
+--
+-- /See:/ 'postsUpdate' smart constructor.
+data PostsUpdate = PostsUpdate
+    { _puFetchBody   :: !Bool
+    , _puFetchImages :: !(Maybe Bool)
+    , _puBlogId      :: !Text
+    , _puPayload     :: !Post'
+    , _puMaxComments :: !(Maybe (Textual Word32))
+    , _puRevert      :: !(Maybe Bool)
+    , _puPostId      :: !Text
+    , _puPublish     :: !(Maybe Bool)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'PostsUpdate' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'puFetchBody'
+--
+-- * 'puFetchImages'
+--
+-- * 'puBlogId'
+--
+-- * 'puPayload'
+--
+-- * 'puMaxComments'
+--
+-- * 'puRevert'
+--
+-- * 'puPostId'
+--
+-- * 'puPublish'
+postsUpdate
+    :: Text -- ^ 'puBlogId'
+    -> Post' -- ^ 'puPayload'
+    -> Text -- ^ 'puPostId'
+    -> PostsUpdate
+postsUpdate pPuBlogId_ pPuPayload_ pPuPostId_ =
+    PostsUpdate
+    { _puFetchBody = True
+    , _puFetchImages = Nothing
+    , _puBlogId = pPuBlogId_
+    , _puPayload = pPuPayload_
+    , _puMaxComments = Nothing
+    , _puRevert = Nothing
+    , _puPostId = pPuPostId_
+    , _puPublish = Nothing
+    }
+
+-- | Whether the body content of the post is included with the result
+-- (default: true).
+puFetchBody :: Lens' PostsUpdate Bool
+puFetchBody
+  = lens _puFetchBody (\ s a -> s{_puFetchBody = a})
+
+-- | Whether image URL metadata for each post is included in the returned
+-- result (default: false).
+puFetchImages :: Lens' PostsUpdate (Maybe Bool)
+puFetchImages
+  = lens _puFetchImages
+      (\ s a -> s{_puFetchImages = a})
+
+-- | The ID of the Blog.
+puBlogId :: Lens' PostsUpdate Text
+puBlogId = lens _puBlogId (\ s a -> s{_puBlogId = a})
+
+-- | Multipart request metadata.
+puPayload :: Lens' PostsUpdate Post'
+puPayload
+  = lens _puPayload (\ s a -> s{_puPayload = a})
+
+-- | Maximum number of comments to retrieve with the returned post.
+puMaxComments :: Lens' PostsUpdate (Maybe Word32)
+puMaxComments
+  = lens _puMaxComments
+      (\ s a -> s{_puMaxComments = a})
+      . mapping _Coerce
+
+-- | Whether a revert action should be performed when the post is updated
+-- (default: false).
+puRevert :: Lens' PostsUpdate (Maybe Bool)
+puRevert = lens _puRevert (\ s a -> s{_puRevert = a})
+
+-- | The ID of the Post.
+puPostId :: Lens' PostsUpdate Text
+puPostId = lens _puPostId (\ s a -> s{_puPostId = a})
+
+-- | Whether a publish action should be performed when the post is updated
+-- (default: false).
+puPublish :: Lens' PostsUpdate (Maybe Bool)
+puPublish
+  = lens _puPublish (\ s a -> s{_puPublish = a})
+
+instance GoogleRequest PostsUpdate where
+        type Rs PostsUpdate = Post'
+        requestClient PostsUpdate{..}
+          = go _puBlogId _puPostId (Just _puFetchBody)
+              _puFetchImages
+              _puMaxComments
+              _puRevert
+              _puPublish
+              (Just AltJSON)
+              _puPayload
+              bloggerService
+          where go
+                  = buildClient (Proxy :: Proxy PostsUpdateResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Blogger/Users/Get.hs b/gen/Network/Google/Resource/Blogger/Users/Get.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Blogger/Users/Get.hs
@@ -0,0 +1,81 @@
+{-# 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.Blogger.Users.Get
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Gets one user by ID.
+--
+-- /See:/ <https://developers.google.com/blogger/docs/3.0/getting_started Blogger API Reference> for @blogger.users.get@.
+module Network.Google.Resource.Blogger.Users.Get
+    (
+    -- * REST Resource
+      UsersGetResource
+
+    -- * Creating a Request
+    , usersGet
+    , UsersGet
+
+    -- * Request Lenses
+    , ugUserId
+    ) where
+
+import           Network.Google.Blogger.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @blogger.users.get@ method which the
+-- 'UsersGet' request conforms to.
+type UsersGetResource =
+     "blogger" :>
+       "v3" :>
+         "users" :>
+           Capture "userId" Text :>
+             QueryParam "alt" AltJSON :> Get '[JSON] User
+
+-- | Gets one user by ID.
+--
+-- /See:/ 'usersGet' smart constructor.
+newtype UsersGet = UsersGet
+    { _ugUserId :: Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'UsersGet' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ugUserId'
+usersGet
+    :: Text -- ^ 'ugUserId'
+    -> UsersGet
+usersGet pUgUserId_ =
+    UsersGet
+    { _ugUserId = pUgUserId_
+    }
+
+-- | The ID of the user to get.
+ugUserId :: Lens' UsersGet Text
+ugUserId = lens _ugUserId (\ s a -> s{_ugUserId = a})
+
+instance GoogleRequest UsersGet where
+        type Rs UsersGet = User
+        requestClient UsersGet{..}
+          = go _ugUserId (Just AltJSON) bloggerService
+          where go
+                  = buildClient (Proxy :: Proxy UsersGetResource)
+                      mempty
diff --git a/gogol-blogger.cabal b/gogol-blogger.cabal
new file mode 100644
--- /dev/null
+++ b/gogol-blogger.cabal
@@ -0,0 +1,82 @@
+name:                  gogol-blogger
+version:               0.0.1
+synopsis:              Google Blogger 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:
+    API for access to the data within Blogger.
+    .
+    /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 @v3@
+    of the API.
+    .
+    Labels:
+    .
+    * Limited Availability
+
+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.Blogger
+        , Network.Google.Blogger.Types
+        , Network.Google.Resource.Blogger.BlogUserInfos.Get
+        , Network.Google.Resource.Blogger.Blogs.Get
+        , Network.Google.Resource.Blogger.Blogs.GetByURL
+        , Network.Google.Resource.Blogger.Blogs.ListByUser
+        , Network.Google.Resource.Blogger.Comments.Approve
+        , Network.Google.Resource.Blogger.Comments.Delete
+        , Network.Google.Resource.Blogger.Comments.Get
+        , Network.Google.Resource.Blogger.Comments.List
+        , Network.Google.Resource.Blogger.Comments.ListByBlog
+        , Network.Google.Resource.Blogger.Comments.MarkAsSpam
+        , Network.Google.Resource.Blogger.Comments.RemoveContent
+        , Network.Google.Resource.Blogger.PageViews.Get
+        , Network.Google.Resource.Blogger.Pages.Delete
+        , Network.Google.Resource.Blogger.Pages.Get
+        , Network.Google.Resource.Blogger.Pages.Insert
+        , Network.Google.Resource.Blogger.Pages.List
+        , Network.Google.Resource.Blogger.Pages.Patch
+        , Network.Google.Resource.Blogger.Pages.Publish
+        , Network.Google.Resource.Blogger.Pages.Revert
+        , Network.Google.Resource.Blogger.Pages.Update
+        , Network.Google.Resource.Blogger.PostUserInfos.Get
+        , Network.Google.Resource.Blogger.PostUserInfos.List
+        , Network.Google.Resource.Blogger.Posts.Delete
+        , Network.Google.Resource.Blogger.Posts.Get
+        , Network.Google.Resource.Blogger.Posts.GetByPath
+        , Network.Google.Resource.Blogger.Posts.Insert
+        , Network.Google.Resource.Blogger.Posts.List
+        , Network.Google.Resource.Blogger.Posts.Patch
+        , Network.Google.Resource.Blogger.Posts.Publish
+        , Network.Google.Resource.Blogger.Posts.Revert
+        , Network.Google.Resource.Blogger.Posts.Search
+        , Network.Google.Resource.Blogger.Posts.Update
+        , Network.Google.Resource.Blogger.Users.Get
+
+    other-modules:
+          Network.Google.Blogger.Types.Product
+        , Network.Google.Blogger.Types.Sum
+
+    build-depends:
+          gogol-core == 0.0.1.*
+        , base       >= 4.7 && < 5
