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-cloudscheduler
+
+* [Version](#version)
+* [Description](#description)
+* [Contribute](#contribute)
+* [Licence](#licence)
+
+
+## Version
+
+`0.3.0`
+
+
+## Description
+
+A client library for the Google Cloud Scheduler.
+
+
+## Contribute
+
+For any problems, comments, or feedback please create an issue [here on GitHub](https://github.com/brendanhay/gogol/issues).
+
+> _Note:_ this library is an auto-generated Haskell package. Please see `gogol-gen` for more information.
+
+
+## Licence
+
+`gogol-cloudscheduler` 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/CloudScheduler.hs b/gen/Network/Google/CloudScheduler.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/CloudScheduler.hs
@@ -0,0 +1,250 @@
+{-# LANGUAGE DataKinds         #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# LANGUAGE TypeOperators     #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+
+-- |
+-- Module      : Network.Google.CloudScheduler
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates and manages jobs run on a regular recurring schedule.
+--
+-- /See:/ <https://cloud.google.com/scheduler/ Cloud Scheduler API Reference>
+module Network.Google.CloudScheduler
+    (
+    -- * Service Configuration
+      cloudSchedulerService
+
+    -- * OAuth Scopes
+    , cloudPlatformScope
+
+    -- * API Declaration
+    , CloudSchedulerAPI
+
+    -- * Resources
+
+    -- ** cloudscheduler.projects.locations.get
+    , module Network.Google.Resource.CloudScheduler.Projects.Locations.Get
+
+    -- ** cloudscheduler.projects.locations.jobs.create
+    , module Network.Google.Resource.CloudScheduler.Projects.Locations.Jobs.Create
+
+    -- ** cloudscheduler.projects.locations.jobs.delete
+    , module Network.Google.Resource.CloudScheduler.Projects.Locations.Jobs.Delete
+
+    -- ** cloudscheduler.projects.locations.jobs.get
+    , module Network.Google.Resource.CloudScheduler.Projects.Locations.Jobs.Get
+
+    -- ** cloudscheduler.projects.locations.jobs.list
+    , module Network.Google.Resource.CloudScheduler.Projects.Locations.Jobs.List
+
+    -- ** cloudscheduler.projects.locations.jobs.patch
+    , module Network.Google.Resource.CloudScheduler.Projects.Locations.Jobs.Patch
+
+    -- ** cloudscheduler.projects.locations.jobs.pause
+    , module Network.Google.Resource.CloudScheduler.Projects.Locations.Jobs.Pause
+
+    -- ** cloudscheduler.projects.locations.jobs.resume
+    , module Network.Google.Resource.CloudScheduler.Projects.Locations.Jobs.Resume
+
+    -- ** cloudscheduler.projects.locations.jobs.run
+    , module Network.Google.Resource.CloudScheduler.Projects.Locations.Jobs.Run
+
+    -- ** cloudscheduler.projects.locations.list
+    , module Network.Google.Resource.CloudScheduler.Projects.Locations.List
+
+    -- * Types
+
+    -- ** Status
+    , Status
+    , status
+    , sDetails
+    , sCode
+    , sMessage
+
+    -- ** PauseJobRequest
+    , PauseJobRequest
+    , pauseJobRequest
+
+    -- ** ListLocationsResponse
+    , ListLocationsResponse
+    , listLocationsResponse
+    , llrNextPageToken
+    , llrLocations
+
+    -- ** ResumeJobRequest
+    , ResumeJobRequest
+    , resumeJobRequest
+
+    -- ** AppEngineHTTPTargetHeaders
+    , AppEngineHTTPTargetHeaders
+    , appEngineHTTPTargetHeaders
+    , aehttpthAddtional
+
+    -- ** RetryConfig
+    , RetryConfig
+    , retryConfig
+    , rcMaxDoublings
+    , rcMaxRetryDuration
+    , rcMinBackoffDuration
+    , rcRetryCount
+    , rcMaxBackoffDuration
+
+    -- ** Location
+    , Location
+    , location
+    , lName
+    , lMetadata
+    , lDisplayName
+    , lLabels
+    , lLocationId
+
+    -- ** Empty
+    , Empty
+    , empty
+
+    -- ** PubsubTargetAttributes
+    , PubsubTargetAttributes
+    , pubsubTargetAttributes
+    , ptaAddtional
+
+    -- ** HTTPTargetHeaders
+    , HTTPTargetHeaders
+    , hTTPTargetHeaders
+    , httpthAddtional
+
+    -- ** PubsubMessage
+    , PubsubMessage
+    , pubsubMessage
+    , pmData
+    , pmPublishTime
+    , pmAttributes
+    , pmMessageId
+
+    -- ** JobState
+    , JobState (..)
+
+    -- ** StatusDetailsItem
+    , StatusDetailsItem
+    , statusDetailsItem
+    , sdiAddtional
+
+    -- ** AppEngineHTTPTarget
+    , AppEngineHTTPTarget
+    , appEngineHTTPTarget
+    , aehttptHTTPMethod
+    , aehttptRelativeURI
+    , aehttptBody
+    , aehttptHeaders
+    , aehttptAppEngineRouting
+
+    -- ** HTTPTarget
+    , HTTPTarget
+    , hTTPTarget
+    , httptHTTPMethod
+    , httptBody
+    , httptURI
+    , httptHeaders
+
+    -- ** RunJobRequest
+    , RunJobRequest
+    , runJobRequest
+
+    -- ** Job
+    , Job
+    , job
+    , jStatus
+    , jState
+    , jLastAttemptTime
+    , jRetryConfig
+    , jSchedule
+    , jScheduleTime
+    , jAppEngineHTTPTarget
+    , jHTTPTarget
+    , jName
+    , jPubsubTarget
+    , jUserUpdateTime
+    , jTimeZone
+    , jDescription
+
+    -- ** PubsubMessageAttributes
+    , PubsubMessageAttributes
+    , pubsubMessageAttributes
+    , pmaAddtional
+
+    -- ** PubsubTarget
+    , PubsubTarget
+    , pubsubTarget
+    , ptData
+    , ptTopicName
+    , ptAttributes
+
+    -- ** Xgafv
+    , Xgafv (..)
+
+    -- ** ListJobsResponse
+    , ListJobsResponse
+    , listJobsResponse
+    , ljrNextPageToken
+    , ljrJobs
+
+    -- ** LocationLabels
+    , LocationLabels
+    , locationLabels
+    , llAddtional
+
+    -- ** LocationMetadata
+    , LocationMetadata
+    , locationMetadata
+    , lmAddtional
+
+    -- ** AppEngineRouting
+    , AppEngineRouting
+    , appEngineRouting
+    , aerService
+    , aerVersion
+    , aerHost
+    , aerInstance
+
+    -- ** HTTPTargetHTTPMethod
+    , HTTPTargetHTTPMethod (..)
+
+    -- ** AppEngineHTTPTargetHTTPMethod
+    , AppEngineHTTPTargetHTTPMethod (..)
+    ) where
+
+import           Network.Google.CloudScheduler.Types
+import           Network.Google.Prelude
+import           Network.Google.Resource.CloudScheduler.Projects.Locations.Get
+import           Network.Google.Resource.CloudScheduler.Projects.Locations.Jobs.Create
+import           Network.Google.Resource.CloudScheduler.Projects.Locations.Jobs.Delete
+import           Network.Google.Resource.CloudScheduler.Projects.Locations.Jobs.Get
+import           Network.Google.Resource.CloudScheduler.Projects.Locations.Jobs.List
+import           Network.Google.Resource.CloudScheduler.Projects.Locations.Jobs.Patch
+import           Network.Google.Resource.CloudScheduler.Projects.Locations.Jobs.Pause
+import           Network.Google.Resource.CloudScheduler.Projects.Locations.Jobs.Resume
+import           Network.Google.Resource.CloudScheduler.Projects.Locations.Jobs.Run
+import           Network.Google.Resource.CloudScheduler.Projects.Locations.List
+
+{- $resources
+TODO
+-}
+
+-- | Represents the entirety of the methods and resources available for the Cloud Scheduler API service.
+type CloudSchedulerAPI =
+     ProjectsLocationsJobsListResource :<|>
+       ProjectsLocationsJobsPatchResource
+       :<|> ProjectsLocationsJobsGetResource
+       :<|> ProjectsLocationsJobsRunResource
+       :<|> ProjectsLocationsJobsCreateResource
+       :<|> ProjectsLocationsJobsPauseResource
+       :<|> ProjectsLocationsJobsDeleteResource
+       :<|> ProjectsLocationsJobsResumeResource
+       :<|> ProjectsLocationsListResource
+       :<|> ProjectsLocationsGetResource
diff --git a/gen/Network/Google/CloudScheduler/Types.hs b/gen/Network/Google/CloudScheduler/Types.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/CloudScheduler/Types.hs
@@ -0,0 +1,195 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- |
+-- Module      : Network.Google.CloudScheduler.Types
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+module Network.Google.CloudScheduler.Types
+    (
+    -- * Service Configuration
+      cloudSchedulerService
+
+    -- * OAuth Scopes
+    , cloudPlatformScope
+
+    -- * Status
+    , Status
+    , status
+    , sDetails
+    , sCode
+    , sMessage
+
+    -- * PauseJobRequest
+    , PauseJobRequest
+    , pauseJobRequest
+
+    -- * ListLocationsResponse
+    , ListLocationsResponse
+    , listLocationsResponse
+    , llrNextPageToken
+    , llrLocations
+
+    -- * ResumeJobRequest
+    , ResumeJobRequest
+    , resumeJobRequest
+
+    -- * AppEngineHTTPTargetHeaders
+    , AppEngineHTTPTargetHeaders
+    , appEngineHTTPTargetHeaders
+    , aehttpthAddtional
+
+    -- * RetryConfig
+    , RetryConfig
+    , retryConfig
+    , rcMaxDoublings
+    , rcMaxRetryDuration
+    , rcMinBackoffDuration
+    , rcRetryCount
+    , rcMaxBackoffDuration
+
+    -- * Location
+    , Location
+    , location
+    , lName
+    , lMetadata
+    , lDisplayName
+    , lLabels
+    , lLocationId
+
+    -- * Empty
+    , Empty
+    , empty
+
+    -- * PubsubTargetAttributes
+    , PubsubTargetAttributes
+    , pubsubTargetAttributes
+    , ptaAddtional
+
+    -- * HTTPTargetHeaders
+    , HTTPTargetHeaders
+    , hTTPTargetHeaders
+    , httpthAddtional
+
+    -- * PubsubMessage
+    , PubsubMessage
+    , pubsubMessage
+    , pmData
+    , pmPublishTime
+    , pmAttributes
+    , pmMessageId
+
+    -- * JobState
+    , JobState (..)
+
+    -- * StatusDetailsItem
+    , StatusDetailsItem
+    , statusDetailsItem
+    , sdiAddtional
+
+    -- * AppEngineHTTPTarget
+    , AppEngineHTTPTarget
+    , appEngineHTTPTarget
+    , aehttptHTTPMethod
+    , aehttptRelativeURI
+    , aehttptBody
+    , aehttptHeaders
+    , aehttptAppEngineRouting
+
+    -- * HTTPTarget
+    , HTTPTarget
+    , hTTPTarget
+    , httptHTTPMethod
+    , httptBody
+    , httptURI
+    , httptHeaders
+
+    -- * RunJobRequest
+    , RunJobRequest
+    , runJobRequest
+
+    -- * Job
+    , Job
+    , job
+    , jStatus
+    , jState
+    , jLastAttemptTime
+    , jRetryConfig
+    , jSchedule
+    , jScheduleTime
+    , jAppEngineHTTPTarget
+    , jHTTPTarget
+    , jName
+    , jPubsubTarget
+    , jUserUpdateTime
+    , jTimeZone
+    , jDescription
+
+    -- * PubsubMessageAttributes
+    , PubsubMessageAttributes
+    , pubsubMessageAttributes
+    , pmaAddtional
+
+    -- * PubsubTarget
+    , PubsubTarget
+    , pubsubTarget
+    , ptData
+    , ptTopicName
+    , ptAttributes
+
+    -- * Xgafv
+    , Xgafv (..)
+
+    -- * ListJobsResponse
+    , ListJobsResponse
+    , listJobsResponse
+    , ljrNextPageToken
+    , ljrJobs
+
+    -- * LocationLabels
+    , LocationLabels
+    , locationLabels
+    , llAddtional
+
+    -- * LocationMetadata
+    , LocationMetadata
+    , locationMetadata
+    , lmAddtional
+
+    -- * AppEngineRouting
+    , AppEngineRouting
+    , appEngineRouting
+    , aerService
+    , aerVersion
+    , aerHost
+    , aerInstance
+
+    -- * HTTPTargetHTTPMethod
+    , HTTPTargetHTTPMethod (..)
+
+    -- * AppEngineHTTPTargetHTTPMethod
+    , AppEngineHTTPTargetHTTPMethod (..)
+    ) where
+
+import           Network.Google.CloudScheduler.Types.Product
+import           Network.Google.CloudScheduler.Types.Sum
+import           Network.Google.Prelude
+
+-- | Default request referring to version 'v1beta1' of the Cloud Scheduler API. This contains the host and root path used as a starting point for constructing service requests.
+cloudSchedulerService :: ServiceConfig
+cloudSchedulerService
+  = defaultService (ServiceId "cloudscheduler:v1beta1")
+      "cloudscheduler.googleapis.com"
+
+-- | View and manage your data across Google Cloud Platform services
+cloudPlatformScope :: Proxy '["https://www.googleapis.com/auth/cloud-platform"]
+cloudPlatformScope = Proxy;
diff --git a/gen/Network/Google/CloudScheduler/Types/Product.hs b/gen/Network/Google/CloudScheduler/Types/Product.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/CloudScheduler/Types/Product.hs
@@ -0,0 +1,1450 @@
+{-# 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.CloudScheduler.Types.Product
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+module Network.Google.CloudScheduler.Types.Product where
+
+import           Network.Google.CloudScheduler.Types.Sum
+import           Network.Google.Prelude
+
+-- | The \`Status\` type defines a logical error model that is suitable for
+-- different programming environments, including REST APIs and RPC APIs. It
+-- is used by [gRPC](https:\/\/github.com\/grpc). The error model is
+-- designed to be: - Simple to use and understand for most users - Flexible
+-- enough to meet unexpected needs # Overview The \`Status\` message
+-- contains three pieces of data: error code, error message, and error
+-- details. The error code should be an enum value of google.rpc.Code, but
+-- it may accept additional error codes if needed. The error message should
+-- be a developer-facing English message that helps developers *understand*
+-- and *resolve* the error. If a localized user-facing error message is
+-- needed, put the localized message in the error details or localize it in
+-- the client. The optional error details may contain arbitrary information
+-- about the error. There is a predefined set of error detail types in the
+-- package \`google.rpc\` that can be used for common error conditions. #
+-- Language mapping The \`Status\` message is the logical representation of
+-- the error model, but it is not necessarily the actual wire format. When
+-- the \`Status\` message is exposed in different client libraries and
+-- different wire protocols, it can be mapped differently. For example, it
+-- will likely be mapped to some exceptions in Java, but more likely mapped
+-- to some error codes in C. # Other uses The error model and the
+-- \`Status\` message can be used in a variety of environments, either with
+-- or without APIs, to provide a consistent developer experience across
+-- different environments. Example uses of this error model include: -
+-- Partial errors. If a service needs to return partial errors to the
+-- client, it may embed the \`Status\` in the normal response to indicate
+-- the partial errors. - Workflow errors. A typical workflow has multiple
+-- steps. Each step may have a \`Status\` message for error reporting. -
+-- Batch operations. If a client uses batch request and batch response, the
+-- \`Status\` message should be used directly inside batch response, one
+-- for each error sub-response. - Asynchronous operations. If an API call
+-- embeds asynchronous operation results in its response, the status of
+-- those operations should be represented directly using the \`Status\`
+-- message. - Logging. If some API errors are stored in logs, the message
+-- \`Status\` could be used directly after any stripping needed for
+-- security\/privacy reasons.
+--
+-- /See:/ 'status' smart constructor.
+data Status = Status'
+    { _sDetails :: !(Maybe [StatusDetailsItem])
+    , _sCode    :: !(Maybe (Textual Int32))
+    , _sMessage :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Status' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'sDetails'
+--
+-- * 'sCode'
+--
+-- * 'sMessage'
+status
+    :: Status
+status =
+    Status'
+    { _sDetails = Nothing
+    , _sCode = Nothing
+    , _sMessage = Nothing
+    }
+
+-- | A list of messages that carry the error details. There is a common set
+-- of message types for APIs to use.
+sDetails :: Lens' Status [StatusDetailsItem]
+sDetails
+  = lens _sDetails (\ s a -> s{_sDetails = a}) .
+      _Default
+      . _Coerce
+
+-- | The status code, which should be an enum value of google.rpc.Code.
+sCode :: Lens' Status (Maybe Int32)
+sCode
+  = lens _sCode (\ s a -> s{_sCode = a}) .
+      mapping _Coerce
+
+-- | A developer-facing error message, which should be in English. Any
+-- user-facing error message should be localized and sent in the
+-- google.rpc.Status.details field, or localized by the client.
+sMessage :: Lens' Status (Maybe Text)
+sMessage = lens _sMessage (\ s a -> s{_sMessage = a})
+
+instance FromJSON Status where
+        parseJSON
+          = withObject "Status"
+              (\ o ->
+                 Status' <$>
+                   (o .:? "details" .!= mempty) <*> (o .:? "code") <*>
+                     (o .:? "message"))
+
+instance ToJSON Status where
+        toJSON Status'{..}
+          = object
+              (catMaybes
+                 [("details" .=) <$> _sDetails,
+                  ("code" .=) <$> _sCode,
+                  ("message" .=) <$> _sMessage])
+
+-- | Request message for PauseJob.
+--
+-- /See:/ 'pauseJobRequest' smart constructor.
+data PauseJobRequest =
+    PauseJobRequest'
+    deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'PauseJobRequest' with the minimum fields required to make a request.
+--
+pauseJobRequest
+    :: PauseJobRequest
+pauseJobRequest = PauseJobRequest'
+
+instance FromJSON PauseJobRequest where
+        parseJSON
+          = withObject "PauseJobRequest"
+              (\ o -> pure PauseJobRequest')
+
+instance ToJSON PauseJobRequest where
+        toJSON = const emptyObject
+
+-- | The response message for Locations.ListLocations.
+--
+-- /See:/ 'listLocationsResponse' smart constructor.
+data ListLocationsResponse = ListLocationsResponse'
+    { _llrNextPageToken :: !(Maybe Text)
+    , _llrLocations     :: !(Maybe [Location])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ListLocationsResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'llrNextPageToken'
+--
+-- * 'llrLocations'
+listLocationsResponse
+    :: ListLocationsResponse
+listLocationsResponse =
+    ListLocationsResponse'
+    { _llrNextPageToken = Nothing
+    , _llrLocations = Nothing
+    }
+
+-- | The standard List next-page token.
+llrNextPageToken :: Lens' ListLocationsResponse (Maybe Text)
+llrNextPageToken
+  = lens _llrNextPageToken
+      (\ s a -> s{_llrNextPageToken = a})
+
+-- | A list of locations that matches the specified filter in the request.
+llrLocations :: Lens' ListLocationsResponse [Location]
+llrLocations
+  = lens _llrLocations (\ s a -> s{_llrLocations = a})
+      . _Default
+      . _Coerce
+
+instance FromJSON ListLocationsResponse where
+        parseJSON
+          = withObject "ListLocationsResponse"
+              (\ o ->
+                 ListLocationsResponse' <$>
+                   (o .:? "nextPageToken") <*>
+                     (o .:? "locations" .!= mempty))
+
+instance ToJSON ListLocationsResponse where
+        toJSON ListLocationsResponse'{..}
+          = object
+              (catMaybes
+                 [("nextPageToken" .=) <$> _llrNextPageToken,
+                  ("locations" .=) <$> _llrLocations])
+
+-- | Request message for ResumeJob.
+--
+-- /See:/ 'resumeJobRequest' smart constructor.
+data ResumeJobRequest =
+    ResumeJobRequest'
+    deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ResumeJobRequest' with the minimum fields required to make a request.
+--
+resumeJobRequest
+    :: ResumeJobRequest
+resumeJobRequest = ResumeJobRequest'
+
+instance FromJSON ResumeJobRequest where
+        parseJSON
+          = withObject "ResumeJobRequest"
+              (\ o -> pure ResumeJobRequest')
+
+instance ToJSON ResumeJobRequest where
+        toJSON = const emptyObject
+
+-- | HTTP request headers. This map contains the header field names and
+-- values. Headers can be set when the job is created. Cloud Scheduler sets
+-- some headers to default values: * \`User-Agent\`: By default, this
+-- header is \`\"AppEngine-Google;
+-- (+http:\/\/code.google.com\/appengine)\"\`. This header can be modified,
+-- but Cloud Scheduler will append \`\"AppEngine-Google;
+-- (+http:\/\/code.google.com\/appengine)\"\` to the modified
+-- \`User-Agent\`. * \`X-CloudScheduler\`: This header will be set to true.
+-- If the job has an body, Cloud Scheduler sets the following headers: *
+-- \`Content-Type\`: By default, the \`Content-Type\` header is set to
+-- \`\"application\/octet-stream\"\`. The default can be overridden by
+-- explictly setting \`Content-Type\` to a particular media type when the
+-- job is created. For example, \`Content-Type\` can be set to
+-- \`\"application\/json\"\`. * \`Content-Length\`: This is computed by
+-- Cloud Scheduler. This value is output only. It cannot be changed. The
+-- headers below are output only. They cannot be set or overridden: *
+-- \`X-Google-*\`: For Google internal use only. * \`X-AppEngine-*\`: For
+-- Google internal use only. In addition, some App Engine headers, which
+-- contain job-specific information, are also be sent to the job handler.
+--
+-- /See:/ 'appEngineHTTPTargetHeaders' smart constructor.
+newtype AppEngineHTTPTargetHeaders = AppEngineHTTPTargetHeaders'
+    { _aehttpthAddtional :: HashMap Text Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'AppEngineHTTPTargetHeaders' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'aehttpthAddtional'
+appEngineHTTPTargetHeaders
+    :: HashMap Text Text -- ^ 'aehttpthAddtional'
+    -> AppEngineHTTPTargetHeaders
+appEngineHTTPTargetHeaders pAehttpthAddtional_ =
+    AppEngineHTTPTargetHeaders'
+    { _aehttpthAddtional = _Coerce # pAehttpthAddtional_
+    }
+
+aehttpthAddtional :: Lens' AppEngineHTTPTargetHeaders (HashMap Text Text)
+aehttpthAddtional
+  = lens _aehttpthAddtional
+      (\ s a -> s{_aehttpthAddtional = a})
+      . _Coerce
+
+instance FromJSON AppEngineHTTPTargetHeaders where
+        parseJSON
+          = withObject "AppEngineHTTPTargetHeaders"
+              (\ o ->
+                 AppEngineHTTPTargetHeaders' <$> (parseJSONObject o))
+
+instance ToJSON AppEngineHTTPTargetHeaders where
+        toJSON = toJSON . _aehttpthAddtional
+
+-- | Settings that determine the retry behavior. By default, if a job does
+-- not complete successfully (meaning that an acknowledgement is not
+-- received from the handler, then it will be retried with exponential
+-- backoff according to the settings in RetryConfig.
+--
+-- /See:/ 'retryConfig' smart constructor.
+data RetryConfig = RetryConfig'
+    { _rcMaxDoublings       :: !(Maybe (Textual Int32))
+    , _rcMaxRetryDuration   :: !(Maybe GDuration)
+    , _rcMinBackoffDuration :: !(Maybe GDuration)
+    , _rcRetryCount         :: !(Maybe (Textual Int32))
+    , _rcMaxBackoffDuration :: !(Maybe GDuration)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'RetryConfig' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'rcMaxDoublings'
+--
+-- * 'rcMaxRetryDuration'
+--
+-- * 'rcMinBackoffDuration'
+--
+-- * 'rcRetryCount'
+--
+-- * 'rcMaxBackoffDuration'
+retryConfig
+    :: RetryConfig
+retryConfig =
+    RetryConfig'
+    { _rcMaxDoublings = Nothing
+    , _rcMaxRetryDuration = Nothing
+    , _rcMinBackoffDuration = Nothing
+    , _rcRetryCount = Nothing
+    , _rcMaxBackoffDuration = Nothing
+    }
+
+-- | The time between retries will double \`max_doublings\` times. A job\'s
+-- retry interval starts at min_backoff_duration, then doubles
+-- \`max_doublings\` times, then increases linearly, and finally retries
+-- retries at intervals of max_backoff_duration up to retry_count times.
+-- For example, if min_backoff_duration is 10s, max_backoff_duration is
+-- 300s, and \`max_doublings\` is 3, then the a job will first be retried
+-- in 10s. The retry interval will double three times, and then increase
+-- linearly by 2^3 * 10s. Finally, the job will retry at intervals of
+-- max_backoff_duration until the job has been attempted retry_count times.
+-- Thus, the requests will retry at 10s, 20s, 40s, 80s, 160s, 240s, 300s,
+-- 300s, .... The default value of this field is 5.
+rcMaxDoublings :: Lens' RetryConfig (Maybe Int32)
+rcMaxDoublings
+  = lens _rcMaxDoublings
+      (\ s a -> s{_rcMaxDoublings = a})
+      . mapping _Coerce
+
+-- | The time limit for retrying a failed job, measured from time when an
+-- execution was first attempted. If specified with retry_count, the job
+-- will be retried until both limits are reached. The default value for
+-- max_retry_duration is zero, which means retry duration is unlimited.
+rcMaxRetryDuration :: Lens' RetryConfig (Maybe Scientific)
+rcMaxRetryDuration
+  = lens _rcMaxRetryDuration
+      (\ s a -> s{_rcMaxRetryDuration = a})
+      . mapping _GDuration
+
+-- | The minimum amount of time to wait before retrying a job after it fails.
+-- The default value of this field is 5 seconds.
+rcMinBackoffDuration :: Lens' RetryConfig (Maybe Scientific)
+rcMinBackoffDuration
+  = lens _rcMinBackoffDuration
+      (\ s a -> s{_rcMinBackoffDuration = a})
+      . mapping _GDuration
+
+-- | The number of attempts that the system will make to run a job using the
+-- exponential backoff procedure described by max_doublings. The default
+-- value of retry_count is zero. If retry_count is zero, a job attempt will
+-- *not* be retried if it fails. Instead the Cloud Scheduler system will
+-- wait for the next scheduled execution time. If retry_count is set to a
+-- non-zero number then Cloud Scheduler will retry failed attempts, using
+-- exponential backoff, retry_count times, or until the next scheduled
+-- execution time, whichever comes first. Values greater than 5 and
+-- negative values are not allowed.
+rcRetryCount :: Lens' RetryConfig (Maybe Int32)
+rcRetryCount
+  = lens _rcRetryCount (\ s a -> s{_rcRetryCount = a})
+      . mapping _Coerce
+
+-- | The maximum amount of time to wait before retrying a job after it fails.
+-- The default value of this field is 1 hour.
+rcMaxBackoffDuration :: Lens' RetryConfig (Maybe Scientific)
+rcMaxBackoffDuration
+  = lens _rcMaxBackoffDuration
+      (\ s a -> s{_rcMaxBackoffDuration = a})
+      . mapping _GDuration
+
+instance FromJSON RetryConfig where
+        parseJSON
+          = withObject "RetryConfig"
+              (\ o ->
+                 RetryConfig' <$>
+                   (o .:? "maxDoublings") <*> (o .:? "maxRetryDuration")
+                     <*> (o .:? "minBackoffDuration")
+                     <*> (o .:? "retryCount")
+                     <*> (o .:? "maxBackoffDuration"))
+
+instance ToJSON RetryConfig where
+        toJSON RetryConfig'{..}
+          = object
+              (catMaybes
+                 [("maxDoublings" .=) <$> _rcMaxDoublings,
+                  ("maxRetryDuration" .=) <$> _rcMaxRetryDuration,
+                  ("minBackoffDuration" .=) <$> _rcMinBackoffDuration,
+                  ("retryCount" .=) <$> _rcRetryCount,
+                  ("maxBackoffDuration" .=) <$> _rcMaxBackoffDuration])
+
+-- | A resource that represents Google Cloud Platform location.
+--
+-- /See:/ 'location' smart constructor.
+data Location = Location'
+    { _lName        :: !(Maybe Text)
+    , _lMetadata    :: !(Maybe LocationMetadata)
+    , _lDisplayName :: !(Maybe Text)
+    , _lLabels      :: !(Maybe LocationLabels)
+    , _lLocationId  :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Location' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'lName'
+--
+-- * 'lMetadata'
+--
+-- * 'lDisplayName'
+--
+-- * 'lLabels'
+--
+-- * 'lLocationId'
+location
+    :: Location
+location =
+    Location'
+    { _lName = Nothing
+    , _lMetadata = Nothing
+    , _lDisplayName = Nothing
+    , _lLabels = Nothing
+    , _lLocationId = Nothing
+    }
+
+-- | Resource name for the location, which may vary between implementations.
+-- For example: \`\"projects\/example-project\/locations\/us-east1\"\`
+lName :: Lens' Location (Maybe Text)
+lName = lens _lName (\ s a -> s{_lName = a})
+
+-- | Service-specific metadata. For example the available capacity at the
+-- given location.
+lMetadata :: Lens' Location (Maybe LocationMetadata)
+lMetadata
+  = lens _lMetadata (\ s a -> s{_lMetadata = a})
+
+-- | The friendly name for this location, typically a nearby city name. For
+-- example, \"Tokyo\".
+lDisplayName :: Lens' Location (Maybe Text)
+lDisplayName
+  = lens _lDisplayName (\ s a -> s{_lDisplayName = a})
+
+-- | Cross-service attributes for the location. For example
+-- {\"cloud.googleapis.com\/region\": \"us-east1\"}
+lLabels :: Lens' Location (Maybe LocationLabels)
+lLabels = lens _lLabels (\ s a -> s{_lLabels = a})
+
+-- | The canonical id for this location. For example: \`\"us-east1\"\`.
+lLocationId :: Lens' Location (Maybe Text)
+lLocationId
+  = lens _lLocationId (\ s a -> s{_lLocationId = a})
+
+instance FromJSON Location where
+        parseJSON
+          = withObject "Location"
+              (\ o ->
+                 Location' <$>
+                   (o .:? "name") <*> (o .:? "metadata") <*>
+                     (o .:? "displayName")
+                     <*> (o .:? "labels")
+                     <*> (o .:? "locationId"))
+
+instance ToJSON Location where
+        toJSON Location'{..}
+          = object
+              (catMaybes
+                 [("name" .=) <$> _lName,
+                  ("metadata" .=) <$> _lMetadata,
+                  ("displayName" .=) <$> _lDisplayName,
+                  ("labels" .=) <$> _lLabels,
+                  ("locationId" .=) <$> _lLocationId])
+
+-- | A generic empty message that you can re-use to avoid defining duplicated
+-- empty messages in your APIs. A typical example is to use it as the
+-- request or the response type of an API method. For instance: service Foo
+-- { rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty); } The
+-- JSON representation for \`Empty\` is empty JSON object \`{}\`.
+--
+-- /See:/ 'empty' smart constructor.
+data Empty =
+    Empty'
+    deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Empty' with the minimum fields required to make a request.
+--
+empty
+    :: Empty
+empty = Empty'
+
+instance FromJSON Empty where
+        parseJSON = withObject "Empty" (\ o -> pure Empty')
+
+instance ToJSON Empty where
+        toJSON = const emptyObject
+
+-- | Attributes for PubsubMessage. Pubsub message must contain either
+-- non-empty data, or at least one attribute.
+--
+-- /See:/ 'pubsubTargetAttributes' smart constructor.
+newtype PubsubTargetAttributes = PubsubTargetAttributes'
+    { _ptaAddtional :: HashMap Text Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'PubsubTargetAttributes' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ptaAddtional'
+pubsubTargetAttributes
+    :: HashMap Text Text -- ^ 'ptaAddtional'
+    -> PubsubTargetAttributes
+pubsubTargetAttributes pPtaAddtional_ =
+    PubsubTargetAttributes'
+    { _ptaAddtional = _Coerce # pPtaAddtional_
+    }
+
+ptaAddtional :: Lens' PubsubTargetAttributes (HashMap Text Text)
+ptaAddtional
+  = lens _ptaAddtional (\ s a -> s{_ptaAddtional = a})
+      . _Coerce
+
+instance FromJSON PubsubTargetAttributes where
+        parseJSON
+          = withObject "PubsubTargetAttributes"
+              (\ o ->
+                 PubsubTargetAttributes' <$> (parseJSONObject o))
+
+instance ToJSON PubsubTargetAttributes where
+        toJSON = toJSON . _ptaAddtional
+
+-- | The user can specify HTTP request headers to send with the job\'s HTTP
+-- request. This map contains the header field names and values. Repeated
+-- headers are not supported, but a header value can contain commas. These
+-- headers represent a subset of the headers that will accompany the job\'s
+-- HTTP request. Some HTTP request headers will be ignored or replaced. A
+-- partial list of headers that will be ignored or replaced is below: -
+-- Host: This will be computed by Cloud Scheduler and derived from uri. *
+-- \`Content-Length\`: This will be computed by Cloud Scheduler. *
+-- \`User-Agent\`: This will be set to \`\"Google-Cloud-Scheduler\"\`. *
+-- \`X-Google-*\`: Google internal use only. * \`X-AppEngine-*\`: Google
+-- internal use only. The total size of headers must be less than 80KB.
+--
+-- /See:/ 'hTTPTargetHeaders' smart constructor.
+newtype HTTPTargetHeaders = HTTPTargetHeaders'
+    { _httpthAddtional :: HashMap Text Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'HTTPTargetHeaders' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'httpthAddtional'
+hTTPTargetHeaders
+    :: HashMap Text Text -- ^ 'httpthAddtional'
+    -> HTTPTargetHeaders
+hTTPTargetHeaders pHttpthAddtional_ =
+    HTTPTargetHeaders'
+    { _httpthAddtional = _Coerce # pHttpthAddtional_
+    }
+
+httpthAddtional :: Lens' HTTPTargetHeaders (HashMap Text Text)
+httpthAddtional
+  = lens _httpthAddtional
+      (\ s a -> s{_httpthAddtional = a})
+      . _Coerce
+
+instance FromJSON HTTPTargetHeaders where
+        parseJSON
+          = withObject "HTTPTargetHeaders"
+              (\ o -> HTTPTargetHeaders' <$> (parseJSONObject o))
+
+instance ToJSON HTTPTargetHeaders where
+        toJSON = toJSON . _httpthAddtional
+
+-- | A message that is published by publishers and consumed by subscribers.
+-- The message must contain either a non-empty data field or at least one
+-- attribute. Note that client libraries represent this object differently
+-- depending on the language. See the corresponding
+-- <https://cloud.google.com/pubsub/docs/reference/libraries client library documentation>
+-- for more information. See
+-- <https://cloud.google.com/pubsub/quotas Quotas and limits> for more
+-- information about message limits.
+--
+-- /See:/ 'pubsubMessage' smart constructor.
+data PubsubMessage = PubsubMessage'
+    { _pmData        :: !(Maybe Bytes)
+    , _pmPublishTime :: !(Maybe DateTime')
+    , _pmAttributes  :: !(Maybe PubsubMessageAttributes)
+    , _pmMessageId   :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'PubsubMessage' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pmData'
+--
+-- * 'pmPublishTime'
+--
+-- * 'pmAttributes'
+--
+-- * 'pmMessageId'
+pubsubMessage
+    :: PubsubMessage
+pubsubMessage =
+    PubsubMessage'
+    { _pmData = Nothing
+    , _pmPublishTime = Nothing
+    , _pmAttributes = Nothing
+    , _pmMessageId = Nothing
+    }
+
+-- | The message data field. If this field is empty, the message must contain
+-- at least one attribute.
+pmData :: Lens' PubsubMessage (Maybe ByteString)
+pmData
+  = lens _pmData (\ s a -> s{_pmData = a}) .
+      mapping _Bytes
+
+-- | The time at which the message was published, populated by the server
+-- when it receives the \`Publish\` call. It must not be populated by the
+-- publisher in a \`Publish\` call.
+pmPublishTime :: Lens' PubsubMessage (Maybe UTCTime)
+pmPublishTime
+  = lens _pmPublishTime
+      (\ s a -> s{_pmPublishTime = a})
+      . mapping _DateTime
+
+-- | Optional attributes for this message.
+pmAttributes :: Lens' PubsubMessage (Maybe PubsubMessageAttributes)
+pmAttributes
+  = lens _pmAttributes (\ s a -> s{_pmAttributes = a})
+
+-- | ID of this message, assigned by the server when the message is
+-- published. Guaranteed to be unique within the topic. This value may be
+-- read by a subscriber that receives a \`PubsubMessage\` via a \`Pull\`
+-- call or a push delivery. It must not be populated by the publisher in a
+-- \`Publish\` call.
+pmMessageId :: Lens' PubsubMessage (Maybe Text)
+pmMessageId
+  = lens _pmMessageId (\ s a -> s{_pmMessageId = a})
+
+instance FromJSON PubsubMessage where
+        parseJSON
+          = withObject "PubsubMessage"
+              (\ o ->
+                 PubsubMessage' <$>
+                   (o .:? "data") <*> (o .:? "publishTime") <*>
+                     (o .:? "attributes")
+                     <*> (o .:? "messageId"))
+
+instance ToJSON PubsubMessage where
+        toJSON PubsubMessage'{..}
+          = object
+              (catMaybes
+                 [("data" .=) <$> _pmData,
+                  ("publishTime" .=) <$> _pmPublishTime,
+                  ("attributes" .=) <$> _pmAttributes,
+                  ("messageId" .=) <$> _pmMessageId])
+
+--
+-- /See:/ 'statusDetailsItem' smart constructor.
+newtype StatusDetailsItem = StatusDetailsItem'
+    { _sdiAddtional :: HashMap Text JSONValue
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'StatusDetailsItem' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'sdiAddtional'
+statusDetailsItem
+    :: HashMap Text JSONValue -- ^ 'sdiAddtional'
+    -> StatusDetailsItem
+statusDetailsItem pSdiAddtional_ =
+    StatusDetailsItem'
+    { _sdiAddtional = _Coerce # pSdiAddtional_
+    }
+
+-- | Properties of the object. Contains field \'type with type URL.
+sdiAddtional :: Lens' StatusDetailsItem (HashMap Text JSONValue)
+sdiAddtional
+  = lens _sdiAddtional (\ s a -> s{_sdiAddtional = a})
+      . _Coerce
+
+instance FromJSON StatusDetailsItem where
+        parseJSON
+          = withObject "StatusDetailsItem"
+              (\ o -> StatusDetailsItem' <$> (parseJSONObject o))
+
+instance ToJSON StatusDetailsItem where
+        toJSON = toJSON . _sdiAddtional
+
+-- | App Engine target. The job will be pushed to a job handler by means of
+-- an HTTP request via an http_method such as HTTP POST, HTTP GET, etc. The
+-- job is acknowledged by means of an HTTP response code in the range [200
+-- - 299]. Error 503 is considered an App Engine system error instead of an
+-- application error. Requests returning error 503 will be retried
+-- regardless of retry configuration and not counted against retry counts.
+-- Any other response code, or a failure to receive a response before the
+-- deadline, constitutes a failed attempt.
+--
+-- /See:/ 'appEngineHTTPTarget' smart constructor.
+data AppEngineHTTPTarget = AppEngineHTTPTarget'
+    { _aehttptHTTPMethod       :: !(Maybe AppEngineHTTPTargetHTTPMethod)
+    , _aehttptRelativeURI      :: !(Maybe Text)
+    , _aehttptBody             :: !(Maybe Bytes)
+    , _aehttptHeaders          :: !(Maybe AppEngineHTTPTargetHeaders)
+    , _aehttptAppEngineRouting :: !(Maybe AppEngineRouting)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'AppEngineHTTPTarget' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'aehttptHTTPMethod'
+--
+-- * 'aehttptRelativeURI'
+--
+-- * 'aehttptBody'
+--
+-- * 'aehttptHeaders'
+--
+-- * 'aehttptAppEngineRouting'
+appEngineHTTPTarget
+    :: AppEngineHTTPTarget
+appEngineHTTPTarget =
+    AppEngineHTTPTarget'
+    { _aehttptHTTPMethod = Nothing
+    , _aehttptRelativeURI = Nothing
+    , _aehttptBody = Nothing
+    , _aehttptHeaders = Nothing
+    , _aehttptAppEngineRouting = Nothing
+    }
+
+-- | The HTTP method to use for the request. PATCH and OPTIONS are not
+-- permitted.
+aehttptHTTPMethod :: Lens' AppEngineHTTPTarget (Maybe AppEngineHTTPTargetHTTPMethod)
+aehttptHTTPMethod
+  = lens _aehttptHTTPMethod
+      (\ s a -> s{_aehttptHTTPMethod = a})
+
+-- | The relative URI. The relative URL must begin with \"\/\" and must be a
+-- valid HTTP relative URL. It can contain a path, query string arguments,
+-- and \`#\` fragments. If the relative URL is empty, then the root path
+-- \"\/\" will be used. No spaces are allowed, and the maximum length
+-- allowed is 2083 characters.
+aehttptRelativeURI :: Lens' AppEngineHTTPTarget (Maybe Text)
+aehttptRelativeURI
+  = lens _aehttptRelativeURI
+      (\ s a -> s{_aehttptRelativeURI = a})
+
+-- | Body. HTTP request body. A request body is allowed only if the HTTP
+-- method is POST or PUT. It will result in invalid argument error to set a
+-- body on a job with an incompatible HttpMethod.
+aehttptBody :: Lens' AppEngineHTTPTarget (Maybe ByteString)
+aehttptBody
+  = lens _aehttptBody (\ s a -> s{_aehttptBody = a}) .
+      mapping _Bytes
+
+-- | HTTP request headers. This map contains the header field names and
+-- values. Headers can be set when the job is created. Cloud Scheduler sets
+-- some headers to default values: * \`User-Agent\`: By default, this
+-- header is \`\"AppEngine-Google;
+-- (+http:\/\/code.google.com\/appengine)\"\`. This header can be modified,
+-- but Cloud Scheduler will append \`\"AppEngine-Google;
+-- (+http:\/\/code.google.com\/appengine)\"\` to the modified
+-- \`User-Agent\`. * \`X-CloudScheduler\`: This header will be set to true.
+-- If the job has an body, Cloud Scheduler sets the following headers: *
+-- \`Content-Type\`: By default, the \`Content-Type\` header is set to
+-- \`\"application\/octet-stream\"\`. The default can be overridden by
+-- explictly setting \`Content-Type\` to a particular media type when the
+-- job is created. For example, \`Content-Type\` can be set to
+-- \`\"application\/json\"\`. * \`Content-Length\`: This is computed by
+-- Cloud Scheduler. This value is output only. It cannot be changed. The
+-- headers below are output only. They cannot be set or overridden: *
+-- \`X-Google-*\`: For Google internal use only. * \`X-AppEngine-*\`: For
+-- Google internal use only. In addition, some App Engine headers, which
+-- contain job-specific information, are also be sent to the job handler.
+aehttptHeaders :: Lens' AppEngineHTTPTarget (Maybe AppEngineHTTPTargetHeaders)
+aehttptHeaders
+  = lens _aehttptHeaders
+      (\ s a -> s{_aehttptHeaders = a})
+
+-- | App Engine Routing setting for the job.
+aehttptAppEngineRouting :: Lens' AppEngineHTTPTarget (Maybe AppEngineRouting)
+aehttptAppEngineRouting
+  = lens _aehttptAppEngineRouting
+      (\ s a -> s{_aehttptAppEngineRouting = a})
+
+instance FromJSON AppEngineHTTPTarget where
+        parseJSON
+          = withObject "AppEngineHTTPTarget"
+              (\ o ->
+                 AppEngineHTTPTarget' <$>
+                   (o .:? "httpMethod") <*> (o .:? "relativeUri") <*>
+                     (o .:? "body")
+                     <*> (o .:? "headers")
+                     <*> (o .:? "appEngineRouting"))
+
+instance ToJSON AppEngineHTTPTarget where
+        toJSON AppEngineHTTPTarget'{..}
+          = object
+              (catMaybes
+                 [("httpMethod" .=) <$> _aehttptHTTPMethod,
+                  ("relativeUri" .=) <$> _aehttptRelativeURI,
+                  ("body" .=) <$> _aehttptBody,
+                  ("headers" .=) <$> _aehttptHeaders,
+                  ("appEngineRouting" .=) <$>
+                    _aehttptAppEngineRouting])
+
+-- | Http target. The job will be pushed to the job handler by means of an
+-- HTTP request via an http_method such as HTTP POST, HTTP GET, etc. The
+-- job is acknowledged by means of an HTTP response code in the range [200
+-- - 299]. A failure to receive a response constitutes a failed execution.
+-- For a redirected request, the response returned by the redirected
+-- request is considered.
+--
+-- /See:/ 'hTTPTarget' smart constructor.
+data HTTPTarget = HTTPTarget'
+    { _httptHTTPMethod :: !(Maybe HTTPTargetHTTPMethod)
+    , _httptBody       :: !(Maybe Bytes)
+    , _httptURI        :: !(Maybe Text)
+    , _httptHeaders    :: !(Maybe HTTPTargetHeaders)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'HTTPTarget' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'httptHTTPMethod'
+--
+-- * 'httptBody'
+--
+-- * 'httptURI'
+--
+-- * 'httptHeaders'
+hTTPTarget
+    :: HTTPTarget
+hTTPTarget =
+    HTTPTarget'
+    { _httptHTTPMethod = Nothing
+    , _httptBody = Nothing
+    , _httptURI = Nothing
+    , _httptHeaders = Nothing
+    }
+
+-- | Which HTTP method to use for the request.
+httptHTTPMethod :: Lens' HTTPTarget (Maybe HTTPTargetHTTPMethod)
+httptHTTPMethod
+  = lens _httptHTTPMethod
+      (\ s a -> s{_httptHTTPMethod = a})
+
+-- | HTTP request body. A request body is allowed only if the HTTP method is
+-- POST, PUT, or PATCH. It is an error to set body on a job with an
+-- incompatible HttpMethod.
+httptBody :: Lens' HTTPTarget (Maybe ByteString)
+httptBody
+  = lens _httptBody (\ s a -> s{_httptBody = a}) .
+      mapping _Bytes
+
+-- | Required. The full URI path that the request will be sent to. This
+-- string must begin with either \"http:\/\/\" or \"https:\/\/\". Some
+-- examples of valid values for uri are: \`http:\/\/acme.com\` and
+-- \`https:\/\/acme.com\/sales:8080\`. Cloud Scheduler will encode some
+-- characters for safety and compatibility. The maximum allowed URL length
+-- is 2083 characters after encoding.
+httptURI :: Lens' HTTPTarget (Maybe Text)
+httptURI = lens _httptURI (\ s a -> s{_httptURI = a})
+
+-- | The user can specify HTTP request headers to send with the job\'s HTTP
+-- request. This map contains the header field names and values. Repeated
+-- headers are not supported, but a header value can contain commas. These
+-- headers represent a subset of the headers that will accompany the job\'s
+-- HTTP request. Some HTTP request headers will be ignored or replaced. A
+-- partial list of headers that will be ignored or replaced is below: -
+-- Host: This will be computed by Cloud Scheduler and derived from uri. *
+-- \`Content-Length\`: This will be computed by Cloud Scheduler. *
+-- \`User-Agent\`: This will be set to \`\"Google-Cloud-Scheduler\"\`. *
+-- \`X-Google-*\`: Google internal use only. * \`X-AppEngine-*\`: Google
+-- internal use only. The total size of headers must be less than 80KB.
+httptHeaders :: Lens' HTTPTarget (Maybe HTTPTargetHeaders)
+httptHeaders
+  = lens _httptHeaders (\ s a -> s{_httptHeaders = a})
+
+instance FromJSON HTTPTarget where
+        parseJSON
+          = withObject "HTTPTarget"
+              (\ o ->
+                 HTTPTarget' <$>
+                   (o .:? "httpMethod") <*> (o .:? "body") <*>
+                     (o .:? "uri")
+                     <*> (o .:? "headers"))
+
+instance ToJSON HTTPTarget where
+        toJSON HTTPTarget'{..}
+          = object
+              (catMaybes
+                 [("httpMethod" .=) <$> _httptHTTPMethod,
+                  ("body" .=) <$> _httptBody, ("uri" .=) <$> _httptURI,
+                  ("headers" .=) <$> _httptHeaders])
+
+-- | Request message for forcing a job to run now using RunJob.
+--
+-- /See:/ 'runJobRequest' smart constructor.
+data RunJobRequest =
+    RunJobRequest'
+    deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'RunJobRequest' with the minimum fields required to make a request.
+--
+runJobRequest
+    :: RunJobRequest
+runJobRequest = RunJobRequest'
+
+instance FromJSON RunJobRequest where
+        parseJSON
+          = withObject "RunJobRequest"
+              (\ o -> pure RunJobRequest')
+
+instance ToJSON RunJobRequest where
+        toJSON = const emptyObject
+
+-- | Configuration for a job. The maximum allowed size for a job is 100KB.
+--
+-- /See:/ 'job' smart constructor.
+data Job = Job'
+    { _jStatus              :: !(Maybe Status)
+    , _jState               :: !(Maybe JobState)
+    , _jLastAttemptTime     :: !(Maybe DateTime')
+    , _jRetryConfig         :: !(Maybe RetryConfig)
+    , _jSchedule            :: !(Maybe Text)
+    , _jScheduleTime        :: !(Maybe DateTime')
+    , _jAppEngineHTTPTarget :: !(Maybe AppEngineHTTPTarget)
+    , _jHTTPTarget          :: !(Maybe HTTPTarget)
+    , _jName                :: !(Maybe Text)
+    , _jPubsubTarget        :: !(Maybe PubsubTarget)
+    , _jUserUpdateTime      :: !(Maybe DateTime')
+    , _jTimeZone            :: !(Maybe Text)
+    , _jDescription         :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Job' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'jStatus'
+--
+-- * 'jState'
+--
+-- * 'jLastAttemptTime'
+--
+-- * 'jRetryConfig'
+--
+-- * 'jSchedule'
+--
+-- * 'jScheduleTime'
+--
+-- * 'jAppEngineHTTPTarget'
+--
+-- * 'jHTTPTarget'
+--
+-- * 'jName'
+--
+-- * 'jPubsubTarget'
+--
+-- * 'jUserUpdateTime'
+--
+-- * 'jTimeZone'
+--
+-- * 'jDescription'
+job
+    :: Job
+job =
+    Job'
+    { _jStatus = Nothing
+    , _jState = Nothing
+    , _jLastAttemptTime = Nothing
+    , _jRetryConfig = Nothing
+    , _jSchedule = Nothing
+    , _jScheduleTime = Nothing
+    , _jAppEngineHTTPTarget = Nothing
+    , _jHTTPTarget = Nothing
+    , _jName = Nothing
+    , _jPubsubTarget = Nothing
+    , _jUserUpdateTime = Nothing
+    , _jTimeZone = Nothing
+    , _jDescription = Nothing
+    }
+
+-- | Output only. The response from the target for the last attempted
+-- execution.
+jStatus :: Lens' Job (Maybe Status)
+jStatus = lens _jStatus (\ s a -> s{_jStatus = a})
+
+-- | Output only. State of the job.
+jState :: Lens' Job (Maybe JobState)
+jState = lens _jState (\ s a -> s{_jState = a})
+
+-- | Output only. The time the last job attempt started.
+jLastAttemptTime :: Lens' Job (Maybe UTCTime)
+jLastAttemptTime
+  = lens _jLastAttemptTime
+      (\ s a -> s{_jLastAttemptTime = a})
+      . mapping _DateTime
+
+-- | Settings that determine the retry behavior.
+jRetryConfig :: Lens' Job (Maybe RetryConfig)
+jRetryConfig
+  = lens _jRetryConfig (\ s a -> s{_jRetryConfig = a})
+
+-- | Required. Describes the schedule on which the job will be executed. As a
+-- general rule, execution \`n + 1\` of a job will not begin until
+-- execution \`n\` has finished. Cloud Scheduler will never allow two
+-- simultaneously outstanding executions. For example, this implies that if
+-- the \`n+1\`th execution is scheduled to run at 16:00 but the \`n\`th
+-- execution takes until 16:15, the \`n+1\`th execution will not start
+-- until \`16:15\`. A scheduled start time will be delayed if the previous
+-- execution has not ended when its scheduled time occurs. If retry_count >
+-- 0 and a job attempt fails, the job will be tried a total of retry_count
+-- times, with exponential backoff, until the next scheduled start time.
+-- The schedule can be either of the following types: *
+-- [Crontab](http:\/\/en.wikipedia.org\/wiki\/Cron#Overview) * English-like
+-- [schedule](https:\/\/cloud.google.com\/scheduler\/docs\/configuring\/cron-job-schedules)
+jSchedule :: Lens' Job (Maybe Text)
+jSchedule
+  = lens _jSchedule (\ s a -> s{_jSchedule = a})
+
+-- | Output only. The next time the job is scheduled. Note that this may be a
+-- retry of a previously failed attempt or the next execution time
+-- according to the schedule.
+jScheduleTime :: Lens' Job (Maybe UTCTime)
+jScheduleTime
+  = lens _jScheduleTime
+      (\ s a -> s{_jScheduleTime = a})
+      . mapping _DateTime
+
+-- | App Engine HTTP target.
+jAppEngineHTTPTarget :: Lens' Job (Maybe AppEngineHTTPTarget)
+jAppEngineHTTPTarget
+  = lens _jAppEngineHTTPTarget
+      (\ s a -> s{_jAppEngineHTTPTarget = a})
+
+-- | HTTP target.
+jHTTPTarget :: Lens' Job (Maybe HTTPTarget)
+jHTTPTarget
+  = lens _jHTTPTarget (\ s a -> s{_jHTTPTarget = a})
+
+-- | The job name. For example:
+-- \`projects\/PROJECT_ID\/locations\/LOCATION_ID\/jobs\/JOB_ID\`. *
+-- \`PROJECT_ID\` can contain letters ([A-Za-z]), numbers ([0-9]), hyphens
+-- (-), colons (:), or periods (.). For more information, see [Identifying
+-- projects](https:\/\/cloud.google.com\/resource-manager\/docs\/creating-managing-projects#identifying_projects)
+-- * \`LOCATION_ID\` is the canonical ID for the job\'s location. The list
+-- of available locations can be obtained by calling ListLocations. For
+-- more information, see https:\/\/cloud.google.com\/about\/locations\/. *
+-- \`JOB_ID\` can contain only letters ([A-Za-z]), numbers ([0-9]), hyphens
+-- (-), or underscores (_). The maximum length is 500 characters.
+jName :: Lens' Job (Maybe Text)
+jName = lens _jName (\ s a -> s{_jName = a})
+
+-- | Pub\/Sub target.
+jPubsubTarget :: Lens' Job (Maybe PubsubTarget)
+jPubsubTarget
+  = lens _jPubsubTarget
+      (\ s a -> s{_jPubsubTarget = a})
+
+-- | Output only. The creation time of the job.
+jUserUpdateTime :: Lens' Job (Maybe UTCTime)
+jUserUpdateTime
+  = lens _jUserUpdateTime
+      (\ s a -> s{_jUserUpdateTime = a})
+      . mapping _DateTime
+
+-- | Specifies the time zone to be used in interpreting schedule. The value
+-- of this field must be a time zone name from the [tz
+-- database](http:\/\/en.wikipedia.org\/wiki\/Tz_database). Note that some
+-- time zones include a provision for daylight savings time. The rules for
+-- daylight saving time are determined by the chosen tz. For UTC use the
+-- string \"utc\". If a time zone is not specified, the default will be in
+-- UTC (also known as GMT).
+jTimeZone :: Lens' Job (Maybe Text)
+jTimeZone
+  = lens _jTimeZone (\ s a -> s{_jTimeZone = a})
+
+-- | A human-readable description for the job. This string must not contain
+-- more than 500 characters.
+jDescription :: Lens' Job (Maybe Text)
+jDescription
+  = lens _jDescription (\ s a -> s{_jDescription = a})
+
+instance FromJSON Job where
+        parseJSON
+          = withObject "Job"
+              (\ o ->
+                 Job' <$>
+                   (o .:? "status") <*> (o .:? "state") <*>
+                     (o .:? "lastAttemptTime")
+                     <*> (o .:? "retryConfig")
+                     <*> (o .:? "schedule")
+                     <*> (o .:? "scheduleTime")
+                     <*> (o .:? "appEngineHttpTarget")
+                     <*> (o .:? "httpTarget")
+                     <*> (o .:? "name")
+                     <*> (o .:? "pubsubTarget")
+                     <*> (o .:? "userUpdateTime")
+                     <*> (o .:? "timeZone")
+                     <*> (o .:? "description"))
+
+instance ToJSON Job where
+        toJSON Job'{..}
+          = object
+              (catMaybes
+                 [("status" .=) <$> _jStatus,
+                  ("state" .=) <$> _jState,
+                  ("lastAttemptTime" .=) <$> _jLastAttemptTime,
+                  ("retryConfig" .=) <$> _jRetryConfig,
+                  ("schedule" .=) <$> _jSchedule,
+                  ("scheduleTime" .=) <$> _jScheduleTime,
+                  ("appEngineHttpTarget" .=) <$> _jAppEngineHTTPTarget,
+                  ("httpTarget" .=) <$> _jHTTPTarget,
+                  ("name" .=) <$> _jName,
+                  ("pubsubTarget" .=) <$> _jPubsubTarget,
+                  ("userUpdateTime" .=) <$> _jUserUpdateTime,
+                  ("timeZone" .=) <$> _jTimeZone,
+                  ("description" .=) <$> _jDescription])
+
+-- | Optional attributes for this message.
+--
+-- /See:/ 'pubsubMessageAttributes' smart constructor.
+newtype PubsubMessageAttributes = PubsubMessageAttributes'
+    { _pmaAddtional :: HashMap Text Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'PubsubMessageAttributes' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pmaAddtional'
+pubsubMessageAttributes
+    :: HashMap Text Text -- ^ 'pmaAddtional'
+    -> PubsubMessageAttributes
+pubsubMessageAttributes pPmaAddtional_ =
+    PubsubMessageAttributes'
+    { _pmaAddtional = _Coerce # pPmaAddtional_
+    }
+
+pmaAddtional :: Lens' PubsubMessageAttributes (HashMap Text Text)
+pmaAddtional
+  = lens _pmaAddtional (\ s a -> s{_pmaAddtional = a})
+      . _Coerce
+
+instance FromJSON PubsubMessageAttributes where
+        parseJSON
+          = withObject "PubsubMessageAttributes"
+              (\ o ->
+                 PubsubMessageAttributes' <$> (parseJSONObject o))
+
+instance ToJSON PubsubMessageAttributes where
+        toJSON = toJSON . _pmaAddtional
+
+-- | Pub\/Sub target. The job will be delivered by publishing a message to
+-- the given Pub\/Sub topic.
+--
+-- /See:/ 'pubsubTarget' smart constructor.
+data PubsubTarget = PubsubTarget'
+    { _ptData       :: !(Maybe Bytes)
+    , _ptTopicName  :: !(Maybe Text)
+    , _ptAttributes :: !(Maybe PubsubTargetAttributes)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'PubsubTarget' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ptData'
+--
+-- * 'ptTopicName'
+--
+-- * 'ptAttributes'
+pubsubTarget
+    :: PubsubTarget
+pubsubTarget =
+    PubsubTarget'
+    { _ptData = Nothing
+    , _ptTopicName = Nothing
+    , _ptAttributes = Nothing
+    }
+
+-- | The message payload for PubsubMessage. Pubsub message must contain
+-- either non-empty data, or at least one attribute.
+ptData :: Lens' PubsubTarget (Maybe ByteString)
+ptData
+  = lens _ptData (\ s a -> s{_ptData = a}) .
+      mapping _Bytes
+
+-- | Required. The name of the Cloud Pub\/Sub topic to which messages will be
+-- published when a job is delivered. The topic name must be in the same
+-- format as required by PubSub\'s
+-- [PublishRequest.name](https:\/\/cloud.google.com\/pubsub\/docs\/reference\/rpc\/google.pubsub.v1#publishrequest),
+-- for example \`projects\/PROJECT_ID\/topics\/TOPIC_ID\`. The topic must
+-- be in the same project as the Cloud Scheduler job.
+ptTopicName :: Lens' PubsubTarget (Maybe Text)
+ptTopicName
+  = lens _ptTopicName (\ s a -> s{_ptTopicName = a})
+
+-- | Attributes for PubsubMessage. Pubsub message must contain either
+-- non-empty data, or at least one attribute.
+ptAttributes :: Lens' PubsubTarget (Maybe PubsubTargetAttributes)
+ptAttributes
+  = lens _ptAttributes (\ s a -> s{_ptAttributes = a})
+
+instance FromJSON PubsubTarget where
+        parseJSON
+          = withObject "PubsubTarget"
+              (\ o ->
+                 PubsubTarget' <$>
+                   (o .:? "data") <*> (o .:? "topicName") <*>
+                     (o .:? "attributes"))
+
+instance ToJSON PubsubTarget where
+        toJSON PubsubTarget'{..}
+          = object
+              (catMaybes
+                 [("data" .=) <$> _ptData,
+                  ("topicName" .=) <$> _ptTopicName,
+                  ("attributes" .=) <$> _ptAttributes])
+
+-- | Response message for listing jobs using ListJobs.
+--
+-- /See:/ 'listJobsResponse' smart constructor.
+data ListJobsResponse = ListJobsResponse'
+    { _ljrNextPageToken :: !(Maybe Text)
+    , _ljrJobs          :: !(Maybe [Job])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ListJobsResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ljrNextPageToken'
+--
+-- * 'ljrJobs'
+listJobsResponse
+    :: ListJobsResponse
+listJobsResponse =
+    ListJobsResponse'
+    { _ljrNextPageToken = Nothing
+    , _ljrJobs = Nothing
+    }
+
+-- | A token to retrieve next page of results. Pass this value in the
+-- page_token field in the subsequent call to ListJobs to retrieve the next
+-- page of results. If this is empty it indicates that there are no more
+-- results through which to paginate. The page token is valid for only 2
+-- hours.
+ljrNextPageToken :: Lens' ListJobsResponse (Maybe Text)
+ljrNextPageToken
+  = lens _ljrNextPageToken
+      (\ s a -> s{_ljrNextPageToken = a})
+
+-- | The list of jobs.
+ljrJobs :: Lens' ListJobsResponse [Job]
+ljrJobs
+  = lens _ljrJobs (\ s a -> s{_ljrJobs = a}) . _Default
+      . _Coerce
+
+instance FromJSON ListJobsResponse where
+        parseJSON
+          = withObject "ListJobsResponse"
+              (\ o ->
+                 ListJobsResponse' <$>
+                   (o .:? "nextPageToken") <*>
+                     (o .:? "jobs" .!= mempty))
+
+instance ToJSON ListJobsResponse where
+        toJSON ListJobsResponse'{..}
+          = object
+              (catMaybes
+                 [("nextPageToken" .=) <$> _ljrNextPageToken,
+                  ("jobs" .=) <$> _ljrJobs])
+
+-- | Cross-service attributes for the location. For example
+-- {\"cloud.googleapis.com\/region\": \"us-east1\"}
+--
+-- /See:/ 'locationLabels' smart constructor.
+newtype LocationLabels = LocationLabels'
+    { _llAddtional :: HashMap Text Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'LocationLabels' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'llAddtional'
+locationLabels
+    :: HashMap Text Text -- ^ 'llAddtional'
+    -> LocationLabels
+locationLabels pLlAddtional_ =
+    LocationLabels'
+    { _llAddtional = _Coerce # pLlAddtional_
+    }
+
+llAddtional :: Lens' LocationLabels (HashMap Text Text)
+llAddtional
+  = lens _llAddtional (\ s a -> s{_llAddtional = a}) .
+      _Coerce
+
+instance FromJSON LocationLabels where
+        parseJSON
+          = withObject "LocationLabels"
+              (\ o -> LocationLabels' <$> (parseJSONObject o))
+
+instance ToJSON LocationLabels where
+        toJSON = toJSON . _llAddtional
+
+-- | Service-specific metadata. For example the available capacity at the
+-- given location.
+--
+-- /See:/ 'locationMetadata' smart constructor.
+newtype LocationMetadata = LocationMetadata'
+    { _lmAddtional :: HashMap Text JSONValue
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'LocationMetadata' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'lmAddtional'
+locationMetadata
+    :: HashMap Text JSONValue -- ^ 'lmAddtional'
+    -> LocationMetadata
+locationMetadata pLmAddtional_ =
+    LocationMetadata'
+    { _lmAddtional = _Coerce # pLmAddtional_
+    }
+
+-- | Properties of the object. Contains field \'type with type URL.
+lmAddtional :: Lens' LocationMetadata (HashMap Text JSONValue)
+lmAddtional
+  = lens _lmAddtional (\ s a -> s{_lmAddtional = a}) .
+      _Coerce
+
+instance FromJSON LocationMetadata where
+        parseJSON
+          = withObject "LocationMetadata"
+              (\ o -> LocationMetadata' <$> (parseJSONObject o))
+
+instance ToJSON LocationMetadata where
+        toJSON = toJSON . _lmAddtional
+
+-- | App Engine Routing. For more information about services, versions, and
+-- instances see [An Overview of App
+-- Engine](https:\/\/cloud.google.com\/appengine\/docs\/python\/an-overview-of-app-engine),
+-- [Microservices Architecture on Google App
+-- Engine](https:\/\/cloud.google.com\/appengine\/docs\/python\/microservices-on-app-engine),
+-- [App Engine Standard request
+-- routing](https:\/\/cloud.google.com\/appengine\/docs\/standard\/python\/how-requests-are-routed),
+-- and [App Engine Flex request
+-- routing](https:\/\/cloud.google.com\/appengine\/docs\/flexible\/python\/how-requests-are-routed).
+--
+-- /See:/ 'appEngineRouting' smart constructor.
+data AppEngineRouting = AppEngineRouting'
+    { _aerService  :: !(Maybe Text)
+    , _aerVersion  :: !(Maybe Text)
+    , _aerHost     :: !(Maybe Text)
+    , _aerInstance :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'AppEngineRouting' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'aerService'
+--
+-- * 'aerVersion'
+--
+-- * 'aerHost'
+--
+-- * 'aerInstance'
+appEngineRouting
+    :: AppEngineRouting
+appEngineRouting =
+    AppEngineRouting'
+    { _aerService = Nothing
+    , _aerVersion = Nothing
+    , _aerHost = Nothing
+    , _aerInstance = Nothing
+    }
+
+-- | App service. By default, the job is sent to the service which is the
+-- default service when the job is attempted.
+aerService :: Lens' AppEngineRouting (Maybe Text)
+aerService
+  = lens _aerService (\ s a -> s{_aerService = a})
+
+-- | App version. By default, the job is sent to the version which is the
+-- default version when the job is attempted.
+aerVersion :: Lens' AppEngineRouting (Maybe Text)
+aerVersion
+  = lens _aerVersion (\ s a -> s{_aerVersion = a})
+
+-- | Output only. The host that the job is sent to. For more information
+-- about how App Engine requests are routed, see
+-- [here](https:\/\/cloud.google.com\/appengine\/docs\/standard\/python\/how-requests-are-routed).
+-- The host is constructed as: * \`host = [application_domain_name]\` \`|
+-- [service] + \'.\' + [application_domain_name]\` \`| [version] + \'.\' +
+-- [application_domain_name]\` \`| [version_dot_service]+ \'.\' +
+-- [application_domain_name]\` \`| [instance] + \'.\' +
+-- [application_domain_name]\` \`| [instance_dot_service] + \'.\' +
+-- [application_domain_name]\` \`| [instance_dot_version] + \'.\' +
+-- [application_domain_name]\` \`| [instance_dot_version_dot_service] +
+-- \'.\' + [application_domain_name]\` * \`application_domain_name\` = The
+-- domain name of the app, for example .appspot.com, which is associated
+-- with the job\'s project ID. * \`service =\` service * \`version =\`
+-- version * \`version_dot_service =\` version \`+ \'.\' +\` service *
+-- \`instance =\` instance * \`instance_dot_service =\` instance \`+ \'.\'
+-- +\` service * \`instance_dot_version =\` instance \`+ \'.\' +\` version
+-- * \`instance_dot_version_dot_service =\` instance \`+ \'.\' +\` version
+-- \`+ \'.\' +\` service If service is empty, then the job will be sent to
+-- the service which is the default service when the job is attempted. If
+-- version is empty, then the job will be sent to the version which is the
+-- default version when the job is attempted. If instance is empty, then
+-- the job will be sent to an instance which is available when the job is
+-- attempted. If service, version, or instance is invalid, then the job
+-- will be sent to the default version of the default service when the job
+-- is attempted.
+aerHost :: Lens' AppEngineRouting (Maybe Text)
+aerHost = lens _aerHost (\ s a -> s{_aerHost = a})
+
+-- | App instance. By default, the job is sent to an instance which is
+-- available when the job is attempted. Requests can only be sent to a
+-- specific instance if [manual scaling is used in App Engine
+-- Standard](https:\/\/cloud.google.com\/appengine\/docs\/python\/an-overview-of-app-engine?hl=en_US#scaling_types_and_instance_classes).
+-- App Engine Flex does not support instances. For more information, see
+-- [App Engine Standard request
+-- routing](https:\/\/cloud.google.com\/appengine\/docs\/standard\/python\/how-requests-are-routed)
+-- and [App Engine Flex request
+-- routing](https:\/\/cloud.google.com\/appengine\/docs\/flexible\/python\/how-requests-are-routed).
+aerInstance :: Lens' AppEngineRouting (Maybe Text)
+aerInstance
+  = lens _aerInstance (\ s a -> s{_aerInstance = a})
+
+instance FromJSON AppEngineRouting where
+        parseJSON
+          = withObject "AppEngineRouting"
+              (\ o ->
+                 AppEngineRouting' <$>
+                   (o .:? "service") <*> (o .:? "version") <*>
+                     (o .:? "host")
+                     <*> (o .:? "instance"))
+
+instance ToJSON AppEngineRouting where
+        toJSON AppEngineRouting'{..}
+          = object
+              (catMaybes
+                 [("service" .=) <$> _aerService,
+                  ("version" .=) <$> _aerVersion,
+                  ("host" .=) <$> _aerHost,
+                  ("instance" .=) <$> _aerInstance])
diff --git a/gen/Network/Google/CloudScheduler/Types/Sum.hs b/gen/Network/Google/CloudScheduler/Types/Sum.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/CloudScheduler/Types/Sum.hs
@@ -0,0 +1,215 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE LambdaCase         #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- |
+-- Module      : Network.Google.CloudScheduler.Types.Sum
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+module Network.Google.CloudScheduler.Types.Sum where
+
+import           Network.Google.Prelude hiding (Bytes)
+
+-- | Output only. State of the job.
+data JobState
+    = StateUnspecified
+      -- ^ @STATE_UNSPECIFIED@
+      -- Unspecified state.
+    | Enabled
+      -- ^ @ENABLED@
+      -- The job is executing normally.
+    | Paused
+      -- ^ @PAUSED@
+      -- The job is paused by the user. It will not execute. A user can
+      -- intentionally pause the job using PauseJobRequest.
+    | Disabled
+      -- ^ @DISABLED@
+      -- The job is disabled by the system due to error. The user cannot directly
+      -- set a job to be disabled.
+    | UpdateFailed
+      -- ^ @UPDATE_FAILED@
+      -- The job state resulting from a failed CloudScheduler.UpdateJob
+      -- operation. To recover a job from this state, retry
+      -- CloudScheduler.UpdateJob until a successful response is received.
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable JobState
+
+instance FromHttpApiData JobState where
+    parseQueryParam = \case
+        "STATE_UNSPECIFIED" -> Right StateUnspecified
+        "ENABLED" -> Right Enabled
+        "PAUSED" -> Right Paused
+        "DISABLED" -> Right Disabled
+        "UPDATE_FAILED" -> Right UpdateFailed
+        x -> Left ("Unable to parse JobState from: " <> x)
+
+instance ToHttpApiData JobState where
+    toQueryParam = \case
+        StateUnspecified -> "STATE_UNSPECIFIED"
+        Enabled -> "ENABLED"
+        Paused -> "PAUSED"
+        Disabled -> "DISABLED"
+        UpdateFailed -> "UPDATE_FAILED"
+
+instance FromJSON JobState where
+    parseJSON = parseJSONText "JobState"
+
+instance ToJSON JobState where
+    toJSON = toJSONText
+
+-- | V1 error format.
+data Xgafv
+    = X1
+      -- ^ @1@
+      -- v1 error format
+    | X2
+      -- ^ @2@
+      -- v2 error format
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable Xgafv
+
+instance FromHttpApiData Xgafv where
+    parseQueryParam = \case
+        "1" -> Right X1
+        "2" -> Right X2
+        x -> Left ("Unable to parse Xgafv from: " <> x)
+
+instance ToHttpApiData Xgafv where
+    toQueryParam = \case
+        X1 -> "1"
+        X2 -> "2"
+
+instance FromJSON Xgafv where
+    parseJSON = parseJSONText "Xgafv"
+
+instance ToJSON Xgafv where
+    toJSON = toJSONText
+
+-- | Which HTTP method to use for the request.
+data HTTPTargetHTTPMethod
+    = HTTPMethodUnspecified
+      -- ^ @HTTP_METHOD_UNSPECIFIED@
+      -- HTTP method unspecified. Defaults to POST.
+    | Post'
+      -- ^ @POST@
+      -- HTTP POST
+    | Get'
+      -- ^ @GET@
+      -- HTTP GET
+    | Head'
+      -- ^ @HEAD@
+      -- HTTP HEAD
+    | Put'
+      -- ^ @PUT@
+      -- HTTP PUT
+    | Delete'
+      -- ^ @DELETE@
+      -- HTTP DELETE
+    | Patch'
+      -- ^ @PATCH@
+      -- HTTP PATCH
+    | Options
+      -- ^ @OPTIONS@
+      -- HTTP OPTIONS
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable HTTPTargetHTTPMethod
+
+instance FromHttpApiData HTTPTargetHTTPMethod where
+    parseQueryParam = \case
+        "HTTP_METHOD_UNSPECIFIED" -> Right HTTPMethodUnspecified
+        "POST" -> Right Post'
+        "GET" -> Right Get'
+        "HEAD" -> Right Head'
+        "PUT" -> Right Put'
+        "DELETE" -> Right Delete'
+        "PATCH" -> Right Patch'
+        "OPTIONS" -> Right Options
+        x -> Left ("Unable to parse HTTPTargetHTTPMethod from: " <> x)
+
+instance ToHttpApiData HTTPTargetHTTPMethod where
+    toQueryParam = \case
+        HTTPMethodUnspecified -> "HTTP_METHOD_UNSPECIFIED"
+        Post' -> "POST"
+        Get' -> "GET"
+        Head' -> "HEAD"
+        Put' -> "PUT"
+        Delete' -> "DELETE"
+        Patch' -> "PATCH"
+        Options -> "OPTIONS"
+
+instance FromJSON HTTPTargetHTTPMethod where
+    parseJSON = parseJSONText "HTTPTargetHTTPMethod"
+
+instance ToJSON HTTPTargetHTTPMethod where
+    toJSON = toJSONText
+
+-- | The HTTP method to use for the request. PATCH and OPTIONS are not
+-- permitted.
+data AppEngineHTTPTargetHTTPMethod
+    = AEHTTPTHTTPMHTTPMethodUnspecified
+      -- ^ @HTTP_METHOD_UNSPECIFIED@
+      -- HTTP method unspecified. Defaults to POST.
+    | AEHTTPTHTTPMPost'
+      -- ^ @POST@
+      -- HTTP POST
+    | AEHTTPTHTTPMGet'
+      -- ^ @GET@
+      -- HTTP GET
+    | AEHTTPTHTTPMHead'
+      -- ^ @HEAD@
+      -- HTTP HEAD
+    | AEHTTPTHTTPMPut'
+      -- ^ @PUT@
+      -- HTTP PUT
+    | AEHTTPTHTTPMDelete'
+      -- ^ @DELETE@
+      -- HTTP DELETE
+    | AEHTTPTHTTPMPatch'
+      -- ^ @PATCH@
+      -- HTTP PATCH
+    | AEHTTPTHTTPMOptions
+      -- ^ @OPTIONS@
+      -- HTTP OPTIONS
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable AppEngineHTTPTargetHTTPMethod
+
+instance FromHttpApiData AppEngineHTTPTargetHTTPMethod where
+    parseQueryParam = \case
+        "HTTP_METHOD_UNSPECIFIED" -> Right AEHTTPTHTTPMHTTPMethodUnspecified
+        "POST" -> Right AEHTTPTHTTPMPost'
+        "GET" -> Right AEHTTPTHTTPMGet'
+        "HEAD" -> Right AEHTTPTHTTPMHead'
+        "PUT" -> Right AEHTTPTHTTPMPut'
+        "DELETE" -> Right AEHTTPTHTTPMDelete'
+        "PATCH" -> Right AEHTTPTHTTPMPatch'
+        "OPTIONS" -> Right AEHTTPTHTTPMOptions
+        x -> Left ("Unable to parse AppEngineHTTPTargetHTTPMethod from: " <> x)
+
+instance ToHttpApiData AppEngineHTTPTargetHTTPMethod where
+    toQueryParam = \case
+        AEHTTPTHTTPMHTTPMethodUnspecified -> "HTTP_METHOD_UNSPECIFIED"
+        AEHTTPTHTTPMPost' -> "POST"
+        AEHTTPTHTTPMGet' -> "GET"
+        AEHTTPTHTTPMHead' -> "HEAD"
+        AEHTTPTHTTPMPut' -> "PUT"
+        AEHTTPTHTTPMDelete' -> "DELETE"
+        AEHTTPTHTTPMPatch' -> "PATCH"
+        AEHTTPTHTTPMOptions -> "OPTIONS"
+
+instance FromJSON AppEngineHTTPTargetHTTPMethod where
+    parseJSON = parseJSONText "AppEngineHTTPTargetHTTPMethod"
+
+instance ToJSON AppEngineHTTPTargetHTTPMethod where
+    toJSON = toJSONText
diff --git a/gen/Network/Google/Resource/CloudScheduler/Projects/Locations/Get.hs b/gen/Network/Google/Resource/CloudScheduler/Projects/Locations/Get.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/CloudScheduler/Projects/Locations/Get.hs
@@ -0,0 +1,144 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.CloudScheduler.Projects.Locations.Get
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Gets information about a location.
+--
+-- /See:/ <https://cloud.google.com/scheduler/ Cloud Scheduler API Reference> for @cloudscheduler.projects.locations.get@.
+module Network.Google.Resource.CloudScheduler.Projects.Locations.Get
+    (
+    -- * REST Resource
+      ProjectsLocationsGetResource
+
+    -- * Creating a Request
+    , projectsLocationsGet
+    , ProjectsLocationsGet
+
+    -- * Request Lenses
+    , plgXgafv
+    , plgUploadProtocol
+    , plgAccessToken
+    , plgUploadType
+    , plgName
+    , plgCallback
+    ) where
+
+import           Network.Google.CloudScheduler.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @cloudscheduler.projects.locations.get@ method which the
+-- 'ProjectsLocationsGet' request conforms to.
+type ProjectsLocationsGetResource =
+     "v1beta1" :>
+       Capture "name" Text :>
+         QueryParam "$.xgafv" Xgafv :>
+           QueryParam "upload_protocol" Text :>
+             QueryParam "access_token" Text :>
+               QueryParam "uploadType" Text :>
+                 QueryParam "callback" Text :>
+                   QueryParam "alt" AltJSON :> Get '[JSON] Location
+
+-- | Gets information about a location.
+--
+-- /See:/ 'projectsLocationsGet' smart constructor.
+data ProjectsLocationsGet = ProjectsLocationsGet'
+    { _plgXgafv          :: !(Maybe Xgafv)
+    , _plgUploadProtocol :: !(Maybe Text)
+    , _plgAccessToken    :: !(Maybe Text)
+    , _plgUploadType     :: !(Maybe Text)
+    , _plgName           :: !Text
+    , _plgCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ProjectsLocationsGet' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'plgXgafv'
+--
+-- * 'plgUploadProtocol'
+--
+-- * 'plgAccessToken'
+--
+-- * 'plgUploadType'
+--
+-- * 'plgName'
+--
+-- * 'plgCallback'
+projectsLocationsGet
+    :: Text -- ^ 'plgName'
+    -> ProjectsLocationsGet
+projectsLocationsGet pPlgName_ =
+    ProjectsLocationsGet'
+    { _plgXgafv = Nothing
+    , _plgUploadProtocol = Nothing
+    , _plgAccessToken = Nothing
+    , _plgUploadType = Nothing
+    , _plgName = pPlgName_
+    , _plgCallback = Nothing
+    }
+
+-- | V1 error format.
+plgXgafv :: Lens' ProjectsLocationsGet (Maybe Xgafv)
+plgXgafv = lens _plgXgafv (\ s a -> s{_plgXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+plgUploadProtocol :: Lens' ProjectsLocationsGet (Maybe Text)
+plgUploadProtocol
+  = lens _plgUploadProtocol
+      (\ s a -> s{_plgUploadProtocol = a})
+
+-- | OAuth access token.
+plgAccessToken :: Lens' ProjectsLocationsGet (Maybe Text)
+plgAccessToken
+  = lens _plgAccessToken
+      (\ s a -> s{_plgAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+plgUploadType :: Lens' ProjectsLocationsGet (Maybe Text)
+plgUploadType
+  = lens _plgUploadType
+      (\ s a -> s{_plgUploadType = a})
+
+-- | Resource name for the location.
+plgName :: Lens' ProjectsLocationsGet Text
+plgName = lens _plgName (\ s a -> s{_plgName = a})
+
+-- | JSONP
+plgCallback :: Lens' ProjectsLocationsGet (Maybe Text)
+plgCallback
+  = lens _plgCallback (\ s a -> s{_plgCallback = a})
+
+instance GoogleRequest ProjectsLocationsGet where
+        type Rs ProjectsLocationsGet = Location
+        type Scopes ProjectsLocationsGet =
+             '["https://www.googleapis.com/auth/cloud-platform"]
+        requestClient ProjectsLocationsGet'{..}
+          = go _plgName _plgXgafv _plgUploadProtocol
+              _plgAccessToken
+              _plgUploadType
+              _plgCallback
+              (Just AltJSON)
+              cloudSchedulerService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy ProjectsLocationsGetResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/CloudScheduler/Projects/Locations/Jobs/Create.hs b/gen/Network/Google/Resource/CloudScheduler/Projects/Locations/Jobs/Create.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/CloudScheduler/Projects/Locations/Jobs/Create.hs
@@ -0,0 +1,162 @@
+{-# 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.CloudScheduler.Projects.Locations.Jobs.Create
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates a job.
+--
+-- /See:/ <https://cloud.google.com/scheduler/ Cloud Scheduler API Reference> for @cloudscheduler.projects.locations.jobs.create@.
+module Network.Google.Resource.CloudScheduler.Projects.Locations.Jobs.Create
+    (
+    -- * REST Resource
+      ProjectsLocationsJobsCreateResource
+
+    -- * Creating a Request
+    , projectsLocationsJobsCreate
+    , ProjectsLocationsJobsCreate
+
+    -- * Request Lenses
+    , pljcParent
+    , pljcXgafv
+    , pljcUploadProtocol
+    , pljcAccessToken
+    , pljcUploadType
+    , pljcPayload
+    , pljcCallback
+    ) where
+
+import           Network.Google.CloudScheduler.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @cloudscheduler.projects.locations.jobs.create@ method which the
+-- 'ProjectsLocationsJobsCreate' request conforms to.
+type ProjectsLocationsJobsCreateResource =
+     "v1beta1" :>
+       Capture "parent" Text :>
+         "jobs" :>
+           QueryParam "$.xgafv" Xgafv :>
+             QueryParam "upload_protocol" Text :>
+               QueryParam "access_token" Text :>
+                 QueryParam "uploadType" Text :>
+                   QueryParam "callback" Text :>
+                     QueryParam "alt" AltJSON :>
+                       ReqBody '[JSON] Job :> Post '[JSON] Job
+
+-- | Creates a job.
+--
+-- /See:/ 'projectsLocationsJobsCreate' smart constructor.
+data ProjectsLocationsJobsCreate = ProjectsLocationsJobsCreate'
+    { _pljcParent         :: !Text
+    , _pljcXgafv          :: !(Maybe Xgafv)
+    , _pljcUploadProtocol :: !(Maybe Text)
+    , _pljcAccessToken    :: !(Maybe Text)
+    , _pljcUploadType     :: !(Maybe Text)
+    , _pljcPayload        :: !Job
+    , _pljcCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ProjectsLocationsJobsCreate' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pljcParent'
+--
+-- * 'pljcXgafv'
+--
+-- * 'pljcUploadProtocol'
+--
+-- * 'pljcAccessToken'
+--
+-- * 'pljcUploadType'
+--
+-- * 'pljcPayload'
+--
+-- * 'pljcCallback'
+projectsLocationsJobsCreate
+    :: Text -- ^ 'pljcParent'
+    -> Job -- ^ 'pljcPayload'
+    -> ProjectsLocationsJobsCreate
+projectsLocationsJobsCreate pPljcParent_ pPljcPayload_ =
+    ProjectsLocationsJobsCreate'
+    { _pljcParent = pPljcParent_
+    , _pljcXgafv = Nothing
+    , _pljcUploadProtocol = Nothing
+    , _pljcAccessToken = Nothing
+    , _pljcUploadType = Nothing
+    , _pljcPayload = pPljcPayload_
+    , _pljcCallback = Nothing
+    }
+
+-- | Required. The location name. For example:
+-- \`projects\/PROJECT_ID\/locations\/LOCATION_ID\`.
+pljcParent :: Lens' ProjectsLocationsJobsCreate Text
+pljcParent
+  = lens _pljcParent (\ s a -> s{_pljcParent = a})
+
+-- | V1 error format.
+pljcXgafv :: Lens' ProjectsLocationsJobsCreate (Maybe Xgafv)
+pljcXgafv
+  = lens _pljcXgafv (\ s a -> s{_pljcXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+pljcUploadProtocol :: Lens' ProjectsLocationsJobsCreate (Maybe Text)
+pljcUploadProtocol
+  = lens _pljcUploadProtocol
+      (\ s a -> s{_pljcUploadProtocol = a})
+
+-- | OAuth access token.
+pljcAccessToken :: Lens' ProjectsLocationsJobsCreate (Maybe Text)
+pljcAccessToken
+  = lens _pljcAccessToken
+      (\ s a -> s{_pljcAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+pljcUploadType :: Lens' ProjectsLocationsJobsCreate (Maybe Text)
+pljcUploadType
+  = lens _pljcUploadType
+      (\ s a -> s{_pljcUploadType = a})
+
+-- | Multipart request metadata.
+pljcPayload :: Lens' ProjectsLocationsJobsCreate Job
+pljcPayload
+  = lens _pljcPayload (\ s a -> s{_pljcPayload = a})
+
+-- | JSONP
+pljcCallback :: Lens' ProjectsLocationsJobsCreate (Maybe Text)
+pljcCallback
+  = lens _pljcCallback (\ s a -> s{_pljcCallback = a})
+
+instance GoogleRequest ProjectsLocationsJobsCreate
+         where
+        type Rs ProjectsLocationsJobsCreate = Job
+        type Scopes ProjectsLocationsJobsCreate =
+             '["https://www.googleapis.com/auth/cloud-platform"]
+        requestClient ProjectsLocationsJobsCreate'{..}
+          = go _pljcParent _pljcXgafv _pljcUploadProtocol
+              _pljcAccessToken
+              _pljcUploadType
+              _pljcCallback
+              (Just AltJSON)
+              _pljcPayload
+              cloudSchedulerService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy ProjectsLocationsJobsCreateResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/CloudScheduler/Projects/Locations/Jobs/Delete.hs b/gen/Network/Google/Resource/CloudScheduler/Projects/Locations/Jobs/Delete.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/CloudScheduler/Projects/Locations/Jobs/Delete.hs
@@ -0,0 +1,147 @@
+{-# 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.CloudScheduler.Projects.Locations.Jobs.Delete
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes a job.
+--
+-- /See:/ <https://cloud.google.com/scheduler/ Cloud Scheduler API Reference> for @cloudscheduler.projects.locations.jobs.delete@.
+module Network.Google.Resource.CloudScheduler.Projects.Locations.Jobs.Delete
+    (
+    -- * REST Resource
+      ProjectsLocationsJobsDeleteResource
+
+    -- * Creating a Request
+    , projectsLocationsJobsDelete
+    , ProjectsLocationsJobsDelete
+
+    -- * Request Lenses
+    , pljdXgafv
+    , pljdUploadProtocol
+    , pljdAccessToken
+    , pljdUploadType
+    , pljdName
+    , pljdCallback
+    ) where
+
+import           Network.Google.CloudScheduler.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @cloudscheduler.projects.locations.jobs.delete@ method which the
+-- 'ProjectsLocationsJobsDelete' request conforms to.
+type ProjectsLocationsJobsDeleteResource =
+     "v1beta1" :>
+       Capture "name" Text :>
+         QueryParam "$.xgafv" Xgafv :>
+           QueryParam "upload_protocol" Text :>
+             QueryParam "access_token" Text :>
+               QueryParam "uploadType" Text :>
+                 QueryParam "callback" Text :>
+                   QueryParam "alt" AltJSON :> Delete '[JSON] Empty
+
+-- | Deletes a job.
+--
+-- /See:/ 'projectsLocationsJobsDelete' smart constructor.
+data ProjectsLocationsJobsDelete = ProjectsLocationsJobsDelete'
+    { _pljdXgafv          :: !(Maybe Xgafv)
+    , _pljdUploadProtocol :: !(Maybe Text)
+    , _pljdAccessToken    :: !(Maybe Text)
+    , _pljdUploadType     :: !(Maybe Text)
+    , _pljdName           :: !Text
+    , _pljdCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ProjectsLocationsJobsDelete' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pljdXgafv'
+--
+-- * 'pljdUploadProtocol'
+--
+-- * 'pljdAccessToken'
+--
+-- * 'pljdUploadType'
+--
+-- * 'pljdName'
+--
+-- * 'pljdCallback'
+projectsLocationsJobsDelete
+    :: Text -- ^ 'pljdName'
+    -> ProjectsLocationsJobsDelete
+projectsLocationsJobsDelete pPljdName_ =
+    ProjectsLocationsJobsDelete'
+    { _pljdXgafv = Nothing
+    , _pljdUploadProtocol = Nothing
+    , _pljdAccessToken = Nothing
+    , _pljdUploadType = Nothing
+    , _pljdName = pPljdName_
+    , _pljdCallback = Nothing
+    }
+
+-- | V1 error format.
+pljdXgafv :: Lens' ProjectsLocationsJobsDelete (Maybe Xgafv)
+pljdXgafv
+  = lens _pljdXgafv (\ s a -> s{_pljdXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+pljdUploadProtocol :: Lens' ProjectsLocationsJobsDelete (Maybe Text)
+pljdUploadProtocol
+  = lens _pljdUploadProtocol
+      (\ s a -> s{_pljdUploadProtocol = a})
+
+-- | OAuth access token.
+pljdAccessToken :: Lens' ProjectsLocationsJobsDelete (Maybe Text)
+pljdAccessToken
+  = lens _pljdAccessToken
+      (\ s a -> s{_pljdAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+pljdUploadType :: Lens' ProjectsLocationsJobsDelete (Maybe Text)
+pljdUploadType
+  = lens _pljdUploadType
+      (\ s a -> s{_pljdUploadType = a})
+
+-- | Required. The job name. For example:
+-- \`projects\/PROJECT_ID\/locations\/LOCATION_ID\/jobs\/JOB_ID\`.
+pljdName :: Lens' ProjectsLocationsJobsDelete Text
+pljdName = lens _pljdName (\ s a -> s{_pljdName = a})
+
+-- | JSONP
+pljdCallback :: Lens' ProjectsLocationsJobsDelete (Maybe Text)
+pljdCallback
+  = lens _pljdCallback (\ s a -> s{_pljdCallback = a})
+
+instance GoogleRequest ProjectsLocationsJobsDelete
+         where
+        type Rs ProjectsLocationsJobsDelete = Empty
+        type Scopes ProjectsLocationsJobsDelete =
+             '["https://www.googleapis.com/auth/cloud-platform"]
+        requestClient ProjectsLocationsJobsDelete'{..}
+          = go _pljdName _pljdXgafv _pljdUploadProtocol
+              _pljdAccessToken
+              _pljdUploadType
+              _pljdCallback
+              (Just AltJSON)
+              cloudSchedulerService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy ProjectsLocationsJobsDeleteResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/CloudScheduler/Projects/Locations/Jobs/Get.hs b/gen/Network/Google/Resource/CloudScheduler/Projects/Locations/Jobs/Get.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/CloudScheduler/Projects/Locations/Jobs/Get.hs
@@ -0,0 +1,146 @@
+{-# 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.CloudScheduler.Projects.Locations.Jobs.Get
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Gets a job.
+--
+-- /See:/ <https://cloud.google.com/scheduler/ Cloud Scheduler API Reference> for @cloudscheduler.projects.locations.jobs.get@.
+module Network.Google.Resource.CloudScheduler.Projects.Locations.Jobs.Get
+    (
+    -- * REST Resource
+      ProjectsLocationsJobsGetResource
+
+    -- * Creating a Request
+    , projectsLocationsJobsGet
+    , ProjectsLocationsJobsGet
+
+    -- * Request Lenses
+    , pljgXgafv
+    , pljgUploadProtocol
+    , pljgAccessToken
+    , pljgUploadType
+    , pljgName
+    , pljgCallback
+    ) where
+
+import           Network.Google.CloudScheduler.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @cloudscheduler.projects.locations.jobs.get@ method which the
+-- 'ProjectsLocationsJobsGet' request conforms to.
+type ProjectsLocationsJobsGetResource =
+     "v1beta1" :>
+       Capture "name" Text :>
+         QueryParam "$.xgafv" Xgafv :>
+           QueryParam "upload_protocol" Text :>
+             QueryParam "access_token" Text :>
+               QueryParam "uploadType" Text :>
+                 QueryParam "callback" Text :>
+                   QueryParam "alt" AltJSON :> Get '[JSON] Job
+
+-- | Gets a job.
+--
+-- /See:/ 'projectsLocationsJobsGet' smart constructor.
+data ProjectsLocationsJobsGet = ProjectsLocationsJobsGet'
+    { _pljgXgafv          :: !(Maybe Xgafv)
+    , _pljgUploadProtocol :: !(Maybe Text)
+    , _pljgAccessToken    :: !(Maybe Text)
+    , _pljgUploadType     :: !(Maybe Text)
+    , _pljgName           :: !Text
+    , _pljgCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ProjectsLocationsJobsGet' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pljgXgafv'
+--
+-- * 'pljgUploadProtocol'
+--
+-- * 'pljgAccessToken'
+--
+-- * 'pljgUploadType'
+--
+-- * 'pljgName'
+--
+-- * 'pljgCallback'
+projectsLocationsJobsGet
+    :: Text -- ^ 'pljgName'
+    -> ProjectsLocationsJobsGet
+projectsLocationsJobsGet pPljgName_ =
+    ProjectsLocationsJobsGet'
+    { _pljgXgafv = Nothing
+    , _pljgUploadProtocol = Nothing
+    , _pljgAccessToken = Nothing
+    , _pljgUploadType = Nothing
+    , _pljgName = pPljgName_
+    , _pljgCallback = Nothing
+    }
+
+-- | V1 error format.
+pljgXgafv :: Lens' ProjectsLocationsJobsGet (Maybe Xgafv)
+pljgXgafv
+  = lens _pljgXgafv (\ s a -> s{_pljgXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+pljgUploadProtocol :: Lens' ProjectsLocationsJobsGet (Maybe Text)
+pljgUploadProtocol
+  = lens _pljgUploadProtocol
+      (\ s a -> s{_pljgUploadProtocol = a})
+
+-- | OAuth access token.
+pljgAccessToken :: Lens' ProjectsLocationsJobsGet (Maybe Text)
+pljgAccessToken
+  = lens _pljgAccessToken
+      (\ s a -> s{_pljgAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+pljgUploadType :: Lens' ProjectsLocationsJobsGet (Maybe Text)
+pljgUploadType
+  = lens _pljgUploadType
+      (\ s a -> s{_pljgUploadType = a})
+
+-- | Required. The job name. For example:
+-- \`projects\/PROJECT_ID\/locations\/LOCATION_ID\/jobs\/JOB_ID\`.
+pljgName :: Lens' ProjectsLocationsJobsGet Text
+pljgName = lens _pljgName (\ s a -> s{_pljgName = a})
+
+-- | JSONP
+pljgCallback :: Lens' ProjectsLocationsJobsGet (Maybe Text)
+pljgCallback
+  = lens _pljgCallback (\ s a -> s{_pljgCallback = a})
+
+instance GoogleRequest ProjectsLocationsJobsGet where
+        type Rs ProjectsLocationsJobsGet = Job
+        type Scopes ProjectsLocationsJobsGet =
+             '["https://www.googleapis.com/auth/cloud-platform"]
+        requestClient ProjectsLocationsJobsGet'{..}
+          = go _pljgName _pljgXgafv _pljgUploadProtocol
+              _pljgAccessToken
+              _pljgUploadType
+              _pljgCallback
+              (Just AltJSON)
+              cloudSchedulerService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy ProjectsLocationsJobsGetResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/CloudScheduler/Projects/Locations/Jobs/List.hs b/gen/Network/Google/Resource/CloudScheduler/Projects/Locations/Jobs/List.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/CloudScheduler/Projects/Locations/Jobs/List.hs
@@ -0,0 +1,183 @@
+{-# 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.CloudScheduler.Projects.Locations.Jobs.List
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Lists jobs.
+--
+-- /See:/ <https://cloud.google.com/scheduler/ Cloud Scheduler API Reference> for @cloudscheduler.projects.locations.jobs.list@.
+module Network.Google.Resource.CloudScheduler.Projects.Locations.Jobs.List
+    (
+    -- * REST Resource
+      ProjectsLocationsJobsListResource
+
+    -- * Creating a Request
+    , projectsLocationsJobsList
+    , ProjectsLocationsJobsList
+
+    -- * Request Lenses
+    , pljlParent
+    , pljlXgafv
+    , pljlUploadProtocol
+    , pljlAccessToken
+    , pljlUploadType
+    , pljlPageToken
+    , pljlPageSize
+    , pljlCallback
+    ) where
+
+import           Network.Google.CloudScheduler.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @cloudscheduler.projects.locations.jobs.list@ method which the
+-- 'ProjectsLocationsJobsList' request conforms to.
+type ProjectsLocationsJobsListResource =
+     "v1beta1" :>
+       Capture "parent" Text :>
+         "jobs" :>
+           QueryParam "$.xgafv" Xgafv :>
+             QueryParam "upload_protocol" Text :>
+               QueryParam "access_token" Text :>
+                 QueryParam "uploadType" Text :>
+                   QueryParam "pageToken" Text :>
+                     QueryParam "pageSize" (Textual Int32) :>
+                       QueryParam "callback" Text :>
+                         QueryParam "alt" AltJSON :>
+                           Get '[JSON] ListJobsResponse
+
+-- | Lists jobs.
+--
+-- /See:/ 'projectsLocationsJobsList' smart constructor.
+data ProjectsLocationsJobsList = ProjectsLocationsJobsList'
+    { _pljlParent         :: !Text
+    , _pljlXgafv          :: !(Maybe Xgafv)
+    , _pljlUploadProtocol :: !(Maybe Text)
+    , _pljlAccessToken    :: !(Maybe Text)
+    , _pljlUploadType     :: !(Maybe Text)
+    , _pljlPageToken      :: !(Maybe Text)
+    , _pljlPageSize       :: !(Maybe (Textual Int32))
+    , _pljlCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ProjectsLocationsJobsList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pljlParent'
+--
+-- * 'pljlXgafv'
+--
+-- * 'pljlUploadProtocol'
+--
+-- * 'pljlAccessToken'
+--
+-- * 'pljlUploadType'
+--
+-- * 'pljlPageToken'
+--
+-- * 'pljlPageSize'
+--
+-- * 'pljlCallback'
+projectsLocationsJobsList
+    :: Text -- ^ 'pljlParent'
+    -> ProjectsLocationsJobsList
+projectsLocationsJobsList pPljlParent_ =
+    ProjectsLocationsJobsList'
+    { _pljlParent = pPljlParent_
+    , _pljlXgafv = Nothing
+    , _pljlUploadProtocol = Nothing
+    , _pljlAccessToken = Nothing
+    , _pljlUploadType = Nothing
+    , _pljlPageToken = Nothing
+    , _pljlPageSize = Nothing
+    , _pljlCallback = Nothing
+    }
+
+-- | Required. The location name. For example:
+-- \`projects\/PROJECT_ID\/locations\/LOCATION_ID\`.
+pljlParent :: Lens' ProjectsLocationsJobsList Text
+pljlParent
+  = lens _pljlParent (\ s a -> s{_pljlParent = a})
+
+-- | V1 error format.
+pljlXgafv :: Lens' ProjectsLocationsJobsList (Maybe Xgafv)
+pljlXgafv
+  = lens _pljlXgafv (\ s a -> s{_pljlXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+pljlUploadProtocol :: Lens' ProjectsLocationsJobsList (Maybe Text)
+pljlUploadProtocol
+  = lens _pljlUploadProtocol
+      (\ s a -> s{_pljlUploadProtocol = a})
+
+-- | OAuth access token.
+pljlAccessToken :: Lens' ProjectsLocationsJobsList (Maybe Text)
+pljlAccessToken
+  = lens _pljlAccessToken
+      (\ s a -> s{_pljlAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+pljlUploadType :: Lens' ProjectsLocationsJobsList (Maybe Text)
+pljlUploadType
+  = lens _pljlUploadType
+      (\ s a -> s{_pljlUploadType = a})
+
+-- | A token identifying a page of results the server will return. To request
+-- the first page results, page_token must be empty. To request the next
+-- page of results, page_token must be the value of next_page_token
+-- returned from the previous call to ListJobs. It is an error to switch
+-- the value of filter or order_by while iterating through pages.
+pljlPageToken :: Lens' ProjectsLocationsJobsList (Maybe Text)
+pljlPageToken
+  = lens _pljlPageToken
+      (\ s a -> s{_pljlPageToken = a})
+
+-- | Requested page size. The maximum page size is 500. If unspecified, the
+-- page size will be the maximum. Fewer jobs than requested might be
+-- returned, even if more jobs exist; use next_page_token to determine if
+-- more jobs exist.
+pljlPageSize :: Lens' ProjectsLocationsJobsList (Maybe Int32)
+pljlPageSize
+  = lens _pljlPageSize (\ s a -> s{_pljlPageSize = a})
+      . mapping _Coerce
+
+-- | JSONP
+pljlCallback :: Lens' ProjectsLocationsJobsList (Maybe Text)
+pljlCallback
+  = lens _pljlCallback (\ s a -> s{_pljlCallback = a})
+
+instance GoogleRequest ProjectsLocationsJobsList
+         where
+        type Rs ProjectsLocationsJobsList = ListJobsResponse
+        type Scopes ProjectsLocationsJobsList =
+             '["https://www.googleapis.com/auth/cloud-platform"]
+        requestClient ProjectsLocationsJobsList'{..}
+          = go _pljlParent _pljlXgafv _pljlUploadProtocol
+              _pljlAccessToken
+              _pljlUploadType
+              _pljlPageToken
+              _pljlPageSize
+              _pljlCallback
+              (Just AltJSON)
+              cloudSchedulerService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy ProjectsLocationsJobsListResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/CloudScheduler/Projects/Locations/Jobs/Patch.hs b/gen/Network/Google/Resource/CloudScheduler/Projects/Locations/Jobs/Patch.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/CloudScheduler/Projects/Locations/Jobs/Patch.hs
@@ -0,0 +1,191 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.CloudScheduler.Projects.Locations.Jobs.Patch
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Updates a job. If successful, the updated Job is returned. If the job
+-- does not exist, \`NOT_FOUND\` is returned. If UpdateJob does not
+-- successfully return, it is possible for the job to be in an
+-- Job.State.UPDATE_FAILED state. A job in this state may not be executed.
+-- If this happens, retry the UpdateJob request until a successful response
+-- is received.
+--
+-- /See:/ <https://cloud.google.com/scheduler/ Cloud Scheduler API Reference> for @cloudscheduler.projects.locations.jobs.patch@.
+module Network.Google.Resource.CloudScheduler.Projects.Locations.Jobs.Patch
+    (
+    -- * REST Resource
+      ProjectsLocationsJobsPatchResource
+
+    -- * Creating a Request
+    , projectsLocationsJobsPatch
+    , ProjectsLocationsJobsPatch
+
+    -- * Request Lenses
+    , pljpXgafv
+    , pljpUploadProtocol
+    , pljpUpdateMask
+    , pljpAccessToken
+    , pljpUploadType
+    , pljpPayload
+    , pljpName
+    , pljpCallback
+    ) where
+
+import           Network.Google.CloudScheduler.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @cloudscheduler.projects.locations.jobs.patch@ method which the
+-- 'ProjectsLocationsJobsPatch' request conforms to.
+type ProjectsLocationsJobsPatchResource =
+     "v1beta1" :>
+       Capture "name" Text :>
+         QueryParam "$.xgafv" Xgafv :>
+           QueryParam "upload_protocol" Text :>
+             QueryParam "updateMask" GFieldMask :>
+               QueryParam "access_token" Text :>
+                 QueryParam "uploadType" Text :>
+                   QueryParam "callback" Text :>
+                     QueryParam "alt" AltJSON :>
+                       ReqBody '[JSON] Job :> Patch '[JSON] Job
+
+-- | Updates a job. If successful, the updated Job is returned. If the job
+-- does not exist, \`NOT_FOUND\` is returned. If UpdateJob does not
+-- successfully return, it is possible for the job to be in an
+-- Job.State.UPDATE_FAILED state. A job in this state may not be executed.
+-- If this happens, retry the UpdateJob request until a successful response
+-- is received.
+--
+-- /See:/ 'projectsLocationsJobsPatch' smart constructor.
+data ProjectsLocationsJobsPatch = ProjectsLocationsJobsPatch'
+    { _pljpXgafv          :: !(Maybe Xgafv)
+    , _pljpUploadProtocol :: !(Maybe Text)
+    , _pljpUpdateMask     :: !(Maybe GFieldMask)
+    , _pljpAccessToken    :: !(Maybe Text)
+    , _pljpUploadType     :: !(Maybe Text)
+    , _pljpPayload        :: !Job
+    , _pljpName           :: !Text
+    , _pljpCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ProjectsLocationsJobsPatch' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pljpXgafv'
+--
+-- * 'pljpUploadProtocol'
+--
+-- * 'pljpUpdateMask'
+--
+-- * 'pljpAccessToken'
+--
+-- * 'pljpUploadType'
+--
+-- * 'pljpPayload'
+--
+-- * 'pljpName'
+--
+-- * 'pljpCallback'
+projectsLocationsJobsPatch
+    :: Job -- ^ 'pljpPayload'
+    -> Text -- ^ 'pljpName'
+    -> ProjectsLocationsJobsPatch
+projectsLocationsJobsPatch pPljpPayload_ pPljpName_ =
+    ProjectsLocationsJobsPatch'
+    { _pljpXgafv = Nothing
+    , _pljpUploadProtocol = Nothing
+    , _pljpUpdateMask = Nothing
+    , _pljpAccessToken = Nothing
+    , _pljpUploadType = Nothing
+    , _pljpPayload = pPljpPayload_
+    , _pljpName = pPljpName_
+    , _pljpCallback = Nothing
+    }
+
+-- | V1 error format.
+pljpXgafv :: Lens' ProjectsLocationsJobsPatch (Maybe Xgafv)
+pljpXgafv
+  = lens _pljpXgafv (\ s a -> s{_pljpXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+pljpUploadProtocol :: Lens' ProjectsLocationsJobsPatch (Maybe Text)
+pljpUploadProtocol
+  = lens _pljpUploadProtocol
+      (\ s a -> s{_pljpUploadProtocol = a})
+
+-- | A mask used to specify which fields of the job are being updated.
+pljpUpdateMask :: Lens' ProjectsLocationsJobsPatch (Maybe GFieldMask)
+pljpUpdateMask
+  = lens _pljpUpdateMask
+      (\ s a -> s{_pljpUpdateMask = a})
+
+-- | OAuth access token.
+pljpAccessToken :: Lens' ProjectsLocationsJobsPatch (Maybe Text)
+pljpAccessToken
+  = lens _pljpAccessToken
+      (\ s a -> s{_pljpAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+pljpUploadType :: Lens' ProjectsLocationsJobsPatch (Maybe Text)
+pljpUploadType
+  = lens _pljpUploadType
+      (\ s a -> s{_pljpUploadType = a})
+
+-- | Multipart request metadata.
+pljpPayload :: Lens' ProjectsLocationsJobsPatch Job
+pljpPayload
+  = lens _pljpPayload (\ s a -> s{_pljpPayload = a})
+
+-- | The job name. For example:
+-- \`projects\/PROJECT_ID\/locations\/LOCATION_ID\/jobs\/JOB_ID\`. *
+-- \`PROJECT_ID\` can contain letters ([A-Za-z]), numbers ([0-9]), hyphens
+-- (-), colons (:), or periods (.). For more information, see [Identifying
+-- projects](https:\/\/cloud.google.com\/resource-manager\/docs\/creating-managing-projects#identifying_projects)
+-- * \`LOCATION_ID\` is the canonical ID for the job\'s location. The list
+-- of available locations can be obtained by calling ListLocations. For
+-- more information, see https:\/\/cloud.google.com\/about\/locations\/. *
+-- \`JOB_ID\` can contain only letters ([A-Za-z]), numbers ([0-9]), hyphens
+-- (-), or underscores (_). The maximum length is 500 characters.
+pljpName :: Lens' ProjectsLocationsJobsPatch Text
+pljpName = lens _pljpName (\ s a -> s{_pljpName = a})
+
+-- | JSONP
+pljpCallback :: Lens' ProjectsLocationsJobsPatch (Maybe Text)
+pljpCallback
+  = lens _pljpCallback (\ s a -> s{_pljpCallback = a})
+
+instance GoogleRequest ProjectsLocationsJobsPatch
+         where
+        type Rs ProjectsLocationsJobsPatch = Job
+        type Scopes ProjectsLocationsJobsPatch =
+             '["https://www.googleapis.com/auth/cloud-platform"]
+        requestClient ProjectsLocationsJobsPatch'{..}
+          = go _pljpName _pljpXgafv _pljpUploadProtocol
+              _pljpUpdateMask
+              _pljpAccessToken
+              _pljpUploadType
+              _pljpCallback
+              (Just AltJSON)
+              _pljpPayload
+              cloudSchedulerService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy ProjectsLocationsJobsPatchResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/CloudScheduler/Projects/Locations/Jobs/Pause.hs b/gen/Network/Google/Resource/CloudScheduler/Projects/Locations/Jobs/Pause.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/CloudScheduler/Projects/Locations/Jobs/Pause.hs
@@ -0,0 +1,165 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.CloudScheduler.Projects.Locations.Jobs.Pause
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Pauses a job. If a job is paused then the system will stop executing the
+-- job until it is re-enabled via ResumeJob. The state of the job is stored
+-- in state; if paused it will be set to Job.State.PAUSED. A job must be in
+-- Job.State.ENABLED to be paused.
+--
+-- /See:/ <https://cloud.google.com/scheduler/ Cloud Scheduler API Reference> for @cloudscheduler.projects.locations.jobs.pause@.
+module Network.Google.Resource.CloudScheduler.Projects.Locations.Jobs.Pause
+    (
+    -- * REST Resource
+      ProjectsLocationsJobsPauseResource
+
+    -- * Creating a Request
+    , projectsLocationsJobsPause
+    , ProjectsLocationsJobsPause
+
+    -- * Request Lenses
+    , proXgafv
+    , proUploadProtocol
+    , proAccessToken
+    , proUploadType
+    , proPayload
+    , proName
+    , proCallback
+    ) where
+
+import           Network.Google.CloudScheduler.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @cloudscheduler.projects.locations.jobs.pause@ method which the
+-- 'ProjectsLocationsJobsPause' request conforms to.
+type ProjectsLocationsJobsPauseResource =
+     "v1beta1" :>
+       CaptureMode "name" "pause" Text :>
+         QueryParam "$.xgafv" Xgafv :>
+           QueryParam "upload_protocol" Text :>
+             QueryParam "access_token" Text :>
+               QueryParam "uploadType" Text :>
+                 QueryParam "callback" Text :>
+                   QueryParam "alt" AltJSON :>
+                     ReqBody '[JSON] PauseJobRequest :> Post '[JSON] Job
+
+-- | Pauses a job. If a job is paused then the system will stop executing the
+-- job until it is re-enabled via ResumeJob. The state of the job is stored
+-- in state; if paused it will be set to Job.State.PAUSED. A job must be in
+-- Job.State.ENABLED to be paused.
+--
+-- /See:/ 'projectsLocationsJobsPause' smart constructor.
+data ProjectsLocationsJobsPause = ProjectsLocationsJobsPause'
+    { _proXgafv          :: !(Maybe Xgafv)
+    , _proUploadProtocol :: !(Maybe Text)
+    , _proAccessToken    :: !(Maybe Text)
+    , _proUploadType     :: !(Maybe Text)
+    , _proPayload        :: !PauseJobRequest
+    , _proName           :: !Text
+    , _proCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ProjectsLocationsJobsPause' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'proXgafv'
+--
+-- * 'proUploadProtocol'
+--
+-- * 'proAccessToken'
+--
+-- * 'proUploadType'
+--
+-- * 'proPayload'
+--
+-- * 'proName'
+--
+-- * 'proCallback'
+projectsLocationsJobsPause
+    :: PauseJobRequest -- ^ 'proPayload'
+    -> Text -- ^ 'proName'
+    -> ProjectsLocationsJobsPause
+projectsLocationsJobsPause pProPayload_ pProName_ =
+    ProjectsLocationsJobsPause'
+    { _proXgafv = Nothing
+    , _proUploadProtocol = Nothing
+    , _proAccessToken = Nothing
+    , _proUploadType = Nothing
+    , _proPayload = pProPayload_
+    , _proName = pProName_
+    , _proCallback = Nothing
+    }
+
+-- | V1 error format.
+proXgafv :: Lens' ProjectsLocationsJobsPause (Maybe Xgafv)
+proXgafv = lens _proXgafv (\ s a -> s{_proXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+proUploadProtocol :: Lens' ProjectsLocationsJobsPause (Maybe Text)
+proUploadProtocol
+  = lens _proUploadProtocol
+      (\ s a -> s{_proUploadProtocol = a})
+
+-- | OAuth access token.
+proAccessToken :: Lens' ProjectsLocationsJobsPause (Maybe Text)
+proAccessToken
+  = lens _proAccessToken
+      (\ s a -> s{_proAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+proUploadType :: Lens' ProjectsLocationsJobsPause (Maybe Text)
+proUploadType
+  = lens _proUploadType
+      (\ s a -> s{_proUploadType = a})
+
+-- | Multipart request metadata.
+proPayload :: Lens' ProjectsLocationsJobsPause PauseJobRequest
+proPayload
+  = lens _proPayload (\ s a -> s{_proPayload = a})
+
+-- | Required. The job name. For example:
+-- \`projects\/PROJECT_ID\/locations\/LOCATION_ID\/jobs\/JOB_ID\`.
+proName :: Lens' ProjectsLocationsJobsPause Text
+proName = lens _proName (\ s a -> s{_proName = a})
+
+-- | JSONP
+proCallback :: Lens' ProjectsLocationsJobsPause (Maybe Text)
+proCallback
+  = lens _proCallback (\ s a -> s{_proCallback = a})
+
+instance GoogleRequest ProjectsLocationsJobsPause
+         where
+        type Rs ProjectsLocationsJobsPause = Job
+        type Scopes ProjectsLocationsJobsPause =
+             '["https://www.googleapis.com/auth/cloud-platform"]
+        requestClient ProjectsLocationsJobsPause'{..}
+          = go _proName _proXgafv _proUploadProtocol
+              _proAccessToken
+              _proUploadType
+              _proCallback
+              (Just AltJSON)
+              _proPayload
+              cloudSchedulerService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy ProjectsLocationsJobsPauseResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/CloudScheduler/Projects/Locations/Jobs/Resume.hs b/gen/Network/Google/Resource/CloudScheduler/Projects/Locations/Jobs/Resume.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/CloudScheduler/Projects/Locations/Jobs/Resume.hs
@@ -0,0 +1,166 @@
+{-# 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.CloudScheduler.Projects.Locations.Jobs.Resume
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Resume a job. This method reenables a job after it has been
+-- Job.State.PAUSED. The state of a job is stored in Job.state; after
+-- calling this method it will be set to Job.State.ENABLED. A job must be
+-- in Job.State.PAUSED to be resumed.
+--
+-- /See:/ <https://cloud.google.com/scheduler/ Cloud Scheduler API Reference> for @cloudscheduler.projects.locations.jobs.resume@.
+module Network.Google.Resource.CloudScheduler.Projects.Locations.Jobs.Resume
+    (
+    -- * REST Resource
+      ProjectsLocationsJobsResumeResource
+
+    -- * Creating a Request
+    , projectsLocationsJobsResume
+    , ProjectsLocationsJobsResume
+
+    -- * Request Lenses
+    , pljrXgafv
+    , pljrUploadProtocol
+    , pljrAccessToken
+    , pljrUploadType
+    , pljrPayload
+    , pljrName
+    , pljrCallback
+    ) where
+
+import           Network.Google.CloudScheduler.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @cloudscheduler.projects.locations.jobs.resume@ method which the
+-- 'ProjectsLocationsJobsResume' request conforms to.
+type ProjectsLocationsJobsResumeResource =
+     "v1beta1" :>
+       CaptureMode "name" "resume" Text :>
+         QueryParam "$.xgafv" Xgafv :>
+           QueryParam "upload_protocol" Text :>
+             QueryParam "access_token" Text :>
+               QueryParam "uploadType" Text :>
+                 QueryParam "callback" Text :>
+                   QueryParam "alt" AltJSON :>
+                     ReqBody '[JSON] ResumeJobRequest :> Post '[JSON] Job
+
+-- | Resume a job. This method reenables a job after it has been
+-- Job.State.PAUSED. The state of a job is stored in Job.state; after
+-- calling this method it will be set to Job.State.ENABLED. A job must be
+-- in Job.State.PAUSED to be resumed.
+--
+-- /See:/ 'projectsLocationsJobsResume' smart constructor.
+data ProjectsLocationsJobsResume = ProjectsLocationsJobsResume'
+    { _pljrXgafv          :: !(Maybe Xgafv)
+    , _pljrUploadProtocol :: !(Maybe Text)
+    , _pljrAccessToken    :: !(Maybe Text)
+    , _pljrUploadType     :: !(Maybe Text)
+    , _pljrPayload        :: !ResumeJobRequest
+    , _pljrName           :: !Text
+    , _pljrCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ProjectsLocationsJobsResume' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pljrXgafv'
+--
+-- * 'pljrUploadProtocol'
+--
+-- * 'pljrAccessToken'
+--
+-- * 'pljrUploadType'
+--
+-- * 'pljrPayload'
+--
+-- * 'pljrName'
+--
+-- * 'pljrCallback'
+projectsLocationsJobsResume
+    :: ResumeJobRequest -- ^ 'pljrPayload'
+    -> Text -- ^ 'pljrName'
+    -> ProjectsLocationsJobsResume
+projectsLocationsJobsResume pPljrPayload_ pPljrName_ =
+    ProjectsLocationsJobsResume'
+    { _pljrXgafv = Nothing
+    , _pljrUploadProtocol = Nothing
+    , _pljrAccessToken = Nothing
+    , _pljrUploadType = Nothing
+    , _pljrPayload = pPljrPayload_
+    , _pljrName = pPljrName_
+    , _pljrCallback = Nothing
+    }
+
+-- | V1 error format.
+pljrXgafv :: Lens' ProjectsLocationsJobsResume (Maybe Xgafv)
+pljrXgafv
+  = lens _pljrXgafv (\ s a -> s{_pljrXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+pljrUploadProtocol :: Lens' ProjectsLocationsJobsResume (Maybe Text)
+pljrUploadProtocol
+  = lens _pljrUploadProtocol
+      (\ s a -> s{_pljrUploadProtocol = a})
+
+-- | OAuth access token.
+pljrAccessToken :: Lens' ProjectsLocationsJobsResume (Maybe Text)
+pljrAccessToken
+  = lens _pljrAccessToken
+      (\ s a -> s{_pljrAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+pljrUploadType :: Lens' ProjectsLocationsJobsResume (Maybe Text)
+pljrUploadType
+  = lens _pljrUploadType
+      (\ s a -> s{_pljrUploadType = a})
+
+-- | Multipart request metadata.
+pljrPayload :: Lens' ProjectsLocationsJobsResume ResumeJobRequest
+pljrPayload
+  = lens _pljrPayload (\ s a -> s{_pljrPayload = a})
+
+-- | Required. The job name. For example:
+-- \`projects\/PROJECT_ID\/locations\/LOCATION_ID\/jobs\/JOB_ID\`.
+pljrName :: Lens' ProjectsLocationsJobsResume Text
+pljrName = lens _pljrName (\ s a -> s{_pljrName = a})
+
+-- | JSONP
+pljrCallback :: Lens' ProjectsLocationsJobsResume (Maybe Text)
+pljrCallback
+  = lens _pljrCallback (\ s a -> s{_pljrCallback = a})
+
+instance GoogleRequest ProjectsLocationsJobsResume
+         where
+        type Rs ProjectsLocationsJobsResume = Job
+        type Scopes ProjectsLocationsJobsResume =
+             '["https://www.googleapis.com/auth/cloud-platform"]
+        requestClient ProjectsLocationsJobsResume'{..}
+          = go _pljrName _pljrXgafv _pljrUploadProtocol
+              _pljrAccessToken
+              _pljrUploadType
+              _pljrCallback
+              (Just AltJSON)
+              _pljrPayload
+              cloudSchedulerService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy ProjectsLocationsJobsResumeResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/CloudScheduler/Projects/Locations/Jobs/Run.hs b/gen/Network/Google/Resource/CloudScheduler/Projects/Locations/Jobs/Run.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/CloudScheduler/Projects/Locations/Jobs/Run.hs
@@ -0,0 +1,156 @@
+{-# 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.CloudScheduler.Projects.Locations.Jobs.Run
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Forces a job to run now. When this method is called, Cloud Scheduler
+-- will dispatch the job, even if the job is already running.
+--
+-- /See:/ <https://cloud.google.com/scheduler/ Cloud Scheduler API Reference> for @cloudscheduler.projects.locations.jobs.run@.
+module Network.Google.Resource.CloudScheduler.Projects.Locations.Jobs.Run
+    (
+    -- * REST Resource
+      ProjectsLocationsJobsRunResource
+
+    -- * Creating a Request
+    , projectsLocationsJobsRun
+    , ProjectsLocationsJobsRun
+
+    -- * Request Lenses
+    , pXgafv
+    , pUploadProtocol
+    , pAccessToken
+    , pUploadType
+    , pPayload
+    , pName
+    , pCallback
+    ) where
+
+import           Network.Google.CloudScheduler.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @cloudscheduler.projects.locations.jobs.run@ method which the
+-- 'ProjectsLocationsJobsRun' request conforms to.
+type ProjectsLocationsJobsRunResource =
+     "v1beta1" :>
+       CaptureMode "name" "run" Text :>
+         QueryParam "$.xgafv" Xgafv :>
+           QueryParam "upload_protocol" Text :>
+             QueryParam "access_token" Text :>
+               QueryParam "uploadType" Text :>
+                 QueryParam "callback" Text :>
+                   QueryParam "alt" AltJSON :>
+                     ReqBody '[JSON] RunJobRequest :> Post '[JSON] Job
+
+-- | Forces a job to run now. When this method is called, Cloud Scheduler
+-- will dispatch the job, even if the job is already running.
+--
+-- /See:/ 'projectsLocationsJobsRun' smart constructor.
+data ProjectsLocationsJobsRun = ProjectsLocationsJobsRun'
+    { _pXgafv          :: !(Maybe Xgafv)
+    , _pUploadProtocol :: !(Maybe Text)
+    , _pAccessToken    :: !(Maybe Text)
+    , _pUploadType     :: !(Maybe Text)
+    , _pPayload        :: !RunJobRequest
+    , _pName           :: !Text
+    , _pCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ProjectsLocationsJobsRun' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pXgafv'
+--
+-- * 'pUploadProtocol'
+--
+-- * 'pAccessToken'
+--
+-- * 'pUploadType'
+--
+-- * 'pPayload'
+--
+-- * 'pName'
+--
+-- * 'pCallback'
+projectsLocationsJobsRun
+    :: RunJobRequest -- ^ 'pPayload'
+    -> Text -- ^ 'pName'
+    -> ProjectsLocationsJobsRun
+projectsLocationsJobsRun pPPayload_ pPName_ =
+    ProjectsLocationsJobsRun'
+    { _pXgafv = Nothing
+    , _pUploadProtocol = Nothing
+    , _pAccessToken = Nothing
+    , _pUploadType = Nothing
+    , _pPayload = pPPayload_
+    , _pName = pPName_
+    , _pCallback = Nothing
+    }
+
+-- | V1 error format.
+pXgafv :: Lens' ProjectsLocationsJobsRun (Maybe Xgafv)
+pXgafv = lens _pXgafv (\ s a -> s{_pXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+pUploadProtocol :: Lens' ProjectsLocationsJobsRun (Maybe Text)
+pUploadProtocol
+  = lens _pUploadProtocol
+      (\ s a -> s{_pUploadProtocol = a})
+
+-- | OAuth access token.
+pAccessToken :: Lens' ProjectsLocationsJobsRun (Maybe Text)
+pAccessToken
+  = lens _pAccessToken (\ s a -> s{_pAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+pUploadType :: Lens' ProjectsLocationsJobsRun (Maybe Text)
+pUploadType
+  = lens _pUploadType (\ s a -> s{_pUploadType = a})
+
+-- | Multipart request metadata.
+pPayload :: Lens' ProjectsLocationsJobsRun RunJobRequest
+pPayload = lens _pPayload (\ s a -> s{_pPayload = a})
+
+-- | Required. The job name. For example:
+-- \`projects\/PROJECT_ID\/locations\/LOCATION_ID\/jobs\/JOB_ID\`.
+pName :: Lens' ProjectsLocationsJobsRun Text
+pName = lens _pName (\ s a -> s{_pName = a})
+
+-- | JSONP
+pCallback :: Lens' ProjectsLocationsJobsRun (Maybe Text)
+pCallback
+  = lens _pCallback (\ s a -> s{_pCallback = a})
+
+instance GoogleRequest ProjectsLocationsJobsRun where
+        type Rs ProjectsLocationsJobsRun = Job
+        type Scopes ProjectsLocationsJobsRun =
+             '["https://www.googleapis.com/auth/cloud-platform"]
+        requestClient ProjectsLocationsJobsRun'{..}
+          = go _pName _pXgafv _pUploadProtocol _pAccessToken
+              _pUploadType
+              _pCallback
+              (Just AltJSON)
+              _pPayload
+              cloudSchedulerService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy ProjectsLocationsJobsRunResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/CloudScheduler/Projects/Locations/List.hs b/gen/Network/Google/Resource/CloudScheduler/Projects/Locations/List.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/CloudScheduler/Projects/Locations/List.hs
@@ -0,0 +1,183 @@
+{-# 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.CloudScheduler.Projects.Locations.List
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Lists information about the supported locations for this service.
+--
+-- /See:/ <https://cloud.google.com/scheduler/ Cloud Scheduler API Reference> for @cloudscheduler.projects.locations.list@.
+module Network.Google.Resource.CloudScheduler.Projects.Locations.List
+    (
+    -- * REST Resource
+      ProjectsLocationsListResource
+
+    -- * Creating a Request
+    , projectsLocationsList
+    , ProjectsLocationsList
+
+    -- * Request Lenses
+    , pllXgafv
+    , pllUploadProtocol
+    , pllAccessToken
+    , pllUploadType
+    , pllName
+    , pllFilter
+    , pllPageToken
+    , pllPageSize
+    , pllCallback
+    ) where
+
+import           Network.Google.CloudScheduler.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @cloudscheduler.projects.locations.list@ method which the
+-- 'ProjectsLocationsList' request conforms to.
+type ProjectsLocationsListResource =
+     "v1beta1" :>
+       Capture "name" Text :>
+         "locations" :>
+           QueryParam "$.xgafv" Xgafv :>
+             QueryParam "upload_protocol" Text :>
+               QueryParam "access_token" Text :>
+                 QueryParam "uploadType" Text :>
+                   QueryParam "filter" Text :>
+                     QueryParam "pageToken" Text :>
+                       QueryParam "pageSize" (Textual Int32) :>
+                         QueryParam "callback" Text :>
+                           QueryParam "alt" AltJSON :>
+                             Get '[JSON] ListLocationsResponse
+
+-- | Lists information about the supported locations for this service.
+--
+-- /See:/ 'projectsLocationsList' smart constructor.
+data ProjectsLocationsList = ProjectsLocationsList'
+    { _pllXgafv          :: !(Maybe Xgafv)
+    , _pllUploadProtocol :: !(Maybe Text)
+    , _pllAccessToken    :: !(Maybe Text)
+    , _pllUploadType     :: !(Maybe Text)
+    , _pllName           :: !Text
+    , _pllFilter         :: !(Maybe Text)
+    , _pllPageToken      :: !(Maybe Text)
+    , _pllPageSize       :: !(Maybe (Textual Int32))
+    , _pllCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ProjectsLocationsList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pllXgafv'
+--
+-- * 'pllUploadProtocol'
+--
+-- * 'pllAccessToken'
+--
+-- * 'pllUploadType'
+--
+-- * 'pllName'
+--
+-- * 'pllFilter'
+--
+-- * 'pllPageToken'
+--
+-- * 'pllPageSize'
+--
+-- * 'pllCallback'
+projectsLocationsList
+    :: Text -- ^ 'pllName'
+    -> ProjectsLocationsList
+projectsLocationsList pPllName_ =
+    ProjectsLocationsList'
+    { _pllXgafv = Nothing
+    , _pllUploadProtocol = Nothing
+    , _pllAccessToken = Nothing
+    , _pllUploadType = Nothing
+    , _pllName = pPllName_
+    , _pllFilter = Nothing
+    , _pllPageToken = Nothing
+    , _pllPageSize = Nothing
+    , _pllCallback = Nothing
+    }
+
+-- | V1 error format.
+pllXgafv :: Lens' ProjectsLocationsList (Maybe Xgafv)
+pllXgafv = lens _pllXgafv (\ s a -> s{_pllXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+pllUploadProtocol :: Lens' ProjectsLocationsList (Maybe Text)
+pllUploadProtocol
+  = lens _pllUploadProtocol
+      (\ s a -> s{_pllUploadProtocol = a})
+
+-- | OAuth access token.
+pllAccessToken :: Lens' ProjectsLocationsList (Maybe Text)
+pllAccessToken
+  = lens _pllAccessToken
+      (\ s a -> s{_pllAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+pllUploadType :: Lens' ProjectsLocationsList (Maybe Text)
+pllUploadType
+  = lens _pllUploadType
+      (\ s a -> s{_pllUploadType = a})
+
+-- | The resource that owns the locations collection, if applicable.
+pllName :: Lens' ProjectsLocationsList Text
+pllName = lens _pllName (\ s a -> s{_pllName = a})
+
+-- | The standard list filter.
+pllFilter :: Lens' ProjectsLocationsList (Maybe Text)
+pllFilter
+  = lens _pllFilter (\ s a -> s{_pllFilter = a})
+
+-- | The standard list page token.
+pllPageToken :: Lens' ProjectsLocationsList (Maybe Text)
+pllPageToken
+  = lens _pllPageToken (\ s a -> s{_pllPageToken = a})
+
+-- | The standard list page size.
+pllPageSize :: Lens' ProjectsLocationsList (Maybe Int32)
+pllPageSize
+  = lens _pllPageSize (\ s a -> s{_pllPageSize = a}) .
+      mapping _Coerce
+
+-- | JSONP
+pllCallback :: Lens' ProjectsLocationsList (Maybe Text)
+pllCallback
+  = lens _pllCallback (\ s a -> s{_pllCallback = a})
+
+instance GoogleRequest ProjectsLocationsList where
+        type Rs ProjectsLocationsList = ListLocationsResponse
+        type Scopes ProjectsLocationsList =
+             '["https://www.googleapis.com/auth/cloud-platform"]
+        requestClient ProjectsLocationsList'{..}
+          = go _pllName _pllXgafv _pllUploadProtocol
+              _pllAccessToken
+              _pllUploadType
+              _pllFilter
+              _pllPageToken
+              _pllPageSize
+              _pllCallback
+              (Just AltJSON)
+              cloudSchedulerService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy ProjectsLocationsListResource)
+                      mempty
diff --git a/gogol-cloudscheduler.cabal b/gogol-cloudscheduler.cabal
new file mode 100644
--- /dev/null
+++ b/gogol-cloudscheduler.cabal
@@ -0,0 +1,55 @@
+name:                  gogol-cloudscheduler
+version:               0.4.0
+synopsis:              Google Cloud Scheduler 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-2016 Brendan Hay
+category:              Network, Google, Cloud
+build-type:            Simple
+cabal-version:         >= 1.10
+extra-source-files:    README.md src/.gitkeep
+
+description:
+    Creates and manages jobs run on a regular recurring schedule.
+    .
+    /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 @v1beta1@
+    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.CloudScheduler
+        , Network.Google.CloudScheduler.Types
+        , Network.Google.Resource.CloudScheduler.Projects.Locations.Get
+        , Network.Google.Resource.CloudScheduler.Projects.Locations.Jobs.Create
+        , Network.Google.Resource.CloudScheduler.Projects.Locations.Jobs.Delete
+        , Network.Google.Resource.CloudScheduler.Projects.Locations.Jobs.Get
+        , Network.Google.Resource.CloudScheduler.Projects.Locations.Jobs.List
+        , Network.Google.Resource.CloudScheduler.Projects.Locations.Jobs.Patch
+        , Network.Google.Resource.CloudScheduler.Projects.Locations.Jobs.Pause
+        , Network.Google.Resource.CloudScheduler.Projects.Locations.Jobs.Resume
+        , Network.Google.Resource.CloudScheduler.Projects.Locations.Jobs.Run
+        , Network.Google.Resource.CloudScheduler.Projects.Locations.List
+
+    other-modules:
+          Network.Google.CloudScheduler.Types.Product
+        , Network.Google.CloudScheduler.Types.Sum
+
+    build-depends:
+          gogol-core == 0.4.0.*
+        , base       >= 4.7 && < 5
diff --git a/src/.gitkeep b/src/.gitkeep
new file mode 100644
--- /dev/null
+++ b/src/.gitkeep
