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-gmail
+
+* [Version](#version)
+* [Description](#description)
+* [Contribute](#contribute)
+* [Licence](#licence)
+
+
+## Version
+
+`0.0.1`
+
+
+## Description
+
+A client library for the Google Gmail.
+
+
+## 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-gmail` 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/Gmail.hs b/gen/Network/Google/Gmail.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Gmail.hs
@@ -0,0 +1,387 @@
+{-# LANGUAGE DataKinds         #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# LANGUAGE TypeOperators     #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+
+-- |
+-- Module      : Network.Google.Gmail
+-- 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)
+--
+-- The Gmail REST API.
+--
+-- /See:/ <https://developers.google.com/gmail/api/ Gmail API Reference>
+module Network.Google.Gmail
+    (
+    -- * Service Configuration
+      gmailService
+
+    -- * API Declaration
+    , GmailAPI
+
+    -- * Resources
+
+    -- ** gmail.users.drafts.create
+    , module Network.Google.Resource.Gmail.Users.Drafts.Create
+
+    -- ** gmail.users.drafts.delete
+    , module Network.Google.Resource.Gmail.Users.Drafts.Delete
+
+    -- ** gmail.users.drafts.get
+    , module Network.Google.Resource.Gmail.Users.Drafts.Get
+
+    -- ** gmail.users.drafts.list
+    , module Network.Google.Resource.Gmail.Users.Drafts.List
+
+    -- ** gmail.users.drafts.send
+    , module Network.Google.Resource.Gmail.Users.Drafts.Send
+
+    -- ** gmail.users.drafts.update
+    , module Network.Google.Resource.Gmail.Users.Drafts.Update
+
+    -- ** gmail.users.getProfile
+    , module Network.Google.Resource.Gmail.Users.GetProFile
+
+    -- ** gmail.users.history.list
+    , module Network.Google.Resource.Gmail.Users.History.List
+
+    -- ** gmail.users.labels.create
+    , module Network.Google.Resource.Gmail.Users.Labels.Create
+
+    -- ** gmail.users.labels.delete
+    , module Network.Google.Resource.Gmail.Users.Labels.Delete
+
+    -- ** gmail.users.labels.get
+    , module Network.Google.Resource.Gmail.Users.Labels.Get
+
+    -- ** gmail.users.labels.list
+    , module Network.Google.Resource.Gmail.Users.Labels.List
+
+    -- ** gmail.users.labels.patch
+    , module Network.Google.Resource.Gmail.Users.Labels.Patch
+
+    -- ** gmail.users.labels.update
+    , module Network.Google.Resource.Gmail.Users.Labels.Update
+
+    -- ** gmail.users.messages.attachments.get
+    , module Network.Google.Resource.Gmail.Users.Messages.Attachments.Get
+
+    -- ** gmail.users.messages.delete
+    , module Network.Google.Resource.Gmail.Users.Messages.Delete
+
+    -- ** gmail.users.messages.get
+    , module Network.Google.Resource.Gmail.Users.Messages.Get
+
+    -- ** gmail.users.messages.import
+    , module Network.Google.Resource.Gmail.Users.Messages.Import
+
+    -- ** gmail.users.messages.insert
+    , module Network.Google.Resource.Gmail.Users.Messages.Insert
+
+    -- ** gmail.users.messages.list
+    , module Network.Google.Resource.Gmail.Users.Messages.List
+
+    -- ** gmail.users.messages.modify
+    , module Network.Google.Resource.Gmail.Users.Messages.Modify
+
+    -- ** gmail.users.messages.send
+    , module Network.Google.Resource.Gmail.Users.Messages.Send
+
+    -- ** gmail.users.messages.trash
+    , module Network.Google.Resource.Gmail.Users.Messages.Trash
+
+    -- ** gmail.users.messages.untrash
+    , module Network.Google.Resource.Gmail.Users.Messages.Untrash
+
+    -- ** gmail.users.stop
+    , module Network.Google.Resource.Gmail.Users.Stop
+
+    -- ** gmail.users.threads.delete
+    , module Network.Google.Resource.Gmail.Users.Threads.Delete
+
+    -- ** gmail.users.threads.get
+    , module Network.Google.Resource.Gmail.Users.Threads.Get
+
+    -- ** gmail.users.threads.list
+    , module Network.Google.Resource.Gmail.Users.Threads.List
+
+    -- ** gmail.users.threads.modify
+    , module Network.Google.Resource.Gmail.Users.Threads.Modify
+
+    -- ** gmail.users.threads.trash
+    , module Network.Google.Resource.Gmail.Users.Threads.Trash
+
+    -- ** gmail.users.threads.untrash
+    , module Network.Google.Resource.Gmail.Users.Threads.Untrash
+
+    -- ** gmail.users.watch
+    , module Network.Google.Resource.Gmail.Users.Watch
+
+    -- * Types
+
+    -- ** UsersMessagesGetFormat
+    , UsersMessagesGetFormat (..)
+
+    -- ** ModifyThreadRequest
+    , ModifyThreadRequest
+    , modifyThreadRequest
+    , mtrRemoveLabelIds
+    , mtrAddLabelIds
+
+    -- ** ModifyMessageRequest
+    , ModifyMessageRequest
+    , modifyMessageRequest
+    , mmrRemoveLabelIds
+    , mmrAddLabelIds
+
+    -- ** History
+    , History
+    , history
+    , hLabelsRemoved
+    , hMessagesDeleted
+    , hMessagesAdded
+    , hLabelsAdded
+    , hId
+    , hMessages
+
+    -- ** ProFile
+    , ProFile
+    , proFile
+    , pfMessagesTotal
+    , pfThreadsTotal
+    , pfHistoryId
+    , pfEmailAddress
+
+    -- ** MessagePartHeader
+    , MessagePartHeader
+    , messagePartHeader
+    , mphValue
+    , mphName
+
+    -- ** ListHistoryResponse
+    , ListHistoryResponse
+    , listHistoryResponse
+    , lhrNextPageToken
+    , lhrHistory
+    , lhrHistoryId
+
+    -- ** LabelType
+    , LabelType (..)
+
+    -- ** UsersDraftsGetFormat
+    , UsersDraftsGetFormat (..)
+
+    -- ** UsersMessagesImportInternalDateSource
+    , UsersMessagesImportInternalDateSource (..)
+
+    -- ** LabelMessageListVisibility
+    , LabelMessageListVisibility (..)
+
+    -- ** ListThreadsResponse
+    , ListThreadsResponse
+    , listThreadsResponse
+    , ltrNextPageToken
+    , ltrResultSizeEstimate
+    , ltrThreads
+
+    -- ** MessagePart
+    , MessagePart
+    , messagePart
+    , mpParts
+    , mpBody
+    , mpMimeType
+    , mpHeaders
+    , mpPartId
+    , mpFilename
+
+    -- ** HistoryLabelAdded
+    , HistoryLabelAdded
+    , historyLabelAdded
+    , hlaLabelIds
+    , hlaMessage
+
+    -- ** ListLabelsResponse
+    , ListLabelsResponse
+    , listLabelsResponse
+    , llrLabels
+
+    -- ** LabelLabelListVisibility
+    , LabelLabelListVisibility (..)
+
+    -- ** HistoryMessageDeleted
+    , HistoryMessageDeleted
+    , historyMessageDeleted
+    , hmdMessage
+
+    -- ** MessagePartBody
+    , MessagePartBody
+    , messagePartBody
+    , mpbSize
+    , mpbData
+    , mpbAttachmentId
+
+    -- ** ListDraftsResponse
+    , ListDraftsResponse
+    , listDraftsResponse
+    , ldrNextPageToken
+    , ldrResultSizeEstimate
+    , ldrDrafts
+
+    -- ** WatchResponse
+    , WatchResponse
+    , watchResponse
+    , wrExpiration
+    , wrHistoryId
+
+    -- ** UsersThreadsGetFormat
+    , UsersThreadsGetFormat (..)
+
+    -- ** Draft
+    , Draft
+    , draft
+    , dId
+    , dMessage
+
+    -- ** WatchRequest
+    , WatchRequest
+    , watchRequest
+    , wrLabelFilterAction
+    , wrTopicName
+    , wrLabelIds
+
+    -- ** WatchRequestLabelFilterAction
+    , WatchRequestLabelFilterAction (..)
+
+    -- ** Message
+    , Message
+    , message
+    , mRaw
+    , mSnippet
+    , mSizeEstimate
+    , mPayload
+    , mHistoryId
+    , mId
+    , mLabelIds
+    , mThreadId
+    , mInternalDate
+
+    -- ** UsersMessagesInsertInternalDateSource
+    , UsersMessagesInsertInternalDateSource (..)
+
+    -- ** HistoryLabelRemoved
+    , HistoryLabelRemoved
+    , historyLabelRemoved
+    , hlrLabelIds
+    , hlrMessage
+
+    -- ** Thread
+    , Thread
+    , thread
+    , tSnippet
+    , tHistoryId
+    , tId
+    , tMessages
+
+    -- ** Label
+    , Label
+    , label
+    , lThreadsUnread
+    , lMessageListVisibility
+    , lMessagesTotal
+    , lMessagesUnread
+    , lName
+    , lThreadsTotal
+    , lLabelListVisibility
+    , lId
+    , lType
+
+    -- ** ListMessagesResponse
+    , ListMessagesResponse
+    , listMessagesResponse
+    , lmrNextPageToken
+    , lmrResultSizeEstimate
+    , lmrMessages
+
+    -- ** HistoryMessageAdded
+    , HistoryMessageAdded
+    , historyMessageAdded
+    , hmaMessage
+    ) where
+
+import           Network.Google.Gmail.Types
+import           Network.Google.Prelude
+import           Network.Google.Resource.Gmail.Users.Drafts.Create
+import           Network.Google.Resource.Gmail.Users.Drafts.Delete
+import           Network.Google.Resource.Gmail.Users.Drafts.Get
+import           Network.Google.Resource.Gmail.Users.Drafts.List
+import           Network.Google.Resource.Gmail.Users.Drafts.Send
+import           Network.Google.Resource.Gmail.Users.Drafts.Update
+import           Network.Google.Resource.Gmail.Users.GetProFile
+import           Network.Google.Resource.Gmail.Users.History.List
+import           Network.Google.Resource.Gmail.Users.Labels.Create
+import           Network.Google.Resource.Gmail.Users.Labels.Delete
+import           Network.Google.Resource.Gmail.Users.Labels.Get
+import           Network.Google.Resource.Gmail.Users.Labels.List
+import           Network.Google.Resource.Gmail.Users.Labels.Patch
+import           Network.Google.Resource.Gmail.Users.Labels.Update
+import           Network.Google.Resource.Gmail.Users.Messages.Attachments.Get
+import           Network.Google.Resource.Gmail.Users.Messages.Delete
+import           Network.Google.Resource.Gmail.Users.Messages.Get
+import           Network.Google.Resource.Gmail.Users.Messages.Import
+import           Network.Google.Resource.Gmail.Users.Messages.Insert
+import           Network.Google.Resource.Gmail.Users.Messages.List
+import           Network.Google.Resource.Gmail.Users.Messages.Modify
+import           Network.Google.Resource.Gmail.Users.Messages.Send
+import           Network.Google.Resource.Gmail.Users.Messages.Trash
+import           Network.Google.Resource.Gmail.Users.Messages.Untrash
+import           Network.Google.Resource.Gmail.Users.Stop
+import           Network.Google.Resource.Gmail.Users.Threads.Delete
+import           Network.Google.Resource.Gmail.Users.Threads.Get
+import           Network.Google.Resource.Gmail.Users.Threads.List
+import           Network.Google.Resource.Gmail.Users.Threads.Modify
+import           Network.Google.Resource.Gmail.Users.Threads.Trash
+import           Network.Google.Resource.Gmail.Users.Threads.Untrash
+import           Network.Google.Resource.Gmail.Users.Watch
+
+{- $resources
+TODO
+-}
+
+-- | Represents the entirety of the methods and resources available for the Gmail API service.
+type GmailAPI =
+     UsersHistoryListResource :<|> UsersDraftsListResource
+       :<|> UsersDraftsGetResource
+       :<|> UsersDraftsCreateResource
+       :<|> UsersDraftsSendResource
+       :<|> UsersDraftsDeleteResource
+       :<|> UsersDraftsUpdateResource
+       :<|> UsersLabelsListResource
+       :<|> UsersLabelsPatchResource
+       :<|> UsersLabelsGetResource
+       :<|> UsersLabelsCreateResource
+       :<|> UsersLabelsDeleteResource
+       :<|> UsersLabelsUpdateResource
+       :<|> UsersThreadsListResource
+       :<|> UsersThreadsGetResource
+       :<|> UsersThreadsTrashResource
+       :<|> UsersThreadsUntrashResource
+       :<|> UsersThreadsModifyResource
+       :<|> UsersThreadsDeleteResource
+       :<|> UsersMessagesAttachmentsGetResource
+       :<|> UsersMessagesInsertResource
+       :<|> UsersMessagesListResource
+       :<|> UsersMessagesGetResource
+       :<|> UsersMessagesTrashResource
+       :<|> UsersMessagesSendResource
+       :<|> UsersMessagesUntrashResource
+       :<|> UsersMessagesImportResource
+       :<|> UsersMessagesModifyResource
+       :<|> UsersMessagesDeleteResource
+       :<|> UsersGetProFileResource
+       :<|> UsersStopResource
+       :<|> UsersWatchResource
diff --git a/gen/Network/Google/Gmail/Types.hs b/gen/Network/Google/Gmail/Types.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Gmail/Types.hs
@@ -0,0 +1,255 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- |
+-- Module      : Network.Google.Gmail.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.Gmail.Types
+    (
+    -- * Service Configuration
+      gmailService
+
+    -- * OAuth Scopes
+    , gmailAllScope
+    , gmailModifyScope
+    , gmailLabelsScope
+    , gmailSendScope
+    , gmailInsertScope
+    , gmailComposeScope
+    , gmailReadonlyScope
+
+    -- * UsersMessagesGetFormat
+    , UsersMessagesGetFormat (..)
+
+    -- * ModifyThreadRequest
+    , ModifyThreadRequest
+    , modifyThreadRequest
+    , mtrRemoveLabelIds
+    , mtrAddLabelIds
+
+    -- * ModifyMessageRequest
+    , ModifyMessageRequest
+    , modifyMessageRequest
+    , mmrRemoveLabelIds
+    , mmrAddLabelIds
+
+    -- * History
+    , History
+    , history
+    , hLabelsRemoved
+    , hMessagesDeleted
+    , hMessagesAdded
+    , hLabelsAdded
+    , hId
+    , hMessages
+
+    -- * ProFile
+    , ProFile
+    , proFile
+    , pfMessagesTotal
+    , pfThreadsTotal
+    , pfHistoryId
+    , pfEmailAddress
+
+    -- * MessagePartHeader
+    , MessagePartHeader
+    , messagePartHeader
+    , mphValue
+    , mphName
+
+    -- * ListHistoryResponse
+    , ListHistoryResponse
+    , listHistoryResponse
+    , lhrNextPageToken
+    , lhrHistory
+    , lhrHistoryId
+
+    -- * LabelType
+    , LabelType (..)
+
+    -- * UsersDraftsGetFormat
+    , UsersDraftsGetFormat (..)
+
+    -- * UsersMessagesImportInternalDateSource
+    , UsersMessagesImportInternalDateSource (..)
+
+    -- * LabelMessageListVisibility
+    , LabelMessageListVisibility (..)
+
+    -- * ListThreadsResponse
+    , ListThreadsResponse
+    , listThreadsResponse
+    , ltrNextPageToken
+    , ltrResultSizeEstimate
+    , ltrThreads
+
+    -- * MessagePart
+    , MessagePart
+    , messagePart
+    , mpParts
+    , mpBody
+    , mpMimeType
+    , mpHeaders
+    , mpPartId
+    , mpFilename
+
+    -- * HistoryLabelAdded
+    , HistoryLabelAdded
+    , historyLabelAdded
+    , hlaLabelIds
+    , hlaMessage
+
+    -- * ListLabelsResponse
+    , ListLabelsResponse
+    , listLabelsResponse
+    , llrLabels
+
+    -- * LabelLabelListVisibility
+    , LabelLabelListVisibility (..)
+
+    -- * HistoryMessageDeleted
+    , HistoryMessageDeleted
+    , historyMessageDeleted
+    , hmdMessage
+
+    -- * MessagePartBody
+    , MessagePartBody
+    , messagePartBody
+    , mpbSize
+    , mpbData
+    , mpbAttachmentId
+
+    -- * ListDraftsResponse
+    , ListDraftsResponse
+    , listDraftsResponse
+    , ldrNextPageToken
+    , ldrResultSizeEstimate
+    , ldrDrafts
+
+    -- * WatchResponse
+    , WatchResponse
+    , watchResponse
+    , wrExpiration
+    , wrHistoryId
+
+    -- * UsersThreadsGetFormat
+    , UsersThreadsGetFormat (..)
+
+    -- * Draft
+    , Draft
+    , draft
+    , dId
+    , dMessage
+
+    -- * WatchRequest
+    , WatchRequest
+    , watchRequest
+    , wrLabelFilterAction
+    , wrTopicName
+    , wrLabelIds
+
+    -- * WatchRequestLabelFilterAction
+    , WatchRequestLabelFilterAction (..)
+
+    -- * Message
+    , Message
+    , message
+    , mRaw
+    , mSnippet
+    , mSizeEstimate
+    , mPayload
+    , mHistoryId
+    , mId
+    , mLabelIds
+    , mThreadId
+    , mInternalDate
+
+    -- * UsersMessagesInsertInternalDateSource
+    , UsersMessagesInsertInternalDateSource (..)
+
+    -- * HistoryLabelRemoved
+    , HistoryLabelRemoved
+    , historyLabelRemoved
+    , hlrLabelIds
+    , hlrMessage
+
+    -- * Thread
+    , Thread
+    , thread
+    , tSnippet
+    , tHistoryId
+    , tId
+    , tMessages
+
+    -- * Label
+    , Label
+    , label
+    , lThreadsUnread
+    , lMessageListVisibility
+    , lMessagesTotal
+    , lMessagesUnread
+    , lName
+    , lThreadsTotal
+    , lLabelListVisibility
+    , lId
+    , lType
+
+    -- * ListMessagesResponse
+    , ListMessagesResponse
+    , listMessagesResponse
+    , lmrNextPageToken
+    , lmrResultSizeEstimate
+    , lmrMessages
+
+    -- * HistoryMessageAdded
+    , HistoryMessageAdded
+    , historyMessageAdded
+    , hmaMessage
+    ) where
+
+import           Network.Google.Gmail.Types.Product
+import           Network.Google.Gmail.Types.Sum
+import           Network.Google.Prelude
+
+-- | Default request referring to version 'v1' of the Gmail API. This contains the host and root path used as a starting point for constructing service requests.
+gmailService :: Service
+gmailService
+  = defaultService (ServiceId "gmail:v1")
+      "www.googleapis.com"
+
+-- | View and manage your mail
+gmailAllScope :: OAuthScope
+gmailAllScope = "https://mail.google.com/";
+
+-- | View and modify but not delete your email
+gmailModifyScope :: OAuthScope
+gmailModifyScope = "https://www.googleapis.com/auth/gmail.modify";
+
+-- | Manage mailbox labels
+gmailLabelsScope :: OAuthScope
+gmailLabelsScope = "https://www.googleapis.com/auth/gmail.labels";
+
+-- | Send email on your behalf
+gmailSendScope :: OAuthScope
+gmailSendScope = "https://www.googleapis.com/auth/gmail.send";
+
+-- | Insert mail into your mailbox
+gmailInsertScope :: OAuthScope
+gmailInsertScope = "https://www.googleapis.com/auth/gmail.insert";
+
+-- | Manage drafts and send emails
+gmailComposeScope :: OAuthScope
+gmailComposeScope = "https://www.googleapis.com/auth/gmail.compose";
+
+-- | View your emails messages and settings
+gmailReadonlyScope :: OAuthScope
+gmailReadonlyScope = "https://www.googleapis.com/auth/gmail.readonly";
diff --git a/gen/Network/Google/Gmail/Types/Product.hs b/gen/Network/Google/Gmail/Types/Product.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Gmail/Types/Product.hs
@@ -0,0 +1,1472 @@
+{-# 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.Gmail.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.Gmail.Types.Product where
+
+import           Network.Google.Gmail.Types.Sum
+import           Network.Google.Prelude
+
+--
+-- /See:/ 'modifyThreadRequest' smart constructor.
+data ModifyThreadRequest = ModifyThreadRequest
+    { _mtrRemoveLabelIds :: !(Maybe [Text])
+    , _mtrAddLabelIds    :: !(Maybe [Text])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ModifyThreadRequest' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'mtrRemoveLabelIds'
+--
+-- * 'mtrAddLabelIds'
+modifyThreadRequest
+    :: ModifyThreadRequest
+modifyThreadRequest =
+    ModifyThreadRequest
+    { _mtrRemoveLabelIds = Nothing
+    , _mtrAddLabelIds = Nothing
+    }
+
+-- | A list of IDs of labels to remove from this thread.
+mtrRemoveLabelIds :: Lens' ModifyThreadRequest [Text]
+mtrRemoveLabelIds
+  = lens _mtrRemoveLabelIds
+      (\ s a -> s{_mtrRemoveLabelIds = a})
+      . _Default
+      . _Coerce
+
+-- | A list of IDs of labels to add to this thread.
+mtrAddLabelIds :: Lens' ModifyThreadRequest [Text]
+mtrAddLabelIds
+  = lens _mtrAddLabelIds
+      (\ s a -> s{_mtrAddLabelIds = a})
+      . _Default
+      . _Coerce
+
+instance FromJSON ModifyThreadRequest where
+        parseJSON
+          = withObject "ModifyThreadRequest"
+              (\ o ->
+                 ModifyThreadRequest <$>
+                   (o .:? "removeLabelIds" .!= mempty) <*>
+                     (o .:? "addLabelIds" .!= mempty))
+
+instance ToJSON ModifyThreadRequest where
+        toJSON ModifyThreadRequest{..}
+          = object
+              (catMaybes
+                 [("removeLabelIds" .=) <$> _mtrRemoveLabelIds,
+                  ("addLabelIds" .=) <$> _mtrAddLabelIds])
+
+--
+-- /See:/ 'modifyMessageRequest' smart constructor.
+data ModifyMessageRequest = ModifyMessageRequest
+    { _mmrRemoveLabelIds :: !(Maybe [Text])
+    , _mmrAddLabelIds    :: !(Maybe [Text])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ModifyMessageRequest' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'mmrRemoveLabelIds'
+--
+-- * 'mmrAddLabelIds'
+modifyMessageRequest
+    :: ModifyMessageRequest
+modifyMessageRequest =
+    ModifyMessageRequest
+    { _mmrRemoveLabelIds = Nothing
+    , _mmrAddLabelIds = Nothing
+    }
+
+-- | A list IDs of labels to remove from this message.
+mmrRemoveLabelIds :: Lens' ModifyMessageRequest [Text]
+mmrRemoveLabelIds
+  = lens _mmrRemoveLabelIds
+      (\ s a -> s{_mmrRemoveLabelIds = a})
+      . _Default
+      . _Coerce
+
+-- | A list of IDs of labels to add to this message.
+mmrAddLabelIds :: Lens' ModifyMessageRequest [Text]
+mmrAddLabelIds
+  = lens _mmrAddLabelIds
+      (\ s a -> s{_mmrAddLabelIds = a})
+      . _Default
+      . _Coerce
+
+instance FromJSON ModifyMessageRequest where
+        parseJSON
+          = withObject "ModifyMessageRequest"
+              (\ o ->
+                 ModifyMessageRequest <$>
+                   (o .:? "removeLabelIds" .!= mempty) <*>
+                     (o .:? "addLabelIds" .!= mempty))
+
+instance ToJSON ModifyMessageRequest where
+        toJSON ModifyMessageRequest{..}
+          = object
+              (catMaybes
+                 [("removeLabelIds" .=) <$> _mmrRemoveLabelIds,
+                  ("addLabelIds" .=) <$> _mmrAddLabelIds])
+
+-- | A record of a change to the user\'s mailbox. Each history change may
+-- affect multiple messages in multiple ways.
+--
+-- /See:/ 'history' smart constructor.
+data History = History
+    { _hLabelsRemoved   :: !(Maybe [HistoryLabelRemoved])
+    , _hMessagesDeleted :: !(Maybe [HistoryMessageDeleted])
+    , _hMessagesAdded   :: !(Maybe [HistoryMessageAdded])
+    , _hLabelsAdded     :: !(Maybe [HistoryLabelAdded])
+    , _hId              :: !(Maybe (Textual Word64))
+    , _hMessages        :: !(Maybe [Message])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'History' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'hLabelsRemoved'
+--
+-- * 'hMessagesDeleted'
+--
+-- * 'hMessagesAdded'
+--
+-- * 'hLabelsAdded'
+--
+-- * 'hId'
+--
+-- * 'hMessages'
+history
+    :: History
+history =
+    History
+    { _hLabelsRemoved = Nothing
+    , _hMessagesDeleted = Nothing
+    , _hMessagesAdded = Nothing
+    , _hLabelsAdded = Nothing
+    , _hId = Nothing
+    , _hMessages = Nothing
+    }
+
+-- | Labels removed from messages in this history record.
+hLabelsRemoved :: Lens' History [HistoryLabelRemoved]
+hLabelsRemoved
+  = lens _hLabelsRemoved
+      (\ s a -> s{_hLabelsRemoved = a})
+      . _Default
+      . _Coerce
+
+-- | Messages deleted (not Trashed) from the mailbox in this history record.
+hMessagesDeleted :: Lens' History [HistoryMessageDeleted]
+hMessagesDeleted
+  = lens _hMessagesDeleted
+      (\ s a -> s{_hMessagesDeleted = a})
+      . _Default
+      . _Coerce
+
+-- | Messages added to the mailbox in this history record.
+hMessagesAdded :: Lens' History [HistoryMessageAdded]
+hMessagesAdded
+  = lens _hMessagesAdded
+      (\ s a -> s{_hMessagesAdded = a})
+      . _Default
+      . _Coerce
+
+-- | Labels added to messages in this history record.
+hLabelsAdded :: Lens' History [HistoryLabelAdded]
+hLabelsAdded
+  = lens _hLabelsAdded (\ s a -> s{_hLabelsAdded = a})
+      . _Default
+      . _Coerce
+
+-- | The mailbox sequence ID.
+hId :: Lens' History (Maybe Word64)
+hId
+  = lens _hId (\ s a -> s{_hId = a}) . mapping _Coerce
+
+-- | List of messages changed in this history record. The fields for specific
+-- change types, such as messagesAdded may duplicate messages in this
+-- field. We recommend using the specific change-type fields instead of
+-- this.
+hMessages :: Lens' History [Message]
+hMessages
+  = lens _hMessages (\ s a -> s{_hMessages = a}) .
+      _Default
+      . _Coerce
+
+instance FromJSON History where
+        parseJSON
+          = withObject "History"
+              (\ o ->
+                 History <$>
+                   (o .:? "labelsRemoved" .!= mempty) <*>
+                     (o .:? "messagesDeleted" .!= mempty)
+                     <*> (o .:? "messagesAdded" .!= mempty)
+                     <*> (o .:? "labelsAdded" .!= mempty)
+                     <*> (o .:? "id")
+                     <*> (o .:? "messages" .!= mempty))
+
+instance ToJSON History where
+        toJSON History{..}
+          = object
+              (catMaybes
+                 [("labelsRemoved" .=) <$> _hLabelsRemoved,
+                  ("messagesDeleted" .=) <$> _hMessagesDeleted,
+                  ("messagesAdded" .=) <$> _hMessagesAdded,
+                  ("labelsAdded" .=) <$> _hLabelsAdded,
+                  ("id" .=) <$> _hId, ("messages" .=) <$> _hMessages])
+
+-- | Profile for a Gmail user.
+--
+-- /See:/ 'proFile' smart constructor.
+data ProFile = ProFile
+    { _pfMessagesTotal :: !(Maybe (Textual Int32))
+    , _pfThreadsTotal  :: !(Maybe (Textual Int32))
+    , _pfHistoryId     :: !(Maybe (Textual Word64))
+    , _pfEmailAddress  :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ProFile' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pfMessagesTotal'
+--
+-- * 'pfThreadsTotal'
+--
+-- * 'pfHistoryId'
+--
+-- * 'pfEmailAddress'
+proFile
+    :: ProFile
+proFile =
+    ProFile
+    { _pfMessagesTotal = Nothing
+    , _pfThreadsTotal = Nothing
+    , _pfHistoryId = Nothing
+    , _pfEmailAddress = Nothing
+    }
+
+-- | The total number of messages in the mailbox.
+pfMessagesTotal :: Lens' ProFile (Maybe Int32)
+pfMessagesTotal
+  = lens _pfMessagesTotal
+      (\ s a -> s{_pfMessagesTotal = a})
+      . mapping _Coerce
+
+-- | The total number of threads in the mailbox.
+pfThreadsTotal :: Lens' ProFile (Maybe Int32)
+pfThreadsTotal
+  = lens _pfThreadsTotal
+      (\ s a -> s{_pfThreadsTotal = a})
+      . mapping _Coerce
+
+-- | The ID of the mailbox\'s current history record.
+pfHistoryId :: Lens' ProFile (Maybe Word64)
+pfHistoryId
+  = lens _pfHistoryId (\ s a -> s{_pfHistoryId = a}) .
+      mapping _Coerce
+
+-- | The user\'s email address.
+pfEmailAddress :: Lens' ProFile (Maybe Text)
+pfEmailAddress
+  = lens _pfEmailAddress
+      (\ s a -> s{_pfEmailAddress = a})
+
+instance FromJSON ProFile where
+        parseJSON
+          = withObject "ProFile"
+              (\ o ->
+                 ProFile <$>
+                   (o .:? "messagesTotal") <*> (o .:? "threadsTotal")
+                     <*> (o .:? "historyId")
+                     <*> (o .:? "emailAddress"))
+
+instance ToJSON ProFile where
+        toJSON ProFile{..}
+          = object
+              (catMaybes
+                 [("messagesTotal" .=) <$> _pfMessagesTotal,
+                  ("threadsTotal" .=) <$> _pfThreadsTotal,
+                  ("historyId" .=) <$> _pfHistoryId,
+                  ("emailAddress" .=) <$> _pfEmailAddress])
+
+--
+-- /See:/ 'messagePartHeader' smart constructor.
+data MessagePartHeader = MessagePartHeader
+    { _mphValue :: !(Maybe Text)
+    , _mphName  :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'MessagePartHeader' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'mphValue'
+--
+-- * 'mphName'
+messagePartHeader
+    :: MessagePartHeader
+messagePartHeader =
+    MessagePartHeader
+    { _mphValue = Nothing
+    , _mphName = Nothing
+    }
+
+-- | The value of the header after the : separator. For example,
+-- someuser\'example.com.
+mphValue :: Lens' MessagePartHeader (Maybe Text)
+mphValue = lens _mphValue (\ s a -> s{_mphValue = a})
+
+-- | The name of the header before the : separator. For example, To.
+mphName :: Lens' MessagePartHeader (Maybe Text)
+mphName = lens _mphName (\ s a -> s{_mphName = a})
+
+instance FromJSON MessagePartHeader where
+        parseJSON
+          = withObject "MessagePartHeader"
+              (\ o ->
+                 MessagePartHeader <$>
+                   (o .:? "value") <*> (o .:? "name"))
+
+instance ToJSON MessagePartHeader where
+        toJSON MessagePartHeader{..}
+          = object
+              (catMaybes
+                 [("value" .=) <$> _mphValue,
+                  ("name" .=) <$> _mphName])
+
+--
+-- /See:/ 'listHistoryResponse' smart constructor.
+data ListHistoryResponse = ListHistoryResponse
+    { _lhrNextPageToken :: !(Maybe Text)
+    , _lhrHistory       :: !(Maybe [History])
+    , _lhrHistoryId     :: !(Maybe (Textual Word64))
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ListHistoryResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'lhrNextPageToken'
+--
+-- * 'lhrHistory'
+--
+-- * 'lhrHistoryId'
+listHistoryResponse
+    :: ListHistoryResponse
+listHistoryResponse =
+    ListHistoryResponse
+    { _lhrNextPageToken = Nothing
+    , _lhrHistory = Nothing
+    , _lhrHistoryId = Nothing
+    }
+
+-- | Page token to retrieve the next page of results in the list.
+lhrNextPageToken :: Lens' ListHistoryResponse (Maybe Text)
+lhrNextPageToken
+  = lens _lhrNextPageToken
+      (\ s a -> s{_lhrNextPageToken = a})
+
+-- | List of history records. Any messages contained in the response will
+-- typically only have id and threadId fields populated.
+lhrHistory :: Lens' ListHistoryResponse [History]
+lhrHistory
+  = lens _lhrHistory (\ s a -> s{_lhrHistory = a}) .
+      _Default
+      . _Coerce
+
+-- | The ID of the mailbox\'s current history record.
+lhrHistoryId :: Lens' ListHistoryResponse (Maybe Word64)
+lhrHistoryId
+  = lens _lhrHistoryId (\ s a -> s{_lhrHistoryId = a})
+      . mapping _Coerce
+
+instance FromJSON ListHistoryResponse where
+        parseJSON
+          = withObject "ListHistoryResponse"
+              (\ o ->
+                 ListHistoryResponse <$>
+                   (o .:? "nextPageToken") <*>
+                     (o .:? "history" .!= mempty)
+                     <*> (o .:? "historyId"))
+
+instance ToJSON ListHistoryResponse where
+        toJSON ListHistoryResponse{..}
+          = object
+              (catMaybes
+                 [("nextPageToken" .=) <$> _lhrNextPageToken,
+                  ("history" .=) <$> _lhrHistory,
+                  ("historyId" .=) <$> _lhrHistoryId])
+
+--
+-- /See:/ 'listThreadsResponse' smart constructor.
+data ListThreadsResponse = ListThreadsResponse
+    { _ltrNextPageToken      :: !(Maybe Text)
+    , _ltrResultSizeEstimate :: !(Maybe (Textual Word32))
+    , _ltrThreads            :: !(Maybe [Thread])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ListThreadsResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ltrNextPageToken'
+--
+-- * 'ltrResultSizeEstimate'
+--
+-- * 'ltrThreads'
+listThreadsResponse
+    :: ListThreadsResponse
+listThreadsResponse =
+    ListThreadsResponse
+    { _ltrNextPageToken = Nothing
+    , _ltrResultSizeEstimate = Nothing
+    , _ltrThreads = Nothing
+    }
+
+-- | Page token to retrieve the next page of results in the list.
+ltrNextPageToken :: Lens' ListThreadsResponse (Maybe Text)
+ltrNextPageToken
+  = lens _ltrNextPageToken
+      (\ s a -> s{_ltrNextPageToken = a})
+
+-- | Estimated total number of results.
+ltrResultSizeEstimate :: Lens' ListThreadsResponse (Maybe Word32)
+ltrResultSizeEstimate
+  = lens _ltrResultSizeEstimate
+      (\ s a -> s{_ltrResultSizeEstimate = a})
+      . mapping _Coerce
+
+-- | List of threads.
+ltrThreads :: Lens' ListThreadsResponse [Thread]
+ltrThreads
+  = lens _ltrThreads (\ s a -> s{_ltrThreads = a}) .
+      _Default
+      . _Coerce
+
+instance FromJSON ListThreadsResponse where
+        parseJSON
+          = withObject "ListThreadsResponse"
+              (\ o ->
+                 ListThreadsResponse <$>
+                   (o .:? "nextPageToken") <*>
+                     (o .:? "resultSizeEstimate")
+                     <*> (o .:? "threads" .!= mempty))
+
+instance ToJSON ListThreadsResponse where
+        toJSON ListThreadsResponse{..}
+          = object
+              (catMaybes
+                 [("nextPageToken" .=) <$> _ltrNextPageToken,
+                  ("resultSizeEstimate" .=) <$> _ltrResultSizeEstimate,
+                  ("threads" .=) <$> _ltrThreads])
+
+-- | A single MIME message part.
+--
+-- /See:/ 'messagePart' smart constructor.
+data MessagePart = MessagePart
+    { _mpParts    :: !(Maybe [MessagePart])
+    , _mpBody     :: !(Maybe MessagePartBody)
+    , _mpMimeType :: !(Maybe Text)
+    , _mpHeaders  :: !(Maybe [MessagePartHeader])
+    , _mpPartId   :: !(Maybe Text)
+    , _mpFilename :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'MessagePart' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'mpParts'
+--
+-- * 'mpBody'
+--
+-- * 'mpMimeType'
+--
+-- * 'mpHeaders'
+--
+-- * 'mpPartId'
+--
+-- * 'mpFilename'
+messagePart
+    :: MessagePart
+messagePart =
+    MessagePart
+    { _mpParts = Nothing
+    , _mpBody = Nothing
+    , _mpMimeType = Nothing
+    , _mpHeaders = Nothing
+    , _mpPartId = Nothing
+    , _mpFilename = Nothing
+    }
+
+-- | The child MIME message parts of this part. This only applies to
+-- container MIME message parts, for example multipart\/*. For non-
+-- container MIME message part types, such as text\/plain, this field is
+-- empty. For more information, see RFC 1521.
+mpParts :: Lens' MessagePart [MessagePart]
+mpParts
+  = lens _mpParts (\ s a -> s{_mpParts = a}) . _Default
+      . _Coerce
+
+-- | The message part body for this part, which may be empty for container
+-- MIME message parts.
+mpBody :: Lens' MessagePart (Maybe MessagePartBody)
+mpBody = lens _mpBody (\ s a -> s{_mpBody = a})
+
+-- | The MIME type of the message part.
+mpMimeType :: Lens' MessagePart (Maybe Text)
+mpMimeType
+  = lens _mpMimeType (\ s a -> s{_mpMimeType = a})
+
+-- | List of headers on this message part. For the top-level message part,
+-- representing the entire message payload, it will contain the standard
+-- RFC 2822 email headers such as To, From, and Subject.
+mpHeaders :: Lens' MessagePart [MessagePartHeader]
+mpHeaders
+  = lens _mpHeaders (\ s a -> s{_mpHeaders = a}) .
+      _Default
+      . _Coerce
+
+-- | The immutable ID of the message part.
+mpPartId :: Lens' MessagePart (Maybe Text)
+mpPartId = lens _mpPartId (\ s a -> s{_mpPartId = a})
+
+-- | The filename of the attachment. Only present if this message part
+-- represents an attachment.
+mpFilename :: Lens' MessagePart (Maybe Text)
+mpFilename
+  = lens _mpFilename (\ s a -> s{_mpFilename = a})
+
+instance FromJSON MessagePart where
+        parseJSON
+          = withObject "MessagePart"
+              (\ o ->
+                 MessagePart <$>
+                   (o .:? "parts" .!= mempty) <*> (o .:? "body") <*>
+                     (o .:? "mimeType")
+                     <*> (o .:? "headers" .!= mempty)
+                     <*> (o .:? "partId")
+                     <*> (o .:? "filename"))
+
+instance ToJSON MessagePart where
+        toJSON MessagePart{..}
+          = object
+              (catMaybes
+                 [("parts" .=) <$> _mpParts, ("body" .=) <$> _mpBody,
+                  ("mimeType" .=) <$> _mpMimeType,
+                  ("headers" .=) <$> _mpHeaders,
+                  ("partId" .=) <$> _mpPartId,
+                  ("filename" .=) <$> _mpFilename])
+
+--
+-- /See:/ 'historyLabelAdded' smart constructor.
+data HistoryLabelAdded = HistoryLabelAdded
+    { _hlaLabelIds :: !(Maybe [Text])
+    , _hlaMessage  :: !(Maybe Message)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'HistoryLabelAdded' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'hlaLabelIds'
+--
+-- * 'hlaMessage'
+historyLabelAdded
+    :: HistoryLabelAdded
+historyLabelAdded =
+    HistoryLabelAdded
+    { _hlaLabelIds = Nothing
+    , _hlaMessage = Nothing
+    }
+
+-- | Label IDs added to the message.
+hlaLabelIds :: Lens' HistoryLabelAdded [Text]
+hlaLabelIds
+  = lens _hlaLabelIds (\ s a -> s{_hlaLabelIds = a}) .
+      _Default
+      . _Coerce
+
+hlaMessage :: Lens' HistoryLabelAdded (Maybe Message)
+hlaMessage
+  = lens _hlaMessage (\ s a -> s{_hlaMessage = a})
+
+instance FromJSON HistoryLabelAdded where
+        parseJSON
+          = withObject "HistoryLabelAdded"
+              (\ o ->
+                 HistoryLabelAdded <$>
+                   (o .:? "labelIds" .!= mempty) <*> (o .:? "message"))
+
+instance ToJSON HistoryLabelAdded where
+        toJSON HistoryLabelAdded{..}
+          = object
+              (catMaybes
+                 [("labelIds" .=) <$> _hlaLabelIds,
+                  ("message" .=) <$> _hlaMessage])
+
+--
+-- /See:/ 'listLabelsResponse' smart constructor.
+newtype ListLabelsResponse = ListLabelsResponse
+    { _llrLabels :: Maybe [Label]
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ListLabelsResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'llrLabels'
+listLabelsResponse
+    :: ListLabelsResponse
+listLabelsResponse =
+    ListLabelsResponse
+    { _llrLabels = Nothing
+    }
+
+-- | List of labels.
+llrLabels :: Lens' ListLabelsResponse [Label]
+llrLabels
+  = lens _llrLabels (\ s a -> s{_llrLabels = a}) .
+      _Default
+      . _Coerce
+
+instance FromJSON ListLabelsResponse where
+        parseJSON
+          = withObject "ListLabelsResponse"
+              (\ o ->
+                 ListLabelsResponse <$> (o .:? "labels" .!= mempty))
+
+instance ToJSON ListLabelsResponse where
+        toJSON ListLabelsResponse{..}
+          = object (catMaybes [("labels" .=) <$> _llrLabels])
+
+--
+-- /See:/ 'historyMessageDeleted' smart constructor.
+newtype HistoryMessageDeleted = HistoryMessageDeleted
+    { _hmdMessage :: Maybe Message
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'HistoryMessageDeleted' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'hmdMessage'
+historyMessageDeleted
+    :: HistoryMessageDeleted
+historyMessageDeleted =
+    HistoryMessageDeleted
+    { _hmdMessage = Nothing
+    }
+
+hmdMessage :: Lens' HistoryMessageDeleted (Maybe Message)
+hmdMessage
+  = lens _hmdMessage (\ s a -> s{_hmdMessage = a})
+
+instance FromJSON HistoryMessageDeleted where
+        parseJSON
+          = withObject "HistoryMessageDeleted"
+              (\ o -> HistoryMessageDeleted <$> (o .:? "message"))
+
+instance ToJSON HistoryMessageDeleted where
+        toJSON HistoryMessageDeleted{..}
+          = object (catMaybes [("message" .=) <$> _hmdMessage])
+
+-- | The body of a single MIME message part.
+--
+-- /See:/ 'messagePartBody' smart constructor.
+data MessagePartBody = MessagePartBody
+    { _mpbSize         :: !(Maybe (Textual Int32))
+    , _mpbData         :: !(Maybe (Textual Word8))
+    , _mpbAttachmentId :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'MessagePartBody' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'mpbSize'
+--
+-- * 'mpbData'
+--
+-- * 'mpbAttachmentId'
+messagePartBody
+    :: MessagePartBody
+messagePartBody =
+    MessagePartBody
+    { _mpbSize = Nothing
+    , _mpbData = Nothing
+    , _mpbAttachmentId = Nothing
+    }
+
+-- | Total number of bytes in the body of the message part.
+mpbSize :: Lens' MessagePartBody (Maybe Int32)
+mpbSize
+  = lens _mpbSize (\ s a -> s{_mpbSize = a}) .
+      mapping _Coerce
+
+-- | The body data of a MIME message part. May be empty for MIME container
+-- types that have no message body or when the body data is sent as a
+-- separate attachment. An attachment ID is present if the body data is
+-- contained in a separate attachment.
+mpbData :: Lens' MessagePartBody (Maybe Word8)
+mpbData
+  = lens _mpbData (\ s a -> s{_mpbData = a}) .
+      mapping _Coerce
+
+-- | When present, contains the ID of an external attachment that can be
+-- retrieved in a separate messages.attachments.get request. When not
+-- present, the entire content of the message part body is contained in the
+-- data field.
+mpbAttachmentId :: Lens' MessagePartBody (Maybe Text)
+mpbAttachmentId
+  = lens _mpbAttachmentId
+      (\ s a -> s{_mpbAttachmentId = a})
+
+instance FromJSON MessagePartBody where
+        parseJSON
+          = withObject "MessagePartBody"
+              (\ o ->
+                 MessagePartBody <$>
+                   (o .:? "size") <*> (o .:? "data") <*>
+                     (o .:? "attachmentId"))
+
+instance ToJSON MessagePartBody where
+        toJSON MessagePartBody{..}
+          = object
+              (catMaybes
+                 [("size" .=) <$> _mpbSize, ("data" .=) <$> _mpbData,
+                  ("attachmentId" .=) <$> _mpbAttachmentId])
+
+--
+-- /See:/ 'listDraftsResponse' smart constructor.
+data ListDraftsResponse = ListDraftsResponse
+    { _ldrNextPageToken      :: !(Maybe Text)
+    , _ldrResultSizeEstimate :: !(Maybe (Textual Word32))
+    , _ldrDrafts             :: !(Maybe [Draft])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ListDraftsResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ldrNextPageToken'
+--
+-- * 'ldrResultSizeEstimate'
+--
+-- * 'ldrDrafts'
+listDraftsResponse
+    :: ListDraftsResponse
+listDraftsResponse =
+    ListDraftsResponse
+    { _ldrNextPageToken = Nothing
+    , _ldrResultSizeEstimate = Nothing
+    , _ldrDrafts = Nothing
+    }
+
+-- | Token to retrieve the next page of results in the list.
+ldrNextPageToken :: Lens' ListDraftsResponse (Maybe Text)
+ldrNextPageToken
+  = lens _ldrNextPageToken
+      (\ s a -> s{_ldrNextPageToken = a})
+
+-- | Estimated total number of results.
+ldrResultSizeEstimate :: Lens' ListDraftsResponse (Maybe Word32)
+ldrResultSizeEstimate
+  = lens _ldrResultSizeEstimate
+      (\ s a -> s{_ldrResultSizeEstimate = a})
+      . mapping _Coerce
+
+-- | List of drafts.
+ldrDrafts :: Lens' ListDraftsResponse [Draft]
+ldrDrafts
+  = lens _ldrDrafts (\ s a -> s{_ldrDrafts = a}) .
+      _Default
+      . _Coerce
+
+instance FromJSON ListDraftsResponse where
+        parseJSON
+          = withObject "ListDraftsResponse"
+              (\ o ->
+                 ListDraftsResponse <$>
+                   (o .:? "nextPageToken") <*>
+                     (o .:? "resultSizeEstimate")
+                     <*> (o .:? "drafts" .!= mempty))
+
+instance ToJSON ListDraftsResponse where
+        toJSON ListDraftsResponse{..}
+          = object
+              (catMaybes
+                 [("nextPageToken" .=) <$> _ldrNextPageToken,
+                  ("resultSizeEstimate" .=) <$> _ldrResultSizeEstimate,
+                  ("drafts" .=) <$> _ldrDrafts])
+
+-- | Push notification watch response.
+--
+-- /See:/ 'watchResponse' smart constructor.
+data WatchResponse = WatchResponse
+    { _wrExpiration :: !(Maybe (Textual Int64))
+    , _wrHistoryId  :: !(Maybe (Textual Word64))
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'WatchResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'wrExpiration'
+--
+-- * 'wrHistoryId'
+watchResponse
+    :: WatchResponse
+watchResponse =
+    WatchResponse
+    { _wrExpiration = Nothing
+    , _wrHistoryId = Nothing
+    }
+
+-- | When Gmail will stop sending notifications for mailbox updates (epoch
+-- millis). Call watch again before this time to renew the watch.
+wrExpiration :: Lens' WatchResponse (Maybe Int64)
+wrExpiration
+  = lens _wrExpiration (\ s a -> s{_wrExpiration = a})
+      . mapping _Coerce
+
+-- | The ID of the mailbox\'s current history record.
+wrHistoryId :: Lens' WatchResponse (Maybe Word64)
+wrHistoryId
+  = lens _wrHistoryId (\ s a -> s{_wrHistoryId = a}) .
+      mapping _Coerce
+
+instance FromJSON WatchResponse where
+        parseJSON
+          = withObject "WatchResponse"
+              (\ o ->
+                 WatchResponse <$>
+                   (o .:? "expiration") <*> (o .:? "historyId"))
+
+instance ToJSON WatchResponse where
+        toJSON WatchResponse{..}
+          = object
+              (catMaybes
+                 [("expiration" .=) <$> _wrExpiration,
+                  ("historyId" .=) <$> _wrHistoryId])
+
+-- | A draft email in the user\'s mailbox.
+--
+-- /See:/ 'draft' smart constructor.
+data Draft = Draft
+    { _dId      :: !(Maybe Text)
+    , _dMessage :: !(Maybe Message)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Draft' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dId'
+--
+-- * 'dMessage'
+draft
+    :: Draft
+draft =
+    Draft
+    { _dId = Nothing
+    , _dMessage = Nothing
+    }
+
+-- | The immutable ID of the draft.
+dId :: Lens' Draft (Maybe Text)
+dId = lens _dId (\ s a -> s{_dId = a})
+
+-- | The message content of the draft.
+dMessage :: Lens' Draft (Maybe Message)
+dMessage = lens _dMessage (\ s a -> s{_dMessage = a})
+
+instance FromJSON Draft where
+        parseJSON
+          = withObject "Draft"
+              (\ o -> Draft <$> (o .:? "id") <*> (o .:? "message"))
+
+instance ToJSON Draft where
+        toJSON Draft{..}
+          = object
+              (catMaybes
+                 [("id" .=) <$> _dId, ("message" .=) <$> _dMessage])
+
+-- | Set up or update a new push notification watch on this user\'s mailbox.
+--
+-- /See:/ 'watchRequest' smart constructor.
+data WatchRequest = WatchRequest
+    { _wrLabelFilterAction :: !(Maybe WatchRequestLabelFilterAction)
+    , _wrTopicName         :: !(Maybe Text)
+    , _wrLabelIds          :: !(Maybe [Text])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'WatchRequest' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'wrLabelFilterAction'
+--
+-- * 'wrTopicName'
+--
+-- * 'wrLabelIds'
+watchRequest
+    :: WatchRequest
+watchRequest =
+    WatchRequest
+    { _wrLabelFilterAction = Nothing
+    , _wrTopicName = Nothing
+    , _wrLabelIds = Nothing
+    }
+
+-- | Filtering behavior of labelIds list specified.
+wrLabelFilterAction :: Lens' WatchRequest (Maybe WatchRequestLabelFilterAction)
+wrLabelFilterAction
+  = lens _wrLabelFilterAction
+      (\ s a -> s{_wrLabelFilterAction = a})
+
+-- | A fully qualified Google Cloud Pub\/Sub API topic name to publish the
+-- events to. This topic name **must** already exist in Cloud Pub\/Sub and
+-- you **must** have already granted gmail \"publish\" permission on it.
+-- For example, \"projects\/my-project-identifier\/topics\/my-topic-name\"
+-- (using the new Cloud Pub\/Sub \"v1beta2\" topic naming format). Note
+-- that the \"my-project-identifier\" portion must exactly match your
+-- Google developer project id (the one executing this watch request).
+wrTopicName :: Lens' WatchRequest (Maybe Text)
+wrTopicName
+  = lens _wrTopicName (\ s a -> s{_wrTopicName = a})
+
+-- | List of label_ids to restrict notifications about. By default, if
+-- unspecified, all changes are pushed out. If specified then dictates
+-- which labels are required for a push notification to be generated.
+wrLabelIds :: Lens' WatchRequest [Text]
+wrLabelIds
+  = lens _wrLabelIds (\ s a -> s{_wrLabelIds = a}) .
+      _Default
+      . _Coerce
+
+instance FromJSON WatchRequest where
+        parseJSON
+          = withObject "WatchRequest"
+              (\ o ->
+                 WatchRequest <$>
+                   (o .:? "labelFilterAction") <*> (o .:? "topicName")
+                     <*> (o .:? "labelIds" .!= mempty))
+
+instance ToJSON WatchRequest where
+        toJSON WatchRequest{..}
+          = object
+              (catMaybes
+                 [("labelFilterAction" .=) <$> _wrLabelFilterAction,
+                  ("topicName" .=) <$> _wrTopicName,
+                  ("labelIds" .=) <$> _wrLabelIds])
+
+-- | An email message.
+--
+-- /See:/ 'message' smart constructor.
+data Message = Message
+    { _mRaw          :: !(Maybe (Textual Word8))
+    , _mSnippet      :: !(Maybe Text)
+    , _mSizeEstimate :: !(Maybe (Textual Int32))
+    , _mPayload      :: !(Maybe MessagePart)
+    , _mHistoryId    :: !(Maybe (Textual Word64))
+    , _mId           :: !(Maybe Text)
+    , _mLabelIds     :: !(Maybe [Text])
+    , _mThreadId     :: !(Maybe Text)
+    , _mInternalDate :: !(Maybe (Textual Int64))
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Message' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'mRaw'
+--
+-- * 'mSnippet'
+--
+-- * 'mSizeEstimate'
+--
+-- * 'mPayload'
+--
+-- * 'mHistoryId'
+--
+-- * 'mId'
+--
+-- * 'mLabelIds'
+--
+-- * 'mThreadId'
+--
+-- * 'mInternalDate'
+message
+    :: Message
+message =
+    Message
+    { _mRaw = Nothing
+    , _mSnippet = Nothing
+    , _mSizeEstimate = Nothing
+    , _mPayload = Nothing
+    , _mHistoryId = Nothing
+    , _mId = Nothing
+    , _mLabelIds = Nothing
+    , _mThreadId = Nothing
+    , _mInternalDate = Nothing
+    }
+
+-- | The entire email message in an RFC 2822 formatted and base64url encoded
+-- string. Returned in messages.get and drafts.get responses when the
+-- format=RAW parameter is supplied.
+mRaw :: Lens' Message (Maybe Word8)
+mRaw
+  = lens _mRaw (\ s a -> s{_mRaw = a}) .
+      mapping _Coerce
+
+-- | A short part of the message text.
+mSnippet :: Lens' Message (Maybe Text)
+mSnippet = lens _mSnippet (\ s a -> s{_mSnippet = a})
+
+-- | Estimated size in bytes of the message.
+mSizeEstimate :: Lens' Message (Maybe Int32)
+mSizeEstimate
+  = lens _mSizeEstimate
+      (\ s a -> s{_mSizeEstimate = a})
+      . mapping _Coerce
+
+-- | The parsed email structure in the message parts.
+mPayload :: Lens' Message (Maybe MessagePart)
+mPayload = lens _mPayload (\ s a -> s{_mPayload = a})
+
+-- | The ID of the last history record that modified this message.
+mHistoryId :: Lens' Message (Maybe Word64)
+mHistoryId
+  = lens _mHistoryId (\ s a -> s{_mHistoryId = a}) .
+      mapping _Coerce
+
+-- | The immutable ID of the message.
+mId :: Lens' Message (Maybe Text)
+mId = lens _mId (\ s a -> s{_mId = a})
+
+-- | List of IDs of labels applied to this message.
+mLabelIds :: Lens' Message [Text]
+mLabelIds
+  = lens _mLabelIds (\ s a -> s{_mLabelIds = a}) .
+      _Default
+      . _Coerce
+
+-- | The ID of the thread the message belongs to. To add a message or draft
+-- to a thread, the following criteria must be met: - The requested
+-- threadId must be specified on the Message or Draft.Message you supply
+-- with your request. - The References and In-Reply-To headers must be set
+-- in compliance with the RFC 2822 standard. - The Subject headers must
+-- match.
+mThreadId :: Lens' Message (Maybe Text)
+mThreadId
+  = lens _mThreadId (\ s a -> s{_mThreadId = a})
+
+-- | The internal message creation timestamp (epoch ms), which determines
+-- ordering in the inbox. For normal SMTP-received email, this represents
+-- the time the message was originally accepted by Google, which is more
+-- reliable than the Date header. However, for API-migrated mail, it can be
+-- configured by client to be based on the Date header.
+mInternalDate :: Lens' Message (Maybe Int64)
+mInternalDate
+  = lens _mInternalDate
+      (\ s a -> s{_mInternalDate = a})
+      . mapping _Coerce
+
+instance FromJSON Message where
+        parseJSON
+          = withObject "Message"
+              (\ o ->
+                 Message <$>
+                   (o .:? "raw") <*> (o .:? "snippet") <*>
+                     (o .:? "sizeEstimate")
+                     <*> (o .:? "payload")
+                     <*> (o .:? "historyId")
+                     <*> (o .:? "id")
+                     <*> (o .:? "labelIds" .!= mempty)
+                     <*> (o .:? "threadId")
+                     <*> (o .:? "internalDate"))
+
+instance ToJSON Message where
+        toJSON Message{..}
+          = object
+              (catMaybes
+                 [("raw" .=) <$> _mRaw, ("snippet" .=) <$> _mSnippet,
+                  ("sizeEstimate" .=) <$> _mSizeEstimate,
+                  ("payload" .=) <$> _mPayload,
+                  ("historyId" .=) <$> _mHistoryId, ("id" .=) <$> _mId,
+                  ("labelIds" .=) <$> _mLabelIds,
+                  ("threadId" .=) <$> _mThreadId,
+                  ("internalDate" .=) <$> _mInternalDate])
+
+--
+-- /See:/ 'historyLabelRemoved' smart constructor.
+data HistoryLabelRemoved = HistoryLabelRemoved
+    { _hlrLabelIds :: !(Maybe [Text])
+    , _hlrMessage  :: !(Maybe Message)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'HistoryLabelRemoved' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'hlrLabelIds'
+--
+-- * 'hlrMessage'
+historyLabelRemoved
+    :: HistoryLabelRemoved
+historyLabelRemoved =
+    HistoryLabelRemoved
+    { _hlrLabelIds = Nothing
+    , _hlrMessage = Nothing
+    }
+
+-- | Label IDs removed from the message.
+hlrLabelIds :: Lens' HistoryLabelRemoved [Text]
+hlrLabelIds
+  = lens _hlrLabelIds (\ s a -> s{_hlrLabelIds = a}) .
+      _Default
+      . _Coerce
+
+hlrMessage :: Lens' HistoryLabelRemoved (Maybe Message)
+hlrMessage
+  = lens _hlrMessage (\ s a -> s{_hlrMessage = a})
+
+instance FromJSON HistoryLabelRemoved where
+        parseJSON
+          = withObject "HistoryLabelRemoved"
+              (\ o ->
+                 HistoryLabelRemoved <$>
+                   (o .:? "labelIds" .!= mempty) <*> (o .:? "message"))
+
+instance ToJSON HistoryLabelRemoved where
+        toJSON HistoryLabelRemoved{..}
+          = object
+              (catMaybes
+                 [("labelIds" .=) <$> _hlrLabelIds,
+                  ("message" .=) <$> _hlrMessage])
+
+-- | A collection of messages representing a conversation.
+--
+-- /See:/ 'thread' smart constructor.
+data Thread = Thread
+    { _tSnippet   :: !(Maybe Text)
+    , _tHistoryId :: !(Maybe (Textual Word64))
+    , _tId        :: !(Maybe Text)
+    , _tMessages  :: !(Maybe [Message])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Thread' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'tSnippet'
+--
+-- * 'tHistoryId'
+--
+-- * 'tId'
+--
+-- * 'tMessages'
+thread
+    :: Thread
+thread =
+    Thread
+    { _tSnippet = Nothing
+    , _tHistoryId = Nothing
+    , _tId = Nothing
+    , _tMessages = Nothing
+    }
+
+-- | A short part of the message text.
+tSnippet :: Lens' Thread (Maybe Text)
+tSnippet = lens _tSnippet (\ s a -> s{_tSnippet = a})
+
+-- | The ID of the last history record that modified this thread.
+tHistoryId :: Lens' Thread (Maybe Word64)
+tHistoryId
+  = lens _tHistoryId (\ s a -> s{_tHistoryId = a}) .
+      mapping _Coerce
+
+-- | The unique ID of the thread.
+tId :: Lens' Thread (Maybe Text)
+tId = lens _tId (\ s a -> s{_tId = a})
+
+-- | The list of messages in the thread.
+tMessages :: Lens' Thread [Message]
+tMessages
+  = lens _tMessages (\ s a -> s{_tMessages = a}) .
+      _Default
+      . _Coerce
+
+instance FromJSON Thread where
+        parseJSON
+          = withObject "Thread"
+              (\ o ->
+                 Thread <$>
+                   (o .:? "snippet") <*> (o .:? "historyId") <*>
+                     (o .:? "id")
+                     <*> (o .:? "messages" .!= mempty))
+
+instance ToJSON Thread where
+        toJSON Thread{..}
+          = object
+              (catMaybes
+                 [("snippet" .=) <$> _tSnippet,
+                  ("historyId" .=) <$> _tHistoryId, ("id" .=) <$> _tId,
+                  ("messages" .=) <$> _tMessages])
+
+-- | Labels are used to categorize messages and threads within the user\'s
+-- mailbox.
+--
+-- /See:/ 'label' smart constructor.
+data Label = Label
+    { _lThreadsUnread         :: !(Maybe (Textual Int32))
+    , _lMessageListVisibility :: !(Maybe LabelMessageListVisibility)
+    , _lMessagesTotal         :: !(Maybe (Textual Int32))
+    , _lMessagesUnread        :: !(Maybe (Textual Int32))
+    , _lName                  :: !(Maybe Text)
+    , _lThreadsTotal          :: !(Maybe (Textual Int32))
+    , _lLabelListVisibility   :: !(Maybe LabelLabelListVisibility)
+    , _lId                    :: !(Maybe Text)
+    , _lType                  :: !(Maybe LabelType)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Label' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'lThreadsUnread'
+--
+-- * 'lMessageListVisibility'
+--
+-- * 'lMessagesTotal'
+--
+-- * 'lMessagesUnread'
+--
+-- * 'lName'
+--
+-- * 'lThreadsTotal'
+--
+-- * 'lLabelListVisibility'
+--
+-- * 'lId'
+--
+-- * 'lType'
+label
+    :: Label
+label =
+    Label
+    { _lThreadsUnread = Nothing
+    , _lMessageListVisibility = Nothing
+    , _lMessagesTotal = Nothing
+    , _lMessagesUnread = Nothing
+    , _lName = Nothing
+    , _lThreadsTotal = Nothing
+    , _lLabelListVisibility = Nothing
+    , _lId = Nothing
+    , _lType = Nothing
+    }
+
+-- | The number of unread threads with the label.
+lThreadsUnread :: Lens' Label (Maybe Int32)
+lThreadsUnread
+  = lens _lThreadsUnread
+      (\ s a -> s{_lThreadsUnread = a})
+      . mapping _Coerce
+
+-- | The visibility of the label in the message list in the Gmail web
+-- interface.
+lMessageListVisibility :: Lens' Label (Maybe LabelMessageListVisibility)
+lMessageListVisibility
+  = lens _lMessageListVisibility
+      (\ s a -> s{_lMessageListVisibility = a})
+
+-- | The total number of messages with the label.
+lMessagesTotal :: Lens' Label (Maybe Int32)
+lMessagesTotal
+  = lens _lMessagesTotal
+      (\ s a -> s{_lMessagesTotal = a})
+      . mapping _Coerce
+
+-- | The number of unread messages with the label.
+lMessagesUnread :: Lens' Label (Maybe Int32)
+lMessagesUnread
+  = lens _lMessagesUnread
+      (\ s a -> s{_lMessagesUnread = a})
+      . mapping _Coerce
+
+-- | The display name of the label.
+lName :: Lens' Label (Maybe Text)
+lName = lens _lName (\ s a -> s{_lName = a})
+
+-- | The total number of threads with the label.
+lThreadsTotal :: Lens' Label (Maybe Int32)
+lThreadsTotal
+  = lens _lThreadsTotal
+      (\ s a -> s{_lThreadsTotal = a})
+      . mapping _Coerce
+
+-- | The visibility of the label in the label list in the Gmail web
+-- interface.
+lLabelListVisibility :: Lens' Label (Maybe LabelLabelListVisibility)
+lLabelListVisibility
+  = lens _lLabelListVisibility
+      (\ s a -> s{_lLabelListVisibility = a})
+
+-- | The immutable ID of the label.
+lId :: Lens' Label (Maybe Text)
+lId = lens _lId (\ s a -> s{_lId = a})
+
+-- | The owner type for the label. User labels are created by the user and
+-- can be modified and deleted by the user and can be applied to any
+-- message or thread. System labels are internally created and cannot be
+-- added, modified, or deleted. System labels may be able to be applied to
+-- or removed from messages and threads under some circumstances but this
+-- is not guaranteed. For example, users can apply and remove the INBOX and
+-- UNREAD labels from messages and threads, but cannot apply or remove the
+-- DRAFTS or SENT labels from messages or threads.
+lType :: Lens' Label (Maybe LabelType)
+lType = lens _lType (\ s a -> s{_lType = a})
+
+instance FromJSON Label where
+        parseJSON
+          = withObject "Label"
+              (\ o ->
+                 Label <$>
+                   (o .:? "threadsUnread") <*>
+                     (o .:? "messageListVisibility")
+                     <*> (o .:? "messagesTotal")
+                     <*> (o .:? "messagesUnread")
+                     <*> (o .:? "name")
+                     <*> (o .:? "threadsTotal")
+                     <*> (o .:? "labelListVisibility")
+                     <*> (o .:? "id")
+                     <*> (o .:? "type"))
+
+instance ToJSON Label where
+        toJSON Label{..}
+          = object
+              (catMaybes
+                 [("threadsUnread" .=) <$> _lThreadsUnread,
+                  ("messageListVisibility" .=) <$>
+                    _lMessageListVisibility,
+                  ("messagesTotal" .=) <$> _lMessagesTotal,
+                  ("messagesUnread" .=) <$> _lMessagesUnread,
+                  ("name" .=) <$> _lName,
+                  ("threadsTotal" .=) <$> _lThreadsTotal,
+                  ("labelListVisibility" .=) <$> _lLabelListVisibility,
+                  ("id" .=) <$> _lId, ("type" .=) <$> _lType])
+
+--
+-- /See:/ 'listMessagesResponse' smart constructor.
+data ListMessagesResponse = ListMessagesResponse
+    { _lmrNextPageToken      :: !(Maybe Text)
+    , _lmrResultSizeEstimate :: !(Maybe (Textual Word32))
+    , _lmrMessages           :: !(Maybe [Message])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ListMessagesResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'lmrNextPageToken'
+--
+-- * 'lmrResultSizeEstimate'
+--
+-- * 'lmrMessages'
+listMessagesResponse
+    :: ListMessagesResponse
+listMessagesResponse =
+    ListMessagesResponse
+    { _lmrNextPageToken = Nothing
+    , _lmrResultSizeEstimate = Nothing
+    , _lmrMessages = Nothing
+    }
+
+-- | Token to retrieve the next page of results in the list.
+lmrNextPageToken :: Lens' ListMessagesResponse (Maybe Text)
+lmrNextPageToken
+  = lens _lmrNextPageToken
+      (\ s a -> s{_lmrNextPageToken = a})
+
+-- | Estimated total number of results.
+lmrResultSizeEstimate :: Lens' ListMessagesResponse (Maybe Word32)
+lmrResultSizeEstimate
+  = lens _lmrResultSizeEstimate
+      (\ s a -> s{_lmrResultSizeEstimate = a})
+      . mapping _Coerce
+
+-- | List of messages.
+lmrMessages :: Lens' ListMessagesResponse [Message]
+lmrMessages
+  = lens _lmrMessages (\ s a -> s{_lmrMessages = a}) .
+      _Default
+      . _Coerce
+
+instance FromJSON ListMessagesResponse where
+        parseJSON
+          = withObject "ListMessagesResponse"
+              (\ o ->
+                 ListMessagesResponse <$>
+                   (o .:? "nextPageToken") <*>
+                     (o .:? "resultSizeEstimate")
+                     <*> (o .:? "messages" .!= mempty))
+
+instance ToJSON ListMessagesResponse where
+        toJSON ListMessagesResponse{..}
+          = object
+              (catMaybes
+                 [("nextPageToken" .=) <$> _lmrNextPageToken,
+                  ("resultSizeEstimate" .=) <$> _lmrResultSizeEstimate,
+                  ("messages" .=) <$> _lmrMessages])
+
+--
+-- /See:/ 'historyMessageAdded' smart constructor.
+newtype HistoryMessageAdded = HistoryMessageAdded
+    { _hmaMessage :: Maybe Message
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'HistoryMessageAdded' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'hmaMessage'
+historyMessageAdded
+    :: HistoryMessageAdded
+historyMessageAdded =
+    HistoryMessageAdded
+    { _hmaMessage = Nothing
+    }
+
+hmaMessage :: Lens' HistoryMessageAdded (Maybe Message)
+hmaMessage
+  = lens _hmaMessage (\ s a -> s{_hmaMessage = a})
+
+instance FromJSON HistoryMessageAdded where
+        parseJSON
+          = withObject "HistoryMessageAdded"
+              (\ o -> HistoryMessageAdded <$> (o .:? "message"))
+
+instance ToJSON HistoryMessageAdded where
+        toJSON HistoryMessageAdded{..}
+          = object (catMaybes [("message" .=) <$> _hmaMessage])
diff --git a/gen/Network/Google/Gmail/Types/Sum.hs b/gen/Network/Google/Gmail/Types/Sum.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Gmail/Types/Sum.hs
@@ -0,0 +1,295 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE LambdaCase         #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- |
+-- Module      : Network.Google.Gmail.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.Gmail.Types.Sum where
+
+import           Network.Google.Prelude
+
+-- | The format to return the message in.
+data UsersMessagesGetFormat
+    = Full
+      -- ^ @full@
+    | Metadata
+      -- ^ @metadata@
+    | Minimal
+      -- ^ @minimal@
+    | Raw
+      -- ^ @raw@
+      deriving (Eq,Ord,Enum,Read,Show,Data,Typeable,Generic)
+
+instance Hashable UsersMessagesGetFormat
+
+instance FromText UsersMessagesGetFormat where
+    fromText = \case
+        "full" -> Just Full
+        "metadata" -> Just Metadata
+        "minimal" -> Just Minimal
+        "raw" -> Just Raw
+        _ -> Nothing
+
+instance ToText UsersMessagesGetFormat where
+    toText = \case
+        Full -> "full"
+        Metadata -> "metadata"
+        Minimal -> "minimal"
+        Raw -> "raw"
+
+instance FromJSON UsersMessagesGetFormat where
+    parseJSON = parseJSONText "UsersMessagesGetFormat"
+
+instance ToJSON UsersMessagesGetFormat where
+    toJSON = toJSONText
+
+-- | The owner type for the label. User labels are created by the user and
+-- can be modified and deleted by the user and can be applied to any
+-- message or thread. System labels are internally created and cannot be
+-- added, modified, or deleted. System labels may be able to be applied to
+-- or removed from messages and threads under some circumstances but this
+-- is not guaranteed. For example, users can apply and remove the INBOX and
+-- UNREAD labels from messages and threads, but cannot apply or remove the
+-- DRAFTS or SENT labels from messages or threads.
+data LabelType
+    = System
+      -- ^ @system@
+    | User
+      -- ^ @user@
+      deriving (Eq,Ord,Enum,Read,Show,Data,Typeable,Generic)
+
+instance Hashable LabelType
+
+instance FromText LabelType where
+    fromText = \case
+        "system" -> Just System
+        "user" -> Just User
+        _ -> Nothing
+
+instance ToText LabelType where
+    toText = \case
+        System -> "system"
+        User -> "user"
+
+instance FromJSON LabelType where
+    parseJSON = parseJSONText "LabelType"
+
+instance ToJSON LabelType where
+    toJSON = toJSONText
+
+-- | The format to return the draft in.
+data UsersDraftsGetFormat
+    = UDGFFull
+      -- ^ @full@
+    | UDGFMetadata
+      -- ^ @metadata@
+    | UDGFMinimal
+      -- ^ @minimal@
+    | UDGFRaw
+      -- ^ @raw@
+      deriving (Eq,Ord,Enum,Read,Show,Data,Typeable,Generic)
+
+instance Hashable UsersDraftsGetFormat
+
+instance FromText UsersDraftsGetFormat where
+    fromText = \case
+        "full" -> Just UDGFFull
+        "metadata" -> Just UDGFMetadata
+        "minimal" -> Just UDGFMinimal
+        "raw" -> Just UDGFRaw
+        _ -> Nothing
+
+instance ToText UsersDraftsGetFormat where
+    toText = \case
+        UDGFFull -> "full"
+        UDGFMetadata -> "metadata"
+        UDGFMinimal -> "minimal"
+        UDGFRaw -> "raw"
+
+instance FromJSON UsersDraftsGetFormat where
+    parseJSON = parseJSONText "UsersDraftsGetFormat"
+
+instance ToJSON UsersDraftsGetFormat where
+    toJSON = toJSONText
+
+-- | Source for Gmail\'s internal date of the message.
+data UsersMessagesImportInternalDateSource
+    = DateHeader
+      -- ^ @dateHeader@
+    | ReceivedTime
+      -- ^ @receivedTime@
+      deriving (Eq,Ord,Enum,Read,Show,Data,Typeable,Generic)
+
+instance Hashable UsersMessagesImportInternalDateSource
+
+instance FromText UsersMessagesImportInternalDateSource where
+    fromText = \case
+        "dateHeader" -> Just DateHeader
+        "receivedTime" -> Just ReceivedTime
+        _ -> Nothing
+
+instance ToText UsersMessagesImportInternalDateSource where
+    toText = \case
+        DateHeader -> "dateHeader"
+        ReceivedTime -> "receivedTime"
+
+instance FromJSON UsersMessagesImportInternalDateSource where
+    parseJSON = parseJSONText "UsersMessagesImportInternalDateSource"
+
+instance ToJSON UsersMessagesImportInternalDateSource where
+    toJSON = toJSONText
+
+-- | The visibility of the label in the message list in the Gmail web
+-- interface.
+data LabelMessageListVisibility
+    = Hide
+      -- ^ @hide@
+    | Show
+      -- ^ @show@
+      deriving (Eq,Ord,Enum,Read,Show,Data,Typeable,Generic)
+
+instance Hashable LabelMessageListVisibility
+
+instance FromText LabelMessageListVisibility where
+    fromText = \case
+        "hide" -> Just Hide
+        "show" -> Just Show
+        _ -> Nothing
+
+instance ToText LabelMessageListVisibility where
+    toText = \case
+        Hide -> "hide"
+        Show -> "show"
+
+instance FromJSON LabelMessageListVisibility where
+    parseJSON = parseJSONText "LabelMessageListVisibility"
+
+instance ToJSON LabelMessageListVisibility where
+    toJSON = toJSONText
+
+-- | The visibility of the label in the label list in the Gmail web
+-- interface.
+data LabelLabelListVisibility
+    = LabelHide
+      -- ^ @labelHide@
+    | LabelShow
+      -- ^ @labelShow@
+    | LabelShowIfUnread
+      -- ^ @labelShowIfUnread@
+      deriving (Eq,Ord,Enum,Read,Show,Data,Typeable,Generic)
+
+instance Hashable LabelLabelListVisibility
+
+instance FromText LabelLabelListVisibility where
+    fromText = \case
+        "labelHide" -> Just LabelHide
+        "labelShow" -> Just LabelShow
+        "labelShowIfUnread" -> Just LabelShowIfUnread
+        _ -> Nothing
+
+instance ToText LabelLabelListVisibility where
+    toText = \case
+        LabelHide -> "labelHide"
+        LabelShow -> "labelShow"
+        LabelShowIfUnread -> "labelShowIfUnread"
+
+instance FromJSON LabelLabelListVisibility where
+    parseJSON = parseJSONText "LabelLabelListVisibility"
+
+instance ToJSON LabelLabelListVisibility where
+    toJSON = toJSONText
+
+-- | The format to return the messages in.
+data UsersThreadsGetFormat
+    = UTGFFull
+      -- ^ @full@
+    | UTGFMetadata
+      -- ^ @metadata@
+    | UTGFMinimal
+      -- ^ @minimal@
+      deriving (Eq,Ord,Enum,Read,Show,Data,Typeable,Generic)
+
+instance Hashable UsersThreadsGetFormat
+
+instance FromText UsersThreadsGetFormat where
+    fromText = \case
+        "full" -> Just UTGFFull
+        "metadata" -> Just UTGFMetadata
+        "minimal" -> Just UTGFMinimal
+        _ -> Nothing
+
+instance ToText UsersThreadsGetFormat where
+    toText = \case
+        UTGFFull -> "full"
+        UTGFMetadata -> "metadata"
+        UTGFMinimal -> "minimal"
+
+instance FromJSON UsersThreadsGetFormat where
+    parseJSON = parseJSONText "UsersThreadsGetFormat"
+
+instance ToJSON UsersThreadsGetFormat where
+    toJSON = toJSONText
+
+-- | Filtering behavior of labelIds list specified.
+data WatchRequestLabelFilterAction
+    = Exclude
+      -- ^ @exclude@
+    | Include
+      -- ^ @include@
+      deriving (Eq,Ord,Enum,Read,Show,Data,Typeable,Generic)
+
+instance Hashable WatchRequestLabelFilterAction
+
+instance FromText WatchRequestLabelFilterAction where
+    fromText = \case
+        "exclude" -> Just Exclude
+        "include" -> Just Include
+        _ -> Nothing
+
+instance ToText WatchRequestLabelFilterAction where
+    toText = \case
+        Exclude -> "exclude"
+        Include -> "include"
+
+instance FromJSON WatchRequestLabelFilterAction where
+    parseJSON = parseJSONText "WatchRequestLabelFilterAction"
+
+instance ToJSON WatchRequestLabelFilterAction where
+    toJSON = toJSONText
+
+-- | Source for Gmail\'s internal date of the message.
+data UsersMessagesInsertInternalDateSource
+    = UMIIDSDateHeader
+      -- ^ @dateHeader@
+    | UMIIDSReceivedTime
+      -- ^ @receivedTime@
+      deriving (Eq,Ord,Enum,Read,Show,Data,Typeable,Generic)
+
+instance Hashable UsersMessagesInsertInternalDateSource
+
+instance FromText UsersMessagesInsertInternalDateSource where
+    fromText = \case
+        "dateHeader" -> Just UMIIDSDateHeader
+        "receivedTime" -> Just UMIIDSReceivedTime
+        _ -> Nothing
+
+instance ToText UsersMessagesInsertInternalDateSource where
+    toText = \case
+        UMIIDSDateHeader -> "dateHeader"
+        UMIIDSReceivedTime -> "receivedTime"
+
+instance FromJSON UsersMessagesInsertInternalDateSource where
+    parseJSON = parseJSONText "UsersMessagesInsertInternalDateSource"
+
+instance ToJSON UsersMessagesInsertInternalDateSource where
+    toJSON = toJSONText
diff --git a/gen/Network/Google/Resource/Gmail/Users/Drafts/Create.hs b/gen/Network/Google/Resource/Gmail/Users/Drafts/Create.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Gmail/Users/Drafts/Create.hs
@@ -0,0 +1,123 @@
+{-# 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.Gmail.Users.Drafts.Create
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates a new draft with the DRAFT label.
+--
+-- /See:/ <https://developers.google.com/gmail/api/ Gmail API Reference> for @gmail.users.drafts.create@.
+module Network.Google.Resource.Gmail.Users.Drafts.Create
+    (
+    -- * REST Resource
+      UsersDraftsCreateResource
+
+    -- * Creating a Request
+    , usersDraftsCreate
+    , UsersDraftsCreate
+
+    -- * Request Lenses
+    , udcPayload
+    , udcUserId
+    ) where
+
+import           Network.Google.Gmail.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @gmail.users.drafts.create@ method which the
+-- 'UsersDraftsCreate' request conforms to.
+type UsersDraftsCreateResource =
+     "gmail" :>
+       "v1" :>
+         "users" :>
+           Capture "userId" Text :>
+             "drafts" :>
+               QueryParam "alt" AltJSON :>
+                 ReqBody '[JSON] Draft :> Post '[JSON] Draft
+       :<|>
+       "upload" :>
+         "gmail" :>
+           "v1" :>
+             "users" :>
+               Capture "userId" Text :>
+                 "drafts" :>
+                   QueryParam "alt" AltJSON :>
+                     QueryParam "uploadType" AltMedia :>
+                       MultipartRelated '[JSON] Draft RequestBody :>
+                         Post '[JSON] Draft
+
+-- | Creates a new draft with the DRAFT label.
+--
+-- /See:/ 'usersDraftsCreate' smart constructor.
+data UsersDraftsCreate = UsersDraftsCreate
+    { _udcPayload :: !Draft
+    , _udcUserId  :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'UsersDraftsCreate' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'udcPayload'
+--
+-- * 'udcUserId'
+usersDraftsCreate
+    :: Draft -- ^ 'udcPayload'
+    -> Text
+    -> UsersDraftsCreate
+usersDraftsCreate pUdcPayload_ pUdcUserId_ =
+    UsersDraftsCreate
+    { _udcPayload = pUdcPayload_
+    , _udcUserId = "me"
+    }
+
+-- | Multipart request metadata.
+udcPayload :: Lens' UsersDraftsCreate Draft
+udcPayload
+  = lens _udcPayload (\ s a -> s{_udcPayload = a})
+
+-- | The user\'s email address. The special value me can be used to indicate
+-- the authenticated user.
+udcUserId :: Lens' UsersDraftsCreate Text
+udcUserId
+  = lens _udcUserId (\ s a -> s{_udcUserId = a})
+
+instance GoogleRequest UsersDraftsCreate where
+        type Rs UsersDraftsCreate = Draft
+        requestClient UsersDraftsCreate{..}
+          = go _udcUserId (Just AltJSON) _udcPayload
+              gmailService
+          where go :<|> _
+                  = buildClient
+                      (Proxy :: Proxy UsersDraftsCreateResource)
+                      mempty
+
+instance GoogleRequest
+         (MediaUpload UsersDraftsCreate) where
+        type Rs (MediaUpload UsersDraftsCreate) = Draft
+        requestClient
+          (MediaUpload UsersDraftsCreate{..} body)
+          = go _udcUserId (Just AltJSON) (Just AltMedia)
+              _udcPayload
+              body
+              gmailService
+          where _ :<|> go
+                  = buildClient
+                      (Proxy :: Proxy UsersDraftsCreateResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Gmail/Users/Drafts/Delete.hs b/gen/Network/Google/Resource/Gmail/Users/Drafts/Delete.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Gmail/Users/Drafts/Delete.hs
@@ -0,0 +1,98 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.Gmail.Users.Drafts.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)
+--
+-- Immediately and permanently deletes the specified draft. Does not simply
+-- trash it.
+--
+-- /See:/ <https://developers.google.com/gmail/api/ Gmail API Reference> for @gmail.users.drafts.delete@.
+module Network.Google.Resource.Gmail.Users.Drafts.Delete
+    (
+    -- * REST Resource
+      UsersDraftsDeleteResource
+
+    -- * Creating a Request
+    , usersDraftsDelete
+    , UsersDraftsDelete
+
+    -- * Request Lenses
+    , uddUserId
+    , uddId
+    ) where
+
+import           Network.Google.Gmail.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @gmail.users.drafts.delete@ method which the
+-- 'UsersDraftsDelete' request conforms to.
+type UsersDraftsDeleteResource =
+     "gmail" :>
+       "v1" :>
+         "users" :>
+           Capture "userId" Text :>
+             "drafts" :>
+               Capture "id" Text :>
+                 QueryParam "alt" AltJSON :> Delete '[JSON] ()
+
+-- | Immediately and permanently deletes the specified draft. Does not simply
+-- trash it.
+--
+-- /See:/ 'usersDraftsDelete' smart constructor.
+data UsersDraftsDelete = UsersDraftsDelete
+    { _uddUserId :: !Text
+    , _uddId     :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'UsersDraftsDelete' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'uddUserId'
+--
+-- * 'uddId'
+usersDraftsDelete
+    :: Text -- ^ 'uddId'
+    -> Text
+    -> UsersDraftsDelete
+usersDraftsDelete pUddUserId_ pUddId_ =
+    UsersDraftsDelete
+    { _uddUserId = "me"
+    , _uddId = pUddId_
+    }
+
+-- | The user\'s email address. The special value me can be used to indicate
+-- the authenticated user.
+uddUserId :: Lens' UsersDraftsDelete Text
+uddUserId
+  = lens _uddUserId (\ s a -> s{_uddUserId = a})
+
+-- | The ID of the draft to delete.
+uddId :: Lens' UsersDraftsDelete Text
+uddId = lens _uddId (\ s a -> s{_uddId = a})
+
+instance GoogleRequest UsersDraftsDelete where
+        type Rs UsersDraftsDelete = ()
+        requestClient UsersDraftsDelete{..}
+          = go _uddUserId _uddId (Just AltJSON) gmailService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy UsersDraftsDeleteResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Gmail/Users/Drafts/Get.hs b/gen/Network/Google/Resource/Gmail/Users/Drafts/Get.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Gmail/Users/Drafts/Get.hs
@@ -0,0 +1,108 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.Gmail.Users.Drafts.Get
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Gets the specified draft.
+--
+-- /See:/ <https://developers.google.com/gmail/api/ Gmail API Reference> for @gmail.users.drafts.get@.
+module Network.Google.Resource.Gmail.Users.Drafts.Get
+    (
+    -- * REST Resource
+      UsersDraftsGetResource
+
+    -- * Creating a Request
+    , usersDraftsGet
+    , UsersDraftsGet
+
+    -- * Request Lenses
+    , udgFormat
+    , udgUserId
+    , udgId
+    ) where
+
+import           Network.Google.Gmail.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @gmail.users.drafts.get@ method which the
+-- 'UsersDraftsGet' request conforms to.
+type UsersDraftsGetResource =
+     "gmail" :>
+       "v1" :>
+         "users" :>
+           Capture "userId" Text :>
+             "drafts" :>
+               Capture "id" Text :>
+                 QueryParam "format" UsersDraftsGetFormat :>
+                   QueryParam "alt" AltJSON :> Get '[JSON] Draft
+
+-- | Gets the specified draft.
+--
+-- /See:/ 'usersDraftsGet' smart constructor.
+data UsersDraftsGet = UsersDraftsGet
+    { _udgFormat :: !UsersDraftsGetFormat
+    , _udgUserId :: !Text
+    , _udgId     :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'UsersDraftsGet' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'udgFormat'
+--
+-- * 'udgUserId'
+--
+-- * 'udgId'
+usersDraftsGet
+    :: Text -- ^ 'udgId'
+    -> Text
+    -> UsersDraftsGet
+usersDraftsGet pUdgUserId_ pUdgId_ =
+    UsersDraftsGet
+    { _udgFormat = UDGFFull
+    , _udgUserId = "me"
+    , _udgId = pUdgId_
+    }
+
+-- | The format to return the draft in.
+udgFormat :: Lens' UsersDraftsGet UsersDraftsGetFormat
+udgFormat
+  = lens _udgFormat (\ s a -> s{_udgFormat = a})
+
+-- | The user\'s email address. The special value me can be used to indicate
+-- the authenticated user.
+udgUserId :: Lens' UsersDraftsGet Text
+udgUserId
+  = lens _udgUserId (\ s a -> s{_udgUserId = a})
+
+-- | The ID of the draft to retrieve.
+udgId :: Lens' UsersDraftsGet Text
+udgId = lens _udgId (\ s a -> s{_udgId = a})
+
+instance GoogleRequest UsersDraftsGet where
+        type Rs UsersDraftsGet = Draft
+        requestClient UsersDraftsGet{..}
+          = go _udgUserId _udgId (Just _udgFormat)
+              (Just AltJSON)
+              gmailService
+          where go
+                  = buildClient (Proxy :: Proxy UsersDraftsGetResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Gmail/Users/Drafts/List.hs b/gen/Network/Google/Resource/Gmail/Users/Drafts/List.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Gmail/Users/Drafts/List.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.Gmail.Users.Drafts.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)
+--
+-- Lists the drafts in the user\'s mailbox.
+--
+-- /See:/ <https://developers.google.com/gmail/api/ Gmail API Reference> for @gmail.users.drafts.list@.
+module Network.Google.Resource.Gmail.Users.Drafts.List
+    (
+    -- * REST Resource
+      UsersDraftsListResource
+
+    -- * Creating a Request
+    , usersDraftsList
+    , UsersDraftsList
+
+    -- * Request Lenses
+    , udlUserId
+    , udlPageToken
+    , udlMaxResults
+    ) where
+
+import           Network.Google.Gmail.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @gmail.users.drafts.list@ method which the
+-- 'UsersDraftsList' request conforms to.
+type UsersDraftsListResource =
+     "gmail" :>
+       "v1" :>
+         "users" :>
+           Capture "userId" Text :>
+             "drafts" :>
+               QueryParam "pageToken" Text :>
+                 QueryParam "maxResults" (Textual Word32) :>
+                   QueryParam "alt" AltJSON :>
+                     Get '[JSON] ListDraftsResponse
+
+-- | Lists the drafts in the user\'s mailbox.
+--
+-- /See:/ 'usersDraftsList' smart constructor.
+data UsersDraftsList = UsersDraftsList
+    { _udlUserId     :: !Text
+    , _udlPageToken  :: !(Maybe Text)
+    , _udlMaxResults :: !(Textual Word32)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'UsersDraftsList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'udlUserId'
+--
+-- * 'udlPageToken'
+--
+-- * 'udlMaxResults'
+usersDraftsList
+    :: Text
+    -> UsersDraftsList
+usersDraftsList pUdlUserId_ =
+    UsersDraftsList
+    { _udlUserId = "me"
+    , _udlPageToken = Nothing
+    , _udlMaxResults = 100
+    }
+
+-- | The user\'s email address. The special value me can be used to indicate
+-- the authenticated user.
+udlUserId :: Lens' UsersDraftsList Text
+udlUserId
+  = lens _udlUserId (\ s a -> s{_udlUserId = a})
+
+-- | Page token to retrieve a specific page of results in the list.
+udlPageToken :: Lens' UsersDraftsList (Maybe Text)
+udlPageToken
+  = lens _udlPageToken (\ s a -> s{_udlPageToken = a})
+
+-- | Maximum number of drafts to return.
+udlMaxResults :: Lens' UsersDraftsList Word32
+udlMaxResults
+  = lens _udlMaxResults
+      (\ s a -> s{_udlMaxResults = a})
+      . _Coerce
+
+instance GoogleRequest UsersDraftsList where
+        type Rs UsersDraftsList = ListDraftsResponse
+        requestClient UsersDraftsList{..}
+          = go _udlUserId _udlPageToken (Just _udlMaxResults)
+              (Just AltJSON)
+              gmailService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy UsersDraftsListResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Gmail/Users/Drafts/Send.hs b/gen/Network/Google/Resource/Gmail/Users/Drafts/Send.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Gmail/Users/Drafts/Send.hs
@@ -0,0 +1,126 @@
+{-# 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.Gmail.Users.Drafts.Send
+-- 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)
+--
+-- Sends the specified, existing draft to the recipients in the To, Cc, and
+-- Bcc headers.
+--
+-- /See:/ <https://developers.google.com/gmail/api/ Gmail API Reference> for @gmail.users.drafts.send@.
+module Network.Google.Resource.Gmail.Users.Drafts.Send
+    (
+    -- * REST Resource
+      UsersDraftsSendResource
+
+    -- * Creating a Request
+    , usersDraftsSend
+    , UsersDraftsSend
+
+    -- * Request Lenses
+    , udsPayload
+    , udsUserId
+    ) where
+
+import           Network.Google.Gmail.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @gmail.users.drafts.send@ method which the
+-- 'UsersDraftsSend' request conforms to.
+type UsersDraftsSendResource =
+     "gmail" :>
+       "v1" :>
+         "users" :>
+           Capture "userId" Text :>
+             "drafts" :>
+               "send" :>
+                 QueryParam "alt" AltJSON :>
+                   ReqBody '[JSON] Draft :> Post '[JSON] Message
+       :<|>
+       "upload" :>
+         "gmail" :>
+           "v1" :>
+             "users" :>
+               Capture "userId" Text :>
+                 "drafts" :>
+                   "send" :>
+                     QueryParam "alt" AltJSON :>
+                       QueryParam "uploadType" AltMedia :>
+                         MultipartRelated '[JSON] Draft RequestBody :>
+                           Post '[JSON] Message
+
+-- | Sends the specified, existing draft to the recipients in the To, Cc, and
+-- Bcc headers.
+--
+-- /See:/ 'usersDraftsSend' smart constructor.
+data UsersDraftsSend = UsersDraftsSend
+    { _udsPayload :: !Draft
+    , _udsUserId  :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'UsersDraftsSend' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'udsPayload'
+--
+-- * 'udsUserId'
+usersDraftsSend
+    :: Draft -- ^ 'udsPayload'
+    -> Text
+    -> UsersDraftsSend
+usersDraftsSend pUdsPayload_ pUdsUserId_ =
+    UsersDraftsSend
+    { _udsPayload = pUdsPayload_
+    , _udsUserId = "me"
+    }
+
+-- | Multipart request metadata.
+udsPayload :: Lens' UsersDraftsSend Draft
+udsPayload
+  = lens _udsPayload (\ s a -> s{_udsPayload = a})
+
+-- | The user\'s email address. The special value me can be used to indicate
+-- the authenticated user.
+udsUserId :: Lens' UsersDraftsSend Text
+udsUserId
+  = lens _udsUserId (\ s a -> s{_udsUserId = a})
+
+instance GoogleRequest UsersDraftsSend where
+        type Rs UsersDraftsSend = Message
+        requestClient UsersDraftsSend{..}
+          = go _udsUserId (Just AltJSON) _udsPayload
+              gmailService
+          where go :<|> _
+                  = buildClient
+                      (Proxy :: Proxy UsersDraftsSendResource)
+                      mempty
+
+instance GoogleRequest (MediaUpload UsersDraftsSend)
+         where
+        type Rs (MediaUpload UsersDraftsSend) = Message
+        requestClient (MediaUpload UsersDraftsSend{..} body)
+          = go _udsUserId (Just AltJSON) (Just AltMedia)
+              _udsPayload
+              body
+              gmailService
+          where _ :<|> go
+                  = buildClient
+                      (Proxy :: Proxy UsersDraftsSendResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Gmail/Users/Drafts/Update.hs b/gen/Network/Google/Resource/Gmail/Users/Drafts/Update.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Gmail/Users/Drafts/Update.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.Gmail.Users.Drafts.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)
+--
+-- Replaces a draft\'s content.
+--
+-- /See:/ <https://developers.google.com/gmail/api/ Gmail API Reference> for @gmail.users.drafts.update@.
+module Network.Google.Resource.Gmail.Users.Drafts.Update
+    (
+    -- * REST Resource
+      UsersDraftsUpdateResource
+
+    -- * Creating a Request
+    , usersDraftsUpdate
+    , UsersDraftsUpdate
+
+    -- * Request Lenses
+    , uduPayload
+    , uduUserId
+    , uduId
+    ) where
+
+import           Network.Google.Gmail.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @gmail.users.drafts.update@ method which the
+-- 'UsersDraftsUpdate' request conforms to.
+type UsersDraftsUpdateResource =
+     "gmail" :>
+       "v1" :>
+         "users" :>
+           Capture "userId" Text :>
+             "drafts" :>
+               Capture "id" Text :>
+                 QueryParam "alt" AltJSON :>
+                   ReqBody '[JSON] Draft :> Put '[JSON] Draft
+       :<|>
+       "upload" :>
+         "gmail" :>
+           "v1" :>
+             "users" :>
+               Capture "userId" Text :>
+                 "drafts" :>
+                   Capture "id" Text :>
+                     QueryParam "alt" AltJSON :>
+                       QueryParam "uploadType" AltMedia :>
+                         MultipartRelated '[JSON] Draft RequestBody :>
+                           Put '[JSON] Draft
+
+-- | Replaces a draft\'s content.
+--
+-- /See:/ 'usersDraftsUpdate' smart constructor.
+data UsersDraftsUpdate = UsersDraftsUpdate
+    { _uduPayload :: !Draft
+    , _uduUserId  :: !Text
+    , _uduId      :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'UsersDraftsUpdate' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'uduPayload'
+--
+-- * 'uduUserId'
+--
+-- * 'uduId'
+usersDraftsUpdate
+    :: Draft -- ^ 'uduPayload'
+    -> Text -- ^ 'uduId'
+    -> Text
+    -> UsersDraftsUpdate
+usersDraftsUpdate pUduPayload_ pUduUserId_ pUduId_ =
+    UsersDraftsUpdate
+    { _uduPayload = pUduPayload_
+    , _uduUserId = "me"
+    , _uduId = pUduId_
+    }
+
+-- | Multipart request metadata.
+uduPayload :: Lens' UsersDraftsUpdate Draft
+uduPayload
+  = lens _uduPayload (\ s a -> s{_uduPayload = a})
+
+-- | The user\'s email address. The special value me can be used to indicate
+-- the authenticated user.
+uduUserId :: Lens' UsersDraftsUpdate Text
+uduUserId
+  = lens _uduUserId (\ s a -> s{_uduUserId = a})
+
+-- | The ID of the draft to update.
+uduId :: Lens' UsersDraftsUpdate Text
+uduId = lens _uduId (\ s a -> s{_uduId = a})
+
+instance GoogleRequest UsersDraftsUpdate where
+        type Rs UsersDraftsUpdate = Draft
+        requestClient UsersDraftsUpdate{..}
+          = go _uduUserId _uduId (Just AltJSON) _uduPayload
+              gmailService
+          where go :<|> _
+                  = buildClient
+                      (Proxy :: Proxy UsersDraftsUpdateResource)
+                      mempty
+
+instance GoogleRequest
+         (MediaUpload UsersDraftsUpdate) where
+        type Rs (MediaUpload UsersDraftsUpdate) = Draft
+        requestClient
+          (MediaUpload UsersDraftsUpdate{..} body)
+          = go _uduUserId _uduId (Just AltJSON) (Just AltMedia)
+              _uduPayload
+              body
+              gmailService
+          where _ :<|> go
+                  = buildClient
+                      (Proxy :: Proxy UsersDraftsUpdateResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Gmail/Users/GetProFile.hs b/gen/Network/Google/Resource/Gmail/Users/GetProFile.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Gmail/Users/GetProFile.hs
@@ -0,0 +1,85 @@
+{-# 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.Gmail.Users.GetProFile
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Gets the current user\'s Gmail profile.
+--
+-- /See:/ <https://developers.google.com/gmail/api/ Gmail API Reference> for @gmail.users.getProfile@.
+module Network.Google.Resource.Gmail.Users.GetProFile
+    (
+    -- * REST Resource
+      UsersGetProFileResource
+
+    -- * Creating a Request
+    , usersGetProFile
+    , UsersGetProFile
+
+    -- * Request Lenses
+    , ugpfUserId
+    ) where
+
+import           Network.Google.Gmail.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @gmail.users.getProfile@ method which the
+-- 'UsersGetProFile' request conforms to.
+type UsersGetProFileResource =
+     "gmail" :>
+       "v1" :>
+         "users" :>
+           Capture "userId" Text :>
+             "profile" :>
+               QueryParam "alt" AltJSON :> Get '[JSON] ProFile
+
+-- | Gets the current user\'s Gmail profile.
+--
+-- /See:/ 'usersGetProFile' smart constructor.
+newtype UsersGetProFile = UsersGetProFile
+    { _ugpfUserId :: Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'UsersGetProFile' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ugpfUserId'
+usersGetProFile
+    :: Text
+    -> UsersGetProFile
+usersGetProFile pUgpfUserId_ =
+    UsersGetProFile
+    { _ugpfUserId = "me"
+    }
+
+-- | The user\'s email address. The special value me can be used to indicate
+-- the authenticated user.
+ugpfUserId :: Lens' UsersGetProFile Text
+ugpfUserId
+  = lens _ugpfUserId (\ s a -> s{_ugpfUserId = a})
+
+instance GoogleRequest UsersGetProFile where
+        type Rs UsersGetProFile = ProFile
+        requestClient UsersGetProFile{..}
+          = go _ugpfUserId (Just AltJSON) gmailService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy UsersGetProFileResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Gmail/Users/History/List.hs b/gen/Network/Google/Resource/Gmail/Users/History/List.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Gmail/Users/History/List.hs
@@ -0,0 +1,150 @@
+{-# 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.Gmail.Users.History.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)
+--
+-- Lists the history of all changes to the given mailbox. History results
+-- are returned in chronological order (increasing historyId).
+--
+-- /See:/ <https://developers.google.com/gmail/api/ Gmail API Reference> for @gmail.users.history.list@.
+module Network.Google.Resource.Gmail.Users.History.List
+    (
+    -- * REST Resource
+      UsersHistoryListResource
+
+    -- * Creating a Request
+    , usersHistoryList
+    , UsersHistoryList
+
+    -- * Request Lenses
+    , uhlUserId
+    , uhlStartHistoryId
+    , uhlPageToken
+    , uhlLabelId
+    , uhlMaxResults
+    ) where
+
+import           Network.Google.Gmail.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @gmail.users.history.list@ method which the
+-- 'UsersHistoryList' request conforms to.
+type UsersHistoryListResource =
+     "gmail" :>
+       "v1" :>
+         "users" :>
+           Capture "userId" Text :>
+             "history" :>
+               QueryParam "startHistoryId" (Textual Word64) :>
+                 QueryParam "pageToken" Text :>
+                   QueryParam "labelId" Text :>
+                     QueryParam "maxResults" (Textual Word32) :>
+                       QueryParam "alt" AltJSON :>
+                         Get '[JSON] ListHistoryResponse
+
+-- | Lists the history of all changes to the given mailbox. History results
+-- are returned in chronological order (increasing historyId).
+--
+-- /See:/ 'usersHistoryList' smart constructor.
+data UsersHistoryList = UsersHistoryList
+    { _uhlUserId         :: !Text
+    , _uhlStartHistoryId :: !(Maybe (Textual Word64))
+    , _uhlPageToken      :: !(Maybe Text)
+    , _uhlLabelId        :: !(Maybe Text)
+    , _uhlMaxResults     :: !(Textual Word32)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'UsersHistoryList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'uhlUserId'
+--
+-- * 'uhlStartHistoryId'
+--
+-- * 'uhlPageToken'
+--
+-- * 'uhlLabelId'
+--
+-- * 'uhlMaxResults'
+usersHistoryList
+    :: Text
+    -> UsersHistoryList
+usersHistoryList pUhlUserId_ =
+    UsersHistoryList
+    { _uhlUserId = "me"
+    , _uhlStartHistoryId = Nothing
+    , _uhlPageToken = Nothing
+    , _uhlLabelId = Nothing
+    , _uhlMaxResults = 100
+    }
+
+-- | The user\'s email address. The special value me can be used to indicate
+-- the authenticated user.
+uhlUserId :: Lens' UsersHistoryList Text
+uhlUserId
+  = lens _uhlUserId (\ s a -> s{_uhlUserId = a})
+
+-- | Required. Returns history records after the specified startHistoryId.
+-- The supplied startHistoryId should be obtained from the historyId of a
+-- message, thread, or previous list response. History IDs increase
+-- chronologically but are not contiguous with random gaps in between valid
+-- IDs. Supplying an invalid or out of date startHistoryId typically
+-- returns an HTTP 404 error code. A historyId is typically valid for at
+-- least a week, but in some rare circumstances may be valid for only a few
+-- hours. If you receive an HTTP 404 error response, your application
+-- should perform a full sync. If you receive no nextPageToken in the
+-- response, there are no updates to retrieve and you can store the
+-- returned historyId for a future request.
+uhlStartHistoryId :: Lens' UsersHistoryList (Maybe Word64)
+uhlStartHistoryId
+  = lens _uhlStartHistoryId
+      (\ s a -> s{_uhlStartHistoryId = a})
+      . mapping _Coerce
+
+-- | Page token to retrieve a specific page of results in the list.
+uhlPageToken :: Lens' UsersHistoryList (Maybe Text)
+uhlPageToken
+  = lens _uhlPageToken (\ s a -> s{_uhlPageToken = a})
+
+-- | Only return messages with a label matching the ID.
+uhlLabelId :: Lens' UsersHistoryList (Maybe Text)
+uhlLabelId
+  = lens _uhlLabelId (\ s a -> s{_uhlLabelId = a})
+
+-- | The maximum number of history records to return.
+uhlMaxResults :: Lens' UsersHistoryList Word32
+uhlMaxResults
+  = lens _uhlMaxResults
+      (\ s a -> s{_uhlMaxResults = a})
+      . _Coerce
+
+instance GoogleRequest UsersHistoryList where
+        type Rs UsersHistoryList = ListHistoryResponse
+        requestClient UsersHistoryList{..}
+          = go _uhlUserId _uhlStartHistoryId _uhlPageToken
+              _uhlLabelId
+              (Just _uhlMaxResults)
+              (Just AltJSON)
+              gmailService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy UsersHistoryListResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Gmail/Users/Labels/Create.hs b/gen/Network/Google/Resource/Gmail/Users/Labels/Create.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Gmail/Users/Labels/Create.hs
@@ -0,0 +1,98 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.Gmail.Users.Labels.Create
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates a new label.
+--
+-- /See:/ <https://developers.google.com/gmail/api/ Gmail API Reference> for @gmail.users.labels.create@.
+module Network.Google.Resource.Gmail.Users.Labels.Create
+    (
+    -- * REST Resource
+      UsersLabelsCreateResource
+
+    -- * Creating a Request
+    , usersLabelsCreate
+    , UsersLabelsCreate
+
+    -- * Request Lenses
+    , ulcPayload
+    , ulcUserId
+    ) where
+
+import           Network.Google.Gmail.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @gmail.users.labels.create@ method which the
+-- 'UsersLabelsCreate' request conforms to.
+type UsersLabelsCreateResource =
+     "gmail" :>
+       "v1" :>
+         "users" :>
+           Capture "userId" Text :>
+             "labels" :>
+               QueryParam "alt" AltJSON :>
+                 ReqBody '[JSON] Label :> Post '[JSON] Label
+
+-- | Creates a new label.
+--
+-- /See:/ 'usersLabelsCreate' smart constructor.
+data UsersLabelsCreate = UsersLabelsCreate
+    { _ulcPayload :: !Label
+    , _ulcUserId  :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'UsersLabelsCreate' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ulcPayload'
+--
+-- * 'ulcUserId'
+usersLabelsCreate
+    :: Label -- ^ 'ulcPayload'
+    -> Text
+    -> UsersLabelsCreate
+usersLabelsCreate pUlcPayload_ pUlcUserId_ =
+    UsersLabelsCreate
+    { _ulcPayload = pUlcPayload_
+    , _ulcUserId = "me"
+    }
+
+-- | Multipart request metadata.
+ulcPayload :: Lens' UsersLabelsCreate Label
+ulcPayload
+  = lens _ulcPayload (\ s a -> s{_ulcPayload = a})
+
+-- | The user\'s email address. The special value me can be used to indicate
+-- the authenticated user.
+ulcUserId :: Lens' UsersLabelsCreate Text
+ulcUserId
+  = lens _ulcUserId (\ s a -> s{_ulcUserId = a})
+
+instance GoogleRequest UsersLabelsCreate where
+        type Rs UsersLabelsCreate = Label
+        requestClient UsersLabelsCreate{..}
+          = go _ulcUserId (Just AltJSON) _ulcPayload
+              gmailService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy UsersLabelsCreateResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Gmail/Users/Labels/Delete.hs b/gen/Network/Google/Resource/Gmail/Users/Labels/Delete.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Gmail/Users/Labels/Delete.hs
@@ -0,0 +1,98 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.Gmail.Users.Labels.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)
+--
+-- Immediately and permanently deletes the specified label and removes it
+-- from any messages and threads that it is applied to.
+--
+-- /See:/ <https://developers.google.com/gmail/api/ Gmail API Reference> for @gmail.users.labels.delete@.
+module Network.Google.Resource.Gmail.Users.Labels.Delete
+    (
+    -- * REST Resource
+      UsersLabelsDeleteResource
+
+    -- * Creating a Request
+    , usersLabelsDelete
+    , UsersLabelsDelete
+
+    -- * Request Lenses
+    , uldUserId
+    , uldId
+    ) where
+
+import           Network.Google.Gmail.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @gmail.users.labels.delete@ method which the
+-- 'UsersLabelsDelete' request conforms to.
+type UsersLabelsDeleteResource =
+     "gmail" :>
+       "v1" :>
+         "users" :>
+           Capture "userId" Text :>
+             "labels" :>
+               Capture "id" Text :>
+                 QueryParam "alt" AltJSON :> Delete '[JSON] ()
+
+-- | Immediately and permanently deletes the specified label and removes it
+-- from any messages and threads that it is applied to.
+--
+-- /See:/ 'usersLabelsDelete' smart constructor.
+data UsersLabelsDelete = UsersLabelsDelete
+    { _uldUserId :: !Text
+    , _uldId     :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'UsersLabelsDelete' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'uldUserId'
+--
+-- * 'uldId'
+usersLabelsDelete
+    :: Text -- ^ 'uldId'
+    -> Text
+    -> UsersLabelsDelete
+usersLabelsDelete pUldUserId_ pUldId_ =
+    UsersLabelsDelete
+    { _uldUserId = "me"
+    , _uldId = pUldId_
+    }
+
+-- | The user\'s email address. The special value me can be used to indicate
+-- the authenticated user.
+uldUserId :: Lens' UsersLabelsDelete Text
+uldUserId
+  = lens _uldUserId (\ s a -> s{_uldUserId = a})
+
+-- | The ID of the label to delete.
+uldId :: Lens' UsersLabelsDelete Text
+uldId = lens _uldId (\ s a -> s{_uldId = a})
+
+instance GoogleRequest UsersLabelsDelete where
+        type Rs UsersLabelsDelete = ()
+        requestClient UsersLabelsDelete{..}
+          = go _uldUserId _uldId (Just AltJSON) gmailService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy UsersLabelsDeleteResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Gmail/Users/Labels/Get.hs b/gen/Network/Google/Resource/Gmail/Users/Labels/Get.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Gmail/Users/Labels/Get.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.Gmail.Users.Labels.Get
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Gets the specified label.
+--
+-- /See:/ <https://developers.google.com/gmail/api/ Gmail API Reference> for @gmail.users.labels.get@.
+module Network.Google.Resource.Gmail.Users.Labels.Get
+    (
+    -- * REST Resource
+      UsersLabelsGetResource
+
+    -- * Creating a Request
+    , usersLabelsGet
+    , UsersLabelsGet
+
+    -- * Request Lenses
+    , ulgUserId
+    , ulgId
+    ) where
+
+import           Network.Google.Gmail.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @gmail.users.labels.get@ method which the
+-- 'UsersLabelsGet' request conforms to.
+type UsersLabelsGetResource =
+     "gmail" :>
+       "v1" :>
+         "users" :>
+           Capture "userId" Text :>
+             "labels" :>
+               Capture "id" Text :>
+                 QueryParam "alt" AltJSON :> Get '[JSON] Label
+
+-- | Gets the specified label.
+--
+-- /See:/ 'usersLabelsGet' smart constructor.
+data UsersLabelsGet = UsersLabelsGet
+    { _ulgUserId :: !Text
+    , _ulgId     :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'UsersLabelsGet' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ulgUserId'
+--
+-- * 'ulgId'
+usersLabelsGet
+    :: Text -- ^ 'ulgId'
+    -> Text
+    -> UsersLabelsGet
+usersLabelsGet pUlgUserId_ pUlgId_ =
+    UsersLabelsGet
+    { _ulgUserId = "me"
+    , _ulgId = pUlgId_
+    }
+
+-- | The user\'s email address. The special value me can be used to indicate
+-- the authenticated user.
+ulgUserId :: Lens' UsersLabelsGet Text
+ulgUserId
+  = lens _ulgUserId (\ s a -> s{_ulgUserId = a})
+
+-- | The ID of the label to retrieve.
+ulgId :: Lens' UsersLabelsGet Text
+ulgId = lens _ulgId (\ s a -> s{_ulgId = a})
+
+instance GoogleRequest UsersLabelsGet where
+        type Rs UsersLabelsGet = Label
+        requestClient UsersLabelsGet{..}
+          = go _ulgUserId _ulgId (Just AltJSON) gmailService
+          where go
+                  = buildClient (Proxy :: Proxy UsersLabelsGetResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Gmail/Users/Labels/List.hs b/gen/Network/Google/Resource/Gmail/Users/Labels/List.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Gmail/Users/Labels/List.hs
@@ -0,0 +1,86 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.Gmail.Users.Labels.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)
+--
+-- Lists all labels in the user\'s mailbox.
+--
+-- /See:/ <https://developers.google.com/gmail/api/ Gmail API Reference> for @gmail.users.labels.list@.
+module Network.Google.Resource.Gmail.Users.Labels.List
+    (
+    -- * REST Resource
+      UsersLabelsListResource
+
+    -- * Creating a Request
+    , usersLabelsList
+    , UsersLabelsList
+
+    -- * Request Lenses
+    , ullUserId
+    ) where
+
+import           Network.Google.Gmail.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @gmail.users.labels.list@ method which the
+-- 'UsersLabelsList' request conforms to.
+type UsersLabelsListResource =
+     "gmail" :>
+       "v1" :>
+         "users" :>
+           Capture "userId" Text :>
+             "labels" :>
+               QueryParam "alt" AltJSON :>
+                 Get '[JSON] ListLabelsResponse
+
+-- | Lists all labels in the user\'s mailbox.
+--
+-- /See:/ 'usersLabelsList' smart constructor.
+newtype UsersLabelsList = UsersLabelsList
+    { _ullUserId :: Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'UsersLabelsList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ullUserId'
+usersLabelsList
+    :: Text
+    -> UsersLabelsList
+usersLabelsList pUllUserId_ =
+    UsersLabelsList
+    { _ullUserId = "me"
+    }
+
+-- | The user\'s email address. The special value me can be used to indicate
+-- the authenticated user.
+ullUserId :: Lens' UsersLabelsList Text
+ullUserId
+  = lens _ullUserId (\ s a -> s{_ullUserId = a})
+
+instance GoogleRequest UsersLabelsList where
+        type Rs UsersLabelsList = ListLabelsResponse
+        requestClient UsersLabelsList{..}
+          = go _ullUserId (Just AltJSON) gmailService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy UsersLabelsListResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Gmail/Users/Labels/Patch.hs b/gen/Network/Google/Resource/Gmail/Users/Labels/Patch.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Gmail/Users/Labels/Patch.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.Gmail.Users.Labels.Patch
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Updates the specified label. This method supports patch semantics.
+--
+-- /See:/ <https://developers.google.com/gmail/api/ Gmail API Reference> for @gmail.users.labels.patch@.
+module Network.Google.Resource.Gmail.Users.Labels.Patch
+    (
+    -- * REST Resource
+      UsersLabelsPatchResource
+
+    -- * Creating a Request
+    , usersLabelsPatch
+    , UsersLabelsPatch
+
+    -- * Request Lenses
+    , ulpPayload
+    , ulpUserId
+    , ulpId
+    ) where
+
+import           Network.Google.Gmail.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @gmail.users.labels.patch@ method which the
+-- 'UsersLabelsPatch' request conforms to.
+type UsersLabelsPatchResource =
+     "gmail" :>
+       "v1" :>
+         "users" :>
+           Capture "userId" Text :>
+             "labels" :>
+               Capture "id" Text :>
+                 QueryParam "alt" AltJSON :>
+                   ReqBody '[JSON] Label :> Patch '[JSON] Label
+
+-- | Updates the specified label. This method supports patch semantics.
+--
+-- /See:/ 'usersLabelsPatch' smart constructor.
+data UsersLabelsPatch = UsersLabelsPatch
+    { _ulpPayload :: !Label
+    , _ulpUserId  :: !Text
+    , _ulpId      :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'UsersLabelsPatch' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ulpPayload'
+--
+-- * 'ulpUserId'
+--
+-- * 'ulpId'
+usersLabelsPatch
+    :: Label -- ^ 'ulpPayload'
+    -> Text -- ^ 'ulpId'
+    -> Text
+    -> UsersLabelsPatch
+usersLabelsPatch pUlpPayload_ pUlpUserId_ pUlpId_ =
+    UsersLabelsPatch
+    { _ulpPayload = pUlpPayload_
+    , _ulpUserId = "me"
+    , _ulpId = pUlpId_
+    }
+
+-- | Multipart request metadata.
+ulpPayload :: Lens' UsersLabelsPatch Label
+ulpPayload
+  = lens _ulpPayload (\ s a -> s{_ulpPayload = a})
+
+-- | The user\'s email address. The special value me can be used to indicate
+-- the authenticated user.
+ulpUserId :: Lens' UsersLabelsPatch Text
+ulpUserId
+  = lens _ulpUserId (\ s a -> s{_ulpUserId = a})
+
+-- | The ID of the label to update.
+ulpId :: Lens' UsersLabelsPatch Text
+ulpId = lens _ulpId (\ s a -> s{_ulpId = a})
+
+instance GoogleRequest UsersLabelsPatch where
+        type Rs UsersLabelsPatch = Label
+        requestClient UsersLabelsPatch{..}
+          = go _ulpUserId _ulpId (Just AltJSON) _ulpPayload
+              gmailService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy UsersLabelsPatchResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Gmail/Users/Labels/Update.hs b/gen/Network/Google/Resource/Gmail/Users/Labels/Update.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Gmail/Users/Labels/Update.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.Gmail.Users.Labels.Update
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Updates the specified label.
+--
+-- /See:/ <https://developers.google.com/gmail/api/ Gmail API Reference> for @gmail.users.labels.update@.
+module Network.Google.Resource.Gmail.Users.Labels.Update
+    (
+    -- * REST Resource
+      UsersLabelsUpdateResource
+
+    -- * Creating a Request
+    , usersLabelsUpdate
+    , UsersLabelsUpdate
+
+    -- * Request Lenses
+    , uluPayload
+    , uluUserId
+    , uluId
+    ) where
+
+import           Network.Google.Gmail.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @gmail.users.labels.update@ method which the
+-- 'UsersLabelsUpdate' request conforms to.
+type UsersLabelsUpdateResource =
+     "gmail" :>
+       "v1" :>
+         "users" :>
+           Capture "userId" Text :>
+             "labels" :>
+               Capture "id" Text :>
+                 QueryParam "alt" AltJSON :>
+                   ReqBody '[JSON] Label :> Put '[JSON] Label
+
+-- | Updates the specified label.
+--
+-- /See:/ 'usersLabelsUpdate' smart constructor.
+data UsersLabelsUpdate = UsersLabelsUpdate
+    { _uluPayload :: !Label
+    , _uluUserId  :: !Text
+    , _uluId      :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'UsersLabelsUpdate' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'uluPayload'
+--
+-- * 'uluUserId'
+--
+-- * 'uluId'
+usersLabelsUpdate
+    :: Label -- ^ 'uluPayload'
+    -> Text -- ^ 'uluId'
+    -> Text
+    -> UsersLabelsUpdate
+usersLabelsUpdate pUluPayload_ pUluUserId_ pUluId_ =
+    UsersLabelsUpdate
+    { _uluPayload = pUluPayload_
+    , _uluUserId = "me"
+    , _uluId = pUluId_
+    }
+
+-- | Multipart request metadata.
+uluPayload :: Lens' UsersLabelsUpdate Label
+uluPayload
+  = lens _uluPayload (\ s a -> s{_uluPayload = a})
+
+-- | The user\'s email address. The special value me can be used to indicate
+-- the authenticated user.
+uluUserId :: Lens' UsersLabelsUpdate Text
+uluUserId
+  = lens _uluUserId (\ s a -> s{_uluUserId = a})
+
+-- | The ID of the label to update.
+uluId :: Lens' UsersLabelsUpdate Text
+uluId = lens _uluId (\ s a -> s{_uluId = a})
+
+instance GoogleRequest UsersLabelsUpdate where
+        type Rs UsersLabelsUpdate = Label
+        requestClient UsersLabelsUpdate{..}
+          = go _uluUserId _uluId (Just AltJSON) _uluPayload
+              gmailService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy UsersLabelsUpdateResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Gmail/Users/Messages/Attachments/Get.hs b/gen/Network/Google/Resource/Gmail/Users/Messages/Attachments/Get.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Gmail/Users/Messages/Attachments/Get.hs
@@ -0,0 +1,114 @@
+{-# 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.Gmail.Users.Messages.Attachments.Get
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Gets the specified message attachment.
+--
+-- /See:/ <https://developers.google.com/gmail/api/ Gmail API Reference> for @gmail.users.messages.attachments.get@.
+module Network.Google.Resource.Gmail.Users.Messages.Attachments.Get
+    (
+    -- * REST Resource
+      UsersMessagesAttachmentsGetResource
+
+    -- * Creating a Request
+    , usersMessagesAttachmentsGet
+    , UsersMessagesAttachmentsGet
+
+    -- * Request Lenses
+    , umagUserId
+    , umagId
+    , umagMessageId
+    ) where
+
+import           Network.Google.Gmail.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @gmail.users.messages.attachments.get@ method which the
+-- 'UsersMessagesAttachmentsGet' request conforms to.
+type UsersMessagesAttachmentsGetResource =
+     "gmail" :>
+       "v1" :>
+         "users" :>
+           Capture "userId" Text :>
+             "messages" :>
+               Capture "messageId" Text :>
+                 "attachments" :>
+                   Capture "id" Text :>
+                     QueryParam "alt" AltJSON :>
+                       Get '[JSON] MessagePartBody
+
+-- | Gets the specified message attachment.
+--
+-- /See:/ 'usersMessagesAttachmentsGet' smart constructor.
+data UsersMessagesAttachmentsGet = UsersMessagesAttachmentsGet
+    { _umagUserId    :: !Text
+    , _umagId        :: !Text
+    , _umagMessageId :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'UsersMessagesAttachmentsGet' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'umagUserId'
+--
+-- * 'umagId'
+--
+-- * 'umagMessageId'
+usersMessagesAttachmentsGet
+    :: Text -- ^ 'umagId'
+    -> Text -- ^ 'umagMessageId'
+    -> Text
+    -> UsersMessagesAttachmentsGet
+usersMessagesAttachmentsGet pUmagUserId_ pUmagId_ pUmagMessageId_ =
+    UsersMessagesAttachmentsGet
+    { _umagUserId = "me"
+    , _umagId = pUmagId_
+    , _umagMessageId = pUmagMessageId_
+    }
+
+-- | The user\'s email address. The special value me can be used to indicate
+-- the authenticated user.
+umagUserId :: Lens' UsersMessagesAttachmentsGet Text
+umagUserId
+  = lens _umagUserId (\ s a -> s{_umagUserId = a})
+
+-- | The ID of the attachment.
+umagId :: Lens' UsersMessagesAttachmentsGet Text
+umagId = lens _umagId (\ s a -> s{_umagId = a})
+
+-- | The ID of the message containing the attachment.
+umagMessageId :: Lens' UsersMessagesAttachmentsGet Text
+umagMessageId
+  = lens _umagMessageId
+      (\ s a -> s{_umagMessageId = a})
+
+instance GoogleRequest UsersMessagesAttachmentsGet
+         where
+        type Rs UsersMessagesAttachmentsGet = MessagePartBody
+        requestClient UsersMessagesAttachmentsGet{..}
+          = go _umagUserId _umagMessageId _umagId
+              (Just AltJSON)
+              gmailService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy UsersMessagesAttachmentsGetResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Gmail/Users/Messages/Delete.hs b/gen/Network/Google/Resource/Gmail/Users/Messages/Delete.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Gmail/Users/Messages/Delete.hs
@@ -0,0 +1,98 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.Gmail.Users.Messages.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)
+--
+-- Immediately and permanently deletes the specified message. This
+-- operation cannot be undone. Prefer messages.trash instead.
+--
+-- /See:/ <https://developers.google.com/gmail/api/ Gmail API Reference> for @gmail.users.messages.delete@.
+module Network.Google.Resource.Gmail.Users.Messages.Delete
+    (
+    -- * REST Resource
+      UsersMessagesDeleteResource
+
+    -- * Creating a Request
+    , usersMessagesDelete
+    , UsersMessagesDelete
+
+    -- * Request Lenses
+    , umdUserId
+    , umdId
+    ) where
+
+import           Network.Google.Gmail.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @gmail.users.messages.delete@ method which the
+-- 'UsersMessagesDelete' request conforms to.
+type UsersMessagesDeleteResource =
+     "gmail" :>
+       "v1" :>
+         "users" :>
+           Capture "userId" Text :>
+             "messages" :>
+               Capture "id" Text :>
+                 QueryParam "alt" AltJSON :> Delete '[JSON] ()
+
+-- | Immediately and permanently deletes the specified message. This
+-- operation cannot be undone. Prefer messages.trash instead.
+--
+-- /See:/ 'usersMessagesDelete' smart constructor.
+data UsersMessagesDelete = UsersMessagesDelete
+    { _umdUserId :: !Text
+    , _umdId     :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'UsersMessagesDelete' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'umdUserId'
+--
+-- * 'umdId'
+usersMessagesDelete
+    :: Text -- ^ 'umdId'
+    -> Text
+    -> UsersMessagesDelete
+usersMessagesDelete pUmdUserId_ pUmdId_ =
+    UsersMessagesDelete
+    { _umdUserId = "me"
+    , _umdId = pUmdId_
+    }
+
+-- | The user\'s email address. The special value me can be used to indicate
+-- the authenticated user.
+umdUserId :: Lens' UsersMessagesDelete Text
+umdUserId
+  = lens _umdUserId (\ s a -> s{_umdUserId = a})
+
+-- | The ID of the message to delete.
+umdId :: Lens' UsersMessagesDelete Text
+umdId = lens _umdId (\ s a -> s{_umdId = a})
+
+instance GoogleRequest UsersMessagesDelete where
+        type Rs UsersMessagesDelete = ()
+        requestClient UsersMessagesDelete{..}
+          = go _umdUserId _umdId (Just AltJSON) gmailService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy UsersMessagesDeleteResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Gmail/Users/Messages/Get.hs b/gen/Network/Google/Resource/Gmail/Users/Messages/Get.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Gmail/Users/Messages/Get.hs
@@ -0,0 +1,124 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.Gmail.Users.Messages.Get
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Gets the specified message.
+--
+-- /See:/ <https://developers.google.com/gmail/api/ Gmail API Reference> for @gmail.users.messages.get@.
+module Network.Google.Resource.Gmail.Users.Messages.Get
+    (
+    -- * REST Resource
+      UsersMessagesGetResource
+
+    -- * Creating a Request
+    , usersMessagesGet
+    , UsersMessagesGet
+
+    -- * Request Lenses
+    , umgFormat
+    , umgUserId
+    , umgId
+    , umgMetadataHeaders
+    ) where
+
+import           Network.Google.Gmail.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @gmail.users.messages.get@ method which the
+-- 'UsersMessagesGet' request conforms to.
+type UsersMessagesGetResource =
+     "gmail" :>
+       "v1" :>
+         "users" :>
+           Capture "userId" Text :>
+             "messages" :>
+               Capture "id" Text :>
+                 QueryParam "format" UsersMessagesGetFormat :>
+                   QueryParams "metadataHeaders" Text :>
+                     QueryParam "alt" AltJSON :> Get '[JSON] Message
+
+-- | Gets the specified message.
+--
+-- /See:/ 'usersMessagesGet' smart constructor.
+data UsersMessagesGet = UsersMessagesGet
+    { _umgFormat          :: !UsersMessagesGetFormat
+    , _umgUserId          :: !Text
+    , _umgId              :: !Text
+    , _umgMetadataHeaders :: !(Maybe [Text])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'UsersMessagesGet' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'umgFormat'
+--
+-- * 'umgUserId'
+--
+-- * 'umgId'
+--
+-- * 'umgMetadataHeaders'
+usersMessagesGet
+    :: Text -- ^ 'umgId'
+    -> Text
+    -> UsersMessagesGet
+usersMessagesGet pUmgUserId_ pUmgId_ =
+    UsersMessagesGet
+    { _umgFormat = Full
+    , _umgUserId = "me"
+    , _umgId = pUmgId_
+    , _umgMetadataHeaders = Nothing
+    }
+
+-- | The format to return the message in.
+umgFormat :: Lens' UsersMessagesGet UsersMessagesGetFormat
+umgFormat
+  = lens _umgFormat (\ s a -> s{_umgFormat = a})
+
+-- | The user\'s email address. The special value me can be used to indicate
+-- the authenticated user.
+umgUserId :: Lens' UsersMessagesGet Text
+umgUserId
+  = lens _umgUserId (\ s a -> s{_umgUserId = a})
+
+-- | The ID of the message to retrieve.
+umgId :: Lens' UsersMessagesGet Text
+umgId = lens _umgId (\ s a -> s{_umgId = a})
+
+-- | When given and format is METADATA, only include headers specified.
+umgMetadataHeaders :: Lens' UsersMessagesGet [Text]
+umgMetadataHeaders
+  = lens _umgMetadataHeaders
+      (\ s a -> s{_umgMetadataHeaders = a})
+      . _Default
+      . _Coerce
+
+instance GoogleRequest UsersMessagesGet where
+        type Rs UsersMessagesGet = Message
+        requestClient UsersMessagesGet{..}
+          = go _umgUserId _umgId (Just _umgFormat)
+              (_umgMetadataHeaders ^. _Default)
+              (Just AltJSON)
+              gmailService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy UsersMessagesGetResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Gmail/Users/Messages/Import.hs b/gen/Network/Google/Resource/Gmail/Users/Messages/Import.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Gmail/Users/Messages/Import.hs
@@ -0,0 +1,198 @@
+{-# 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.Gmail.Users.Messages.Import
+-- 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)
+--
+-- Imports a message into only this user\'s mailbox, with standard email
+-- delivery scanning and classification similar to receiving via SMTP. Does
+-- not send a message.
+--
+-- /See:/ <https://developers.google.com/gmail/api/ Gmail API Reference> for @gmail.users.messages.import@.
+module Network.Google.Resource.Gmail.Users.Messages.Import
+    (
+    -- * REST Resource
+      UsersMessagesImportResource
+
+    -- * Creating a Request
+    , usersMessagesImport
+    , UsersMessagesImport
+
+    -- * Request Lenses
+    , umiPayload
+    , umiUserId
+    , umiProcessForCalendar
+    , umiDeleted
+    , umiNeverMarkSpam
+    , umiInternalDateSource
+    ) where
+
+import           Network.Google.Gmail.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @gmail.users.messages.import@ method which the
+-- 'UsersMessagesImport' request conforms to.
+type UsersMessagesImportResource =
+     "gmail" :>
+       "v1" :>
+         "users" :>
+           Capture "userId" Text :>
+             "messages" :>
+               "import" :>
+                 QueryParam "processForCalendar" Bool :>
+                   QueryParam "deleted" Bool :>
+                     QueryParam "neverMarkSpam" Bool :>
+                       QueryParam "internalDateSource"
+                         UsersMessagesImportInternalDateSource
+                         :>
+                         QueryParam "alt" AltJSON :>
+                           ReqBody '[JSON] Message :> Post '[JSON] Message
+       :<|>
+       "upload" :>
+         "gmail" :>
+           "v1" :>
+             "users" :>
+               Capture "userId" Text :>
+                 "messages" :>
+                   "import" :>
+                     QueryParam "processForCalendar" Bool :>
+                       QueryParam "deleted" Bool :>
+                         QueryParam "neverMarkSpam" Bool :>
+                           QueryParam "internalDateSource"
+                             UsersMessagesImportInternalDateSource
+                             :>
+                             QueryParam "alt" AltJSON :>
+                               QueryParam "uploadType" AltMedia :>
+                                 MultipartRelated '[JSON] Message RequestBody :>
+                                   Post '[JSON] Message
+
+-- | Imports a message into only this user\'s mailbox, with standard email
+-- delivery scanning and classification similar to receiving via SMTP. Does
+-- not send a message.
+--
+-- /See:/ 'usersMessagesImport' smart constructor.
+data UsersMessagesImport = UsersMessagesImport
+    { _umiPayload            :: !Message
+    , _umiUserId             :: !Text
+    , _umiProcessForCalendar :: !Bool
+    , _umiDeleted            :: !Bool
+    , _umiNeverMarkSpam      :: !Bool
+    , _umiInternalDateSource :: !UsersMessagesImportInternalDateSource
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'UsersMessagesImport' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'umiPayload'
+--
+-- * 'umiUserId'
+--
+-- * 'umiProcessForCalendar'
+--
+-- * 'umiDeleted'
+--
+-- * 'umiNeverMarkSpam'
+--
+-- * 'umiInternalDateSource'
+usersMessagesImport
+    :: Message -- ^ 'umiPayload'
+    -> Text
+    -> UsersMessagesImport
+usersMessagesImport pUmiPayload_ pUmiUserId_ =
+    UsersMessagesImport
+    { _umiPayload = pUmiPayload_
+    , _umiUserId = "me"
+    , _umiProcessForCalendar = False
+    , _umiDeleted = False
+    , _umiNeverMarkSpam = False
+    , _umiInternalDateSource = DateHeader
+    }
+
+-- | Multipart request metadata.
+umiPayload :: Lens' UsersMessagesImport Message
+umiPayload
+  = lens _umiPayload (\ s a -> s{_umiPayload = a})
+
+-- | The user\'s email address. The special value me can be used to indicate
+-- the authenticated user.
+umiUserId :: Lens' UsersMessagesImport Text
+umiUserId
+  = lens _umiUserId (\ s a -> s{_umiUserId = a})
+
+-- | Process calendar invites in the email and add any extracted meetings to
+-- the Google Calendar for this user.
+umiProcessForCalendar :: Lens' UsersMessagesImport Bool
+umiProcessForCalendar
+  = lens _umiProcessForCalendar
+      (\ s a -> s{_umiProcessForCalendar = a})
+
+-- | Mark the email as permanently deleted (not TRASH) and only visible in
+-- Google Apps Vault to a Vault administrator. Only used for Google Apps
+-- for Work accounts.
+umiDeleted :: Lens' UsersMessagesImport Bool
+umiDeleted
+  = lens _umiDeleted (\ s a -> s{_umiDeleted = a})
+
+-- | Ignore the Gmail spam classifier decision and never mark this email as
+-- SPAM in the mailbox.
+umiNeverMarkSpam :: Lens' UsersMessagesImport Bool
+umiNeverMarkSpam
+  = lens _umiNeverMarkSpam
+      (\ s a -> s{_umiNeverMarkSpam = a})
+
+-- | Source for Gmail\'s internal date of the message.
+umiInternalDateSource :: Lens' UsersMessagesImport UsersMessagesImportInternalDateSource
+umiInternalDateSource
+  = lens _umiInternalDateSource
+      (\ s a -> s{_umiInternalDateSource = a})
+
+instance GoogleRequest UsersMessagesImport where
+        type Rs UsersMessagesImport = Message
+        requestClient UsersMessagesImport{..}
+          = go _umiUserId (Just _umiProcessForCalendar)
+              (Just _umiDeleted)
+              (Just _umiNeverMarkSpam)
+              (Just _umiInternalDateSource)
+              (Just AltJSON)
+              _umiPayload
+              gmailService
+          where go :<|> _
+                  = buildClient
+                      (Proxy :: Proxy UsersMessagesImportResource)
+                      mempty
+
+instance GoogleRequest
+         (MediaUpload UsersMessagesImport) where
+        type Rs (MediaUpload UsersMessagesImport) = Message
+        requestClient
+          (MediaUpload UsersMessagesImport{..} body)
+          = go _umiUserId (Just _umiProcessForCalendar)
+              (Just _umiDeleted)
+              (Just _umiNeverMarkSpam)
+              (Just _umiInternalDateSource)
+              (Just AltJSON)
+              (Just AltMedia)
+              _umiPayload
+              body
+              gmailService
+          where _ :<|> go
+                  = buildClient
+                      (Proxy :: Proxy UsersMessagesImportResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Gmail/Users/Messages/Insert.hs b/gen/Network/Google/Resource/Gmail/Users/Messages/Insert.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Gmail/Users/Messages/Insert.hs
@@ -0,0 +1,161 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.Gmail.Users.Messages.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)
+--
+-- Directly inserts a message into only this user\'s mailbox similar to
+-- IMAP APPEND, bypassing most scanning and classification. Does not send a
+-- message.
+--
+-- /See:/ <https://developers.google.com/gmail/api/ Gmail API Reference> for @gmail.users.messages.insert@.
+module Network.Google.Resource.Gmail.Users.Messages.Insert
+    (
+    -- * REST Resource
+      UsersMessagesInsertResource
+
+    -- * Creating a Request
+    , usersMessagesInsert
+    , UsersMessagesInsert
+
+    -- * Request Lenses
+    , uPayload
+    , uUserId
+    , uDeleted
+    , uInternalDateSource
+    ) where
+
+import           Network.Google.Gmail.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @gmail.users.messages.insert@ method which the
+-- 'UsersMessagesInsert' request conforms to.
+type UsersMessagesInsertResource =
+     "gmail" :>
+       "v1" :>
+         "users" :>
+           Capture "userId" Text :>
+             "messages" :>
+               QueryParam "deleted" Bool :>
+                 QueryParam "internalDateSource"
+                   UsersMessagesInsertInternalDateSource
+                   :>
+                   QueryParam "alt" AltJSON :>
+                     ReqBody '[JSON] Message :> Post '[JSON] Message
+       :<|>
+       "upload" :>
+         "gmail" :>
+           "v1" :>
+             "users" :>
+               Capture "userId" Text :>
+                 "messages" :>
+                   QueryParam "deleted" Bool :>
+                     QueryParam "internalDateSource"
+                       UsersMessagesInsertInternalDateSource
+                       :>
+                       QueryParam "alt" AltJSON :>
+                         QueryParam "uploadType" AltMedia :>
+                           MultipartRelated '[JSON] Message RequestBody :>
+                             Post '[JSON] Message
+
+-- | Directly inserts a message into only this user\'s mailbox similar to
+-- IMAP APPEND, bypassing most scanning and classification. Does not send a
+-- message.
+--
+-- /See:/ 'usersMessagesInsert' smart constructor.
+data UsersMessagesInsert = UsersMessagesInsert
+    { _uPayload            :: !Message
+    , _uUserId             :: !Text
+    , _uDeleted            :: !Bool
+    , _uInternalDateSource :: !UsersMessagesInsertInternalDateSource
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'UsersMessagesInsert' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'uPayload'
+--
+-- * 'uUserId'
+--
+-- * 'uDeleted'
+--
+-- * 'uInternalDateSource'
+usersMessagesInsert
+    :: Message -- ^ 'uPayload'
+    -> Text
+    -> UsersMessagesInsert
+usersMessagesInsert pUPayload_ pUUserId_ =
+    UsersMessagesInsert
+    { _uPayload = pUPayload_
+    , _uUserId = "me"
+    , _uDeleted = False
+    , _uInternalDateSource = UMIIDSReceivedTime
+    }
+
+-- | Multipart request metadata.
+uPayload :: Lens' UsersMessagesInsert Message
+uPayload = lens _uPayload (\ s a -> s{_uPayload = a})
+
+-- | The user\'s email address. The special value me can be used to indicate
+-- the authenticated user.
+uUserId :: Lens' UsersMessagesInsert Text
+uUserId = lens _uUserId (\ s a -> s{_uUserId = a})
+
+-- | Mark the email as permanently deleted (not TRASH) and only visible in
+-- Google Apps Vault to a Vault administrator. Only used for Google Apps
+-- for Work accounts.
+uDeleted :: Lens' UsersMessagesInsert Bool
+uDeleted = lens _uDeleted (\ s a -> s{_uDeleted = a})
+
+-- | Source for Gmail\'s internal date of the message.
+uInternalDateSource :: Lens' UsersMessagesInsert UsersMessagesInsertInternalDateSource
+uInternalDateSource
+  = lens _uInternalDateSource
+      (\ s a -> s{_uInternalDateSource = a})
+
+instance GoogleRequest UsersMessagesInsert where
+        type Rs UsersMessagesInsert = Message
+        requestClient UsersMessagesInsert{..}
+          = go _uUserId (Just _uDeleted)
+              (Just _uInternalDateSource)
+              (Just AltJSON)
+              _uPayload
+              gmailService
+          where go :<|> _
+                  = buildClient
+                      (Proxy :: Proxy UsersMessagesInsertResource)
+                      mempty
+
+instance GoogleRequest
+         (MediaUpload UsersMessagesInsert) where
+        type Rs (MediaUpload UsersMessagesInsert) = Message
+        requestClient
+          (MediaUpload UsersMessagesInsert{..} body)
+          = go _uUserId (Just _uDeleted)
+              (Just _uInternalDateSource)
+              (Just AltJSON)
+              (Just AltMedia)
+              _uPayload
+              body
+              gmailService
+          where _ :<|> go
+                  = buildClient
+                      (Proxy :: Proxy UsersMessagesInsertResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Gmail/Users/Messages/List.hs b/gen/Network/Google/Resource/Gmail/Users/Messages/List.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Gmail/Users/Messages/List.hs
@@ -0,0 +1,153 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.Gmail.Users.Messages.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)
+--
+-- Lists the messages in the user\'s mailbox.
+--
+-- /See:/ <https://developers.google.com/gmail/api/ Gmail API Reference> for @gmail.users.messages.list@.
+module Network.Google.Resource.Gmail.Users.Messages.List
+    (
+    -- * REST Resource
+      UsersMessagesListResource
+
+    -- * Creating a Request
+    , usersMessagesList
+    , UsersMessagesList
+
+    -- * Request Lenses
+    , umlQ
+    , umlUserId
+    , umlIncludeSpamTrash
+    , umlLabelIds
+    , umlPageToken
+    , umlMaxResults
+    ) where
+
+import           Network.Google.Gmail.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @gmail.users.messages.list@ method which the
+-- 'UsersMessagesList' request conforms to.
+type UsersMessagesListResource =
+     "gmail" :>
+       "v1" :>
+         "users" :>
+           Capture "userId" Text :>
+             "messages" :>
+               QueryParam "q" Text :>
+                 QueryParam "includeSpamTrash" Bool :>
+                   QueryParams "labelIds" Text :>
+                     QueryParam "pageToken" Text :>
+                       QueryParam "maxResults" (Textual Word32) :>
+                         QueryParam "alt" AltJSON :>
+                           Get '[JSON] ListMessagesResponse
+
+-- | Lists the messages in the user\'s mailbox.
+--
+-- /See:/ 'usersMessagesList' smart constructor.
+data UsersMessagesList = UsersMessagesList
+    { _umlQ                :: !(Maybe Text)
+    , _umlUserId           :: !Text
+    , _umlIncludeSpamTrash :: !Bool
+    , _umlLabelIds         :: !(Maybe [Text])
+    , _umlPageToken        :: !(Maybe Text)
+    , _umlMaxResults       :: !(Textual Word32)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'UsersMessagesList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'umlQ'
+--
+-- * 'umlUserId'
+--
+-- * 'umlIncludeSpamTrash'
+--
+-- * 'umlLabelIds'
+--
+-- * 'umlPageToken'
+--
+-- * 'umlMaxResults'
+usersMessagesList
+    :: Text
+    -> UsersMessagesList
+usersMessagesList pUmlUserId_ =
+    UsersMessagesList
+    { _umlQ = Nothing
+    , _umlUserId = "me"
+    , _umlIncludeSpamTrash = False
+    , _umlLabelIds = Nothing
+    , _umlPageToken = Nothing
+    , _umlMaxResults = 100
+    }
+
+-- | Only return messages matching the specified query. Supports the same
+-- query format as the Gmail search box. For example,
+-- \"from:someuser\'example.com rfc822msgid: is:unread\".
+umlQ :: Lens' UsersMessagesList (Maybe Text)
+umlQ = lens _umlQ (\ s a -> s{_umlQ = a})
+
+-- | The user\'s email address. The special value me can be used to indicate
+-- the authenticated user.
+umlUserId :: Lens' UsersMessagesList Text
+umlUserId
+  = lens _umlUserId (\ s a -> s{_umlUserId = a})
+
+-- | Include messages from SPAM and TRASH in the results.
+umlIncludeSpamTrash :: Lens' UsersMessagesList Bool
+umlIncludeSpamTrash
+  = lens _umlIncludeSpamTrash
+      (\ s a -> s{_umlIncludeSpamTrash = a})
+
+-- | Only return messages with labels that match all of the specified label
+-- IDs.
+umlLabelIds :: Lens' UsersMessagesList [Text]
+umlLabelIds
+  = lens _umlLabelIds (\ s a -> s{_umlLabelIds = a}) .
+      _Default
+      . _Coerce
+
+-- | Page token to retrieve a specific page of results in the list.
+umlPageToken :: Lens' UsersMessagesList (Maybe Text)
+umlPageToken
+  = lens _umlPageToken (\ s a -> s{_umlPageToken = a})
+
+-- | Maximum number of messages to return.
+umlMaxResults :: Lens' UsersMessagesList Word32
+umlMaxResults
+  = lens _umlMaxResults
+      (\ s a -> s{_umlMaxResults = a})
+      . _Coerce
+
+instance GoogleRequest UsersMessagesList where
+        type Rs UsersMessagesList = ListMessagesResponse
+        requestClient UsersMessagesList{..}
+          = go _umlUserId _umlQ (Just _umlIncludeSpamTrash)
+              (_umlLabelIds ^. _Default)
+              _umlPageToken
+              (Just _umlMaxResults)
+              (Just AltJSON)
+              gmailService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy UsersMessagesListResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Gmail/Users/Messages/Modify.hs b/gen/Network/Google/Resource/Gmail/Users/Messages/Modify.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Gmail/Users/Messages/Modify.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.Gmail.Users.Messages.Modify
+-- 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)
+--
+-- Modifies the labels on the specified message.
+--
+-- /See:/ <https://developers.google.com/gmail/api/ Gmail API Reference> for @gmail.users.messages.modify@.
+module Network.Google.Resource.Gmail.Users.Messages.Modify
+    (
+    -- * REST Resource
+      UsersMessagesModifyResource
+
+    -- * Creating a Request
+    , usersMessagesModify
+    , UsersMessagesModify
+
+    -- * Request Lenses
+    , ummPayload
+    , ummUserId
+    , ummId
+    ) where
+
+import           Network.Google.Gmail.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @gmail.users.messages.modify@ method which the
+-- 'UsersMessagesModify' request conforms to.
+type UsersMessagesModifyResource =
+     "gmail" :>
+       "v1" :>
+         "users" :>
+           Capture "userId" Text :>
+             "messages" :>
+               Capture "id" Text :>
+                 "modify" :>
+                   QueryParam "alt" AltJSON :>
+                     ReqBody '[JSON] ModifyMessageRequest :>
+                       Post '[JSON] Message
+
+-- | Modifies the labels on the specified message.
+--
+-- /See:/ 'usersMessagesModify' smart constructor.
+data UsersMessagesModify = UsersMessagesModify
+    { _ummPayload :: !ModifyMessageRequest
+    , _ummUserId  :: !Text
+    , _ummId      :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'UsersMessagesModify' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ummPayload'
+--
+-- * 'ummUserId'
+--
+-- * 'ummId'
+usersMessagesModify
+    :: ModifyMessageRequest -- ^ 'ummPayload'
+    -> Text -- ^ 'ummId'
+    -> Text
+    -> UsersMessagesModify
+usersMessagesModify pUmmPayload_ pUmmUserId_ pUmmId_ =
+    UsersMessagesModify
+    { _ummPayload = pUmmPayload_
+    , _ummUserId = "me"
+    , _ummId = pUmmId_
+    }
+
+-- | Multipart request metadata.
+ummPayload :: Lens' UsersMessagesModify ModifyMessageRequest
+ummPayload
+  = lens _ummPayload (\ s a -> s{_ummPayload = a})
+
+-- | The user\'s email address. The special value me can be used to indicate
+-- the authenticated user.
+ummUserId :: Lens' UsersMessagesModify Text
+ummUserId
+  = lens _ummUserId (\ s a -> s{_ummUserId = a})
+
+-- | The ID of the message to modify.
+ummId :: Lens' UsersMessagesModify Text
+ummId = lens _ummId (\ s a -> s{_ummId = a})
+
+instance GoogleRequest UsersMessagesModify where
+        type Rs UsersMessagesModify = Message
+        requestClient UsersMessagesModify{..}
+          = go _ummUserId _ummId (Just AltJSON) _ummPayload
+              gmailService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy UsersMessagesModifyResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Gmail/Users/Messages/Send.hs b/gen/Network/Google/Resource/Gmail/Users/Messages/Send.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Gmail/Users/Messages/Send.hs
@@ -0,0 +1,127 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.Gmail.Users.Messages.Send
+-- 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)
+--
+-- Sends the specified message to the recipients in the To, Cc, and Bcc
+-- headers.
+--
+-- /See:/ <https://developers.google.com/gmail/api/ Gmail API Reference> for @gmail.users.messages.send@.
+module Network.Google.Resource.Gmail.Users.Messages.Send
+    (
+    -- * REST Resource
+      UsersMessagesSendResource
+
+    -- * Creating a Request
+    , usersMessagesSend
+    , UsersMessagesSend
+
+    -- * Request Lenses
+    , umsPayload
+    , umsUserId
+    ) where
+
+import           Network.Google.Gmail.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @gmail.users.messages.send@ method which the
+-- 'UsersMessagesSend' request conforms to.
+type UsersMessagesSendResource =
+     "gmail" :>
+       "v1" :>
+         "users" :>
+           Capture "userId" Text :>
+             "messages" :>
+               "send" :>
+                 QueryParam "alt" AltJSON :>
+                   ReqBody '[JSON] Message :> Post '[JSON] Message
+       :<|>
+       "upload" :>
+         "gmail" :>
+           "v1" :>
+             "users" :>
+               Capture "userId" Text :>
+                 "messages" :>
+                   "send" :>
+                     QueryParam "alt" AltJSON :>
+                       QueryParam "uploadType" AltMedia :>
+                         MultipartRelated '[JSON] Message RequestBody :>
+                           Post '[JSON] Message
+
+-- | Sends the specified message to the recipients in the To, Cc, and Bcc
+-- headers.
+--
+-- /See:/ 'usersMessagesSend' smart constructor.
+data UsersMessagesSend = UsersMessagesSend
+    { _umsPayload :: !Message
+    , _umsUserId  :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'UsersMessagesSend' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'umsPayload'
+--
+-- * 'umsUserId'
+usersMessagesSend
+    :: Message -- ^ 'umsPayload'
+    -> Text
+    -> UsersMessagesSend
+usersMessagesSend pUmsPayload_ pUmsUserId_ =
+    UsersMessagesSend
+    { _umsPayload = pUmsPayload_
+    , _umsUserId = "me"
+    }
+
+-- | Multipart request metadata.
+umsPayload :: Lens' UsersMessagesSend Message
+umsPayload
+  = lens _umsPayload (\ s a -> s{_umsPayload = a})
+
+-- | The user\'s email address. The special value me can be used to indicate
+-- the authenticated user.
+umsUserId :: Lens' UsersMessagesSend Text
+umsUserId
+  = lens _umsUserId (\ s a -> s{_umsUserId = a})
+
+instance GoogleRequest UsersMessagesSend where
+        type Rs UsersMessagesSend = Message
+        requestClient UsersMessagesSend{..}
+          = go _umsUserId (Just AltJSON) _umsPayload
+              gmailService
+          where go :<|> _
+                  = buildClient
+                      (Proxy :: Proxy UsersMessagesSendResource)
+                      mempty
+
+instance GoogleRequest
+         (MediaUpload UsersMessagesSend) where
+        type Rs (MediaUpload UsersMessagesSend) = Message
+        requestClient
+          (MediaUpload UsersMessagesSend{..} body)
+          = go _umsUserId (Just AltJSON) (Just AltMedia)
+              _umsPayload
+              body
+              gmailService
+          where _ :<|> go
+                  = buildClient
+                      (Proxy :: Proxy UsersMessagesSendResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Gmail/Users/Messages/Trash.hs b/gen/Network/Google/Resource/Gmail/Users/Messages/Trash.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Gmail/Users/Messages/Trash.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.Gmail.Users.Messages.Trash
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Moves the specified message to the trash.
+--
+-- /See:/ <https://developers.google.com/gmail/api/ Gmail API Reference> for @gmail.users.messages.trash@.
+module Network.Google.Resource.Gmail.Users.Messages.Trash
+    (
+    -- * REST Resource
+      UsersMessagesTrashResource
+
+    -- * Creating a Request
+    , usersMessagesTrash
+    , UsersMessagesTrash
+
+    -- * Request Lenses
+    , umtUserId
+    , umtId
+    ) where
+
+import           Network.Google.Gmail.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @gmail.users.messages.trash@ method which the
+-- 'UsersMessagesTrash' request conforms to.
+type UsersMessagesTrashResource =
+     "gmail" :>
+       "v1" :>
+         "users" :>
+           Capture "userId" Text :>
+             "messages" :>
+               Capture "id" Text :>
+                 "trash" :>
+                   QueryParam "alt" AltJSON :> Post '[JSON] Message
+
+-- | Moves the specified message to the trash.
+--
+-- /See:/ 'usersMessagesTrash' smart constructor.
+data UsersMessagesTrash = UsersMessagesTrash
+    { _umtUserId :: !Text
+    , _umtId     :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'UsersMessagesTrash' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'umtUserId'
+--
+-- * 'umtId'
+usersMessagesTrash
+    :: Text -- ^ 'umtId'
+    -> Text
+    -> UsersMessagesTrash
+usersMessagesTrash pUmtUserId_ pUmtId_ =
+    UsersMessagesTrash
+    { _umtUserId = "me"
+    , _umtId = pUmtId_
+    }
+
+-- | The user\'s email address. The special value me can be used to indicate
+-- the authenticated user.
+umtUserId :: Lens' UsersMessagesTrash Text
+umtUserId
+  = lens _umtUserId (\ s a -> s{_umtUserId = a})
+
+-- | The ID of the message to Trash.
+umtId :: Lens' UsersMessagesTrash Text
+umtId = lens _umtId (\ s a -> s{_umtId = a})
+
+instance GoogleRequest UsersMessagesTrash where
+        type Rs UsersMessagesTrash = Message
+        requestClient UsersMessagesTrash{..}
+          = go _umtUserId _umtId (Just AltJSON) gmailService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy UsersMessagesTrashResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Gmail/Users/Messages/Untrash.hs b/gen/Network/Google/Resource/Gmail/Users/Messages/Untrash.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Gmail/Users/Messages/Untrash.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.Gmail.Users.Messages.Untrash
+-- 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 specified message from the trash.
+--
+-- /See:/ <https://developers.google.com/gmail/api/ Gmail API Reference> for @gmail.users.messages.untrash@.
+module Network.Google.Resource.Gmail.Users.Messages.Untrash
+    (
+    -- * REST Resource
+      UsersMessagesUntrashResource
+
+    -- * Creating a Request
+    , usersMessagesUntrash
+    , UsersMessagesUntrash
+
+    -- * Request Lenses
+    , umuUserId
+    , umuId
+    ) where
+
+import           Network.Google.Gmail.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @gmail.users.messages.untrash@ method which the
+-- 'UsersMessagesUntrash' request conforms to.
+type UsersMessagesUntrashResource =
+     "gmail" :>
+       "v1" :>
+         "users" :>
+           Capture "userId" Text :>
+             "messages" :>
+               Capture "id" Text :>
+                 "untrash" :>
+                   QueryParam "alt" AltJSON :> Post '[JSON] Message
+
+-- | Removes the specified message from the trash.
+--
+-- /See:/ 'usersMessagesUntrash' smart constructor.
+data UsersMessagesUntrash = UsersMessagesUntrash
+    { _umuUserId :: !Text
+    , _umuId     :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'UsersMessagesUntrash' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'umuUserId'
+--
+-- * 'umuId'
+usersMessagesUntrash
+    :: Text -- ^ 'umuId'
+    -> Text
+    -> UsersMessagesUntrash
+usersMessagesUntrash pUmuUserId_ pUmuId_ =
+    UsersMessagesUntrash
+    { _umuUserId = "me"
+    , _umuId = pUmuId_
+    }
+
+-- | The user\'s email address. The special value me can be used to indicate
+-- the authenticated user.
+umuUserId :: Lens' UsersMessagesUntrash Text
+umuUserId
+  = lens _umuUserId (\ s a -> s{_umuUserId = a})
+
+-- | The ID of the message to remove from Trash.
+umuId :: Lens' UsersMessagesUntrash Text
+umuId = lens _umuId (\ s a -> s{_umuId = a})
+
+instance GoogleRequest UsersMessagesUntrash where
+        type Rs UsersMessagesUntrash = Message
+        requestClient UsersMessagesUntrash{..}
+          = go _umuUserId _umuId (Just AltJSON) gmailService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy UsersMessagesUntrashResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Gmail/Users/Stop.hs b/gen/Network/Google/Resource/Gmail/Users/Stop.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Gmail/Users/Stop.hs
@@ -0,0 +1,82 @@
+{-# 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.Gmail.Users.Stop
+-- 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)
+--
+-- Stop receiving push notifications for the given user mailbox.
+--
+-- /See:/ <https://developers.google.com/gmail/api/ Gmail API Reference> for @gmail.users.stop@.
+module Network.Google.Resource.Gmail.Users.Stop
+    (
+    -- * REST Resource
+      UsersStopResource
+
+    -- * Creating a Request
+    , usersStop
+    , UsersStop
+
+    -- * Request Lenses
+    , usUserId
+    ) where
+
+import           Network.Google.Gmail.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @gmail.users.stop@ method which the
+-- 'UsersStop' request conforms to.
+type UsersStopResource =
+     "gmail" :>
+       "v1" :>
+         "users" :>
+           Capture "userId" Text :>
+             "stop" :> QueryParam "alt" AltJSON :> Post '[JSON] ()
+
+-- | Stop receiving push notifications for the given user mailbox.
+--
+-- /See:/ 'usersStop' smart constructor.
+newtype UsersStop = UsersStop
+    { _usUserId :: Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'UsersStop' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'usUserId'
+usersStop
+    :: Text
+    -> UsersStop
+usersStop pUsUserId_ =
+    UsersStop
+    { _usUserId = "me"
+    }
+
+-- | The user\'s email address. The special value me can be used to indicate
+-- the authenticated user.
+usUserId :: Lens' UsersStop Text
+usUserId = lens _usUserId (\ s a -> s{_usUserId = a})
+
+instance GoogleRequest UsersStop where
+        type Rs UsersStop = ()
+        requestClient UsersStop{..}
+          = go _usUserId (Just AltJSON) gmailService
+          where go
+                  = buildClient (Proxy :: Proxy UsersStopResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Gmail/Users/Threads/Delete.hs b/gen/Network/Google/Resource/Gmail/Users/Threads/Delete.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Gmail/Users/Threads/Delete.hs
@@ -0,0 +1,98 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.Gmail.Users.Threads.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)
+--
+-- Immediately and permanently deletes the specified thread. This operation
+-- cannot be undone. Prefer threads.trash instead.
+--
+-- /See:/ <https://developers.google.com/gmail/api/ Gmail API Reference> for @gmail.users.threads.delete@.
+module Network.Google.Resource.Gmail.Users.Threads.Delete
+    (
+    -- * REST Resource
+      UsersThreadsDeleteResource
+
+    -- * Creating a Request
+    , usersThreadsDelete
+    , UsersThreadsDelete
+
+    -- * Request Lenses
+    , utdUserId
+    , utdId
+    ) where
+
+import           Network.Google.Gmail.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @gmail.users.threads.delete@ method which the
+-- 'UsersThreadsDelete' request conforms to.
+type UsersThreadsDeleteResource =
+     "gmail" :>
+       "v1" :>
+         "users" :>
+           Capture "userId" Text :>
+             "threads" :>
+               Capture "id" Text :>
+                 QueryParam "alt" AltJSON :> Delete '[JSON] ()
+
+-- | Immediately and permanently deletes the specified thread. This operation
+-- cannot be undone. Prefer threads.trash instead.
+--
+-- /See:/ 'usersThreadsDelete' smart constructor.
+data UsersThreadsDelete = UsersThreadsDelete
+    { _utdUserId :: !Text
+    , _utdId     :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'UsersThreadsDelete' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'utdUserId'
+--
+-- * 'utdId'
+usersThreadsDelete
+    :: Text -- ^ 'utdId'
+    -> Text
+    -> UsersThreadsDelete
+usersThreadsDelete pUtdUserId_ pUtdId_ =
+    UsersThreadsDelete
+    { _utdUserId = "me"
+    , _utdId = pUtdId_
+    }
+
+-- | The user\'s email address. The special value me can be used to indicate
+-- the authenticated user.
+utdUserId :: Lens' UsersThreadsDelete Text
+utdUserId
+  = lens _utdUserId (\ s a -> s{_utdUserId = a})
+
+-- | ID of the Thread to delete.
+utdId :: Lens' UsersThreadsDelete Text
+utdId = lens _utdId (\ s a -> s{_utdId = a})
+
+instance GoogleRequest UsersThreadsDelete where
+        type Rs UsersThreadsDelete = ()
+        requestClient UsersThreadsDelete{..}
+          = go _utdUserId _utdId (Just AltJSON) gmailService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy UsersThreadsDeleteResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Gmail/Users/Threads/Get.hs b/gen/Network/Google/Resource/Gmail/Users/Threads/Get.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Gmail/Users/Threads/Get.hs
@@ -0,0 +1,124 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.Gmail.Users.Threads.Get
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Gets the specified thread.
+--
+-- /See:/ <https://developers.google.com/gmail/api/ Gmail API Reference> for @gmail.users.threads.get@.
+module Network.Google.Resource.Gmail.Users.Threads.Get
+    (
+    -- * REST Resource
+      UsersThreadsGetResource
+
+    -- * Creating a Request
+    , usersThreadsGet
+    , UsersThreadsGet
+
+    -- * Request Lenses
+    , utgFormat
+    , utgUserId
+    , utgId
+    , utgMetadataHeaders
+    ) where
+
+import           Network.Google.Gmail.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @gmail.users.threads.get@ method which the
+-- 'UsersThreadsGet' request conforms to.
+type UsersThreadsGetResource =
+     "gmail" :>
+       "v1" :>
+         "users" :>
+           Capture "userId" Text :>
+             "threads" :>
+               Capture "id" Text :>
+                 QueryParam "format" UsersThreadsGetFormat :>
+                   QueryParams "metadataHeaders" Text :>
+                     QueryParam "alt" AltJSON :> Get '[JSON] Thread
+
+-- | Gets the specified thread.
+--
+-- /See:/ 'usersThreadsGet' smart constructor.
+data UsersThreadsGet = UsersThreadsGet
+    { _utgFormat          :: !UsersThreadsGetFormat
+    , _utgUserId          :: !Text
+    , _utgId              :: !Text
+    , _utgMetadataHeaders :: !(Maybe [Text])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'UsersThreadsGet' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'utgFormat'
+--
+-- * 'utgUserId'
+--
+-- * 'utgId'
+--
+-- * 'utgMetadataHeaders'
+usersThreadsGet
+    :: Text -- ^ 'utgId'
+    -> Text
+    -> UsersThreadsGet
+usersThreadsGet pUtgUserId_ pUtgId_ =
+    UsersThreadsGet
+    { _utgFormat = UTGFFull
+    , _utgUserId = "me"
+    , _utgId = pUtgId_
+    , _utgMetadataHeaders = Nothing
+    }
+
+-- | The format to return the messages in.
+utgFormat :: Lens' UsersThreadsGet UsersThreadsGetFormat
+utgFormat
+  = lens _utgFormat (\ s a -> s{_utgFormat = a})
+
+-- | The user\'s email address. The special value me can be used to indicate
+-- the authenticated user.
+utgUserId :: Lens' UsersThreadsGet Text
+utgUserId
+  = lens _utgUserId (\ s a -> s{_utgUserId = a})
+
+-- | The ID of the thread to retrieve.
+utgId :: Lens' UsersThreadsGet Text
+utgId = lens _utgId (\ s a -> s{_utgId = a})
+
+-- | When given and format is METADATA, only include headers specified.
+utgMetadataHeaders :: Lens' UsersThreadsGet [Text]
+utgMetadataHeaders
+  = lens _utgMetadataHeaders
+      (\ s a -> s{_utgMetadataHeaders = a})
+      . _Default
+      . _Coerce
+
+instance GoogleRequest UsersThreadsGet where
+        type Rs UsersThreadsGet = Thread
+        requestClient UsersThreadsGet{..}
+          = go _utgUserId _utgId (Just _utgFormat)
+              (_utgMetadataHeaders ^. _Default)
+              (Just AltJSON)
+              gmailService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy UsersThreadsGetResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Gmail/Users/Threads/List.hs b/gen/Network/Google/Resource/Gmail/Users/Threads/List.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Gmail/Users/Threads/List.hs
@@ -0,0 +1,153 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.Gmail.Users.Threads.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)
+--
+-- Lists the threads in the user\'s mailbox.
+--
+-- /See:/ <https://developers.google.com/gmail/api/ Gmail API Reference> for @gmail.users.threads.list@.
+module Network.Google.Resource.Gmail.Users.Threads.List
+    (
+    -- * REST Resource
+      UsersThreadsListResource
+
+    -- * Creating a Request
+    , usersThreadsList
+    , UsersThreadsList
+
+    -- * Request Lenses
+    , utlQ
+    , utlUserId
+    , utlIncludeSpamTrash
+    , utlLabelIds
+    , utlPageToken
+    , utlMaxResults
+    ) where
+
+import           Network.Google.Gmail.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @gmail.users.threads.list@ method which the
+-- 'UsersThreadsList' request conforms to.
+type UsersThreadsListResource =
+     "gmail" :>
+       "v1" :>
+         "users" :>
+           Capture "userId" Text :>
+             "threads" :>
+               QueryParam "q" Text :>
+                 QueryParam "includeSpamTrash" Bool :>
+                   QueryParams "labelIds" Text :>
+                     QueryParam "pageToken" Text :>
+                       QueryParam "maxResults" (Textual Word32) :>
+                         QueryParam "alt" AltJSON :>
+                           Get '[JSON] ListThreadsResponse
+
+-- | Lists the threads in the user\'s mailbox.
+--
+-- /See:/ 'usersThreadsList' smart constructor.
+data UsersThreadsList = UsersThreadsList
+    { _utlQ                :: !(Maybe Text)
+    , _utlUserId           :: !Text
+    , _utlIncludeSpamTrash :: !Bool
+    , _utlLabelIds         :: !(Maybe [Text])
+    , _utlPageToken        :: !(Maybe Text)
+    , _utlMaxResults       :: !(Textual Word32)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'UsersThreadsList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'utlQ'
+--
+-- * 'utlUserId'
+--
+-- * 'utlIncludeSpamTrash'
+--
+-- * 'utlLabelIds'
+--
+-- * 'utlPageToken'
+--
+-- * 'utlMaxResults'
+usersThreadsList
+    :: Text
+    -> UsersThreadsList
+usersThreadsList pUtlUserId_ =
+    UsersThreadsList
+    { _utlQ = Nothing
+    , _utlUserId = "me"
+    , _utlIncludeSpamTrash = False
+    , _utlLabelIds = Nothing
+    , _utlPageToken = Nothing
+    , _utlMaxResults = 100
+    }
+
+-- | Only return threads matching the specified query. Supports the same
+-- query format as the Gmail search box. For example,
+-- \"from:someuser\'example.com rfc822msgid: is:unread\".
+utlQ :: Lens' UsersThreadsList (Maybe Text)
+utlQ = lens _utlQ (\ s a -> s{_utlQ = a})
+
+-- | The user\'s email address. The special value me can be used to indicate
+-- the authenticated user.
+utlUserId :: Lens' UsersThreadsList Text
+utlUserId
+  = lens _utlUserId (\ s a -> s{_utlUserId = a})
+
+-- | Include threads from SPAM and TRASH in the results.
+utlIncludeSpamTrash :: Lens' UsersThreadsList Bool
+utlIncludeSpamTrash
+  = lens _utlIncludeSpamTrash
+      (\ s a -> s{_utlIncludeSpamTrash = a})
+
+-- | Only return threads with labels that match all of the specified label
+-- IDs.
+utlLabelIds :: Lens' UsersThreadsList [Text]
+utlLabelIds
+  = lens _utlLabelIds (\ s a -> s{_utlLabelIds = a}) .
+      _Default
+      . _Coerce
+
+-- | Page token to retrieve a specific page of results in the list.
+utlPageToken :: Lens' UsersThreadsList (Maybe Text)
+utlPageToken
+  = lens _utlPageToken (\ s a -> s{_utlPageToken = a})
+
+-- | Maximum number of threads to return.
+utlMaxResults :: Lens' UsersThreadsList Word32
+utlMaxResults
+  = lens _utlMaxResults
+      (\ s a -> s{_utlMaxResults = a})
+      . _Coerce
+
+instance GoogleRequest UsersThreadsList where
+        type Rs UsersThreadsList = ListThreadsResponse
+        requestClient UsersThreadsList{..}
+          = go _utlUserId _utlQ (Just _utlIncludeSpamTrash)
+              (_utlLabelIds ^. _Default)
+              _utlPageToken
+              (Just _utlMaxResults)
+              (Just AltJSON)
+              gmailService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy UsersThreadsListResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Gmail/Users/Threads/Modify.hs b/gen/Network/Google/Resource/Gmail/Users/Threads/Modify.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Gmail/Users/Threads/Modify.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.Gmail.Users.Threads.Modify
+-- 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)
+--
+-- Modifies the labels applied to the thread. This applies to all messages
+-- in the thread.
+--
+-- /See:/ <https://developers.google.com/gmail/api/ Gmail API Reference> for @gmail.users.threads.modify@.
+module Network.Google.Resource.Gmail.Users.Threads.Modify
+    (
+    -- * REST Resource
+      UsersThreadsModifyResource
+
+    -- * Creating a Request
+    , usersThreadsModify
+    , UsersThreadsModify
+
+    -- * Request Lenses
+    , utmPayload
+    , utmUserId
+    , utmId
+    ) where
+
+import           Network.Google.Gmail.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @gmail.users.threads.modify@ method which the
+-- 'UsersThreadsModify' request conforms to.
+type UsersThreadsModifyResource =
+     "gmail" :>
+       "v1" :>
+         "users" :>
+           Capture "userId" Text :>
+             "threads" :>
+               Capture "id" Text :>
+                 "modify" :>
+                   QueryParam "alt" AltJSON :>
+                     ReqBody '[JSON] ModifyThreadRequest :>
+                       Post '[JSON] Thread
+
+-- | Modifies the labels applied to the thread. This applies to all messages
+-- in the thread.
+--
+-- /See:/ 'usersThreadsModify' smart constructor.
+data UsersThreadsModify = UsersThreadsModify
+    { _utmPayload :: !ModifyThreadRequest
+    , _utmUserId  :: !Text
+    , _utmId      :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'UsersThreadsModify' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'utmPayload'
+--
+-- * 'utmUserId'
+--
+-- * 'utmId'
+usersThreadsModify
+    :: ModifyThreadRequest -- ^ 'utmPayload'
+    -> Text -- ^ 'utmId'
+    -> Text
+    -> UsersThreadsModify
+usersThreadsModify pUtmPayload_ pUtmUserId_ pUtmId_ =
+    UsersThreadsModify
+    { _utmPayload = pUtmPayload_
+    , _utmUserId = "me"
+    , _utmId = pUtmId_
+    }
+
+-- | Multipart request metadata.
+utmPayload :: Lens' UsersThreadsModify ModifyThreadRequest
+utmPayload
+  = lens _utmPayload (\ s a -> s{_utmPayload = a})
+
+-- | The user\'s email address. The special value me can be used to indicate
+-- the authenticated user.
+utmUserId :: Lens' UsersThreadsModify Text
+utmUserId
+  = lens _utmUserId (\ s a -> s{_utmUserId = a})
+
+-- | The ID of the thread to modify.
+utmId :: Lens' UsersThreadsModify Text
+utmId = lens _utmId (\ s a -> s{_utmId = a})
+
+instance GoogleRequest UsersThreadsModify where
+        type Rs UsersThreadsModify = Thread
+        requestClient UsersThreadsModify{..}
+          = go _utmUserId _utmId (Just AltJSON) _utmPayload
+              gmailService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy UsersThreadsModifyResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Gmail/Users/Threads/Trash.hs b/gen/Network/Google/Resource/Gmail/Users/Threads/Trash.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Gmail/Users/Threads/Trash.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.Gmail.Users.Threads.Trash
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Moves the specified thread to the trash.
+--
+-- /See:/ <https://developers.google.com/gmail/api/ Gmail API Reference> for @gmail.users.threads.trash@.
+module Network.Google.Resource.Gmail.Users.Threads.Trash
+    (
+    -- * REST Resource
+      UsersThreadsTrashResource
+
+    -- * Creating a Request
+    , usersThreadsTrash
+    , UsersThreadsTrash
+
+    -- * Request Lenses
+    , uttUserId
+    , uttId
+    ) where
+
+import           Network.Google.Gmail.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @gmail.users.threads.trash@ method which the
+-- 'UsersThreadsTrash' request conforms to.
+type UsersThreadsTrashResource =
+     "gmail" :>
+       "v1" :>
+         "users" :>
+           Capture "userId" Text :>
+             "threads" :>
+               Capture "id" Text :>
+                 "trash" :>
+                   QueryParam "alt" AltJSON :> Post '[JSON] Thread
+
+-- | Moves the specified thread to the trash.
+--
+-- /See:/ 'usersThreadsTrash' smart constructor.
+data UsersThreadsTrash = UsersThreadsTrash
+    { _uttUserId :: !Text
+    , _uttId     :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'UsersThreadsTrash' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'uttUserId'
+--
+-- * 'uttId'
+usersThreadsTrash
+    :: Text -- ^ 'uttId'
+    -> Text
+    -> UsersThreadsTrash
+usersThreadsTrash pUttUserId_ pUttId_ =
+    UsersThreadsTrash
+    { _uttUserId = "me"
+    , _uttId = pUttId_
+    }
+
+-- | The user\'s email address. The special value me can be used to indicate
+-- the authenticated user.
+uttUserId :: Lens' UsersThreadsTrash Text
+uttUserId
+  = lens _uttUserId (\ s a -> s{_uttUserId = a})
+
+-- | The ID of the thread to Trash.
+uttId :: Lens' UsersThreadsTrash Text
+uttId = lens _uttId (\ s a -> s{_uttId = a})
+
+instance GoogleRequest UsersThreadsTrash where
+        type Rs UsersThreadsTrash = Thread
+        requestClient UsersThreadsTrash{..}
+          = go _uttUserId _uttId (Just AltJSON) gmailService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy UsersThreadsTrashResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Gmail/Users/Threads/Untrash.hs b/gen/Network/Google/Resource/Gmail/Users/Threads/Untrash.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Gmail/Users/Threads/Untrash.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.Gmail.Users.Threads.Untrash
+-- 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 specified thread from the trash.
+--
+-- /See:/ <https://developers.google.com/gmail/api/ Gmail API Reference> for @gmail.users.threads.untrash@.
+module Network.Google.Resource.Gmail.Users.Threads.Untrash
+    (
+    -- * REST Resource
+      UsersThreadsUntrashResource
+
+    -- * Creating a Request
+    , usersThreadsUntrash
+    , UsersThreadsUntrash
+
+    -- * Request Lenses
+    , utuUserId
+    , utuId
+    ) where
+
+import           Network.Google.Gmail.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @gmail.users.threads.untrash@ method which the
+-- 'UsersThreadsUntrash' request conforms to.
+type UsersThreadsUntrashResource =
+     "gmail" :>
+       "v1" :>
+         "users" :>
+           Capture "userId" Text :>
+             "threads" :>
+               Capture "id" Text :>
+                 "untrash" :>
+                   QueryParam "alt" AltJSON :> Post '[JSON] Thread
+
+-- | Removes the specified thread from the trash.
+--
+-- /See:/ 'usersThreadsUntrash' smart constructor.
+data UsersThreadsUntrash = UsersThreadsUntrash
+    { _utuUserId :: !Text
+    , _utuId     :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'UsersThreadsUntrash' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'utuUserId'
+--
+-- * 'utuId'
+usersThreadsUntrash
+    :: Text -- ^ 'utuId'
+    -> Text
+    -> UsersThreadsUntrash
+usersThreadsUntrash pUtuUserId_ pUtuId_ =
+    UsersThreadsUntrash
+    { _utuUserId = "me"
+    , _utuId = pUtuId_
+    }
+
+-- | The user\'s email address. The special value me can be used to indicate
+-- the authenticated user.
+utuUserId :: Lens' UsersThreadsUntrash Text
+utuUserId
+  = lens _utuUserId (\ s a -> s{_utuUserId = a})
+
+-- | The ID of the thread to remove from Trash.
+utuId :: Lens' UsersThreadsUntrash Text
+utuId = lens _utuId (\ s a -> s{_utuId = a})
+
+instance GoogleRequest UsersThreadsUntrash where
+        type Rs UsersThreadsUntrash = Thread
+        requestClient UsersThreadsUntrash{..}
+          = go _utuUserId _utuId (Just AltJSON) gmailService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy UsersThreadsUntrashResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Gmail/Users/Watch.hs b/gen/Network/Google/Resource/Gmail/Users/Watch.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Gmail/Users/Watch.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.Gmail.Users.Watch
+-- 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)
+--
+-- Set up or update a push notification watch on the given user mailbox.
+--
+-- /See:/ <https://developers.google.com/gmail/api/ Gmail API Reference> for @gmail.users.watch@.
+module Network.Google.Resource.Gmail.Users.Watch
+    (
+    -- * REST Resource
+      UsersWatchResource
+
+    -- * Creating a Request
+    , usersWatch
+    , UsersWatch
+
+    -- * Request Lenses
+    , uwPayload
+    , uwUserId
+    ) where
+
+import           Network.Google.Gmail.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @gmail.users.watch@ method which the
+-- 'UsersWatch' request conforms to.
+type UsersWatchResource =
+     "gmail" :>
+       "v1" :>
+         "users" :>
+           Capture "userId" Text :>
+             "watch" :>
+               QueryParam "alt" AltJSON :>
+                 ReqBody '[JSON] WatchRequest :>
+                   Post '[JSON] WatchResponse
+
+-- | Set up or update a push notification watch on the given user mailbox.
+--
+-- /See:/ 'usersWatch' smart constructor.
+data UsersWatch = UsersWatch
+    { _uwPayload :: !WatchRequest
+    , _uwUserId  :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'UsersWatch' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'uwPayload'
+--
+-- * 'uwUserId'
+usersWatch
+    :: WatchRequest -- ^ 'uwPayload'
+    -> Text
+    -> UsersWatch
+usersWatch pUwPayload_ pUwUserId_ =
+    UsersWatch
+    { _uwPayload = pUwPayload_
+    , _uwUserId = "me"
+    }
+
+-- | Multipart request metadata.
+uwPayload :: Lens' UsersWatch WatchRequest
+uwPayload
+  = lens _uwPayload (\ s a -> s{_uwPayload = a})
+
+-- | The user\'s email address. The special value me can be used to indicate
+-- the authenticated user.
+uwUserId :: Lens' UsersWatch Text
+uwUserId = lens _uwUserId (\ s a -> s{_uwUserId = a})
+
+instance GoogleRequest UsersWatch where
+        type Rs UsersWatch = WatchResponse
+        requestClient UsersWatch{..}
+          = go _uwUserId (Just AltJSON) _uwPayload gmailService
+          where go
+                  = buildClient (Proxy :: Proxy UsersWatchResource)
+                      mempty
diff --git a/gogol-gmail.cabal b/gogol-gmail.cabal
new file mode 100644
--- /dev/null
+++ b/gogol-gmail.cabal
@@ -0,0 +1,77 @@
+name:                  gogol-gmail
+version:               0.0.1
+synopsis:              Google Gmail 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:
+    The Gmail REST API.
+    .
+    /Warning:/ This is an experimental prototype/preview release which is still
+    under exploratory development and not intended for public use, caveat emptor!
+    .
+    This library is compatible with version @v1@
+    of the API.
+
+source-repository head
+    type:     git
+    location: git://github.com/brendanhay/gogol.git
+
+library
+    default-language:  Haskell2010
+    hs-source-dirs:    src gen
+
+    ghc-options:       -Wall
+
+    exposed-modules:
+          Network.Google.Gmail
+        , Network.Google.Gmail.Types
+        , Network.Google.Resource.Gmail.Users.Drafts.Create
+        , Network.Google.Resource.Gmail.Users.Drafts.Delete
+        , Network.Google.Resource.Gmail.Users.Drafts.Get
+        , Network.Google.Resource.Gmail.Users.Drafts.List
+        , Network.Google.Resource.Gmail.Users.Drafts.Send
+        , Network.Google.Resource.Gmail.Users.Drafts.Update
+        , Network.Google.Resource.Gmail.Users.GetProFile
+        , Network.Google.Resource.Gmail.Users.History.List
+        , Network.Google.Resource.Gmail.Users.Labels.Create
+        , Network.Google.Resource.Gmail.Users.Labels.Delete
+        , Network.Google.Resource.Gmail.Users.Labels.Get
+        , Network.Google.Resource.Gmail.Users.Labels.List
+        , Network.Google.Resource.Gmail.Users.Labels.Patch
+        , Network.Google.Resource.Gmail.Users.Labels.Update
+        , Network.Google.Resource.Gmail.Users.Messages.Attachments.Get
+        , Network.Google.Resource.Gmail.Users.Messages.Delete
+        , Network.Google.Resource.Gmail.Users.Messages.Get
+        , Network.Google.Resource.Gmail.Users.Messages.Import
+        , Network.Google.Resource.Gmail.Users.Messages.Insert
+        , Network.Google.Resource.Gmail.Users.Messages.List
+        , Network.Google.Resource.Gmail.Users.Messages.Modify
+        , Network.Google.Resource.Gmail.Users.Messages.Send
+        , Network.Google.Resource.Gmail.Users.Messages.Trash
+        , Network.Google.Resource.Gmail.Users.Messages.Untrash
+        , Network.Google.Resource.Gmail.Users.Stop
+        , Network.Google.Resource.Gmail.Users.Threads.Delete
+        , Network.Google.Resource.Gmail.Users.Threads.Get
+        , Network.Google.Resource.Gmail.Users.Threads.List
+        , Network.Google.Resource.Gmail.Users.Threads.Modify
+        , Network.Google.Resource.Gmail.Users.Threads.Trash
+        , Network.Google.Resource.Gmail.Users.Threads.Untrash
+        , Network.Google.Resource.Gmail.Users.Watch
+
+    other-modules:
+          Network.Google.Gmail.Types.Product
+        , Network.Google.Gmail.Types.Sum
+
+    build-depends:
+          gogol-core == 0.0.1.*
+        , base       >= 4.7 && < 5
