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-appengine
+
+* [Version](#version)
+* [Description](#description)
+* [Contribute](#contribute)
+* [Licence](#licence)
+
+
+## Version
+
+`0.0.1`
+
+
+## Description
+
+A client library for the Google App Engine Admin.
+
+
+## Contribute
+
+For any problems, comments, or feedback please create an issue [here on GitHub](https://github.com/brendanhay/amazonka/issues).
+
+> _Note:_ this library is an auto-generated Haskell package. Please see `amazonka-gen` for more information.
+
+
+## Licence
+
+`gogol-appengine` 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/AppEngine.hs b/gen/Network/Google/AppEngine.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/AppEngine.hs
@@ -0,0 +1,390 @@
+{-# LANGUAGE DataKinds         #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# LANGUAGE TypeOperators     #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+
+-- |
+-- Module      : Network.Google.AppEngine
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- The Google App Engine Admin API enables developers to provision and
+-- manage their App Engine applications.
+--
+-- /See:/ <https://developers.google.com/appengine/ Google App Engine Admin API Reference>
+module Network.Google.AppEngine
+    (
+    -- * Service Configuration
+      appEngineService
+
+    -- * API Declaration
+    , AppEngineAPI
+
+    -- * Resources
+
+    -- ** appengine.apps.get
+    , module Network.Google.Resource.AppEngine.Apps.Get
+
+    -- ** appengine.apps.modules.delete
+    , module Network.Google.Resource.AppEngine.Apps.Modules.Delete
+
+    -- ** appengine.apps.modules.get
+    , module Network.Google.Resource.AppEngine.Apps.Modules.Get
+
+    -- ** appengine.apps.modules.list
+    , module Network.Google.Resource.AppEngine.Apps.Modules.List
+
+    -- ** appengine.apps.modules.patch
+    , module Network.Google.Resource.AppEngine.Apps.Modules.Patch
+
+    -- ** appengine.apps.modules.versions.create
+    , module Network.Google.Resource.AppEngine.Apps.Modules.Versions.Create
+
+    -- ** appengine.apps.modules.versions.delete
+    , module Network.Google.Resource.AppEngine.Apps.Modules.Versions.Delete
+
+    -- ** appengine.apps.modules.versions.get
+    , module Network.Google.Resource.AppEngine.Apps.Modules.Versions.Get
+
+    -- ** appengine.apps.modules.versions.list
+    , module Network.Google.Resource.AppEngine.Apps.Modules.Versions.List
+
+    -- ** appengine.apps.operations.get
+    , module Network.Google.Resource.AppEngine.Apps.Operations.Get
+
+    -- ** appengine.apps.operations.list
+    , module Network.Google.Resource.AppEngine.Apps.Operations.List
+
+    -- * Types
+
+    -- ** Status
+    , Status
+    , status
+    , sDetails
+    , sCode
+    , sMessage
+
+    -- ** OperationSchema
+    , OperationSchema
+    , operationSchema
+    , osAddtional
+
+    -- ** TrafficSplit
+    , TrafficSplit
+    , trafficSplit
+    , tsShardBy
+    , tsAllocations
+
+    -- ** ScriptHandler
+    , ScriptHandler
+    , scriptHandler
+    , shScriptPath
+
+    -- ** URLMap
+    , URLMap
+    , urlMap
+    , umScript
+    , umSecurityLevel
+    , umAPIEndpoint
+    , umURLRegex
+    , umRedirectHTTPResponseCode
+    , umAuthFailAction
+    , umStaticFiles
+    , umLogin
+    , umStaticDirectory
+
+    -- ** Library
+    , Library
+    , library
+    , lName
+    , lVersion
+
+    -- ** ListOperationsResponse
+    , ListOperationsResponse
+    , listOperationsResponse
+    , lorNextPageToken
+    , lorOperations
+
+    -- ** HealthCheck
+    , HealthCheck
+    , healthCheck
+    , hcHealthyThreshold
+    , hcDisableHealthCheck
+    , hcCheckInterval
+    , hcRestartThreshold
+    , hcHost
+    , hcTimeout
+    , hcUnhealthyThreshold
+
+    -- ** APIConfigHandler
+    , APIConfigHandler
+    , apiConfigHandler
+    , achScript
+    , achSecurityLevel
+    , achURL
+    , achAuthFailAction
+    , achLogin
+
+    -- ** VersionEnvVariables
+    , VersionEnvVariables
+    , versionEnvVariables
+    , vevAddtional
+
+    -- ** Application
+    , Application
+    , application
+    , aLocation
+    , aCodeBucket
+    , aName
+    , aDispatchRules
+    , aId
+
+    -- ** VersionBetaSettings
+    , VersionBetaSettings
+    , versionBetaSettings
+    , vbsAddtional
+
+    -- ** Operation
+    , Operation
+    , operation
+    , oDone
+    , oError
+    , oResponse
+    , oName
+    , oMetadata
+
+    -- ** URLDispatchRule
+    , URLDispatchRule
+    , urlDispatchRule
+    , udrPath
+    , udrDomain
+    , udrModule
+
+    -- ** StaticDirectoryHandlerHTTPHeaders
+    , StaticDirectoryHandlerHTTPHeaders
+    , staticDirectoryHandlerHTTPHeaders
+    , sdhhttphAddtional
+
+    -- ** ListVersionsResponse
+    , ListVersionsResponse
+    , listVersionsResponse
+    , lvrNextPageToken
+    , lvrVersions
+
+    -- ** FileInfo
+    , FileInfo
+    , fileInfo
+    , fiSha1Sum
+    , fiMimeType
+    , fiSourceURL
+
+    -- ** AutomaticScaling
+    , AutomaticScaling
+    , automaticScaling
+    , asMaxTotalInstances
+    , asMinIdleInstances
+    , asMinPendingLatency
+    , asCPUUtilization
+    , asMaxIdleInstances
+    , asMinTotalInstances
+    , asMaxConcurrentRequests
+    , asCoolDownPeriod
+    , asMaxPendingLatency
+
+    -- ** ListModulesResponse
+    , ListModulesResponse
+    , listModulesResponse
+    , lmrNextPageToken
+    , lmrModules
+
+    -- ** APIEndpointHandler
+    , APIEndpointHandler
+    , apiEndpointHandler
+    , aehScriptPath
+
+    -- ** StatusDetailsItem
+    , StatusDetailsItem
+    , statusDetailsItem
+    , sdiAddtional
+
+    -- ** Network
+    , Network
+    , network
+    , nForwardedPorts
+    , nInstanceTag
+    , nName
+
+    -- ** StaticFilesHandlerHTTPHeaders
+    , StaticFilesHandlerHTTPHeaders
+    , staticFilesHandlerHTTPHeaders
+    , sfhhttphAddtional
+
+    -- ** Resources
+    , Resources
+    , resources
+    , rMemoryGb
+    , rDiskGb
+    , rCPU
+
+    -- ** DeploymentFiles
+    , DeploymentFiles
+    , deploymentFiles
+    , dfAddtional
+
+    -- ** CPUUtilization
+    , CPUUtilization
+    , cpuUtilization
+    , cuAggregationWindowLength
+    , cuTargetUtilization
+
+    -- ** TrafficSplitAllocations
+    , TrafficSplitAllocations
+    , trafficSplitAllocations
+    , tsaAddtional
+
+    -- ** ManualScaling
+    , ManualScaling
+    , manualScaling
+    , msInstances
+
+    -- ** BasicScaling
+    , BasicScaling
+    , basicScaling
+    , bsMaxInstances
+    , bsIdleTimeout
+
+    -- ** Version
+    , Version
+    , version
+    , vCreationTime
+    , vRuntime
+    , vDeployer
+    , vNobuildFilesRegex
+    , vInstanceClass
+    , vHealthCheck
+    , vEnv
+    , vDefaultExpiration
+    , vAutomaticScaling
+    , vErrorHandlers
+    , vVM
+    , vHandlers
+    , vInboundServices
+    , vNetwork
+    , vResources
+    , vName
+    , vThreadsafe
+    , vBetaSettings
+    , vBasicScaling
+    , vManualScaling
+    , vAPIConfig
+    , vId
+    , vEnvVariables
+    , vServingStatus
+    , vLibraries
+    , vDeployment
+
+    -- ** Module
+    , Module
+    , module'
+    , mSplit
+    , mName
+    , mId
+
+    -- ** StaticFilesHandler
+    , StaticFilesHandler
+    , staticFilesHandler
+    , sfhHTTPHeaders
+    , sfhPath
+    , sfhRequireMatchingFile
+    , sfhExpiration
+    , sfhMimeType
+    , sfhApplicationReadable
+    , sfhUploadPathRegex
+
+    -- ** ErrorHandler
+    , ErrorHandler
+    , errorHandler
+    , ehMimeType
+    , ehErrorCode
+    , ehStaticFile
+
+    -- ** OperationMetadata
+    , OperationMetadata
+    , operationMetadata
+    , omInsertTime
+    , omUser
+    , omMethod
+    , omEndTime
+    , omOperationType
+    , omTarget
+
+    -- ** SourceReference
+    , SourceReference
+    , sourceReference
+    , srRepository
+    , srRevisionId
+
+    -- ** OperationResponse
+    , OperationResponse
+    , operationResponse
+    , orAddtional
+
+    -- ** ContainerInfo
+    , ContainerInfo
+    , containerInfo
+    , ciImage
+
+    -- ** Deployment
+    , Deployment
+    , deployment
+    , dContainer
+    , dFiles
+    , dSourceReferences
+
+    -- ** StaticDirectoryHandler
+    , StaticDirectoryHandler
+    , staticDirectoryHandler
+    , sdhHTTPHeaders
+    , sdhRequireMatchingFile
+    , sdhExpiration
+    , sdhMimeType
+    , sdhApplicationReadable
+    , sdhDirectory
+    ) where
+
+import           Network.Google.AppEngine.Types
+import           Network.Google.Prelude
+import           Network.Google.Resource.AppEngine.Apps.Get
+import           Network.Google.Resource.AppEngine.Apps.Modules.Delete
+import           Network.Google.Resource.AppEngine.Apps.Modules.Get
+import           Network.Google.Resource.AppEngine.Apps.Modules.List
+import           Network.Google.Resource.AppEngine.Apps.Modules.Patch
+import           Network.Google.Resource.AppEngine.Apps.Modules.Versions.Create
+import           Network.Google.Resource.AppEngine.Apps.Modules.Versions.Delete
+import           Network.Google.Resource.AppEngine.Apps.Modules.Versions.Get
+import           Network.Google.Resource.AppEngine.Apps.Modules.Versions.List
+import           Network.Google.Resource.AppEngine.Apps.Operations.Get
+import           Network.Google.Resource.AppEngine.Apps.Operations.List
+
+{- $resources
+TODO
+-}
+
+-- | Represents the entirety of the methods and resources available for the Google App Engine Admin API service.
+type AppEngineAPI =
+     AppsModulesVersionsListResource :<|>
+       AppsModulesVersionsGetResource
+       :<|> AppsModulesVersionsCreateResource
+       :<|> AppsModulesVersionsDeleteResource
+       :<|> AppsModulesListResource
+       :<|> AppsModulesPatchResource
+       :<|> AppsModulesGetResource
+       :<|> AppsModulesDeleteResource
+       :<|> AppsOperationsListResource
+       :<|> AppsOperationsGetResource
+       :<|> AppsGetResource
diff --git a/gen/Network/Google/AppEngine/Types.hs b/gen/Network/Google/AppEngine/Types.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/AppEngine/Types.hs
@@ -0,0 +1,331 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- |
+-- Module      : Network.Google.AppEngine.Types
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+module Network.Google.AppEngine.Types
+    (
+    -- * Service Configuration
+      appEngineService
+
+    -- * OAuth Scopes
+    , cloudPlatformScope
+
+    -- * Status
+    , Status
+    , status
+    , sDetails
+    , sCode
+    , sMessage
+
+    -- * OperationSchema
+    , OperationSchema
+    , operationSchema
+    , osAddtional
+
+    -- * TrafficSplit
+    , TrafficSplit
+    , trafficSplit
+    , tsShardBy
+    , tsAllocations
+
+    -- * ScriptHandler
+    , ScriptHandler
+    , scriptHandler
+    , shScriptPath
+
+    -- * URLMap
+    , URLMap
+    , urlMap
+    , umScript
+    , umSecurityLevel
+    , umAPIEndpoint
+    , umURLRegex
+    , umRedirectHTTPResponseCode
+    , umAuthFailAction
+    , umStaticFiles
+    , umLogin
+    , umStaticDirectory
+
+    -- * Library
+    , Library
+    , library
+    , lName
+    , lVersion
+
+    -- * ListOperationsResponse
+    , ListOperationsResponse
+    , listOperationsResponse
+    , lorNextPageToken
+    , lorOperations
+
+    -- * HealthCheck
+    , HealthCheck
+    , healthCheck
+    , hcHealthyThreshold
+    , hcDisableHealthCheck
+    , hcCheckInterval
+    , hcRestartThreshold
+    , hcHost
+    , hcTimeout
+    , hcUnhealthyThreshold
+
+    -- * APIConfigHandler
+    , APIConfigHandler
+    , apiConfigHandler
+    , achScript
+    , achSecurityLevel
+    , achURL
+    , achAuthFailAction
+    , achLogin
+
+    -- * VersionEnvVariables
+    , VersionEnvVariables
+    , versionEnvVariables
+    , vevAddtional
+
+    -- * Application
+    , Application
+    , application
+    , aLocation
+    , aCodeBucket
+    , aName
+    , aDispatchRules
+    , aId
+
+    -- * VersionBetaSettings
+    , VersionBetaSettings
+    , versionBetaSettings
+    , vbsAddtional
+
+    -- * Operation
+    , Operation
+    , operation
+    , oDone
+    , oError
+    , oResponse
+    , oName
+    , oMetadata
+
+    -- * URLDispatchRule
+    , URLDispatchRule
+    , urlDispatchRule
+    , udrPath
+    , udrDomain
+    , udrModule
+
+    -- * StaticDirectoryHandlerHTTPHeaders
+    , StaticDirectoryHandlerHTTPHeaders
+    , staticDirectoryHandlerHTTPHeaders
+    , sdhhttphAddtional
+
+    -- * ListVersionsResponse
+    , ListVersionsResponse
+    , listVersionsResponse
+    , lvrNextPageToken
+    , lvrVersions
+
+    -- * FileInfo
+    , FileInfo
+    , fileInfo
+    , fiSha1Sum
+    , fiMimeType
+    , fiSourceURL
+
+    -- * AutomaticScaling
+    , AutomaticScaling
+    , automaticScaling
+    , asMaxTotalInstances
+    , asMinIdleInstances
+    , asMinPendingLatency
+    , asCPUUtilization
+    , asMaxIdleInstances
+    , asMinTotalInstances
+    , asMaxConcurrentRequests
+    , asCoolDownPeriod
+    , asMaxPendingLatency
+
+    -- * ListModulesResponse
+    , ListModulesResponse
+    , listModulesResponse
+    , lmrNextPageToken
+    , lmrModules
+
+    -- * APIEndpointHandler
+    , APIEndpointHandler
+    , apiEndpointHandler
+    , aehScriptPath
+
+    -- * StatusDetailsItem
+    , StatusDetailsItem
+    , statusDetailsItem
+    , sdiAddtional
+
+    -- * Network
+    , Network
+    , network
+    , nForwardedPorts
+    , nInstanceTag
+    , nName
+
+    -- * StaticFilesHandlerHTTPHeaders
+    , StaticFilesHandlerHTTPHeaders
+    , staticFilesHandlerHTTPHeaders
+    , sfhhttphAddtional
+
+    -- * Resources
+    , Resources
+    , resources
+    , rMemoryGb
+    , rDiskGb
+    , rCPU
+
+    -- * DeploymentFiles
+    , DeploymentFiles
+    , deploymentFiles
+    , dfAddtional
+
+    -- * CPUUtilization
+    , CPUUtilization
+    , cpuUtilization
+    , cuAggregationWindowLength
+    , cuTargetUtilization
+
+    -- * TrafficSplitAllocations
+    , TrafficSplitAllocations
+    , trafficSplitAllocations
+    , tsaAddtional
+
+    -- * ManualScaling
+    , ManualScaling
+    , manualScaling
+    , msInstances
+
+    -- * BasicScaling
+    , BasicScaling
+    , basicScaling
+    , bsMaxInstances
+    , bsIdleTimeout
+
+    -- * Version
+    , Version
+    , version
+    , vCreationTime
+    , vRuntime
+    , vDeployer
+    , vNobuildFilesRegex
+    , vInstanceClass
+    , vHealthCheck
+    , vEnv
+    , vDefaultExpiration
+    , vAutomaticScaling
+    , vErrorHandlers
+    , vVM
+    , vHandlers
+    , vInboundServices
+    , vNetwork
+    , vResources
+    , vName
+    , vThreadsafe
+    , vBetaSettings
+    , vBasicScaling
+    , vManualScaling
+    , vAPIConfig
+    , vId
+    , vEnvVariables
+    , vServingStatus
+    , vLibraries
+    , vDeployment
+
+    -- * Module
+    , Module
+    , module'
+    , mSplit
+    , mName
+    , mId
+
+    -- * StaticFilesHandler
+    , StaticFilesHandler
+    , staticFilesHandler
+    , sfhHTTPHeaders
+    , sfhPath
+    , sfhRequireMatchingFile
+    , sfhExpiration
+    , sfhMimeType
+    , sfhApplicationReadable
+    , sfhUploadPathRegex
+
+    -- * ErrorHandler
+    , ErrorHandler
+    , errorHandler
+    , ehMimeType
+    , ehErrorCode
+    , ehStaticFile
+
+    -- * OperationMetadata
+    , OperationMetadata
+    , operationMetadata
+    , omInsertTime
+    , omUser
+    , omMethod
+    , omEndTime
+    , omOperationType
+    , omTarget
+
+    -- * SourceReference
+    , SourceReference
+    , sourceReference
+    , srRepository
+    , srRevisionId
+
+    -- * OperationResponse
+    , OperationResponse
+    , operationResponse
+    , orAddtional
+
+    -- * ContainerInfo
+    , ContainerInfo
+    , containerInfo
+    , ciImage
+
+    -- * Deployment
+    , Deployment
+    , deployment
+    , dContainer
+    , dFiles
+    , dSourceReferences
+
+    -- * StaticDirectoryHandler
+    , StaticDirectoryHandler
+    , staticDirectoryHandler
+    , sdhHTTPHeaders
+    , sdhRequireMatchingFile
+    , sdhExpiration
+    , sdhMimeType
+    , sdhApplicationReadable
+    , sdhDirectory
+    ) where
+
+import           Network.Google.AppEngine.Types.Product
+import           Network.Google.AppEngine.Types.Sum
+import           Network.Google.Prelude
+
+-- | Default request referring to version 'v1beta4' of the Google App Engine Admin API. This contains the host and root path used as a starting point for constructing service requests.
+appEngineService :: Service
+appEngineService
+  = defaultService (ServiceId "appengine:v1beta4")
+      "appengine.googleapis.com"
+
+-- | View and manage your data across Google Cloud Platform services
+cloudPlatformScope :: OAuthScope
+cloudPlatformScope = "https://www.googleapis.com/auth/cloud-platform";
diff --git a/gen/Network/Google/AppEngine/Types/Product.hs b/gen/Network/Google/AppEngine/Types/Product.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/AppEngine/Types/Product.hs
@@ -0,0 +1,2804 @@
+{-# 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.AppEngine.Types.Product
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+module Network.Google.AppEngine.Types.Product where
+
+import           Network.Google.AppEngine.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][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\` which
+-- 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 purpose. - 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 will be 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][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][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])
+
+-- | Service-specific metadata associated with the operation. It typically
+-- contains progress information and common metadata such as create time.
+-- Some services might not provide such metadata. Any method that returns a
+-- long-running operation should document the metadata type, if any.
+--
+-- /See:/ 'operationSchema' smart constructor.
+newtype OperationSchema = OperationSchema
+    { _osAddtional :: HashMap Text JSONValue
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'OperationSchema' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'osAddtional'
+operationSchema
+    :: HashMap Text JSONValue -- ^ 'osAddtional'
+    -> OperationSchema
+operationSchema pOsAddtional_ =
+    OperationSchema
+    { _osAddtional = _Coerce # pOsAddtional_
+    }
+
+-- | Properties of the object. Contains field \'ype with type URL.
+osAddtional :: Lens' OperationSchema (HashMap Text JSONValue)
+osAddtional
+  = lens _osAddtional (\ s a -> s{_osAddtional = a}) .
+      _Coerce
+
+instance FromJSON OperationSchema where
+        parseJSON
+          = withObject "OperationSchema"
+              (\ o -> OperationSchema <$> (parseJSONObject o))
+
+instance ToJSON OperationSchema where
+        toJSON = toJSON . _osAddtional
+
+-- | Configuration for traffic splitting for versions within a single module.
+-- Traffic splitting allows traffic directed to the module to be assigned
+-- to one of several versions in a fractional way, enabling experiments and
+-- canarying new builds, for example.
+--
+-- /See:/ 'trafficSplit' smart constructor.
+data TrafficSplit = TrafficSplit
+    { _tsShardBy     :: !(Maybe Text)
+    , _tsAllocations :: !(Maybe TrafficSplitAllocations)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'TrafficSplit' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'tsShardBy'
+--
+-- * 'tsAllocations'
+trafficSplit
+    :: TrafficSplit
+trafficSplit =
+    TrafficSplit
+    { _tsShardBy = Nothing
+    , _tsAllocations = Nothing
+    }
+
+-- | Which mechanism should be used as a selector when choosing a version to
+-- send a request to. The traffic selection algorithm will be stable for
+-- either type until allocations are changed.
+tsShardBy :: Lens' TrafficSplit (Maybe Text)
+tsShardBy
+  = lens _tsShardBy (\ s a -> s{_tsShardBy = a})
+
+-- | Mapping from module version IDs within the module to fractional (0.000,
+-- 1] allocations of traffic for that version. Each version may only be
+-- specified once, but some versions in the module may not have any traffic
+-- allocation. Modules that have traffic allocated in this field may not be
+-- deleted until the module is deleted, or their traffic allocation is
+-- removed. Allocations must sum to 1. Supports precision up to two decimal
+-- places for IP-based splits and up to three decimal places for
+-- cookie-based splits.
+tsAllocations :: Lens' TrafficSplit (Maybe TrafficSplitAllocations)
+tsAllocations
+  = lens _tsAllocations
+      (\ s a -> s{_tsAllocations = a})
+
+instance FromJSON TrafficSplit where
+        parseJSON
+          = withObject "TrafficSplit"
+              (\ o ->
+                 TrafficSplit <$>
+                   (o .:? "shardBy") <*> (o .:? "allocations"))
+
+instance ToJSON TrafficSplit where
+        toJSON TrafficSplit{..}
+          = object
+              (catMaybes
+                 [("shardBy" .=) <$> _tsShardBy,
+                  ("allocations" .=) <$> _tsAllocations])
+
+-- | Executes a script to handle the request that matches the URL pattern.
+--
+-- /See:/ 'scriptHandler' smart constructor.
+newtype ScriptHandler = ScriptHandler
+    { _shScriptPath :: Maybe Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ScriptHandler' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'shScriptPath'
+scriptHandler
+    :: ScriptHandler
+scriptHandler =
+    ScriptHandler
+    { _shScriptPath = Nothing
+    }
+
+-- | Specifies the path to the script from the application root directory.
+shScriptPath :: Lens' ScriptHandler (Maybe Text)
+shScriptPath
+  = lens _shScriptPath (\ s a -> s{_shScriptPath = a})
+
+instance FromJSON ScriptHandler where
+        parseJSON
+          = withObject "ScriptHandler"
+              (\ o -> ScriptHandler <$> (o .:? "scriptPath"))
+
+instance ToJSON ScriptHandler where
+        toJSON ScriptHandler{..}
+          = object
+              (catMaybes [("scriptPath" .=) <$> _shScriptPath])
+
+-- | A URL pattern and description of how it should be handled. App Engine
+-- can handle URLs by executing application code, or by serving static
+-- files uploaded with the code, such as images, CSS or JavaScript.
+--
+-- /See:/ 'urlMap' smart constructor.
+data URLMap = URLMap
+    { _umScript                   :: !(Maybe ScriptHandler)
+    , _umSecurityLevel            :: !(Maybe Text)
+    , _umAPIEndpoint              :: !(Maybe APIEndpointHandler)
+    , _umURLRegex                 :: !(Maybe Text)
+    , _umRedirectHTTPResponseCode :: !(Maybe Text)
+    , _umAuthFailAction           :: !(Maybe Text)
+    , _umStaticFiles              :: !(Maybe StaticFilesHandler)
+    , _umLogin                    :: !(Maybe Text)
+    , _umStaticDirectory          :: !(Maybe StaticDirectoryHandler)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'URLMap' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'umScript'
+--
+-- * 'umSecurityLevel'
+--
+-- * 'umAPIEndpoint'
+--
+-- * 'umURLRegex'
+--
+-- * 'umRedirectHTTPResponseCode'
+--
+-- * 'umAuthFailAction'
+--
+-- * 'umStaticFiles'
+--
+-- * 'umLogin'
+--
+-- * 'umStaticDirectory'
+urlMap
+    :: URLMap
+urlMap =
+    URLMap
+    { _umScript = Nothing
+    , _umSecurityLevel = Nothing
+    , _umAPIEndpoint = Nothing
+    , _umURLRegex = Nothing
+    , _umRedirectHTTPResponseCode = Nothing
+    , _umAuthFailAction = Nothing
+    , _umStaticFiles = Nothing
+    , _umLogin = Nothing
+    , _umStaticDirectory = Nothing
+    }
+
+-- | Executes a script to handle the request that matches the URL pattern.
+umScript :: Lens' URLMap (Maybe ScriptHandler)
+umScript = lens _umScript (\ s a -> s{_umScript = a})
+
+-- | Configures whether security (HTTPS) should be enforced for this URL.
+umSecurityLevel :: Lens' URLMap (Maybe Text)
+umSecurityLevel
+  = lens _umSecurityLevel
+      (\ s a -> s{_umSecurityLevel = a})
+
+-- | Use API Endpoints to handle requests.
+umAPIEndpoint :: Lens' URLMap (Maybe APIEndpointHandler)
+umAPIEndpoint
+  = lens _umAPIEndpoint
+      (\ s a -> s{_umAPIEndpoint = a})
+
+-- | A URL prefix. This value uses regular expression syntax (and so regexp
+-- special characters must be escaped), but it should not contain
+-- groupings. All URLs that begin with this prefix are handled by this
+-- handler, using the portion of the URL after the prefix as part of the
+-- file path. This is always required.
+umURLRegex :: Lens' URLMap (Maybe Text)
+umURLRegex
+  = lens _umURLRegex (\ s a -> s{_umURLRegex = a})
+
+-- | \`30x\` code to use when performing redirects for the \`secure\` field.
+-- A \`302\` is used by default.
+umRedirectHTTPResponseCode :: Lens' URLMap (Maybe Text)
+umRedirectHTTPResponseCode
+  = lens _umRedirectHTTPResponseCode
+      (\ s a -> s{_umRedirectHTTPResponseCode = a})
+
+-- | For users not logged in, how to handle access to resources with required
+-- login. Defaults to \"redirect\".
+umAuthFailAction :: Lens' URLMap (Maybe Text)
+umAuthFailAction
+  = lens _umAuthFailAction
+      (\ s a -> s{_umAuthFailAction = a})
+
+-- | Returns the contents of a file, such as an image, as the response.
+umStaticFiles :: Lens' URLMap (Maybe StaticFilesHandler)
+umStaticFiles
+  = lens _umStaticFiles
+      (\ s a -> s{_umStaticFiles = a})
+
+-- | What level of login is required to access this resource.
+umLogin :: Lens' URLMap (Maybe Text)
+umLogin = lens _umLogin (\ s a -> s{_umLogin = a})
+
+-- | Serves the entire contents of a directory as static files. This
+-- attribute is deprecated. You can mimic the behavior of static
+-- directories using static files.
+umStaticDirectory :: Lens' URLMap (Maybe StaticDirectoryHandler)
+umStaticDirectory
+  = lens _umStaticDirectory
+      (\ s a -> s{_umStaticDirectory = a})
+
+instance FromJSON URLMap where
+        parseJSON
+          = withObject "URLMap"
+              (\ o ->
+                 URLMap <$>
+                   (o .:? "script") <*> (o .:? "securityLevel") <*>
+                     (o .:? "apiEndpoint")
+                     <*> (o .:? "urlRegex")
+                     <*> (o .:? "redirectHttpResponseCode")
+                     <*> (o .:? "authFailAction")
+                     <*> (o .:? "staticFiles")
+                     <*> (o .:? "login")
+                     <*> (o .:? "staticDirectory"))
+
+instance ToJSON URLMap where
+        toJSON URLMap{..}
+          = object
+              (catMaybes
+                 [("script" .=) <$> _umScript,
+                  ("securityLevel" .=) <$> _umSecurityLevel,
+                  ("apiEndpoint" .=) <$> _umAPIEndpoint,
+                  ("urlRegex" .=) <$> _umURLRegex,
+                  ("redirectHttpResponseCode" .=) <$>
+                    _umRedirectHTTPResponseCode,
+                  ("authFailAction" .=) <$> _umAuthFailAction,
+                  ("staticFiles" .=) <$> _umStaticFiles,
+                  ("login" .=) <$> _umLogin,
+                  ("staticDirectory" .=) <$> _umStaticDirectory])
+
+-- | A Python runtime third-party library required by the application.
+--
+-- /See:/ 'library' smart constructor.
+data Library = Library
+    { _lName    :: !(Maybe Text)
+    , _lVersion :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Library' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'lName'
+--
+-- * 'lVersion'
+library
+    :: Library
+library =
+    Library
+    { _lName = Nothing
+    , _lVersion = Nothing
+    }
+
+-- | The name of the library, e.g. \"PIL\" or \"django\".
+lName :: Lens' Library (Maybe Text)
+lName = lens _lName (\ s a -> s{_lName = a})
+
+-- | The version of the library to select, or \"latest\".
+lVersion :: Lens' Library (Maybe Text)
+lVersion = lens _lVersion (\ s a -> s{_lVersion = a})
+
+instance FromJSON Library where
+        parseJSON
+          = withObject "Library"
+              (\ o ->
+                 Library <$> (o .:? "name") <*> (o .:? "version"))
+
+instance ToJSON Library where
+        toJSON Library{..}
+          = object
+              (catMaybes
+                 [("name" .=) <$> _lName,
+                  ("version" .=) <$> _lVersion])
+
+-- | The response message for
+-- [Operations.ListOperations][google.longrunning.Operations.ListOperations].
+--
+-- /See:/ 'listOperationsResponse' smart constructor.
+data ListOperationsResponse = ListOperationsResponse
+    { _lorNextPageToken :: !(Maybe Text)
+    , _lorOperations    :: !(Maybe [Operation])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ListOperationsResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'lorNextPageToken'
+--
+-- * 'lorOperations'
+listOperationsResponse
+    :: ListOperationsResponse
+listOperationsResponse =
+    ListOperationsResponse
+    { _lorNextPageToken = Nothing
+    , _lorOperations = Nothing
+    }
+
+-- | The standard List next-page token.
+lorNextPageToken :: Lens' ListOperationsResponse (Maybe Text)
+lorNextPageToken
+  = lens _lorNextPageToken
+      (\ s a -> s{_lorNextPageToken = a})
+
+-- | A list of operations that matches the specified filter in the request.
+lorOperations :: Lens' ListOperationsResponse [Operation]
+lorOperations
+  = lens _lorOperations
+      (\ s a -> s{_lorOperations = a})
+      . _Default
+      . _Coerce
+
+instance FromJSON ListOperationsResponse where
+        parseJSON
+          = withObject "ListOperationsResponse"
+              (\ o ->
+                 ListOperationsResponse <$>
+                   (o .:? "nextPageToken") <*>
+                     (o .:? "operations" .!= mempty))
+
+instance ToJSON ListOperationsResponse where
+        toJSON ListOperationsResponse{..}
+          = object
+              (catMaybes
+                 [("nextPageToken" .=) <$> _lorNextPageToken,
+                  ("operations" .=) <$> _lorOperations])
+
+-- | Configure health checking for the VM instances. Unhealthy VM instances
+-- will be killed and replaced with new instances.
+--
+-- /See:/ 'healthCheck' smart constructor.
+data HealthCheck = HealthCheck
+    { _hcHealthyThreshold   :: !(Maybe (Textual Word32))
+    , _hcDisableHealthCheck :: !(Maybe Bool)
+    , _hcCheckInterval      :: !(Maybe Text)
+    , _hcRestartThreshold   :: !(Maybe (Textual Word32))
+    , _hcHost               :: !(Maybe Text)
+    , _hcTimeout            :: !(Maybe Text)
+    , _hcUnhealthyThreshold :: !(Maybe (Textual Word32))
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'HealthCheck' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'hcHealthyThreshold'
+--
+-- * 'hcDisableHealthCheck'
+--
+-- * 'hcCheckInterval'
+--
+-- * 'hcRestartThreshold'
+--
+-- * 'hcHost'
+--
+-- * 'hcTimeout'
+--
+-- * 'hcUnhealthyThreshold'
+healthCheck
+    :: HealthCheck
+healthCheck =
+    HealthCheck
+    { _hcHealthyThreshold = Nothing
+    , _hcDisableHealthCheck = Nothing
+    , _hcCheckInterval = Nothing
+    , _hcRestartThreshold = Nothing
+    , _hcHost = Nothing
+    , _hcTimeout = Nothing
+    , _hcUnhealthyThreshold = Nothing
+    }
+
+-- | The number of consecutive successful health checks before receiving
+-- traffic.
+hcHealthyThreshold :: Lens' HealthCheck (Maybe Word32)
+hcHealthyThreshold
+  = lens _hcHealthyThreshold
+      (\ s a -> s{_hcHealthyThreshold = a})
+      . mapping _Coerce
+
+-- | Whether to explicitly disable health checks for this instance.
+hcDisableHealthCheck :: Lens' HealthCheck (Maybe Bool)
+hcDisableHealthCheck
+  = lens _hcDisableHealthCheck
+      (\ s a -> s{_hcDisableHealthCheck = a})
+
+-- | The interval between health checks.
+hcCheckInterval :: Lens' HealthCheck (Maybe Text)
+hcCheckInterval
+  = lens _hcCheckInterval
+      (\ s a -> s{_hcCheckInterval = a})
+
+-- | The number of consecutive failed health checks before an instance is
+-- restarted.
+hcRestartThreshold :: Lens' HealthCheck (Maybe Word32)
+hcRestartThreshold
+  = lens _hcRestartThreshold
+      (\ s a -> s{_hcRestartThreshold = a})
+      . mapping _Coerce
+
+-- | The host header to send when performing an HTTP health check (e.g.
+-- myapp.appspot.com)
+hcHost :: Lens' HealthCheck (Maybe Text)
+hcHost = lens _hcHost (\ s a -> s{_hcHost = a})
+
+-- | The amount of time before the health check is considered failed.
+hcTimeout :: Lens' HealthCheck (Maybe Text)
+hcTimeout
+  = lens _hcTimeout (\ s a -> s{_hcTimeout = a})
+
+-- | The number of consecutive failed health checks before removing traffic.
+hcUnhealthyThreshold :: Lens' HealthCheck (Maybe Word32)
+hcUnhealthyThreshold
+  = lens _hcUnhealthyThreshold
+      (\ s a -> s{_hcUnhealthyThreshold = a})
+      . mapping _Coerce
+
+instance FromJSON HealthCheck where
+        parseJSON
+          = withObject "HealthCheck"
+              (\ o ->
+                 HealthCheck <$>
+                   (o .:? "healthyThreshold") <*>
+                     (o .:? "disableHealthCheck")
+                     <*> (o .:? "checkInterval")
+                     <*> (o .:? "restartThreshold")
+                     <*> (o .:? "host")
+                     <*> (o .:? "timeout")
+                     <*> (o .:? "unhealthyThreshold"))
+
+instance ToJSON HealthCheck where
+        toJSON HealthCheck{..}
+          = object
+              (catMaybes
+                 [("healthyThreshold" .=) <$> _hcHealthyThreshold,
+                  ("disableHealthCheck" .=) <$> _hcDisableHealthCheck,
+                  ("checkInterval" .=) <$> _hcCheckInterval,
+                  ("restartThreshold" .=) <$> _hcRestartThreshold,
+                  ("host" .=) <$> _hcHost,
+                  ("timeout" .=) <$> _hcTimeout,
+                  ("unhealthyThreshold" .=) <$> _hcUnhealthyThreshold])
+
+-- | API Serving configuration for Cloud Endpoints.
+--
+-- /See:/ 'apiConfigHandler' smart constructor.
+data APIConfigHandler = APIConfigHandler
+    { _achScript         :: !(Maybe Text)
+    , _achSecurityLevel  :: !(Maybe Text)
+    , _achURL            :: !(Maybe Text)
+    , _achAuthFailAction :: !(Maybe Text)
+    , _achLogin          :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'APIConfigHandler' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'achScript'
+--
+-- * 'achSecurityLevel'
+--
+-- * 'achURL'
+--
+-- * 'achAuthFailAction'
+--
+-- * 'achLogin'
+apiConfigHandler
+    :: APIConfigHandler
+apiConfigHandler =
+    APIConfigHandler
+    { _achScript = Nothing
+    , _achSecurityLevel = Nothing
+    , _achURL = Nothing
+    , _achAuthFailAction = Nothing
+    , _achLogin = Nothing
+    }
+
+-- | Specifies the path to the script from the application root directory.
+achScript :: Lens' APIConfigHandler (Maybe Text)
+achScript
+  = lens _achScript (\ s a -> s{_achScript = a})
+
+-- | Configures whether security (HTTPS) should be enforced for this URL.
+achSecurityLevel :: Lens' APIConfigHandler (Maybe Text)
+achSecurityLevel
+  = lens _achSecurityLevel
+      (\ s a -> s{_achSecurityLevel = a})
+
+-- | URL to serve the endpoint at.
+achURL :: Lens' APIConfigHandler (Maybe Text)
+achURL = lens _achURL (\ s a -> s{_achURL = a})
+
+-- | For users not logged in, how to handle access to resources with required
+-- login. Defaults to \"redirect\".
+achAuthFailAction :: Lens' APIConfigHandler (Maybe Text)
+achAuthFailAction
+  = lens _achAuthFailAction
+      (\ s a -> s{_achAuthFailAction = a})
+
+-- | What level of login is required to access this resource. Default is
+-- \"optional\".
+achLogin :: Lens' APIConfigHandler (Maybe Text)
+achLogin = lens _achLogin (\ s a -> s{_achLogin = a})
+
+instance FromJSON APIConfigHandler where
+        parseJSON
+          = withObject "APIConfigHandler"
+              (\ o ->
+                 APIConfigHandler <$>
+                   (o .:? "script") <*> (o .:? "securityLevel") <*>
+                     (o .:? "url")
+                     <*> (o .:? "authFailAction")
+                     <*> (o .:? "login"))
+
+instance ToJSON APIConfigHandler where
+        toJSON APIConfigHandler{..}
+          = object
+              (catMaybes
+                 [("script" .=) <$> _achScript,
+                  ("securityLevel" .=) <$> _achSecurityLevel,
+                  ("url" .=) <$> _achURL,
+                  ("authFailAction" .=) <$> _achAuthFailAction,
+                  ("login" .=) <$> _achLogin])
+
+-- | Environment variables made available to the application. Only returned
+-- in \`GET\` requests if \`view=FULL\` is set. May only be set on create
+-- requests; once created, is immutable.
+--
+-- /See:/ 'versionEnvVariables' smart constructor.
+newtype VersionEnvVariables = VersionEnvVariables
+    { _vevAddtional :: HashMap Text Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'VersionEnvVariables' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'vevAddtional'
+versionEnvVariables
+    :: HashMap Text Text -- ^ 'vevAddtional'
+    -> VersionEnvVariables
+versionEnvVariables pVevAddtional_ =
+    VersionEnvVariables
+    { _vevAddtional = _Coerce # pVevAddtional_
+    }
+
+vevAddtional :: Lens' VersionEnvVariables (HashMap Text Text)
+vevAddtional
+  = lens _vevAddtional (\ s a -> s{_vevAddtional = a})
+      . _Coerce
+
+instance FromJSON VersionEnvVariables where
+        parseJSON
+          = withObject "VersionEnvVariables"
+              (\ o -> VersionEnvVariables <$> (parseJSONObject o))
+
+instance ToJSON VersionEnvVariables where
+        toJSON = toJSON . _vevAddtional
+
+-- | An Application contains the top-level configuration of an App Engine
+-- application.
+--
+-- /See:/ 'application' smart constructor.
+data Application = Application
+    { _aLocation      :: !(Maybe Text)
+    , _aCodeBucket    :: !(Maybe Text)
+    , _aName          :: !(Maybe Text)
+    , _aDispatchRules :: !(Maybe [URLDispatchRule])
+    , _aId            :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Application' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'aLocation'
+--
+-- * 'aCodeBucket'
+--
+-- * 'aName'
+--
+-- * 'aDispatchRules'
+--
+-- * 'aId'
+application
+    :: Application
+application =
+    Application
+    { _aLocation = Nothing
+    , _aCodeBucket = Nothing
+    , _aName = Nothing
+    , _aDispatchRules = Nothing
+    , _aId = Nothing
+    }
+
+-- | The location from which the application will be run. Choices are
+-- \"us-central\" for United States and \"europe-west\" for European Union.
+-- Application instances will run out of data centers in the chosen
+-- location and all of the application\'s End User Content will be stored
+-- at rest in the chosen location. The default is \"us-central\".
+aLocation :: Lens' Application (Maybe Text)
+aLocation
+  = lens _aLocation (\ s a -> s{_aLocation = a})
+
+-- | A Google Cloud Storage bucket which can be used for storing files
+-- associated with an application. This bucket is associated with the
+-- application and can be used by the gcloud deployment commands.
+-- \'OutputOnly
+aCodeBucket :: Lens' Application (Maybe Text)
+aCodeBucket
+  = lens _aCodeBucket (\ s a -> s{_aCodeBucket = a})
+
+-- | The full path to the application in the API. Example: \"apps\/myapp\".
+-- \'OutputOnly
+aName :: Lens' Application (Maybe Text)
+aName = lens _aName (\ s a -> s{_aName = a})
+
+-- | HTTP path dispatch rules for requests to the app that do not explicitly
+-- target a module or version. The rules are order-dependent.
+aDispatchRules :: Lens' Application [URLDispatchRule]
+aDispatchRules
+  = lens _aDispatchRules
+      (\ s a -> s{_aDispatchRules = a})
+      . _Default
+      . _Coerce
+
+-- | The relative name\/path of the application. Example: \"myapp\".
+-- \'OutputOnly
+aId :: Lens' Application (Maybe Text)
+aId = lens _aId (\ s a -> s{_aId = a})
+
+instance FromJSON Application where
+        parseJSON
+          = withObject "Application"
+              (\ o ->
+                 Application <$>
+                   (o .:? "location") <*> (o .:? "codeBucket") <*>
+                     (o .:? "name")
+                     <*> (o .:? "dispatchRules" .!= mempty)
+                     <*> (o .:? "id"))
+
+instance ToJSON Application where
+        toJSON Application{..}
+          = object
+              (catMaybes
+                 [("location" .=) <$> _aLocation,
+                  ("codeBucket" .=) <$> _aCodeBucket,
+                  ("name" .=) <$> _aName,
+                  ("dispatchRules" .=) <$> _aDispatchRules,
+                  ("id" .=) <$> _aId])
+
+-- | Beta settings supplied to the application via metadata.
+--
+-- /See:/ 'versionBetaSettings' smart constructor.
+newtype VersionBetaSettings = VersionBetaSettings
+    { _vbsAddtional :: HashMap Text Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'VersionBetaSettings' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'vbsAddtional'
+versionBetaSettings
+    :: HashMap Text Text -- ^ 'vbsAddtional'
+    -> VersionBetaSettings
+versionBetaSettings pVbsAddtional_ =
+    VersionBetaSettings
+    { _vbsAddtional = _Coerce # pVbsAddtional_
+    }
+
+vbsAddtional :: Lens' VersionBetaSettings (HashMap Text Text)
+vbsAddtional
+  = lens _vbsAddtional (\ s a -> s{_vbsAddtional = a})
+      . _Coerce
+
+instance FromJSON VersionBetaSettings where
+        parseJSON
+          = withObject "VersionBetaSettings"
+              (\ o -> VersionBetaSettings <$> (parseJSONObject o))
+
+instance ToJSON VersionBetaSettings where
+        toJSON = toJSON . _vbsAddtional
+
+-- | This resource represents a long-running operation that is the result of
+-- a network API call.
+--
+-- /See:/ 'operation' smart constructor.
+data Operation = Operation
+    { _oDone     :: !(Maybe Bool)
+    , _oError    :: !(Maybe Status)
+    , _oResponse :: !(Maybe OperationResponse)
+    , _oName     :: !(Maybe Text)
+    , _oMetadata :: !(Maybe OperationSchema)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Operation' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'oDone'
+--
+-- * 'oError'
+--
+-- * 'oResponse'
+--
+-- * 'oName'
+--
+-- * 'oMetadata'
+operation
+    :: Operation
+operation =
+    Operation
+    { _oDone = Nothing
+    , _oError = Nothing
+    , _oResponse = Nothing
+    , _oName = Nothing
+    , _oMetadata = Nothing
+    }
+
+-- | If the value is \`false\`, it means the operation is still in progress.
+-- If true, the operation is completed, and either \`error\` or
+-- \`response\` is available.
+oDone :: Lens' Operation (Maybe Bool)
+oDone = lens _oDone (\ s a -> s{_oDone = a})
+
+-- | The error result of the operation in case of failure.
+oError :: Lens' Operation (Maybe Status)
+oError = lens _oError (\ s a -> s{_oError = a})
+
+-- | The normal response of the operation in case of success. If the original
+-- method returns no data on success, such as \`Delete\`, the response is
+-- \`google.protobuf.Empty\`. If the original method is standard
+-- \`Get\`\/\`Create\`\/\`Update\`, the response should be the resource.
+-- For other methods, the response should have the type \`XxxResponse\`,
+-- where \`Xxx\` is the original method name. For example, if the original
+-- method name is \`TakeSnapshot()\`, the inferred response type is
+-- \`TakeSnapshotResponse\`.
+oResponse :: Lens' Operation (Maybe OperationResponse)
+oResponse
+  = lens _oResponse (\ s a -> s{_oResponse = a})
+
+-- | The server-assigned name, which is only unique within the same service
+-- that originally returns it. If you use the default HTTP mapping above,
+-- the \`name\` should have the format of
+-- \`operations\/some\/unique\/name\`.
+oName :: Lens' Operation (Maybe Text)
+oName = lens _oName (\ s a -> s{_oName = a})
+
+-- | Service-specific metadata associated with the operation. It typically
+-- contains progress information and common metadata such as create time.
+-- Some services might not provide such metadata. Any method that returns a
+-- long-running operation should document the metadata type, if any.
+oMetadata :: Lens' Operation (Maybe OperationSchema)
+oMetadata
+  = lens _oMetadata (\ s a -> s{_oMetadata = a})
+
+instance FromJSON Operation where
+        parseJSON
+          = withObject "Operation"
+              (\ o ->
+                 Operation <$>
+                   (o .:? "done") <*> (o .:? "error") <*>
+                     (o .:? "response")
+                     <*> (o .:? "name")
+                     <*> (o .:? "metadata"))
+
+instance ToJSON Operation where
+        toJSON Operation{..}
+          = object
+              (catMaybes
+                 [("done" .=) <$> _oDone, ("error" .=) <$> _oError,
+                  ("response" .=) <$> _oResponse,
+                  ("name" .=) <$> _oName,
+                  ("metadata" .=) <$> _oMetadata])
+
+-- | Rules to match an HTTP request and dispatch that request to a module.
+--
+-- /See:/ 'urlDispatchRule' smart constructor.
+data URLDispatchRule = URLDispatchRule
+    { _udrPath   :: !(Maybe Text)
+    , _udrDomain :: !(Maybe Text)
+    , _udrModule :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'URLDispatchRule' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'udrPath'
+--
+-- * 'udrDomain'
+--
+-- * 'udrModule'
+urlDispatchRule
+    :: URLDispatchRule
+urlDispatchRule =
+    URLDispatchRule
+    { _udrPath = Nothing
+    , _udrDomain = Nothing
+    , _udrModule = Nothing
+    }
+
+-- | The pathname within the host. This must start with a \'\/\'. A single
+-- \'*\' (glob) can be included at the end of the path. The sum of the
+-- lengths of the domain and path may not exceed 100 characters.
+udrPath :: Lens' URLDispatchRule (Maybe Text)
+udrPath = lens _udrPath (\ s a -> s{_udrPath = a})
+
+-- | The domain name to match on. Supports \'*\' (glob) wildcarding on the
+-- left-hand side of a \'.\'. If empty, all domains will be matched (the
+-- same as \'*\').
+udrDomain :: Lens' URLDispatchRule (Maybe Text)
+udrDomain
+  = lens _udrDomain (\ s a -> s{_udrDomain = a})
+
+-- | The resource id of a Module in this application that should service the
+-- matched request. The Module must already exist. Example: \"default\".
+udrModule :: Lens' URLDispatchRule (Maybe Text)
+udrModule
+  = lens _udrModule (\ s a -> s{_udrModule = a})
+
+instance FromJSON URLDispatchRule where
+        parseJSON
+          = withObject "URLDispatchRule"
+              (\ o ->
+                 URLDispatchRule <$>
+                   (o .:? "path") <*> (o .:? "domain") <*>
+                     (o .:? "module"))
+
+instance ToJSON URLDispatchRule where
+        toJSON URLDispatchRule{..}
+          = object
+              (catMaybes
+                 [("path" .=) <$> _udrPath,
+                  ("domain" .=) <$> _udrDomain,
+                  ("module" .=) <$> _udrModule])
+
+-- | HTTP headers to use for all responses from these URLs.
+--
+-- /See:/ 'staticDirectoryHandlerHTTPHeaders' smart constructor.
+newtype StaticDirectoryHandlerHTTPHeaders = StaticDirectoryHandlerHTTPHeaders
+    { _sdhhttphAddtional :: HashMap Text Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'StaticDirectoryHandlerHTTPHeaders' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'sdhhttphAddtional'
+staticDirectoryHandlerHTTPHeaders
+    :: HashMap Text Text -- ^ 'sdhhttphAddtional'
+    -> StaticDirectoryHandlerHTTPHeaders
+staticDirectoryHandlerHTTPHeaders pSdhhttphAddtional_ =
+    StaticDirectoryHandlerHTTPHeaders
+    { _sdhhttphAddtional = _Coerce # pSdhhttphAddtional_
+    }
+
+sdhhttphAddtional :: Lens' StaticDirectoryHandlerHTTPHeaders (HashMap Text Text)
+sdhhttphAddtional
+  = lens _sdhhttphAddtional
+      (\ s a -> s{_sdhhttphAddtional = a})
+      . _Coerce
+
+instance FromJSON StaticDirectoryHandlerHTTPHeaders
+         where
+        parseJSON
+          = withObject "StaticDirectoryHandlerHTTPHeaders"
+              (\ o ->
+                 StaticDirectoryHandlerHTTPHeaders <$>
+                   (parseJSONObject o))
+
+instance ToJSON StaticDirectoryHandlerHTTPHeaders
+         where
+        toJSON = toJSON . _sdhhttphAddtional
+
+-- | Response message for \`Versions.ListVersions\`.
+--
+-- /See:/ 'listVersionsResponse' smart constructor.
+data ListVersionsResponse = ListVersionsResponse
+    { _lvrNextPageToken :: !(Maybe Text)
+    , _lvrVersions      :: !(Maybe [Version])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ListVersionsResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'lvrNextPageToken'
+--
+-- * 'lvrVersions'
+listVersionsResponse
+    :: ListVersionsResponse
+listVersionsResponse =
+    ListVersionsResponse
+    { _lvrNextPageToken = Nothing
+    , _lvrVersions = Nothing
+    }
+
+-- | Continuation token for fetching the next page of results.
+lvrNextPageToken :: Lens' ListVersionsResponse (Maybe Text)
+lvrNextPageToken
+  = lens _lvrNextPageToken
+      (\ s a -> s{_lvrNextPageToken = a})
+
+-- | The versions belonging to the requested application module.
+lvrVersions :: Lens' ListVersionsResponse [Version]
+lvrVersions
+  = lens _lvrVersions (\ s a -> s{_lvrVersions = a}) .
+      _Default
+      . _Coerce
+
+instance FromJSON ListVersionsResponse where
+        parseJSON
+          = withObject "ListVersionsResponse"
+              (\ o ->
+                 ListVersionsResponse <$>
+                   (o .:? "nextPageToken") <*>
+                     (o .:? "versions" .!= mempty))
+
+instance ToJSON ListVersionsResponse where
+        toJSON ListVersionsResponse{..}
+          = object
+              (catMaybes
+                 [("nextPageToken" .=) <$> _lvrNextPageToken,
+                  ("versions" .=) <$> _lvrVersions])
+
+-- | A single source file which is part of the application to be deployed.
+--
+-- /See:/ 'fileInfo' smart constructor.
+data FileInfo = FileInfo
+    { _fiSha1Sum   :: !(Maybe Text)
+    , _fiMimeType  :: !(Maybe Text)
+    , _fiSourceURL :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'FileInfo' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'fiSha1Sum'
+--
+-- * 'fiMimeType'
+--
+-- * 'fiSourceURL'
+fileInfo
+    :: FileInfo
+fileInfo =
+    FileInfo
+    { _fiSha1Sum = Nothing
+    , _fiMimeType = Nothing
+    , _fiSourceURL = Nothing
+    }
+
+-- | The SHA1 (160 bits) hash of the file in hex.
+fiSha1Sum :: Lens' FileInfo (Maybe Text)
+fiSha1Sum
+  = lens _fiSha1Sum (\ s a -> s{_fiSha1Sum = a})
+
+-- | The MIME type of the file; if unspecified, the value from Google Cloud
+-- Storage will be used.
+fiMimeType :: Lens' FileInfo (Maybe Text)
+fiMimeType
+  = lens _fiMimeType (\ s a -> s{_fiMimeType = a})
+
+-- | The URL source to use to fetch this file. Must be a URL to a resource in
+-- Google Cloud Storage.
+fiSourceURL :: Lens' FileInfo (Maybe Text)
+fiSourceURL
+  = lens _fiSourceURL (\ s a -> s{_fiSourceURL = a})
+
+instance FromJSON FileInfo where
+        parseJSON
+          = withObject "FileInfo"
+              (\ o ->
+                 FileInfo <$>
+                   (o .:? "sha1Sum") <*> (o .:? "mimeType") <*>
+                     (o .:? "sourceUrl"))
+
+instance ToJSON FileInfo where
+        toJSON FileInfo{..}
+          = object
+              (catMaybes
+                 [("sha1Sum" .=) <$> _fiSha1Sum,
+                  ("mimeType" .=) <$> _fiMimeType,
+                  ("sourceUrl" .=) <$> _fiSourceURL])
+
+-- | Automatic scaling is the scaling policy that App Engine has used since
+-- its inception. It is based on request rate, response latencies, and
+-- other application metrics.
+--
+-- /See:/ 'automaticScaling' smart constructor.
+data AutomaticScaling = AutomaticScaling
+    { _asMaxTotalInstances     :: !(Maybe (Textual Int32))
+    , _asMinIdleInstances      :: !(Maybe (Textual Int32))
+    , _asMinPendingLatency     :: !(Maybe Text)
+    , _asCPUUtilization        :: !(Maybe CPUUtilization)
+    , _asMaxIdleInstances      :: !(Maybe (Textual Int32))
+    , _asMinTotalInstances     :: !(Maybe (Textual Int32))
+    , _asMaxConcurrentRequests :: !(Maybe (Textual Int32))
+    , _asCoolDownPeriod        :: !(Maybe Text)
+    , _asMaxPendingLatency     :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'AutomaticScaling' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'asMaxTotalInstances'
+--
+-- * 'asMinIdleInstances'
+--
+-- * 'asMinPendingLatency'
+--
+-- * 'asCPUUtilization'
+--
+-- * 'asMaxIdleInstances'
+--
+-- * 'asMinTotalInstances'
+--
+-- * 'asMaxConcurrentRequests'
+--
+-- * 'asCoolDownPeriod'
+--
+-- * 'asMaxPendingLatency'
+automaticScaling
+    :: AutomaticScaling
+automaticScaling =
+    AutomaticScaling
+    { _asMaxTotalInstances = Nothing
+    , _asMinIdleInstances = Nothing
+    , _asMinPendingLatency = Nothing
+    , _asCPUUtilization = Nothing
+    , _asMaxIdleInstances = Nothing
+    , _asMinTotalInstances = Nothing
+    , _asMaxConcurrentRequests = Nothing
+    , _asCoolDownPeriod = Nothing
+    , _asMaxPendingLatency = Nothing
+    }
+
+-- | Max number of instances that App Engine should start to handle requests.
+asMaxTotalInstances :: Lens' AutomaticScaling (Maybe Int32)
+asMaxTotalInstances
+  = lens _asMaxTotalInstances
+      (\ s a -> s{_asMaxTotalInstances = a})
+      . mapping _Coerce
+
+-- | The minimum number of idle instances that App Engine should maintain for
+-- this version. Only applies to the default version of a module, since
+-- other versions are not expected to receive significant traffic.
+asMinIdleInstances :: Lens' AutomaticScaling (Maybe Int32)
+asMinIdleInstances
+  = lens _asMinIdleInstances
+      (\ s a -> s{_asMinIdleInstances = a})
+      . mapping _Coerce
+
+-- | The minimum amount of time that App Engine should allow a request to
+-- wait in the pending queue before starting a new instance to handle it.
+asMinPendingLatency :: Lens' AutomaticScaling (Maybe Text)
+asMinPendingLatency
+  = lens _asMinPendingLatency
+      (\ s a -> s{_asMinPendingLatency = a})
+
+-- | Target scaling by CPU usage.
+asCPUUtilization :: Lens' AutomaticScaling (Maybe CPUUtilization)
+asCPUUtilization
+  = lens _asCPUUtilization
+      (\ s a -> s{_asCPUUtilization = a})
+
+-- | The maximum number of idle instances that App Engine should maintain for
+-- this version.
+asMaxIdleInstances :: Lens' AutomaticScaling (Maybe Int32)
+asMaxIdleInstances
+  = lens _asMaxIdleInstances
+      (\ s a -> s{_asMaxIdleInstances = a})
+      . mapping _Coerce
+
+-- | Minimum number of instances that App Engine should maintain.
+asMinTotalInstances :: Lens' AutomaticScaling (Maybe Int32)
+asMinTotalInstances
+  = lens _asMinTotalInstances
+      (\ s a -> s{_asMinTotalInstances = a})
+      . mapping _Coerce
+
+-- | The number of concurrent requests an automatic scaling instance can
+-- accept before the scheduler spawns a new instance. Default value is
+-- chosen based on the runtime.
+asMaxConcurrentRequests :: Lens' AutomaticScaling (Maybe Int32)
+asMaxConcurrentRequests
+  = lens _asMaxConcurrentRequests
+      (\ s a -> s{_asMaxConcurrentRequests = a})
+      . mapping _Coerce
+
+-- | The amount of time that the
+-- [Autoscaler](https:\/\/cloud.google.com\/compute\/docs\/autoscaler\/)
+-- should wait between changes to the number of virtual machines. Applies
+-- only to the VM runtime.
+asCoolDownPeriod :: Lens' AutomaticScaling (Maybe Text)
+asCoolDownPeriod
+  = lens _asCoolDownPeriod
+      (\ s a -> s{_asCoolDownPeriod = a})
+
+-- | The maximum amount of time that App Engine should allow a request to
+-- wait in the pending queue before starting a new instance to handle it.
+asMaxPendingLatency :: Lens' AutomaticScaling (Maybe Text)
+asMaxPendingLatency
+  = lens _asMaxPendingLatency
+      (\ s a -> s{_asMaxPendingLatency = a})
+
+instance FromJSON AutomaticScaling where
+        parseJSON
+          = withObject "AutomaticScaling"
+              (\ o ->
+                 AutomaticScaling <$>
+                   (o .:? "maxTotalInstances") <*>
+                     (o .:? "minIdleInstances")
+                     <*> (o .:? "minPendingLatency")
+                     <*> (o .:? "cpuUtilization")
+                     <*> (o .:? "maxIdleInstances")
+                     <*> (o .:? "minTotalInstances")
+                     <*> (o .:? "maxConcurrentRequests")
+                     <*> (o .:? "coolDownPeriod")
+                     <*> (o .:? "maxPendingLatency"))
+
+instance ToJSON AutomaticScaling where
+        toJSON AutomaticScaling{..}
+          = object
+              (catMaybes
+                 [("maxTotalInstances" .=) <$> _asMaxTotalInstances,
+                  ("minIdleInstances" .=) <$> _asMinIdleInstances,
+                  ("minPendingLatency" .=) <$> _asMinPendingLatency,
+                  ("cpuUtilization" .=) <$> _asCPUUtilization,
+                  ("maxIdleInstances" .=) <$> _asMaxIdleInstances,
+                  ("minTotalInstances" .=) <$> _asMinTotalInstances,
+                  ("maxConcurrentRequests" .=) <$>
+                    _asMaxConcurrentRequests,
+                  ("coolDownPeriod" .=) <$> _asCoolDownPeriod,
+                  ("maxPendingLatency" .=) <$> _asMaxPendingLatency])
+
+-- | Response message for \`Modules.ListModules\`.
+--
+-- /See:/ 'listModulesResponse' smart constructor.
+data ListModulesResponse = ListModulesResponse
+    { _lmrNextPageToken :: !(Maybe Text)
+    , _lmrModules       :: !(Maybe [Module])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ListModulesResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'lmrNextPageToken'
+--
+-- * 'lmrModules'
+listModulesResponse
+    :: ListModulesResponse
+listModulesResponse =
+    ListModulesResponse
+    { _lmrNextPageToken = Nothing
+    , _lmrModules = Nothing
+    }
+
+-- | Continuation token for fetching the next page of results.
+lmrNextPageToken :: Lens' ListModulesResponse (Maybe Text)
+lmrNextPageToken
+  = lens _lmrNextPageToken
+      (\ s a -> s{_lmrNextPageToken = a})
+
+-- | The modules belonging to the requested application.
+lmrModules :: Lens' ListModulesResponse [Module]
+lmrModules
+  = lens _lmrModules (\ s a -> s{_lmrModules = a}) .
+      _Default
+      . _Coerce
+
+instance FromJSON ListModulesResponse where
+        parseJSON
+          = withObject "ListModulesResponse"
+              (\ o ->
+                 ListModulesResponse <$>
+                   (o .:? "nextPageToken") <*>
+                     (o .:? "modules" .!= mempty))
+
+instance ToJSON ListModulesResponse where
+        toJSON ListModulesResponse{..}
+          = object
+              (catMaybes
+                 [("nextPageToken" .=) <$> _lmrNextPageToken,
+                  ("modules" .=) <$> _lmrModules])
+
+-- | Use Google Cloud Endpoints to handle requests.
+--
+-- /See:/ 'apiEndpointHandler' smart constructor.
+newtype APIEndpointHandler = APIEndpointHandler
+    { _aehScriptPath :: Maybe Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'APIEndpointHandler' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'aehScriptPath'
+apiEndpointHandler
+    :: APIEndpointHandler
+apiEndpointHandler =
+    APIEndpointHandler
+    { _aehScriptPath = Nothing
+    }
+
+-- | Specifies the path to the script from the application root directory.
+aehScriptPath :: Lens' APIEndpointHandler (Maybe Text)
+aehScriptPath
+  = lens _aehScriptPath
+      (\ s a -> s{_aehScriptPath = a})
+
+instance FromJSON APIEndpointHandler where
+        parseJSON
+          = withObject "APIEndpointHandler"
+              (\ o -> APIEndpointHandler <$> (o .:? "scriptPath"))
+
+instance ToJSON APIEndpointHandler where
+        toJSON APIEndpointHandler{..}
+          = object
+              (catMaybes [("scriptPath" .=) <$> _aehScriptPath])
+
+--
+-- /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 \'ype 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
+
+-- | Used to specify extra network settings (for VM runtimes only).
+--
+-- /See:/ 'network' smart constructor.
+data Network = Network
+    { _nForwardedPorts :: !(Maybe [Text])
+    , _nInstanceTag    :: !(Maybe Text)
+    , _nName           :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Network' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'nForwardedPorts'
+--
+-- * 'nInstanceTag'
+--
+-- * 'nName'
+network
+    :: Network
+network =
+    Network
+    { _nForwardedPorts = Nothing
+    , _nInstanceTag = Nothing
+    , _nName = Nothing
+    }
+
+-- | A list of ports (or port pairs) to forward from the VM into the app
+-- container.
+nForwardedPorts :: Lens' Network [Text]
+nForwardedPorts
+  = lens _nForwardedPorts
+      (\ s a -> s{_nForwardedPorts = a})
+      . _Default
+      . _Coerce
+
+-- | A tag to apply to the VM instance during creation.
+nInstanceTag :: Lens' Network (Maybe Text)
+nInstanceTag
+  = lens _nInstanceTag (\ s a -> s{_nInstanceTag = a})
+
+-- | The Google Compute Engine network where the VMs will be created. If not
+-- specified, or empty, the network named \"default\" will be used. (The
+-- short name should be specified, not the resource path.)
+nName :: Lens' Network (Maybe Text)
+nName = lens _nName (\ s a -> s{_nName = a})
+
+instance FromJSON Network where
+        parseJSON
+          = withObject "Network"
+              (\ o ->
+                 Network <$>
+                   (o .:? "forwardedPorts" .!= mempty) <*>
+                     (o .:? "instanceTag")
+                     <*> (o .:? "name"))
+
+instance ToJSON Network where
+        toJSON Network{..}
+          = object
+              (catMaybes
+                 [("forwardedPorts" .=) <$> _nForwardedPorts,
+                  ("instanceTag" .=) <$> _nInstanceTag,
+                  ("name" .=) <$> _nName])
+
+-- | HTTP headers to use for all responses from these URLs.
+--
+-- /See:/ 'staticFilesHandlerHTTPHeaders' smart constructor.
+newtype StaticFilesHandlerHTTPHeaders = StaticFilesHandlerHTTPHeaders
+    { _sfhhttphAddtional :: HashMap Text Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'StaticFilesHandlerHTTPHeaders' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'sfhhttphAddtional'
+staticFilesHandlerHTTPHeaders
+    :: HashMap Text Text -- ^ 'sfhhttphAddtional'
+    -> StaticFilesHandlerHTTPHeaders
+staticFilesHandlerHTTPHeaders pSfhhttphAddtional_ =
+    StaticFilesHandlerHTTPHeaders
+    { _sfhhttphAddtional = _Coerce # pSfhhttphAddtional_
+    }
+
+sfhhttphAddtional :: Lens' StaticFilesHandlerHTTPHeaders (HashMap Text Text)
+sfhhttphAddtional
+  = lens _sfhhttphAddtional
+      (\ s a -> s{_sfhhttphAddtional = a})
+      . _Coerce
+
+instance FromJSON StaticFilesHandlerHTTPHeaders where
+        parseJSON
+          = withObject "StaticFilesHandlerHTTPHeaders"
+              (\ o ->
+                 StaticFilesHandlerHTTPHeaders <$>
+                   (parseJSONObject o))
+
+instance ToJSON StaticFilesHandlerHTTPHeaders where
+        toJSON = toJSON . _sfhhttphAddtional
+
+-- | Used to specify how many machine resources an app version needs.
+--
+-- /See:/ 'resources' smart constructor.
+data Resources = Resources
+    { _rMemoryGb :: !(Maybe (Textual Double))
+    , _rDiskGb   :: !(Maybe (Textual Double))
+    , _rCPU      :: !(Maybe (Textual Double))
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Resources' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'rMemoryGb'
+--
+-- * 'rDiskGb'
+--
+-- * 'rCPU'
+resources
+    :: Resources
+resources =
+    Resources
+    { _rMemoryGb = Nothing
+    , _rDiskGb = Nothing
+    , _rCPU = Nothing
+    }
+
+-- | How much memory, in GB, an app version needs.
+rMemoryGb :: Lens' Resources (Maybe Double)
+rMemoryGb
+  = lens _rMemoryGb (\ s a -> s{_rMemoryGb = a}) .
+      mapping _Coerce
+
+-- | How much disk size, in GB, an app version needs.
+rDiskGb :: Lens' Resources (Maybe Double)
+rDiskGb
+  = lens _rDiskGb (\ s a -> s{_rDiskGb = a}) .
+      mapping _Coerce
+
+-- | How many CPU cores an app version needs.
+rCPU :: Lens' Resources (Maybe Double)
+rCPU
+  = lens _rCPU (\ s a -> s{_rCPU = a}) .
+      mapping _Coerce
+
+instance FromJSON Resources where
+        parseJSON
+          = withObject "Resources"
+              (\ o ->
+                 Resources <$>
+                   (o .:? "memoryGb") <*> (o .:? "diskGb") <*>
+                     (o .:? "cpu"))
+
+instance ToJSON Resources where
+        toJSON Resources{..}
+          = object
+              (catMaybes
+                 [("memoryGb" .=) <$> _rMemoryGb,
+                  ("diskGb" .=) <$> _rDiskGb, ("cpu" .=) <$> _rCPU])
+
+-- | A manifest of files stored in Google Cloud Storage which should be
+-- included as part of this application. All files must be readable using
+-- the credentials supplied with this call.
+--
+-- /See:/ 'deploymentFiles' smart constructor.
+newtype DeploymentFiles = DeploymentFiles
+    { _dfAddtional :: HashMap Text FileInfo
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DeploymentFiles' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dfAddtional'
+deploymentFiles
+    :: HashMap Text FileInfo -- ^ 'dfAddtional'
+    -> DeploymentFiles
+deploymentFiles pDfAddtional_ =
+    DeploymentFiles
+    { _dfAddtional = _Coerce # pDfAddtional_
+    }
+
+dfAddtional :: Lens' DeploymentFiles (HashMap Text FileInfo)
+dfAddtional
+  = lens _dfAddtional (\ s a -> s{_dfAddtional = a}) .
+      _Coerce
+
+instance FromJSON DeploymentFiles where
+        parseJSON
+          = withObject "DeploymentFiles"
+              (\ o -> DeploymentFiles <$> (parseJSONObject o))
+
+instance ToJSON DeploymentFiles where
+        toJSON = toJSON . _dfAddtional
+
+-- | Target scaling by CPU usage.
+--
+-- /See:/ 'cpuUtilization' smart constructor.
+data CPUUtilization = CPUUtilization
+    { _cuAggregationWindowLength :: !(Maybe Text)
+    , _cuTargetUtilization       :: !(Maybe (Textual Double))
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CPUUtilization' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cuAggregationWindowLength'
+--
+-- * 'cuTargetUtilization'
+cpuUtilization
+    :: CPUUtilization
+cpuUtilization =
+    CPUUtilization
+    { _cuAggregationWindowLength = Nothing
+    , _cuTargetUtilization = Nothing
+    }
+
+-- | The period of time over which CPU utilization is calculated.
+cuAggregationWindowLength :: Lens' CPUUtilization (Maybe Text)
+cuAggregationWindowLength
+  = lens _cuAggregationWindowLength
+      (\ s a -> s{_cuAggregationWindowLength = a})
+
+-- | Target (0-1) CPU utilization ratio to maintain when scaling.
+cuTargetUtilization :: Lens' CPUUtilization (Maybe Double)
+cuTargetUtilization
+  = lens _cuTargetUtilization
+      (\ s a -> s{_cuTargetUtilization = a})
+      . mapping _Coerce
+
+instance FromJSON CPUUtilization where
+        parseJSON
+          = withObject "CPUUtilization"
+              (\ o ->
+                 CPUUtilization <$>
+                   (o .:? "aggregationWindowLength") <*>
+                     (o .:? "targetUtilization"))
+
+instance ToJSON CPUUtilization where
+        toJSON CPUUtilization{..}
+          = object
+              (catMaybes
+                 [("aggregationWindowLength" .=) <$>
+                    _cuAggregationWindowLength,
+                  ("targetUtilization" .=) <$> _cuTargetUtilization])
+
+-- | Mapping from module version IDs within the module to fractional (0.000,
+-- 1] allocations of traffic for that version. Each version may only be
+-- specified once, but some versions in the module may not have any traffic
+-- allocation. Modules that have traffic allocated in this field may not be
+-- deleted until the module is deleted, or their traffic allocation is
+-- removed. Allocations must sum to 1. Supports precision up to two decimal
+-- places for IP-based splits and up to three decimal places for
+-- cookie-based splits.
+--
+-- /See:/ 'trafficSplitAllocations' smart constructor.
+newtype TrafficSplitAllocations = TrafficSplitAllocations
+    { _tsaAddtional :: HashMap Text (Textual Double)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'TrafficSplitAllocations' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'tsaAddtional'
+trafficSplitAllocations
+    :: HashMap Text Double -- ^ 'tsaAddtional'
+    -> TrafficSplitAllocations
+trafficSplitAllocations pTsaAddtional_ =
+    TrafficSplitAllocations
+    { _tsaAddtional = _Coerce # pTsaAddtional_
+    }
+
+tsaAddtional :: Lens' TrafficSplitAllocations (HashMap Text Double)
+tsaAddtional
+  = lens _tsaAddtional (\ s a -> s{_tsaAddtional = a})
+      . _Coerce
+
+instance FromJSON TrafficSplitAllocations where
+        parseJSON
+          = withObject "TrafficSplitAllocations"
+              (\ o ->
+                 TrafficSplitAllocations <$> (parseJSONObject o))
+
+instance ToJSON TrafficSplitAllocations where
+        toJSON = toJSON . _tsaAddtional
+
+-- | A module with manual scaling runs continuously, allowing you to perform
+-- complex initialization and rely on the state of its memory over time.
+--
+-- /See:/ 'manualScaling' smart constructor.
+newtype ManualScaling = ManualScaling
+    { _msInstances :: Maybe (Textual Int32)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ManualScaling' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'msInstances'
+manualScaling
+    :: ManualScaling
+manualScaling =
+    ManualScaling
+    { _msInstances = Nothing
+    }
+
+-- | The number of instances to assign to the module at the start. This
+-- number can later be altered by using the [Modules
+-- API](https:\/\/cloud.google.com\/appengine\/docs\/python\/modules\/functions)
+-- \`set_num_instances()\` function.
+msInstances :: Lens' ManualScaling (Maybe Int32)
+msInstances
+  = lens _msInstances (\ s a -> s{_msInstances = a}) .
+      mapping _Coerce
+
+instance FromJSON ManualScaling where
+        parseJSON
+          = withObject "ManualScaling"
+              (\ o -> ManualScaling <$> (o .:? "instances"))
+
+instance ToJSON ManualScaling where
+        toJSON ManualScaling{..}
+          = object
+              (catMaybes [("instances" .=) <$> _msInstances])
+
+-- | A module with basic scaling will create an instance when the application
+-- receives a request. The instance will be turned down when the app
+-- becomes idle. Basic scaling is ideal for work that is intermittent or
+-- driven by user activity.
+--
+-- /See:/ 'basicScaling' smart constructor.
+data BasicScaling = BasicScaling
+    { _bsMaxInstances :: !(Maybe (Textual Int32))
+    , _bsIdleTimeout  :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'BasicScaling' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'bsMaxInstances'
+--
+-- * 'bsIdleTimeout'
+basicScaling
+    :: BasicScaling
+basicScaling =
+    BasicScaling
+    { _bsMaxInstances = Nothing
+    , _bsIdleTimeout = Nothing
+    }
+
+-- | The maximum number of instances for App Engine to create for this
+-- version.
+bsMaxInstances :: Lens' BasicScaling (Maybe Int32)
+bsMaxInstances
+  = lens _bsMaxInstances
+      (\ s a -> s{_bsMaxInstances = a})
+      . mapping _Coerce
+
+-- | The instance will be shut down this amount of time after receiving its
+-- last request.
+bsIdleTimeout :: Lens' BasicScaling (Maybe Text)
+bsIdleTimeout
+  = lens _bsIdleTimeout
+      (\ s a -> s{_bsIdleTimeout = a})
+
+instance FromJSON BasicScaling where
+        parseJSON
+          = withObject "BasicScaling"
+              (\ o ->
+                 BasicScaling <$>
+                   (o .:? "maxInstances") <*> (o .:? "idleTimeout"))
+
+instance ToJSON BasicScaling where
+        toJSON BasicScaling{..}
+          = object
+              (catMaybes
+                 [("maxInstances" .=) <$> _bsMaxInstances,
+                  ("idleTimeout" .=) <$> _bsIdleTimeout])
+
+-- | A Version is a specific set of source code and configuration files
+-- deployed to a module.
+--
+-- /See:/ 'version' smart constructor.
+data Version = Version
+    { _vCreationTime      :: !(Maybe Text)
+    , _vRuntime           :: !(Maybe Text)
+    , _vDeployer          :: !(Maybe Text)
+    , _vNobuildFilesRegex :: !(Maybe Text)
+    , _vInstanceClass     :: !(Maybe Text)
+    , _vHealthCheck       :: !(Maybe HealthCheck)
+    , _vEnv               :: !(Maybe Text)
+    , _vDefaultExpiration :: !(Maybe Text)
+    , _vAutomaticScaling  :: !(Maybe AutomaticScaling)
+    , _vErrorHandlers     :: !(Maybe [ErrorHandler])
+    , _vVM                :: !(Maybe Bool)
+    , _vHandlers          :: !(Maybe [URLMap])
+    , _vInboundServices   :: !(Maybe [Text])
+    , _vNetwork           :: !(Maybe Network)
+    , _vResources         :: !(Maybe Resources)
+    , _vName              :: !(Maybe Text)
+    , _vThreadsafe        :: !(Maybe Bool)
+    , _vBetaSettings      :: !(Maybe VersionBetaSettings)
+    , _vBasicScaling      :: !(Maybe BasicScaling)
+    , _vManualScaling     :: !(Maybe ManualScaling)
+    , _vAPIConfig         :: !(Maybe APIConfigHandler)
+    , _vId                :: !(Maybe Text)
+    , _vEnvVariables      :: !(Maybe VersionEnvVariables)
+    , _vServingStatus     :: !(Maybe Text)
+    , _vLibraries         :: !(Maybe [Library])
+    , _vDeployment        :: !(Maybe Deployment)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Version' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'vCreationTime'
+--
+-- * 'vRuntime'
+--
+-- * 'vDeployer'
+--
+-- * 'vNobuildFilesRegex'
+--
+-- * 'vInstanceClass'
+--
+-- * 'vHealthCheck'
+--
+-- * 'vEnv'
+--
+-- * 'vDefaultExpiration'
+--
+-- * 'vAutomaticScaling'
+--
+-- * 'vErrorHandlers'
+--
+-- * 'vVM'
+--
+-- * 'vHandlers'
+--
+-- * 'vInboundServices'
+--
+-- * 'vNetwork'
+--
+-- * 'vResources'
+--
+-- * 'vName'
+--
+-- * 'vThreadsafe'
+--
+-- * 'vBetaSettings'
+--
+-- * 'vBasicScaling'
+--
+-- * 'vManualScaling'
+--
+-- * 'vAPIConfig'
+--
+-- * 'vId'
+--
+-- * 'vEnvVariables'
+--
+-- * 'vServingStatus'
+--
+-- * 'vLibraries'
+--
+-- * 'vDeployment'
+version
+    :: Version
+version =
+    Version
+    { _vCreationTime = Nothing
+    , _vRuntime = Nothing
+    , _vDeployer = Nothing
+    , _vNobuildFilesRegex = Nothing
+    , _vInstanceClass = Nothing
+    , _vHealthCheck = Nothing
+    , _vEnv = Nothing
+    , _vDefaultExpiration = Nothing
+    , _vAutomaticScaling = Nothing
+    , _vErrorHandlers = Nothing
+    , _vVM = Nothing
+    , _vHandlers = Nothing
+    , _vInboundServices = Nothing
+    , _vNetwork = Nothing
+    , _vResources = Nothing
+    , _vName = Nothing
+    , _vThreadsafe = Nothing
+    , _vBetaSettings = Nothing
+    , _vBasicScaling = Nothing
+    , _vManualScaling = Nothing
+    , _vAPIConfig = Nothing
+    , _vId = Nothing
+    , _vEnvVariables = Nothing
+    , _vServingStatus = Nothing
+    , _vLibraries = Nothing
+    , _vDeployment = Nothing
+    }
+
+-- | Creation time of this version. This will be between the start and end
+-- times of the operation that creates this version. \'OutputOnly
+vCreationTime :: Lens' Version (Maybe Text)
+vCreationTime
+  = lens _vCreationTime
+      (\ s a -> s{_vCreationTime = a})
+
+-- | The desired runtime. Values can include python27, java7, go, etc.
+vRuntime :: Lens' Version (Maybe Text)
+vRuntime = lens _vRuntime (\ s a -> s{_vRuntime = a})
+
+-- | The email address of the user who created this version. \'OutputOnly
+vDeployer :: Lens' Version (Maybe Text)
+vDeployer
+  = lens _vDeployer (\ s a -> s{_vDeployer = a})
+
+-- | Go only. Files that match this pattern will not be built into the app.
+-- May only be set on create requests.
+vNobuildFilesRegex :: Lens' Version (Maybe Text)
+vNobuildFilesRegex
+  = lens _vNobuildFilesRegex
+      (\ s a -> s{_vNobuildFilesRegex = a})
+
+-- | The frontend instance class to use to run this app. Valid values are
+-- \`[F1, F2, F4, F4_1G]\`. Default: \"F1\"
+vInstanceClass :: Lens' Version (Maybe Text)
+vInstanceClass
+  = lens _vInstanceClass
+      (\ s a -> s{_vInstanceClass = a})
+
+-- | Configure health checking for the VM instances. Unhealthy VM instances
+-- will be stopped and replaced with new instances. Only returned in
+-- \`GET\` requests if \`view=FULL\` is set. May only be set on create
+-- requests; once created, is immutable.
+vHealthCheck :: Lens' Version (Maybe HealthCheck)
+vHealthCheck
+  = lens _vHealthCheck (\ s a -> s{_vHealthCheck = a})
+
+-- | The App Engine execution environment to use for this version. Default:
+-- \"1\"
+vEnv :: Lens' Version (Maybe Text)
+vEnv = lens _vEnv (\ s a -> s{_vEnv = a})
+
+-- | The length of time a static file served by a static file handler ought
+-- to be cached by web proxies and browsers, if the handler does not
+-- specify its own expiration. Only returned in \`GET\` requests if
+-- \`view=FULL\` is set. May only be set on create requests; once created,
+-- is immutable.
+vDefaultExpiration :: Lens' Version (Maybe Text)
+vDefaultExpiration
+  = lens _vDefaultExpiration
+      (\ s a -> s{_vDefaultExpiration = a})
+
+-- | Automatic scaling is the scaling policy that App Engine has used since
+-- its inception. It is based on request rate, response latencies, and
+-- other application metrics.
+vAutomaticScaling :: Lens' Version (Maybe AutomaticScaling)
+vAutomaticScaling
+  = lens _vAutomaticScaling
+      (\ s a -> s{_vAutomaticScaling = a})
+
+-- | Custom static error pages instead of these generic error pages, (limit
+-- 10 KB\/page) Only returned in \`GET\` requests if \`view=FULL\` is set.
+-- May only be set on create requests; once created, is immutable.
+vErrorHandlers :: Lens' Version [ErrorHandler]
+vErrorHandlers
+  = lens _vErrorHandlers
+      (\ s a -> s{_vErrorHandlers = a})
+      . _Default
+      . _Coerce
+
+-- | Whether to deploy this app in a VM container (deprecated, use
+-- \"env\":\"2\").
+vVM :: Lens' Version (Maybe Bool)
+vVM = lens _vVM (\ s a -> s{_vVM = a})
+
+-- | An ordered list of URL Matching patterns that should be applied to
+-- incoming requests. The first matching URL consumes the request, and
+-- subsequent handlers are not attempted. Only returned in \`GET\` requests
+-- if \`view=FULL\` is set. May only be set on create requests; once
+-- created, is immutable.
+vHandlers :: Lens' Version [URLMap]
+vHandlers
+  = lens _vHandlers (\ s a -> s{_vHandlers = a}) .
+      _Default
+      . _Coerce
+
+-- | Before an application can receive email or XMPP messages, the
+-- application must be configured to enable the service.
+vInboundServices :: Lens' Version [Text]
+vInboundServices
+  = lens _vInboundServices
+      (\ s a -> s{_vInboundServices = a})
+      . _Default
+      . _Coerce
+
+-- | Used to specify extra network settings (for VM runtimes only).
+vNetwork :: Lens' Version (Maybe Network)
+vNetwork = lens _vNetwork (\ s a -> s{_vNetwork = a})
+
+-- | Used to specify how many machine resources an app version needs (for VM
+-- runtimes only).
+vResources :: Lens' Version (Maybe Resources)
+vResources
+  = lens _vResources (\ s a -> s{_vResources = a})
+
+-- | The full path to the Version resource in the API. Example:
+-- \"apps\/myapp\/modules\/default\/versions\/v1\". \'OutputOnly
+vName :: Lens' Version (Maybe Text)
+vName = lens _vName (\ s a -> s{_vName = a})
+
+-- | If true, multiple requests can be dispatched to the app at once.
+vThreadsafe :: Lens' Version (Maybe Bool)
+vThreadsafe
+  = lens _vThreadsafe (\ s a -> s{_vThreadsafe = a})
+
+-- | Beta settings supplied to the application via metadata.
+vBetaSettings :: Lens' Version (Maybe VersionBetaSettings)
+vBetaSettings
+  = lens _vBetaSettings
+      (\ s a -> s{_vBetaSettings = a})
+
+-- | A module with basic scaling will create an instance when the application
+-- receives a request. The instance will be turned down when the app
+-- becomes idle. Basic scaling is ideal for work that is intermittent or
+-- driven by user activity.
+vBasicScaling :: Lens' Version (Maybe BasicScaling)
+vBasicScaling
+  = lens _vBasicScaling
+      (\ s a -> s{_vBasicScaling = a})
+
+-- | A module with manual scaling runs continuously, allowing you to perform
+-- complex initialization and rely on the state of its memory over time.
+vManualScaling :: Lens' Version (Maybe ManualScaling)
+vManualScaling
+  = lens _vManualScaling
+      (\ s a -> s{_vManualScaling = a})
+
+-- | Serving configuration for Google Cloud Endpoints. Only returned in
+-- \`GET\` requests if \`view=FULL\` is set. May only be set on create
+-- requests; once created, is immutable.
+vAPIConfig :: Lens' Version (Maybe APIConfigHandler)
+vAPIConfig
+  = lens _vAPIConfig (\ s a -> s{_vAPIConfig = a})
+
+-- | The relative name\/path of the Version within the module. Example:
+-- \"v1\". Version specifiers can contain lowercase letters, digits, and
+-- hyphens. It cannot begin with the prefix \`ah-\` and the names
+-- \`default\` and \`latest\` are reserved and cannot be used.
+vId :: Lens' Version (Maybe Text)
+vId = lens _vId (\ s a -> s{_vId = a})
+
+-- | Environment variables made available to the application. Only returned
+-- in \`GET\` requests if \`view=FULL\` is set. May only be set on create
+-- requests; once created, is immutable.
+vEnvVariables :: Lens' Version (Maybe VersionEnvVariables)
+vEnvVariables
+  = lens _vEnvVariables
+      (\ s a -> s{_vEnvVariables = a})
+
+-- | The current serving status of this version. Only \`SERVING\` versions
+-- will have instances created or billed for. If this field is unset when a
+-- version is created, \`SERVING\` status will be assumed. It is an error
+-- to explicitly set this field to \`SERVING_STATUS_UNSPECIFIED\`.
+vServingStatus :: Lens' Version (Maybe Text)
+vServingStatus
+  = lens _vServingStatus
+      (\ s a -> s{_vServingStatus = a})
+
+-- | Configuration for Python runtime third-party libraries required by the
+-- application. Only returned in \`GET\` requests if \`view=FULL\` is set.
+-- May only be set on create requests; once created, is immutable.
+vLibraries :: Lens' Version [Library]
+vLibraries
+  = lens _vLibraries (\ s a -> s{_vLibraries = a}) .
+      _Default
+      . _Coerce
+
+-- | Code and application artifacts that make up this version. Only returned
+-- in \`GET\` requests if \`view=FULL\` is set. May only be set on create
+-- requests; once created, is immutable.
+vDeployment :: Lens' Version (Maybe Deployment)
+vDeployment
+  = lens _vDeployment (\ s a -> s{_vDeployment = a})
+
+instance FromJSON Version where
+        parseJSON
+          = withObject "Version"
+              (\ o ->
+                 Version <$>
+                   (o .:? "creationTime") <*> (o .:? "runtime") <*>
+                     (o .:? "deployer")
+                     <*> (o .:? "nobuildFilesRegex")
+                     <*> (o .:? "instanceClass")
+                     <*> (o .:? "healthCheck")
+                     <*> (o .:? "env")
+                     <*> (o .:? "defaultExpiration")
+                     <*> (o .:? "automaticScaling")
+                     <*> (o .:? "errorHandlers" .!= mempty)
+                     <*> (o .:? "vm")
+                     <*> (o .:? "handlers" .!= mempty)
+                     <*> (o .:? "inboundServices" .!= mempty)
+                     <*> (o .:? "network")
+                     <*> (o .:? "resources")
+                     <*> (o .:? "name")
+                     <*> (o .:? "threadsafe")
+                     <*> (o .:? "betaSettings")
+                     <*> (o .:? "basicScaling")
+                     <*> (o .:? "manualScaling")
+                     <*> (o .:? "apiConfig")
+                     <*> (o .:? "id")
+                     <*> (o .:? "envVariables")
+                     <*> (o .:? "servingStatus")
+                     <*> (o .:? "libraries" .!= mempty)
+                     <*> (o .:? "deployment"))
+
+instance ToJSON Version where
+        toJSON Version{..}
+          = object
+              (catMaybes
+                 [("creationTime" .=) <$> _vCreationTime,
+                  ("runtime" .=) <$> _vRuntime,
+                  ("deployer" .=) <$> _vDeployer,
+                  ("nobuildFilesRegex" .=) <$> _vNobuildFilesRegex,
+                  ("instanceClass" .=) <$> _vInstanceClass,
+                  ("healthCheck" .=) <$> _vHealthCheck,
+                  ("env" .=) <$> _vEnv,
+                  ("defaultExpiration" .=) <$> _vDefaultExpiration,
+                  ("automaticScaling" .=) <$> _vAutomaticScaling,
+                  ("errorHandlers" .=) <$> _vErrorHandlers,
+                  ("vm" .=) <$> _vVM, ("handlers" .=) <$> _vHandlers,
+                  ("inboundServices" .=) <$> _vInboundServices,
+                  ("network" .=) <$> _vNetwork,
+                  ("resources" .=) <$> _vResources,
+                  ("name" .=) <$> _vName,
+                  ("threadsafe" .=) <$> _vThreadsafe,
+                  ("betaSettings" .=) <$> _vBetaSettings,
+                  ("basicScaling" .=) <$> _vBasicScaling,
+                  ("manualScaling" .=) <$> _vManualScaling,
+                  ("apiConfig" .=) <$> _vAPIConfig, ("id" .=) <$> _vId,
+                  ("envVariables" .=) <$> _vEnvVariables,
+                  ("servingStatus" .=) <$> _vServingStatus,
+                  ("libraries" .=) <$> _vLibraries,
+                  ("deployment" .=) <$> _vDeployment])
+
+-- | A module is a component of an application that provides a single service
+-- or configuration. A module has a collection of versions that define a
+-- specific set of code used to implement the functionality of that module.
+--
+-- /See:/ 'module'' smart constructor.
+data Module = Module
+    { _mSplit :: !(Maybe TrafficSplit)
+    , _mName  :: !(Maybe Text)
+    , _mId    :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Module' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'mSplit'
+--
+-- * 'mName'
+--
+-- * 'mId'
+module'
+    :: Module
+module' =
+    Module
+    { _mSplit = Nothing
+    , _mName = Nothing
+    , _mId = Nothing
+    }
+
+-- | A mapping that defines fractional HTTP traffic diversion to different
+-- versions within the module.
+mSplit :: Lens' Module (Maybe TrafficSplit)
+mSplit = lens _mSplit (\ s a -> s{_mSplit = a})
+
+-- | The full path to the Module resource in the API. Example:
+-- \"apps\/myapp\/modules\/default\" \'OutputOnly
+mName :: Lens' Module (Maybe Text)
+mName = lens _mName (\ s a -> s{_mName = a})
+
+-- | The relative name\/path of the module within the application. Example:
+-- \"default\" \'OutputOnly
+mId :: Lens' Module (Maybe Text)
+mId = lens _mId (\ s a -> s{_mId = a})
+
+instance FromJSON Module where
+        parseJSON
+          = withObject "Module"
+              (\ o ->
+                 Module <$>
+                   (o .:? "split") <*> (o .:? "name") <*> (o .:? "id"))
+
+instance ToJSON Module where
+        toJSON Module{..}
+          = object
+              (catMaybes
+                 [("split" .=) <$> _mSplit, ("name" .=) <$> _mName,
+                  ("id" .=) <$> _mId])
+
+-- | Files served directly to the user for a given URL, such as images, CSS
+-- stylesheets, or JavaScript source files. Static file handlers describe
+-- which files in the application directory are static files, and which
+-- URLs serve them.
+--
+-- /See:/ 'staticFilesHandler' smart constructor.
+data StaticFilesHandler = StaticFilesHandler
+    { _sfhHTTPHeaders         :: !(Maybe StaticFilesHandlerHTTPHeaders)
+    , _sfhPath                :: !(Maybe Text)
+    , _sfhRequireMatchingFile :: !(Maybe Bool)
+    , _sfhExpiration          :: !(Maybe Text)
+    , _sfhMimeType            :: !(Maybe Text)
+    , _sfhApplicationReadable :: !(Maybe Bool)
+    , _sfhUploadPathRegex     :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'StaticFilesHandler' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'sfhHTTPHeaders'
+--
+-- * 'sfhPath'
+--
+-- * 'sfhRequireMatchingFile'
+--
+-- * 'sfhExpiration'
+--
+-- * 'sfhMimeType'
+--
+-- * 'sfhApplicationReadable'
+--
+-- * 'sfhUploadPathRegex'
+staticFilesHandler
+    :: StaticFilesHandler
+staticFilesHandler =
+    StaticFilesHandler
+    { _sfhHTTPHeaders = Nothing
+    , _sfhPath = Nothing
+    , _sfhRequireMatchingFile = Nothing
+    , _sfhExpiration = Nothing
+    , _sfhMimeType = Nothing
+    , _sfhApplicationReadable = Nothing
+    , _sfhUploadPathRegex = Nothing
+    }
+
+-- | HTTP headers to use for all responses from these URLs.
+sfhHTTPHeaders :: Lens' StaticFilesHandler (Maybe StaticFilesHandlerHTTPHeaders)
+sfhHTTPHeaders
+  = lens _sfhHTTPHeaders
+      (\ s a -> s{_sfhHTTPHeaders = a})
+
+-- | The path to the static files matched by the URL pattern, from the
+-- application root directory. The path can refer to text matched in
+-- groupings in the URL pattern.
+sfhPath :: Lens' StaticFilesHandler (Maybe Text)
+sfhPath = lens _sfhPath (\ s a -> s{_sfhPath = a})
+
+-- | If true, this [UrlMap][google.appengine.v1beta4.UrlMap] entry does not
+-- match the request unless the file referenced by the handler also exists.
+-- If no such file exists, processing will continue with the next
+-- [UrlMap][google.appengine.v1beta4.UrlMap] that matches the requested
+-- URL.
+sfhRequireMatchingFile :: Lens' StaticFilesHandler (Maybe Bool)
+sfhRequireMatchingFile
+  = lens _sfhRequireMatchingFile
+      (\ s a -> s{_sfhRequireMatchingFile = a})
+
+-- | The length of time a static file served by this handler ought to be
+-- cached by web proxies and browsers.
+sfhExpiration :: Lens' StaticFilesHandler (Maybe Text)
+sfhExpiration
+  = lens _sfhExpiration
+      (\ s a -> s{_sfhExpiration = a})
+
+-- | If specified, all files served by this handler will be served using the
+-- specified MIME type. If not specified, the MIME type for a file will be
+-- derived from the file\'s filename extension.
+sfhMimeType :: Lens' StaticFilesHandler (Maybe Text)
+sfhMimeType
+  = lens _sfhMimeType (\ s a -> s{_sfhMimeType = a})
+
+-- | By default, files declared in static file handlers are uploaded as
+-- static data and are only served to end users, they cannot be read by an
+-- application. If this field is set to true, the files are also uploaded
+-- as code data so your application can read them. Both uploads are charged
+-- against your code and static data storage resource quotas.
+sfhApplicationReadable :: Lens' StaticFilesHandler (Maybe Bool)
+sfhApplicationReadable
+  = lens _sfhApplicationReadable
+      (\ s a -> s{_sfhApplicationReadable = a})
+
+-- | A regular expression that matches the file paths for all files that will
+-- be referenced by this handler.
+sfhUploadPathRegex :: Lens' StaticFilesHandler (Maybe Text)
+sfhUploadPathRegex
+  = lens _sfhUploadPathRegex
+      (\ s a -> s{_sfhUploadPathRegex = a})
+
+instance FromJSON StaticFilesHandler where
+        parseJSON
+          = withObject "StaticFilesHandler"
+              (\ o ->
+                 StaticFilesHandler <$>
+                   (o .:? "httpHeaders") <*> (o .:? "path") <*>
+                     (o .:? "requireMatchingFile")
+                     <*> (o .:? "expiration")
+                     <*> (o .:? "mimeType")
+                     <*> (o .:? "applicationReadable")
+                     <*> (o .:? "uploadPathRegex"))
+
+instance ToJSON StaticFilesHandler where
+        toJSON StaticFilesHandler{..}
+          = object
+              (catMaybes
+                 [("httpHeaders" .=) <$> _sfhHTTPHeaders,
+                  ("path" .=) <$> _sfhPath,
+                  ("requireMatchingFile" .=) <$>
+                    _sfhRequireMatchingFile,
+                  ("expiration" .=) <$> _sfhExpiration,
+                  ("mimeType" .=) <$> _sfhMimeType,
+                  ("applicationReadable" .=) <$>
+                    _sfhApplicationReadable,
+                  ("uploadPathRegex" .=) <$> _sfhUploadPathRegex])
+
+-- | A custom static error page to be served when an error occurs.
+--
+-- /See:/ 'errorHandler' smart constructor.
+data ErrorHandler = ErrorHandler
+    { _ehMimeType   :: !(Maybe Text)
+    , _ehErrorCode  :: !(Maybe Text)
+    , _ehStaticFile :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ErrorHandler' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ehMimeType'
+--
+-- * 'ehErrorCode'
+--
+-- * 'ehStaticFile'
+errorHandler
+    :: ErrorHandler
+errorHandler =
+    ErrorHandler
+    { _ehMimeType = Nothing
+    , _ehErrorCode = Nothing
+    , _ehStaticFile = Nothing
+    }
+
+-- | MIME type of file. If unspecified, \"text\/html\" is assumed.
+ehMimeType :: Lens' ErrorHandler (Maybe Text)
+ehMimeType
+  = lens _ehMimeType (\ s a -> s{_ehMimeType = a})
+
+-- | The error condition this handler applies to.
+ehErrorCode :: Lens' ErrorHandler (Maybe Text)
+ehErrorCode
+  = lens _ehErrorCode (\ s a -> s{_ehErrorCode = a})
+
+-- | Static file content to be served for this error.
+ehStaticFile :: Lens' ErrorHandler (Maybe Text)
+ehStaticFile
+  = lens _ehStaticFile (\ s a -> s{_ehStaticFile = a})
+
+instance FromJSON ErrorHandler where
+        parseJSON
+          = withObject "ErrorHandler"
+              (\ o ->
+                 ErrorHandler <$>
+                   (o .:? "mimeType") <*> (o .:? "errorCode") <*>
+                     (o .:? "staticFile"))
+
+instance ToJSON ErrorHandler where
+        toJSON ErrorHandler{..}
+          = object
+              (catMaybes
+                 [("mimeType" .=) <$> _ehMimeType,
+                  ("errorCode" .=) <$> _ehErrorCode,
+                  ("staticFile" .=) <$> _ehStaticFile])
+
+-- | Metadata for the given
+-- [google.longrunning.Operation][google.longrunning.Operation].
+--
+-- /See:/ 'operationMetadata' smart constructor.
+data OperationMetadata = OperationMetadata
+    { _omInsertTime    :: !(Maybe Text)
+    , _omUser          :: !(Maybe Text)
+    , _omMethod        :: !(Maybe Text)
+    , _omEndTime       :: !(Maybe Text)
+    , _omOperationType :: !(Maybe Text)
+    , _omTarget        :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'OperationMetadata' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'omInsertTime'
+--
+-- * 'omUser'
+--
+-- * 'omMethod'
+--
+-- * 'omEndTime'
+--
+-- * 'omOperationType'
+--
+-- * 'omTarget'
+operationMetadata
+    :: OperationMetadata
+operationMetadata =
+    OperationMetadata
+    { _omInsertTime = Nothing
+    , _omUser = Nothing
+    , _omMethod = Nothing
+    , _omEndTime = Nothing
+    , _omOperationType = Nothing
+    , _omTarget = Nothing
+    }
+
+-- | Timestamp that this operation was received. \'OutputOnly
+omInsertTime :: Lens' OperationMetadata (Maybe Text)
+omInsertTime
+  = lens _omInsertTime (\ s a -> s{_omInsertTime = a})
+
+-- | The user who requested this operation. \'OutputOnly
+omUser :: Lens' OperationMetadata (Maybe Text)
+omUser = lens _omUser (\ s a -> s{_omUser = a})
+
+-- | API method name that initiated the operation. Example:
+-- \"google.appengine.v1beta4.Version.CreateVersion\". \'OutputOnly
+omMethod :: Lens' OperationMetadata (Maybe Text)
+omMethod = lens _omMethod (\ s a -> s{_omMethod = a})
+
+-- | Timestamp that this operation was completed. (Not present if the
+-- operation is still in progress.) \'OutputOnly
+omEndTime :: Lens' OperationMetadata (Maybe Text)
+omEndTime
+  = lens _omEndTime (\ s a -> s{_omEndTime = a})
+
+-- | The type of the operation (deprecated, use method field instead).
+-- Example: \"create_version\". \'OutputOnly
+omOperationType :: Lens' OperationMetadata (Maybe Text)
+omOperationType
+  = lens _omOperationType
+      (\ s a -> s{_omOperationType = a})
+
+-- | Resource that this operation is acting on. Example:
+-- \"apps\/myapp\/modules\/default\". \'OutputOnly
+omTarget :: Lens' OperationMetadata (Maybe Text)
+omTarget = lens _omTarget (\ s a -> s{_omTarget = a})
+
+instance FromJSON OperationMetadata where
+        parseJSON
+          = withObject "OperationMetadata"
+              (\ o ->
+                 OperationMetadata <$>
+                   (o .:? "insertTime") <*> (o .:? "user") <*>
+                     (o .:? "method")
+                     <*> (o .:? "endTime")
+                     <*> (o .:? "operationType")
+                     <*> (o .:? "target"))
+
+instance ToJSON OperationMetadata where
+        toJSON OperationMetadata{..}
+          = object
+              (catMaybes
+                 [("insertTime" .=) <$> _omInsertTime,
+                  ("user" .=) <$> _omUser, ("method" .=) <$> _omMethod,
+                  ("endTime" .=) <$> _omEndTime,
+                  ("operationType" .=) <$> _omOperationType,
+                  ("target" .=) <$> _omTarget])
+
+-- | A reference to a particular snapshot of the source tree used to build
+-- and deploy the application.
+--
+-- /See:/ 'sourceReference' smart constructor.
+data SourceReference = SourceReference
+    { _srRepository :: !(Maybe Text)
+    , _srRevisionId :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'SourceReference' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'srRepository'
+--
+-- * 'srRevisionId'
+sourceReference
+    :: SourceReference
+sourceReference =
+    SourceReference
+    { _srRepository = Nothing
+    , _srRevisionId = Nothing
+    }
+
+-- | Optional. A URI string identifying the repository. Example:
+-- \"https:\/\/source.developers.google.com\/p\/app-123\/r\/default\"
+srRepository :: Lens' SourceReference (Maybe Text)
+srRepository
+  = lens _srRepository (\ s a -> s{_srRepository = a})
+
+-- | The canonical (and persistent) identifier of the deployed revision, i.e.
+-- any kind of aliases including tags or branch names are not allowed.
+-- Example (git): \"2198322f89e0bb2e25021667c2ed489d1fd34e6b\"
+srRevisionId :: Lens' SourceReference (Maybe Text)
+srRevisionId
+  = lens _srRevisionId (\ s a -> s{_srRevisionId = a})
+
+instance FromJSON SourceReference where
+        parseJSON
+          = withObject "SourceReference"
+              (\ o ->
+                 SourceReference <$>
+                   (o .:? "repository") <*> (o .:? "revisionId"))
+
+instance ToJSON SourceReference where
+        toJSON SourceReference{..}
+          = object
+              (catMaybes
+                 [("repository" .=) <$> _srRepository,
+                  ("revisionId" .=) <$> _srRevisionId])
+
+-- | The normal response of the operation in case of success. If the original
+-- method returns no data on success, such as \`Delete\`, the response is
+-- \`google.protobuf.Empty\`. If the original method is standard
+-- \`Get\`\/\`Create\`\/\`Update\`, the response should be the resource.
+-- For other methods, the response should have the type \`XxxResponse\`,
+-- where \`Xxx\` is the original method name. For example, if the original
+-- method name is \`TakeSnapshot()\`, the inferred response type is
+-- \`TakeSnapshotResponse\`.
+--
+-- /See:/ 'operationResponse' smart constructor.
+newtype OperationResponse = OperationResponse
+    { _orAddtional :: HashMap Text JSONValue
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'OperationResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'orAddtional'
+operationResponse
+    :: HashMap Text JSONValue -- ^ 'orAddtional'
+    -> OperationResponse
+operationResponse pOrAddtional_ =
+    OperationResponse
+    { _orAddtional = _Coerce # pOrAddtional_
+    }
+
+-- | Properties of the object. Contains field \'ype with type URL.
+orAddtional :: Lens' OperationResponse (HashMap Text JSONValue)
+orAddtional
+  = lens _orAddtional (\ s a -> s{_orAddtional = a}) .
+      _Coerce
+
+instance FromJSON OperationResponse where
+        parseJSON
+          = withObject "OperationResponse"
+              (\ o -> OperationResponse <$> (parseJSONObject o))
+
+instance ToJSON OperationResponse where
+        toJSON = toJSON . _orAddtional
+
+-- | A Docker (container) image which should be used to start the
+-- application.
+--
+-- /See:/ 'containerInfo' smart constructor.
+newtype ContainerInfo = ContainerInfo
+    { _ciImage :: Maybe Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ContainerInfo' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ciImage'
+containerInfo
+    :: ContainerInfo
+containerInfo =
+    ContainerInfo
+    { _ciImage = Nothing
+    }
+
+-- | Reference to a hosted container image. Must be a URI to a resource in a
+-- Docker repository. Must be fully qualified, including tag or digest.
+-- e.g. gcr.io\/my-project\/image:tag or gcr.io\/my-project\/image\'digest
+ciImage :: Lens' ContainerInfo (Maybe Text)
+ciImage = lens _ciImage (\ s a -> s{_ciImage = a})
+
+instance FromJSON ContainerInfo where
+        parseJSON
+          = withObject "ContainerInfo"
+              (\ o -> ContainerInfo <$> (o .:? "image"))
+
+instance ToJSON ContainerInfo where
+        toJSON ContainerInfo{..}
+          = object (catMaybes [("image" .=) <$> _ciImage])
+
+-- | Code and application artifacts used to deploy a version to App Engine.
+--
+-- /See:/ 'deployment' smart constructor.
+data Deployment = Deployment
+    { _dContainer        :: !(Maybe ContainerInfo)
+    , _dFiles            :: !(Maybe DeploymentFiles)
+    , _dSourceReferences :: !(Maybe [SourceReference])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Deployment' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dContainer'
+--
+-- * 'dFiles'
+--
+-- * 'dSourceReferences'
+deployment
+    :: Deployment
+deployment =
+    Deployment
+    { _dContainer = Nothing
+    , _dFiles = Nothing
+    , _dSourceReferences = Nothing
+    }
+
+-- | If supplied, a docker (container) image which should be used to start
+-- the application. Only applicable to the \'vm\' runtime.
+dContainer :: Lens' Deployment (Maybe ContainerInfo)
+dContainer
+  = lens _dContainer (\ s a -> s{_dContainer = a})
+
+-- | A manifest of files stored in Google Cloud Storage which should be
+-- included as part of this application. All files must be readable using
+-- the credentials supplied with this call.
+dFiles :: Lens' Deployment (Maybe DeploymentFiles)
+dFiles = lens _dFiles (\ s a -> s{_dFiles = a})
+
+-- | The origin of the source code for this deployment. There can be more
+-- than one source reference per Version if source code is distributed
+-- among multiple repositories.
+dSourceReferences :: Lens' Deployment [SourceReference]
+dSourceReferences
+  = lens _dSourceReferences
+      (\ s a -> s{_dSourceReferences = a})
+      . _Default
+      . _Coerce
+
+instance FromJSON Deployment where
+        parseJSON
+          = withObject "Deployment"
+              (\ o ->
+                 Deployment <$>
+                   (o .:? "container") <*> (o .:? "files") <*>
+                     (o .:? "sourceReferences" .!= mempty))
+
+instance ToJSON Deployment where
+        toJSON Deployment{..}
+          = object
+              (catMaybes
+                 [("container" .=) <$> _dContainer,
+                  ("files" .=) <$> _dFiles,
+                  ("sourceReferences" .=) <$> _dSourceReferences])
+
+-- | Files served directly to the user for a given URL, such as images, CSS
+-- stylesheets, or JavaScript source files. Static directory handlers make
+-- it easy to serve the entire contents of a directory as static files.
+--
+-- /See:/ 'staticDirectoryHandler' smart constructor.
+data StaticDirectoryHandler = StaticDirectoryHandler
+    { _sdhHTTPHeaders         :: !(Maybe StaticDirectoryHandlerHTTPHeaders)
+    , _sdhRequireMatchingFile :: !(Maybe Bool)
+    , _sdhExpiration          :: !(Maybe Text)
+    , _sdhMimeType            :: !(Maybe Text)
+    , _sdhApplicationReadable :: !(Maybe Bool)
+    , _sdhDirectory           :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'StaticDirectoryHandler' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'sdhHTTPHeaders'
+--
+-- * 'sdhRequireMatchingFile'
+--
+-- * 'sdhExpiration'
+--
+-- * 'sdhMimeType'
+--
+-- * 'sdhApplicationReadable'
+--
+-- * 'sdhDirectory'
+staticDirectoryHandler
+    :: StaticDirectoryHandler
+staticDirectoryHandler =
+    StaticDirectoryHandler
+    { _sdhHTTPHeaders = Nothing
+    , _sdhRequireMatchingFile = Nothing
+    , _sdhExpiration = Nothing
+    , _sdhMimeType = Nothing
+    , _sdhApplicationReadable = Nothing
+    , _sdhDirectory = Nothing
+    }
+
+-- | HTTP headers to use for all responses from these URLs.
+sdhHTTPHeaders :: Lens' StaticDirectoryHandler (Maybe StaticDirectoryHandlerHTTPHeaders)
+sdhHTTPHeaders
+  = lens _sdhHTTPHeaders
+      (\ s a -> s{_sdhHTTPHeaders = a})
+
+-- | If true, this UrlMap entry does not match the request unless the file
+-- referenced by the handler also exists. If no such file exists,
+-- processing will continue with the next UrlMap that matches the requested
+-- URL.
+sdhRequireMatchingFile :: Lens' StaticDirectoryHandler (Maybe Bool)
+sdhRequireMatchingFile
+  = lens _sdhRequireMatchingFile
+      (\ s a -> s{_sdhRequireMatchingFile = a})
+
+-- | The length of time a static file served by this handler ought to be
+-- cached by web proxies and browsers.
+sdhExpiration :: Lens' StaticDirectoryHandler (Maybe Text)
+sdhExpiration
+  = lens _sdhExpiration
+      (\ s a -> s{_sdhExpiration = a})
+
+-- | If specified, all files served by this handler will be served using the
+-- specified MIME type. If not specified, the MIME type for a file will be
+-- derived from the file\'s filename extension.
+sdhMimeType :: Lens' StaticDirectoryHandler (Maybe Text)
+sdhMimeType
+  = lens _sdhMimeType (\ s a -> s{_sdhMimeType = a})
+
+-- | By default, files declared in static file handlers are uploaded as
+-- static data and are only served to end users, they cannot be read by an
+-- application. If this field is set to true, the files are also uploaded
+-- as code data so your application can read them. Both uploads are charged
+-- against your code and static data storage resource quotas.
+sdhApplicationReadable :: Lens' StaticDirectoryHandler (Maybe Bool)
+sdhApplicationReadable
+  = lens _sdhApplicationReadable
+      (\ s a -> s{_sdhApplicationReadable = a})
+
+-- | The path to the directory containing the static files, from the
+-- application root directory. Everything after the end of the matched url
+-- pattern is appended to static_dir to form the full path to the requested
+-- file.
+sdhDirectory :: Lens' StaticDirectoryHandler (Maybe Text)
+sdhDirectory
+  = lens _sdhDirectory (\ s a -> s{_sdhDirectory = a})
+
+instance FromJSON StaticDirectoryHandler where
+        parseJSON
+          = withObject "StaticDirectoryHandler"
+              (\ o ->
+                 StaticDirectoryHandler <$>
+                   (o .:? "httpHeaders") <*>
+                     (o .:? "requireMatchingFile")
+                     <*> (o .:? "expiration")
+                     <*> (o .:? "mimeType")
+                     <*> (o .:? "applicationReadable")
+                     <*> (o .:? "directory"))
+
+instance ToJSON StaticDirectoryHandler where
+        toJSON StaticDirectoryHandler{..}
+          = object
+              (catMaybes
+                 [("httpHeaders" .=) <$> _sdhHTTPHeaders,
+                  ("requireMatchingFile" .=) <$>
+                    _sdhRequireMatchingFile,
+                  ("expiration" .=) <$> _sdhExpiration,
+                  ("mimeType" .=) <$> _sdhMimeType,
+                  ("applicationReadable" .=) <$>
+                    _sdhApplicationReadable,
+                  ("directory" .=) <$> _sdhDirectory])
diff --git a/gen/Network/Google/AppEngine/Types/Sum.hs b/gen/Network/Google/AppEngine/Types/Sum.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/AppEngine/Types/Sum.hs
@@ -0,0 +1,19 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE LambdaCase         #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- |
+-- Module      : Network.Google.AppEngine.Types.Sum
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+module Network.Google.AppEngine.Types.Sum where
+
+import           Network.Google.Prelude
diff --git a/gen/Network/Google/Resource/AppEngine/Apps/Get.hs b/gen/Network/Google/Resource/AppEngine/Apps/Get.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/AppEngine/Apps/Get.hs
@@ -0,0 +1,181 @@
+{-# 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.AppEngine.Apps.Get
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Gets information about an application.
+--
+-- /See:/ <https://developers.google.com/appengine/ Google App Engine Admin API Reference> for @appengine.apps.get@.
+module Network.Google.Resource.AppEngine.Apps.Get
+    (
+    -- * REST Resource
+      AppsGetResource
+
+    -- * Creating a Request
+    , appsGet
+    , AppsGet
+
+    -- * Request Lenses
+    , agXgafv
+    , agUploadProtocol
+    , agPp
+    , agAccessToken
+    , agUploadType
+    , agBearerToken
+    , agAppsId
+    , agEnsureResourcesExist
+    , agCallback
+    ) where
+
+import           Network.Google.AppEngine.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @appengine.apps.get@ method which the
+-- 'AppsGet' request conforms to.
+type AppsGetResource =
+     "v1beta4" :>
+       "apps" :>
+         Capture "appsId" Text :>
+           QueryParam "$.xgafv" Text :>
+             QueryParam "upload_protocol" Text :>
+               QueryParam "pp" Bool :>
+                 QueryParam "access_token" Text :>
+                   QueryParam "uploadType" Text :>
+                     QueryParam "bearer_token" Text :>
+                       QueryParam "ensureResourcesExist" Bool :>
+                         QueryParam "callback" Text :>
+                           QueryParam "alt" AltJSON :> Get '[JSON] Application
+
+-- | Gets information about an application.
+--
+-- /See:/ 'appsGet' smart constructor.
+data AppsGet = AppsGet
+    { _agXgafv                :: !(Maybe Text)
+    , _agUploadProtocol       :: !(Maybe Text)
+    , _agPp                   :: !Bool
+    , _agAccessToken          :: !(Maybe Text)
+    , _agUploadType           :: !(Maybe Text)
+    , _agBearerToken          :: !(Maybe Text)
+    , _agAppsId               :: !Text
+    , _agEnsureResourcesExist :: !(Maybe Bool)
+    , _agCallback             :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'AppsGet' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'agXgafv'
+--
+-- * 'agUploadProtocol'
+--
+-- * 'agPp'
+--
+-- * 'agAccessToken'
+--
+-- * 'agUploadType'
+--
+-- * 'agBearerToken'
+--
+-- * 'agAppsId'
+--
+-- * 'agEnsureResourcesExist'
+--
+-- * 'agCallback'
+appsGet
+    :: Text -- ^ 'agAppsId'
+    -> AppsGet
+appsGet pAgAppsId_ =
+    AppsGet
+    { _agXgafv = Nothing
+    , _agUploadProtocol = Nothing
+    , _agPp = True
+    , _agAccessToken = Nothing
+    , _agUploadType = Nothing
+    , _agBearerToken = Nothing
+    , _agAppsId = pAgAppsId_
+    , _agEnsureResourcesExist = Nothing
+    , _agCallback = Nothing
+    }
+
+-- | V1 error format.
+agXgafv :: Lens' AppsGet (Maybe Text)
+agXgafv = lens _agXgafv (\ s a -> s{_agXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+agUploadProtocol :: Lens' AppsGet (Maybe Text)
+agUploadProtocol
+  = lens _agUploadProtocol
+      (\ s a -> s{_agUploadProtocol = a})
+
+-- | Pretty-print response.
+agPp :: Lens' AppsGet Bool
+agPp = lens _agPp (\ s a -> s{_agPp = a})
+
+-- | OAuth access token.
+agAccessToken :: Lens' AppsGet (Maybe Text)
+agAccessToken
+  = lens _agAccessToken
+      (\ s a -> s{_agAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+agUploadType :: Lens' AppsGet (Maybe Text)
+agUploadType
+  = lens _agUploadType (\ s a -> s{_agUploadType = a})
+
+-- | OAuth bearer token.
+agBearerToken :: Lens' AppsGet (Maybe Text)
+agBearerToken
+  = lens _agBearerToken
+      (\ s a -> s{_agBearerToken = a})
+
+-- | Part of \`name\`. Name of the application to get. For example:
+-- \"apps\/myapp\".
+agAppsId :: Lens' AppsGet Text
+agAppsId = lens _agAppsId (\ s a -> s{_agAppsId = a})
+
+-- | Certain resources associated with an application are created on-demand.
+-- Controls whether these resources should be created when performing the
+-- \`GET\` operation. If specified and any resources cloud not be created,
+-- the request will fail with an error code.
+agEnsureResourcesExist :: Lens' AppsGet (Maybe Bool)
+agEnsureResourcesExist
+  = lens _agEnsureResourcesExist
+      (\ s a -> s{_agEnsureResourcesExist = a})
+
+-- | JSONP
+agCallback :: Lens' AppsGet (Maybe Text)
+agCallback
+  = lens _agCallback (\ s a -> s{_agCallback = a})
+
+instance GoogleRequest AppsGet where
+        type Rs AppsGet = Application
+        requestClient AppsGet{..}
+          = go _agAppsId _agXgafv _agUploadProtocol
+              (Just _agPp)
+              _agAccessToken
+              _agUploadType
+              _agBearerToken
+              _agEnsureResourcesExist
+              _agCallback
+              (Just AltJSON)
+              appEngineService
+          where go
+                  = buildClient (Proxy :: Proxy AppsGetResource) mempty
diff --git a/gen/Network/Google/Resource/AppEngine/Apps/Modules/Delete.hs b/gen/Network/Google/Resource/AppEngine/Apps/Modules/Delete.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/AppEngine/Apps/Modules/Delete.hs
@@ -0,0 +1,184 @@
+{-# 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.AppEngine.Apps.Modules.Delete
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes a module and all enclosed versions.
+--
+-- /See:/ <https://developers.google.com/appengine/ Google App Engine Admin API Reference> for @appengine.apps.modules.delete@.
+module Network.Google.Resource.AppEngine.Apps.Modules.Delete
+    (
+    -- * REST Resource
+      AppsModulesDeleteResource
+
+    -- * Creating a Request
+    , appsModulesDelete
+    , AppsModulesDelete
+
+    -- * Request Lenses
+    , amdXgafv
+    , amdUploadProtocol
+    , amdPp
+    , amdAccessToken
+    , amdUploadType
+    , amdModulesId
+    , amdBearerToken
+    , amdAppsId
+    , amdCallback
+    ) where
+
+import           Network.Google.AppEngine.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @appengine.apps.modules.delete@ method which the
+-- 'AppsModulesDelete' request conforms to.
+type AppsModulesDeleteResource =
+     "v1beta4" :>
+       "apps" :>
+         Capture "appsId" Text :>
+           "modules" :>
+             Capture "modulesId" Text :>
+               QueryParam "$.xgafv" Text :>
+                 QueryParam "upload_protocol" Text :>
+                   QueryParam "pp" Bool :>
+                     QueryParam "access_token" Text :>
+                       QueryParam "uploadType" Text :>
+                         QueryParam "bearer_token" Text :>
+                           QueryParam "callback" Text :>
+                             QueryParam "alt" AltJSON :>
+                               Delete '[JSON] Operation
+
+-- | Deletes a module and all enclosed versions.
+--
+-- /See:/ 'appsModulesDelete' smart constructor.
+data AppsModulesDelete = AppsModulesDelete
+    { _amdXgafv          :: !(Maybe Text)
+    , _amdUploadProtocol :: !(Maybe Text)
+    , _amdPp             :: !Bool
+    , _amdAccessToken    :: !(Maybe Text)
+    , _amdUploadType     :: !(Maybe Text)
+    , _amdModulesId      :: !Text
+    , _amdBearerToken    :: !(Maybe Text)
+    , _amdAppsId         :: !Text
+    , _amdCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'AppsModulesDelete' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'amdXgafv'
+--
+-- * 'amdUploadProtocol'
+--
+-- * 'amdPp'
+--
+-- * 'amdAccessToken'
+--
+-- * 'amdUploadType'
+--
+-- * 'amdModulesId'
+--
+-- * 'amdBearerToken'
+--
+-- * 'amdAppsId'
+--
+-- * 'amdCallback'
+appsModulesDelete
+    :: Text -- ^ 'amdModulesId'
+    -> Text -- ^ 'amdAppsId'
+    -> AppsModulesDelete
+appsModulesDelete pAmdModulesId_ pAmdAppsId_ =
+    AppsModulesDelete
+    { _amdXgafv = Nothing
+    , _amdUploadProtocol = Nothing
+    , _amdPp = True
+    , _amdAccessToken = Nothing
+    , _amdUploadType = Nothing
+    , _amdModulesId = pAmdModulesId_
+    , _amdBearerToken = Nothing
+    , _amdAppsId = pAmdAppsId_
+    , _amdCallback = Nothing
+    }
+
+-- | V1 error format.
+amdXgafv :: Lens' AppsModulesDelete (Maybe Text)
+amdXgafv = lens _amdXgafv (\ s a -> s{_amdXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+amdUploadProtocol :: Lens' AppsModulesDelete (Maybe Text)
+amdUploadProtocol
+  = lens _amdUploadProtocol
+      (\ s a -> s{_amdUploadProtocol = a})
+
+-- | Pretty-print response.
+amdPp :: Lens' AppsModulesDelete Bool
+amdPp = lens _amdPp (\ s a -> s{_amdPp = a})
+
+-- | OAuth access token.
+amdAccessToken :: Lens' AppsModulesDelete (Maybe Text)
+amdAccessToken
+  = lens _amdAccessToken
+      (\ s a -> s{_amdAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+amdUploadType :: Lens' AppsModulesDelete (Maybe Text)
+amdUploadType
+  = lens _amdUploadType
+      (\ s a -> s{_amdUploadType = a})
+
+-- | Part of \`name\`. See documentation of \`appsId\`.
+amdModulesId :: Lens' AppsModulesDelete Text
+amdModulesId
+  = lens _amdModulesId (\ s a -> s{_amdModulesId = a})
+
+-- | OAuth bearer token.
+amdBearerToken :: Lens' AppsModulesDelete (Maybe Text)
+amdBearerToken
+  = lens _amdBearerToken
+      (\ s a -> s{_amdBearerToken = a})
+
+-- | Part of \`name\`. Name of the resource requested. For example:
+-- \"apps\/myapp\/modules\/default\".
+amdAppsId :: Lens' AppsModulesDelete Text
+amdAppsId
+  = lens _amdAppsId (\ s a -> s{_amdAppsId = a})
+
+-- | JSONP
+amdCallback :: Lens' AppsModulesDelete (Maybe Text)
+amdCallback
+  = lens _amdCallback (\ s a -> s{_amdCallback = a})
+
+instance GoogleRequest AppsModulesDelete where
+        type Rs AppsModulesDelete = Operation
+        requestClient AppsModulesDelete{..}
+          = go _amdAppsId _amdModulesId _amdXgafv
+              _amdUploadProtocol
+              (Just _amdPp)
+              _amdAccessToken
+              _amdUploadType
+              _amdBearerToken
+              _amdCallback
+              (Just AltJSON)
+              appEngineService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy AppsModulesDeleteResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/AppEngine/Apps/Modules/Get.hs b/gen/Network/Google/Resource/AppEngine/Apps/Modules/Get.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/AppEngine/Apps/Modules/Get.hs
@@ -0,0 +1,182 @@
+{-# 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.AppEngine.Apps.Modules.Get
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Gets the current configuration of the module.
+--
+-- /See:/ <https://developers.google.com/appengine/ Google App Engine Admin API Reference> for @appengine.apps.modules.get@.
+module Network.Google.Resource.AppEngine.Apps.Modules.Get
+    (
+    -- * REST Resource
+      AppsModulesGetResource
+
+    -- * Creating a Request
+    , appsModulesGet
+    , AppsModulesGet
+
+    -- * Request Lenses
+    , amgXgafv
+    , amgUploadProtocol
+    , amgPp
+    , amgAccessToken
+    , amgUploadType
+    , amgModulesId
+    , amgBearerToken
+    , amgAppsId
+    , amgCallback
+    ) where
+
+import           Network.Google.AppEngine.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @appengine.apps.modules.get@ method which the
+-- 'AppsModulesGet' request conforms to.
+type AppsModulesGetResource =
+     "v1beta4" :>
+       "apps" :>
+         Capture "appsId" Text :>
+           "modules" :>
+             Capture "modulesId" Text :>
+               QueryParam "$.xgafv" Text :>
+                 QueryParam "upload_protocol" Text :>
+                   QueryParam "pp" Bool :>
+                     QueryParam "access_token" Text :>
+                       QueryParam "uploadType" Text :>
+                         QueryParam "bearer_token" Text :>
+                           QueryParam "callback" Text :>
+                             QueryParam "alt" AltJSON :> Get '[JSON] Module
+
+-- | Gets the current configuration of the module.
+--
+-- /See:/ 'appsModulesGet' smart constructor.
+data AppsModulesGet = AppsModulesGet
+    { _amgXgafv          :: !(Maybe Text)
+    , _amgUploadProtocol :: !(Maybe Text)
+    , _amgPp             :: !Bool
+    , _amgAccessToken    :: !(Maybe Text)
+    , _amgUploadType     :: !(Maybe Text)
+    , _amgModulesId      :: !Text
+    , _amgBearerToken    :: !(Maybe Text)
+    , _amgAppsId         :: !Text
+    , _amgCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'AppsModulesGet' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'amgXgafv'
+--
+-- * 'amgUploadProtocol'
+--
+-- * 'amgPp'
+--
+-- * 'amgAccessToken'
+--
+-- * 'amgUploadType'
+--
+-- * 'amgModulesId'
+--
+-- * 'amgBearerToken'
+--
+-- * 'amgAppsId'
+--
+-- * 'amgCallback'
+appsModulesGet
+    :: Text -- ^ 'amgModulesId'
+    -> Text -- ^ 'amgAppsId'
+    -> AppsModulesGet
+appsModulesGet pAmgModulesId_ pAmgAppsId_ =
+    AppsModulesGet
+    { _amgXgafv = Nothing
+    , _amgUploadProtocol = Nothing
+    , _amgPp = True
+    , _amgAccessToken = Nothing
+    , _amgUploadType = Nothing
+    , _amgModulesId = pAmgModulesId_
+    , _amgBearerToken = Nothing
+    , _amgAppsId = pAmgAppsId_
+    , _amgCallback = Nothing
+    }
+
+-- | V1 error format.
+amgXgafv :: Lens' AppsModulesGet (Maybe Text)
+amgXgafv = lens _amgXgafv (\ s a -> s{_amgXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+amgUploadProtocol :: Lens' AppsModulesGet (Maybe Text)
+amgUploadProtocol
+  = lens _amgUploadProtocol
+      (\ s a -> s{_amgUploadProtocol = a})
+
+-- | Pretty-print response.
+amgPp :: Lens' AppsModulesGet Bool
+amgPp = lens _amgPp (\ s a -> s{_amgPp = a})
+
+-- | OAuth access token.
+amgAccessToken :: Lens' AppsModulesGet (Maybe Text)
+amgAccessToken
+  = lens _amgAccessToken
+      (\ s a -> s{_amgAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+amgUploadType :: Lens' AppsModulesGet (Maybe Text)
+amgUploadType
+  = lens _amgUploadType
+      (\ s a -> s{_amgUploadType = a})
+
+-- | Part of \`name\`. See documentation of \`appsId\`.
+amgModulesId :: Lens' AppsModulesGet Text
+amgModulesId
+  = lens _amgModulesId (\ s a -> s{_amgModulesId = a})
+
+-- | OAuth bearer token.
+amgBearerToken :: Lens' AppsModulesGet (Maybe Text)
+amgBearerToken
+  = lens _amgBearerToken
+      (\ s a -> s{_amgBearerToken = a})
+
+-- | Part of \`name\`. Name of the resource requested. For example:
+-- \"apps\/myapp\/modules\/default\".
+amgAppsId :: Lens' AppsModulesGet Text
+amgAppsId
+  = lens _amgAppsId (\ s a -> s{_amgAppsId = a})
+
+-- | JSONP
+amgCallback :: Lens' AppsModulesGet (Maybe Text)
+amgCallback
+  = lens _amgCallback (\ s a -> s{_amgCallback = a})
+
+instance GoogleRequest AppsModulesGet where
+        type Rs AppsModulesGet = Module
+        requestClient AppsModulesGet{..}
+          = go _amgAppsId _amgModulesId _amgXgafv
+              _amgUploadProtocol
+              (Just _amgPp)
+              _amgAccessToken
+              _amgUploadType
+              _amgBearerToken
+              _amgCallback
+              (Just AltJSON)
+              appEngineService
+          where go
+                  = buildClient (Proxy :: Proxy AppsModulesGetResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/AppEngine/Apps/Modules/List.hs b/gen/Network/Google/Resource/AppEngine/Apps/Modules/List.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/AppEngine/Apps/Modules/List.hs
@@ -0,0 +1,196 @@
+{-# 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.AppEngine.Apps.Modules.List
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Lists all the modules in the application.
+--
+-- /See:/ <https://developers.google.com/appengine/ Google App Engine Admin API Reference> for @appengine.apps.modules.list@.
+module Network.Google.Resource.AppEngine.Apps.Modules.List
+    (
+    -- * REST Resource
+      AppsModulesListResource
+
+    -- * Creating a Request
+    , appsModulesList
+    , AppsModulesList
+
+    -- * Request Lenses
+    , amlXgafv
+    , amlUploadProtocol
+    , amlPp
+    , amlAccessToken
+    , amlUploadType
+    , amlBearerToken
+    , amlAppsId
+    , amlPageToken
+    , amlPageSize
+    , amlCallback
+    ) where
+
+import           Network.Google.AppEngine.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @appengine.apps.modules.list@ method which the
+-- 'AppsModulesList' request conforms to.
+type AppsModulesListResource =
+     "v1beta4" :>
+       "apps" :>
+         Capture "appsId" Text :>
+           "modules" :>
+             QueryParam "$.xgafv" Text :>
+               QueryParam "upload_protocol" Text :>
+                 QueryParam "pp" Bool :>
+                   QueryParam "access_token" Text :>
+                     QueryParam "uploadType" Text :>
+                       QueryParam "bearer_token" Text :>
+                         QueryParam "pageToken" Text :>
+                           QueryParam "pageSize" (Textual Int32) :>
+                             QueryParam "callback" Text :>
+                               QueryParam "alt" AltJSON :>
+                                 Get '[JSON] ListModulesResponse
+
+-- | Lists all the modules in the application.
+--
+-- /See:/ 'appsModulesList' smart constructor.
+data AppsModulesList = AppsModulesList
+    { _amlXgafv          :: !(Maybe Text)
+    , _amlUploadProtocol :: !(Maybe Text)
+    , _amlPp             :: !Bool
+    , _amlAccessToken    :: !(Maybe Text)
+    , _amlUploadType     :: !(Maybe Text)
+    , _amlBearerToken    :: !(Maybe Text)
+    , _amlAppsId         :: !Text
+    , _amlPageToken      :: !(Maybe Text)
+    , _amlPageSize       :: !(Maybe (Textual Int32))
+    , _amlCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'AppsModulesList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'amlXgafv'
+--
+-- * 'amlUploadProtocol'
+--
+-- * 'amlPp'
+--
+-- * 'amlAccessToken'
+--
+-- * 'amlUploadType'
+--
+-- * 'amlBearerToken'
+--
+-- * 'amlAppsId'
+--
+-- * 'amlPageToken'
+--
+-- * 'amlPageSize'
+--
+-- * 'amlCallback'
+appsModulesList
+    :: Text -- ^ 'amlAppsId'
+    -> AppsModulesList
+appsModulesList pAmlAppsId_ =
+    AppsModulesList
+    { _amlXgafv = Nothing
+    , _amlUploadProtocol = Nothing
+    , _amlPp = True
+    , _amlAccessToken = Nothing
+    , _amlUploadType = Nothing
+    , _amlBearerToken = Nothing
+    , _amlAppsId = pAmlAppsId_
+    , _amlPageToken = Nothing
+    , _amlPageSize = Nothing
+    , _amlCallback = Nothing
+    }
+
+-- | V1 error format.
+amlXgafv :: Lens' AppsModulesList (Maybe Text)
+amlXgafv = lens _amlXgafv (\ s a -> s{_amlXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+amlUploadProtocol :: Lens' AppsModulesList (Maybe Text)
+amlUploadProtocol
+  = lens _amlUploadProtocol
+      (\ s a -> s{_amlUploadProtocol = a})
+
+-- | Pretty-print response.
+amlPp :: Lens' AppsModulesList Bool
+amlPp = lens _amlPp (\ s a -> s{_amlPp = a})
+
+-- | OAuth access token.
+amlAccessToken :: Lens' AppsModulesList (Maybe Text)
+amlAccessToken
+  = lens _amlAccessToken
+      (\ s a -> s{_amlAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+amlUploadType :: Lens' AppsModulesList (Maybe Text)
+amlUploadType
+  = lens _amlUploadType
+      (\ s a -> s{_amlUploadType = a})
+
+-- | OAuth bearer token.
+amlBearerToken :: Lens' AppsModulesList (Maybe Text)
+amlBearerToken
+  = lens _amlBearerToken
+      (\ s a -> s{_amlBearerToken = a})
+
+-- | Part of \`name\`. Name of the resource requested. For example:
+-- \"apps\/myapp\".
+amlAppsId :: Lens' AppsModulesList Text
+amlAppsId
+  = lens _amlAppsId (\ s a -> s{_amlAppsId = a})
+
+-- | Continuation token for fetching the next page of results.
+amlPageToken :: Lens' AppsModulesList (Maybe Text)
+amlPageToken
+  = lens _amlPageToken (\ s a -> s{_amlPageToken = a})
+
+-- | Maximum results to return per page.
+amlPageSize :: Lens' AppsModulesList (Maybe Int32)
+amlPageSize
+  = lens _amlPageSize (\ s a -> s{_amlPageSize = a}) .
+      mapping _Coerce
+
+-- | JSONP
+amlCallback :: Lens' AppsModulesList (Maybe Text)
+amlCallback
+  = lens _amlCallback (\ s a -> s{_amlCallback = a})
+
+instance GoogleRequest AppsModulesList where
+        type Rs AppsModulesList = ListModulesResponse
+        requestClient AppsModulesList{..}
+          = go _amlAppsId _amlXgafv _amlUploadProtocol
+              (Just _amlPp)
+              _amlAccessToken
+              _amlUploadType
+              _amlBearerToken
+              _amlPageToken
+              _amlPageSize
+              _amlCallback
+              (Just AltJSON)
+              appEngineService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy AppsModulesListResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/AppEngine/Apps/Modules/Patch.hs b/gen/Network/Google/Resource/AppEngine/Apps/Modules/Patch.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/AppEngine/Apps/Modules/Patch.hs
@@ -0,0 +1,222 @@
+{-# 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.AppEngine.Apps.Modules.Patch
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Updates the configuration of the specified module.
+--
+-- /See:/ <https://developers.google.com/appengine/ Google App Engine Admin API Reference> for @appengine.apps.modules.patch@.
+module Network.Google.Resource.AppEngine.Apps.Modules.Patch
+    (
+    -- * REST Resource
+      AppsModulesPatchResource
+
+    -- * Creating a Request
+    , appsModulesPatch
+    , AppsModulesPatch
+
+    -- * Request Lenses
+    , ampXgafv
+    , ampUploadProtocol
+    , ampPp
+    , ampAccessToken
+    , ampUploadType
+    , ampPayload
+    , ampModulesId
+    , ampMigrateTraffic
+    , ampMask
+    , ampBearerToken
+    , ampAppsId
+    , ampCallback
+    ) where
+
+import           Network.Google.AppEngine.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @appengine.apps.modules.patch@ method which the
+-- 'AppsModulesPatch' request conforms to.
+type AppsModulesPatchResource =
+     "v1beta4" :>
+       "apps" :>
+         Capture "appsId" Text :>
+           "modules" :>
+             Capture "modulesId" Text :>
+               QueryParam "$.xgafv" Text :>
+                 QueryParam "upload_protocol" Text :>
+                   QueryParam "pp" Bool :>
+                     QueryParam "access_token" Text :>
+                       QueryParam "uploadType" Text :>
+                         QueryParam "migrateTraffic" Bool :>
+                           QueryParam "mask" Text :>
+                             QueryParam "bearer_token" Text :>
+                               QueryParam "callback" Text :>
+                                 QueryParam "alt" AltJSON :>
+                                   ReqBody '[JSON] Module :>
+                                     Patch '[JSON] Operation
+
+-- | Updates the configuration of the specified module.
+--
+-- /See:/ 'appsModulesPatch' smart constructor.
+data AppsModulesPatch = AppsModulesPatch
+    { _ampXgafv          :: !(Maybe Text)
+    , _ampUploadProtocol :: !(Maybe Text)
+    , _ampPp             :: !Bool
+    , _ampAccessToken    :: !(Maybe Text)
+    , _ampUploadType     :: !(Maybe Text)
+    , _ampPayload        :: !Module
+    , _ampModulesId      :: !Text
+    , _ampMigrateTraffic :: !(Maybe Bool)
+    , _ampMask           :: !(Maybe Text)
+    , _ampBearerToken    :: !(Maybe Text)
+    , _ampAppsId         :: !Text
+    , _ampCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'AppsModulesPatch' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ampXgafv'
+--
+-- * 'ampUploadProtocol'
+--
+-- * 'ampPp'
+--
+-- * 'ampAccessToken'
+--
+-- * 'ampUploadType'
+--
+-- * 'ampPayload'
+--
+-- * 'ampModulesId'
+--
+-- * 'ampMigrateTraffic'
+--
+-- * 'ampMask'
+--
+-- * 'ampBearerToken'
+--
+-- * 'ampAppsId'
+--
+-- * 'ampCallback'
+appsModulesPatch
+    :: Module -- ^ 'ampPayload'
+    -> Text -- ^ 'ampModulesId'
+    -> Text -- ^ 'ampAppsId'
+    -> AppsModulesPatch
+appsModulesPatch pAmpPayload_ pAmpModulesId_ pAmpAppsId_ =
+    AppsModulesPatch
+    { _ampXgafv = Nothing
+    , _ampUploadProtocol = Nothing
+    , _ampPp = True
+    , _ampAccessToken = Nothing
+    , _ampUploadType = Nothing
+    , _ampPayload = pAmpPayload_
+    , _ampModulesId = pAmpModulesId_
+    , _ampMigrateTraffic = Nothing
+    , _ampMask = Nothing
+    , _ampBearerToken = Nothing
+    , _ampAppsId = pAmpAppsId_
+    , _ampCallback = Nothing
+    }
+
+-- | V1 error format.
+ampXgafv :: Lens' AppsModulesPatch (Maybe Text)
+ampXgafv = lens _ampXgafv (\ s a -> s{_ampXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+ampUploadProtocol :: Lens' AppsModulesPatch (Maybe Text)
+ampUploadProtocol
+  = lens _ampUploadProtocol
+      (\ s a -> s{_ampUploadProtocol = a})
+
+-- | Pretty-print response.
+ampPp :: Lens' AppsModulesPatch Bool
+ampPp = lens _ampPp (\ s a -> s{_ampPp = a})
+
+-- | OAuth access token.
+ampAccessToken :: Lens' AppsModulesPatch (Maybe Text)
+ampAccessToken
+  = lens _ampAccessToken
+      (\ s a -> s{_ampAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+ampUploadType :: Lens' AppsModulesPatch (Maybe Text)
+ampUploadType
+  = lens _ampUploadType
+      (\ s a -> s{_ampUploadType = a})
+
+-- | Multipart request metadata.
+ampPayload :: Lens' AppsModulesPatch Module
+ampPayload
+  = lens _ampPayload (\ s a -> s{_ampPayload = a})
+
+-- | Part of \`name\`. See documentation of \`appsId\`.
+ampModulesId :: Lens' AppsModulesPatch Text
+ampModulesId
+  = lens _ampModulesId (\ s a -> s{_ampModulesId = a})
+
+-- | Whether to use Traffic Migration to shift traffic gradually. Traffic can
+-- only be migrated from a single version to another single version.
+ampMigrateTraffic :: Lens' AppsModulesPatch (Maybe Bool)
+ampMigrateTraffic
+  = lens _ampMigrateTraffic
+      (\ s a -> s{_ampMigrateTraffic = a})
+
+-- | Standard field mask for the set of fields to be updated.
+ampMask :: Lens' AppsModulesPatch (Maybe Text)
+ampMask = lens _ampMask (\ s a -> s{_ampMask = a})
+
+-- | OAuth bearer token.
+ampBearerToken :: Lens' AppsModulesPatch (Maybe Text)
+ampBearerToken
+  = lens _ampBearerToken
+      (\ s a -> s{_ampBearerToken = a})
+
+-- | Part of \`name\`. Name of the resource to update. For example:
+-- \"apps\/myapp\/modules\/default\".
+ampAppsId :: Lens' AppsModulesPatch Text
+ampAppsId
+  = lens _ampAppsId (\ s a -> s{_ampAppsId = a})
+
+-- | JSONP
+ampCallback :: Lens' AppsModulesPatch (Maybe Text)
+ampCallback
+  = lens _ampCallback (\ s a -> s{_ampCallback = a})
+
+instance GoogleRequest AppsModulesPatch where
+        type Rs AppsModulesPatch = Operation
+        requestClient AppsModulesPatch{..}
+          = go _ampAppsId _ampModulesId _ampXgafv
+              _ampUploadProtocol
+              (Just _ampPp)
+              _ampAccessToken
+              _ampUploadType
+              _ampMigrateTraffic
+              _ampMask
+              _ampBearerToken
+              _ampCallback
+              (Just AltJSON)
+              _ampPayload
+              appEngineService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy AppsModulesPatchResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/AppEngine/Apps/Modules/Versions/Create.hs b/gen/Network/Google/Resource/AppEngine/Apps/Modules/Versions/Create.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/AppEngine/Apps/Modules/Versions/Create.hs
@@ -0,0 +1,201 @@
+{-# 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.AppEngine.Apps.Modules.Versions.Create
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deploys new code and resource files to a version.
+--
+-- /See:/ <https://developers.google.com/appengine/ Google App Engine Admin API Reference> for @appengine.apps.modules.versions.create@.
+module Network.Google.Resource.AppEngine.Apps.Modules.Versions.Create
+    (
+    -- * REST Resource
+      AppsModulesVersionsCreateResource
+
+    -- * Creating a Request
+    , appsModulesVersionsCreate
+    , AppsModulesVersionsCreate
+
+    -- * Request Lenses
+    , amvcXgafv
+    , amvcUploadProtocol
+    , amvcPp
+    , amvcAccessToken
+    , amvcUploadType
+    , amvcPayload
+    , amvcModulesId
+    , amvcBearerToken
+    , amvcAppsId
+    , amvcCallback
+    ) where
+
+import           Network.Google.AppEngine.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @appengine.apps.modules.versions.create@ method which the
+-- 'AppsModulesVersionsCreate' request conforms to.
+type AppsModulesVersionsCreateResource =
+     "v1beta4" :>
+       "apps" :>
+         Capture "appsId" Text :>
+           "modules" :>
+             Capture "modulesId" Text :>
+               "versions" :>
+                 QueryParam "$.xgafv" Text :>
+                   QueryParam "upload_protocol" Text :>
+                     QueryParam "pp" Bool :>
+                       QueryParam "access_token" Text :>
+                         QueryParam "uploadType" Text :>
+                           QueryParam "bearer_token" Text :>
+                             QueryParam "callback" Text :>
+                               QueryParam "alt" AltJSON :>
+                                 ReqBody '[JSON] Version :>
+                                   Post '[JSON] Operation
+
+-- | Deploys new code and resource files to a version.
+--
+-- /See:/ 'appsModulesVersionsCreate' smart constructor.
+data AppsModulesVersionsCreate = AppsModulesVersionsCreate
+    { _amvcXgafv          :: !(Maybe Text)
+    , _amvcUploadProtocol :: !(Maybe Text)
+    , _amvcPp             :: !Bool
+    , _amvcAccessToken    :: !(Maybe Text)
+    , _amvcUploadType     :: !(Maybe Text)
+    , _amvcPayload        :: !Version
+    , _amvcModulesId      :: !Text
+    , _amvcBearerToken    :: !(Maybe Text)
+    , _amvcAppsId         :: !Text
+    , _amvcCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'AppsModulesVersionsCreate' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'amvcXgafv'
+--
+-- * 'amvcUploadProtocol'
+--
+-- * 'amvcPp'
+--
+-- * 'amvcAccessToken'
+--
+-- * 'amvcUploadType'
+--
+-- * 'amvcPayload'
+--
+-- * 'amvcModulesId'
+--
+-- * 'amvcBearerToken'
+--
+-- * 'amvcAppsId'
+--
+-- * 'amvcCallback'
+appsModulesVersionsCreate
+    :: Version -- ^ 'amvcPayload'
+    -> Text -- ^ 'amvcModulesId'
+    -> Text -- ^ 'amvcAppsId'
+    -> AppsModulesVersionsCreate
+appsModulesVersionsCreate pAmvcPayload_ pAmvcModulesId_ pAmvcAppsId_ =
+    AppsModulesVersionsCreate
+    { _amvcXgafv = Nothing
+    , _amvcUploadProtocol = Nothing
+    , _amvcPp = True
+    , _amvcAccessToken = Nothing
+    , _amvcUploadType = Nothing
+    , _amvcPayload = pAmvcPayload_
+    , _amvcModulesId = pAmvcModulesId_
+    , _amvcBearerToken = Nothing
+    , _amvcAppsId = pAmvcAppsId_
+    , _amvcCallback = Nothing
+    }
+
+-- | V1 error format.
+amvcXgafv :: Lens' AppsModulesVersionsCreate (Maybe Text)
+amvcXgafv
+  = lens _amvcXgafv (\ s a -> s{_amvcXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+amvcUploadProtocol :: Lens' AppsModulesVersionsCreate (Maybe Text)
+amvcUploadProtocol
+  = lens _amvcUploadProtocol
+      (\ s a -> s{_amvcUploadProtocol = a})
+
+-- | Pretty-print response.
+amvcPp :: Lens' AppsModulesVersionsCreate Bool
+amvcPp = lens _amvcPp (\ s a -> s{_amvcPp = a})
+
+-- | OAuth access token.
+amvcAccessToken :: Lens' AppsModulesVersionsCreate (Maybe Text)
+amvcAccessToken
+  = lens _amvcAccessToken
+      (\ s a -> s{_amvcAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+amvcUploadType :: Lens' AppsModulesVersionsCreate (Maybe Text)
+amvcUploadType
+  = lens _amvcUploadType
+      (\ s a -> s{_amvcUploadType = a})
+
+-- | Multipart request metadata.
+amvcPayload :: Lens' AppsModulesVersionsCreate Version
+amvcPayload
+  = lens _amvcPayload (\ s a -> s{_amvcPayload = a})
+
+-- | Part of \`name\`. See documentation of \`appsId\`.
+amvcModulesId :: Lens' AppsModulesVersionsCreate Text
+amvcModulesId
+  = lens _amvcModulesId
+      (\ s a -> s{_amvcModulesId = a})
+
+-- | OAuth bearer token.
+amvcBearerToken :: Lens' AppsModulesVersionsCreate (Maybe Text)
+amvcBearerToken
+  = lens _amvcBearerToken
+      (\ s a -> s{_amvcBearerToken = a})
+
+-- | Part of \`name\`. Name of the resource to update. For example:
+-- \"apps\/myapp\/modules\/default\".
+amvcAppsId :: Lens' AppsModulesVersionsCreate Text
+amvcAppsId
+  = lens _amvcAppsId (\ s a -> s{_amvcAppsId = a})
+
+-- | JSONP
+amvcCallback :: Lens' AppsModulesVersionsCreate (Maybe Text)
+amvcCallback
+  = lens _amvcCallback (\ s a -> s{_amvcCallback = a})
+
+instance GoogleRequest AppsModulesVersionsCreate
+         where
+        type Rs AppsModulesVersionsCreate = Operation
+        requestClient AppsModulesVersionsCreate{..}
+          = go _amvcAppsId _amvcModulesId _amvcXgafv
+              _amvcUploadProtocol
+              (Just _amvcPp)
+              _amvcAccessToken
+              _amvcUploadType
+              _amvcBearerToken
+              _amvcCallback
+              (Just AltJSON)
+              _amvcPayload
+              appEngineService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy AppsModulesVersionsCreateResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/AppEngine/Apps/Modules/Versions/Delete.hs b/gen/Network/Google/Resource/AppEngine/Apps/Modules/Versions/Delete.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/AppEngine/Apps/Modules/Versions/Delete.hs
@@ -0,0 +1,202 @@
+{-# 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.AppEngine.Apps.Modules.Versions.Delete
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes an existing version.
+--
+-- /See:/ <https://developers.google.com/appengine/ Google App Engine Admin API Reference> for @appengine.apps.modules.versions.delete@.
+module Network.Google.Resource.AppEngine.Apps.Modules.Versions.Delete
+    (
+    -- * REST Resource
+      AppsModulesVersionsDeleteResource
+
+    -- * Creating a Request
+    , appsModulesVersionsDelete
+    , AppsModulesVersionsDelete
+
+    -- * Request Lenses
+    , amvdXgafv
+    , amvdUploadProtocol
+    , amvdPp
+    , amvdAccessToken
+    , amvdUploadType
+    , amvdVersionsId
+    , amvdModulesId
+    , amvdBearerToken
+    , amvdAppsId
+    , amvdCallback
+    ) where
+
+import           Network.Google.AppEngine.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @appengine.apps.modules.versions.delete@ method which the
+-- 'AppsModulesVersionsDelete' request conforms to.
+type AppsModulesVersionsDeleteResource =
+     "v1beta4" :>
+       "apps" :>
+         Capture "appsId" Text :>
+           "modules" :>
+             Capture "modulesId" Text :>
+               "versions" :>
+                 Capture "versionsId" Text :>
+                   QueryParam "$.xgafv" Text :>
+                     QueryParam "upload_protocol" Text :>
+                       QueryParam "pp" Bool :>
+                         QueryParam "access_token" Text :>
+                           QueryParam "uploadType" Text :>
+                             QueryParam "bearer_token" Text :>
+                               QueryParam "callback" Text :>
+                                 QueryParam "alt" AltJSON :>
+                                   Delete '[JSON] Operation
+
+-- | Deletes an existing version.
+--
+-- /See:/ 'appsModulesVersionsDelete' smart constructor.
+data AppsModulesVersionsDelete = AppsModulesVersionsDelete
+    { _amvdXgafv          :: !(Maybe Text)
+    , _amvdUploadProtocol :: !(Maybe Text)
+    , _amvdPp             :: !Bool
+    , _amvdAccessToken    :: !(Maybe Text)
+    , _amvdUploadType     :: !(Maybe Text)
+    , _amvdVersionsId     :: !Text
+    , _amvdModulesId      :: !Text
+    , _amvdBearerToken    :: !(Maybe Text)
+    , _amvdAppsId         :: !Text
+    , _amvdCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'AppsModulesVersionsDelete' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'amvdXgafv'
+--
+-- * 'amvdUploadProtocol'
+--
+-- * 'amvdPp'
+--
+-- * 'amvdAccessToken'
+--
+-- * 'amvdUploadType'
+--
+-- * 'amvdVersionsId'
+--
+-- * 'amvdModulesId'
+--
+-- * 'amvdBearerToken'
+--
+-- * 'amvdAppsId'
+--
+-- * 'amvdCallback'
+appsModulesVersionsDelete
+    :: Text -- ^ 'amvdVersionsId'
+    -> Text -- ^ 'amvdModulesId'
+    -> Text -- ^ 'amvdAppsId'
+    -> AppsModulesVersionsDelete
+appsModulesVersionsDelete pAmvdVersionsId_ pAmvdModulesId_ pAmvdAppsId_ =
+    AppsModulesVersionsDelete
+    { _amvdXgafv = Nothing
+    , _amvdUploadProtocol = Nothing
+    , _amvdPp = True
+    , _amvdAccessToken = Nothing
+    , _amvdUploadType = Nothing
+    , _amvdVersionsId = pAmvdVersionsId_
+    , _amvdModulesId = pAmvdModulesId_
+    , _amvdBearerToken = Nothing
+    , _amvdAppsId = pAmvdAppsId_
+    , _amvdCallback = Nothing
+    }
+
+-- | V1 error format.
+amvdXgafv :: Lens' AppsModulesVersionsDelete (Maybe Text)
+amvdXgafv
+  = lens _amvdXgafv (\ s a -> s{_amvdXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+amvdUploadProtocol :: Lens' AppsModulesVersionsDelete (Maybe Text)
+amvdUploadProtocol
+  = lens _amvdUploadProtocol
+      (\ s a -> s{_amvdUploadProtocol = a})
+
+-- | Pretty-print response.
+amvdPp :: Lens' AppsModulesVersionsDelete Bool
+amvdPp = lens _amvdPp (\ s a -> s{_amvdPp = a})
+
+-- | OAuth access token.
+amvdAccessToken :: Lens' AppsModulesVersionsDelete (Maybe Text)
+amvdAccessToken
+  = lens _amvdAccessToken
+      (\ s a -> s{_amvdAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+amvdUploadType :: Lens' AppsModulesVersionsDelete (Maybe Text)
+amvdUploadType
+  = lens _amvdUploadType
+      (\ s a -> s{_amvdUploadType = a})
+
+-- | Part of \`name\`. See documentation of \`appsId\`.
+amvdVersionsId :: Lens' AppsModulesVersionsDelete Text
+amvdVersionsId
+  = lens _amvdVersionsId
+      (\ s a -> s{_amvdVersionsId = a})
+
+-- | Part of \`name\`. See documentation of \`appsId\`.
+amvdModulesId :: Lens' AppsModulesVersionsDelete Text
+amvdModulesId
+  = lens _amvdModulesId
+      (\ s a -> s{_amvdModulesId = a})
+
+-- | OAuth bearer token.
+amvdBearerToken :: Lens' AppsModulesVersionsDelete (Maybe Text)
+amvdBearerToken
+  = lens _amvdBearerToken
+      (\ s a -> s{_amvdBearerToken = a})
+
+-- | Part of \`name\`. Name of the resource requested. For example:
+-- \"apps\/myapp\/modules\/default\/versions\/v1\".
+amvdAppsId :: Lens' AppsModulesVersionsDelete Text
+amvdAppsId
+  = lens _amvdAppsId (\ s a -> s{_amvdAppsId = a})
+
+-- | JSONP
+amvdCallback :: Lens' AppsModulesVersionsDelete (Maybe Text)
+amvdCallback
+  = lens _amvdCallback (\ s a -> s{_amvdCallback = a})
+
+instance GoogleRequest AppsModulesVersionsDelete
+         where
+        type Rs AppsModulesVersionsDelete = Operation
+        requestClient AppsModulesVersionsDelete{..}
+          = go _amvdAppsId _amvdModulesId _amvdVersionsId
+              _amvdXgafv
+              _amvdUploadProtocol
+              (Just _amvdPp)
+              _amvdAccessToken
+              _amvdUploadType
+              _amvdBearerToken
+              _amvdCallback
+              (Just AltJSON)
+              appEngineService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy AppsModulesVersionsDeleteResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/AppEngine/Apps/Modules/Versions/Get.hs b/gen/Network/Google/Resource/AppEngine/Apps/Modules/Versions/Get.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/AppEngine/Apps/Modules/Versions/Get.hs
@@ -0,0 +1,212 @@
+{-# 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.AppEngine.Apps.Modules.Versions.Get
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Gets application deployment information.
+--
+-- /See:/ <https://developers.google.com/appengine/ Google App Engine Admin API Reference> for @appengine.apps.modules.versions.get@.
+module Network.Google.Resource.AppEngine.Apps.Modules.Versions.Get
+    (
+    -- * REST Resource
+      AppsModulesVersionsGetResource
+
+    -- * Creating a Request
+    , appsModulesVersionsGet
+    , AppsModulesVersionsGet
+
+    -- * Request Lenses
+    , amvgXgafv
+    , amvgUploadProtocol
+    , amvgPp
+    , amvgAccessToken
+    , amvgUploadType
+    , amvgVersionsId
+    , amvgModulesId
+    , amvgBearerToken
+    , amvgAppsId
+    , amvgView
+    , amvgCallback
+    ) where
+
+import           Network.Google.AppEngine.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @appengine.apps.modules.versions.get@ method which the
+-- 'AppsModulesVersionsGet' request conforms to.
+type AppsModulesVersionsGetResource =
+     "v1beta4" :>
+       "apps" :>
+         Capture "appsId" Text :>
+           "modules" :>
+             Capture "modulesId" Text :>
+               "versions" :>
+                 Capture "versionsId" Text :>
+                   QueryParam "$.xgafv" Text :>
+                     QueryParam "upload_protocol" Text :>
+                       QueryParam "pp" Bool :>
+                         QueryParam "access_token" Text :>
+                           QueryParam "uploadType" Text :>
+                             QueryParam "bearer_token" Text :>
+                               QueryParam "view" Text :>
+                                 QueryParam "callback" Text :>
+                                   QueryParam "alt" AltJSON :>
+                                     Get '[JSON] Version
+
+-- | Gets application deployment information.
+--
+-- /See:/ 'appsModulesVersionsGet' smart constructor.
+data AppsModulesVersionsGet = AppsModulesVersionsGet
+    { _amvgXgafv          :: !(Maybe Text)
+    , _amvgUploadProtocol :: !(Maybe Text)
+    , _amvgPp             :: !Bool
+    , _amvgAccessToken    :: !(Maybe Text)
+    , _amvgUploadType     :: !(Maybe Text)
+    , _amvgVersionsId     :: !Text
+    , _amvgModulesId      :: !Text
+    , _amvgBearerToken    :: !(Maybe Text)
+    , _amvgAppsId         :: !Text
+    , _amvgView           :: !(Maybe Text)
+    , _amvgCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'AppsModulesVersionsGet' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'amvgXgafv'
+--
+-- * 'amvgUploadProtocol'
+--
+-- * 'amvgPp'
+--
+-- * 'amvgAccessToken'
+--
+-- * 'amvgUploadType'
+--
+-- * 'amvgVersionsId'
+--
+-- * 'amvgModulesId'
+--
+-- * 'amvgBearerToken'
+--
+-- * 'amvgAppsId'
+--
+-- * 'amvgView'
+--
+-- * 'amvgCallback'
+appsModulesVersionsGet
+    :: Text -- ^ 'amvgVersionsId'
+    -> Text -- ^ 'amvgModulesId'
+    -> Text -- ^ 'amvgAppsId'
+    -> AppsModulesVersionsGet
+appsModulesVersionsGet pAmvgVersionsId_ pAmvgModulesId_ pAmvgAppsId_ =
+    AppsModulesVersionsGet
+    { _amvgXgafv = Nothing
+    , _amvgUploadProtocol = Nothing
+    , _amvgPp = True
+    , _amvgAccessToken = Nothing
+    , _amvgUploadType = Nothing
+    , _amvgVersionsId = pAmvgVersionsId_
+    , _amvgModulesId = pAmvgModulesId_
+    , _amvgBearerToken = Nothing
+    , _amvgAppsId = pAmvgAppsId_
+    , _amvgView = Nothing
+    , _amvgCallback = Nothing
+    }
+
+-- | V1 error format.
+amvgXgafv :: Lens' AppsModulesVersionsGet (Maybe Text)
+amvgXgafv
+  = lens _amvgXgafv (\ s a -> s{_amvgXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+amvgUploadProtocol :: Lens' AppsModulesVersionsGet (Maybe Text)
+amvgUploadProtocol
+  = lens _amvgUploadProtocol
+      (\ s a -> s{_amvgUploadProtocol = a})
+
+-- | Pretty-print response.
+amvgPp :: Lens' AppsModulesVersionsGet Bool
+amvgPp = lens _amvgPp (\ s a -> s{_amvgPp = a})
+
+-- | OAuth access token.
+amvgAccessToken :: Lens' AppsModulesVersionsGet (Maybe Text)
+amvgAccessToken
+  = lens _amvgAccessToken
+      (\ s a -> s{_amvgAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+amvgUploadType :: Lens' AppsModulesVersionsGet (Maybe Text)
+amvgUploadType
+  = lens _amvgUploadType
+      (\ s a -> s{_amvgUploadType = a})
+
+-- | Part of \`name\`. See documentation of \`appsId\`.
+amvgVersionsId :: Lens' AppsModulesVersionsGet Text
+amvgVersionsId
+  = lens _amvgVersionsId
+      (\ s a -> s{_amvgVersionsId = a})
+
+-- | Part of \`name\`. See documentation of \`appsId\`.
+amvgModulesId :: Lens' AppsModulesVersionsGet Text
+amvgModulesId
+  = lens _amvgModulesId
+      (\ s a -> s{_amvgModulesId = a})
+
+-- | OAuth bearer token.
+amvgBearerToken :: Lens' AppsModulesVersionsGet (Maybe Text)
+amvgBearerToken
+  = lens _amvgBearerToken
+      (\ s a -> s{_amvgBearerToken = a})
+
+-- | Part of \`name\`. Name of the resource requested. For example:
+-- \"apps\/myapp\/modules\/default\/versions\/v1\".
+amvgAppsId :: Lens' AppsModulesVersionsGet Text
+amvgAppsId
+  = lens _amvgAppsId (\ s a -> s{_amvgAppsId = a})
+
+-- | Controls the set of fields returned in the \`Get\` response.
+amvgView :: Lens' AppsModulesVersionsGet (Maybe Text)
+amvgView = lens _amvgView (\ s a -> s{_amvgView = a})
+
+-- | JSONP
+amvgCallback :: Lens' AppsModulesVersionsGet (Maybe Text)
+amvgCallback
+  = lens _amvgCallback (\ s a -> s{_amvgCallback = a})
+
+instance GoogleRequest AppsModulesVersionsGet where
+        type Rs AppsModulesVersionsGet = Version
+        requestClient AppsModulesVersionsGet{..}
+          = go _amvgAppsId _amvgModulesId _amvgVersionsId
+              _amvgXgafv
+              _amvgUploadProtocol
+              (Just _amvgPp)
+              _amvgAccessToken
+              _amvgUploadType
+              _amvgBearerToken
+              _amvgView
+              _amvgCallback
+              (Just AltJSON)
+              appEngineService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy AppsModulesVersionsGetResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/AppEngine/Apps/Modules/Versions/List.hs b/gen/Network/Google/Resource/AppEngine/Apps/Modules/Versions/List.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/AppEngine/Apps/Modules/Versions/List.hs
@@ -0,0 +1,225 @@
+{-# 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.AppEngine.Apps.Modules.Versions.List
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Lists the versions of a module.
+--
+-- /See:/ <https://developers.google.com/appengine/ Google App Engine Admin API Reference> for @appengine.apps.modules.versions.list@.
+module Network.Google.Resource.AppEngine.Apps.Modules.Versions.List
+    (
+    -- * REST Resource
+      AppsModulesVersionsListResource
+
+    -- * Creating a Request
+    , appsModulesVersionsList
+    , AppsModulesVersionsList
+
+    -- * Request Lenses
+    , amvlXgafv
+    , amvlUploadProtocol
+    , amvlPp
+    , amvlAccessToken
+    , amvlUploadType
+    , amvlModulesId
+    , amvlBearerToken
+    , amvlAppsId
+    , amvlView
+    , amvlPageToken
+    , amvlPageSize
+    , amvlCallback
+    ) where
+
+import           Network.Google.AppEngine.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @appengine.apps.modules.versions.list@ method which the
+-- 'AppsModulesVersionsList' request conforms to.
+type AppsModulesVersionsListResource =
+     "v1beta4" :>
+       "apps" :>
+         Capture "appsId" Text :>
+           "modules" :>
+             Capture "modulesId" Text :>
+               "versions" :>
+                 QueryParam "$.xgafv" Text :>
+                   QueryParam "upload_protocol" Text :>
+                     QueryParam "pp" Bool :>
+                       QueryParam "access_token" Text :>
+                         QueryParam "uploadType" Text :>
+                           QueryParam "bearer_token" Text :>
+                             QueryParam "view" Text :>
+                               QueryParam "pageToken" Text :>
+                                 QueryParam "pageSize" (Textual Int32) :>
+                                   QueryParam "callback" Text :>
+                                     QueryParam "alt" AltJSON :>
+                                       Get '[JSON] ListVersionsResponse
+
+-- | Lists the versions of a module.
+--
+-- /See:/ 'appsModulesVersionsList' smart constructor.
+data AppsModulesVersionsList = AppsModulesVersionsList
+    { _amvlXgafv          :: !(Maybe Text)
+    , _amvlUploadProtocol :: !(Maybe Text)
+    , _amvlPp             :: !Bool
+    , _amvlAccessToken    :: !(Maybe Text)
+    , _amvlUploadType     :: !(Maybe Text)
+    , _amvlModulesId      :: !Text
+    , _amvlBearerToken    :: !(Maybe Text)
+    , _amvlAppsId         :: !Text
+    , _amvlView           :: !(Maybe Text)
+    , _amvlPageToken      :: !(Maybe Text)
+    , _amvlPageSize       :: !(Maybe (Textual Int32))
+    , _amvlCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'AppsModulesVersionsList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'amvlXgafv'
+--
+-- * 'amvlUploadProtocol'
+--
+-- * 'amvlPp'
+--
+-- * 'amvlAccessToken'
+--
+-- * 'amvlUploadType'
+--
+-- * 'amvlModulesId'
+--
+-- * 'amvlBearerToken'
+--
+-- * 'amvlAppsId'
+--
+-- * 'amvlView'
+--
+-- * 'amvlPageToken'
+--
+-- * 'amvlPageSize'
+--
+-- * 'amvlCallback'
+appsModulesVersionsList
+    :: Text -- ^ 'amvlModulesId'
+    -> Text -- ^ 'amvlAppsId'
+    -> AppsModulesVersionsList
+appsModulesVersionsList pAmvlModulesId_ pAmvlAppsId_ =
+    AppsModulesVersionsList
+    { _amvlXgafv = Nothing
+    , _amvlUploadProtocol = Nothing
+    , _amvlPp = True
+    , _amvlAccessToken = Nothing
+    , _amvlUploadType = Nothing
+    , _amvlModulesId = pAmvlModulesId_
+    , _amvlBearerToken = Nothing
+    , _amvlAppsId = pAmvlAppsId_
+    , _amvlView = Nothing
+    , _amvlPageToken = Nothing
+    , _amvlPageSize = Nothing
+    , _amvlCallback = Nothing
+    }
+
+-- | V1 error format.
+amvlXgafv :: Lens' AppsModulesVersionsList (Maybe Text)
+amvlXgafv
+  = lens _amvlXgafv (\ s a -> s{_amvlXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+amvlUploadProtocol :: Lens' AppsModulesVersionsList (Maybe Text)
+amvlUploadProtocol
+  = lens _amvlUploadProtocol
+      (\ s a -> s{_amvlUploadProtocol = a})
+
+-- | Pretty-print response.
+amvlPp :: Lens' AppsModulesVersionsList Bool
+amvlPp = lens _amvlPp (\ s a -> s{_amvlPp = a})
+
+-- | OAuth access token.
+amvlAccessToken :: Lens' AppsModulesVersionsList (Maybe Text)
+amvlAccessToken
+  = lens _amvlAccessToken
+      (\ s a -> s{_amvlAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+amvlUploadType :: Lens' AppsModulesVersionsList (Maybe Text)
+amvlUploadType
+  = lens _amvlUploadType
+      (\ s a -> s{_amvlUploadType = a})
+
+-- | Part of \`name\`. See documentation of \`appsId\`.
+amvlModulesId :: Lens' AppsModulesVersionsList Text
+amvlModulesId
+  = lens _amvlModulesId
+      (\ s a -> s{_amvlModulesId = a})
+
+-- | OAuth bearer token.
+amvlBearerToken :: Lens' AppsModulesVersionsList (Maybe Text)
+amvlBearerToken
+  = lens _amvlBearerToken
+      (\ s a -> s{_amvlBearerToken = a})
+
+-- | Part of \`name\`. Name of the resource requested. For example:
+-- \"apps\/myapp\/modules\/default\".
+amvlAppsId :: Lens' AppsModulesVersionsList Text
+amvlAppsId
+  = lens _amvlAppsId (\ s a -> s{_amvlAppsId = a})
+
+-- | Controls the set of fields returned in the \`List\` response.
+amvlView :: Lens' AppsModulesVersionsList (Maybe Text)
+amvlView = lens _amvlView (\ s a -> s{_amvlView = a})
+
+-- | Continuation token for fetching the next page of results.
+amvlPageToken :: Lens' AppsModulesVersionsList (Maybe Text)
+amvlPageToken
+  = lens _amvlPageToken
+      (\ s a -> s{_amvlPageToken = a})
+
+-- | Maximum results to return per page.
+amvlPageSize :: Lens' AppsModulesVersionsList (Maybe Int32)
+amvlPageSize
+  = lens _amvlPageSize (\ s a -> s{_amvlPageSize = a})
+      . mapping _Coerce
+
+-- | JSONP
+amvlCallback :: Lens' AppsModulesVersionsList (Maybe Text)
+amvlCallback
+  = lens _amvlCallback (\ s a -> s{_amvlCallback = a})
+
+instance GoogleRequest AppsModulesVersionsList where
+        type Rs AppsModulesVersionsList =
+             ListVersionsResponse
+        requestClient AppsModulesVersionsList{..}
+          = go _amvlAppsId _amvlModulesId _amvlXgafv
+              _amvlUploadProtocol
+              (Just _amvlPp)
+              _amvlAccessToken
+              _amvlUploadType
+              _amvlBearerToken
+              _amvlView
+              _amvlPageToken
+              _amvlPageSize
+              _amvlCallback
+              (Just AltJSON)
+              appEngineService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy AppsModulesVersionsListResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/AppEngine/Apps/Operations/Get.hs b/gen/Network/Google/Resource/AppEngine/Apps/Operations/Get.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/AppEngine/Apps/Operations/Get.hs
@@ -0,0 +1,187 @@
+{-# 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.AppEngine.Apps.Operations.Get
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Gets the latest state of a long-running operation. Clients can use this
+-- method to poll the operation result at intervals as recommended by the
+-- API service.
+--
+-- /See:/ <https://developers.google.com/appengine/ Google App Engine Admin API Reference> for @appengine.apps.operations.get@.
+module Network.Google.Resource.AppEngine.Apps.Operations.Get
+    (
+    -- * REST Resource
+      AppsOperationsGetResource
+
+    -- * Creating a Request
+    , appsOperationsGet
+    , AppsOperationsGet
+
+    -- * Request Lenses
+    , aogXgafv
+    , aogUploadProtocol
+    , aogPp
+    , aogAccessToken
+    , aogUploadType
+    , aogBearerToken
+    , aogAppsId
+    , aogOperationsId
+    , aogCallback
+    ) where
+
+import           Network.Google.AppEngine.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @appengine.apps.operations.get@ method which the
+-- 'AppsOperationsGet' request conforms to.
+type AppsOperationsGetResource =
+     "v1beta4" :>
+       "apps" :>
+         Capture "appsId" Text :>
+           "operations" :>
+             Capture "operationsId" Text :>
+               QueryParam "$.xgafv" Text :>
+                 QueryParam "upload_protocol" Text :>
+                   QueryParam "pp" Bool :>
+                     QueryParam "access_token" Text :>
+                       QueryParam "uploadType" Text :>
+                         QueryParam "bearer_token" Text :>
+                           QueryParam "callback" Text :>
+                             QueryParam "alt" AltJSON :> Get '[JSON] Operation
+
+-- | Gets the latest state of a long-running operation. Clients can use this
+-- method to poll the operation result at intervals as recommended by the
+-- API service.
+--
+-- /See:/ 'appsOperationsGet' smart constructor.
+data AppsOperationsGet = AppsOperationsGet
+    { _aogXgafv          :: !(Maybe Text)
+    , _aogUploadProtocol :: !(Maybe Text)
+    , _aogPp             :: !Bool
+    , _aogAccessToken    :: !(Maybe Text)
+    , _aogUploadType     :: !(Maybe Text)
+    , _aogBearerToken    :: !(Maybe Text)
+    , _aogAppsId         :: !Text
+    , _aogOperationsId   :: !Text
+    , _aogCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'AppsOperationsGet' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'aogXgafv'
+--
+-- * 'aogUploadProtocol'
+--
+-- * 'aogPp'
+--
+-- * 'aogAccessToken'
+--
+-- * 'aogUploadType'
+--
+-- * 'aogBearerToken'
+--
+-- * 'aogAppsId'
+--
+-- * 'aogOperationsId'
+--
+-- * 'aogCallback'
+appsOperationsGet
+    :: Text -- ^ 'aogAppsId'
+    -> Text -- ^ 'aogOperationsId'
+    -> AppsOperationsGet
+appsOperationsGet pAogAppsId_ pAogOperationsId_ =
+    AppsOperationsGet
+    { _aogXgafv = Nothing
+    , _aogUploadProtocol = Nothing
+    , _aogPp = True
+    , _aogAccessToken = Nothing
+    , _aogUploadType = Nothing
+    , _aogBearerToken = Nothing
+    , _aogAppsId = pAogAppsId_
+    , _aogOperationsId = pAogOperationsId_
+    , _aogCallback = Nothing
+    }
+
+-- | V1 error format.
+aogXgafv :: Lens' AppsOperationsGet (Maybe Text)
+aogXgafv = lens _aogXgafv (\ s a -> s{_aogXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+aogUploadProtocol :: Lens' AppsOperationsGet (Maybe Text)
+aogUploadProtocol
+  = lens _aogUploadProtocol
+      (\ s a -> s{_aogUploadProtocol = a})
+
+-- | Pretty-print response.
+aogPp :: Lens' AppsOperationsGet Bool
+aogPp = lens _aogPp (\ s a -> s{_aogPp = a})
+
+-- | OAuth access token.
+aogAccessToken :: Lens' AppsOperationsGet (Maybe Text)
+aogAccessToken
+  = lens _aogAccessToken
+      (\ s a -> s{_aogAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+aogUploadType :: Lens' AppsOperationsGet (Maybe Text)
+aogUploadType
+  = lens _aogUploadType
+      (\ s a -> s{_aogUploadType = a})
+
+-- | OAuth bearer token.
+aogBearerToken :: Lens' AppsOperationsGet (Maybe Text)
+aogBearerToken
+  = lens _aogBearerToken
+      (\ s a -> s{_aogBearerToken = a})
+
+-- | Part of \`name\`. The name of the operation resource.
+aogAppsId :: Lens' AppsOperationsGet Text
+aogAppsId
+  = lens _aogAppsId (\ s a -> s{_aogAppsId = a})
+
+-- | Part of \`name\`. See documentation of \`appsId\`.
+aogOperationsId :: Lens' AppsOperationsGet Text
+aogOperationsId
+  = lens _aogOperationsId
+      (\ s a -> s{_aogOperationsId = a})
+
+-- | JSONP
+aogCallback :: Lens' AppsOperationsGet (Maybe Text)
+aogCallback
+  = lens _aogCallback (\ s a -> s{_aogCallback = a})
+
+instance GoogleRequest AppsOperationsGet where
+        type Rs AppsOperationsGet = Operation
+        requestClient AppsOperationsGet{..}
+          = go _aogAppsId _aogOperationsId _aogXgafv
+              _aogUploadProtocol
+              (Just _aogPp)
+              _aogAccessToken
+              _aogUploadType
+              _aogBearerToken
+              _aogCallback
+              (Just AltJSON)
+              appEngineService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy AppsOperationsGetResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/AppEngine/Apps/Operations/List.hs b/gen/Network/Google/Resource/AppEngine/Apps/Operations/List.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/AppEngine/Apps/Operations/List.hs
@@ -0,0 +1,215 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.AppEngine.Apps.Operations.List
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Lists operations that match the specified filter in the request. If the
+-- server doesn\'t support this method, it returns \`UNIMPLEMENTED\`. NOTE:
+-- the \`name\` binding below allows API services to override the binding
+-- to use different resource name schemes, such as
+-- \`users\/*\/operations\`.
+--
+-- /See:/ <https://developers.google.com/appengine/ Google App Engine Admin API Reference> for @appengine.apps.operations.list@.
+module Network.Google.Resource.AppEngine.Apps.Operations.List
+    (
+    -- * REST Resource
+      AppsOperationsListResource
+
+    -- * Creating a Request
+    , appsOperationsList
+    , AppsOperationsList
+
+    -- * Request Lenses
+    , aolXgafv
+    , aolUploadProtocol
+    , aolPp
+    , aolAccessToken
+    , aolUploadType
+    , aolBearerToken
+    , aolAppsId
+    , aolFilter
+    , aolPageToken
+    , aolPageSize
+    , aolCallback
+    ) where
+
+import           Network.Google.AppEngine.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @appengine.apps.operations.list@ method which the
+-- 'AppsOperationsList' request conforms to.
+type AppsOperationsListResource =
+     "v1beta4" :>
+       "apps" :>
+         Capture "appsId" Text :>
+           "operations" :>
+             QueryParam "$.xgafv" Text :>
+               QueryParam "upload_protocol" Text :>
+                 QueryParam "pp" Bool :>
+                   QueryParam "access_token" Text :>
+                     QueryParam "uploadType" Text :>
+                       QueryParam "bearer_token" Text :>
+                         QueryParam "filter" Text :>
+                           QueryParam "pageToken" Text :>
+                             QueryParam "pageSize" (Textual Int32) :>
+                               QueryParam "callback" Text :>
+                                 QueryParam "alt" AltJSON :>
+                                   Get '[JSON] ListOperationsResponse
+
+-- | Lists operations that match the specified filter in the request. If the
+-- server doesn\'t support this method, it returns \`UNIMPLEMENTED\`. NOTE:
+-- the \`name\` binding below allows API services to override the binding
+-- to use different resource name schemes, such as
+-- \`users\/*\/operations\`.
+--
+-- /See:/ 'appsOperationsList' smart constructor.
+data AppsOperationsList = AppsOperationsList
+    { _aolXgafv          :: !(Maybe Text)
+    , _aolUploadProtocol :: !(Maybe Text)
+    , _aolPp             :: !Bool
+    , _aolAccessToken    :: !(Maybe Text)
+    , _aolUploadType     :: !(Maybe Text)
+    , _aolBearerToken    :: !(Maybe Text)
+    , _aolAppsId         :: !Text
+    , _aolFilter         :: !(Maybe Text)
+    , _aolPageToken      :: !(Maybe Text)
+    , _aolPageSize       :: !(Maybe (Textual Int32))
+    , _aolCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'AppsOperationsList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'aolXgafv'
+--
+-- * 'aolUploadProtocol'
+--
+-- * 'aolPp'
+--
+-- * 'aolAccessToken'
+--
+-- * 'aolUploadType'
+--
+-- * 'aolBearerToken'
+--
+-- * 'aolAppsId'
+--
+-- * 'aolFilter'
+--
+-- * 'aolPageToken'
+--
+-- * 'aolPageSize'
+--
+-- * 'aolCallback'
+appsOperationsList
+    :: Text -- ^ 'aolAppsId'
+    -> AppsOperationsList
+appsOperationsList pAolAppsId_ =
+    AppsOperationsList
+    { _aolXgafv = Nothing
+    , _aolUploadProtocol = Nothing
+    , _aolPp = True
+    , _aolAccessToken = Nothing
+    , _aolUploadType = Nothing
+    , _aolBearerToken = Nothing
+    , _aolAppsId = pAolAppsId_
+    , _aolFilter = Nothing
+    , _aolPageToken = Nothing
+    , _aolPageSize = Nothing
+    , _aolCallback = Nothing
+    }
+
+-- | V1 error format.
+aolXgafv :: Lens' AppsOperationsList (Maybe Text)
+aolXgafv = lens _aolXgafv (\ s a -> s{_aolXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+aolUploadProtocol :: Lens' AppsOperationsList (Maybe Text)
+aolUploadProtocol
+  = lens _aolUploadProtocol
+      (\ s a -> s{_aolUploadProtocol = a})
+
+-- | Pretty-print response.
+aolPp :: Lens' AppsOperationsList Bool
+aolPp = lens _aolPp (\ s a -> s{_aolPp = a})
+
+-- | OAuth access token.
+aolAccessToken :: Lens' AppsOperationsList (Maybe Text)
+aolAccessToken
+  = lens _aolAccessToken
+      (\ s a -> s{_aolAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+aolUploadType :: Lens' AppsOperationsList (Maybe Text)
+aolUploadType
+  = lens _aolUploadType
+      (\ s a -> s{_aolUploadType = a})
+
+-- | OAuth bearer token.
+aolBearerToken :: Lens' AppsOperationsList (Maybe Text)
+aolBearerToken
+  = lens _aolBearerToken
+      (\ s a -> s{_aolBearerToken = a})
+
+-- | Part of \`name\`. The name of the operation collection.
+aolAppsId :: Lens' AppsOperationsList Text
+aolAppsId
+  = lens _aolAppsId (\ s a -> s{_aolAppsId = a})
+
+-- | The standard list filter.
+aolFilter :: Lens' AppsOperationsList (Maybe Text)
+aolFilter
+  = lens _aolFilter (\ s a -> s{_aolFilter = a})
+
+-- | The standard list page token.
+aolPageToken :: Lens' AppsOperationsList (Maybe Text)
+aolPageToken
+  = lens _aolPageToken (\ s a -> s{_aolPageToken = a})
+
+-- | The standard list page size.
+aolPageSize :: Lens' AppsOperationsList (Maybe Int32)
+aolPageSize
+  = lens _aolPageSize (\ s a -> s{_aolPageSize = a}) .
+      mapping _Coerce
+
+-- | JSONP
+aolCallback :: Lens' AppsOperationsList (Maybe Text)
+aolCallback
+  = lens _aolCallback (\ s a -> s{_aolCallback = a})
+
+instance GoogleRequest AppsOperationsList where
+        type Rs AppsOperationsList = ListOperationsResponse
+        requestClient AppsOperationsList{..}
+          = go _aolAppsId _aolXgafv _aolUploadProtocol
+              (Just _aolPp)
+              _aolAccessToken
+              _aolUploadType
+              _aolBearerToken
+              _aolFilter
+              _aolPageToken
+              _aolPageSize
+              _aolCallback
+              (Just AltJSON)
+              appEngineService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy AppsOperationsListResource)
+                      mempty
diff --git a/gogol-appengine.cabal b/gogol-appengine.cabal
new file mode 100644
--- /dev/null
+++ b/gogol-appengine.cabal
@@ -0,0 +1,57 @@
+name:                  gogol-appengine
+version:               0.0.1
+synopsis:              Google App Engine Admin SDK.
+homepage:              https://github.com/brendanhay/gogol
+bug-reports:           https://github.com/brendanhay/gogol/issues
+license:               OtherLicense
+license-file:          LICENSE
+author:                Brendan Hay
+maintainer:            Brendan Hay <brendan.g.hay@gmail.com>
+copyright:             Copyright (c) 2015 Brendan Hay
+category:              Network, Google, Cloud
+build-type:            Simple
+cabal-version:         >= 1.10
+extra-source-files:    README.md
+
+description:
+    The Google App Engine Admin API enables developers to provision and
+    manage their App Engine applications.
+    .
+    /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 @v1beta4@
+    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.AppEngine
+        , Network.Google.AppEngine.Types
+        , Network.Google.Resource.AppEngine.Apps.Get
+        , Network.Google.Resource.AppEngine.Apps.Modules.Delete
+        , Network.Google.Resource.AppEngine.Apps.Modules.Get
+        , Network.Google.Resource.AppEngine.Apps.Modules.List
+        , Network.Google.Resource.AppEngine.Apps.Modules.Patch
+        , Network.Google.Resource.AppEngine.Apps.Modules.Versions.Create
+        , Network.Google.Resource.AppEngine.Apps.Modules.Versions.Delete
+        , Network.Google.Resource.AppEngine.Apps.Modules.Versions.Get
+        , Network.Google.Resource.AppEngine.Apps.Modules.Versions.List
+        , Network.Google.Resource.AppEngine.Apps.Operations.Get
+        , Network.Google.Resource.AppEngine.Apps.Operations.List
+
+    other-modules:
+          Network.Google.AppEngine.Types.Product
+        , Network.Google.AppEngine.Types.Sum
+
+    build-depends:
+          gogol-core == 0.0.1.*
+        , base       >= 4.7 && < 5
