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-prediction
+
+* [Version](#version)
+* [Description](#description)
+* [Contribute](#contribute)
+* [Licence](#licence)
+
+
+## Version
+
+`0.0.1`
+
+
+## Description
+
+A client library for the Google Prediction.
+
+
+## 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-prediction` 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/Prediction.hs b/gen/Network/Google/Prediction.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Prediction.hs
@@ -0,0 +1,263 @@
+{-# LANGUAGE DataKinds         #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# LANGUAGE TypeOperators     #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+
+-- |
+-- Module      : Network.Google.Prediction
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Lets you access a cloud hosted machine learning service that makes it
+-- easy to build smart apps
+--
+-- /See:/ <https://developers.google.com/prediction/docs/developer-guide Prediction API Reference>
+module Network.Google.Prediction
+    (
+    -- * Service Configuration
+      predictionService
+
+    -- * API Declaration
+    , PredictionAPI
+
+    -- * Resources
+
+    -- ** prediction.hostedmodels.predict
+    , module Network.Google.Resource.Prediction.HostedModels.Predict
+
+    -- ** prediction.trainedmodels.analyze
+    , module Network.Google.Resource.Prediction.TrainedModels.Analyze
+
+    -- ** prediction.trainedmodels.delete
+    , module Network.Google.Resource.Prediction.TrainedModels.Delete
+
+    -- ** prediction.trainedmodels.get
+    , module Network.Google.Resource.Prediction.TrainedModels.Get
+
+    -- ** prediction.trainedmodels.insert
+    , module Network.Google.Resource.Prediction.TrainedModels.Insert
+
+    -- ** prediction.trainedmodels.list
+    , module Network.Google.Resource.Prediction.TrainedModels.List
+
+    -- ** prediction.trainedmodels.predict
+    , module Network.Google.Resource.Prediction.TrainedModels.Predict
+
+    -- ** prediction.trainedmodels.update
+    , module Network.Google.Resource.Prediction.TrainedModels.Update
+
+    -- * Types
+
+    -- ** Insert2ModelInfo
+    , Insert2ModelInfo
+    , insert2ModelInfo
+    , imiModelType
+    , imiClassWeightedAccuracy
+    , imiClassificationAccuracy
+    , imiMeanSquaredError
+    , imiNumberLabels
+    , imiNumberInstances
+
+    -- ** AnalyzeModelDescriptionConfusionMatrixRowTotals
+    , AnalyzeModelDescriptionConfusionMatrixRowTotals
+    , analyzeModelDescriptionConfusionMatrixRowTotals
+    , amdcmrtAddtional
+
+    -- ** Insert
+    , Insert
+    , insert
+    , iStorageDataLocation
+    , iModelType
+    , iTrainingInstances
+    , iUtility
+    , iStoragePMMLModelLocation
+    , iSourceModel
+    , iId
+    , iStoragePMMLLocation
+
+    -- ** List
+    , List
+    , list
+    , lNextPageToken
+    , lKind
+    , lItems
+    , lSelfLink
+
+    -- ** InsertUtilityItem
+    , InsertUtilityItem
+    , insertUtilityItem
+    , iuiAddtional
+
+    -- ** Insert2
+    , Insert2
+    , insert2
+    , insStorageDataLocation
+    , insModelType
+    , insKind
+    , insCreated
+    , insTrainingComplete
+    , insSelfLink
+    , insTrainingStatus
+    , insStoragePMMLModelLocation
+    , insId
+    , insStoragePMMLLocation
+    , insModelInfo
+
+    -- ** InsertTrainingInstancesItem
+    , InsertTrainingInstancesItem
+    , insertTrainingInstancesItem
+    , itiiCSVInstance
+    , itiiOutput
+
+    -- ** InputInput
+    , InputInput
+    , inputInput
+    , iiCSVInstance
+
+    -- ** AnalyzeDataDescriptionFeaturesItemCategoricalValuesItem
+    , AnalyzeDataDescriptionFeaturesItemCategoricalValuesItem
+    , analyzeDataDescriptionFeaturesItemCategoricalValuesItem
+    , addficviValue
+    , addficviCount
+
+    -- ** AnalyzeDataDescriptionFeaturesItemNumeric
+    , AnalyzeDataDescriptionFeaturesItemNumeric
+    , analyzeDataDescriptionFeaturesItemNumeric
+    , addfinMean
+    , addfinCount
+    , addfinVariance
+
+    -- ** Input
+    , Input
+    , input
+    , iInput
+
+    -- ** AnalyzeDataDescriptionFeaturesItemCategorical
+    , AnalyzeDataDescriptionFeaturesItemCategorical
+    , analyzeDataDescriptionFeaturesItemCategorical
+    , addficValues
+    , addficCount
+
+    -- ** AnalyzeDataDescriptionOutputFeatureTextItem
+    , AnalyzeDataDescriptionOutputFeatureTextItem
+    , analyzeDataDescriptionOutputFeatureTextItem
+    , addoftiValue
+    , addoftiCount
+
+    -- ** OutputOutputMultiItem
+    , OutputOutputMultiItem
+    , outputOutputMultiItem
+    , oomiScore
+    , oomiLabel
+
+    -- ** Analyze
+    , Analyze
+    , analyze
+    , aKind
+    , aModelDescription
+    , aSelfLink
+    , aId
+    , aErrors
+    , aDataDescription
+
+    -- ** AnalyzeModelDescriptionConfusionMatrix
+    , AnalyzeModelDescriptionConfusionMatrix
+    , analyzeModelDescriptionConfusionMatrix
+    , amdcmAddtional
+
+    -- ** Output
+    , Output
+    , output
+    , oOutputValue
+    , oKind
+    , oOutputLabel
+    , oSelfLink
+    , oId
+    , oOutputMulti
+
+    -- ** AnalyzeDataDescriptionOutputFeatureNumeric
+    , AnalyzeDataDescriptionOutputFeatureNumeric
+    , analyzeDataDescriptionOutputFeatureNumeric
+    , addofnMean
+    , addofnCount
+    , addofnVariance
+
+    -- ** AnalyzeErrorsItem
+    , AnalyzeErrorsItem
+    , analyzeErrorsItem
+    , aeiAddtional
+
+    -- ** AnalyzeDataDescription
+    , AnalyzeDataDescription
+    , analyzeDataDescription
+    , addOutputFeature
+    , addFeatures
+
+    -- ** AnalyzeModelDescription
+    , AnalyzeModelDescription
+    , analyzeModelDescription
+    , amdConfusionMatrixRowTotals
+    , amdConfusionMatrix
+    , amdModelInfo
+
+    -- ** AnalyzeDataDescriptionFeaturesItemText
+    , AnalyzeDataDescriptionFeaturesItemText
+    , analyzeDataDescriptionFeaturesItemText
+    , addfitCount
+
+    -- ** AnalyzeModelDescriptionConfusionMatrixAdditional
+    , AnalyzeModelDescriptionConfusionMatrixAdditional
+    , analyzeModelDescriptionConfusionMatrixAdditional
+    , amdcmaAddtional
+
+    -- ** AnalyzeDataDescriptionFeaturesItem
+    , AnalyzeDataDescriptionFeaturesItem
+    , analyzeDataDescriptionFeaturesItem
+    , addfiText
+    , addfiNumeric
+    , addfiIndex
+    , addfiCategorical
+
+    -- ** Update
+    , Update
+    , update
+    , uCSVInstance
+    , uOutput
+
+    -- ** AnalyzeDataDescriptionOutputFeature
+    , AnalyzeDataDescriptionOutputFeature
+    , analyzeDataDescriptionOutputFeature
+    , addofText
+    , addofNumeric
+    ) where
+
+import           Network.Google.Prediction.Types
+import           Network.Google.Prelude
+import           Network.Google.Resource.Prediction.HostedModels.Predict
+import           Network.Google.Resource.Prediction.TrainedModels.Analyze
+import           Network.Google.Resource.Prediction.TrainedModels.Delete
+import           Network.Google.Resource.Prediction.TrainedModels.Get
+import           Network.Google.Resource.Prediction.TrainedModels.Insert
+import           Network.Google.Resource.Prediction.TrainedModels.List
+import           Network.Google.Resource.Prediction.TrainedModels.Predict
+import           Network.Google.Resource.Prediction.TrainedModels.Update
+
+{- $resources
+TODO
+-}
+
+-- | Represents the entirety of the methods and resources available for the Prediction API service.
+type PredictionAPI =
+     TrainedModelsInsertResource :<|>
+       TrainedModelsListResource
+       :<|> TrainedModelsGetResource
+       :<|> TrainedModelsAnalyzeResource
+       :<|> TrainedModelsPredictResource
+       :<|> TrainedModelsDeleteResource
+       :<|> TrainedModelsUpdateResource
+       :<|> HostedModelsPredictResource
diff --git a/gen/Network/Google/Prediction/Types.hs b/gen/Network/Google/Prediction/Types.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Prediction/Types.hs
@@ -0,0 +1,234 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- |
+-- Module      : Network.Google.Prediction.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.Prediction.Types
+    (
+    -- * Service Configuration
+      predictionService
+
+    -- * OAuth Scopes
+    , devstorageReadOnlyScope
+    , devstorageReadWriteScope
+    , predictionScope
+    , devstorageFullControlScope
+
+    -- * Insert2ModelInfo
+    , Insert2ModelInfo
+    , insert2ModelInfo
+    , imiModelType
+    , imiClassWeightedAccuracy
+    , imiClassificationAccuracy
+    , imiMeanSquaredError
+    , imiNumberLabels
+    , imiNumberInstances
+
+    -- * AnalyzeModelDescriptionConfusionMatrixRowTotals
+    , AnalyzeModelDescriptionConfusionMatrixRowTotals
+    , analyzeModelDescriptionConfusionMatrixRowTotals
+    , amdcmrtAddtional
+
+    -- * Insert
+    , Insert
+    , insert
+    , iStorageDataLocation
+    , iModelType
+    , iTrainingInstances
+    , iUtility
+    , iStoragePMMLModelLocation
+    , iSourceModel
+    , iId
+    , iStoragePMMLLocation
+
+    -- * List
+    , List
+    , list
+    , lNextPageToken
+    , lKind
+    , lItems
+    , lSelfLink
+
+    -- * InsertUtilityItem
+    , InsertUtilityItem
+    , insertUtilityItem
+    , iuiAddtional
+
+    -- * Insert2
+    , Insert2
+    , insert2
+    , insStorageDataLocation
+    , insModelType
+    , insKind
+    , insCreated
+    , insTrainingComplete
+    , insSelfLink
+    , insTrainingStatus
+    , insStoragePMMLModelLocation
+    , insId
+    , insStoragePMMLLocation
+    , insModelInfo
+
+    -- * InsertTrainingInstancesItem
+    , InsertTrainingInstancesItem
+    , insertTrainingInstancesItem
+    , itiiCSVInstance
+    , itiiOutput
+
+    -- * InputInput
+    , InputInput
+    , inputInput
+    , iiCSVInstance
+
+    -- * AnalyzeDataDescriptionFeaturesItemCategoricalValuesItem
+    , AnalyzeDataDescriptionFeaturesItemCategoricalValuesItem
+    , analyzeDataDescriptionFeaturesItemCategoricalValuesItem
+    , addficviValue
+    , addficviCount
+
+    -- * AnalyzeDataDescriptionFeaturesItemNumeric
+    , AnalyzeDataDescriptionFeaturesItemNumeric
+    , analyzeDataDescriptionFeaturesItemNumeric
+    , addfinMean
+    , addfinCount
+    , addfinVariance
+
+    -- * Input
+    , Input
+    , input
+    , iInput
+
+    -- * AnalyzeDataDescriptionFeaturesItemCategorical
+    , AnalyzeDataDescriptionFeaturesItemCategorical
+    , analyzeDataDescriptionFeaturesItemCategorical
+    , addficValues
+    , addficCount
+
+    -- * AnalyzeDataDescriptionOutputFeatureTextItem
+    , AnalyzeDataDescriptionOutputFeatureTextItem
+    , analyzeDataDescriptionOutputFeatureTextItem
+    , addoftiValue
+    , addoftiCount
+
+    -- * OutputOutputMultiItem
+    , OutputOutputMultiItem
+    , outputOutputMultiItem
+    , oomiScore
+    , oomiLabel
+
+    -- * Analyze
+    , Analyze
+    , analyze
+    , aKind
+    , aModelDescription
+    , aSelfLink
+    , aId
+    , aErrors
+    , aDataDescription
+
+    -- * AnalyzeModelDescriptionConfusionMatrix
+    , AnalyzeModelDescriptionConfusionMatrix
+    , analyzeModelDescriptionConfusionMatrix
+    , amdcmAddtional
+
+    -- * Output
+    , Output
+    , output
+    , oOutputValue
+    , oKind
+    , oOutputLabel
+    , oSelfLink
+    , oId
+    , oOutputMulti
+
+    -- * AnalyzeDataDescriptionOutputFeatureNumeric
+    , AnalyzeDataDescriptionOutputFeatureNumeric
+    , analyzeDataDescriptionOutputFeatureNumeric
+    , addofnMean
+    , addofnCount
+    , addofnVariance
+
+    -- * AnalyzeErrorsItem
+    , AnalyzeErrorsItem
+    , analyzeErrorsItem
+    , aeiAddtional
+
+    -- * AnalyzeDataDescription
+    , AnalyzeDataDescription
+    , analyzeDataDescription
+    , addOutputFeature
+    , addFeatures
+
+    -- * AnalyzeModelDescription
+    , AnalyzeModelDescription
+    , analyzeModelDescription
+    , amdConfusionMatrixRowTotals
+    , amdConfusionMatrix
+    , amdModelInfo
+
+    -- * AnalyzeDataDescriptionFeaturesItemText
+    , AnalyzeDataDescriptionFeaturesItemText
+    , analyzeDataDescriptionFeaturesItemText
+    , addfitCount
+
+    -- * AnalyzeModelDescriptionConfusionMatrixAdditional
+    , AnalyzeModelDescriptionConfusionMatrixAdditional
+    , analyzeModelDescriptionConfusionMatrixAdditional
+    , amdcmaAddtional
+
+    -- * AnalyzeDataDescriptionFeaturesItem
+    , AnalyzeDataDescriptionFeaturesItem
+    , analyzeDataDescriptionFeaturesItem
+    , addfiText
+    , addfiNumeric
+    , addfiIndex
+    , addfiCategorical
+
+    -- * Update
+    , Update
+    , update
+    , uCSVInstance
+    , uOutput
+
+    -- * AnalyzeDataDescriptionOutputFeature
+    , AnalyzeDataDescriptionOutputFeature
+    , analyzeDataDescriptionOutputFeature
+    , addofText
+    , addofNumeric
+    ) where
+
+import           Network.Google.Prediction.Types.Product
+import           Network.Google.Prediction.Types.Sum
+import           Network.Google.Prelude
+
+-- | Default request referring to version 'v1.6' of the Prediction API. This contains the host and root path used as a starting point for constructing service requests.
+predictionService :: Service
+predictionService
+  = defaultService (ServiceId "prediction:v1.6")
+      "www.googleapis.com"
+
+-- | View your data in Google Cloud Storage
+devstorageReadOnlyScope :: OAuthScope
+devstorageReadOnlyScope = "https://www.googleapis.com/auth/devstorage.read_only";
+
+-- | Manage your data in Google Cloud Storage
+devstorageReadWriteScope :: OAuthScope
+devstorageReadWriteScope = "https://www.googleapis.com/auth/devstorage.read_write";
+
+-- | Manage your data in the Google Prediction API
+predictionScope :: OAuthScope
+predictionScope = "https://www.googleapis.com/auth/prediction";
+
+-- | Manage your data and permissions in Google Cloud Storage
+devstorageFullControlScope :: OAuthScope
+devstorageFullControlScope = "https://www.googleapis.com/auth/devstorage.full_control";
diff --git a/gen/Network/Google/Prediction/Types/Product.hs b/gen/Network/Google/Prediction/Types/Product.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Prediction/Types/Product.hs
@@ -0,0 +1,1628 @@
+{-# 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.Prediction.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.Prediction.Types.Product where
+
+import           Network.Google.Prediction.Types.Sum
+import           Network.Google.Prelude
+
+-- | Model metadata.
+--
+-- /See:/ 'insert2ModelInfo' smart constructor.
+data Insert2ModelInfo = Insert2ModelInfo
+    { _imiModelType              :: !(Maybe Text)
+    , _imiClassWeightedAccuracy  :: !(Maybe Text)
+    , _imiClassificationAccuracy :: !(Maybe Text)
+    , _imiMeanSquaredError       :: !(Maybe Text)
+    , _imiNumberLabels           :: !(Maybe (Textual Int64))
+    , _imiNumberInstances        :: !(Maybe (Textual Int64))
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Insert2ModelInfo' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'imiModelType'
+--
+-- * 'imiClassWeightedAccuracy'
+--
+-- * 'imiClassificationAccuracy'
+--
+-- * 'imiMeanSquaredError'
+--
+-- * 'imiNumberLabels'
+--
+-- * 'imiNumberInstances'
+insert2ModelInfo
+    :: Insert2ModelInfo
+insert2ModelInfo =
+    Insert2ModelInfo
+    { _imiModelType = Nothing
+    , _imiClassWeightedAccuracy = Nothing
+    , _imiClassificationAccuracy = Nothing
+    , _imiMeanSquaredError = Nothing
+    , _imiNumberLabels = Nothing
+    , _imiNumberInstances = Nothing
+    }
+
+-- | Type of predictive model (CLASSIFICATION or REGRESSION).
+imiModelType :: Lens' Insert2ModelInfo (Maybe Text)
+imiModelType
+  = lens _imiModelType (\ s a -> s{_imiModelType = a})
+
+-- | Estimated accuracy of model taking utility weights into account
+-- (Categorical models only).
+imiClassWeightedAccuracy :: Lens' Insert2ModelInfo (Maybe Text)
+imiClassWeightedAccuracy
+  = lens _imiClassWeightedAccuracy
+      (\ s a -> s{_imiClassWeightedAccuracy = a})
+
+-- | A number between 0.0 and 1.0, where 1.0 is 100% accurate. This is an
+-- estimate, based on the amount and quality of the training data, of the
+-- estimated prediction accuracy. You can use this is a guide to decide
+-- whether the results are accurate enough for your needs. This estimate
+-- will be more reliable if your real input data is similar to your
+-- training data (Categorical models only).
+imiClassificationAccuracy :: Lens' Insert2ModelInfo (Maybe Text)
+imiClassificationAccuracy
+  = lens _imiClassificationAccuracy
+      (\ s a -> s{_imiClassificationAccuracy = a})
+
+-- | An estimated mean squared error. The can be used to measure the quality
+-- of the predicted model (Regression models only).
+imiMeanSquaredError :: Lens' Insert2ModelInfo (Maybe Text)
+imiMeanSquaredError
+  = lens _imiMeanSquaredError
+      (\ s a -> s{_imiMeanSquaredError = a})
+
+-- | Number of class labels in the trained model (Categorical models only).
+imiNumberLabels :: Lens' Insert2ModelInfo (Maybe Int64)
+imiNumberLabels
+  = lens _imiNumberLabels
+      (\ s a -> s{_imiNumberLabels = a})
+      . mapping _Coerce
+
+-- | Number of valid data instances used in the trained model.
+imiNumberInstances :: Lens' Insert2ModelInfo (Maybe Int64)
+imiNumberInstances
+  = lens _imiNumberInstances
+      (\ s a -> s{_imiNumberInstances = a})
+      . mapping _Coerce
+
+instance FromJSON Insert2ModelInfo where
+        parseJSON
+          = withObject "Insert2ModelInfo"
+              (\ o ->
+                 Insert2ModelInfo <$>
+                   (o .:? "modelType") <*>
+                     (o .:? "classWeightedAccuracy")
+                     <*> (o .:? "classificationAccuracy")
+                     <*> (o .:? "meanSquaredError")
+                     <*> (o .:? "numberLabels")
+                     <*> (o .:? "numberInstances"))
+
+instance ToJSON Insert2ModelInfo where
+        toJSON Insert2ModelInfo{..}
+          = object
+              (catMaybes
+                 [("modelType" .=) <$> _imiModelType,
+                  ("classWeightedAccuracy" .=) <$>
+                    _imiClassWeightedAccuracy,
+                  ("classificationAccuracy" .=) <$>
+                    _imiClassificationAccuracy,
+                  ("meanSquaredError" .=) <$> _imiMeanSquaredError,
+                  ("numberLabels" .=) <$> _imiNumberLabels,
+                  ("numberInstances" .=) <$> _imiNumberInstances])
+
+-- | A list of the confusion matrix row totals.
+--
+-- /See:/ 'analyzeModelDescriptionConfusionMatrixRowTotals' smart constructor.
+newtype AnalyzeModelDescriptionConfusionMatrixRowTotals = AnalyzeModelDescriptionConfusionMatrixRowTotals
+    { _amdcmrtAddtional :: HashMap Text Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'AnalyzeModelDescriptionConfusionMatrixRowTotals' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'amdcmrtAddtional'
+analyzeModelDescriptionConfusionMatrixRowTotals
+    :: HashMap Text Text -- ^ 'amdcmrtAddtional'
+    -> AnalyzeModelDescriptionConfusionMatrixRowTotals
+analyzeModelDescriptionConfusionMatrixRowTotals pAmdcmrtAddtional_ =
+    AnalyzeModelDescriptionConfusionMatrixRowTotals
+    { _amdcmrtAddtional = _Coerce # pAmdcmrtAddtional_
+    }
+
+amdcmrtAddtional :: Lens' AnalyzeModelDescriptionConfusionMatrixRowTotals (HashMap Text Text)
+amdcmrtAddtional
+  = lens _amdcmrtAddtional
+      (\ s a -> s{_amdcmrtAddtional = a})
+      . _Coerce
+
+instance FromJSON
+         AnalyzeModelDescriptionConfusionMatrixRowTotals where
+        parseJSON
+          = withObject
+              "AnalyzeModelDescriptionConfusionMatrixRowTotals"
+              (\ o ->
+                 AnalyzeModelDescriptionConfusionMatrixRowTotals <$>
+                   (parseJSONObject o))
+
+instance ToJSON
+         AnalyzeModelDescriptionConfusionMatrixRowTotals where
+        toJSON = toJSON . _amdcmrtAddtional
+
+--
+-- /See:/ 'insert' smart constructor.
+data Insert = Insert
+    { _iStorageDataLocation      :: !(Maybe Text)
+    , _iModelType                :: !(Maybe Text)
+    , _iTrainingInstances        :: !(Maybe [InsertTrainingInstancesItem])
+    , _iUtility                  :: !(Maybe [InsertUtilityItem])
+    , _iStoragePMMLModelLocation :: !(Maybe Text)
+    , _iSourceModel              :: !(Maybe Text)
+    , _iId                       :: !(Maybe Text)
+    , _iStoragePMMLLocation      :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Insert' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'iStorageDataLocation'
+--
+-- * 'iModelType'
+--
+-- * 'iTrainingInstances'
+--
+-- * 'iUtility'
+--
+-- * 'iStoragePMMLModelLocation'
+--
+-- * 'iSourceModel'
+--
+-- * 'iId'
+--
+-- * 'iStoragePMMLLocation'
+insert
+    :: Insert
+insert =
+    Insert
+    { _iStorageDataLocation = Nothing
+    , _iModelType = Nothing
+    , _iTrainingInstances = Nothing
+    , _iUtility = Nothing
+    , _iStoragePMMLModelLocation = Nothing
+    , _iSourceModel = Nothing
+    , _iId = Nothing
+    , _iStoragePMMLLocation = Nothing
+    }
+
+-- | Google storage location of the training data file.
+iStorageDataLocation :: Lens' Insert (Maybe Text)
+iStorageDataLocation
+  = lens _iStorageDataLocation
+      (\ s a -> s{_iStorageDataLocation = a})
+
+-- | Type of predictive model (classification or regression).
+iModelType :: Lens' Insert (Maybe Text)
+iModelType
+  = lens _iModelType (\ s a -> s{_iModelType = a})
+
+-- | Instances to train model on.
+iTrainingInstances :: Lens' Insert [InsertTrainingInstancesItem]
+iTrainingInstances
+  = lens _iTrainingInstances
+      (\ s a -> s{_iTrainingInstances = a})
+      . _Default
+      . _Coerce
+
+-- | A class weighting function, which allows the importance weights for
+-- class labels to be specified (Categorical models only).
+iUtility :: Lens' Insert [InsertUtilityItem]
+iUtility
+  = lens _iUtility (\ s a -> s{_iUtility = a}) .
+      _Default
+      . _Coerce
+
+-- | Google storage location of the pmml model file.
+iStoragePMMLModelLocation :: Lens' Insert (Maybe Text)
+iStoragePMMLModelLocation
+  = lens _iStoragePMMLModelLocation
+      (\ s a -> s{_iStoragePMMLModelLocation = a})
+
+-- | The Id of the model to be copied over.
+iSourceModel :: Lens' Insert (Maybe Text)
+iSourceModel
+  = lens _iSourceModel (\ s a -> s{_iSourceModel = a})
+
+-- | The unique name for the predictive model.
+iId :: Lens' Insert (Maybe Text)
+iId = lens _iId (\ s a -> s{_iId = a})
+
+-- | Google storage location of the preprocessing pmml file.
+iStoragePMMLLocation :: Lens' Insert (Maybe Text)
+iStoragePMMLLocation
+  = lens _iStoragePMMLLocation
+      (\ s a -> s{_iStoragePMMLLocation = a})
+
+instance FromJSON Insert where
+        parseJSON
+          = withObject "Insert"
+              (\ o ->
+                 Insert <$>
+                   (o .:? "storageDataLocation") <*> (o .:? "modelType")
+                     <*> (o .:? "trainingInstances" .!= mempty)
+                     <*> (o .:? "utility" .!= mempty)
+                     <*> (o .:? "storagePMMLModelLocation")
+                     <*> (o .:? "sourceModel")
+                     <*> (o .:? "id")
+                     <*> (o .:? "storagePMMLLocation"))
+
+instance ToJSON Insert where
+        toJSON Insert{..}
+          = object
+              (catMaybes
+                 [("storageDataLocation" .=) <$>
+                    _iStorageDataLocation,
+                  ("modelType" .=) <$> _iModelType,
+                  ("trainingInstances" .=) <$> _iTrainingInstances,
+                  ("utility" .=) <$> _iUtility,
+                  ("storagePMMLModelLocation" .=) <$>
+                    _iStoragePMMLModelLocation,
+                  ("sourceModel" .=) <$> _iSourceModel,
+                  ("id" .=) <$> _iId,
+                  ("storagePMMLLocation" .=) <$>
+                    _iStoragePMMLLocation])
+
+--
+-- /See:/ 'list' smart constructor.
+data List = List
+    { _lNextPageToken :: !(Maybe Text)
+    , _lKind          :: !Text
+    , _lItems         :: !(Maybe [Insert2])
+    , _lSelfLink      :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'List' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'lNextPageToken'
+--
+-- * 'lKind'
+--
+-- * 'lItems'
+--
+-- * 'lSelfLink'
+list
+    :: List
+list =
+    List
+    { _lNextPageToken = Nothing
+    , _lKind = "prediction#list"
+    , _lItems = Nothing
+    , _lSelfLink = Nothing
+    }
+
+-- | Pagination token to fetch the next page, if one exists.
+lNextPageToken :: Lens' List (Maybe Text)
+lNextPageToken
+  = lens _lNextPageToken
+      (\ s a -> s{_lNextPageToken = a})
+
+-- | What kind of resource this is.
+lKind :: Lens' List Text
+lKind = lens _lKind (\ s a -> s{_lKind = a})
+
+-- | List of models.
+lItems :: Lens' List [Insert2]
+lItems
+  = lens _lItems (\ s a -> s{_lItems = a}) . _Default .
+      _Coerce
+
+-- | A URL to re-request this resource.
+lSelfLink :: Lens' List (Maybe Text)
+lSelfLink
+  = lens _lSelfLink (\ s a -> s{_lSelfLink = a})
+
+instance FromJSON List where
+        parseJSON
+          = withObject "List"
+              (\ o ->
+                 List <$>
+                   (o .:? "nextPageToken") <*>
+                     (o .:? "kind" .!= "prediction#list")
+                     <*> (o .:? "items" .!= mempty)
+                     <*> (o .:? "selfLink"))
+
+instance ToJSON List where
+        toJSON List{..}
+          = object
+              (catMaybes
+                 [("nextPageToken" .=) <$> _lNextPageToken,
+                  Just ("kind" .= _lKind), ("items" .=) <$> _lItems,
+                  ("selfLink" .=) <$> _lSelfLink])
+
+-- | Class label (string).
+--
+-- /See:/ 'insertUtilityItem' smart constructor.
+newtype InsertUtilityItem = InsertUtilityItem
+    { _iuiAddtional :: HashMap Text (Textual Double)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'InsertUtilityItem' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'iuiAddtional'
+insertUtilityItem
+    :: HashMap Text Double -- ^ 'iuiAddtional'
+    -> InsertUtilityItem
+insertUtilityItem pIuiAddtional_ =
+    InsertUtilityItem
+    { _iuiAddtional = _Coerce # pIuiAddtional_
+    }
+
+iuiAddtional :: Lens' InsertUtilityItem (HashMap Text Double)
+iuiAddtional
+  = lens _iuiAddtional (\ s a -> s{_iuiAddtional = a})
+      . _Coerce
+
+instance FromJSON InsertUtilityItem where
+        parseJSON
+          = withObject "InsertUtilityItem"
+              (\ o -> InsertUtilityItem <$> (parseJSONObject o))
+
+instance ToJSON InsertUtilityItem where
+        toJSON = toJSON . _iuiAddtional
+
+--
+-- /See:/ 'insert2' smart constructor.
+data Insert2 = Insert2
+    { _insStorageDataLocation      :: !(Maybe Text)
+    , _insModelType                :: !(Maybe Text)
+    , _insKind                     :: !Text
+    , _insCreated                  :: !(Maybe DateTime')
+    , _insTrainingComplete         :: !(Maybe DateTime')
+    , _insSelfLink                 :: !(Maybe Text)
+    , _insTrainingStatus           :: !(Maybe Text)
+    , _insStoragePMMLModelLocation :: !(Maybe Text)
+    , _insId                       :: !(Maybe Text)
+    , _insStoragePMMLLocation      :: !(Maybe Text)
+    , _insModelInfo                :: !(Maybe Insert2ModelInfo)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Insert2' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'insStorageDataLocation'
+--
+-- * 'insModelType'
+--
+-- * 'insKind'
+--
+-- * 'insCreated'
+--
+-- * 'insTrainingComplete'
+--
+-- * 'insSelfLink'
+--
+-- * 'insTrainingStatus'
+--
+-- * 'insStoragePMMLModelLocation'
+--
+-- * 'insId'
+--
+-- * 'insStoragePMMLLocation'
+--
+-- * 'insModelInfo'
+insert2
+    :: Insert2
+insert2 =
+    Insert2
+    { _insStorageDataLocation = Nothing
+    , _insModelType = Nothing
+    , _insKind = "prediction#training"
+    , _insCreated = Nothing
+    , _insTrainingComplete = Nothing
+    , _insSelfLink = Nothing
+    , _insTrainingStatus = Nothing
+    , _insStoragePMMLModelLocation = Nothing
+    , _insId = Nothing
+    , _insStoragePMMLLocation = Nothing
+    , _insModelInfo = Nothing
+    }
+
+-- | Google storage location of the training data file.
+insStorageDataLocation :: Lens' Insert2 (Maybe Text)
+insStorageDataLocation
+  = lens _insStorageDataLocation
+      (\ s a -> s{_insStorageDataLocation = a})
+
+-- | Type of predictive model (CLASSIFICATION or REGRESSION).
+insModelType :: Lens' Insert2 (Maybe Text)
+insModelType
+  = lens _insModelType (\ s a -> s{_insModelType = a})
+
+-- | What kind of resource this is.
+insKind :: Lens' Insert2 Text
+insKind = lens _insKind (\ s a -> s{_insKind = a})
+
+-- | Insert time of the model (as a RFC 3339 timestamp).
+insCreated :: Lens' Insert2 (Maybe UTCTime)
+insCreated
+  = lens _insCreated (\ s a -> s{_insCreated = a}) .
+      mapping _DateTime
+
+-- | Training completion time (as a RFC 3339 timestamp).
+insTrainingComplete :: Lens' Insert2 (Maybe UTCTime)
+insTrainingComplete
+  = lens _insTrainingComplete
+      (\ s a -> s{_insTrainingComplete = a})
+      . mapping _DateTime
+
+-- | A URL to re-request this resource.
+insSelfLink :: Lens' Insert2 (Maybe Text)
+insSelfLink
+  = lens _insSelfLink (\ s a -> s{_insSelfLink = a})
+
+-- | The current status of the training job. This can be one of following:
+-- RUNNING; DONE; ERROR; ERROR: TRAINING JOB NOT FOUND
+insTrainingStatus :: Lens' Insert2 (Maybe Text)
+insTrainingStatus
+  = lens _insTrainingStatus
+      (\ s a -> s{_insTrainingStatus = a})
+
+-- | Google storage location of the pmml model file.
+insStoragePMMLModelLocation :: Lens' Insert2 (Maybe Text)
+insStoragePMMLModelLocation
+  = lens _insStoragePMMLModelLocation
+      (\ s a -> s{_insStoragePMMLModelLocation = a})
+
+-- | The unique name for the predictive model.
+insId :: Lens' Insert2 (Maybe Text)
+insId = lens _insId (\ s a -> s{_insId = a})
+
+-- | Google storage location of the preprocessing pmml file.
+insStoragePMMLLocation :: Lens' Insert2 (Maybe Text)
+insStoragePMMLLocation
+  = lens _insStoragePMMLLocation
+      (\ s a -> s{_insStoragePMMLLocation = a})
+
+-- | Model metadata.
+insModelInfo :: Lens' Insert2 (Maybe Insert2ModelInfo)
+insModelInfo
+  = lens _insModelInfo (\ s a -> s{_insModelInfo = a})
+
+instance FromJSON Insert2 where
+        parseJSON
+          = withObject "Insert2"
+              (\ o ->
+                 Insert2 <$>
+                   (o .:? "storageDataLocation") <*> (o .:? "modelType")
+                     <*> (o .:? "kind" .!= "prediction#training")
+                     <*> (o .:? "created")
+                     <*> (o .:? "trainingComplete")
+                     <*> (o .:? "selfLink")
+                     <*> (o .:? "trainingStatus")
+                     <*> (o .:? "storagePMMLModelLocation")
+                     <*> (o .:? "id")
+                     <*> (o .:? "storagePMMLLocation")
+                     <*> (o .:? "modelInfo"))
+
+instance ToJSON Insert2 where
+        toJSON Insert2{..}
+          = object
+              (catMaybes
+                 [("storageDataLocation" .=) <$>
+                    _insStorageDataLocation,
+                  ("modelType" .=) <$> _insModelType,
+                  Just ("kind" .= _insKind),
+                  ("created" .=) <$> _insCreated,
+                  ("trainingComplete" .=) <$> _insTrainingComplete,
+                  ("selfLink" .=) <$> _insSelfLink,
+                  ("trainingStatus" .=) <$> _insTrainingStatus,
+                  ("storagePMMLModelLocation" .=) <$>
+                    _insStoragePMMLModelLocation,
+                  ("id" .=) <$> _insId,
+                  ("storagePMMLLocation" .=) <$>
+                    _insStoragePMMLLocation,
+                  ("modelInfo" .=) <$> _insModelInfo])
+
+--
+-- /See:/ 'insertTrainingInstancesItem' smart constructor.
+data InsertTrainingInstancesItem = InsertTrainingInstancesItem
+    { _itiiCSVInstance :: !(Maybe [JSONValue])
+    , _itiiOutput      :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'InsertTrainingInstancesItem' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'itiiCSVInstance'
+--
+-- * 'itiiOutput'
+insertTrainingInstancesItem
+    :: InsertTrainingInstancesItem
+insertTrainingInstancesItem =
+    InsertTrainingInstancesItem
+    { _itiiCSVInstance = Nothing
+    , _itiiOutput = Nothing
+    }
+
+-- | The input features for this instance.
+itiiCSVInstance :: Lens' InsertTrainingInstancesItem [JSONValue]
+itiiCSVInstance
+  = lens _itiiCSVInstance
+      (\ s a -> s{_itiiCSVInstance = a})
+      . _Default
+      . _Coerce
+
+-- | The generic output value - could be regression or class label.
+itiiOutput :: Lens' InsertTrainingInstancesItem (Maybe Text)
+itiiOutput
+  = lens _itiiOutput (\ s a -> s{_itiiOutput = a})
+
+instance FromJSON InsertTrainingInstancesItem where
+        parseJSON
+          = withObject "InsertTrainingInstancesItem"
+              (\ o ->
+                 InsertTrainingInstancesItem <$>
+                   (o .:? "csvInstance" .!= mempty) <*>
+                     (o .:? "output"))
+
+instance ToJSON InsertTrainingInstancesItem where
+        toJSON InsertTrainingInstancesItem{..}
+          = object
+              (catMaybes
+                 [("csvInstance" .=) <$> _itiiCSVInstance,
+                  ("output" .=) <$> _itiiOutput])
+
+-- | Input to the model for a prediction.
+--
+-- /See:/ 'inputInput' smart constructor.
+newtype InputInput = InputInput
+    { _iiCSVInstance :: Maybe [JSONValue]
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'InputInput' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'iiCSVInstance'
+inputInput
+    :: InputInput
+inputInput =
+    InputInput
+    { _iiCSVInstance = Nothing
+    }
+
+-- | A list of input features, these can be strings or doubles.
+iiCSVInstance :: Lens' InputInput [JSONValue]
+iiCSVInstance
+  = lens _iiCSVInstance
+      (\ s a -> s{_iiCSVInstance = a})
+      . _Default
+      . _Coerce
+
+instance FromJSON InputInput where
+        parseJSON
+          = withObject "InputInput"
+              (\ o ->
+                 InputInput <$> (o .:? "csvInstance" .!= mempty))
+
+instance ToJSON InputInput where
+        toJSON InputInput{..}
+          = object
+              (catMaybes [("csvInstance" .=) <$> _iiCSVInstance])
+
+--
+-- /See:/ 'analyzeDataDescriptionFeaturesItemCategoricalValuesItem' smart constructor.
+data AnalyzeDataDescriptionFeaturesItemCategoricalValuesItem = AnalyzeDataDescriptionFeaturesItemCategoricalValuesItem
+    { _addficviValue :: !(Maybe Text)
+    , _addficviCount :: !(Maybe (Textual Int64))
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'AnalyzeDataDescriptionFeaturesItemCategoricalValuesItem' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'addficviValue'
+--
+-- * 'addficviCount'
+analyzeDataDescriptionFeaturesItemCategoricalValuesItem
+    :: AnalyzeDataDescriptionFeaturesItemCategoricalValuesItem
+analyzeDataDescriptionFeaturesItemCategoricalValuesItem =
+    AnalyzeDataDescriptionFeaturesItemCategoricalValuesItem
+    { _addficviValue = Nothing
+    , _addficviCount = Nothing
+    }
+
+-- | The category name.
+addficviValue :: Lens' AnalyzeDataDescriptionFeaturesItemCategoricalValuesItem (Maybe Text)
+addficviValue
+  = lens _addficviValue
+      (\ s a -> s{_addficviValue = a})
+
+-- | Number of times this feature had this value.
+addficviCount :: Lens' AnalyzeDataDescriptionFeaturesItemCategoricalValuesItem (Maybe Int64)
+addficviCount
+  = lens _addficviCount
+      (\ s a -> s{_addficviCount = a})
+      . mapping _Coerce
+
+instance FromJSON
+         AnalyzeDataDescriptionFeaturesItemCategoricalValuesItem
+         where
+        parseJSON
+          = withObject
+              "AnalyzeDataDescriptionFeaturesItemCategoricalValuesItem"
+              (\ o ->
+                 AnalyzeDataDescriptionFeaturesItemCategoricalValuesItem
+                   <$> (o .:? "value") <*> (o .:? "count"))
+
+instance ToJSON
+         AnalyzeDataDescriptionFeaturesItemCategoricalValuesItem
+         where
+        toJSON
+          AnalyzeDataDescriptionFeaturesItemCategoricalValuesItem{..}
+          = object
+              (catMaybes
+                 [("value" .=) <$> _addficviValue,
+                  ("count" .=) <$> _addficviCount])
+
+-- | Description of the numeric values of this feature.
+--
+-- /See:/ 'analyzeDataDescriptionFeaturesItemNumeric' smart constructor.
+data AnalyzeDataDescriptionFeaturesItemNumeric = AnalyzeDataDescriptionFeaturesItemNumeric
+    { _addfinMean     :: !(Maybe Text)
+    , _addfinCount    :: !(Maybe (Textual Int64))
+    , _addfinVariance :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'AnalyzeDataDescriptionFeaturesItemNumeric' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'addfinMean'
+--
+-- * 'addfinCount'
+--
+-- * 'addfinVariance'
+analyzeDataDescriptionFeaturesItemNumeric
+    :: AnalyzeDataDescriptionFeaturesItemNumeric
+analyzeDataDescriptionFeaturesItemNumeric =
+    AnalyzeDataDescriptionFeaturesItemNumeric
+    { _addfinMean = Nothing
+    , _addfinCount = Nothing
+    , _addfinVariance = Nothing
+    }
+
+-- | Mean of the numeric values of this feature in the data set.
+addfinMean :: Lens' AnalyzeDataDescriptionFeaturesItemNumeric (Maybe Text)
+addfinMean
+  = lens _addfinMean (\ s a -> s{_addfinMean = a})
+
+-- | Number of numeric values for this feature in the data set.
+addfinCount :: Lens' AnalyzeDataDescriptionFeaturesItemNumeric (Maybe Int64)
+addfinCount
+  = lens _addfinCount (\ s a -> s{_addfinCount = a}) .
+      mapping _Coerce
+
+-- | Variance of the numeric values of this feature in the data set.
+addfinVariance :: Lens' AnalyzeDataDescriptionFeaturesItemNumeric (Maybe Text)
+addfinVariance
+  = lens _addfinVariance
+      (\ s a -> s{_addfinVariance = a})
+
+instance FromJSON
+         AnalyzeDataDescriptionFeaturesItemNumeric where
+        parseJSON
+          = withObject
+              "AnalyzeDataDescriptionFeaturesItemNumeric"
+              (\ o ->
+                 AnalyzeDataDescriptionFeaturesItemNumeric <$>
+                   (o .:? "mean") <*> (o .:? "count") <*>
+                     (o .:? "variance"))
+
+instance ToJSON
+         AnalyzeDataDescriptionFeaturesItemNumeric where
+        toJSON AnalyzeDataDescriptionFeaturesItemNumeric{..}
+          = object
+              (catMaybes
+                 [("mean" .=) <$> _addfinMean,
+                  ("count" .=) <$> _addfinCount,
+                  ("variance" .=) <$> _addfinVariance])
+
+--
+-- /See:/ 'input' smart constructor.
+newtype Input = Input
+    { _iInput :: Maybe InputInput
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Input' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'iInput'
+input
+    :: Input
+input =
+    Input
+    { _iInput = Nothing
+    }
+
+-- | Input to the model for a prediction.
+iInput :: Lens' Input (Maybe InputInput)
+iInput = lens _iInput (\ s a -> s{_iInput = a})
+
+instance FromJSON Input where
+        parseJSON
+          = withObject "Input"
+              (\ o -> Input <$> (o .:? "input"))
+
+instance ToJSON Input where
+        toJSON Input{..}
+          = object (catMaybes [("input" .=) <$> _iInput])
+
+-- | Description of the categorical values of this feature.
+--
+-- /See:/ 'analyzeDataDescriptionFeaturesItemCategorical' smart constructor.
+data AnalyzeDataDescriptionFeaturesItemCategorical = AnalyzeDataDescriptionFeaturesItemCategorical
+    { _addficValues :: !(Maybe [AnalyzeDataDescriptionFeaturesItemCategoricalValuesItem])
+    , _addficCount  :: !(Maybe (Textual Int64))
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'AnalyzeDataDescriptionFeaturesItemCategorical' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'addficValues'
+--
+-- * 'addficCount'
+analyzeDataDescriptionFeaturesItemCategorical
+    :: AnalyzeDataDescriptionFeaturesItemCategorical
+analyzeDataDescriptionFeaturesItemCategorical =
+    AnalyzeDataDescriptionFeaturesItemCategorical
+    { _addficValues = Nothing
+    , _addficCount = Nothing
+    }
+
+-- | List of all the categories for this feature in the data set.
+addficValues :: Lens' AnalyzeDataDescriptionFeaturesItemCategorical [AnalyzeDataDescriptionFeaturesItemCategoricalValuesItem]
+addficValues
+  = lens _addficValues (\ s a -> s{_addficValues = a})
+      . _Default
+      . _Coerce
+
+-- | Number of categorical values for this feature in the data.
+addficCount :: Lens' AnalyzeDataDescriptionFeaturesItemCategorical (Maybe Int64)
+addficCount
+  = lens _addficCount (\ s a -> s{_addficCount = a}) .
+      mapping _Coerce
+
+instance FromJSON
+         AnalyzeDataDescriptionFeaturesItemCategorical where
+        parseJSON
+          = withObject
+              "AnalyzeDataDescriptionFeaturesItemCategorical"
+              (\ o ->
+                 AnalyzeDataDescriptionFeaturesItemCategorical <$>
+                   (o .:? "values" .!= mempty) <*> (o .:? "count"))
+
+instance ToJSON
+         AnalyzeDataDescriptionFeaturesItemCategorical where
+        toJSON
+          AnalyzeDataDescriptionFeaturesItemCategorical{..}
+          = object
+              (catMaybes
+                 [("values" .=) <$> _addficValues,
+                  ("count" .=) <$> _addficCount])
+
+--
+-- /See:/ 'analyzeDataDescriptionOutputFeatureTextItem' smart constructor.
+data AnalyzeDataDescriptionOutputFeatureTextItem = AnalyzeDataDescriptionOutputFeatureTextItem
+    { _addoftiValue :: !(Maybe Text)
+    , _addoftiCount :: !(Maybe (Textual Int64))
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'AnalyzeDataDescriptionOutputFeatureTextItem' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'addoftiValue'
+--
+-- * 'addoftiCount'
+analyzeDataDescriptionOutputFeatureTextItem
+    :: AnalyzeDataDescriptionOutputFeatureTextItem
+analyzeDataDescriptionOutputFeatureTextItem =
+    AnalyzeDataDescriptionOutputFeatureTextItem
+    { _addoftiValue = Nothing
+    , _addoftiCount = Nothing
+    }
+
+-- | The output label.
+addoftiValue :: Lens' AnalyzeDataDescriptionOutputFeatureTextItem (Maybe Text)
+addoftiValue
+  = lens _addoftiValue (\ s a -> s{_addoftiValue = a})
+
+-- | Number of times the output label occurred in the data set.
+addoftiCount :: Lens' AnalyzeDataDescriptionOutputFeatureTextItem (Maybe Int64)
+addoftiCount
+  = lens _addoftiCount (\ s a -> s{_addoftiCount = a})
+      . mapping _Coerce
+
+instance FromJSON
+         AnalyzeDataDescriptionOutputFeatureTextItem where
+        parseJSON
+          = withObject
+              "AnalyzeDataDescriptionOutputFeatureTextItem"
+              (\ o ->
+                 AnalyzeDataDescriptionOutputFeatureTextItem <$>
+                   (o .:? "value") <*> (o .:? "count"))
+
+instance ToJSON
+         AnalyzeDataDescriptionOutputFeatureTextItem where
+        toJSON
+          AnalyzeDataDescriptionOutputFeatureTextItem{..}
+          = object
+              (catMaybes
+                 [("value" .=) <$> _addoftiValue,
+                  ("count" .=) <$> _addoftiCount])
+
+--
+-- /See:/ 'outputOutputMultiItem' smart constructor.
+data OutputOutputMultiItem = OutputOutputMultiItem
+    { _oomiScore :: !(Maybe Text)
+    , _oomiLabel :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'OutputOutputMultiItem' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'oomiScore'
+--
+-- * 'oomiLabel'
+outputOutputMultiItem
+    :: OutputOutputMultiItem
+outputOutputMultiItem =
+    OutputOutputMultiItem
+    { _oomiScore = Nothing
+    , _oomiLabel = Nothing
+    }
+
+-- | The probability of the class label.
+oomiScore :: Lens' OutputOutputMultiItem (Maybe Text)
+oomiScore
+  = lens _oomiScore (\ s a -> s{_oomiScore = a})
+
+-- | The class label.
+oomiLabel :: Lens' OutputOutputMultiItem (Maybe Text)
+oomiLabel
+  = lens _oomiLabel (\ s a -> s{_oomiLabel = a})
+
+instance FromJSON OutputOutputMultiItem where
+        parseJSON
+          = withObject "OutputOutputMultiItem"
+              (\ o ->
+                 OutputOutputMultiItem <$>
+                   (o .:? "score") <*> (o .:? "label"))
+
+instance ToJSON OutputOutputMultiItem where
+        toJSON OutputOutputMultiItem{..}
+          = object
+              (catMaybes
+                 [("score" .=) <$> _oomiScore,
+                  ("label" .=) <$> _oomiLabel])
+
+--
+-- /See:/ 'analyze' smart constructor.
+data Analyze = Analyze
+    { _aKind             :: !Text
+    , _aModelDescription :: !(Maybe AnalyzeModelDescription)
+    , _aSelfLink         :: !(Maybe Text)
+    , _aId               :: !(Maybe Text)
+    , _aErrors           :: !(Maybe [AnalyzeErrorsItem])
+    , _aDataDescription  :: !(Maybe AnalyzeDataDescription)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Analyze' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'aKind'
+--
+-- * 'aModelDescription'
+--
+-- * 'aSelfLink'
+--
+-- * 'aId'
+--
+-- * 'aErrors'
+--
+-- * 'aDataDescription'
+analyze
+    :: Analyze
+analyze =
+    Analyze
+    { _aKind = "prediction#analyze"
+    , _aModelDescription = Nothing
+    , _aSelfLink = Nothing
+    , _aId = Nothing
+    , _aErrors = Nothing
+    , _aDataDescription = Nothing
+    }
+
+-- | What kind of resource this is.
+aKind :: Lens' Analyze Text
+aKind = lens _aKind (\ s a -> s{_aKind = a})
+
+-- | Description of the model.
+aModelDescription :: Lens' Analyze (Maybe AnalyzeModelDescription)
+aModelDescription
+  = lens _aModelDescription
+      (\ s a -> s{_aModelDescription = a})
+
+-- | A URL to re-request this resource.
+aSelfLink :: Lens' Analyze (Maybe Text)
+aSelfLink
+  = lens _aSelfLink (\ s a -> s{_aSelfLink = a})
+
+-- | The unique name for the predictive model.
+aId :: Lens' Analyze (Maybe Text)
+aId = lens _aId (\ s a -> s{_aId = a})
+
+-- | List of errors with the data.
+aErrors :: Lens' Analyze [AnalyzeErrorsItem]
+aErrors
+  = lens _aErrors (\ s a -> s{_aErrors = a}) . _Default
+      . _Coerce
+
+-- | Description of the data the model was trained on.
+aDataDescription :: Lens' Analyze (Maybe AnalyzeDataDescription)
+aDataDescription
+  = lens _aDataDescription
+      (\ s a -> s{_aDataDescription = a})
+
+instance FromJSON Analyze where
+        parseJSON
+          = withObject "Analyze"
+              (\ o ->
+                 Analyze <$>
+                   (o .:? "kind" .!= "prediction#analyze") <*>
+                     (o .:? "modelDescription")
+                     <*> (o .:? "selfLink")
+                     <*> (o .:? "id")
+                     <*> (o .:? "errors" .!= mempty)
+                     <*> (o .:? "dataDescription"))
+
+instance ToJSON Analyze where
+        toJSON Analyze{..}
+          = object
+              (catMaybes
+                 [Just ("kind" .= _aKind),
+                  ("modelDescription" .=) <$> _aModelDescription,
+                  ("selfLink" .=) <$> _aSelfLink, ("id" .=) <$> _aId,
+                  ("errors" .=) <$> _aErrors,
+                  ("dataDescription" .=) <$> _aDataDescription])
+
+-- | An output confusion matrix. This shows an estimate for how this model
+-- will do in predictions. This is first indexed by the true class label.
+-- For each true class label, this provides a pair {predicted_label,
+-- count}, where count is the estimated number of times the model will
+-- predict the predicted label given the true label. Will not output if
+-- more then 100 classes (Categorical models only).
+--
+-- /See:/ 'analyzeModelDescriptionConfusionMatrix' smart constructor.
+newtype AnalyzeModelDescriptionConfusionMatrix = AnalyzeModelDescriptionConfusionMatrix
+    { _amdcmAddtional :: HashMap Text AnalyzeModelDescriptionConfusionMatrixAdditional
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'AnalyzeModelDescriptionConfusionMatrix' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'amdcmAddtional'
+analyzeModelDescriptionConfusionMatrix
+    :: HashMap Text AnalyzeModelDescriptionConfusionMatrixAdditional -- ^ 'amdcmAddtional'
+    -> AnalyzeModelDescriptionConfusionMatrix
+analyzeModelDescriptionConfusionMatrix pAmdcmAddtional_ =
+    AnalyzeModelDescriptionConfusionMatrix
+    { _amdcmAddtional = _Coerce # pAmdcmAddtional_
+    }
+
+-- | Confusion matrix information for the true class label.
+amdcmAddtional :: Lens' AnalyzeModelDescriptionConfusionMatrix (HashMap Text AnalyzeModelDescriptionConfusionMatrixAdditional)
+amdcmAddtional
+  = lens _amdcmAddtional
+      (\ s a -> s{_amdcmAddtional = a})
+      . _Coerce
+
+instance FromJSON
+         AnalyzeModelDescriptionConfusionMatrix where
+        parseJSON
+          = withObject "AnalyzeModelDescriptionConfusionMatrix"
+              (\ o ->
+                 AnalyzeModelDescriptionConfusionMatrix <$>
+                   (parseJSONObject o))
+
+instance ToJSON
+         AnalyzeModelDescriptionConfusionMatrix where
+        toJSON = toJSON . _amdcmAddtional
+
+--
+-- /See:/ 'output' smart constructor.
+data Output = Output
+    { _oOutputValue :: !(Maybe Text)
+    , _oKind        :: !Text
+    , _oOutputLabel :: !(Maybe Text)
+    , _oSelfLink    :: !(Maybe Text)
+    , _oId          :: !(Maybe Text)
+    , _oOutputMulti :: !(Maybe [OutputOutputMultiItem])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Output' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'oOutputValue'
+--
+-- * 'oKind'
+--
+-- * 'oOutputLabel'
+--
+-- * 'oSelfLink'
+--
+-- * 'oId'
+--
+-- * 'oOutputMulti'
+output
+    :: Output
+output =
+    Output
+    { _oOutputValue = Nothing
+    , _oKind = "prediction#output"
+    , _oOutputLabel = Nothing
+    , _oSelfLink = Nothing
+    , _oId = Nothing
+    , _oOutputMulti = Nothing
+    }
+
+-- | The estimated regression value (Regression models only).
+oOutputValue :: Lens' Output (Maybe Text)
+oOutputValue
+  = lens _oOutputValue (\ s a -> s{_oOutputValue = a})
+
+-- | What kind of resource this is.
+oKind :: Lens' Output Text
+oKind = lens _oKind (\ s a -> s{_oKind = a})
+
+-- | The most likely class label (Categorical models only).
+oOutputLabel :: Lens' Output (Maybe Text)
+oOutputLabel
+  = lens _oOutputLabel (\ s a -> s{_oOutputLabel = a})
+
+-- | A URL to re-request this resource.
+oSelfLink :: Lens' Output (Maybe Text)
+oSelfLink
+  = lens _oSelfLink (\ s a -> s{_oSelfLink = a})
+
+-- | The unique name for the predictive model.
+oId :: Lens' Output (Maybe Text)
+oId = lens _oId (\ s a -> s{_oId = a})
+
+-- | A list of class labels with their estimated probabilities (Categorical
+-- models only).
+oOutputMulti :: Lens' Output [OutputOutputMultiItem]
+oOutputMulti
+  = lens _oOutputMulti (\ s a -> s{_oOutputMulti = a})
+      . _Default
+      . _Coerce
+
+instance FromJSON Output where
+        parseJSON
+          = withObject "Output"
+              (\ o ->
+                 Output <$>
+                   (o .:? "outputValue") <*>
+                     (o .:? "kind" .!= "prediction#output")
+                     <*> (o .:? "outputLabel")
+                     <*> (o .:? "selfLink")
+                     <*> (o .:? "id")
+                     <*> (o .:? "outputMulti" .!= mempty))
+
+instance ToJSON Output where
+        toJSON Output{..}
+          = object
+              (catMaybes
+                 [("outputValue" .=) <$> _oOutputValue,
+                  Just ("kind" .= _oKind),
+                  ("outputLabel" .=) <$> _oOutputLabel,
+                  ("selfLink" .=) <$> _oSelfLink, ("id" .=) <$> _oId,
+                  ("outputMulti" .=) <$> _oOutputMulti])
+
+-- | Description of the output values in the data set.
+--
+-- /See:/ 'analyzeDataDescriptionOutputFeatureNumeric' smart constructor.
+data AnalyzeDataDescriptionOutputFeatureNumeric = AnalyzeDataDescriptionOutputFeatureNumeric
+    { _addofnMean     :: !(Maybe Text)
+    , _addofnCount    :: !(Maybe (Textual Int64))
+    , _addofnVariance :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'AnalyzeDataDescriptionOutputFeatureNumeric' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'addofnMean'
+--
+-- * 'addofnCount'
+--
+-- * 'addofnVariance'
+analyzeDataDescriptionOutputFeatureNumeric
+    :: AnalyzeDataDescriptionOutputFeatureNumeric
+analyzeDataDescriptionOutputFeatureNumeric =
+    AnalyzeDataDescriptionOutputFeatureNumeric
+    { _addofnMean = Nothing
+    , _addofnCount = Nothing
+    , _addofnVariance = Nothing
+    }
+
+-- | Mean of the output values in the data set.
+addofnMean :: Lens' AnalyzeDataDescriptionOutputFeatureNumeric (Maybe Text)
+addofnMean
+  = lens _addofnMean (\ s a -> s{_addofnMean = a})
+
+-- | Number of numeric output values in the data set.
+addofnCount :: Lens' AnalyzeDataDescriptionOutputFeatureNumeric (Maybe Int64)
+addofnCount
+  = lens _addofnCount (\ s a -> s{_addofnCount = a}) .
+      mapping _Coerce
+
+-- | Variance of the output values in the data set.
+addofnVariance :: Lens' AnalyzeDataDescriptionOutputFeatureNumeric (Maybe Text)
+addofnVariance
+  = lens _addofnVariance
+      (\ s a -> s{_addofnVariance = a})
+
+instance FromJSON
+         AnalyzeDataDescriptionOutputFeatureNumeric where
+        parseJSON
+          = withObject
+              "AnalyzeDataDescriptionOutputFeatureNumeric"
+              (\ o ->
+                 AnalyzeDataDescriptionOutputFeatureNumeric <$>
+                   (o .:? "mean") <*> (o .:? "count") <*>
+                     (o .:? "variance"))
+
+instance ToJSON
+         AnalyzeDataDescriptionOutputFeatureNumeric where
+        toJSON AnalyzeDataDescriptionOutputFeatureNumeric{..}
+          = object
+              (catMaybes
+                 [("mean" .=) <$> _addofnMean,
+                  ("count" .=) <$> _addofnCount,
+                  ("variance" .=) <$> _addofnVariance])
+
+--
+-- /See:/ 'analyzeErrorsItem' smart constructor.
+newtype AnalyzeErrorsItem = AnalyzeErrorsItem
+    { _aeiAddtional :: HashMap Text Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'AnalyzeErrorsItem' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'aeiAddtional'
+analyzeErrorsItem
+    :: HashMap Text Text -- ^ 'aeiAddtional'
+    -> AnalyzeErrorsItem
+analyzeErrorsItem pAeiAddtional_ =
+    AnalyzeErrorsItem
+    { _aeiAddtional = _Coerce # pAeiAddtional_
+    }
+
+-- | Error level followed by a detailed error message.
+aeiAddtional :: Lens' AnalyzeErrorsItem (HashMap Text Text)
+aeiAddtional
+  = lens _aeiAddtional (\ s a -> s{_aeiAddtional = a})
+      . _Coerce
+
+instance FromJSON AnalyzeErrorsItem where
+        parseJSON
+          = withObject "AnalyzeErrorsItem"
+              (\ o -> AnalyzeErrorsItem <$> (parseJSONObject o))
+
+instance ToJSON AnalyzeErrorsItem where
+        toJSON = toJSON . _aeiAddtional
+
+-- | Description of the data the model was trained on.
+--
+-- /See:/ 'analyzeDataDescription' smart constructor.
+data AnalyzeDataDescription = AnalyzeDataDescription
+    { _addOutputFeature :: !(Maybe AnalyzeDataDescriptionOutputFeature)
+    , _addFeatures      :: !(Maybe [AnalyzeDataDescriptionFeaturesItem])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'AnalyzeDataDescription' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'addOutputFeature'
+--
+-- * 'addFeatures'
+analyzeDataDescription
+    :: AnalyzeDataDescription
+analyzeDataDescription =
+    AnalyzeDataDescription
+    { _addOutputFeature = Nothing
+    , _addFeatures = Nothing
+    }
+
+-- | Description of the output value or label.
+addOutputFeature :: Lens' AnalyzeDataDescription (Maybe AnalyzeDataDescriptionOutputFeature)
+addOutputFeature
+  = lens _addOutputFeature
+      (\ s a -> s{_addOutputFeature = a})
+
+-- | Description of the input features in the data set.
+addFeatures :: Lens' AnalyzeDataDescription [AnalyzeDataDescriptionFeaturesItem]
+addFeatures
+  = lens _addFeatures (\ s a -> s{_addFeatures = a}) .
+      _Default
+      . _Coerce
+
+instance FromJSON AnalyzeDataDescription where
+        parseJSON
+          = withObject "AnalyzeDataDescription"
+              (\ o ->
+                 AnalyzeDataDescription <$>
+                   (o .:? "outputFeature") <*>
+                     (o .:? "features" .!= mempty))
+
+instance ToJSON AnalyzeDataDescription where
+        toJSON AnalyzeDataDescription{..}
+          = object
+              (catMaybes
+                 [("outputFeature" .=) <$> _addOutputFeature,
+                  ("features" .=) <$> _addFeatures])
+
+-- | Description of the model.
+--
+-- /See:/ 'analyzeModelDescription' smart constructor.
+data AnalyzeModelDescription = AnalyzeModelDescription
+    { _amdConfusionMatrixRowTotals :: !(Maybe AnalyzeModelDescriptionConfusionMatrixRowTotals)
+    , _amdConfusionMatrix          :: !(Maybe AnalyzeModelDescriptionConfusionMatrix)
+    , _amdModelInfo                :: !(Maybe Insert2)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'AnalyzeModelDescription' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'amdConfusionMatrixRowTotals'
+--
+-- * 'amdConfusionMatrix'
+--
+-- * 'amdModelInfo'
+analyzeModelDescription
+    :: AnalyzeModelDescription
+analyzeModelDescription =
+    AnalyzeModelDescription
+    { _amdConfusionMatrixRowTotals = Nothing
+    , _amdConfusionMatrix = Nothing
+    , _amdModelInfo = Nothing
+    }
+
+-- | A list of the confusion matrix row totals.
+amdConfusionMatrixRowTotals :: Lens' AnalyzeModelDescription (Maybe AnalyzeModelDescriptionConfusionMatrixRowTotals)
+amdConfusionMatrixRowTotals
+  = lens _amdConfusionMatrixRowTotals
+      (\ s a -> s{_amdConfusionMatrixRowTotals = a})
+
+-- | An output confusion matrix. This shows an estimate for how this model
+-- will do in predictions. This is first indexed by the true class label.
+-- For each true class label, this provides a pair {predicted_label,
+-- count}, where count is the estimated number of times the model will
+-- predict the predicted label given the true label. Will not output if
+-- more then 100 classes (Categorical models only).
+amdConfusionMatrix :: Lens' AnalyzeModelDescription (Maybe AnalyzeModelDescriptionConfusionMatrix)
+amdConfusionMatrix
+  = lens _amdConfusionMatrix
+      (\ s a -> s{_amdConfusionMatrix = a})
+
+-- | Basic information about the model.
+amdModelInfo :: Lens' AnalyzeModelDescription (Maybe Insert2)
+amdModelInfo
+  = lens _amdModelInfo (\ s a -> s{_amdModelInfo = a})
+
+instance FromJSON AnalyzeModelDescription where
+        parseJSON
+          = withObject "AnalyzeModelDescription"
+              (\ o ->
+                 AnalyzeModelDescription <$>
+                   (o .:? "confusionMatrixRowTotals") <*>
+                     (o .:? "confusionMatrix")
+                     <*> (o .:? "modelinfo"))
+
+instance ToJSON AnalyzeModelDescription where
+        toJSON AnalyzeModelDescription{..}
+          = object
+              (catMaybes
+                 [("confusionMatrixRowTotals" .=) <$>
+                    _amdConfusionMatrixRowTotals,
+                  ("confusionMatrix" .=) <$> _amdConfusionMatrix,
+                  ("modelinfo" .=) <$> _amdModelInfo])
+
+-- | Description of multiple-word text values of this feature.
+--
+-- /See:/ 'analyzeDataDescriptionFeaturesItemText' smart constructor.
+newtype AnalyzeDataDescriptionFeaturesItemText = AnalyzeDataDescriptionFeaturesItemText
+    { _addfitCount :: Maybe (Textual Int64)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'AnalyzeDataDescriptionFeaturesItemText' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'addfitCount'
+analyzeDataDescriptionFeaturesItemText
+    :: AnalyzeDataDescriptionFeaturesItemText
+analyzeDataDescriptionFeaturesItemText =
+    AnalyzeDataDescriptionFeaturesItemText
+    { _addfitCount = Nothing
+    }
+
+-- | Number of multiple-word text values for this feature.
+addfitCount :: Lens' AnalyzeDataDescriptionFeaturesItemText (Maybe Int64)
+addfitCount
+  = lens _addfitCount (\ s a -> s{_addfitCount = a}) .
+      mapping _Coerce
+
+instance FromJSON
+         AnalyzeDataDescriptionFeaturesItemText where
+        parseJSON
+          = withObject "AnalyzeDataDescriptionFeaturesItemText"
+              (\ o ->
+                 AnalyzeDataDescriptionFeaturesItemText <$>
+                   (o .:? "count"))
+
+instance ToJSON
+         AnalyzeDataDescriptionFeaturesItemText where
+        toJSON AnalyzeDataDescriptionFeaturesItemText{..}
+          = object (catMaybes [("count" .=) <$> _addfitCount])
+
+-- | Confusion matrix information for the true class label.
+--
+-- /See:/ 'analyzeModelDescriptionConfusionMatrixAdditional' smart constructor.
+newtype AnalyzeModelDescriptionConfusionMatrixAdditional = AnalyzeModelDescriptionConfusionMatrixAdditional
+    { _amdcmaAddtional :: HashMap Text Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'AnalyzeModelDescriptionConfusionMatrixAdditional' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'amdcmaAddtional'
+analyzeModelDescriptionConfusionMatrixAdditional
+    :: HashMap Text Text -- ^ 'amdcmaAddtional'
+    -> AnalyzeModelDescriptionConfusionMatrixAdditional
+analyzeModelDescriptionConfusionMatrixAdditional pAmdcmaAddtional_ =
+    AnalyzeModelDescriptionConfusionMatrixAdditional
+    { _amdcmaAddtional = _Coerce # pAmdcmaAddtional_
+    }
+
+-- | Average number of times an instance with correct class label
+-- modelDescription.confusionMatrix.(key) was wrongfully classified as this
+-- label.
+amdcmaAddtional :: Lens' AnalyzeModelDescriptionConfusionMatrixAdditional (HashMap Text Text)
+amdcmaAddtional
+  = lens _amdcmaAddtional
+      (\ s a -> s{_amdcmaAddtional = a})
+      . _Coerce
+
+instance FromJSON
+         AnalyzeModelDescriptionConfusionMatrixAdditional
+         where
+        parseJSON
+          = withObject
+              "AnalyzeModelDescriptionConfusionMatrixAdditional"
+              (\ o ->
+                 AnalyzeModelDescriptionConfusionMatrixAdditional <$>
+                   (parseJSONObject o))
+
+instance ToJSON
+         AnalyzeModelDescriptionConfusionMatrixAdditional
+         where
+        toJSON = toJSON . _amdcmaAddtional
+
+--
+-- /See:/ 'analyzeDataDescriptionFeaturesItem' smart constructor.
+data AnalyzeDataDescriptionFeaturesItem = AnalyzeDataDescriptionFeaturesItem
+    { _addfiText        :: !(Maybe AnalyzeDataDescriptionFeaturesItemText)
+    , _addfiNumeric     :: !(Maybe AnalyzeDataDescriptionFeaturesItemNumeric)
+    , _addfiIndex       :: !(Maybe (Textual Int64))
+    , _addfiCategorical :: !(Maybe AnalyzeDataDescriptionFeaturesItemCategorical)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'AnalyzeDataDescriptionFeaturesItem' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'addfiText'
+--
+-- * 'addfiNumeric'
+--
+-- * 'addfiIndex'
+--
+-- * 'addfiCategorical'
+analyzeDataDescriptionFeaturesItem
+    :: AnalyzeDataDescriptionFeaturesItem
+analyzeDataDescriptionFeaturesItem =
+    AnalyzeDataDescriptionFeaturesItem
+    { _addfiText = Nothing
+    , _addfiNumeric = Nothing
+    , _addfiIndex = Nothing
+    , _addfiCategorical = Nothing
+    }
+
+-- | Description of multiple-word text values of this feature.
+addfiText :: Lens' AnalyzeDataDescriptionFeaturesItem (Maybe AnalyzeDataDescriptionFeaturesItemText)
+addfiText
+  = lens _addfiText (\ s a -> s{_addfiText = a})
+
+-- | Description of the numeric values of this feature.
+addfiNumeric :: Lens' AnalyzeDataDescriptionFeaturesItem (Maybe AnalyzeDataDescriptionFeaturesItemNumeric)
+addfiNumeric
+  = lens _addfiNumeric (\ s a -> s{_addfiNumeric = a})
+
+-- | The feature index.
+addfiIndex :: Lens' AnalyzeDataDescriptionFeaturesItem (Maybe Int64)
+addfiIndex
+  = lens _addfiIndex (\ s a -> s{_addfiIndex = a}) .
+      mapping _Coerce
+
+-- | Description of the categorical values of this feature.
+addfiCategorical :: Lens' AnalyzeDataDescriptionFeaturesItem (Maybe AnalyzeDataDescriptionFeaturesItemCategorical)
+addfiCategorical
+  = lens _addfiCategorical
+      (\ s a -> s{_addfiCategorical = a})
+
+instance FromJSON AnalyzeDataDescriptionFeaturesItem
+         where
+        parseJSON
+          = withObject "AnalyzeDataDescriptionFeaturesItem"
+              (\ o ->
+                 AnalyzeDataDescriptionFeaturesItem <$>
+                   (o .:? "text") <*> (o .:? "numeric") <*>
+                     (o .:? "index")
+                     <*> (o .:? "categorical"))
+
+instance ToJSON AnalyzeDataDescriptionFeaturesItem
+         where
+        toJSON AnalyzeDataDescriptionFeaturesItem{..}
+          = object
+              (catMaybes
+                 [("text" .=) <$> _addfiText,
+                  ("numeric" .=) <$> _addfiNumeric,
+                  ("index" .=) <$> _addfiIndex,
+                  ("categorical" .=) <$> _addfiCategorical])
+
+--
+-- /See:/ 'update' smart constructor.
+data Update = Update
+    { _uCSVInstance :: !(Maybe [JSONValue])
+    , _uOutput      :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Update' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'uCSVInstance'
+--
+-- * 'uOutput'
+update
+    :: Update
+update =
+    Update
+    { _uCSVInstance = Nothing
+    , _uOutput = Nothing
+    }
+
+-- | The input features for this instance.
+uCSVInstance :: Lens' Update [JSONValue]
+uCSVInstance
+  = lens _uCSVInstance (\ s a -> s{_uCSVInstance = a})
+      . _Default
+      . _Coerce
+
+-- | The generic output value - could be regression or class label.
+uOutput :: Lens' Update (Maybe Text)
+uOutput = lens _uOutput (\ s a -> s{_uOutput = a})
+
+instance FromJSON Update where
+        parseJSON
+          = withObject "Update"
+              (\ o ->
+                 Update <$>
+                   (o .:? "csvInstance" .!= mempty) <*>
+                     (o .:? "output"))
+
+instance ToJSON Update where
+        toJSON Update{..}
+          = object
+              (catMaybes
+                 [("csvInstance" .=) <$> _uCSVInstance,
+                  ("output" .=) <$> _uOutput])
+
+-- | Description of the output value or label.
+--
+-- /See:/ 'analyzeDataDescriptionOutputFeature' smart constructor.
+data AnalyzeDataDescriptionOutputFeature = AnalyzeDataDescriptionOutputFeature
+    { _addofText    :: !(Maybe [AnalyzeDataDescriptionOutputFeatureTextItem])
+    , _addofNumeric :: !(Maybe AnalyzeDataDescriptionOutputFeatureNumeric)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'AnalyzeDataDescriptionOutputFeature' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'addofText'
+--
+-- * 'addofNumeric'
+analyzeDataDescriptionOutputFeature
+    :: AnalyzeDataDescriptionOutputFeature
+analyzeDataDescriptionOutputFeature =
+    AnalyzeDataDescriptionOutputFeature
+    { _addofText = Nothing
+    , _addofNumeric = Nothing
+    }
+
+-- | Description of the output labels in the data set.
+addofText :: Lens' AnalyzeDataDescriptionOutputFeature [AnalyzeDataDescriptionOutputFeatureTextItem]
+addofText
+  = lens _addofText (\ s a -> s{_addofText = a}) .
+      _Default
+      . _Coerce
+
+-- | Description of the output values in the data set.
+addofNumeric :: Lens' AnalyzeDataDescriptionOutputFeature (Maybe AnalyzeDataDescriptionOutputFeatureNumeric)
+addofNumeric
+  = lens _addofNumeric (\ s a -> s{_addofNumeric = a})
+
+instance FromJSON AnalyzeDataDescriptionOutputFeature
+         where
+        parseJSON
+          = withObject "AnalyzeDataDescriptionOutputFeature"
+              (\ o ->
+                 AnalyzeDataDescriptionOutputFeature <$>
+                   (o .:? "text" .!= mempty) <*> (o .:? "numeric"))
+
+instance ToJSON AnalyzeDataDescriptionOutputFeature
+         where
+        toJSON AnalyzeDataDescriptionOutputFeature{..}
+          = object
+              (catMaybes
+                 [("text" .=) <$> _addofText,
+                  ("numeric" .=) <$> _addofNumeric])
diff --git a/gen/Network/Google/Prediction/Types/Sum.hs b/gen/Network/Google/Prediction/Types/Sum.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Prediction/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.Prediction.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.Prediction.Types.Sum where
+
+import           Network.Google.Prelude
diff --git a/gen/Network/Google/Resource/Prediction/HostedModels/Predict.hs b/gen/Network/Google/Resource/Prediction/HostedModels/Predict.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Prediction/HostedModels/Predict.hs
@@ -0,0 +1,112 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.Prediction.HostedModels.Predict
+-- 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)
+--
+-- Submit input and request an output against a hosted model.
+--
+-- /See:/ <https://developers.google.com/prediction/docs/developer-guide Prediction API Reference> for @prediction.hostedmodels.predict@.
+module Network.Google.Resource.Prediction.HostedModels.Predict
+    (
+    -- * REST Resource
+      HostedModelsPredictResource
+
+    -- * Creating a Request
+    , hostedModelsPredict
+    , HostedModelsPredict
+
+    -- * Request Lenses
+    , hmpProject
+    , hmpPayload
+    , hmpHostedModelName
+    ) where
+
+import           Network.Google.Prediction.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @prediction.hostedmodels.predict@ method which the
+-- 'HostedModelsPredict' request conforms to.
+type HostedModelsPredictResource =
+     "prediction" :>
+       "v1.6" :>
+         "projects" :>
+           Capture "project" Text :>
+             "hostedmodels" :>
+               Capture "hostedModelName" Text :>
+                 "predict" :>
+                   QueryParam "alt" AltJSON :>
+                     ReqBody '[JSON] Input :> Post '[JSON] Output
+
+-- | Submit input and request an output against a hosted model.
+--
+-- /See:/ 'hostedModelsPredict' smart constructor.
+data HostedModelsPredict = HostedModelsPredict
+    { _hmpProject         :: !Text
+    , _hmpPayload         :: !Input
+    , _hmpHostedModelName :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'HostedModelsPredict' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'hmpProject'
+--
+-- * 'hmpPayload'
+--
+-- * 'hmpHostedModelName'
+hostedModelsPredict
+    :: Text -- ^ 'hmpProject'
+    -> Input -- ^ 'hmpPayload'
+    -> Text -- ^ 'hmpHostedModelName'
+    -> HostedModelsPredict
+hostedModelsPredict pHmpProject_ pHmpPayload_ pHmpHostedModelName_ =
+    HostedModelsPredict
+    { _hmpProject = pHmpProject_
+    , _hmpPayload = pHmpPayload_
+    , _hmpHostedModelName = pHmpHostedModelName_
+    }
+
+-- | The project associated with the model.
+hmpProject :: Lens' HostedModelsPredict Text
+hmpProject
+  = lens _hmpProject (\ s a -> s{_hmpProject = a})
+
+-- | Multipart request metadata.
+hmpPayload :: Lens' HostedModelsPredict Input
+hmpPayload
+  = lens _hmpPayload (\ s a -> s{_hmpPayload = a})
+
+-- | The name of a hosted model.
+hmpHostedModelName :: Lens' HostedModelsPredict Text
+hmpHostedModelName
+  = lens _hmpHostedModelName
+      (\ s a -> s{_hmpHostedModelName = a})
+
+instance GoogleRequest HostedModelsPredict where
+        type Rs HostedModelsPredict = Output
+        requestClient HostedModelsPredict{..}
+          = go _hmpProject _hmpHostedModelName (Just AltJSON)
+              _hmpPayload
+              predictionService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy HostedModelsPredictResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Prediction/TrainedModels/Analyze.hs b/gen/Network/Google/Resource/Prediction/TrainedModels/Analyze.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Prediction/TrainedModels/Analyze.hs
@@ -0,0 +1,97 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.Prediction.TrainedModels.Analyze
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Get analysis of the model and the data the model was trained on.
+--
+-- /See:/ <https://developers.google.com/prediction/docs/developer-guide Prediction API Reference> for @prediction.trainedmodels.analyze@.
+module Network.Google.Resource.Prediction.TrainedModels.Analyze
+    (
+    -- * REST Resource
+      TrainedModelsAnalyzeResource
+
+    -- * Creating a Request
+    , trainedModelsAnalyze
+    , TrainedModelsAnalyze
+
+    -- * Request Lenses
+    , tmaProject
+    , tmaId
+    ) where
+
+import           Network.Google.Prediction.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @prediction.trainedmodels.analyze@ method which the
+-- 'TrainedModelsAnalyze' request conforms to.
+type TrainedModelsAnalyzeResource =
+     "prediction" :>
+       "v1.6" :>
+         "projects" :>
+           Capture "project" Text :>
+             "trainedmodels" :>
+               Capture "id" Text :>
+                 "analyze" :>
+                   QueryParam "alt" AltJSON :> Get '[JSON] Analyze
+
+-- | Get analysis of the model and the data the model was trained on.
+--
+-- /See:/ 'trainedModelsAnalyze' smart constructor.
+data TrainedModelsAnalyze = TrainedModelsAnalyze
+    { _tmaProject :: !Text
+    , _tmaId      :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'TrainedModelsAnalyze' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'tmaProject'
+--
+-- * 'tmaId'
+trainedModelsAnalyze
+    :: Text -- ^ 'tmaProject'
+    -> Text -- ^ 'tmaId'
+    -> TrainedModelsAnalyze
+trainedModelsAnalyze pTmaProject_ pTmaId_ =
+    TrainedModelsAnalyze
+    { _tmaProject = pTmaProject_
+    , _tmaId = pTmaId_
+    }
+
+-- | The project associated with the model.
+tmaProject :: Lens' TrainedModelsAnalyze Text
+tmaProject
+  = lens _tmaProject (\ s a -> s{_tmaProject = a})
+
+-- | The unique name for the predictive model.
+tmaId :: Lens' TrainedModelsAnalyze Text
+tmaId = lens _tmaId (\ s a -> s{_tmaId = a})
+
+instance GoogleRequest TrainedModelsAnalyze where
+        type Rs TrainedModelsAnalyze = Analyze
+        requestClient TrainedModelsAnalyze{..}
+          = go _tmaProject _tmaId (Just AltJSON)
+              predictionService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy TrainedModelsAnalyzeResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Prediction/TrainedModels/Delete.hs b/gen/Network/Google/Resource/Prediction/TrainedModels/Delete.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Prediction/TrainedModels/Delete.hs
@@ -0,0 +1,96 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.Prediction.TrainedModels.Delete
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Delete a trained model.
+--
+-- /See:/ <https://developers.google.com/prediction/docs/developer-guide Prediction API Reference> for @prediction.trainedmodels.delete@.
+module Network.Google.Resource.Prediction.TrainedModels.Delete
+    (
+    -- * REST Resource
+      TrainedModelsDeleteResource
+
+    -- * Creating a Request
+    , trainedModelsDelete
+    , TrainedModelsDelete
+
+    -- * Request Lenses
+    , tmdProject
+    , tmdId
+    ) where
+
+import           Network.Google.Prediction.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @prediction.trainedmodels.delete@ method which the
+-- 'TrainedModelsDelete' request conforms to.
+type TrainedModelsDeleteResource =
+     "prediction" :>
+       "v1.6" :>
+         "projects" :>
+           Capture "project" Text :>
+             "trainedmodels" :>
+               Capture "id" Text :>
+                 QueryParam "alt" AltJSON :> Delete '[JSON] ()
+
+-- | Delete a trained model.
+--
+-- /See:/ 'trainedModelsDelete' smart constructor.
+data TrainedModelsDelete = TrainedModelsDelete
+    { _tmdProject :: !Text
+    , _tmdId      :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'TrainedModelsDelete' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'tmdProject'
+--
+-- * 'tmdId'
+trainedModelsDelete
+    :: Text -- ^ 'tmdProject'
+    -> Text -- ^ 'tmdId'
+    -> TrainedModelsDelete
+trainedModelsDelete pTmdProject_ pTmdId_ =
+    TrainedModelsDelete
+    { _tmdProject = pTmdProject_
+    , _tmdId = pTmdId_
+    }
+
+-- | The project associated with the model.
+tmdProject :: Lens' TrainedModelsDelete Text
+tmdProject
+  = lens _tmdProject (\ s a -> s{_tmdProject = a})
+
+-- | The unique name for the predictive model.
+tmdId :: Lens' TrainedModelsDelete Text
+tmdId = lens _tmdId (\ s a -> s{_tmdId = a})
+
+instance GoogleRequest TrainedModelsDelete where
+        type Rs TrainedModelsDelete = ()
+        requestClient TrainedModelsDelete{..}
+          = go _tmdProject _tmdId (Just AltJSON)
+              predictionService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy TrainedModelsDeleteResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Prediction/TrainedModels/Get.hs b/gen/Network/Google/Resource/Prediction/TrainedModels/Get.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Prediction/TrainedModels/Get.hs
@@ -0,0 +1,96 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.Prediction.TrainedModels.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)
+--
+-- Check training status of your model.
+--
+-- /See:/ <https://developers.google.com/prediction/docs/developer-guide Prediction API Reference> for @prediction.trainedmodels.get@.
+module Network.Google.Resource.Prediction.TrainedModels.Get
+    (
+    -- * REST Resource
+      TrainedModelsGetResource
+
+    -- * Creating a Request
+    , trainedModelsGet
+    , TrainedModelsGet
+
+    -- * Request Lenses
+    , tmgProject
+    , tmgId
+    ) where
+
+import           Network.Google.Prediction.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @prediction.trainedmodels.get@ method which the
+-- 'TrainedModelsGet' request conforms to.
+type TrainedModelsGetResource =
+     "prediction" :>
+       "v1.6" :>
+         "projects" :>
+           Capture "project" Text :>
+             "trainedmodels" :>
+               Capture "id" Text :>
+                 QueryParam "alt" AltJSON :> Get '[JSON] Insert2
+
+-- | Check training status of your model.
+--
+-- /See:/ 'trainedModelsGet' smart constructor.
+data TrainedModelsGet = TrainedModelsGet
+    { _tmgProject :: !Text
+    , _tmgId      :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'TrainedModelsGet' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'tmgProject'
+--
+-- * 'tmgId'
+trainedModelsGet
+    :: Text -- ^ 'tmgProject'
+    -> Text -- ^ 'tmgId'
+    -> TrainedModelsGet
+trainedModelsGet pTmgProject_ pTmgId_ =
+    TrainedModelsGet
+    { _tmgProject = pTmgProject_
+    , _tmgId = pTmgId_
+    }
+
+-- | The project associated with the model.
+tmgProject :: Lens' TrainedModelsGet Text
+tmgProject
+  = lens _tmgProject (\ s a -> s{_tmgProject = a})
+
+-- | The unique name for the predictive model.
+tmgId :: Lens' TrainedModelsGet Text
+tmgId = lens _tmgId (\ s a -> s{_tmgId = a})
+
+instance GoogleRequest TrainedModelsGet where
+        type Rs TrainedModelsGet = Insert2
+        requestClient TrainedModelsGet{..}
+          = go _tmgProject _tmgId (Just AltJSON)
+              predictionService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy TrainedModelsGetResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Prediction/TrainedModels/Insert.hs b/gen/Network/Google/Resource/Prediction/TrainedModels/Insert.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Prediction/TrainedModels/Insert.hs
@@ -0,0 +1,97 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.Prediction.TrainedModels.Insert
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Train a Prediction API model.
+--
+-- /See:/ <https://developers.google.com/prediction/docs/developer-guide Prediction API Reference> for @prediction.trainedmodels.insert@.
+module Network.Google.Resource.Prediction.TrainedModels.Insert
+    (
+    -- * REST Resource
+      TrainedModelsInsertResource
+
+    -- * Creating a Request
+    , trainedModelsInsert
+    , TrainedModelsInsert
+
+    -- * Request Lenses
+    , tmiProject
+    , tmiPayload
+    ) where
+
+import           Network.Google.Prediction.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @prediction.trainedmodels.insert@ method which the
+-- 'TrainedModelsInsert' request conforms to.
+type TrainedModelsInsertResource =
+     "prediction" :>
+       "v1.6" :>
+         "projects" :>
+           Capture "project" Text :>
+             "trainedmodels" :>
+               QueryParam "alt" AltJSON :>
+                 ReqBody '[JSON] Insert :> Post '[JSON] Insert2
+
+-- | Train a Prediction API model.
+--
+-- /See:/ 'trainedModelsInsert' smart constructor.
+data TrainedModelsInsert = TrainedModelsInsert
+    { _tmiProject :: !Text
+    , _tmiPayload :: !Insert
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'TrainedModelsInsert' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'tmiProject'
+--
+-- * 'tmiPayload'
+trainedModelsInsert
+    :: Text -- ^ 'tmiProject'
+    -> Insert -- ^ 'tmiPayload'
+    -> TrainedModelsInsert
+trainedModelsInsert pTmiProject_ pTmiPayload_ =
+    TrainedModelsInsert
+    { _tmiProject = pTmiProject_
+    , _tmiPayload = pTmiPayload_
+    }
+
+-- | The project associated with the model.
+tmiProject :: Lens' TrainedModelsInsert Text
+tmiProject
+  = lens _tmiProject (\ s a -> s{_tmiProject = a})
+
+-- | Multipart request metadata.
+tmiPayload :: Lens' TrainedModelsInsert Insert
+tmiPayload
+  = lens _tmiPayload (\ s a -> s{_tmiPayload = a})
+
+instance GoogleRequest TrainedModelsInsert where
+        type Rs TrainedModelsInsert = Insert2
+        requestClient TrainedModelsInsert{..}
+          = go _tmiProject (Just AltJSON) _tmiPayload
+              predictionService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy TrainedModelsInsertResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Prediction/TrainedModels/List.hs b/gen/Network/Google/Resource/Prediction/TrainedModels/List.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Prediction/TrainedModels/List.hs
@@ -0,0 +1,111 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.Prediction.TrainedModels.List
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- List available models.
+--
+-- /See:/ <https://developers.google.com/prediction/docs/developer-guide Prediction API Reference> for @prediction.trainedmodels.list@.
+module Network.Google.Resource.Prediction.TrainedModels.List
+    (
+    -- * REST Resource
+      TrainedModelsListResource
+
+    -- * Creating a Request
+    , trainedModelsList
+    , TrainedModelsList
+
+    -- * Request Lenses
+    , tmlProject
+    , tmlPageToken
+    , tmlMaxResults
+    ) where
+
+import           Network.Google.Prediction.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @prediction.trainedmodels.list@ method which the
+-- 'TrainedModelsList' request conforms to.
+type TrainedModelsListResource =
+     "prediction" :>
+       "v1.6" :>
+         "projects" :>
+           Capture "project" Text :>
+             "trainedmodels" :>
+               "list" :>
+                 QueryParam "pageToken" Text :>
+                   QueryParam "maxResults" (Textual Word32) :>
+                     QueryParam "alt" AltJSON :> Get '[JSON] List
+
+-- | List available models.
+--
+-- /See:/ 'trainedModelsList' smart constructor.
+data TrainedModelsList = TrainedModelsList
+    { _tmlProject    :: !Text
+    , _tmlPageToken  :: !(Maybe Text)
+    , _tmlMaxResults :: !(Maybe (Textual Word32))
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'TrainedModelsList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'tmlProject'
+--
+-- * 'tmlPageToken'
+--
+-- * 'tmlMaxResults'
+trainedModelsList
+    :: Text -- ^ 'tmlProject'
+    -> TrainedModelsList
+trainedModelsList pTmlProject_ =
+    TrainedModelsList
+    { _tmlProject = pTmlProject_
+    , _tmlPageToken = Nothing
+    , _tmlMaxResults = Nothing
+    }
+
+-- | The project associated with the model.
+tmlProject :: Lens' TrainedModelsList Text
+tmlProject
+  = lens _tmlProject (\ s a -> s{_tmlProject = a})
+
+-- | Pagination token.
+tmlPageToken :: Lens' TrainedModelsList (Maybe Text)
+tmlPageToken
+  = lens _tmlPageToken (\ s a -> s{_tmlPageToken = a})
+
+-- | Maximum number of results to return.
+tmlMaxResults :: Lens' TrainedModelsList (Maybe Word32)
+tmlMaxResults
+  = lens _tmlMaxResults
+      (\ s a -> s{_tmlMaxResults = a})
+      . mapping _Coerce
+
+instance GoogleRequest TrainedModelsList where
+        type Rs TrainedModelsList = List
+        requestClient TrainedModelsList{..}
+          = go _tmlProject _tmlPageToken _tmlMaxResults
+              (Just AltJSON)
+              predictionService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy TrainedModelsListResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Prediction/TrainedModels/Predict.hs b/gen/Network/Google/Resource/Prediction/TrainedModels/Predict.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Prediction/TrainedModels/Predict.hs
@@ -0,0 +1,109 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.Prediction.TrainedModels.Predict
+-- 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)
+--
+-- Submit model id and request a prediction.
+--
+-- /See:/ <https://developers.google.com/prediction/docs/developer-guide Prediction API Reference> for @prediction.trainedmodels.predict@.
+module Network.Google.Resource.Prediction.TrainedModels.Predict
+    (
+    -- * REST Resource
+      TrainedModelsPredictResource
+
+    -- * Creating a Request
+    , trainedModelsPredict
+    , TrainedModelsPredict
+
+    -- * Request Lenses
+    , tmpProject
+    , tmpPayload
+    , tmpId
+    ) where
+
+import           Network.Google.Prediction.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @prediction.trainedmodels.predict@ method which the
+-- 'TrainedModelsPredict' request conforms to.
+type TrainedModelsPredictResource =
+     "prediction" :>
+       "v1.6" :>
+         "projects" :>
+           Capture "project" Text :>
+             "trainedmodels" :>
+               Capture "id" Text :>
+                 "predict" :>
+                   QueryParam "alt" AltJSON :>
+                     ReqBody '[JSON] Input :> Post '[JSON] Output
+
+-- | Submit model id and request a prediction.
+--
+-- /See:/ 'trainedModelsPredict' smart constructor.
+data TrainedModelsPredict = TrainedModelsPredict
+    { _tmpProject :: !Text
+    , _tmpPayload :: !Input
+    , _tmpId      :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'TrainedModelsPredict' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'tmpProject'
+--
+-- * 'tmpPayload'
+--
+-- * 'tmpId'
+trainedModelsPredict
+    :: Text -- ^ 'tmpProject'
+    -> Input -- ^ 'tmpPayload'
+    -> Text -- ^ 'tmpId'
+    -> TrainedModelsPredict
+trainedModelsPredict pTmpProject_ pTmpPayload_ pTmpId_ =
+    TrainedModelsPredict
+    { _tmpProject = pTmpProject_
+    , _tmpPayload = pTmpPayload_
+    , _tmpId = pTmpId_
+    }
+
+-- | The project associated with the model.
+tmpProject :: Lens' TrainedModelsPredict Text
+tmpProject
+  = lens _tmpProject (\ s a -> s{_tmpProject = a})
+
+-- | Multipart request metadata.
+tmpPayload :: Lens' TrainedModelsPredict Input
+tmpPayload
+  = lens _tmpPayload (\ s a -> s{_tmpPayload = a})
+
+-- | The unique name for the predictive model.
+tmpId :: Lens' TrainedModelsPredict Text
+tmpId = lens _tmpId (\ s a -> s{_tmpId = a})
+
+instance GoogleRequest TrainedModelsPredict where
+        type Rs TrainedModelsPredict = Output
+        requestClient TrainedModelsPredict{..}
+          = go _tmpProject _tmpId (Just AltJSON) _tmpPayload
+              predictionService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy TrainedModelsPredictResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/Prediction/TrainedModels/Update.hs b/gen/Network/Google/Resource/Prediction/TrainedModels/Update.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Prediction/TrainedModels/Update.hs
@@ -0,0 +1,108 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.Prediction.TrainedModels.Update
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Add new data to a trained model.
+--
+-- /See:/ <https://developers.google.com/prediction/docs/developer-guide Prediction API Reference> for @prediction.trainedmodels.update@.
+module Network.Google.Resource.Prediction.TrainedModels.Update
+    (
+    -- * REST Resource
+      TrainedModelsUpdateResource
+
+    -- * Creating a Request
+    , trainedModelsUpdate
+    , TrainedModelsUpdate
+
+    -- * Request Lenses
+    , tmuProject
+    , tmuPayload
+    , tmuId
+    ) where
+
+import           Network.Google.Prediction.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @prediction.trainedmodels.update@ method which the
+-- 'TrainedModelsUpdate' request conforms to.
+type TrainedModelsUpdateResource =
+     "prediction" :>
+       "v1.6" :>
+         "projects" :>
+           Capture "project" Text :>
+             "trainedmodels" :>
+               Capture "id" Text :>
+                 QueryParam "alt" AltJSON :>
+                   ReqBody '[JSON] Update :> Put '[JSON] Insert2
+
+-- | Add new data to a trained model.
+--
+-- /See:/ 'trainedModelsUpdate' smart constructor.
+data TrainedModelsUpdate = TrainedModelsUpdate
+    { _tmuProject :: !Text
+    , _tmuPayload :: !Update
+    , _tmuId      :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'TrainedModelsUpdate' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'tmuProject'
+--
+-- * 'tmuPayload'
+--
+-- * 'tmuId'
+trainedModelsUpdate
+    :: Text -- ^ 'tmuProject'
+    -> Update -- ^ 'tmuPayload'
+    -> Text -- ^ 'tmuId'
+    -> TrainedModelsUpdate
+trainedModelsUpdate pTmuProject_ pTmuPayload_ pTmuId_ =
+    TrainedModelsUpdate
+    { _tmuProject = pTmuProject_
+    , _tmuPayload = pTmuPayload_
+    , _tmuId = pTmuId_
+    }
+
+-- | The project associated with the model.
+tmuProject :: Lens' TrainedModelsUpdate Text
+tmuProject
+  = lens _tmuProject (\ s a -> s{_tmuProject = a})
+
+-- | Multipart request metadata.
+tmuPayload :: Lens' TrainedModelsUpdate Update
+tmuPayload
+  = lens _tmuPayload (\ s a -> s{_tmuPayload = a})
+
+-- | The unique name for the predictive model.
+tmuId :: Lens' TrainedModelsUpdate Text
+tmuId = lens _tmuId (\ s a -> s{_tmuId = a})
+
+instance GoogleRequest TrainedModelsUpdate where
+        type Rs TrainedModelsUpdate = Insert2
+        requestClient TrainedModelsUpdate{..}
+          = go _tmuProject _tmuId (Just AltJSON) _tmuPayload
+              predictionService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy TrainedModelsUpdateResource)
+                      mempty
diff --git a/gogol-prediction.cabal b/gogol-prediction.cabal
new file mode 100644
--- /dev/null
+++ b/gogol-prediction.cabal
@@ -0,0 +1,54 @@
+name:                  gogol-prediction
+version:               0.0.1
+synopsis:              Google Prediction SDK.
+homepage:              https://github.com/brendanhay/gogol
+bug-reports:           https://github.com/brendanhay/gogol/issues
+license:               OtherLicense
+license-file:          LICENSE
+author:                Brendan Hay
+maintainer:            Brendan Hay <brendan.g.hay@gmail.com>
+copyright:             Copyright (c) 2015 Brendan Hay
+category:              Network, Google, Cloud
+build-type:            Simple
+cabal-version:         >= 1.10
+extra-source-files:    README.md
+
+description:
+    Lets you access a cloud hosted machine learning service that makes it
+    easy to build smart apps
+    .
+    /Warning:/ This is an experimental prototype/preview release which is still
+    under exploratory development and not intended for public use, caveat emptor!
+    .
+    This library is compatible with version @v1.6@
+    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.Prediction
+        , Network.Google.Prediction.Types
+        , Network.Google.Resource.Prediction.HostedModels.Predict
+        , Network.Google.Resource.Prediction.TrainedModels.Analyze
+        , Network.Google.Resource.Prediction.TrainedModels.Delete
+        , Network.Google.Resource.Prediction.TrainedModels.Get
+        , Network.Google.Resource.Prediction.TrainedModels.Insert
+        , Network.Google.Resource.Prediction.TrainedModels.List
+        , Network.Google.Resource.Prediction.TrainedModels.Predict
+        , Network.Google.Resource.Prediction.TrainedModels.Update
+
+    other-modules:
+          Network.Google.Prediction.Types.Product
+        , Network.Google.Prediction.Types.Sum
+
+    build-depends:
+          gogol-core == 0.0.1.*
+        , base       >= 4.7 && < 5
