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-customsearch
+
+* [Version](#version)
+* [Description](#description)
+* [Contribute](#contribute)
+* [Licence](#licence)
+
+
+## Version
+
+`0.0.1`
+
+
+## Description
+
+A client library for the Google CustomSearch.
+
+
+## Contribute
+
+For any problems, comments, or feedback please create an issue [here on GitHub](https://github.com/brendanhay/amazonka/issues).
+
+> _Note:_ this library is an auto-generated Haskell package. Please see `amazonka-gen` for more information.
+
+
+## Licence
+
+`gogol-customsearch` 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/CustomSearch.hs b/gen/Network/Google/CustomSearch.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/CustomSearch.hs
@@ -0,0 +1,234 @@
+{-# LANGUAGE DataKinds         #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# LANGUAGE TypeOperators     #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+
+-- |
+-- Module      : Network.Google.CustomSearch
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Lets you search over a website or collection of websites
+--
+-- /See:/ <https://developers.google.com/custom-search/v1/using_rest CustomSearch API Reference>
+module Network.Google.CustomSearch
+    (
+    -- * Service Configuration
+      customSearchService
+
+    -- * API Declaration
+    , CustomSearchAPI
+
+    -- * Resources
+
+    -- ** search.cse.list
+    , module Network.Google.Resource.Search.CSE.List
+
+    -- * Types
+
+    -- ** CSEListImgType
+    , CSEListImgType (..)
+
+    -- ** PromotionImage
+    , PromotionImage
+    , promotionImage
+    , piHeight
+    , piWidth
+    , piSource
+
+    -- ** Context
+    , Context
+    , context
+    , cFacets
+    , cTitle
+
+    -- ** CSEListSiteSearchFilter
+    , CSEListSiteSearchFilter (..)
+
+    -- ** SearchQueries
+    , SearchQueries
+    , searchQueries
+    , sqAddtional
+
+    -- ** ResultPagemapAdditionalItem
+    , ResultPagemapAdditionalItem
+    , resultPagemapAdditionalItem
+    , rpaiAddtional
+
+    -- ** SearchURL
+    , SearchURL
+    , searchURL
+    , suType
+    , suTemplate
+
+    -- ** SearchSpelling
+    , SearchSpelling
+    , searchSpelling
+    , ssCorrectedQuery
+    , ssHTMLCorrectedQuery
+
+    -- ** CSEListImgDominantColor
+    , CSEListImgDominantColor (..)
+
+    -- ** ResultImage
+    , ResultImage
+    , resultImage
+    , riThumbnailLink
+    , riHeight
+    , riByteSize
+    , riContextLink
+    , riThumbnailHeight
+    , riWidth
+    , riThumbnailWidth
+
+    -- ** CSEListSafe
+    , CSEListSafe (..)
+
+    -- ** ResultPagemap
+    , ResultPagemap
+    , resultPagemap
+    , rpAddtional
+
+    -- ** CSEListImgColorType
+    , CSEListImgColorType (..)
+
+    -- ** Result
+    , Result
+    , result
+    , rMime
+    , rImage
+    , rPagemap
+    , rDisplayLink
+    , rFileFormat
+    , rSnippet
+    , rKind
+    , rLink
+    , rHTMLSnippet
+    , rHTMLFormattedURL
+    , rCacheId
+    , rFormattedURL
+    , rHTMLTitle
+    , rLabels
+    , rTitle
+
+    -- ** ResultLabelsItem
+    , ResultLabelsItem
+    , resultLabelsItem
+    , rliName
+    , rliDisplayName
+    , rliLabelWithOp
+
+    -- ** SearchSearchInformation
+    , SearchSearchInformation
+    , searchSearchInformation
+    , ssiSearchTime
+    , ssiFormattedSearchTime
+    , ssiTotalResults
+    , ssiFormattedTotalResults
+
+    -- ** CSEListFilter
+    , CSEListFilter (..)
+
+    -- ** Query
+    , Query
+    , query
+    , qImgDominantColor
+    , qOutputEncoding
+    , qSiteSearchFilter
+    , qInputEncoding
+    , qOrTerms
+    , qSearchTerms
+    , qStartPage
+    , qRights
+    , qCount
+    , qExcludeTerms
+    , qFileType
+    , qSearchType
+    , qGoogleHost
+    , qDisableCnTwTranslation
+    , qRelatedSite
+    , qHl
+    , qCref
+    , qSort
+    , qLanguage
+    , qSiteSearch
+    , qFilter
+    , qTotalResults
+    , qDateRestrict
+    , qTitle
+    , qLinkSite
+    , qLowRange
+    , qImgType
+    , qGl
+    , qCx
+    , qImgColorType
+    , qImgSize
+    , qExactTerms
+    , qStartIndex
+    , qCr
+    , qSafe
+    , qHq
+    , qHighRange
+
+    -- ** PromotionBodyLinesItem
+    , PromotionBodyLinesItem
+    , promotionBodyLinesItem
+    , pbliLink
+    , pbliURL
+    , pbliHTMLTitle
+    , pbliTitle
+
+    -- ** Promotion
+    , Promotion
+    , promotion
+    , pImage
+    , pDisplayLink
+    , pBodyLines
+    , pLink
+    , pHTMLTitle
+    , pTitle
+
+    -- ** Search
+    , Search
+    , search
+    , sQueries
+    , sContext
+    , sKind
+    , sURL
+    , sItems
+    , sSearchInformation
+    , sPromotions
+    , sSpelling
+
+    -- ** CSEListLr
+    , CSEListLr (..)
+
+    -- ** ContextFacetsItemItem
+    , ContextFacetsItemItem
+    , contextFacetsItemItem
+    , cfiiAnchor
+    , cfiiLabelWithOp
+    , cfiiLabel
+
+    -- ** CSEListSearchType
+    , CSEListSearchType (..)
+
+    -- ** CSEListImgSize
+    , CSEListImgSize (..)
+    ) where
+
+import           Network.Google.CustomSearch.Types
+import           Network.Google.Prelude
+import           Network.Google.Resource.Search.CSE.List
+
+{- $resources
+TODO
+-}
+
+-- | Represents the entirety of the methods and resources available for the CustomSearch API service.
+type CustomSearchAPI = CSEListResource
diff --git a/gen/Network/Google/CustomSearch/Types.hs b/gen/Network/Google/CustomSearch/Types.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/CustomSearch/Types.hs
@@ -0,0 +1,220 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- |
+-- Module      : Network.Google.CustomSearch.Types
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+module Network.Google.CustomSearch.Types
+    (
+    -- * Service Configuration
+      customSearchService
+
+    -- * CSEListImgType
+    , CSEListImgType (..)
+
+    -- * PromotionImage
+    , PromotionImage
+    , promotionImage
+    , piHeight
+    , piWidth
+    , piSource
+
+    -- * Context
+    , Context
+    , context
+    , cFacets
+    , cTitle
+
+    -- * CSEListSiteSearchFilter
+    , CSEListSiteSearchFilter (..)
+
+    -- * SearchQueries
+    , SearchQueries
+    , searchQueries
+    , sqAddtional
+
+    -- * ResultPagemapAdditionalItem
+    , ResultPagemapAdditionalItem
+    , resultPagemapAdditionalItem
+    , rpaiAddtional
+
+    -- * SearchURL
+    , SearchURL
+    , searchURL
+    , suType
+    , suTemplate
+
+    -- * SearchSpelling
+    , SearchSpelling
+    , searchSpelling
+    , ssCorrectedQuery
+    , ssHTMLCorrectedQuery
+
+    -- * CSEListImgDominantColor
+    , CSEListImgDominantColor (..)
+
+    -- * ResultImage
+    , ResultImage
+    , resultImage
+    , riThumbnailLink
+    , riHeight
+    , riByteSize
+    , riContextLink
+    , riThumbnailHeight
+    , riWidth
+    , riThumbnailWidth
+
+    -- * CSEListSafe
+    , CSEListSafe (..)
+
+    -- * ResultPagemap
+    , ResultPagemap
+    , resultPagemap
+    , rpAddtional
+
+    -- * CSEListImgColorType
+    , CSEListImgColorType (..)
+
+    -- * Result
+    , Result
+    , result
+    , rMime
+    , rImage
+    , rPagemap
+    , rDisplayLink
+    , rFileFormat
+    , rSnippet
+    , rKind
+    , rLink
+    , rHTMLSnippet
+    , rHTMLFormattedURL
+    , rCacheId
+    , rFormattedURL
+    , rHTMLTitle
+    , rLabels
+    , rTitle
+
+    -- * ResultLabelsItem
+    , ResultLabelsItem
+    , resultLabelsItem
+    , rliName
+    , rliDisplayName
+    , rliLabelWithOp
+
+    -- * SearchSearchInformation
+    , SearchSearchInformation
+    , searchSearchInformation
+    , ssiSearchTime
+    , ssiFormattedSearchTime
+    , ssiTotalResults
+    , ssiFormattedTotalResults
+
+    -- * CSEListFilter
+    , CSEListFilter (..)
+
+    -- * Query
+    , Query
+    , query
+    , qImgDominantColor
+    , qOutputEncoding
+    , qSiteSearchFilter
+    , qInputEncoding
+    , qOrTerms
+    , qSearchTerms
+    , qStartPage
+    , qRights
+    , qCount
+    , qExcludeTerms
+    , qFileType
+    , qSearchType
+    , qGoogleHost
+    , qDisableCnTwTranslation
+    , qRelatedSite
+    , qHl
+    , qCref
+    , qSort
+    , qLanguage
+    , qSiteSearch
+    , qFilter
+    , qTotalResults
+    , qDateRestrict
+    , qTitle
+    , qLinkSite
+    , qLowRange
+    , qImgType
+    , qGl
+    , qCx
+    , qImgColorType
+    , qImgSize
+    , qExactTerms
+    , qStartIndex
+    , qCr
+    , qSafe
+    , qHq
+    , qHighRange
+
+    -- * PromotionBodyLinesItem
+    , PromotionBodyLinesItem
+    , promotionBodyLinesItem
+    , pbliLink
+    , pbliURL
+    , pbliHTMLTitle
+    , pbliTitle
+
+    -- * Promotion
+    , Promotion
+    , promotion
+    , pImage
+    , pDisplayLink
+    , pBodyLines
+    , pLink
+    , pHTMLTitle
+    , pTitle
+
+    -- * Search
+    , Search
+    , search
+    , sQueries
+    , sContext
+    , sKind
+    , sURL
+    , sItems
+    , sSearchInformation
+    , sPromotions
+    , sSpelling
+
+    -- * CSEListLr
+    , CSEListLr (..)
+
+    -- * ContextFacetsItemItem
+    , ContextFacetsItemItem
+    , contextFacetsItemItem
+    , cfiiAnchor
+    , cfiiLabelWithOp
+    , cfiiLabel
+
+    -- * CSEListSearchType
+    , CSEListSearchType (..)
+
+    -- * CSEListImgSize
+    , CSEListImgSize (..)
+    ) where
+
+import           Network.Google.CustomSearch.Types.Product
+import           Network.Google.CustomSearch.Types.Sum
+import           Network.Google.Prelude
+
+-- | Default request referring to version 'v1' of the CustomSearch API. This contains the host and root path used as a starting point for constructing service requests.
+customSearchService :: Service
+customSearchService
+  = defaultService (ServiceId "customsearch:v1")
+      "www.googleapis.com"
diff --git a/gen/Network/Google/CustomSearch/Types/Product.hs b/gen/Network/Google/CustomSearch/Types/Product.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/CustomSearch/Types/Product.hs
@@ -0,0 +1,1402 @@
+{-# 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.CustomSearch.Types.Product
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+module Network.Google.CustomSearch.Types.Product where
+
+import           Network.Google.CustomSearch.Types.Sum
+import           Network.Google.Prelude
+
+--
+-- /See:/ 'promotionImage' smart constructor.
+data PromotionImage = PromotionImage
+    { _piHeight :: !(Maybe (Textual Int32))
+    , _piWidth  :: !(Maybe (Textual Int32))
+    , _piSource :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'PromotionImage' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'piHeight'
+--
+-- * 'piWidth'
+--
+-- * 'piSource'
+promotionImage
+    :: PromotionImage
+promotionImage =
+    PromotionImage
+    { _piHeight = Nothing
+    , _piWidth = Nothing
+    , _piSource = Nothing
+    }
+
+piHeight :: Lens' PromotionImage (Maybe Int32)
+piHeight
+  = lens _piHeight (\ s a -> s{_piHeight = a}) .
+      mapping _Coerce
+
+piWidth :: Lens' PromotionImage (Maybe Int32)
+piWidth
+  = lens _piWidth (\ s a -> s{_piWidth = a}) .
+      mapping _Coerce
+
+piSource :: Lens' PromotionImage (Maybe Text)
+piSource = lens _piSource (\ s a -> s{_piSource = a})
+
+instance FromJSON PromotionImage where
+        parseJSON
+          = withObject "PromotionImage"
+              (\ o ->
+                 PromotionImage <$>
+                   (o .:? "height") <*> (o .:? "width") <*>
+                     (o .:? "source"))
+
+instance ToJSON PromotionImage where
+        toJSON PromotionImage{..}
+          = object
+              (catMaybes
+                 [("height" .=) <$> _piHeight,
+                  ("width" .=) <$> _piWidth,
+                  ("source" .=) <$> _piSource])
+
+--
+-- /See:/ 'context' smart constructor.
+data Context = Context
+    { _cFacets :: !(Maybe [[ContextFacetsItemItem]])
+    , _cTitle  :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Context' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cFacets'
+--
+-- * 'cTitle'
+context
+    :: Context
+context =
+    Context
+    { _cFacets = Nothing
+    , _cTitle = Nothing
+    }
+
+cFacets :: Lens' Context [[ContextFacetsItemItem]]
+cFacets
+  = lens _cFacets (\ s a -> s{_cFacets = a}) . _Default
+      . _Coerce
+
+cTitle :: Lens' Context (Maybe Text)
+cTitle = lens _cTitle (\ s a -> s{_cTitle = a})
+
+instance FromJSON Context where
+        parseJSON
+          = withObject "Context"
+              (\ o ->
+                 Context <$>
+                   (o .:? "facets" .!= mempty) <*> (o .:? "title"))
+
+instance ToJSON Context where
+        toJSON Context{..}
+          = object
+              (catMaybes
+                 [("facets" .=) <$> _cFacets,
+                  ("title" .=) <$> _cTitle])
+
+--
+-- /See:/ 'searchQueries' smart constructor.
+newtype SearchQueries = SearchQueries
+    { _sqAddtional :: HashMap Text [Query]
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'SearchQueries' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'sqAddtional'
+searchQueries
+    :: HashMap Text [Query] -- ^ 'sqAddtional'
+    -> SearchQueries
+searchQueries pSqAddtional_ =
+    SearchQueries
+    { _sqAddtional = _Coerce # pSqAddtional_
+    }
+
+sqAddtional :: Lens' SearchQueries (HashMap Text [Query])
+sqAddtional
+  = lens _sqAddtional (\ s a -> s{_sqAddtional = a}) .
+      _Coerce
+
+instance FromJSON SearchQueries where
+        parseJSON
+          = withObject "SearchQueries"
+              (\ o -> SearchQueries <$> (parseJSONObject o))
+
+instance ToJSON SearchQueries where
+        toJSON = toJSON . _sqAddtional
+
+--
+-- /See:/ 'resultPagemapAdditionalItem' smart constructor.
+newtype ResultPagemapAdditionalItem = ResultPagemapAdditionalItem
+    { _rpaiAddtional :: HashMap Text JSONValue
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ResultPagemapAdditionalItem' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'rpaiAddtional'
+resultPagemapAdditionalItem
+    :: HashMap Text JSONValue -- ^ 'rpaiAddtional'
+    -> ResultPagemapAdditionalItem
+resultPagemapAdditionalItem pRpaiAddtional_ =
+    ResultPagemapAdditionalItem
+    { _rpaiAddtional = _Coerce # pRpaiAddtional_
+    }
+
+rpaiAddtional :: Lens' ResultPagemapAdditionalItem (HashMap Text JSONValue)
+rpaiAddtional
+  = lens _rpaiAddtional
+      (\ s a -> s{_rpaiAddtional = a})
+      . _Coerce
+
+instance FromJSON ResultPagemapAdditionalItem where
+        parseJSON
+          = withObject "ResultPagemapAdditionalItem"
+              (\ o ->
+                 ResultPagemapAdditionalItem <$> (parseJSONObject o))
+
+instance ToJSON ResultPagemapAdditionalItem where
+        toJSON = toJSON . _rpaiAddtional
+
+--
+-- /See:/ 'searchURL' smart constructor.
+data SearchURL = SearchURL
+    { _suType     :: !Text
+    , _suTemplate :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'SearchURL' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'suType'
+--
+-- * 'suTemplate'
+searchURL
+    :: SearchURL
+searchURL =
+    SearchURL
+    { _suType = "application/json"
+    , _suTemplate = "https://www.googleapis.com/customsearch/v1?q={searchTerms}&num={count?}&start={startIndex?}&lr={language?}&safe={safe?}&cx={cx?}&cref={cref?}&sort={sort?}&filter={filter?}&gl={gl?}&cr={cr?}&googlehost={googleHost?}&c2coff={disableCnTwTranslation?}&hq={hq?}&hl={hl?}&siteSearch={siteSearch?}&siteSearchFilter={siteSearchFilter?}&exactTerms={exactTerms?}&excludeTerms={excludeTerms?}&linkSite={linkSite?}&orTerms={orTerms?}&relatedSite={relatedSite?}&dateRestrict={dateRestrict?}&lowRange={lowRange?}&highRange={highRange?}&searchType={searchType}&fileType={fileType?}&rights={rights?}&imgSize={imgSize?}&imgType={imgType?}&imgColorType={imgColorType?}&imgDominantColor={imgDominantColor?}&alt=json"
+    }
+
+suType :: Lens' SearchURL Text
+suType = lens _suType (\ s a -> s{_suType = a})
+
+suTemplate :: Lens' SearchURL Text
+suTemplate
+  = lens _suTemplate (\ s a -> s{_suTemplate = a})
+
+instance FromJSON SearchURL where
+        parseJSON
+          = withObject "SearchURL"
+              (\ o ->
+                 SearchURL <$>
+                   (o .:? "type" .!= "application/json") <*>
+                     (o .:? "template" .!=
+                        "https://www.googleapis.com/customsearch/v1?q={searchTerms}&num={count?}&start={startIndex?}&lr={language?}&safe={safe?}&cx={cx?}&cref={cref?}&sort={sort?}&filter={filter?}&gl={gl?}&cr={cr?}&googlehost={googleHost?}&c2coff={disableCnTwTranslation?}&hq={hq?}&hl={hl?}&siteSearch={siteSearch?}&siteSearchFilter={siteSearchFilter?}&exactTerms={exactTerms?}&excludeTerms={excludeTerms?}&linkSite={linkSite?}&orTerms={orTerms?}&relatedSite={relatedSite?}&dateRestrict={dateRestrict?}&lowRange={lowRange?}&highRange={highRange?}&searchType={searchType}&fileType={fileType?}&rights={rights?}&imgSize={imgSize?}&imgType={imgType?}&imgColorType={imgColorType?}&imgDominantColor={imgDominantColor?}&alt=json"))
+
+instance ToJSON SearchURL where
+        toJSON SearchURL{..}
+          = object
+              (catMaybes
+                 [Just ("type" .= _suType),
+                  Just ("template" .= _suTemplate)])
+
+--
+-- /See:/ 'searchSpelling' smart constructor.
+data SearchSpelling = SearchSpelling
+    { _ssCorrectedQuery     :: !(Maybe Text)
+    , _ssHTMLCorrectedQuery :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'SearchSpelling' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ssCorrectedQuery'
+--
+-- * 'ssHTMLCorrectedQuery'
+searchSpelling
+    :: SearchSpelling
+searchSpelling =
+    SearchSpelling
+    { _ssCorrectedQuery = Nothing
+    , _ssHTMLCorrectedQuery = Nothing
+    }
+
+ssCorrectedQuery :: Lens' SearchSpelling (Maybe Text)
+ssCorrectedQuery
+  = lens _ssCorrectedQuery
+      (\ s a -> s{_ssCorrectedQuery = a})
+
+ssHTMLCorrectedQuery :: Lens' SearchSpelling (Maybe Text)
+ssHTMLCorrectedQuery
+  = lens _ssHTMLCorrectedQuery
+      (\ s a -> s{_ssHTMLCorrectedQuery = a})
+
+instance FromJSON SearchSpelling where
+        parseJSON
+          = withObject "SearchSpelling"
+              (\ o ->
+                 SearchSpelling <$>
+                   (o .:? "correctedQuery") <*>
+                     (o .:? "htmlCorrectedQuery"))
+
+instance ToJSON SearchSpelling where
+        toJSON SearchSpelling{..}
+          = object
+              (catMaybes
+                 [("correctedQuery" .=) <$> _ssCorrectedQuery,
+                  ("htmlCorrectedQuery" .=) <$> _ssHTMLCorrectedQuery])
+
+--
+-- /See:/ 'resultImage' smart constructor.
+data ResultImage = ResultImage
+    { _riThumbnailLink   :: !(Maybe Text)
+    , _riHeight          :: !(Maybe (Textual Int32))
+    , _riByteSize        :: !(Maybe (Textual Int32))
+    , _riContextLink     :: !(Maybe Text)
+    , _riThumbnailHeight :: !(Maybe (Textual Int32))
+    , _riWidth           :: !(Maybe (Textual Int32))
+    , _riThumbnailWidth  :: !(Maybe (Textual Int32))
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ResultImage' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'riThumbnailLink'
+--
+-- * 'riHeight'
+--
+-- * 'riByteSize'
+--
+-- * 'riContextLink'
+--
+-- * 'riThumbnailHeight'
+--
+-- * 'riWidth'
+--
+-- * 'riThumbnailWidth'
+resultImage
+    :: ResultImage
+resultImage =
+    ResultImage
+    { _riThumbnailLink = Nothing
+    , _riHeight = Nothing
+    , _riByteSize = Nothing
+    , _riContextLink = Nothing
+    , _riThumbnailHeight = Nothing
+    , _riWidth = Nothing
+    , _riThumbnailWidth = Nothing
+    }
+
+riThumbnailLink :: Lens' ResultImage (Maybe Text)
+riThumbnailLink
+  = lens _riThumbnailLink
+      (\ s a -> s{_riThumbnailLink = a})
+
+riHeight :: Lens' ResultImage (Maybe Int32)
+riHeight
+  = lens _riHeight (\ s a -> s{_riHeight = a}) .
+      mapping _Coerce
+
+riByteSize :: Lens' ResultImage (Maybe Int32)
+riByteSize
+  = lens _riByteSize (\ s a -> s{_riByteSize = a}) .
+      mapping _Coerce
+
+riContextLink :: Lens' ResultImage (Maybe Text)
+riContextLink
+  = lens _riContextLink
+      (\ s a -> s{_riContextLink = a})
+
+riThumbnailHeight :: Lens' ResultImage (Maybe Int32)
+riThumbnailHeight
+  = lens _riThumbnailHeight
+      (\ s a -> s{_riThumbnailHeight = a})
+      . mapping _Coerce
+
+riWidth :: Lens' ResultImage (Maybe Int32)
+riWidth
+  = lens _riWidth (\ s a -> s{_riWidth = a}) .
+      mapping _Coerce
+
+riThumbnailWidth :: Lens' ResultImage (Maybe Int32)
+riThumbnailWidth
+  = lens _riThumbnailWidth
+      (\ s a -> s{_riThumbnailWidth = a})
+      . mapping _Coerce
+
+instance FromJSON ResultImage where
+        parseJSON
+          = withObject "ResultImage"
+              (\ o ->
+                 ResultImage <$>
+                   (o .:? "thumbnailLink") <*> (o .:? "height") <*>
+                     (o .:? "byteSize")
+                     <*> (o .:? "contextLink")
+                     <*> (o .:? "thumbnailHeight")
+                     <*> (o .:? "width")
+                     <*> (o .:? "thumbnailWidth"))
+
+instance ToJSON ResultImage where
+        toJSON ResultImage{..}
+          = object
+              (catMaybes
+                 [("thumbnailLink" .=) <$> _riThumbnailLink,
+                  ("height" .=) <$> _riHeight,
+                  ("byteSize" .=) <$> _riByteSize,
+                  ("contextLink" .=) <$> _riContextLink,
+                  ("thumbnailHeight" .=) <$> _riThumbnailHeight,
+                  ("width" .=) <$> _riWidth,
+                  ("thumbnailWidth" .=) <$> _riThumbnailWidth])
+
+--
+-- /See:/ 'resultPagemap' smart constructor.
+newtype ResultPagemap = ResultPagemap
+    { _rpAddtional :: HashMap Text [ResultPagemapAdditionalItem]
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ResultPagemap' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'rpAddtional'
+resultPagemap
+    :: HashMap Text [ResultPagemapAdditionalItem] -- ^ 'rpAddtional'
+    -> ResultPagemap
+resultPagemap pRpAddtional_ =
+    ResultPagemap
+    { _rpAddtional = _Coerce # pRpAddtional_
+    }
+
+rpAddtional :: Lens' ResultPagemap (HashMap Text [ResultPagemapAdditionalItem])
+rpAddtional
+  = lens _rpAddtional (\ s a -> s{_rpAddtional = a}) .
+      _Coerce
+
+instance FromJSON ResultPagemap where
+        parseJSON
+          = withObject "ResultPagemap"
+              (\ o -> ResultPagemap <$> (parseJSONObject o))
+
+instance ToJSON ResultPagemap where
+        toJSON = toJSON . _rpAddtional
+
+--
+-- /See:/ 'result' smart constructor.
+data Result = Result
+    { _rMime             :: !(Maybe Text)
+    , _rImage            :: !(Maybe ResultImage)
+    , _rPagemap          :: !(Maybe ResultPagemap)
+    , _rDisplayLink      :: !(Maybe Text)
+    , _rFileFormat       :: !(Maybe Text)
+    , _rSnippet          :: !(Maybe Text)
+    , _rKind             :: !Text
+    , _rLink             :: !(Maybe Text)
+    , _rHTMLSnippet      :: !(Maybe Text)
+    , _rHTMLFormattedURL :: !(Maybe Text)
+    , _rCacheId          :: !(Maybe Text)
+    , _rFormattedURL     :: !(Maybe Text)
+    , _rHTMLTitle        :: !(Maybe Text)
+    , _rLabels           :: !(Maybe [ResultLabelsItem])
+    , _rTitle            :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Result' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'rMime'
+--
+-- * 'rImage'
+--
+-- * 'rPagemap'
+--
+-- * 'rDisplayLink'
+--
+-- * 'rFileFormat'
+--
+-- * 'rSnippet'
+--
+-- * 'rKind'
+--
+-- * 'rLink'
+--
+-- * 'rHTMLSnippet'
+--
+-- * 'rHTMLFormattedURL'
+--
+-- * 'rCacheId'
+--
+-- * 'rFormattedURL'
+--
+-- * 'rHTMLTitle'
+--
+-- * 'rLabels'
+--
+-- * 'rTitle'
+result
+    :: Result
+result =
+    Result
+    { _rMime = Nothing
+    , _rImage = Nothing
+    , _rPagemap = Nothing
+    , _rDisplayLink = Nothing
+    , _rFileFormat = Nothing
+    , _rSnippet = Nothing
+    , _rKind = "customsearch#result"
+    , _rLink = Nothing
+    , _rHTMLSnippet = Nothing
+    , _rHTMLFormattedURL = Nothing
+    , _rCacheId = Nothing
+    , _rFormattedURL = Nothing
+    , _rHTMLTitle = Nothing
+    , _rLabels = Nothing
+    , _rTitle = Nothing
+    }
+
+rMime :: Lens' Result (Maybe Text)
+rMime = lens _rMime (\ s a -> s{_rMime = a})
+
+rImage :: Lens' Result (Maybe ResultImage)
+rImage = lens _rImage (\ s a -> s{_rImage = a})
+
+rPagemap :: Lens' Result (Maybe ResultPagemap)
+rPagemap = lens _rPagemap (\ s a -> s{_rPagemap = a})
+
+rDisplayLink :: Lens' Result (Maybe Text)
+rDisplayLink
+  = lens _rDisplayLink (\ s a -> s{_rDisplayLink = a})
+
+rFileFormat :: Lens' Result (Maybe Text)
+rFileFormat
+  = lens _rFileFormat (\ s a -> s{_rFileFormat = a})
+
+rSnippet :: Lens' Result (Maybe Text)
+rSnippet = lens _rSnippet (\ s a -> s{_rSnippet = a})
+
+rKind :: Lens' Result Text
+rKind = lens _rKind (\ s a -> s{_rKind = a})
+
+rLink :: Lens' Result (Maybe Text)
+rLink = lens _rLink (\ s a -> s{_rLink = a})
+
+rHTMLSnippet :: Lens' Result (Maybe Text)
+rHTMLSnippet
+  = lens _rHTMLSnippet (\ s a -> s{_rHTMLSnippet = a})
+
+rHTMLFormattedURL :: Lens' Result (Maybe Text)
+rHTMLFormattedURL
+  = lens _rHTMLFormattedURL
+      (\ s a -> s{_rHTMLFormattedURL = a})
+
+rCacheId :: Lens' Result (Maybe Text)
+rCacheId = lens _rCacheId (\ s a -> s{_rCacheId = a})
+
+rFormattedURL :: Lens' Result (Maybe Text)
+rFormattedURL
+  = lens _rFormattedURL
+      (\ s a -> s{_rFormattedURL = a})
+
+rHTMLTitle :: Lens' Result (Maybe Text)
+rHTMLTitle
+  = lens _rHTMLTitle (\ s a -> s{_rHTMLTitle = a})
+
+rLabels :: Lens' Result [ResultLabelsItem]
+rLabels
+  = lens _rLabels (\ s a -> s{_rLabels = a}) . _Default
+      . _Coerce
+
+rTitle :: Lens' Result (Maybe Text)
+rTitle = lens _rTitle (\ s a -> s{_rTitle = a})
+
+instance FromJSON Result where
+        parseJSON
+          = withObject "Result"
+              (\ o ->
+                 Result <$>
+                   (o .:? "mime") <*> (o .:? "image") <*>
+                     (o .:? "pagemap")
+                     <*> (o .:? "displayLink")
+                     <*> (o .:? "fileFormat")
+                     <*> (o .:? "snippet")
+                     <*> (o .:? "kind" .!= "customsearch#result")
+                     <*> (o .:? "link")
+                     <*> (o .:? "htmlSnippet")
+                     <*> (o .:? "htmlFormattedUrl")
+                     <*> (o .:? "cacheId")
+                     <*> (o .:? "formattedUrl")
+                     <*> (o .:? "htmlTitle")
+                     <*> (o .:? "labels" .!= mempty)
+                     <*> (o .:? "title"))
+
+instance ToJSON Result where
+        toJSON Result{..}
+          = object
+              (catMaybes
+                 [("mime" .=) <$> _rMime, ("image" .=) <$> _rImage,
+                  ("pagemap" .=) <$> _rPagemap,
+                  ("displayLink" .=) <$> _rDisplayLink,
+                  ("fileFormat" .=) <$> _rFileFormat,
+                  ("snippet" .=) <$> _rSnippet,
+                  Just ("kind" .= _rKind), ("link" .=) <$> _rLink,
+                  ("htmlSnippet" .=) <$> _rHTMLSnippet,
+                  ("htmlFormattedUrl" .=) <$> _rHTMLFormattedURL,
+                  ("cacheId" .=) <$> _rCacheId,
+                  ("formattedUrl" .=) <$> _rFormattedURL,
+                  ("htmlTitle" .=) <$> _rHTMLTitle,
+                  ("labels" .=) <$> _rLabels,
+                  ("title" .=) <$> _rTitle])
+
+--
+-- /See:/ 'resultLabelsItem' smart constructor.
+data ResultLabelsItem = ResultLabelsItem
+    { _rliName        :: !(Maybe Text)
+    , _rliDisplayName :: !(Maybe Text)
+    , _rliLabelWithOp :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ResultLabelsItem' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'rliName'
+--
+-- * 'rliDisplayName'
+--
+-- * 'rliLabelWithOp'
+resultLabelsItem
+    :: ResultLabelsItem
+resultLabelsItem =
+    ResultLabelsItem
+    { _rliName = Nothing
+    , _rliDisplayName = Nothing
+    , _rliLabelWithOp = Nothing
+    }
+
+rliName :: Lens' ResultLabelsItem (Maybe Text)
+rliName = lens _rliName (\ s a -> s{_rliName = a})
+
+rliDisplayName :: Lens' ResultLabelsItem (Maybe Text)
+rliDisplayName
+  = lens _rliDisplayName
+      (\ s a -> s{_rliDisplayName = a})
+
+rliLabelWithOp :: Lens' ResultLabelsItem (Maybe Text)
+rliLabelWithOp
+  = lens _rliLabelWithOp
+      (\ s a -> s{_rliLabelWithOp = a})
+
+instance FromJSON ResultLabelsItem where
+        parseJSON
+          = withObject "ResultLabelsItem"
+              (\ o ->
+                 ResultLabelsItem <$>
+                   (o .:? "name") <*> (o .:? "displayName") <*>
+                     (o .:? "label_with_op"))
+
+instance ToJSON ResultLabelsItem where
+        toJSON ResultLabelsItem{..}
+          = object
+              (catMaybes
+                 [("name" .=) <$> _rliName,
+                  ("displayName" .=) <$> _rliDisplayName,
+                  ("label_with_op" .=) <$> _rliLabelWithOp])
+
+--
+-- /See:/ 'searchSearchInformation' smart constructor.
+data SearchSearchInformation = SearchSearchInformation
+    { _ssiSearchTime            :: !(Maybe (Textual Double))
+    , _ssiFormattedSearchTime   :: !(Maybe Text)
+    , _ssiTotalResults          :: !(Maybe (Textual Int64))
+    , _ssiFormattedTotalResults :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'SearchSearchInformation' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ssiSearchTime'
+--
+-- * 'ssiFormattedSearchTime'
+--
+-- * 'ssiTotalResults'
+--
+-- * 'ssiFormattedTotalResults'
+searchSearchInformation
+    :: SearchSearchInformation
+searchSearchInformation =
+    SearchSearchInformation
+    { _ssiSearchTime = Nothing
+    , _ssiFormattedSearchTime = Nothing
+    , _ssiTotalResults = Nothing
+    , _ssiFormattedTotalResults = Nothing
+    }
+
+ssiSearchTime :: Lens' SearchSearchInformation (Maybe Double)
+ssiSearchTime
+  = lens _ssiSearchTime
+      (\ s a -> s{_ssiSearchTime = a})
+      . mapping _Coerce
+
+ssiFormattedSearchTime :: Lens' SearchSearchInformation (Maybe Text)
+ssiFormattedSearchTime
+  = lens _ssiFormattedSearchTime
+      (\ s a -> s{_ssiFormattedSearchTime = a})
+
+ssiTotalResults :: Lens' SearchSearchInformation (Maybe Int64)
+ssiTotalResults
+  = lens _ssiTotalResults
+      (\ s a -> s{_ssiTotalResults = a})
+      . mapping _Coerce
+
+ssiFormattedTotalResults :: Lens' SearchSearchInformation (Maybe Text)
+ssiFormattedTotalResults
+  = lens _ssiFormattedTotalResults
+      (\ s a -> s{_ssiFormattedTotalResults = a})
+
+instance FromJSON SearchSearchInformation where
+        parseJSON
+          = withObject "SearchSearchInformation"
+              (\ o ->
+                 SearchSearchInformation <$>
+                   (o .:? "searchTime") <*>
+                     (o .:? "formattedSearchTime")
+                     <*> (o .:? "totalResults")
+                     <*> (o .:? "formattedTotalResults"))
+
+instance ToJSON SearchSearchInformation where
+        toJSON SearchSearchInformation{..}
+          = object
+              (catMaybes
+                 [("searchTime" .=) <$> _ssiSearchTime,
+                  ("formattedSearchTime" .=) <$>
+                    _ssiFormattedSearchTime,
+                  ("totalResults" .=) <$> _ssiTotalResults,
+                  ("formattedTotalResults" .=) <$>
+                    _ssiFormattedTotalResults])
+
+--
+-- /See:/ 'query' smart constructor.
+data Query = Query
+    { _qImgDominantColor       :: !(Maybe Text)
+    , _qOutputEncoding         :: !(Maybe Text)
+    , _qSiteSearchFilter       :: !(Maybe Text)
+    , _qInputEncoding          :: !(Maybe Text)
+    , _qOrTerms                :: !(Maybe Text)
+    , _qSearchTerms            :: !(Maybe Text)
+    , _qStartPage              :: !(Maybe (Textual Int32))
+    , _qRights                 :: !(Maybe Text)
+    , _qCount                  :: !(Maybe (Textual Int32))
+    , _qExcludeTerms           :: !(Maybe Text)
+    , _qFileType               :: !(Maybe Text)
+    , _qSearchType             :: !(Maybe Text)
+    , _qGoogleHost             :: !(Maybe Text)
+    , _qDisableCnTwTranslation :: !(Maybe Text)
+    , _qRelatedSite            :: !(Maybe Text)
+    , _qHl                     :: !(Maybe Text)
+    , _qCref                   :: !(Maybe Text)
+    , _qSort                   :: !(Maybe Text)
+    , _qLanguage               :: !(Maybe Text)
+    , _qSiteSearch             :: !(Maybe Text)
+    , _qFilter                 :: !(Maybe Text)
+    , _qTotalResults           :: !(Maybe (Textual Int64))
+    , _qDateRestrict           :: !(Maybe Text)
+    , _qTitle                  :: !(Maybe Text)
+    , _qLinkSite               :: !(Maybe Text)
+    , _qLowRange               :: !(Maybe Text)
+    , _qImgType                :: !(Maybe Text)
+    , _qGl                     :: !(Maybe Text)
+    , _qCx                     :: !(Maybe Text)
+    , _qImgColorType           :: !(Maybe Text)
+    , _qImgSize                :: !(Maybe Text)
+    , _qExactTerms             :: !(Maybe Text)
+    , _qStartIndex             :: !(Maybe (Textual Int32))
+    , _qCr                     :: !(Maybe Text)
+    , _qSafe                   :: !(Maybe Text)
+    , _qHq                     :: !(Maybe Text)
+    , _qHighRange              :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Query' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'qImgDominantColor'
+--
+-- * 'qOutputEncoding'
+--
+-- * 'qSiteSearchFilter'
+--
+-- * 'qInputEncoding'
+--
+-- * 'qOrTerms'
+--
+-- * 'qSearchTerms'
+--
+-- * 'qStartPage'
+--
+-- * 'qRights'
+--
+-- * 'qCount'
+--
+-- * 'qExcludeTerms'
+--
+-- * 'qFileType'
+--
+-- * 'qSearchType'
+--
+-- * 'qGoogleHost'
+--
+-- * 'qDisableCnTwTranslation'
+--
+-- * 'qRelatedSite'
+--
+-- * 'qHl'
+--
+-- * 'qCref'
+--
+-- * 'qSort'
+--
+-- * 'qLanguage'
+--
+-- * 'qSiteSearch'
+--
+-- * 'qFilter'
+--
+-- * 'qTotalResults'
+--
+-- * 'qDateRestrict'
+--
+-- * 'qTitle'
+--
+-- * 'qLinkSite'
+--
+-- * 'qLowRange'
+--
+-- * 'qImgType'
+--
+-- * 'qGl'
+--
+-- * 'qCx'
+--
+-- * 'qImgColorType'
+--
+-- * 'qImgSize'
+--
+-- * 'qExactTerms'
+--
+-- * 'qStartIndex'
+--
+-- * 'qCr'
+--
+-- * 'qSafe'
+--
+-- * 'qHq'
+--
+-- * 'qHighRange'
+query
+    :: Query
+query =
+    Query
+    { _qImgDominantColor = Nothing
+    , _qOutputEncoding = Nothing
+    , _qSiteSearchFilter = Nothing
+    , _qInputEncoding = Nothing
+    , _qOrTerms = Nothing
+    , _qSearchTerms = Nothing
+    , _qStartPage = Nothing
+    , _qRights = Nothing
+    , _qCount = Nothing
+    , _qExcludeTerms = Nothing
+    , _qFileType = Nothing
+    , _qSearchType = Nothing
+    , _qGoogleHost = Nothing
+    , _qDisableCnTwTranslation = Nothing
+    , _qRelatedSite = Nothing
+    , _qHl = Nothing
+    , _qCref = Nothing
+    , _qSort = Nothing
+    , _qLanguage = Nothing
+    , _qSiteSearch = Nothing
+    , _qFilter = Nothing
+    , _qTotalResults = Nothing
+    , _qDateRestrict = Nothing
+    , _qTitle = Nothing
+    , _qLinkSite = Nothing
+    , _qLowRange = Nothing
+    , _qImgType = Nothing
+    , _qGl = Nothing
+    , _qCx = Nothing
+    , _qImgColorType = Nothing
+    , _qImgSize = Nothing
+    , _qExactTerms = Nothing
+    , _qStartIndex = Nothing
+    , _qCr = Nothing
+    , _qSafe = Nothing
+    , _qHq = Nothing
+    , _qHighRange = Nothing
+    }
+
+qImgDominantColor :: Lens' Query (Maybe Text)
+qImgDominantColor
+  = lens _qImgDominantColor
+      (\ s a -> s{_qImgDominantColor = a})
+
+qOutputEncoding :: Lens' Query (Maybe Text)
+qOutputEncoding
+  = lens _qOutputEncoding
+      (\ s a -> s{_qOutputEncoding = a})
+
+qSiteSearchFilter :: Lens' Query (Maybe Text)
+qSiteSearchFilter
+  = lens _qSiteSearchFilter
+      (\ s a -> s{_qSiteSearchFilter = a})
+
+qInputEncoding :: Lens' Query (Maybe Text)
+qInputEncoding
+  = lens _qInputEncoding
+      (\ s a -> s{_qInputEncoding = a})
+
+qOrTerms :: Lens' Query (Maybe Text)
+qOrTerms = lens _qOrTerms (\ s a -> s{_qOrTerms = a})
+
+qSearchTerms :: Lens' Query (Maybe Text)
+qSearchTerms
+  = lens _qSearchTerms (\ s a -> s{_qSearchTerms = a})
+
+qStartPage :: Lens' Query (Maybe Int32)
+qStartPage
+  = lens _qStartPage (\ s a -> s{_qStartPage = a}) .
+      mapping _Coerce
+
+qRights :: Lens' Query (Maybe Text)
+qRights = lens _qRights (\ s a -> s{_qRights = a})
+
+qCount :: Lens' Query (Maybe Int32)
+qCount
+  = lens _qCount (\ s a -> s{_qCount = a}) .
+      mapping _Coerce
+
+qExcludeTerms :: Lens' Query (Maybe Text)
+qExcludeTerms
+  = lens _qExcludeTerms
+      (\ s a -> s{_qExcludeTerms = a})
+
+qFileType :: Lens' Query (Maybe Text)
+qFileType
+  = lens _qFileType (\ s a -> s{_qFileType = a})
+
+qSearchType :: Lens' Query (Maybe Text)
+qSearchType
+  = lens _qSearchType (\ s a -> s{_qSearchType = a})
+
+qGoogleHost :: Lens' Query (Maybe Text)
+qGoogleHost
+  = lens _qGoogleHost (\ s a -> s{_qGoogleHost = a})
+
+qDisableCnTwTranslation :: Lens' Query (Maybe Text)
+qDisableCnTwTranslation
+  = lens _qDisableCnTwTranslation
+      (\ s a -> s{_qDisableCnTwTranslation = a})
+
+qRelatedSite :: Lens' Query (Maybe Text)
+qRelatedSite
+  = lens _qRelatedSite (\ s a -> s{_qRelatedSite = a})
+
+qHl :: Lens' Query (Maybe Text)
+qHl = lens _qHl (\ s a -> s{_qHl = a})
+
+qCref :: Lens' Query (Maybe Text)
+qCref = lens _qCref (\ s a -> s{_qCref = a})
+
+qSort :: Lens' Query (Maybe Text)
+qSort = lens _qSort (\ s a -> s{_qSort = a})
+
+qLanguage :: Lens' Query (Maybe Text)
+qLanguage
+  = lens _qLanguage (\ s a -> s{_qLanguage = a})
+
+qSiteSearch :: Lens' Query (Maybe Text)
+qSiteSearch
+  = lens _qSiteSearch (\ s a -> s{_qSiteSearch = a})
+
+qFilter :: Lens' Query (Maybe Text)
+qFilter = lens _qFilter (\ s a -> s{_qFilter = a})
+
+qTotalResults :: Lens' Query (Maybe Int64)
+qTotalResults
+  = lens _qTotalResults
+      (\ s a -> s{_qTotalResults = a})
+      . mapping _Coerce
+
+qDateRestrict :: Lens' Query (Maybe Text)
+qDateRestrict
+  = lens _qDateRestrict
+      (\ s a -> s{_qDateRestrict = a})
+
+qTitle :: Lens' Query (Maybe Text)
+qTitle = lens _qTitle (\ s a -> s{_qTitle = a})
+
+qLinkSite :: Lens' Query (Maybe Text)
+qLinkSite
+  = lens _qLinkSite (\ s a -> s{_qLinkSite = a})
+
+qLowRange :: Lens' Query (Maybe Text)
+qLowRange
+  = lens _qLowRange (\ s a -> s{_qLowRange = a})
+
+qImgType :: Lens' Query (Maybe Text)
+qImgType = lens _qImgType (\ s a -> s{_qImgType = a})
+
+qGl :: Lens' Query (Maybe Text)
+qGl = lens _qGl (\ s a -> s{_qGl = a})
+
+qCx :: Lens' Query (Maybe Text)
+qCx = lens _qCx (\ s a -> s{_qCx = a})
+
+qImgColorType :: Lens' Query (Maybe Text)
+qImgColorType
+  = lens _qImgColorType
+      (\ s a -> s{_qImgColorType = a})
+
+qImgSize :: Lens' Query (Maybe Text)
+qImgSize = lens _qImgSize (\ s a -> s{_qImgSize = a})
+
+qExactTerms :: Lens' Query (Maybe Text)
+qExactTerms
+  = lens _qExactTerms (\ s a -> s{_qExactTerms = a})
+
+qStartIndex :: Lens' Query (Maybe Int32)
+qStartIndex
+  = lens _qStartIndex (\ s a -> s{_qStartIndex = a}) .
+      mapping _Coerce
+
+qCr :: Lens' Query (Maybe Text)
+qCr = lens _qCr (\ s a -> s{_qCr = a})
+
+qSafe :: Lens' Query (Maybe Text)
+qSafe = lens _qSafe (\ s a -> s{_qSafe = a})
+
+qHq :: Lens' Query (Maybe Text)
+qHq = lens _qHq (\ s a -> s{_qHq = a})
+
+qHighRange :: Lens' Query (Maybe Text)
+qHighRange
+  = lens _qHighRange (\ s a -> s{_qHighRange = a})
+
+instance FromJSON Query where
+        parseJSON
+          = withObject "Query"
+              (\ o ->
+                 Query <$>
+                   (o .:? "imgDominantColor") <*>
+                     (o .:? "outputEncoding")
+                     <*> (o .:? "siteSearchFilter")
+                     <*> (o .:? "inputEncoding")
+                     <*> (o .:? "orTerms")
+                     <*> (o .:? "searchTerms")
+                     <*> (o .:? "startPage")
+                     <*> (o .:? "rights")
+                     <*> (o .:? "count")
+                     <*> (o .:? "excludeTerms")
+                     <*> (o .:? "fileType")
+                     <*> (o .:? "searchType")
+                     <*> (o .:? "googleHost")
+                     <*> (o .:? "disableCnTwTranslation")
+                     <*> (o .:? "relatedSite")
+                     <*> (o .:? "hl")
+                     <*> (o .:? "cref")
+                     <*> (o .:? "sort")
+                     <*> (o .:? "language")
+                     <*> (o .:? "siteSearch")
+                     <*> (o .:? "filter")
+                     <*> (o .:? "totalResults")
+                     <*> (o .:? "dateRestrict")
+                     <*> (o .:? "title")
+                     <*> (o .:? "linkSite")
+                     <*> (o .:? "lowRange")
+                     <*> (o .:? "imgType")
+                     <*> (o .:? "gl")
+                     <*> (o .:? "cx")
+                     <*> (o .:? "imgColorType")
+                     <*> (o .:? "imgSize")
+                     <*> (o .:? "exactTerms")
+                     <*> (o .:? "startIndex")
+                     <*> (o .:? "cr")
+                     <*> (o .:? "safe")
+                     <*> (o .:? "hq")
+                     <*> (o .:? "highRange"))
+
+instance ToJSON Query where
+        toJSON Query{..}
+          = object
+              (catMaybes
+                 [("imgDominantColor" .=) <$> _qImgDominantColor,
+                  ("outputEncoding" .=) <$> _qOutputEncoding,
+                  ("siteSearchFilter" .=) <$> _qSiteSearchFilter,
+                  ("inputEncoding" .=) <$> _qInputEncoding,
+                  ("orTerms" .=) <$> _qOrTerms,
+                  ("searchTerms" .=) <$> _qSearchTerms,
+                  ("startPage" .=) <$> _qStartPage,
+                  ("rights" .=) <$> _qRights, ("count" .=) <$> _qCount,
+                  ("excludeTerms" .=) <$> _qExcludeTerms,
+                  ("fileType" .=) <$> _qFileType,
+                  ("searchType" .=) <$> _qSearchType,
+                  ("googleHost" .=) <$> _qGoogleHost,
+                  ("disableCnTwTranslation" .=) <$>
+                    _qDisableCnTwTranslation,
+                  ("relatedSite" .=) <$> _qRelatedSite,
+                  ("hl" .=) <$> _qHl, ("cref" .=) <$> _qCref,
+                  ("sort" .=) <$> _qSort,
+                  ("language" .=) <$> _qLanguage,
+                  ("siteSearch" .=) <$> _qSiteSearch,
+                  ("filter" .=) <$> _qFilter,
+                  ("totalResults" .=) <$> _qTotalResults,
+                  ("dateRestrict" .=) <$> _qDateRestrict,
+                  ("title" .=) <$> _qTitle,
+                  ("linkSite" .=) <$> _qLinkSite,
+                  ("lowRange" .=) <$> _qLowRange,
+                  ("imgType" .=) <$> _qImgType, ("gl" .=) <$> _qGl,
+                  ("cx" .=) <$> _qCx,
+                  ("imgColorType" .=) <$> _qImgColorType,
+                  ("imgSize" .=) <$> _qImgSize,
+                  ("exactTerms" .=) <$> _qExactTerms,
+                  ("startIndex" .=) <$> _qStartIndex,
+                  ("cr" .=) <$> _qCr, ("safe" .=) <$> _qSafe,
+                  ("hq" .=) <$> _qHq,
+                  ("highRange" .=) <$> _qHighRange])
+
+--
+-- /See:/ 'promotionBodyLinesItem' smart constructor.
+data PromotionBodyLinesItem = PromotionBodyLinesItem
+    { _pbliLink      :: !(Maybe Text)
+    , _pbliURL       :: !(Maybe Text)
+    , _pbliHTMLTitle :: !(Maybe Text)
+    , _pbliTitle     :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'PromotionBodyLinesItem' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pbliLink'
+--
+-- * 'pbliURL'
+--
+-- * 'pbliHTMLTitle'
+--
+-- * 'pbliTitle'
+promotionBodyLinesItem
+    :: PromotionBodyLinesItem
+promotionBodyLinesItem =
+    PromotionBodyLinesItem
+    { _pbliLink = Nothing
+    , _pbliURL = Nothing
+    , _pbliHTMLTitle = Nothing
+    , _pbliTitle = Nothing
+    }
+
+pbliLink :: Lens' PromotionBodyLinesItem (Maybe Text)
+pbliLink = lens _pbliLink (\ s a -> s{_pbliLink = a})
+
+pbliURL :: Lens' PromotionBodyLinesItem (Maybe Text)
+pbliURL = lens _pbliURL (\ s a -> s{_pbliURL = a})
+
+pbliHTMLTitle :: Lens' PromotionBodyLinesItem (Maybe Text)
+pbliHTMLTitle
+  = lens _pbliHTMLTitle
+      (\ s a -> s{_pbliHTMLTitle = a})
+
+pbliTitle :: Lens' PromotionBodyLinesItem (Maybe Text)
+pbliTitle
+  = lens _pbliTitle (\ s a -> s{_pbliTitle = a})
+
+instance FromJSON PromotionBodyLinesItem where
+        parseJSON
+          = withObject "PromotionBodyLinesItem"
+              (\ o ->
+                 PromotionBodyLinesItem <$>
+                   (o .:? "link") <*> (o .:? "url") <*>
+                     (o .:? "htmlTitle")
+                     <*> (o .:? "title"))
+
+instance ToJSON PromotionBodyLinesItem where
+        toJSON PromotionBodyLinesItem{..}
+          = object
+              (catMaybes
+                 [("link" .=) <$> _pbliLink, ("url" .=) <$> _pbliURL,
+                  ("htmlTitle" .=) <$> _pbliHTMLTitle,
+                  ("title" .=) <$> _pbliTitle])
+
+--
+-- /See:/ 'promotion' smart constructor.
+data Promotion = Promotion
+    { _pImage       :: !(Maybe PromotionImage)
+    , _pDisplayLink :: !(Maybe Text)
+    , _pBodyLines   :: !(Maybe [PromotionBodyLinesItem])
+    , _pLink        :: !(Maybe Text)
+    , _pHTMLTitle   :: !(Maybe Text)
+    , _pTitle       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Promotion' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pImage'
+--
+-- * 'pDisplayLink'
+--
+-- * 'pBodyLines'
+--
+-- * 'pLink'
+--
+-- * 'pHTMLTitle'
+--
+-- * 'pTitle'
+promotion
+    :: Promotion
+promotion =
+    Promotion
+    { _pImage = Nothing
+    , _pDisplayLink = Nothing
+    , _pBodyLines = Nothing
+    , _pLink = Nothing
+    , _pHTMLTitle = Nothing
+    , _pTitle = Nothing
+    }
+
+pImage :: Lens' Promotion (Maybe PromotionImage)
+pImage = lens _pImage (\ s a -> s{_pImage = a})
+
+pDisplayLink :: Lens' Promotion (Maybe Text)
+pDisplayLink
+  = lens _pDisplayLink (\ s a -> s{_pDisplayLink = a})
+
+pBodyLines :: Lens' Promotion [PromotionBodyLinesItem]
+pBodyLines
+  = lens _pBodyLines (\ s a -> s{_pBodyLines = a}) .
+      _Default
+      . _Coerce
+
+pLink :: Lens' Promotion (Maybe Text)
+pLink = lens _pLink (\ s a -> s{_pLink = a})
+
+pHTMLTitle :: Lens' Promotion (Maybe Text)
+pHTMLTitle
+  = lens _pHTMLTitle (\ s a -> s{_pHTMLTitle = a})
+
+pTitle :: Lens' Promotion (Maybe Text)
+pTitle = lens _pTitle (\ s a -> s{_pTitle = a})
+
+instance FromJSON Promotion where
+        parseJSON
+          = withObject "Promotion"
+              (\ o ->
+                 Promotion <$>
+                   (o .:? "image") <*> (o .:? "displayLink") <*>
+                     (o .:? "bodyLines" .!= mempty)
+                     <*> (o .:? "link")
+                     <*> (o .:? "htmlTitle")
+                     <*> (o .:? "title"))
+
+instance ToJSON Promotion where
+        toJSON Promotion{..}
+          = object
+              (catMaybes
+                 [("image" .=) <$> _pImage,
+                  ("displayLink" .=) <$> _pDisplayLink,
+                  ("bodyLines" .=) <$> _pBodyLines,
+                  ("link" .=) <$> _pLink,
+                  ("htmlTitle" .=) <$> _pHTMLTitle,
+                  ("title" .=) <$> _pTitle])
+
+--
+-- /See:/ 'search' smart constructor.
+data Search = Search
+    { _sQueries           :: !(Maybe SearchQueries)
+    , _sContext           :: !(Maybe Context)
+    , _sKind              :: !Text
+    , _sURL               :: !(Maybe SearchURL)
+    , _sItems             :: !(Maybe [Result])
+    , _sSearchInformation :: !(Maybe SearchSearchInformation)
+    , _sPromotions        :: !(Maybe [Promotion])
+    , _sSpelling          :: !(Maybe SearchSpelling)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Search' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'sQueries'
+--
+-- * 'sContext'
+--
+-- * 'sKind'
+--
+-- * 'sURL'
+--
+-- * 'sItems'
+--
+-- * 'sSearchInformation'
+--
+-- * 'sPromotions'
+--
+-- * 'sSpelling'
+search
+    :: Search
+search =
+    Search
+    { _sQueries = Nothing
+    , _sContext = Nothing
+    , _sKind = "customsearch#search"
+    , _sURL = Nothing
+    , _sItems = Nothing
+    , _sSearchInformation = Nothing
+    , _sPromotions = Nothing
+    , _sSpelling = Nothing
+    }
+
+sQueries :: Lens' Search (Maybe SearchQueries)
+sQueries = lens _sQueries (\ s a -> s{_sQueries = a})
+
+sContext :: Lens' Search (Maybe Context)
+sContext = lens _sContext (\ s a -> s{_sContext = a})
+
+sKind :: Lens' Search Text
+sKind = lens _sKind (\ s a -> s{_sKind = a})
+
+sURL :: Lens' Search (Maybe SearchURL)
+sURL = lens _sURL (\ s a -> s{_sURL = a})
+
+sItems :: Lens' Search [Result]
+sItems
+  = lens _sItems (\ s a -> s{_sItems = a}) . _Default .
+      _Coerce
+
+sSearchInformation :: Lens' Search (Maybe SearchSearchInformation)
+sSearchInformation
+  = lens _sSearchInformation
+      (\ s a -> s{_sSearchInformation = a})
+
+sPromotions :: Lens' Search [Promotion]
+sPromotions
+  = lens _sPromotions (\ s a -> s{_sPromotions = a}) .
+      _Default
+      . _Coerce
+
+sSpelling :: Lens' Search (Maybe SearchSpelling)
+sSpelling
+  = lens _sSpelling (\ s a -> s{_sSpelling = a})
+
+instance FromJSON Search where
+        parseJSON
+          = withObject "Search"
+              (\ o ->
+                 Search <$>
+                   (o .:? "queries") <*> (o .:? "context") <*>
+                     (o .:? "kind" .!= "customsearch#search")
+                     <*> (o .:? "url")
+                     <*> (o .:? "items" .!= mempty)
+                     <*> (o .:? "searchInformation")
+                     <*> (o .:? "promotions" .!= mempty)
+                     <*> (o .:? "spelling"))
+
+instance ToJSON Search where
+        toJSON Search{..}
+          = object
+              (catMaybes
+                 [("queries" .=) <$> _sQueries,
+                  ("context" .=) <$> _sContext,
+                  Just ("kind" .= _sKind), ("url" .=) <$> _sURL,
+                  ("items" .=) <$> _sItems,
+                  ("searchInformation" .=) <$> _sSearchInformation,
+                  ("promotions" .=) <$> _sPromotions,
+                  ("spelling" .=) <$> _sSpelling])
+
+--
+-- /See:/ 'contextFacetsItemItem' smart constructor.
+data ContextFacetsItemItem = ContextFacetsItemItem
+    { _cfiiAnchor      :: !(Maybe Text)
+    , _cfiiLabelWithOp :: !(Maybe Text)
+    , _cfiiLabel       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ContextFacetsItemItem' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cfiiAnchor'
+--
+-- * 'cfiiLabelWithOp'
+--
+-- * 'cfiiLabel'
+contextFacetsItemItem
+    :: ContextFacetsItemItem
+contextFacetsItemItem =
+    ContextFacetsItemItem
+    { _cfiiAnchor = Nothing
+    , _cfiiLabelWithOp = Nothing
+    , _cfiiLabel = Nothing
+    }
+
+cfiiAnchor :: Lens' ContextFacetsItemItem (Maybe Text)
+cfiiAnchor
+  = lens _cfiiAnchor (\ s a -> s{_cfiiAnchor = a})
+
+cfiiLabelWithOp :: Lens' ContextFacetsItemItem (Maybe Text)
+cfiiLabelWithOp
+  = lens _cfiiLabelWithOp
+      (\ s a -> s{_cfiiLabelWithOp = a})
+
+cfiiLabel :: Lens' ContextFacetsItemItem (Maybe Text)
+cfiiLabel
+  = lens _cfiiLabel (\ s a -> s{_cfiiLabel = a})
+
+instance FromJSON ContextFacetsItemItem where
+        parseJSON
+          = withObject "ContextFacetsItemItem"
+              (\ o ->
+                 ContextFacetsItemItem <$>
+                   (o .:? "anchor") <*> (o .:? "label_with_op") <*>
+                     (o .:? "label"))
+
+instance ToJSON ContextFacetsItemItem where
+        toJSON ContextFacetsItemItem{..}
+          = object
+              (catMaybes
+                 [("anchor" .=) <$> _cfiiAnchor,
+                  ("label_with_op" .=) <$> _cfiiLabelWithOp,
+                  ("label" .=) <$> _cfiiLabel])
diff --git a/gen/Network/Google/CustomSearch/Types/Sum.hs b/gen/Network/Google/CustomSearch/Types/Sum.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/CustomSearch/Types/Sum.hs
@@ -0,0 +1,535 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE LambdaCase         #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- |
+-- Module      : Network.Google.CustomSearch.Types.Sum
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+module Network.Google.CustomSearch.Types.Sum where
+
+import           Network.Google.Prelude
+
+-- | Returns images of a type, which can be one of: clipart, face, lineart,
+-- news, and photo.
+data CSEListImgType
+    = CliPart
+      -- ^ @clipart@
+      -- clipart
+    | Face
+      -- ^ @face@
+      -- face
+    | Lineart
+      -- ^ @lineart@
+      -- lineart
+    | News
+      -- ^ @news@
+      -- news
+    | Photo
+      -- ^ @photo@
+      -- photo
+      deriving (Eq,Ord,Enum,Read,Show,Data,Typeable,Generic)
+
+instance Hashable CSEListImgType
+
+instance FromText CSEListImgType where
+    fromText = \case
+        "clipart" -> Just CliPart
+        "face" -> Just Face
+        "lineart" -> Just Lineart
+        "news" -> Just News
+        "photo" -> Just Photo
+        _ -> Nothing
+
+instance ToText CSEListImgType where
+    toText = \case
+        CliPart -> "clipart"
+        Face -> "face"
+        Lineart -> "lineart"
+        News -> "news"
+        Photo -> "photo"
+
+instance FromJSON CSEListImgType where
+    parseJSON = parseJSONText "CSEListImgType"
+
+instance ToJSON CSEListImgType where
+    toJSON = toJSONText
+
+-- | Controls whether to include or exclude results from the site named in
+-- the as_sitesearch parameter
+data CSEListSiteSearchFilter
+    = E
+      -- ^ @e@
+      -- exclude
+    | I
+      -- ^ @i@
+      -- include
+      deriving (Eq,Ord,Enum,Read,Show,Data,Typeable,Generic)
+
+instance Hashable CSEListSiteSearchFilter
+
+instance FromText CSEListSiteSearchFilter where
+    fromText = \case
+        "e" -> Just E
+        "i" -> Just I
+        _ -> Nothing
+
+instance ToText CSEListSiteSearchFilter where
+    toText = \case
+        E -> "e"
+        I -> "i"
+
+instance FromJSON CSEListSiteSearchFilter where
+    parseJSON = parseJSONText "CSEListSiteSearchFilter"
+
+instance ToJSON CSEListSiteSearchFilter where
+    toJSON = toJSONText
+
+-- | Returns images of a specific dominant color: yellow, green, teal, blue,
+-- purple, pink, white, gray, black and brown.
+data CSEListImgDominantColor
+    = Black
+      -- ^ @black@
+      -- black
+    | Blue
+      -- ^ @blue@
+      -- blue
+    | Brown
+      -- ^ @brown@
+      -- brown
+    | Gray
+      -- ^ @gray@
+      -- gray
+    | Green
+      -- ^ @green@
+      -- green
+    | Pink
+      -- ^ @pink@
+      -- pink
+    | Purple
+      -- ^ @purple@
+      -- purple
+    | Teal
+      -- ^ @teal@
+      -- teal
+    | White
+      -- ^ @white@
+      -- white
+    | Yellow
+      -- ^ @yellow@
+      -- yellow
+      deriving (Eq,Ord,Enum,Read,Show,Data,Typeable,Generic)
+
+instance Hashable CSEListImgDominantColor
+
+instance FromText CSEListImgDominantColor where
+    fromText = \case
+        "black" -> Just Black
+        "blue" -> Just Blue
+        "brown" -> Just Brown
+        "gray" -> Just Gray
+        "green" -> Just Green
+        "pink" -> Just Pink
+        "purple" -> Just Purple
+        "teal" -> Just Teal
+        "white" -> Just White
+        "yellow" -> Just Yellow
+        _ -> Nothing
+
+instance ToText CSEListImgDominantColor where
+    toText = \case
+        Black -> "black"
+        Blue -> "blue"
+        Brown -> "brown"
+        Gray -> "gray"
+        Green -> "green"
+        Pink -> "pink"
+        Purple -> "purple"
+        Teal -> "teal"
+        White -> "white"
+        Yellow -> "yellow"
+
+instance FromJSON CSEListImgDominantColor where
+    parseJSON = parseJSONText "CSEListImgDominantColor"
+
+instance ToJSON CSEListImgDominantColor where
+    toJSON = toJSONText
+
+-- | Search safety level
+data CSEListSafe
+    = High
+      -- ^ @high@
+      -- Enables highest level of safe search filtering.
+    | Medium
+      -- ^ @medium@
+      -- Enables moderate safe search filtering.
+    | Off
+      -- ^ @off@
+      -- Disables safe search filtering.
+      deriving (Eq,Ord,Enum,Read,Show,Data,Typeable,Generic)
+
+instance Hashable CSEListSafe
+
+instance FromText CSEListSafe where
+    fromText = \case
+        "high" -> Just High
+        "medium" -> Just Medium
+        "off" -> Just Off
+        _ -> Nothing
+
+instance ToText CSEListSafe where
+    toText = \case
+        High -> "high"
+        Medium -> "medium"
+        Off -> "off"
+
+instance FromJSON CSEListSafe where
+    parseJSON = parseJSONText "CSEListSafe"
+
+instance ToJSON CSEListSafe where
+    toJSON = toJSONText
+
+-- | Returns black and white, grayscale, or color images: mono, gray, and
+-- color.
+data CSEListImgColorType
+    = CSELICTColor
+      -- ^ @color@
+      -- color
+    | CSELICTGray
+      -- ^ @gray@
+      -- gray
+    | CSELICTMono
+      -- ^ @mono@
+      -- mono
+      deriving (Eq,Ord,Enum,Read,Show,Data,Typeable,Generic)
+
+instance Hashable CSEListImgColorType
+
+instance FromText CSEListImgColorType where
+    fromText = \case
+        "color" -> Just CSELICTColor
+        "gray" -> Just CSELICTGray
+        "mono" -> Just CSELICTMono
+        _ -> Nothing
+
+instance ToText CSEListImgColorType where
+    toText = \case
+        CSELICTColor -> "color"
+        CSELICTGray -> "gray"
+        CSELICTMono -> "mono"
+
+instance FromJSON CSEListImgColorType where
+    parseJSON = parseJSONText "CSEListImgColorType"
+
+instance ToJSON CSEListImgColorType where
+    toJSON = toJSONText
+
+-- | Controls turning on or off the duplicate content filter.
+data CSEListFilter
+    = CSELF0
+      -- ^ @0@
+      -- Turns off duplicate content filter.
+    | CSELF1
+      -- ^ @1@
+      -- Turns on duplicate content filter.
+      deriving (Eq,Ord,Enum,Read,Show,Data,Typeable,Generic)
+
+instance Hashable CSEListFilter
+
+instance FromText CSEListFilter where
+    fromText = \case
+        "0" -> Just CSELF0
+        "1" -> Just CSELF1
+        _ -> Nothing
+
+instance ToText CSEListFilter where
+    toText = \case
+        CSELF0 -> "0"
+        CSELF1 -> "1"
+
+instance FromJSON CSEListFilter where
+    parseJSON = parseJSONText "CSEListFilter"
+
+instance ToJSON CSEListFilter where
+    toJSON = toJSONText
+
+-- | The language restriction for the search results
+data CSEListLr
+    = LangAr
+      -- ^ @lang_ar@
+      -- Arabic
+    | LangBg
+      -- ^ @lang_bg@
+      -- Bulgarian
+    | LangCa
+      -- ^ @lang_ca@
+      -- Catalan
+    | LangCs
+      -- ^ @lang_cs@
+      -- Czech
+    | LangDa
+      -- ^ @lang_da@
+      -- Danish
+    | LangDe
+      -- ^ @lang_de@
+      -- German
+    | LangEl
+      -- ^ @lang_el@
+      -- Greek
+    | LangEn
+      -- ^ @lang_en@
+      -- English
+    | LangEs
+      -- ^ @lang_es@
+      -- Spanish
+    | LangEt
+      -- ^ @lang_et@
+      -- Estonian
+    | LangFi
+      -- ^ @lang_fi@
+      -- Finnish
+    | LangFr
+      -- ^ @lang_fr@
+      -- French
+    | LangHr
+      -- ^ @lang_hr@
+      -- Croatian
+    | LangHu
+      -- ^ @lang_hu@
+      -- Hungarian
+    | LangId
+      -- ^ @lang_id@
+      -- Indonesian
+    | LangIs
+      -- ^ @lang_is@
+      -- Icelandic
+    | LangIt
+      -- ^ @lang_it@
+      -- Italian
+    | LangIw
+      -- ^ @lang_iw@
+      -- Hebrew
+    | LangJa
+      -- ^ @lang_ja@
+      -- Japanese
+    | LangKo
+      -- ^ @lang_ko@
+      -- Korean
+    | LangLT
+      -- ^ @lang_lt@
+      -- Lithuanian
+    | LangLv
+      -- ^ @lang_lv@
+      -- Latvian
+    | LangNl
+      -- ^ @lang_nl@
+      -- Dutch
+    | LangNo
+      -- ^ @lang_no@
+      -- Norwegian
+    | LangPl
+      -- ^ @lang_pl@
+      -- Polish
+    | LangPt
+      -- ^ @lang_pt@
+      -- Portuguese
+    | LangRo
+      -- ^ @lang_ro@
+      -- Romanian
+    | LangRu
+      -- ^ @lang_ru@
+      -- Russian
+    | LangSk
+      -- ^ @lang_sk@
+      -- Slovak
+    | LangSl
+      -- ^ @lang_sl@
+      -- Slovenian
+    | LangSr
+      -- ^ @lang_sr@
+      -- Serbian
+    | LangSv
+      -- ^ @lang_sv@
+      -- Swedish
+    | LangTr
+      -- ^ @lang_tr@
+      -- Turkish
+    | LangZhCn
+      -- ^ @lang_zh-CN@
+      -- Chinese (Simplified)
+    | LangZhTw
+      -- ^ @lang_zh-TW@
+      -- Chinese (Traditional)
+      deriving (Eq,Ord,Enum,Read,Show,Data,Typeable,Generic)
+
+instance Hashable CSEListLr
+
+instance FromText CSEListLr where
+    fromText = \case
+        "lang_ar" -> Just LangAr
+        "lang_bg" -> Just LangBg
+        "lang_ca" -> Just LangCa
+        "lang_cs" -> Just LangCs
+        "lang_da" -> Just LangDa
+        "lang_de" -> Just LangDe
+        "lang_el" -> Just LangEl
+        "lang_en" -> Just LangEn
+        "lang_es" -> Just LangEs
+        "lang_et" -> Just LangEt
+        "lang_fi" -> Just LangFi
+        "lang_fr" -> Just LangFr
+        "lang_hr" -> Just LangHr
+        "lang_hu" -> Just LangHu
+        "lang_id" -> Just LangId
+        "lang_is" -> Just LangIs
+        "lang_it" -> Just LangIt
+        "lang_iw" -> Just LangIw
+        "lang_ja" -> Just LangJa
+        "lang_ko" -> Just LangKo
+        "lang_lt" -> Just LangLT
+        "lang_lv" -> Just LangLv
+        "lang_nl" -> Just LangNl
+        "lang_no" -> Just LangNo
+        "lang_pl" -> Just LangPl
+        "lang_pt" -> Just LangPt
+        "lang_ro" -> Just LangRo
+        "lang_ru" -> Just LangRu
+        "lang_sk" -> Just LangSk
+        "lang_sl" -> Just LangSl
+        "lang_sr" -> Just LangSr
+        "lang_sv" -> Just LangSv
+        "lang_tr" -> Just LangTr
+        "lang_zh-CN" -> Just LangZhCn
+        "lang_zh-TW" -> Just LangZhTw
+        _ -> Nothing
+
+instance ToText CSEListLr where
+    toText = \case
+        LangAr -> "lang_ar"
+        LangBg -> "lang_bg"
+        LangCa -> "lang_ca"
+        LangCs -> "lang_cs"
+        LangDa -> "lang_da"
+        LangDe -> "lang_de"
+        LangEl -> "lang_el"
+        LangEn -> "lang_en"
+        LangEs -> "lang_es"
+        LangEt -> "lang_et"
+        LangFi -> "lang_fi"
+        LangFr -> "lang_fr"
+        LangHr -> "lang_hr"
+        LangHu -> "lang_hu"
+        LangId -> "lang_id"
+        LangIs -> "lang_is"
+        LangIt -> "lang_it"
+        LangIw -> "lang_iw"
+        LangJa -> "lang_ja"
+        LangKo -> "lang_ko"
+        LangLT -> "lang_lt"
+        LangLv -> "lang_lv"
+        LangNl -> "lang_nl"
+        LangNo -> "lang_no"
+        LangPl -> "lang_pl"
+        LangPt -> "lang_pt"
+        LangRo -> "lang_ro"
+        LangRu -> "lang_ru"
+        LangSk -> "lang_sk"
+        LangSl -> "lang_sl"
+        LangSr -> "lang_sr"
+        LangSv -> "lang_sv"
+        LangTr -> "lang_tr"
+        LangZhCn -> "lang_zh-CN"
+        LangZhTw -> "lang_zh-TW"
+
+instance FromJSON CSEListLr where
+    parseJSON = parseJSONText "CSEListLr"
+
+instance ToJSON CSEListLr where
+    toJSON = toJSONText
+
+-- | Specifies the search type: image.
+data CSEListSearchType
+    = Image
+      -- ^ @image@
+      -- custom image search
+      deriving (Eq,Ord,Enum,Read,Show,Data,Typeable,Generic)
+
+instance Hashable CSEListSearchType
+
+instance FromText CSEListSearchType where
+    fromText = \case
+        "image" -> Just Image
+        _ -> Nothing
+
+instance ToText CSEListSearchType where
+    toText = \case
+        Image -> "image"
+
+instance FromJSON CSEListSearchType where
+    parseJSON = parseJSONText "CSEListSearchType"
+
+instance ToJSON CSEListSearchType where
+    toJSON = toJSONText
+
+-- | Returns images of a specified size, where size can be one of: icon,
+-- small, medium, large, xlarge, xxlarge, and huge.
+data CSEListImgSize
+    = CSELISHuge
+      -- ^ @huge@
+      -- huge
+    | CSELISIcon
+      -- ^ @icon@
+      -- icon
+    | CSELISLarge
+      -- ^ @large@
+      -- large
+    | CSELISMedium
+      -- ^ @medium@
+      -- medium
+    | CSELISSmall
+      -- ^ @small@
+      -- small
+    | CSELISXlarge
+      -- ^ @xlarge@
+      -- xlarge
+    | CSELISXxlarge
+      -- ^ @xxlarge@
+      -- xxlarge
+      deriving (Eq,Ord,Enum,Read,Show,Data,Typeable,Generic)
+
+instance Hashable CSEListImgSize
+
+instance FromText CSEListImgSize where
+    fromText = \case
+        "huge" -> Just CSELISHuge
+        "icon" -> Just CSELISIcon
+        "large" -> Just CSELISLarge
+        "medium" -> Just CSELISMedium
+        "small" -> Just CSELISSmall
+        "xlarge" -> Just CSELISXlarge
+        "xxlarge" -> Just CSELISXxlarge
+        _ -> Nothing
+
+instance ToText CSEListImgSize where
+    toText = \case
+        CSELISHuge -> "huge"
+        CSELISIcon -> "icon"
+        CSELISLarge -> "large"
+        CSELISMedium -> "medium"
+        CSELISSmall -> "small"
+        CSELISXlarge -> "xlarge"
+        CSELISXxlarge -> "xxlarge"
+
+instance FromJSON CSEListImgSize where
+    parseJSON = parseJSONText "CSEListImgSize"
+
+instance ToJSON CSEListImgSize where
+    toJSON = toJSONText
diff --git a/gen/Network/Google/Resource/Search/CSE/List.hs b/gen/Network/Google/Resource/Search/CSE/List.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/Search/CSE/List.hs
@@ -0,0 +1,504 @@
+{-# 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.Search.CSE.List
+-- Copyright   : (c) 2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns metadata about the search performed, metadata about the custom
+-- search engine used for the search, and the search results.
+--
+-- /See:/ <https://developers.google.com/custom-search/v1/using_rest CustomSearch API Reference> for @search.cse.list@.
+module Network.Google.Resource.Search.CSE.List
+    (
+    -- * REST Resource
+      CSEListResource
+
+    -- * Creating a Request
+    , cSEList
+    , CSEList
+
+    -- * Request Lenses
+    , cselImgDominantColor
+    , cselSiteSearchFilter
+    , cselC2coff
+    , cselOrTerms
+    , cselStart
+    , cselRights
+    , cselExcludeTerms
+    , cselNum
+    , cselFileType
+    , cselSearchType
+    , cselLr
+    , cselQ
+    , cselGooglehost
+    , cselRelatedSite
+    , cselHl
+    , cselCref
+    , cselSort
+    , cselSiteSearch
+    , cselFilter
+    , cselDateRestrict
+    , cselLinkSite
+    , cselLowRange
+    , cselImgType
+    , cselGl
+    , cselCx
+    , cselImgColorType
+    , cselImgSize
+    , cselExactTerms
+    , cselCr
+    , cselSafe
+    , cselHq
+    , cselHighRange
+    ) where
+
+import           Network.Google.CustomSearch.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @search.cse.list@ method which the
+-- 'CSEList' request conforms to.
+type CSEListResource =
+     "customsearch" :>
+       "v1" :>
+         QueryParam "q" Text :>
+           QueryParam "imgDominantColor" CSEListImgDominantColor
+             :>
+             QueryParam "siteSearchFilter" CSEListSiteSearchFilter
+               :>
+               QueryParam "c2coff" Text :>
+                 QueryParam "orTerms" Text :>
+                   QueryParam "start" (Textual Word32) :>
+                     QueryParam "rights" Text :>
+                       QueryParam "excludeTerms" Text :>
+                         QueryParam "num" (Textual Word32) :>
+                           QueryParam "fileType" Text :>
+                             QueryParam "searchType" CSEListSearchType :>
+                               QueryParam "lr" CSEListLr :>
+                                 QueryParam "googlehost" Text :>
+                                   QueryParam "relatedSite" Text :>
+                                     QueryParam "hl" Text :>
+                                       QueryParam "cref" Text :>
+                                         QueryParam "sort" Text :>
+                                           QueryParam "siteSearch" Text :>
+                                             QueryParam "filter" CSEListFilter
+                                               :>
+                                               QueryParam "dateRestrict" Text :>
+                                                 QueryParam "linkSite" Text :>
+                                                   QueryParam "lowRange" Text :>
+                                                     QueryParam "imgType"
+                                                       CSEListImgType
+                                                       :>
+                                                       QueryParam "gl" Text :>
+                                                         QueryParam "cx" Text :>
+                                                           QueryParam
+                                                             "imgColorType"
+                                                             CSEListImgColorType
+                                                             :>
+                                                             QueryParam
+                                                               "imgSize"
+                                                               CSEListImgSize
+                                                               :>
+                                                               QueryParam
+                                                                 "exactTerms"
+                                                                 Text
+                                                                 :>
+                                                                 QueryParam "cr"
+                                                                   Text
+                                                                   :>
+                                                                   QueryParam
+                                                                     "safe"
+                                                                     CSEListSafe
+                                                                     :>
+                                                                     QueryParam
+                                                                       "hq"
+                                                                       Text
+                                                                       :>
+                                                                       QueryParam
+                                                                         "highRange"
+                                                                         Text
+                                                                         :>
+                                                                         QueryParam
+                                                                           "alt"
+                                                                           AltJSON
+                                                                           :>
+                                                                           Get
+                                                                             '[JSON]
+                                                                             Search
+
+-- | Returns metadata about the search performed, metadata about the custom
+-- search engine used for the search, and the search results.
+--
+-- /See:/ 'cSEList' smart constructor.
+data CSEList = CSEList
+    { _cselImgDominantColor :: !(Maybe CSEListImgDominantColor)
+    , _cselSiteSearchFilter :: !(Maybe CSEListSiteSearchFilter)
+    , _cselC2coff           :: !(Maybe Text)
+    , _cselOrTerms          :: !(Maybe Text)
+    , _cselStart            :: !(Maybe (Textual Word32))
+    , _cselRights           :: !(Maybe Text)
+    , _cselExcludeTerms     :: !(Maybe Text)
+    , _cselNum              :: !(Textual Word32)
+    , _cselFileType         :: !(Maybe Text)
+    , _cselSearchType       :: !(Maybe CSEListSearchType)
+    , _cselLr               :: !(Maybe CSEListLr)
+    , _cselQ                :: !Text
+    , _cselGooglehost       :: !(Maybe Text)
+    , _cselRelatedSite      :: !(Maybe Text)
+    , _cselHl               :: !(Maybe Text)
+    , _cselCref             :: !(Maybe Text)
+    , _cselSort             :: !(Maybe Text)
+    , _cselSiteSearch       :: !(Maybe Text)
+    , _cselFilter           :: !(Maybe CSEListFilter)
+    , _cselDateRestrict     :: !(Maybe Text)
+    , _cselLinkSite         :: !(Maybe Text)
+    , _cselLowRange         :: !(Maybe Text)
+    , _cselImgType          :: !(Maybe CSEListImgType)
+    , _cselGl               :: !(Maybe Text)
+    , _cselCx               :: !(Maybe Text)
+    , _cselImgColorType     :: !(Maybe CSEListImgColorType)
+    , _cselImgSize          :: !(Maybe CSEListImgSize)
+    , _cselExactTerms       :: !(Maybe Text)
+    , _cselCr               :: !(Maybe Text)
+    , _cselSafe             :: !CSEListSafe
+    , _cselHq               :: !(Maybe Text)
+    , _cselHighRange        :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CSEList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cselImgDominantColor'
+--
+-- * 'cselSiteSearchFilter'
+--
+-- * 'cselC2coff'
+--
+-- * 'cselOrTerms'
+--
+-- * 'cselStart'
+--
+-- * 'cselRights'
+--
+-- * 'cselExcludeTerms'
+--
+-- * 'cselNum'
+--
+-- * 'cselFileType'
+--
+-- * 'cselSearchType'
+--
+-- * 'cselLr'
+--
+-- * 'cselQ'
+--
+-- * 'cselGooglehost'
+--
+-- * 'cselRelatedSite'
+--
+-- * 'cselHl'
+--
+-- * 'cselCref'
+--
+-- * 'cselSort'
+--
+-- * 'cselSiteSearch'
+--
+-- * 'cselFilter'
+--
+-- * 'cselDateRestrict'
+--
+-- * 'cselLinkSite'
+--
+-- * 'cselLowRange'
+--
+-- * 'cselImgType'
+--
+-- * 'cselGl'
+--
+-- * 'cselCx'
+--
+-- * 'cselImgColorType'
+--
+-- * 'cselImgSize'
+--
+-- * 'cselExactTerms'
+--
+-- * 'cselCr'
+--
+-- * 'cselSafe'
+--
+-- * 'cselHq'
+--
+-- * 'cselHighRange'
+cSEList
+    :: Text -- ^ 'cselQ'
+    -> CSEList
+cSEList pCselQ_ =
+    CSEList
+    { _cselImgDominantColor = Nothing
+    , _cselSiteSearchFilter = Nothing
+    , _cselC2coff = Nothing
+    , _cselOrTerms = Nothing
+    , _cselStart = Nothing
+    , _cselRights = Nothing
+    , _cselExcludeTerms = Nothing
+    , _cselNum = 10
+    , _cselFileType = Nothing
+    , _cselSearchType = Nothing
+    , _cselLr = Nothing
+    , _cselQ = pCselQ_
+    , _cselGooglehost = Nothing
+    , _cselRelatedSite = Nothing
+    , _cselHl = Nothing
+    , _cselCref = Nothing
+    , _cselSort = Nothing
+    , _cselSiteSearch = Nothing
+    , _cselFilter = Nothing
+    , _cselDateRestrict = Nothing
+    , _cselLinkSite = Nothing
+    , _cselLowRange = Nothing
+    , _cselImgType = Nothing
+    , _cselGl = Nothing
+    , _cselCx = Nothing
+    , _cselImgColorType = Nothing
+    , _cselImgSize = Nothing
+    , _cselExactTerms = Nothing
+    , _cselCr = Nothing
+    , _cselSafe = Off
+    , _cselHq = Nothing
+    , _cselHighRange = Nothing
+    }
+
+-- | Returns images of a specific dominant color: yellow, green, teal, blue,
+-- purple, pink, white, gray, black and brown.
+cselImgDominantColor :: Lens' CSEList (Maybe CSEListImgDominantColor)
+cselImgDominantColor
+  = lens _cselImgDominantColor
+      (\ s a -> s{_cselImgDominantColor = a})
+
+-- | Controls whether to include or exclude results from the site named in
+-- the as_sitesearch parameter
+cselSiteSearchFilter :: Lens' CSEList (Maybe CSEListSiteSearchFilter)
+cselSiteSearchFilter
+  = lens _cselSiteSearchFilter
+      (\ s a -> s{_cselSiteSearchFilter = a})
+
+-- | Turns off the translation between zh-CN and zh-TW.
+cselC2coff :: Lens' CSEList (Maybe Text)
+cselC2coff
+  = lens _cselC2coff (\ s a -> s{_cselC2coff = a})
+
+-- | Provides additional search terms to check for in a document, where each
+-- document in the search results must contain at least one of the
+-- additional search terms
+cselOrTerms :: Lens' CSEList (Maybe Text)
+cselOrTerms
+  = lens _cselOrTerms (\ s a -> s{_cselOrTerms = a})
+
+-- | The index of the first result to return
+cselStart :: Lens' CSEList (Maybe Word32)
+cselStart
+  = lens _cselStart (\ s a -> s{_cselStart = a}) .
+      mapping _Coerce
+
+-- | Filters based on licensing. Supported values include: cc_publicdomain,
+-- cc_attribute, cc_sharealike, cc_noncommercial, cc_nonderived and
+-- combinations of these.
+cselRights :: Lens' CSEList (Maybe Text)
+cselRights
+  = lens _cselRights (\ s a -> s{_cselRights = a})
+
+-- | Identifies a word or phrase that should not appear in any documents in
+-- the search results
+cselExcludeTerms :: Lens' CSEList (Maybe Text)
+cselExcludeTerms
+  = lens _cselExcludeTerms
+      (\ s a -> s{_cselExcludeTerms = a})
+
+-- | Number of search results to return
+cselNum :: Lens' CSEList Word32
+cselNum
+  = lens _cselNum (\ s a -> s{_cselNum = a}) . _Coerce
+
+-- | Returns images of a specified type. Some of the allowed values are: bmp,
+-- gif, png, jpg, svg, pdf, ...
+cselFileType :: Lens' CSEList (Maybe Text)
+cselFileType
+  = lens _cselFileType (\ s a -> s{_cselFileType = a})
+
+-- | Specifies the search type: image.
+cselSearchType :: Lens' CSEList (Maybe CSEListSearchType)
+cselSearchType
+  = lens _cselSearchType
+      (\ s a -> s{_cselSearchType = a})
+
+-- | The language restriction for the search results
+cselLr :: Lens' CSEList (Maybe CSEListLr)
+cselLr = lens _cselLr (\ s a -> s{_cselLr = a})
+
+-- | Query
+cselQ :: Lens' CSEList Text
+cselQ = lens _cselQ (\ s a -> s{_cselQ = a})
+
+-- | The local Google domain to use to perform the search.
+cselGooglehost :: Lens' CSEList (Maybe Text)
+cselGooglehost
+  = lens _cselGooglehost
+      (\ s a -> s{_cselGooglehost = a})
+
+-- | Specifies that all search results should be pages that are related to
+-- the specified URL
+cselRelatedSite :: Lens' CSEList (Maybe Text)
+cselRelatedSite
+  = lens _cselRelatedSite
+      (\ s a -> s{_cselRelatedSite = a})
+
+-- | Sets the user interface language.
+cselHl :: Lens' CSEList (Maybe Text)
+cselHl = lens _cselHl (\ s a -> s{_cselHl = a})
+
+-- | The URL of a linked custom search engine
+cselCref :: Lens' CSEList (Maybe Text)
+cselCref = lens _cselCref (\ s a -> s{_cselCref = a})
+
+-- | The sort expression to apply to the results
+cselSort :: Lens' CSEList (Maybe Text)
+cselSort = lens _cselSort (\ s a -> s{_cselSort = a})
+
+-- | Specifies all search results should be pages from a given site
+cselSiteSearch :: Lens' CSEList (Maybe Text)
+cselSiteSearch
+  = lens _cselSiteSearch
+      (\ s a -> s{_cselSiteSearch = a})
+
+-- | Controls turning on or off the duplicate content filter.
+cselFilter :: Lens' CSEList (Maybe CSEListFilter)
+cselFilter
+  = lens _cselFilter (\ s a -> s{_cselFilter = a})
+
+-- | Specifies all search results are from a time period
+cselDateRestrict :: Lens' CSEList (Maybe Text)
+cselDateRestrict
+  = lens _cselDateRestrict
+      (\ s a -> s{_cselDateRestrict = a})
+
+-- | Specifies that all search results should contain a link to a particular
+-- URL
+cselLinkSite :: Lens' CSEList (Maybe Text)
+cselLinkSite
+  = lens _cselLinkSite (\ s a -> s{_cselLinkSite = a})
+
+-- | Creates a range in form as_nlo value..as_nhi value and attempts to
+-- append it to query
+cselLowRange :: Lens' CSEList (Maybe Text)
+cselLowRange
+  = lens _cselLowRange (\ s a -> s{_cselLowRange = a})
+
+-- | Returns images of a type, which can be one of: clipart, face, lineart,
+-- news, and photo.
+cselImgType :: Lens' CSEList (Maybe CSEListImgType)
+cselImgType
+  = lens _cselImgType (\ s a -> s{_cselImgType = a})
+
+-- | Geolocation of end user.
+cselGl :: Lens' CSEList (Maybe Text)
+cselGl = lens _cselGl (\ s a -> s{_cselGl = a})
+
+-- | The custom search engine ID to scope this search query
+cselCx :: Lens' CSEList (Maybe Text)
+cselCx = lens _cselCx (\ s a -> s{_cselCx = a})
+
+-- | Returns black and white, grayscale, or color images: mono, gray, and
+-- color.
+cselImgColorType :: Lens' CSEList (Maybe CSEListImgColorType)
+cselImgColorType
+  = lens _cselImgColorType
+      (\ s a -> s{_cselImgColorType = a})
+
+-- | Returns images of a specified size, where size can be one of: icon,
+-- small, medium, large, xlarge, xxlarge, and huge.
+cselImgSize :: Lens' CSEList (Maybe CSEListImgSize)
+cselImgSize
+  = lens _cselImgSize (\ s a -> s{_cselImgSize = a})
+
+-- | Identifies a phrase that all documents in the search results must
+-- contain
+cselExactTerms :: Lens' CSEList (Maybe Text)
+cselExactTerms
+  = lens _cselExactTerms
+      (\ s a -> s{_cselExactTerms = a})
+
+-- | Country restrict(s).
+cselCr :: Lens' CSEList (Maybe Text)
+cselCr = lens _cselCr (\ s a -> s{_cselCr = a})
+
+-- | Search safety level
+cselSafe :: Lens' CSEList CSEListSafe
+cselSafe = lens _cselSafe (\ s a -> s{_cselSafe = a})
+
+-- | Appends the extra query terms to the query.
+cselHq :: Lens' CSEList (Maybe Text)
+cselHq = lens _cselHq (\ s a -> s{_cselHq = a})
+
+-- | Creates a range in form as_nlo value..as_nhi value and attempts to
+-- append it to query
+cselHighRange :: Lens' CSEList (Maybe Text)
+cselHighRange
+  = lens _cselHighRange
+      (\ s a -> s{_cselHighRange = a})
+
+instance GoogleRequest CSEList where
+        type Rs CSEList = Search
+        requestClient CSEList{..}
+          = go (Just _cselQ) _cselImgDominantColor
+              _cselSiteSearchFilter
+              _cselC2coff
+              _cselOrTerms
+              _cselStart
+              _cselRights
+              _cselExcludeTerms
+              (Just _cselNum)
+              _cselFileType
+              _cselSearchType
+              _cselLr
+              _cselGooglehost
+              _cselRelatedSite
+              _cselHl
+              _cselCref
+              _cselSort
+              _cselSiteSearch
+              _cselFilter
+              _cselDateRestrict
+              _cselLinkSite
+              _cselLowRange
+              _cselImgType
+              _cselGl
+              _cselCx
+              _cselImgColorType
+              _cselImgSize
+              _cselExactTerms
+              _cselCr
+              (Just _cselSafe)
+              _cselHq
+              _cselHighRange
+              (Just AltJSON)
+              customSearchService
+          where go
+                  = buildClient (Proxy :: Proxy CSEListResource) mempty
diff --git a/gogol-customsearch.cabal b/gogol-customsearch.cabal
new file mode 100644
--- /dev/null
+++ b/gogol-customsearch.cabal
@@ -0,0 +1,46 @@
+name:                  gogol-customsearch
+version:               0.0.1
+synopsis:              Google CustomSearch SDK.
+homepage:              https://github.com/brendanhay/gogol
+bug-reports:           https://github.com/brendanhay/gogol/issues
+license:               OtherLicense
+license-file:          LICENSE
+author:                Brendan Hay
+maintainer:            Brendan Hay <brendan.g.hay@gmail.com>
+copyright:             Copyright (c) 2015 Brendan Hay
+category:              Network, Google, Cloud
+build-type:            Simple
+cabal-version:         >= 1.10
+extra-source-files:    README.md
+
+description:
+    Lets you search over a website or collection of websites
+    .
+    /Warning:/ This is an experimental prototype/preview release which is still
+    under exploratory development and not intended for public use, caveat emptor!
+    .
+    This library is compatible with version @v1@
+    of the API.
+
+source-repository head
+    type:     git
+    location: git://github.com/brendanhay/gogol.git
+
+library
+    default-language:  Haskell2010
+    hs-source-dirs:    src gen
+
+    ghc-options:       -Wall
+
+    exposed-modules:
+          Network.Google.CustomSearch
+        , Network.Google.CustomSearch.Types
+        , Network.Google.Resource.Search.CSE.List
+
+    other-modules:
+          Network.Google.CustomSearch.Types.Product
+        , Network.Google.CustomSearch.Types.Sum
+
+    build-depends:
+          gogol-core == 0.0.1.*
+        , base       >= 4.7 && < 5
