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-consumersurveys
+
+* [Version](#version)
+* [Description](#description)
+* [Contribute](#contribute)
+* [Licence](#licence)
+
+
+## Version
+
+`0.3.0`
+
+
+## Description
+
+A client library for the Google Consumer Surveys.
+
+
+## Contribute
+
+For any problems, comments, or feedback please create an issue [here on GitHub](https://github.com/brendanhay/gogol/issues).
+
+> _Note:_ this library is an auto-generated Haskell package. Please see `gogol-gen` for more information.
+
+
+## Licence
+
+`gogol-consumersurveys` 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/ConsumerSurveys.hs b/gen/Network/Google/ConsumerSurveys.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/ConsumerSurveys.hs
@@ -0,0 +1,253 @@
+{-# LANGUAGE DataKinds         #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# LANGUAGE TypeOperators     #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+
+-- |
+-- Module      : Network.Google.ConsumerSurveys
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates and conducts surveys, lists the surveys that an authenticated
+-- user owns, and retrieves survey results and information about specified
+-- surveys.
+--
+-- /See:/ <https://developers.google.com/surveys/ Consumer Surveys API Reference>
+module Network.Google.ConsumerSurveys
+    (
+    -- * Service Configuration
+      consumerSurveysService
+
+    -- * OAuth Scopes
+    , userInfoEmailScope
+    , consumerSurveysReadOnlyScope
+    , consumerSurveysScope
+
+    -- * API Declaration
+    , ConsumerSurveysAPI
+
+    -- * Resources
+
+    -- ** consumersurveys.mobileapppanels.get
+    , module Network.Google.Resource.ConsumerSurveys.MobileApppanels.Get
+
+    -- ** consumersurveys.mobileapppanels.list
+    , module Network.Google.Resource.ConsumerSurveys.MobileApppanels.List
+
+    -- ** consumersurveys.mobileapppanels.update
+    , module Network.Google.Resource.ConsumerSurveys.MobileApppanels.Update
+
+    -- ** consumersurveys.results.get
+    , module Network.Google.Resource.ConsumerSurveys.Results.Get
+
+    -- ** consumersurveys.surveys.delete
+    , module Network.Google.Resource.ConsumerSurveys.Surveys.Delete
+
+    -- ** consumersurveys.surveys.get
+    , module Network.Google.Resource.ConsumerSurveys.Surveys.Get
+
+    -- ** consumersurveys.surveys.insert
+    , module Network.Google.Resource.ConsumerSurveys.Surveys.Insert
+
+    -- ** consumersurveys.surveys.list
+    , module Network.Google.Resource.ConsumerSurveys.Surveys.List
+
+    -- ** consumersurveys.surveys.start
+    , module Network.Google.Resource.ConsumerSurveys.Surveys.Start
+
+    -- ** consumersurveys.surveys.stop
+    , module Network.Google.Resource.ConsumerSurveys.Surveys.Stop
+
+    -- ** consumersurveys.surveys.update
+    , module Network.Google.Resource.ConsumerSurveys.Surveys.Update
+
+    -- * Types
+
+    -- ** SurveysListResponse
+    , SurveysListResponse
+    , surveysListResponse
+    , slrRequestId
+    , slrTokenPagination
+    , slrPageInfo
+    , slrResources
+
+    -- ** MobileAppPanel
+    , MobileAppPanel
+    , mobileAppPanel
+    , mapOwners
+    , mapCountry
+    , mapName
+    , mapMobileAppPanelId
+    , mapLanguage
+    , mapIsPublicPanel
+
+    -- ** TokenPagination
+    , TokenPagination
+    , tokenPagination
+    , tpNextPageToken
+    , tpPreviousPageToken
+
+    -- ** ResultsGetRequest
+    , ResultsGetRequest
+    , resultsGetRequest
+    , rgrResultMask
+
+    -- ** MobileAppPanelsListResponse
+    , MobileAppPanelsListResponse
+    , mobileAppPanelsListResponse
+    , maplrRequestId
+    , maplrTokenPagination
+    , maplrPageInfo
+    , maplrResources
+
+    -- ** PageInfo
+    , PageInfo
+    , pageInfo
+    , piResultPerPage
+    , piTotalResults
+    , piStartIndex
+
+    -- ** FieldMask
+    , FieldMask
+    , fieldMask
+    , fmId
+    , fmFields
+
+    -- ** Survey
+    , Survey
+    , survey
+    , sAudience
+    , sState
+    , sOwners
+    , sWantedResponseCount
+    , sSurveyURLId
+    , sCost
+    , sRejectionReason
+    , sCustomerData
+    , sQuestions
+    , sTitle
+    , sDescription
+
+    -- ** SurveysStartResponse
+    , SurveysStartResponse
+    , surveysStartResponse
+    , ssrRequestId
+
+    -- ** SurveysStopResponse
+    , SurveysStopResponse
+    , surveysStopResponse
+    , sRequestId
+
+    -- ** ResultsMask
+    , ResultsMask
+    , resultsMask
+    , rmProjection
+    , rmFields
+
+    -- ** SurveyRejection
+    , SurveyRejection
+    , surveyRejection
+    , srExplanation
+    , srType
+
+    -- ** SurveyResults
+    , SurveyResults
+    , surveyResults
+    , srStatus
+    , srSurveyURLId
+
+    -- ** SurveysStartRequest
+    , SurveysStartRequest
+    , surveysStartRequest
+    , ssrMaxCostPerResponseNanos
+
+    -- ** SurveysDeleteResponse
+    , SurveysDeleteResponse
+    , surveysDeleteResponse
+    , sdrRequestId
+
+    -- ** SurveyQuestionImage
+    , SurveyQuestionImage
+    , surveyQuestionImage
+    , sqiData
+    , sqiURL
+    , sqiAltText
+
+    -- ** SurveyAudience
+    , SurveyAudience
+    , surveyAudience
+    , saCountry
+    , saAges
+    , saLanguages
+    , saGender
+    , saMobileAppPanelId
+    , saCountrySubdivision
+    , saPopulationSource
+
+    -- ** SurveyCost
+    , SurveyCost
+    , surveyCost
+    , scCurrencyCode
+    , scNanos
+    , scMaxCostPerResponseNanos
+    , scCostPerResponseNanos
+
+    -- ** SurveyQuestion
+    , SurveyQuestion
+    , surveyQuestion
+    , sqImages
+    , sqAnswers
+    , sqSingleLineResponse
+    , sqMustPickSuggestion
+    , sqSentimentText
+    , sqThresholdAnswers
+    , sqHasOther
+    , sqOpenTextSuggestions
+    , sqVideoId
+    , sqLastAnswerPositionPinned
+    , sqAnswerOrder
+    , sqOpenTextPlaceholder
+    , sqType
+    , sqUnitOfMeasurementLabel
+    , sqHighValueLabel
+    , sqQuestion
+    , sqNumStars
+    , sqLowValueLabel
+    ) where
+
+import           Network.Google.ConsumerSurveys.Types
+import           Network.Google.Prelude
+import           Network.Google.Resource.ConsumerSurveys.MobileApppanels.Get
+import           Network.Google.Resource.ConsumerSurveys.MobileApppanels.List
+import           Network.Google.Resource.ConsumerSurveys.MobileApppanels.Update
+import           Network.Google.Resource.ConsumerSurveys.Results.Get
+import           Network.Google.Resource.ConsumerSurveys.Surveys.Delete
+import           Network.Google.Resource.ConsumerSurveys.Surveys.Get
+import           Network.Google.Resource.ConsumerSurveys.Surveys.Insert
+import           Network.Google.Resource.ConsumerSurveys.Surveys.List
+import           Network.Google.Resource.ConsumerSurveys.Surveys.Start
+import           Network.Google.Resource.ConsumerSurveys.Surveys.Stop
+import           Network.Google.Resource.ConsumerSurveys.Surveys.Update
+
+{- $resources
+TODO
+-}
+
+-- | Represents the entirety of the methods and resources available for the Consumer Surveys API service.
+type ConsumerSurveysAPI =
+     MobileApppanelsListResource :<|>
+       MobileApppanelsGetResource
+       :<|> MobileApppanelsUpdateResource
+       :<|> ResultsGetResource
+       :<|> SurveysInsertResource
+       :<|> SurveysListResource
+       :<|> SurveysStartResource
+       :<|> SurveysGetResource
+       :<|> SurveysStopResource
+       :<|> SurveysDeleteResource
+       :<|> SurveysUpdateResource
diff --git a/gen/Network/Google/ConsumerSurveys/Types.hs b/gen/Network/Google/ConsumerSurveys/Types.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/ConsumerSurveys/Types.hs
@@ -0,0 +1,199 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- |
+-- Module      : Network.Google.ConsumerSurveys.Types
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+module Network.Google.ConsumerSurveys.Types
+    (
+    -- * Service Configuration
+      consumerSurveysService
+
+    -- * OAuth Scopes
+    , userInfoEmailScope
+    , consumerSurveysReadOnlyScope
+    , consumerSurveysScope
+
+    -- * SurveysListResponse
+    , SurveysListResponse
+    , surveysListResponse
+    , slrRequestId
+    , slrTokenPagination
+    , slrPageInfo
+    , slrResources
+
+    -- * MobileAppPanel
+    , MobileAppPanel
+    , mobileAppPanel
+    , mapOwners
+    , mapCountry
+    , mapName
+    , mapMobileAppPanelId
+    , mapLanguage
+    , mapIsPublicPanel
+
+    -- * TokenPagination
+    , TokenPagination
+    , tokenPagination
+    , tpNextPageToken
+    , tpPreviousPageToken
+
+    -- * ResultsGetRequest
+    , ResultsGetRequest
+    , resultsGetRequest
+    , rgrResultMask
+
+    -- * MobileAppPanelsListResponse
+    , MobileAppPanelsListResponse
+    , mobileAppPanelsListResponse
+    , maplrRequestId
+    , maplrTokenPagination
+    , maplrPageInfo
+    , maplrResources
+
+    -- * PageInfo
+    , PageInfo
+    , pageInfo
+    , piResultPerPage
+    , piTotalResults
+    , piStartIndex
+
+    -- * FieldMask
+    , FieldMask
+    , fieldMask
+    , fmId
+    , fmFields
+
+    -- * Survey
+    , Survey
+    , survey
+    , sAudience
+    , sState
+    , sOwners
+    , sWantedResponseCount
+    , sSurveyURLId
+    , sCost
+    , sRejectionReason
+    , sCustomerData
+    , sQuestions
+    , sTitle
+    , sDescription
+
+    -- * SurveysStartResponse
+    , SurveysStartResponse
+    , surveysStartResponse
+    , ssrRequestId
+
+    -- * SurveysStopResponse
+    , SurveysStopResponse
+    , surveysStopResponse
+    , sRequestId
+
+    -- * ResultsMask
+    , ResultsMask
+    , resultsMask
+    , rmProjection
+    , rmFields
+
+    -- * SurveyRejection
+    , SurveyRejection
+    , surveyRejection
+    , srExplanation
+    , srType
+
+    -- * SurveyResults
+    , SurveyResults
+    , surveyResults
+    , srStatus
+    , srSurveyURLId
+
+    -- * SurveysStartRequest
+    , SurveysStartRequest
+    , surveysStartRequest
+    , ssrMaxCostPerResponseNanos
+
+    -- * SurveysDeleteResponse
+    , SurveysDeleteResponse
+    , surveysDeleteResponse
+    , sdrRequestId
+
+    -- * SurveyQuestionImage
+    , SurveyQuestionImage
+    , surveyQuestionImage
+    , sqiData
+    , sqiURL
+    , sqiAltText
+
+    -- * SurveyAudience
+    , SurveyAudience
+    , surveyAudience
+    , saCountry
+    , saAges
+    , saLanguages
+    , saGender
+    , saMobileAppPanelId
+    , saCountrySubdivision
+    , saPopulationSource
+
+    -- * SurveyCost
+    , SurveyCost
+    , surveyCost
+    , scCurrencyCode
+    , scNanos
+    , scMaxCostPerResponseNanos
+    , scCostPerResponseNanos
+
+    -- * SurveyQuestion
+    , SurveyQuestion
+    , surveyQuestion
+    , sqImages
+    , sqAnswers
+    , sqSingleLineResponse
+    , sqMustPickSuggestion
+    , sqSentimentText
+    , sqThresholdAnswers
+    , sqHasOther
+    , sqOpenTextSuggestions
+    , sqVideoId
+    , sqLastAnswerPositionPinned
+    , sqAnswerOrder
+    , sqOpenTextPlaceholder
+    , sqType
+    , sqUnitOfMeasurementLabel
+    , sqHighValueLabel
+    , sqQuestion
+    , sqNumStars
+    , sqLowValueLabel
+    ) where
+
+import           Network.Google.ConsumerSurveys.Types.Product
+import           Network.Google.ConsumerSurveys.Types.Sum
+import           Network.Google.Prelude
+
+-- | Default request referring to version 'v2' of the Consumer Surveys API. This contains the host and root path used as a starting point for constructing service requests.
+consumerSurveysService :: ServiceConfig
+consumerSurveysService
+  = defaultService (ServiceId "consumersurveys:v2")
+      "www.googleapis.com"
+
+-- | View your email address
+userInfoEmailScope :: Proxy '["https://www.googleapis.com/auth/userinfo.email"]
+userInfoEmailScope = Proxy;
+
+-- | View the results for your surveys
+consumerSurveysReadOnlyScope :: Proxy '["https://www.googleapis.com/auth/consumersurveys.readonly"]
+consumerSurveysReadOnlyScope = Proxy;
+
+-- | View and edit your surveys and results
+consumerSurveysScope :: Proxy '["https://www.googleapis.com/auth/consumersurveys"]
+consumerSurveysScope = Proxy;
diff --git a/gen/Network/Google/ConsumerSurveys/Types/Product.hs b/gen/Network/Google/ConsumerSurveys/Types/Product.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/ConsumerSurveys/Types/Product.hs
@@ -0,0 +1,1303 @@
+{-# 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.ConsumerSurveys.Types.Product
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+module Network.Google.ConsumerSurveys.Types.Product where
+
+import           Network.Google.ConsumerSurveys.Types.Sum
+import           Network.Google.Prelude
+
+--
+-- /See:/ 'surveysListResponse' smart constructor.
+data SurveysListResponse = SurveysListResponse'
+    { _slrRequestId       :: !(Maybe Text)
+    , _slrTokenPagination :: !(Maybe TokenPagination)
+    , _slrPageInfo        :: !(Maybe PageInfo)
+    , _slrResources       :: !(Maybe [Survey])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'SurveysListResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'slrRequestId'
+--
+-- * 'slrTokenPagination'
+--
+-- * 'slrPageInfo'
+--
+-- * 'slrResources'
+surveysListResponse
+    :: SurveysListResponse
+surveysListResponse =
+    SurveysListResponse'
+    { _slrRequestId = Nothing
+    , _slrTokenPagination = Nothing
+    , _slrPageInfo = Nothing
+    , _slrResources = Nothing
+    }
+
+-- | Unique request ID used for logging and debugging. Please include in any
+-- error reporting or troubleshooting requests.
+slrRequestId :: Lens' SurveysListResponse (Maybe Text)
+slrRequestId
+  = lens _slrRequestId (\ s a -> s{_slrRequestId = a})
+
+slrTokenPagination :: Lens' SurveysListResponse (Maybe TokenPagination)
+slrTokenPagination
+  = lens _slrTokenPagination
+      (\ s a -> s{_slrTokenPagination = a})
+
+slrPageInfo :: Lens' SurveysListResponse (Maybe PageInfo)
+slrPageInfo
+  = lens _slrPageInfo (\ s a -> s{_slrPageInfo = a})
+
+-- | An individual survey resource.
+slrResources :: Lens' SurveysListResponse [Survey]
+slrResources
+  = lens _slrResources (\ s a -> s{_slrResources = a})
+      . _Default
+      . _Coerce
+
+instance FromJSON SurveysListResponse where
+        parseJSON
+          = withObject "SurveysListResponse"
+              (\ o ->
+                 SurveysListResponse' <$>
+                   (o .:? "requestId") <*> (o .:? "tokenPagination") <*>
+                     (o .:? "pageInfo")
+                     <*> (o .:? "resources" .!= mempty))
+
+instance ToJSON SurveysListResponse where
+        toJSON SurveysListResponse'{..}
+          = object
+              (catMaybes
+                 [("requestId" .=) <$> _slrRequestId,
+                  ("tokenPagination" .=) <$> _slrTokenPagination,
+                  ("pageInfo" .=) <$> _slrPageInfo,
+                  ("resources" .=) <$> _slrResources])
+
+--
+-- /See:/ 'mobileAppPanel' smart constructor.
+data MobileAppPanel = MobileAppPanel'
+    { _mapOwners           :: !(Maybe [Text])
+    , _mapCountry          :: !(Maybe Text)
+    , _mapName             :: !(Maybe Text)
+    , _mapMobileAppPanelId :: !(Maybe Text)
+    , _mapLanguage         :: !(Maybe Text)
+    , _mapIsPublicPanel    :: !(Maybe Bool)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'MobileAppPanel' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'mapOwners'
+--
+-- * 'mapCountry'
+--
+-- * 'mapName'
+--
+-- * 'mapMobileAppPanelId'
+--
+-- * 'mapLanguage'
+--
+-- * 'mapIsPublicPanel'
+mobileAppPanel
+    :: MobileAppPanel
+mobileAppPanel =
+    MobileAppPanel'
+    { _mapOwners = Nothing
+    , _mapCountry = Nothing
+    , _mapName = Nothing
+    , _mapMobileAppPanelId = Nothing
+    , _mapLanguage = Nothing
+    , _mapIsPublicPanel = Nothing
+    }
+
+mapOwners :: Lens' MobileAppPanel [Text]
+mapOwners
+  = lens _mapOwners (\ s a -> s{_mapOwners = a}) .
+      _Default
+      . _Coerce
+
+mapCountry :: Lens' MobileAppPanel (Maybe Text)
+mapCountry
+  = lens _mapCountry (\ s a -> s{_mapCountry = a})
+
+mapName :: Lens' MobileAppPanel (Maybe Text)
+mapName = lens _mapName (\ s a -> s{_mapName = a})
+
+mapMobileAppPanelId :: Lens' MobileAppPanel (Maybe Text)
+mapMobileAppPanelId
+  = lens _mapMobileAppPanelId
+      (\ s a -> s{_mapMobileAppPanelId = a})
+
+mapLanguage :: Lens' MobileAppPanel (Maybe Text)
+mapLanguage
+  = lens _mapLanguage (\ s a -> s{_mapLanguage = a})
+
+mapIsPublicPanel :: Lens' MobileAppPanel (Maybe Bool)
+mapIsPublicPanel
+  = lens _mapIsPublicPanel
+      (\ s a -> s{_mapIsPublicPanel = a})
+
+instance FromJSON MobileAppPanel where
+        parseJSON
+          = withObject "MobileAppPanel"
+              (\ o ->
+                 MobileAppPanel' <$>
+                   (o .:? "owners" .!= mempty) <*> (o .:? "country") <*>
+                     (o .:? "name")
+                     <*> (o .:? "mobileAppPanelId")
+                     <*> (o .:? "language")
+                     <*> (o .:? "isPublicPanel"))
+
+instance ToJSON MobileAppPanel where
+        toJSON MobileAppPanel'{..}
+          = object
+              (catMaybes
+                 [("owners" .=) <$> _mapOwners,
+                  ("country" .=) <$> _mapCountry,
+                  ("name" .=) <$> _mapName,
+                  ("mobileAppPanelId" .=) <$> _mapMobileAppPanelId,
+                  ("language" .=) <$> _mapLanguage,
+                  ("isPublicPanel" .=) <$> _mapIsPublicPanel])
+
+--
+-- /See:/ 'tokenPagination' smart constructor.
+data TokenPagination = TokenPagination'
+    { _tpNextPageToken     :: !(Maybe Text)
+    , _tpPreviousPageToken :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'TokenPagination' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'tpNextPageToken'
+--
+-- * 'tpPreviousPageToken'
+tokenPagination
+    :: TokenPagination
+tokenPagination =
+    TokenPagination'
+    { _tpNextPageToken = Nothing
+    , _tpPreviousPageToken = Nothing
+    }
+
+tpNextPageToken :: Lens' TokenPagination (Maybe Text)
+tpNextPageToken
+  = lens _tpNextPageToken
+      (\ s a -> s{_tpNextPageToken = a})
+
+tpPreviousPageToken :: Lens' TokenPagination (Maybe Text)
+tpPreviousPageToken
+  = lens _tpPreviousPageToken
+      (\ s a -> s{_tpPreviousPageToken = a})
+
+instance FromJSON TokenPagination where
+        parseJSON
+          = withObject "TokenPagination"
+              (\ o ->
+                 TokenPagination' <$>
+                   (o .:? "nextPageToken") <*>
+                     (o .:? "previousPageToken"))
+
+instance ToJSON TokenPagination where
+        toJSON TokenPagination'{..}
+          = object
+              (catMaybes
+                 [("nextPageToken" .=) <$> _tpNextPageToken,
+                  ("previousPageToken" .=) <$> _tpPreviousPageToken])
+
+--
+-- /See:/ 'resultsGetRequest' smart constructor.
+newtype ResultsGetRequest = ResultsGetRequest'
+    { _rgrResultMask :: Maybe ResultsMask
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ResultsGetRequest' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'rgrResultMask'
+resultsGetRequest
+    :: ResultsGetRequest
+resultsGetRequest =
+    ResultsGetRequest'
+    { _rgrResultMask = Nothing
+    }
+
+rgrResultMask :: Lens' ResultsGetRequest (Maybe ResultsMask)
+rgrResultMask
+  = lens _rgrResultMask
+      (\ s a -> s{_rgrResultMask = a})
+
+instance FromJSON ResultsGetRequest where
+        parseJSON
+          = withObject "ResultsGetRequest"
+              (\ o -> ResultsGetRequest' <$> (o .:? "resultMask"))
+
+instance ToJSON ResultsGetRequest where
+        toJSON ResultsGetRequest'{..}
+          = object
+              (catMaybes [("resultMask" .=) <$> _rgrResultMask])
+
+--
+-- /See:/ 'mobileAppPanelsListResponse' smart constructor.
+data MobileAppPanelsListResponse = MobileAppPanelsListResponse'
+    { _maplrRequestId       :: !(Maybe Text)
+    , _maplrTokenPagination :: !(Maybe TokenPagination)
+    , _maplrPageInfo        :: !(Maybe PageInfo)
+    , _maplrResources       :: !(Maybe [MobileAppPanel])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'MobileAppPanelsListResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'maplrRequestId'
+--
+-- * 'maplrTokenPagination'
+--
+-- * 'maplrPageInfo'
+--
+-- * 'maplrResources'
+mobileAppPanelsListResponse
+    :: MobileAppPanelsListResponse
+mobileAppPanelsListResponse =
+    MobileAppPanelsListResponse'
+    { _maplrRequestId = Nothing
+    , _maplrTokenPagination = Nothing
+    , _maplrPageInfo = Nothing
+    , _maplrResources = Nothing
+    }
+
+-- | Unique request ID used for logging and debugging. Please include in any
+-- error reporting or troubleshooting requests.
+maplrRequestId :: Lens' MobileAppPanelsListResponse (Maybe Text)
+maplrRequestId
+  = lens _maplrRequestId
+      (\ s a -> s{_maplrRequestId = a})
+
+maplrTokenPagination :: Lens' MobileAppPanelsListResponse (Maybe TokenPagination)
+maplrTokenPagination
+  = lens _maplrTokenPagination
+      (\ s a -> s{_maplrTokenPagination = a})
+
+maplrPageInfo :: Lens' MobileAppPanelsListResponse (Maybe PageInfo)
+maplrPageInfo
+  = lens _maplrPageInfo
+      (\ s a -> s{_maplrPageInfo = a})
+
+-- | An individual predefined panel of Opinion Rewards mobile users.
+maplrResources :: Lens' MobileAppPanelsListResponse [MobileAppPanel]
+maplrResources
+  = lens _maplrResources
+      (\ s a -> s{_maplrResources = a})
+      . _Default
+      . _Coerce
+
+instance FromJSON MobileAppPanelsListResponse where
+        parseJSON
+          = withObject "MobileAppPanelsListResponse"
+              (\ o ->
+                 MobileAppPanelsListResponse' <$>
+                   (o .:? "requestId") <*> (o .:? "tokenPagination") <*>
+                     (o .:? "pageInfo")
+                     <*> (o .:? "resources" .!= mempty))
+
+instance ToJSON MobileAppPanelsListResponse where
+        toJSON MobileAppPanelsListResponse'{..}
+          = object
+              (catMaybes
+                 [("requestId" .=) <$> _maplrRequestId,
+                  ("tokenPagination" .=) <$> _maplrTokenPagination,
+                  ("pageInfo" .=) <$> _maplrPageInfo,
+                  ("resources" .=) <$> _maplrResources])
+
+--
+-- /See:/ 'pageInfo' smart constructor.
+data PageInfo = PageInfo'
+    { _piResultPerPage :: !(Maybe (Textual Int32))
+    , _piTotalResults  :: !(Maybe (Textual Int32))
+    , _piStartIndex    :: !(Maybe (Textual Int32))
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'PageInfo' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'piResultPerPage'
+--
+-- * 'piTotalResults'
+--
+-- * 'piStartIndex'
+pageInfo
+    :: PageInfo
+pageInfo =
+    PageInfo'
+    { _piResultPerPage = Nothing
+    , _piTotalResults = Nothing
+    , _piStartIndex = Nothing
+    }
+
+piResultPerPage :: Lens' PageInfo (Maybe Int32)
+piResultPerPage
+  = lens _piResultPerPage
+      (\ s a -> s{_piResultPerPage = a})
+      . mapping _Coerce
+
+piTotalResults :: Lens' PageInfo (Maybe Int32)
+piTotalResults
+  = lens _piTotalResults
+      (\ s a -> s{_piTotalResults = a})
+      . mapping _Coerce
+
+piStartIndex :: Lens' PageInfo (Maybe Int32)
+piStartIndex
+  = lens _piStartIndex (\ s a -> s{_piStartIndex = a})
+      . mapping _Coerce
+
+instance FromJSON PageInfo where
+        parseJSON
+          = withObject "PageInfo"
+              (\ o ->
+                 PageInfo' <$>
+                   (o .:? "resultPerPage") <*> (o .:? "totalResults")
+                     <*> (o .:? "startIndex"))
+
+instance ToJSON PageInfo where
+        toJSON PageInfo'{..}
+          = object
+              (catMaybes
+                 [("resultPerPage" .=) <$> _piResultPerPage,
+                  ("totalResults" .=) <$> _piTotalResults,
+                  ("startIndex" .=) <$> _piStartIndex])
+
+--
+-- /See:/ 'fieldMask' smart constructor.
+data FieldMask = FieldMask'
+    { _fmId     :: !(Maybe (Textual Int32))
+    , _fmFields :: !(Maybe [FieldMask])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'FieldMask' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'fmId'
+--
+-- * 'fmFields'
+fieldMask
+    :: FieldMask
+fieldMask =
+    FieldMask'
+    { _fmId = Nothing
+    , _fmFields = Nothing
+    }
+
+fmId :: Lens' FieldMask (Maybe Int32)
+fmId
+  = lens _fmId (\ s a -> s{_fmId = a}) .
+      mapping _Coerce
+
+fmFields :: Lens' FieldMask [FieldMask]
+fmFields
+  = lens _fmFields (\ s a -> s{_fmFields = a}) .
+      _Default
+      . _Coerce
+
+instance FromJSON FieldMask where
+        parseJSON
+          = withObject "FieldMask"
+              (\ o ->
+                 FieldMask' <$>
+                   (o .:? "id") <*> (o .:? "fields" .!= mempty))
+
+instance ToJSON FieldMask where
+        toJSON FieldMask'{..}
+          = object
+              (catMaybes
+                 [("id" .=) <$> _fmId, ("fields" .=) <$> _fmFields])
+
+--
+-- /See:/ 'survey' smart constructor.
+data Survey = Survey'
+    { _sAudience            :: !(Maybe SurveyAudience)
+    , _sState               :: !(Maybe Text)
+    , _sOwners              :: !(Maybe [Text])
+    , _sWantedResponseCount :: !(Maybe (Textual Int32))
+    , _sSurveyURLId         :: !(Maybe Text)
+    , _sCost                :: !(Maybe SurveyCost)
+    , _sRejectionReason     :: !(Maybe SurveyRejection)
+    , _sCustomerData        :: !(Maybe Bytes)
+    , _sQuestions           :: !(Maybe [SurveyQuestion])
+    , _sTitle               :: !(Maybe Text)
+    , _sDescription         :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Survey' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'sAudience'
+--
+-- * 'sState'
+--
+-- * 'sOwners'
+--
+-- * 'sWantedResponseCount'
+--
+-- * 'sSurveyURLId'
+--
+-- * 'sCost'
+--
+-- * 'sRejectionReason'
+--
+-- * 'sCustomerData'
+--
+-- * 'sQuestions'
+--
+-- * 'sTitle'
+--
+-- * 'sDescription'
+survey
+    :: Survey
+survey =
+    Survey'
+    { _sAudience = Nothing
+    , _sState = Nothing
+    , _sOwners = Nothing
+    , _sWantedResponseCount = Nothing
+    , _sSurveyURLId = Nothing
+    , _sCost = Nothing
+    , _sRejectionReason = Nothing
+    , _sCustomerData = Nothing
+    , _sQuestions = Nothing
+    , _sTitle = Nothing
+    , _sDescription = Nothing
+    }
+
+sAudience :: Lens' Survey (Maybe SurveyAudience)
+sAudience
+  = lens _sAudience (\ s a -> s{_sAudience = a})
+
+sState :: Lens' Survey (Maybe Text)
+sState = lens _sState (\ s a -> s{_sState = a})
+
+sOwners :: Lens' Survey [Text]
+sOwners
+  = lens _sOwners (\ s a -> s{_sOwners = a}) . _Default
+      . _Coerce
+
+sWantedResponseCount :: Lens' Survey (Maybe Int32)
+sWantedResponseCount
+  = lens _sWantedResponseCount
+      (\ s a -> s{_sWantedResponseCount = a})
+      . mapping _Coerce
+
+sSurveyURLId :: Lens' Survey (Maybe Text)
+sSurveyURLId
+  = lens _sSurveyURLId (\ s a -> s{_sSurveyURLId = a})
+
+sCost :: Lens' Survey (Maybe SurveyCost)
+sCost = lens _sCost (\ s a -> s{_sCost = a})
+
+sRejectionReason :: Lens' Survey (Maybe SurveyRejection)
+sRejectionReason
+  = lens _sRejectionReason
+      (\ s a -> s{_sRejectionReason = a})
+
+sCustomerData :: Lens' Survey (Maybe ByteString)
+sCustomerData
+  = lens _sCustomerData
+      (\ s a -> s{_sCustomerData = a})
+      . mapping _Bytes
+
+sQuestions :: Lens' Survey [SurveyQuestion]
+sQuestions
+  = lens _sQuestions (\ s a -> s{_sQuestions = a}) .
+      _Default
+      . _Coerce
+
+sTitle :: Lens' Survey (Maybe Text)
+sTitle = lens _sTitle (\ s a -> s{_sTitle = a})
+
+sDescription :: Lens' Survey (Maybe Text)
+sDescription
+  = lens _sDescription (\ s a -> s{_sDescription = a})
+
+instance FromJSON Survey where
+        parseJSON
+          = withObject "Survey"
+              (\ o ->
+                 Survey' <$>
+                   (o .:? "audience") <*> (o .:? "state") <*>
+                     (o .:? "owners" .!= mempty)
+                     <*> (o .:? "wantedResponseCount")
+                     <*> (o .:? "surveyUrlId")
+                     <*> (o .:? "cost")
+                     <*> (o .:? "rejectionReason")
+                     <*> (o .:? "customerData")
+                     <*> (o .:? "questions" .!= mempty)
+                     <*> (o .:? "title")
+                     <*> (o .:? "description"))
+
+instance ToJSON Survey where
+        toJSON Survey'{..}
+          = object
+              (catMaybes
+                 [("audience" .=) <$> _sAudience,
+                  ("state" .=) <$> _sState, ("owners" .=) <$> _sOwners,
+                  ("wantedResponseCount" .=) <$> _sWantedResponseCount,
+                  ("surveyUrlId" .=) <$> _sSurveyURLId,
+                  ("cost" .=) <$> _sCost,
+                  ("rejectionReason" .=) <$> _sRejectionReason,
+                  ("customerData" .=) <$> _sCustomerData,
+                  ("questions" .=) <$> _sQuestions,
+                  ("title" .=) <$> _sTitle,
+                  ("description" .=) <$> _sDescription])
+
+--
+-- /See:/ 'surveysStartResponse' smart constructor.
+newtype SurveysStartResponse = SurveysStartResponse'
+    { _ssrRequestId :: Maybe Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'SurveysStartResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ssrRequestId'
+surveysStartResponse
+    :: SurveysStartResponse
+surveysStartResponse =
+    SurveysStartResponse'
+    { _ssrRequestId = Nothing
+    }
+
+-- | Unique request ID used for logging and debugging. Please include in any
+-- error reporting or troubleshooting requests.
+ssrRequestId :: Lens' SurveysStartResponse (Maybe Text)
+ssrRequestId
+  = lens _ssrRequestId (\ s a -> s{_ssrRequestId = a})
+
+instance FromJSON SurveysStartResponse where
+        parseJSON
+          = withObject "SurveysStartResponse"
+              (\ o ->
+                 SurveysStartResponse' <$> (o .:? "requestId"))
+
+instance ToJSON SurveysStartResponse where
+        toJSON SurveysStartResponse'{..}
+          = object
+              (catMaybes [("requestId" .=) <$> _ssrRequestId])
+
+--
+-- /See:/ 'surveysStopResponse' smart constructor.
+newtype SurveysStopResponse = SurveysStopResponse'
+    { _sRequestId :: Maybe Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'SurveysStopResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'sRequestId'
+surveysStopResponse
+    :: SurveysStopResponse
+surveysStopResponse =
+    SurveysStopResponse'
+    { _sRequestId = Nothing
+    }
+
+-- | Unique request ID used for logging and debugging. Please include in any
+-- error reporting or troubleshooting requests.
+sRequestId :: Lens' SurveysStopResponse (Maybe Text)
+sRequestId
+  = lens _sRequestId (\ s a -> s{_sRequestId = a})
+
+instance FromJSON SurveysStopResponse where
+        parseJSON
+          = withObject "SurveysStopResponse"
+              (\ o -> SurveysStopResponse' <$> (o .:? "requestId"))
+
+instance ToJSON SurveysStopResponse where
+        toJSON SurveysStopResponse'{..}
+          = object
+              (catMaybes [("requestId" .=) <$> _sRequestId])
+
+--
+-- /See:/ 'resultsMask' smart constructor.
+data ResultsMask = ResultsMask'
+    { _rmProjection :: !(Maybe Text)
+    , _rmFields     :: !(Maybe [FieldMask])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ResultsMask' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'rmProjection'
+--
+-- * 'rmFields'
+resultsMask
+    :: ResultsMask
+resultsMask =
+    ResultsMask'
+    { _rmProjection = Nothing
+    , _rmFields = Nothing
+    }
+
+rmProjection :: Lens' ResultsMask (Maybe Text)
+rmProjection
+  = lens _rmProjection (\ s a -> s{_rmProjection = a})
+
+rmFields :: Lens' ResultsMask [FieldMask]
+rmFields
+  = lens _rmFields (\ s a -> s{_rmFields = a}) .
+      _Default
+      . _Coerce
+
+instance FromJSON ResultsMask where
+        parseJSON
+          = withObject "ResultsMask"
+              (\ o ->
+                 ResultsMask' <$>
+                   (o .:? "projection") <*> (o .:? "fields" .!= mempty))
+
+instance ToJSON ResultsMask where
+        toJSON ResultsMask'{..}
+          = object
+              (catMaybes
+                 [("projection" .=) <$> _rmProjection,
+                  ("fields" .=) <$> _rmFields])
+
+--
+-- /See:/ 'surveyRejection' smart constructor.
+data SurveyRejection = SurveyRejection'
+    { _srExplanation :: !(Maybe Text)
+    , _srType        :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'SurveyRejection' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'srExplanation'
+--
+-- * 'srType'
+surveyRejection
+    :: SurveyRejection
+surveyRejection =
+    SurveyRejection'
+    { _srExplanation = Nothing
+    , _srType = Nothing
+    }
+
+srExplanation :: Lens' SurveyRejection (Maybe Text)
+srExplanation
+  = lens _srExplanation
+      (\ s a -> s{_srExplanation = a})
+
+srType :: Lens' SurveyRejection (Maybe Text)
+srType = lens _srType (\ s a -> s{_srType = a})
+
+instance FromJSON SurveyRejection where
+        parseJSON
+          = withObject "SurveyRejection"
+              (\ o ->
+                 SurveyRejection' <$>
+                   (o .:? "explanation") <*> (o .:? "type"))
+
+instance ToJSON SurveyRejection where
+        toJSON SurveyRejection'{..}
+          = object
+              (catMaybes
+                 [("explanation" .=) <$> _srExplanation,
+                  ("type" .=) <$> _srType])
+
+--
+-- /See:/ 'surveyResults' smart constructor.
+data SurveyResults = SurveyResults'
+    { _srStatus      :: !(Maybe Text)
+    , _srSurveyURLId :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'SurveyResults' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'srStatus'
+--
+-- * 'srSurveyURLId'
+surveyResults
+    :: SurveyResults
+surveyResults =
+    SurveyResults'
+    { _srStatus = Nothing
+    , _srSurveyURLId = Nothing
+    }
+
+srStatus :: Lens' SurveyResults (Maybe Text)
+srStatus = lens _srStatus (\ s a -> s{_srStatus = a})
+
+srSurveyURLId :: Lens' SurveyResults (Maybe Text)
+srSurveyURLId
+  = lens _srSurveyURLId
+      (\ s a -> s{_srSurveyURLId = a})
+
+instance FromJSON SurveyResults where
+        parseJSON
+          = withObject "SurveyResults"
+              (\ o ->
+                 SurveyResults' <$>
+                   (o .:? "status") <*> (o .:? "surveyUrlId"))
+
+instance ToJSON SurveyResults where
+        toJSON SurveyResults'{..}
+          = object
+              (catMaybes
+                 [("status" .=) <$> _srStatus,
+                  ("surveyUrlId" .=) <$> _srSurveyURLId])
+
+--
+-- /See:/ 'surveysStartRequest' smart constructor.
+newtype SurveysStartRequest = SurveysStartRequest'
+    { _ssrMaxCostPerResponseNanos :: Maybe (Textual Int64)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'SurveysStartRequest' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ssrMaxCostPerResponseNanos'
+surveysStartRequest
+    :: SurveysStartRequest
+surveysStartRequest =
+    SurveysStartRequest'
+    { _ssrMaxCostPerResponseNanos = Nothing
+    }
+
+-- | Threshold to start a survey automically if the quoted prices is less
+-- than or equal to this value. See Survey.Cost for more details.
+ssrMaxCostPerResponseNanos :: Lens' SurveysStartRequest (Maybe Int64)
+ssrMaxCostPerResponseNanos
+  = lens _ssrMaxCostPerResponseNanos
+      (\ s a -> s{_ssrMaxCostPerResponseNanos = a})
+      . mapping _Coerce
+
+instance FromJSON SurveysStartRequest where
+        parseJSON
+          = withObject "SurveysStartRequest"
+              (\ o ->
+                 SurveysStartRequest' <$>
+                   (o .:? "maxCostPerResponseNanos"))
+
+instance ToJSON SurveysStartRequest where
+        toJSON SurveysStartRequest'{..}
+          = object
+              (catMaybes
+                 [("maxCostPerResponseNanos" .=) <$>
+                    _ssrMaxCostPerResponseNanos])
+
+--
+-- /See:/ 'surveysDeleteResponse' smart constructor.
+newtype SurveysDeleteResponse = SurveysDeleteResponse'
+    { _sdrRequestId :: Maybe Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'SurveysDeleteResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'sdrRequestId'
+surveysDeleteResponse
+    :: SurveysDeleteResponse
+surveysDeleteResponse =
+    SurveysDeleteResponse'
+    { _sdrRequestId = Nothing
+    }
+
+-- | Unique request ID used for logging and debugging. Please include in any
+-- error reporting or troubleshooting requests.
+sdrRequestId :: Lens' SurveysDeleteResponse (Maybe Text)
+sdrRequestId
+  = lens _sdrRequestId (\ s a -> s{_sdrRequestId = a})
+
+instance FromJSON SurveysDeleteResponse where
+        parseJSON
+          = withObject "SurveysDeleteResponse"
+              (\ o ->
+                 SurveysDeleteResponse' <$> (o .:? "requestId"))
+
+instance ToJSON SurveysDeleteResponse where
+        toJSON SurveysDeleteResponse'{..}
+          = object
+              (catMaybes [("requestId" .=) <$> _sdrRequestId])
+
+--
+-- /See:/ 'surveyQuestionImage' smart constructor.
+data SurveyQuestionImage = SurveyQuestionImage'
+    { _sqiData    :: !(Maybe Bytes)
+    , _sqiURL     :: !(Maybe Text)
+    , _sqiAltText :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'SurveyQuestionImage' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'sqiData'
+--
+-- * 'sqiURL'
+--
+-- * 'sqiAltText'
+surveyQuestionImage
+    :: SurveyQuestionImage
+surveyQuestionImage =
+    SurveyQuestionImage'
+    { _sqiData = Nothing
+    , _sqiURL = Nothing
+    , _sqiAltText = Nothing
+    }
+
+sqiData :: Lens' SurveyQuestionImage (Maybe ByteString)
+sqiData
+  = lens _sqiData (\ s a -> s{_sqiData = a}) .
+      mapping _Bytes
+
+sqiURL :: Lens' SurveyQuestionImage (Maybe Text)
+sqiURL = lens _sqiURL (\ s a -> s{_sqiURL = a})
+
+sqiAltText :: Lens' SurveyQuestionImage (Maybe Text)
+sqiAltText
+  = lens _sqiAltText (\ s a -> s{_sqiAltText = a})
+
+instance FromJSON SurveyQuestionImage where
+        parseJSON
+          = withObject "SurveyQuestionImage"
+              (\ o ->
+                 SurveyQuestionImage' <$>
+                   (o .:? "data") <*> (o .:? "url") <*>
+                     (o .:? "altText"))
+
+instance ToJSON SurveyQuestionImage where
+        toJSON SurveyQuestionImage'{..}
+          = object
+              (catMaybes
+                 [("data" .=) <$> _sqiData, ("url" .=) <$> _sqiURL,
+                  ("altText" .=) <$> _sqiAltText])
+
+--
+-- /See:/ 'surveyAudience' smart constructor.
+data SurveyAudience = SurveyAudience'
+    { _saCountry            :: !(Maybe Text)
+    , _saAges               :: !(Maybe [Text])
+    , _saLanguages          :: !(Maybe [Text])
+    , _saGender             :: !(Maybe Text)
+    , _saMobileAppPanelId   :: !(Maybe Text)
+    , _saCountrySubdivision :: !(Maybe Text)
+    , _saPopulationSource   :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'SurveyAudience' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'saCountry'
+--
+-- * 'saAges'
+--
+-- * 'saLanguages'
+--
+-- * 'saGender'
+--
+-- * 'saMobileAppPanelId'
+--
+-- * 'saCountrySubdivision'
+--
+-- * 'saPopulationSource'
+surveyAudience
+    :: SurveyAudience
+surveyAudience =
+    SurveyAudience'
+    { _saCountry = Nothing
+    , _saAges = Nothing
+    , _saLanguages = Nothing
+    , _saGender = Nothing
+    , _saMobileAppPanelId = Nothing
+    , _saCountrySubdivision = Nothing
+    , _saPopulationSource = Nothing
+    }
+
+saCountry :: Lens' SurveyAudience (Maybe Text)
+saCountry
+  = lens _saCountry (\ s a -> s{_saCountry = a})
+
+saAges :: Lens' SurveyAudience [Text]
+saAges
+  = lens _saAges (\ s a -> s{_saAges = a}) . _Default .
+      _Coerce
+
+saLanguages :: Lens' SurveyAudience [Text]
+saLanguages
+  = lens _saLanguages (\ s a -> s{_saLanguages = a}) .
+      _Default
+      . _Coerce
+
+saGender :: Lens' SurveyAudience (Maybe Text)
+saGender = lens _saGender (\ s a -> s{_saGender = a})
+
+saMobileAppPanelId :: Lens' SurveyAudience (Maybe Text)
+saMobileAppPanelId
+  = lens _saMobileAppPanelId
+      (\ s a -> s{_saMobileAppPanelId = a})
+
+saCountrySubdivision :: Lens' SurveyAudience (Maybe Text)
+saCountrySubdivision
+  = lens _saCountrySubdivision
+      (\ s a -> s{_saCountrySubdivision = a})
+
+saPopulationSource :: Lens' SurveyAudience (Maybe Text)
+saPopulationSource
+  = lens _saPopulationSource
+      (\ s a -> s{_saPopulationSource = a})
+
+instance FromJSON SurveyAudience where
+        parseJSON
+          = withObject "SurveyAudience"
+              (\ o ->
+                 SurveyAudience' <$>
+                   (o .:? "country") <*> (o .:? "ages" .!= mempty) <*>
+                     (o .:? "languages" .!= mempty)
+                     <*> (o .:? "gender")
+                     <*> (o .:? "mobileAppPanelId")
+                     <*> (o .:? "countrySubdivision")
+                     <*> (o .:? "populationSource"))
+
+instance ToJSON SurveyAudience where
+        toJSON SurveyAudience'{..}
+          = object
+              (catMaybes
+                 [("country" .=) <$> _saCountry,
+                  ("ages" .=) <$> _saAges,
+                  ("languages" .=) <$> _saLanguages,
+                  ("gender" .=) <$> _saGender,
+                  ("mobileAppPanelId" .=) <$> _saMobileAppPanelId,
+                  ("countrySubdivision" .=) <$> _saCountrySubdivision,
+                  ("populationSource" .=) <$> _saPopulationSource])
+
+--
+-- /See:/ 'surveyCost' smart constructor.
+data SurveyCost = SurveyCost'
+    { _scCurrencyCode            :: !(Maybe Text)
+    , _scNanos                   :: !(Maybe (Textual Int64))
+    , _scMaxCostPerResponseNanos :: !(Maybe (Textual Int64))
+    , _scCostPerResponseNanos    :: !(Maybe (Textual Int64))
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'SurveyCost' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'scCurrencyCode'
+--
+-- * 'scNanos'
+--
+-- * 'scMaxCostPerResponseNanos'
+--
+-- * 'scCostPerResponseNanos'
+surveyCost
+    :: SurveyCost
+surveyCost =
+    SurveyCost'
+    { _scCurrencyCode = Nothing
+    , _scNanos = Nothing
+    , _scMaxCostPerResponseNanos = Nothing
+    , _scCostPerResponseNanos = Nothing
+    }
+
+scCurrencyCode :: Lens' SurveyCost (Maybe Text)
+scCurrencyCode
+  = lens _scCurrencyCode
+      (\ s a -> s{_scCurrencyCode = a})
+
+scNanos :: Lens' SurveyCost (Maybe Int64)
+scNanos
+  = lens _scNanos (\ s a -> s{_scNanos = a}) .
+      mapping _Coerce
+
+scMaxCostPerResponseNanos :: Lens' SurveyCost (Maybe Int64)
+scMaxCostPerResponseNanos
+  = lens _scMaxCostPerResponseNanos
+      (\ s a -> s{_scMaxCostPerResponseNanos = a})
+      . mapping _Coerce
+
+scCostPerResponseNanos :: Lens' SurveyCost (Maybe Int64)
+scCostPerResponseNanos
+  = lens _scCostPerResponseNanos
+      (\ s a -> s{_scCostPerResponseNanos = a})
+      . mapping _Coerce
+
+instance FromJSON SurveyCost where
+        parseJSON
+          = withObject "SurveyCost"
+              (\ o ->
+                 SurveyCost' <$>
+                   (o .:? "currencyCode") <*> (o .:? "nanos") <*>
+                     (o .:? "maxCostPerResponseNanos")
+                     <*> (o .:? "costPerResponseNanos"))
+
+instance ToJSON SurveyCost where
+        toJSON SurveyCost'{..}
+          = object
+              (catMaybes
+                 [("currencyCode" .=) <$> _scCurrencyCode,
+                  ("nanos" .=) <$> _scNanos,
+                  ("maxCostPerResponseNanos" .=) <$>
+                    _scMaxCostPerResponseNanos,
+                  ("costPerResponseNanos" .=) <$>
+                    _scCostPerResponseNanos])
+
+--
+-- /See:/ 'surveyQuestion' smart constructor.
+data SurveyQuestion = SurveyQuestion'
+    { _sqImages                   :: !(Maybe [SurveyQuestionImage])
+    , _sqAnswers                  :: !(Maybe [Text])
+    , _sqSingleLineResponse       :: !(Maybe Bool)
+    , _sqMustPickSuggestion       :: !(Maybe Bool)
+    , _sqSentimentText            :: !(Maybe Text)
+    , _sqThresholdAnswers         :: !(Maybe [Text])
+    , _sqHasOther                 :: !(Maybe Bool)
+    , _sqOpenTextSuggestions      :: !(Maybe [Text])
+    , _sqVideoId                  :: !(Maybe Text)
+    , _sqLastAnswerPositionPinned :: !(Maybe Bool)
+    , _sqAnswerOrder              :: !(Maybe Text)
+    , _sqOpenTextPlaceholder      :: !(Maybe Text)
+    , _sqType                     :: !(Maybe Text)
+    , _sqUnitOfMeasurementLabel   :: !(Maybe Text)
+    , _sqHighValueLabel           :: !(Maybe Text)
+    , _sqQuestion                 :: !(Maybe Text)
+    , _sqNumStars                 :: !(Maybe Text)
+    , _sqLowValueLabel            :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'SurveyQuestion' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'sqImages'
+--
+-- * 'sqAnswers'
+--
+-- * 'sqSingleLineResponse'
+--
+-- * 'sqMustPickSuggestion'
+--
+-- * 'sqSentimentText'
+--
+-- * 'sqThresholdAnswers'
+--
+-- * 'sqHasOther'
+--
+-- * 'sqOpenTextSuggestions'
+--
+-- * 'sqVideoId'
+--
+-- * 'sqLastAnswerPositionPinned'
+--
+-- * 'sqAnswerOrder'
+--
+-- * 'sqOpenTextPlaceholder'
+--
+-- * 'sqType'
+--
+-- * 'sqUnitOfMeasurementLabel'
+--
+-- * 'sqHighValueLabel'
+--
+-- * 'sqQuestion'
+--
+-- * 'sqNumStars'
+--
+-- * 'sqLowValueLabel'
+surveyQuestion
+    :: SurveyQuestion
+surveyQuestion =
+    SurveyQuestion'
+    { _sqImages = Nothing
+    , _sqAnswers = Nothing
+    , _sqSingleLineResponse = Nothing
+    , _sqMustPickSuggestion = Nothing
+    , _sqSentimentText = Nothing
+    , _sqThresholdAnswers = Nothing
+    , _sqHasOther = Nothing
+    , _sqOpenTextSuggestions = Nothing
+    , _sqVideoId = Nothing
+    , _sqLastAnswerPositionPinned = Nothing
+    , _sqAnswerOrder = Nothing
+    , _sqOpenTextPlaceholder = Nothing
+    , _sqType = Nothing
+    , _sqUnitOfMeasurementLabel = Nothing
+    , _sqHighValueLabel = Nothing
+    , _sqQuestion = Nothing
+    , _sqNumStars = Nothing
+    , _sqLowValueLabel = Nothing
+    }
+
+sqImages :: Lens' SurveyQuestion [SurveyQuestionImage]
+sqImages
+  = lens _sqImages (\ s a -> s{_sqImages = a}) .
+      _Default
+      . _Coerce
+
+sqAnswers :: Lens' SurveyQuestion [Text]
+sqAnswers
+  = lens _sqAnswers (\ s a -> s{_sqAnswers = a}) .
+      _Default
+      . _Coerce
+
+sqSingleLineResponse :: Lens' SurveyQuestion (Maybe Bool)
+sqSingleLineResponse
+  = lens _sqSingleLineResponse
+      (\ s a -> s{_sqSingleLineResponse = a})
+
+sqMustPickSuggestion :: Lens' SurveyQuestion (Maybe Bool)
+sqMustPickSuggestion
+  = lens _sqMustPickSuggestion
+      (\ s a -> s{_sqMustPickSuggestion = a})
+
+sqSentimentText :: Lens' SurveyQuestion (Maybe Text)
+sqSentimentText
+  = lens _sqSentimentText
+      (\ s a -> s{_sqSentimentText = a})
+
+sqThresholdAnswers :: Lens' SurveyQuestion [Text]
+sqThresholdAnswers
+  = lens _sqThresholdAnswers
+      (\ s a -> s{_sqThresholdAnswers = a})
+      . _Default
+      . _Coerce
+
+sqHasOther :: Lens' SurveyQuestion (Maybe Bool)
+sqHasOther
+  = lens _sqHasOther (\ s a -> s{_sqHasOther = a})
+
+sqOpenTextSuggestions :: Lens' SurveyQuestion [Text]
+sqOpenTextSuggestions
+  = lens _sqOpenTextSuggestions
+      (\ s a -> s{_sqOpenTextSuggestions = a})
+      . _Default
+      . _Coerce
+
+sqVideoId :: Lens' SurveyQuestion (Maybe Text)
+sqVideoId
+  = lens _sqVideoId (\ s a -> s{_sqVideoId = a})
+
+sqLastAnswerPositionPinned :: Lens' SurveyQuestion (Maybe Bool)
+sqLastAnswerPositionPinned
+  = lens _sqLastAnswerPositionPinned
+      (\ s a -> s{_sqLastAnswerPositionPinned = a})
+
+sqAnswerOrder :: Lens' SurveyQuestion (Maybe Text)
+sqAnswerOrder
+  = lens _sqAnswerOrder
+      (\ s a -> s{_sqAnswerOrder = a})
+
+sqOpenTextPlaceholder :: Lens' SurveyQuestion (Maybe Text)
+sqOpenTextPlaceholder
+  = lens _sqOpenTextPlaceholder
+      (\ s a -> s{_sqOpenTextPlaceholder = a})
+
+sqType :: Lens' SurveyQuestion (Maybe Text)
+sqType = lens _sqType (\ s a -> s{_sqType = a})
+
+sqUnitOfMeasurementLabel :: Lens' SurveyQuestion (Maybe Text)
+sqUnitOfMeasurementLabel
+  = lens _sqUnitOfMeasurementLabel
+      (\ s a -> s{_sqUnitOfMeasurementLabel = a})
+
+sqHighValueLabel :: Lens' SurveyQuestion (Maybe Text)
+sqHighValueLabel
+  = lens _sqHighValueLabel
+      (\ s a -> s{_sqHighValueLabel = a})
+
+sqQuestion :: Lens' SurveyQuestion (Maybe Text)
+sqQuestion
+  = lens _sqQuestion (\ s a -> s{_sqQuestion = a})
+
+sqNumStars :: Lens' SurveyQuestion (Maybe Text)
+sqNumStars
+  = lens _sqNumStars (\ s a -> s{_sqNumStars = a})
+
+sqLowValueLabel :: Lens' SurveyQuestion (Maybe Text)
+sqLowValueLabel
+  = lens _sqLowValueLabel
+      (\ s a -> s{_sqLowValueLabel = a})
+
+instance FromJSON SurveyQuestion where
+        parseJSON
+          = withObject "SurveyQuestion"
+              (\ o ->
+                 SurveyQuestion' <$>
+                   (o .:? "images" .!= mempty) <*>
+                     (o .:? "answers" .!= mempty)
+                     <*> (o .:? "singleLineResponse")
+                     <*> (o .:? "mustPickSuggestion")
+                     <*> (o .:? "sentimentText")
+                     <*> (o .:? "thresholdAnswers" .!= mempty)
+                     <*> (o .:? "hasOther")
+                     <*> (o .:? "openTextSuggestions" .!= mempty)
+                     <*> (o .:? "videoId")
+                     <*> (o .:? "lastAnswerPositionPinned")
+                     <*> (o .:? "answerOrder")
+                     <*> (o .:? "openTextPlaceholder")
+                     <*> (o .:? "type")
+                     <*> (o .:? "unitOfMeasurementLabel")
+                     <*> (o .:? "highValueLabel")
+                     <*> (o .:? "question")
+                     <*> (o .:? "numStars")
+                     <*> (o .:? "lowValueLabel"))
+
+instance ToJSON SurveyQuestion where
+        toJSON SurveyQuestion'{..}
+          = object
+              (catMaybes
+                 [("images" .=) <$> _sqImages,
+                  ("answers" .=) <$> _sqAnswers,
+                  ("singleLineResponse" .=) <$> _sqSingleLineResponse,
+                  ("mustPickSuggestion" .=) <$> _sqMustPickSuggestion,
+                  ("sentimentText" .=) <$> _sqSentimentText,
+                  ("thresholdAnswers" .=) <$> _sqThresholdAnswers,
+                  ("hasOther" .=) <$> _sqHasOther,
+                  ("openTextSuggestions" .=) <$>
+                    _sqOpenTextSuggestions,
+                  ("videoId" .=) <$> _sqVideoId,
+                  ("lastAnswerPositionPinned" .=) <$>
+                    _sqLastAnswerPositionPinned,
+                  ("answerOrder" .=) <$> _sqAnswerOrder,
+                  ("openTextPlaceholder" .=) <$>
+                    _sqOpenTextPlaceholder,
+                  ("type" .=) <$> _sqType,
+                  ("unitOfMeasurementLabel" .=) <$>
+                    _sqUnitOfMeasurementLabel,
+                  ("highValueLabel" .=) <$> _sqHighValueLabel,
+                  ("question" .=) <$> _sqQuestion,
+                  ("numStars" .=) <$> _sqNumStars,
+                  ("lowValueLabel" .=) <$> _sqLowValueLabel])
diff --git a/gen/Network/Google/ConsumerSurveys/Types/Sum.hs b/gen/Network/Google/ConsumerSurveys/Types/Sum.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/ConsumerSurveys/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.ConsumerSurveys.Types.Sum
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+module Network.Google.ConsumerSurveys.Types.Sum where
+
+import           Network.Google.Prelude hiding (Bytes)
diff --git a/gen/Network/Google/Resource/ConsumerSurveys/MobileApppanels/Get.hs b/gen/Network/Google/Resource/ConsumerSurveys/MobileApppanels/Get.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/ConsumerSurveys/MobileApppanels/Get.hs
@@ -0,0 +1,89 @@
+{-# 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.ConsumerSurveys.MobileApppanels.Get
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Retrieves a MobileAppPanel that is available to the authenticated user.
+--
+-- /See:/ <https://developers.google.com/surveys/ Consumer Surveys API Reference> for @consumersurveys.mobileapppanels.get@.
+module Network.Google.Resource.ConsumerSurveys.MobileApppanels.Get
+    (
+    -- * REST Resource
+      MobileApppanelsGetResource
+
+    -- * Creating a Request
+    , mobileApppanelsGet
+    , MobileApppanelsGet
+
+    -- * Request Lenses
+    , magPanelId
+    ) where
+
+import           Network.Google.ConsumerSurveys.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @consumersurveys.mobileapppanels.get@ method which the
+-- 'MobileApppanelsGet' request conforms to.
+type MobileApppanelsGetResource =
+     "consumersurveys" :>
+       "v2" :>
+         "mobileAppPanels" :>
+           Capture "panelId" Text :>
+             QueryParam "alt" AltJSON :>
+               Get '[JSON] MobileAppPanel
+
+-- | Retrieves a MobileAppPanel that is available to the authenticated user.
+--
+-- /See:/ 'mobileApppanelsGet' smart constructor.
+newtype MobileApppanelsGet = MobileApppanelsGet'
+    { _magPanelId :: Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'MobileApppanelsGet' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'magPanelId'
+mobileApppanelsGet
+    :: Text -- ^ 'magPanelId'
+    -> MobileApppanelsGet
+mobileApppanelsGet pMagPanelId_ =
+    MobileApppanelsGet'
+    { _magPanelId = pMagPanelId_
+    }
+
+-- | External URL ID for the panel.
+magPanelId :: Lens' MobileApppanelsGet Text
+magPanelId
+  = lens _magPanelId (\ s a -> s{_magPanelId = a})
+
+instance GoogleRequest MobileApppanelsGet where
+        type Rs MobileApppanelsGet = MobileAppPanel
+        type Scopes MobileApppanelsGet =
+             '["https://www.googleapis.com/auth/consumersurveys",
+               "https://www.googleapis.com/auth/consumersurveys.readonly",
+               "https://www.googleapis.com/auth/userinfo.email"]
+        requestClient MobileApppanelsGet'{..}
+          = go _magPanelId (Just AltJSON)
+              consumerSurveysService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy MobileApppanelsGetResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/ConsumerSurveys/MobileApppanels/List.hs b/gen/Network/Google/Resource/ConsumerSurveys/MobileApppanels/List.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/ConsumerSurveys/MobileApppanels/List.hs
@@ -0,0 +1,112 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.ConsumerSurveys.MobileApppanels.List
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Lists the MobileAppPanels available to the authenticated user.
+--
+-- /See:/ <https://developers.google.com/surveys/ Consumer Surveys API Reference> for @consumersurveys.mobileapppanels.list@.
+module Network.Google.Resource.ConsumerSurveys.MobileApppanels.List
+    (
+    -- * REST Resource
+      MobileApppanelsListResource
+
+    -- * Creating a Request
+    , mobileApppanelsList
+    , MobileApppanelsList
+
+    -- * Request Lenses
+    , malToken
+    , malStartIndex
+    , malMaxResults
+    ) where
+
+import           Network.Google.ConsumerSurveys.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @consumersurveys.mobileapppanels.list@ method which the
+-- 'MobileApppanelsList' request conforms to.
+type MobileApppanelsListResource =
+     "consumersurveys" :>
+       "v2" :>
+         "mobileAppPanels" :>
+           QueryParam "token" Text :>
+             QueryParam "startIndex" (Textual Word32) :>
+               QueryParam "maxResults" (Textual Word32) :>
+                 QueryParam "alt" AltJSON :>
+                   Get '[JSON] MobileAppPanelsListResponse
+
+-- | Lists the MobileAppPanels available to the authenticated user.
+--
+-- /See:/ 'mobileApppanelsList' smart constructor.
+data MobileApppanelsList = MobileApppanelsList'
+    { _malToken      :: !(Maybe Text)
+    , _malStartIndex :: !(Maybe (Textual Word32))
+    , _malMaxResults :: !(Maybe (Textual Word32))
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'MobileApppanelsList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'malToken'
+--
+-- * 'malStartIndex'
+--
+-- * 'malMaxResults'
+mobileApppanelsList
+    :: MobileApppanelsList
+mobileApppanelsList =
+    MobileApppanelsList'
+    { _malToken = Nothing
+    , _malStartIndex = Nothing
+    , _malMaxResults = Nothing
+    }
+
+malToken :: Lens' MobileApppanelsList (Maybe Text)
+malToken = lens _malToken (\ s a -> s{_malToken = a})
+
+malStartIndex :: Lens' MobileApppanelsList (Maybe Word32)
+malStartIndex
+  = lens _malStartIndex
+      (\ s a -> s{_malStartIndex = a})
+      . mapping _Coerce
+
+malMaxResults :: Lens' MobileApppanelsList (Maybe Word32)
+malMaxResults
+  = lens _malMaxResults
+      (\ s a -> s{_malMaxResults = a})
+      . mapping _Coerce
+
+instance GoogleRequest MobileApppanelsList where
+        type Rs MobileApppanelsList =
+             MobileAppPanelsListResponse
+        type Scopes MobileApppanelsList =
+             '["https://www.googleapis.com/auth/consumersurveys",
+               "https://www.googleapis.com/auth/consumersurveys.readonly",
+               "https://www.googleapis.com/auth/userinfo.email"]
+        requestClient MobileApppanelsList'{..}
+          = go _malToken _malStartIndex _malMaxResults
+              (Just AltJSON)
+              consumerSurveysService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy MobileApppanelsListResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/ConsumerSurveys/MobileApppanels/Update.hs b/gen/Network/Google/Resource/ConsumerSurveys/MobileApppanels/Update.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/ConsumerSurveys/MobileApppanels/Update.hs
@@ -0,0 +1,102 @@
+{-# 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.ConsumerSurveys.MobileApppanels.Update
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Updates a MobileAppPanel. Currently the only property that can be
+-- updated is the owners property.
+--
+-- /See:/ <https://developers.google.com/surveys/ Consumer Surveys API Reference> for @consumersurveys.mobileapppanels.update@.
+module Network.Google.Resource.ConsumerSurveys.MobileApppanels.Update
+    (
+    -- * REST Resource
+      MobileApppanelsUpdateResource
+
+    -- * Creating a Request
+    , mobileApppanelsUpdate
+    , MobileApppanelsUpdate
+
+    -- * Request Lenses
+    , mauPayload
+    , mauPanelId
+    ) where
+
+import           Network.Google.ConsumerSurveys.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @consumersurveys.mobileapppanels.update@ method which the
+-- 'MobileApppanelsUpdate' request conforms to.
+type MobileApppanelsUpdateResource =
+     "consumersurveys" :>
+       "v2" :>
+         "mobileAppPanels" :>
+           Capture "panelId" Text :>
+             QueryParam "alt" AltJSON :>
+               ReqBody '[JSON] MobileAppPanel :>
+                 Put '[JSON] MobileAppPanel
+
+-- | Updates a MobileAppPanel. Currently the only property that can be
+-- updated is the owners property.
+--
+-- /See:/ 'mobileApppanelsUpdate' smart constructor.
+data MobileApppanelsUpdate = MobileApppanelsUpdate'
+    { _mauPayload :: !MobileAppPanel
+    , _mauPanelId :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'MobileApppanelsUpdate' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'mauPayload'
+--
+-- * 'mauPanelId'
+mobileApppanelsUpdate
+    :: MobileAppPanel -- ^ 'mauPayload'
+    -> Text -- ^ 'mauPanelId'
+    -> MobileApppanelsUpdate
+mobileApppanelsUpdate pMauPayload_ pMauPanelId_ =
+    MobileApppanelsUpdate'
+    { _mauPayload = pMauPayload_
+    , _mauPanelId = pMauPanelId_
+    }
+
+-- | Multipart request metadata.
+mauPayload :: Lens' MobileApppanelsUpdate MobileAppPanel
+mauPayload
+  = lens _mauPayload (\ s a -> s{_mauPayload = a})
+
+-- | External URL ID for the panel.
+mauPanelId :: Lens' MobileApppanelsUpdate Text
+mauPanelId
+  = lens _mauPanelId (\ s a -> s{_mauPanelId = a})
+
+instance GoogleRequest MobileApppanelsUpdate where
+        type Rs MobileApppanelsUpdate = MobileAppPanel
+        type Scopes MobileApppanelsUpdate =
+             '["https://www.googleapis.com/auth/consumersurveys",
+               "https://www.googleapis.com/auth/userinfo.email"]
+        requestClient MobileApppanelsUpdate'{..}
+          = go _mauPanelId (Just AltJSON) _mauPayload
+              consumerSurveysService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy MobileApppanelsUpdateResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/ConsumerSurveys/Results/Get.hs b/gen/Network/Google/Resource/ConsumerSurveys/Results/Get.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/ConsumerSurveys/Results/Get.hs
@@ -0,0 +1,126 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.ConsumerSurveys.Results.Get
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Retrieves any survey results that have been produced so far. Results are
+-- formatted as an Excel file. You must add \"?alt=media\" to the URL as an
+-- argument to get results.
+--
+-- /See:/ <https://developers.google.com/surveys/ Consumer Surveys API Reference> for @consumersurveys.results.get@.
+module Network.Google.Resource.ConsumerSurveys.Results.Get
+    (
+    -- * REST Resource
+      ResultsGetResource
+
+    -- * Creating a Request
+    , resultsGet
+    , ResultsGet
+
+    -- * Request Lenses
+    , rgSurveyURLId
+    , rgPayload
+    ) where
+
+import           Network.Google.ConsumerSurveys.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @consumersurveys.results.get@ method which the
+-- 'ResultsGet' request conforms to.
+type ResultsGetResource =
+     "consumersurveys" :>
+       "v2" :>
+         "surveys" :>
+           Capture "surveyUrlId" Text :>
+             "results" :>
+               QueryParam "alt" AltJSON :>
+                 ReqBody '[JSON] ResultsGetRequest :>
+                   Get '[JSON] SurveyResults
+       :<|>
+       "consumersurveys" :>
+         "v2" :>
+           "surveys" :>
+             Capture "surveyUrlId" Text :>
+               "results" :>
+                 QueryParam "alt" AltMedia :>
+                   Get '[OctetStream] Stream
+
+-- | Retrieves any survey results that have been produced so far. Results are
+-- formatted as an Excel file. You must add \"?alt=media\" to the URL as an
+-- argument to get results.
+--
+-- /See:/ 'resultsGet' smart constructor.
+data ResultsGet = ResultsGet'
+    { _rgSurveyURLId :: !Text
+    , _rgPayload     :: !ResultsGetRequest
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ResultsGet' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'rgSurveyURLId'
+--
+-- * 'rgPayload'
+resultsGet
+    :: Text -- ^ 'rgSurveyURLId'
+    -> ResultsGetRequest -- ^ 'rgPayload'
+    -> ResultsGet
+resultsGet pRgSurveyURLId_ pRgPayload_ =
+    ResultsGet'
+    { _rgSurveyURLId = pRgSurveyURLId_
+    , _rgPayload = pRgPayload_
+    }
+
+-- | External URL ID for the survey.
+rgSurveyURLId :: Lens' ResultsGet Text
+rgSurveyURLId
+  = lens _rgSurveyURLId
+      (\ s a -> s{_rgSurveyURLId = a})
+
+-- | Multipart request metadata.
+rgPayload :: Lens' ResultsGet ResultsGetRequest
+rgPayload
+  = lens _rgPayload (\ s a -> s{_rgPayload = a})
+
+instance GoogleRequest ResultsGet where
+        type Rs ResultsGet = SurveyResults
+        type Scopes ResultsGet =
+             '["https://www.googleapis.com/auth/consumersurveys",
+               "https://www.googleapis.com/auth/consumersurveys.readonly",
+               "https://www.googleapis.com/auth/userinfo.email"]
+        requestClient ResultsGet'{..}
+          = go _rgSurveyURLId (Just AltJSON) _rgPayload
+              consumerSurveysService
+          where go :<|> _
+                  = buildClient (Proxy :: Proxy ResultsGetResource)
+                      mempty
+
+instance GoogleRequest (MediaDownload ResultsGet)
+         where
+        type Rs (MediaDownload ResultsGet) = Stream
+        type Scopes (MediaDownload ResultsGet) =
+             Scopes ResultsGet
+        requestClient (MediaDownload ResultsGet'{..})
+          = go _rgSurveyURLId (Just AltMedia)
+              consumerSurveysService
+          where _ :<|> go
+                  = buildClient (Proxy :: Proxy ResultsGetResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/ConsumerSurveys/Surveys/Delete.hs b/gen/Network/Google/Resource/ConsumerSurveys/Surveys/Delete.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/ConsumerSurveys/Surveys/Delete.hs
@@ -0,0 +1,88 @@
+{-# 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.ConsumerSurveys.Surveys.Delete
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Removes a survey from view in all user GET requests.
+--
+-- /See:/ <https://developers.google.com/surveys/ Consumer Surveys API Reference> for @consumersurveys.surveys.delete@.
+module Network.Google.Resource.ConsumerSurveys.Surveys.Delete
+    (
+    -- * REST Resource
+      SurveysDeleteResource
+
+    -- * Creating a Request
+    , surveysDelete
+    , SurveysDelete
+
+    -- * Request Lenses
+    , sdSurveyURLId
+    ) where
+
+import           Network.Google.ConsumerSurveys.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @consumersurveys.surveys.delete@ method which the
+-- 'SurveysDelete' request conforms to.
+type SurveysDeleteResource =
+     "consumersurveys" :>
+       "v2" :>
+         "surveys" :>
+           Capture "surveyUrlId" Text :>
+             QueryParam "alt" AltJSON :>
+               Delete '[JSON] SurveysDeleteResponse
+
+-- | Removes a survey from view in all user GET requests.
+--
+-- /See:/ 'surveysDelete' smart constructor.
+newtype SurveysDelete = SurveysDelete'
+    { _sdSurveyURLId :: Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'SurveysDelete' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'sdSurveyURLId'
+surveysDelete
+    :: Text -- ^ 'sdSurveyURLId'
+    -> SurveysDelete
+surveysDelete pSdSurveyURLId_ =
+    SurveysDelete'
+    { _sdSurveyURLId = pSdSurveyURLId_
+    }
+
+-- | External URL ID for the survey.
+sdSurveyURLId :: Lens' SurveysDelete Text
+sdSurveyURLId
+  = lens _sdSurveyURLId
+      (\ s a -> s{_sdSurveyURLId = a})
+
+instance GoogleRequest SurveysDelete where
+        type Rs SurveysDelete = SurveysDeleteResponse
+        type Scopes SurveysDelete =
+             '["https://www.googleapis.com/auth/consumersurveys",
+               "https://www.googleapis.com/auth/userinfo.email"]
+        requestClient SurveysDelete'{..}
+          = go _sdSurveyURLId (Just AltJSON)
+              consumerSurveysService
+          where go
+                  = buildClient (Proxy :: Proxy SurveysDeleteResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/ConsumerSurveys/Surveys/Get.hs b/gen/Network/Google/Resource/ConsumerSurveys/Surveys/Get.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/ConsumerSurveys/Surveys/Get.hs
@@ -0,0 +1,88 @@
+{-# 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.ConsumerSurveys.Surveys.Get
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Retrieves information about the specified survey.
+--
+-- /See:/ <https://developers.google.com/surveys/ Consumer Surveys API Reference> for @consumersurveys.surveys.get@.
+module Network.Google.Resource.ConsumerSurveys.Surveys.Get
+    (
+    -- * REST Resource
+      SurveysGetResource
+
+    -- * Creating a Request
+    , surveysGet
+    , SurveysGet
+
+    -- * Request Lenses
+    , sgSurveyURLId
+    ) where
+
+import           Network.Google.ConsumerSurveys.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @consumersurveys.surveys.get@ method which the
+-- 'SurveysGet' request conforms to.
+type SurveysGetResource =
+     "consumersurveys" :>
+       "v2" :>
+         "surveys" :>
+           Capture "surveyUrlId" Text :>
+             QueryParam "alt" AltJSON :> Get '[JSON] Survey
+
+-- | Retrieves information about the specified survey.
+--
+-- /See:/ 'surveysGet' smart constructor.
+newtype SurveysGet = SurveysGet'
+    { _sgSurveyURLId :: Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'SurveysGet' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'sgSurveyURLId'
+surveysGet
+    :: Text -- ^ 'sgSurveyURLId'
+    -> SurveysGet
+surveysGet pSgSurveyURLId_ =
+    SurveysGet'
+    { _sgSurveyURLId = pSgSurveyURLId_
+    }
+
+-- | External URL ID for the survey.
+sgSurveyURLId :: Lens' SurveysGet Text
+sgSurveyURLId
+  = lens _sgSurveyURLId
+      (\ s a -> s{_sgSurveyURLId = a})
+
+instance GoogleRequest SurveysGet where
+        type Rs SurveysGet = Survey
+        type Scopes SurveysGet =
+             '["https://www.googleapis.com/auth/consumersurveys",
+               "https://www.googleapis.com/auth/consumersurveys.readonly",
+               "https://www.googleapis.com/auth/userinfo.email"]
+        requestClient SurveysGet'{..}
+          = go _sgSurveyURLId (Just AltJSON)
+              consumerSurveysService
+          where go
+                  = buildClient (Proxy :: Proxy SurveysGetResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/ConsumerSurveys/Surveys/Insert.hs b/gen/Network/Google/Resource/ConsumerSurveys/Surveys/Insert.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/ConsumerSurveys/Surveys/Insert.hs
@@ -0,0 +1,85 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.ConsumerSurveys.Surveys.Insert
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates a survey.
+--
+-- /See:/ <https://developers.google.com/surveys/ Consumer Surveys API Reference> for @consumersurveys.surveys.insert@.
+module Network.Google.Resource.ConsumerSurveys.Surveys.Insert
+    (
+    -- * REST Resource
+      SurveysInsertResource
+
+    -- * Creating a Request
+    , surveysInsert
+    , SurveysInsert
+
+    -- * Request Lenses
+    , siPayload
+    ) where
+
+import           Network.Google.ConsumerSurveys.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @consumersurveys.surveys.insert@ method which the
+-- 'SurveysInsert' request conforms to.
+type SurveysInsertResource =
+     "consumersurveys" :>
+       "v2" :>
+         "surveys" :>
+           QueryParam "alt" AltJSON :>
+             ReqBody '[JSON] Survey :> Post '[JSON] Survey
+
+-- | Creates a survey.
+--
+-- /See:/ 'surveysInsert' smart constructor.
+newtype SurveysInsert = SurveysInsert'
+    { _siPayload :: Survey
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'SurveysInsert' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'siPayload'
+surveysInsert
+    :: Survey -- ^ 'siPayload'
+    -> SurveysInsert
+surveysInsert pSiPayload_ =
+    SurveysInsert'
+    { _siPayload = pSiPayload_
+    }
+
+-- | Multipart request metadata.
+siPayload :: Lens' SurveysInsert Survey
+siPayload
+  = lens _siPayload (\ s a -> s{_siPayload = a})
+
+instance GoogleRequest SurveysInsert where
+        type Rs SurveysInsert = Survey
+        type Scopes SurveysInsert =
+             '["https://www.googleapis.com/auth/consumersurveys",
+               "https://www.googleapis.com/auth/userinfo.email"]
+        requestClient SurveysInsert'{..}
+          = go (Just AltJSON) _siPayload consumerSurveysService
+          where go
+                  = buildClient (Proxy :: Proxy SurveysInsertResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/ConsumerSurveys/Surveys/List.hs b/gen/Network/Google/Resource/ConsumerSurveys/Surveys/List.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/ConsumerSurveys/Surveys/List.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.ConsumerSurveys.Surveys.List
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Lists the surveys owned by the authenticated user.
+--
+-- /See:/ <https://developers.google.com/surveys/ Consumer Surveys API Reference> for @consumersurveys.surveys.list@.
+module Network.Google.Resource.ConsumerSurveys.Surveys.List
+    (
+    -- * REST Resource
+      SurveysListResource
+
+    -- * Creating a Request
+    , surveysList
+    , SurveysList
+
+    -- * Request Lenses
+    , slToken
+    , slStartIndex
+    , slMaxResults
+    ) where
+
+import           Network.Google.ConsumerSurveys.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @consumersurveys.surveys.list@ method which the
+-- 'SurveysList' request conforms to.
+type SurveysListResource =
+     "consumersurveys" :>
+       "v2" :>
+         "surveys" :>
+           QueryParam "token" Text :>
+             QueryParam "startIndex" (Textual Word32) :>
+               QueryParam "maxResults" (Textual Word32) :>
+                 QueryParam "alt" AltJSON :>
+                   Get '[JSON] SurveysListResponse
+
+-- | Lists the surveys owned by the authenticated user.
+--
+-- /See:/ 'surveysList' smart constructor.
+data SurveysList = SurveysList'
+    { _slToken      :: !(Maybe Text)
+    , _slStartIndex :: !(Maybe (Textual Word32))
+    , _slMaxResults :: !(Maybe (Textual Word32))
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'SurveysList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'slToken'
+--
+-- * 'slStartIndex'
+--
+-- * 'slMaxResults'
+surveysList
+    :: SurveysList
+surveysList =
+    SurveysList'
+    { _slToken = Nothing
+    , _slStartIndex = Nothing
+    , _slMaxResults = Nothing
+    }
+
+slToken :: Lens' SurveysList (Maybe Text)
+slToken = lens _slToken (\ s a -> s{_slToken = a})
+
+slStartIndex :: Lens' SurveysList (Maybe Word32)
+slStartIndex
+  = lens _slStartIndex (\ s a -> s{_slStartIndex = a})
+      . mapping _Coerce
+
+slMaxResults :: Lens' SurveysList (Maybe Word32)
+slMaxResults
+  = lens _slMaxResults (\ s a -> s{_slMaxResults = a})
+      . mapping _Coerce
+
+instance GoogleRequest SurveysList where
+        type Rs SurveysList = SurveysListResponse
+        type Scopes SurveysList =
+             '["https://www.googleapis.com/auth/consumersurveys",
+               "https://www.googleapis.com/auth/consumersurveys.readonly",
+               "https://www.googleapis.com/auth/userinfo.email"]
+        requestClient SurveysList'{..}
+          = go _slToken _slStartIndex _slMaxResults
+              (Just AltJSON)
+              consumerSurveysService
+          where go
+                  = buildClient (Proxy :: Proxy SurveysListResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/ConsumerSurveys/Surveys/Start.hs b/gen/Network/Google/Resource/ConsumerSurveys/Surveys/Start.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/ConsumerSurveys/Surveys/Start.hs
@@ -0,0 +1,99 @@
+{-# 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.ConsumerSurveys.Surveys.Start
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Begins running a survey.
+--
+-- /See:/ <https://developers.google.com/surveys/ Consumer Surveys API Reference> for @consumersurveys.surveys.start@.
+module Network.Google.Resource.ConsumerSurveys.Surveys.Start
+    (
+    -- * REST Resource
+      SurveysStartResource
+
+    -- * Creating a Request
+    , surveysStart
+    , SurveysStart
+
+    -- * Request Lenses
+    , ssResourceId
+    , ssPayload
+    ) where
+
+import           Network.Google.ConsumerSurveys.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @consumersurveys.surveys.start@ method which the
+-- 'SurveysStart' request conforms to.
+type SurveysStartResource =
+     "consumersurveys" :>
+       "v2" :>
+         "surveys" :>
+           Capture "resourceId" Text :>
+             "start" :>
+               QueryParam "alt" AltJSON :>
+                 ReqBody '[JSON] SurveysStartRequest :>
+                   Post '[JSON] SurveysStartResponse
+
+-- | Begins running a survey.
+--
+-- /See:/ 'surveysStart' smart constructor.
+data SurveysStart = SurveysStart'
+    { _ssResourceId :: !Text
+    , _ssPayload    :: !SurveysStartRequest
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'SurveysStart' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ssResourceId'
+--
+-- * 'ssPayload'
+surveysStart
+    :: Text -- ^ 'ssResourceId'
+    -> SurveysStartRequest -- ^ 'ssPayload'
+    -> SurveysStart
+surveysStart pSsResourceId_ pSsPayload_ =
+    SurveysStart'
+    { _ssResourceId = pSsResourceId_
+    , _ssPayload = pSsPayload_
+    }
+
+ssResourceId :: Lens' SurveysStart Text
+ssResourceId
+  = lens _ssResourceId (\ s a -> s{_ssResourceId = a})
+
+-- | Multipart request metadata.
+ssPayload :: Lens' SurveysStart SurveysStartRequest
+ssPayload
+  = lens _ssPayload (\ s a -> s{_ssPayload = a})
+
+instance GoogleRequest SurveysStart where
+        type Rs SurveysStart = SurveysStartResponse
+        type Scopes SurveysStart =
+             '["https://www.googleapis.com/auth/consumersurveys",
+               "https://www.googleapis.com/auth/userinfo.email"]
+        requestClient SurveysStart'{..}
+          = go _ssResourceId (Just AltJSON) _ssPayload
+              consumerSurveysService
+          where go
+                  = buildClient (Proxy :: Proxy SurveysStartResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/ConsumerSurveys/Surveys/Stop.hs b/gen/Network/Google/Resource/ConsumerSurveys/Surveys/Stop.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/ConsumerSurveys/Surveys/Stop.hs
@@ -0,0 +1,87 @@
+{-# 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.ConsumerSurveys.Surveys.Stop
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Stops a running survey.
+--
+-- /See:/ <https://developers.google.com/surveys/ Consumer Surveys API Reference> for @consumersurveys.surveys.stop@.
+module Network.Google.Resource.ConsumerSurveys.Surveys.Stop
+    (
+    -- * REST Resource
+      SurveysStopResource
+
+    -- * Creating a Request
+    , surveysStop
+    , SurveysStop
+
+    -- * Request Lenses
+    , sResourceId
+    ) where
+
+import           Network.Google.ConsumerSurveys.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @consumersurveys.surveys.stop@ method which the
+-- 'SurveysStop' request conforms to.
+type SurveysStopResource =
+     "consumersurveys" :>
+       "v2" :>
+         "surveys" :>
+           Capture "resourceId" Text :>
+             "stop" :>
+               QueryParam "alt" AltJSON :>
+                 Post '[JSON] SurveysStopResponse
+
+-- | Stops a running survey.
+--
+-- /See:/ 'surveysStop' smart constructor.
+newtype SurveysStop = SurveysStop'
+    { _sResourceId :: Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'SurveysStop' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'sResourceId'
+surveysStop
+    :: Text -- ^ 'sResourceId'
+    -> SurveysStop
+surveysStop pSResourceId_ =
+    SurveysStop'
+    { _sResourceId = pSResourceId_
+    }
+
+sResourceId :: Lens' SurveysStop Text
+sResourceId
+  = lens _sResourceId (\ s a -> s{_sResourceId = a})
+
+instance GoogleRequest SurveysStop where
+        type Rs SurveysStop = SurveysStopResponse
+        type Scopes SurveysStop =
+             '["https://www.googleapis.com/auth/consumersurveys",
+               "https://www.googleapis.com/auth/userinfo.email"]
+        requestClient SurveysStop'{..}
+          = go _sResourceId (Just AltJSON)
+              consumerSurveysService
+          where go
+                  = buildClient (Proxy :: Proxy SurveysStopResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/ConsumerSurveys/Surveys/Update.hs b/gen/Network/Google/Resource/ConsumerSurveys/Surveys/Update.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/ConsumerSurveys/Surveys/Update.hs
@@ -0,0 +1,101 @@
+{-# 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.ConsumerSurveys.Surveys.Update
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Updates a survey. Currently the only property that can be updated is the
+-- owners property.
+--
+-- /See:/ <https://developers.google.com/surveys/ Consumer Surveys API Reference> for @consumersurveys.surveys.update@.
+module Network.Google.Resource.ConsumerSurveys.Surveys.Update
+    (
+    -- * REST Resource
+      SurveysUpdateResource
+
+    -- * Creating a Request
+    , surveysUpdate
+    , SurveysUpdate
+
+    -- * Request Lenses
+    , suSurveyURLId
+    , suPayload
+    ) where
+
+import           Network.Google.ConsumerSurveys.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @consumersurveys.surveys.update@ method which the
+-- 'SurveysUpdate' request conforms to.
+type SurveysUpdateResource =
+     "consumersurveys" :>
+       "v2" :>
+         "surveys" :>
+           Capture "surveyUrlId" Text :>
+             QueryParam "alt" AltJSON :>
+               ReqBody '[JSON] Survey :> Put '[JSON] Survey
+
+-- | Updates a survey. Currently the only property that can be updated is the
+-- owners property.
+--
+-- /See:/ 'surveysUpdate' smart constructor.
+data SurveysUpdate = SurveysUpdate'
+    { _suSurveyURLId :: !Text
+    , _suPayload     :: !Survey
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'SurveysUpdate' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'suSurveyURLId'
+--
+-- * 'suPayload'
+surveysUpdate
+    :: Text -- ^ 'suSurveyURLId'
+    -> Survey -- ^ 'suPayload'
+    -> SurveysUpdate
+surveysUpdate pSuSurveyURLId_ pSuPayload_ =
+    SurveysUpdate'
+    { _suSurveyURLId = pSuSurveyURLId_
+    , _suPayload = pSuPayload_
+    }
+
+-- | External URL ID for the survey.
+suSurveyURLId :: Lens' SurveysUpdate Text
+suSurveyURLId
+  = lens _suSurveyURLId
+      (\ s a -> s{_suSurveyURLId = a})
+
+-- | Multipart request metadata.
+suPayload :: Lens' SurveysUpdate Survey
+suPayload
+  = lens _suPayload (\ s a -> s{_suPayload = a})
+
+instance GoogleRequest SurveysUpdate where
+        type Rs SurveysUpdate = Survey
+        type Scopes SurveysUpdate =
+             '["https://www.googleapis.com/auth/consumersurveys",
+               "https://www.googleapis.com/auth/userinfo.email"]
+        requestClient SurveysUpdate'{..}
+          = go _suSurveyURLId (Just AltJSON) _suPayload
+              consumerSurveysService
+          where go
+                  = buildClient (Proxy :: Proxy SurveysUpdateResource)
+                      mempty
diff --git a/gogol-consumersurveys.cabal b/gogol-consumersurveys.cabal
new file mode 100644
--- /dev/null
+++ b/gogol-consumersurveys.cabal
@@ -0,0 +1,58 @@
+name:                  gogol-consumersurveys
+version:               0.4.0
+synopsis:              Google Consumer Surveys SDK.
+homepage:              https://github.com/brendanhay/gogol
+bug-reports:           https://github.com/brendanhay/gogol/issues
+license:               OtherLicense
+license-file:          LICENSE
+author:                Brendan Hay
+maintainer:            Brendan Hay <brendan.g.hay@gmail.com>
+copyright:             Copyright (c) 2015-2016 Brendan Hay
+category:              Network, Google, Cloud
+build-type:            Simple
+cabal-version:         >= 1.10
+extra-source-files:    README.md src/.gitkeep
+
+description:
+    Creates and conducts surveys, lists the surveys that an authenticated
+    user owns, and retrieves survey results and information about specified
+    surveys.
+    .
+    /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 @v2@
+    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.ConsumerSurveys
+        , Network.Google.ConsumerSurveys.Types
+        , Network.Google.Resource.ConsumerSurveys.MobileApppanels.Get
+        , Network.Google.Resource.ConsumerSurveys.MobileApppanels.List
+        , Network.Google.Resource.ConsumerSurveys.MobileApppanels.Update
+        , Network.Google.Resource.ConsumerSurveys.Results.Get
+        , Network.Google.Resource.ConsumerSurveys.Surveys.Delete
+        , Network.Google.Resource.ConsumerSurveys.Surveys.Get
+        , Network.Google.Resource.ConsumerSurveys.Surveys.Insert
+        , Network.Google.Resource.ConsumerSurveys.Surveys.List
+        , Network.Google.Resource.ConsumerSurveys.Surveys.Start
+        , Network.Google.Resource.ConsumerSurveys.Surveys.Stop
+        , Network.Google.Resource.ConsumerSurveys.Surveys.Update
+
+    other-modules:
+          Network.Google.ConsumerSurveys.Types.Product
+        , Network.Google.ConsumerSurveys.Types.Sum
+
+    build-depends:
+          gogol-core == 0.4.0.*
+        , base       >= 4.7 && < 5
diff --git a/src/.gitkeep b/src/.gitkeep
new file mode 100644
--- /dev/null
+++ b/src/.gitkeep
