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-firebasehosting
+
+* [Version](#version)
+* [Description](#description)
+* [Contribute](#contribute)
+* [Licence](#licence)
+
+
+## Version
+
+`0.3.0`
+
+
+## Description
+
+A client library for the Google Firebase Hosting.
+
+
+## Contribute
+
+For any problems, comments, or feedback please create an issue [here on GitHub](https://github.com/brendanhay/gogol/issues).
+
+> _Note:_ this library is an auto-generated Haskell package. Please see `gogol-gen` for more information.
+
+
+## Licence
+
+`gogol-firebasehosting` 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/FirebaseHosting.hs b/gen/Network/Google/FirebaseHosting.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/FirebaseHosting.hs
@@ -0,0 +1,311 @@
+{-# LANGUAGE DataKinds         #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# LANGUAGE TypeOperators     #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+
+-- |
+-- Module      : Network.Google.FirebaseHosting
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- The Firebase Hosting REST API enables programmatic custom deployment for
+-- releasing versions of your Firebase hosted content and configuration
+-- files.
+--
+-- /See:/ <https://firebase.google.com/docs/hosting/ Firebase Hosting API Reference>
+module Network.Google.FirebaseHosting
+    (
+    -- * Service Configuration
+      firebaseHostingService
+
+    -- * OAuth Scopes
+    , firebaseScope
+    , cloudPlatformReadOnlyScope
+    , cloudPlatformScope
+    , firebaseReadOnlyScope
+
+    -- * API Declaration
+    , FirebaseHostingAPI
+
+    -- * Resources
+
+    -- ** firebasehosting.sites.domains.create
+    , module Network.Google.Resource.FirebaseHosting.Sites.Domains.Create
+
+    -- ** firebasehosting.sites.domains.delete
+    , module Network.Google.Resource.FirebaseHosting.Sites.Domains.Delete
+
+    -- ** firebasehosting.sites.domains.get
+    , module Network.Google.Resource.FirebaseHosting.Sites.Domains.Get
+
+    -- ** firebasehosting.sites.domains.list
+    , module Network.Google.Resource.FirebaseHosting.Sites.Domains.List
+
+    -- ** firebasehosting.sites.domains.update
+    , module Network.Google.Resource.FirebaseHosting.Sites.Domains.Update
+
+    -- ** firebasehosting.sites.getConfig
+    , module Network.Google.Resource.FirebaseHosting.Sites.GetConfig
+
+    -- ** firebasehosting.sites.releases.create
+    , module Network.Google.Resource.FirebaseHosting.Sites.Releases.Create
+
+    -- ** firebasehosting.sites.releases.list
+    , module Network.Google.Resource.FirebaseHosting.Sites.Releases.List
+
+    -- ** firebasehosting.sites.updateConfig
+    , module Network.Google.Resource.FirebaseHosting.Sites.UpdateConfig
+
+    -- ** firebasehosting.sites.versions.create
+    , module Network.Google.Resource.FirebaseHosting.Sites.Versions.Create
+
+    -- ** firebasehosting.sites.versions.delete
+    , module Network.Google.Resource.FirebaseHosting.Sites.Versions.Delete
+
+    -- ** firebasehosting.sites.versions.files.list
+    , module Network.Google.Resource.FirebaseHosting.Sites.Versions.Files.List
+
+    -- ** firebasehosting.sites.versions.patch
+    , module Network.Google.Resource.FirebaseHosting.Sites.Versions.Patch
+
+    -- ** firebasehosting.sites.versions.populateFiles
+    , module Network.Google.Resource.FirebaseHosting.Sites.Versions.PopulateFiles
+
+    -- * Types
+
+    -- ** DomainStatus
+    , DomainStatus (..)
+
+    -- ** DomainProvisioningDNSStatus
+    , DomainProvisioningDNSStatus (..)
+
+    -- ** VersionLabels
+    , VersionLabels
+    , versionLabels
+    , vlAddtional
+
+    -- ** PopulateVersionFilesResponse
+    , PopulateVersionFilesResponse
+    , populateVersionFilesResponse
+    , pvfrUploadURL
+    , pvfrUploadRequiredHashes
+
+    -- ** DomainRedirectType
+    , DomainRedirectType (..)
+
+    -- ** CertDNSChallenge
+    , CertDNSChallenge
+    , certDNSChallenge
+    , cdcToken
+    , cdcDomainName
+
+    -- ** Empty
+    , Empty
+    , empty
+
+    -- ** PopulateVersionFilesRequest
+    , PopulateVersionFilesRequest
+    , populateVersionFilesRequest
+    , pvfrFiles
+
+    -- ** ServingConfigAppAssociation
+    , ServingConfigAppAssociation (..)
+
+    -- ** ServingConfig
+    , ServingConfig
+    , servingConfig
+    , scCleanURLs
+    , scAppAssociation
+    , scRewrites
+    , scRedirects
+    , scHeaders
+    , scTrailingSlashBehavior
+
+    -- ** Domain
+    , Domain
+    , domain
+    , dStatus
+    , dProvisioning
+    , dUpdateTime
+    , dDomainName
+    , dDomainRedirect
+    , dSite
+
+    -- ** ListReleasesResponse
+    , ListReleasesResponse
+    , listReleasesResponse
+    , lrrNextPageToken
+    , lrrReleases
+
+    -- ** VersionStatus
+    , VersionStatus (..)
+
+    -- ** DomainProvisioning
+    , DomainProvisioning
+    , domainProvisioning
+    , dpExpectedIPs
+    , dpCertChallengeDNS
+    , dpDNSFetchTime
+    , dpCertStatus
+    , dpDNSStatus
+    , dpDiscoveredIPs
+    , dpCertChallengeHTTP
+    , dpCertChallengeDiscoveredTxt
+
+    -- ** Release
+    , Release
+    , release
+    , rReleaseTime
+    , rReleaseUser
+    , rName
+    , rVersion
+    , rType
+    , rMessage
+
+    -- ** VersionFile
+    , VersionFile
+    , versionFile
+    , vfStatus
+    , vfHash
+    , vfPath
+
+    -- ** Header
+    , Header
+    , header
+    , hHeaders
+    , hGlob
+
+    -- ** ActingUser
+    , ActingUser
+    , actingUser
+    , auEmail
+    , auImageURL
+
+    -- ** Version
+    , Version
+    , version
+    , vStatus
+    , vFinalizeTime
+    , vConfig
+    , vFileCount
+    , vFinalizeUser
+    , vVersionBytes
+    , vDeleteTime
+    , vName
+    , vLabels
+    , vCreateUser
+    , vDeleteUser
+    , vCreateTime
+
+    -- ** ListDomainsResponse
+    , ListDomainsResponse
+    , listDomainsResponse
+    , ldrNextPageToken
+    , ldrDomains
+
+    -- ** Xgafv
+    , Xgafv (..)
+
+    -- ** Redirect
+    , Redirect
+    , redirect
+    , rLocation
+    , rGlob
+    , rStatusCode
+
+    -- ** DomainRedirect
+    , DomainRedirect
+    , domainRedirect
+    , drDomainName
+    , drType
+
+    -- ** Rewrite
+    , Rewrite
+    , rewrite
+    , rewFunction
+    , rewPath
+    , rewGlob
+    , rewDynamicLinks
+
+    -- ** DomainProvisioningCertStatus
+    , DomainProvisioningCertStatus (..)
+
+    -- ** PopulateVersionFilesRequestFiles
+    , PopulateVersionFilesRequestFiles
+    , populateVersionFilesRequestFiles
+    , pvfrfAddtional
+
+    -- ** VersionFileStatus
+    , VersionFileStatus (..)
+
+    -- ** HeaderHeaders
+    , HeaderHeaders
+    , headerHeaders
+    , hhAddtional
+
+    -- ** CertHTTPChallenge
+    , CertHTTPChallenge
+    , certHTTPChallenge
+    , chttpcPath
+    , chttpcToken
+
+    -- ** ServingConfigTrailingSlashBehavior
+    , ServingConfigTrailingSlashBehavior (..)
+
+    -- ** ListVersionFilesResponse
+    , ListVersionFilesResponse
+    , listVersionFilesResponse
+    , lvfrNextPageToken
+    , lvfrFiles
+
+    -- ** ReleaseType
+    , ReleaseType (..)
+
+    -- ** SiteConfig
+    , SiteConfig
+    , siteConfig
+    , scMaxVersions
+    ) where
+
+import           Network.Google.FirebaseHosting.Types
+import           Network.Google.Prelude
+import           Network.Google.Resource.FirebaseHosting.Sites.Domains.Create
+import           Network.Google.Resource.FirebaseHosting.Sites.Domains.Delete
+import           Network.Google.Resource.FirebaseHosting.Sites.Domains.Get
+import           Network.Google.Resource.FirebaseHosting.Sites.Domains.List
+import           Network.Google.Resource.FirebaseHosting.Sites.Domains.Update
+import           Network.Google.Resource.FirebaseHosting.Sites.GetConfig
+import           Network.Google.Resource.FirebaseHosting.Sites.Releases.Create
+import           Network.Google.Resource.FirebaseHosting.Sites.Releases.List
+import           Network.Google.Resource.FirebaseHosting.Sites.UpdateConfig
+import           Network.Google.Resource.FirebaseHosting.Sites.Versions.Create
+import           Network.Google.Resource.FirebaseHosting.Sites.Versions.Delete
+import           Network.Google.Resource.FirebaseHosting.Sites.Versions.Files.List
+import           Network.Google.Resource.FirebaseHosting.Sites.Versions.Patch
+import           Network.Google.Resource.FirebaseHosting.Sites.Versions.PopulateFiles
+
+{- $resources
+TODO
+-}
+
+-- | Represents the entirety of the methods and resources available for the Firebase Hosting API service.
+type FirebaseHostingAPI =
+     SitesReleasesListResource :<|>
+       SitesReleasesCreateResource
+       :<|> SitesVersionsFilesListResource
+       :<|> SitesVersionsPatchResource
+       :<|> SitesVersionsCreateResource
+       :<|> SitesVersionsPopulateFilesResource
+       :<|> SitesVersionsDeleteResource
+       :<|> SitesDomainsListResource
+       :<|> SitesDomainsGetResource
+       :<|> SitesDomainsCreateResource
+       :<|> SitesDomainsDeleteResource
+       :<|> SitesDomainsUpdateResource
+       :<|> SitesGetConfigResource
+       :<|> SitesUpdateConfigResource
diff --git a/gen/Network/Google/FirebaseHosting/Types.hs b/gen/Network/Google/FirebaseHosting/Types.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/FirebaseHosting/Types.hs
@@ -0,0 +1,247 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- |
+-- Module      : Network.Google.FirebaseHosting.Types
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+module Network.Google.FirebaseHosting.Types
+    (
+    -- * Service Configuration
+      firebaseHostingService
+
+    -- * OAuth Scopes
+    , firebaseScope
+    , cloudPlatformReadOnlyScope
+    , cloudPlatformScope
+    , firebaseReadOnlyScope
+
+    -- * DomainStatus
+    , DomainStatus (..)
+
+    -- * DomainProvisioningDNSStatus
+    , DomainProvisioningDNSStatus (..)
+
+    -- * VersionLabels
+    , VersionLabels
+    , versionLabels
+    , vlAddtional
+
+    -- * PopulateVersionFilesResponse
+    , PopulateVersionFilesResponse
+    , populateVersionFilesResponse
+    , pvfrUploadURL
+    , pvfrUploadRequiredHashes
+
+    -- * DomainRedirectType
+    , DomainRedirectType (..)
+
+    -- * CertDNSChallenge
+    , CertDNSChallenge
+    , certDNSChallenge
+    , cdcToken
+    , cdcDomainName
+
+    -- * Empty
+    , Empty
+    , empty
+
+    -- * PopulateVersionFilesRequest
+    , PopulateVersionFilesRequest
+    , populateVersionFilesRequest
+    , pvfrFiles
+
+    -- * ServingConfigAppAssociation
+    , ServingConfigAppAssociation (..)
+
+    -- * ServingConfig
+    , ServingConfig
+    , servingConfig
+    , scCleanURLs
+    , scAppAssociation
+    , scRewrites
+    , scRedirects
+    , scHeaders
+    , scTrailingSlashBehavior
+
+    -- * Domain
+    , Domain
+    , domain
+    , dStatus
+    , dProvisioning
+    , dUpdateTime
+    , dDomainName
+    , dDomainRedirect
+    , dSite
+
+    -- * ListReleasesResponse
+    , ListReleasesResponse
+    , listReleasesResponse
+    , lrrNextPageToken
+    , lrrReleases
+
+    -- * VersionStatus
+    , VersionStatus (..)
+
+    -- * DomainProvisioning
+    , DomainProvisioning
+    , domainProvisioning
+    , dpExpectedIPs
+    , dpCertChallengeDNS
+    , dpDNSFetchTime
+    , dpCertStatus
+    , dpDNSStatus
+    , dpDiscoveredIPs
+    , dpCertChallengeHTTP
+    , dpCertChallengeDiscoveredTxt
+
+    -- * Release
+    , Release
+    , release
+    , rReleaseTime
+    , rReleaseUser
+    , rName
+    , rVersion
+    , rType
+    , rMessage
+
+    -- * VersionFile
+    , VersionFile
+    , versionFile
+    , vfStatus
+    , vfHash
+    , vfPath
+
+    -- * Header
+    , Header
+    , header
+    , hHeaders
+    , hGlob
+
+    -- * ActingUser
+    , ActingUser
+    , actingUser
+    , auEmail
+    , auImageURL
+
+    -- * Version
+    , Version
+    , version
+    , vStatus
+    , vFinalizeTime
+    , vConfig
+    , vFileCount
+    , vFinalizeUser
+    , vVersionBytes
+    , vDeleteTime
+    , vName
+    , vLabels
+    , vCreateUser
+    , vDeleteUser
+    , vCreateTime
+
+    -- * ListDomainsResponse
+    , ListDomainsResponse
+    , listDomainsResponse
+    , ldrNextPageToken
+    , ldrDomains
+
+    -- * Xgafv
+    , Xgafv (..)
+
+    -- * Redirect
+    , Redirect
+    , redirect
+    , rLocation
+    , rGlob
+    , rStatusCode
+
+    -- * DomainRedirect
+    , DomainRedirect
+    , domainRedirect
+    , drDomainName
+    , drType
+
+    -- * Rewrite
+    , Rewrite
+    , rewrite
+    , rewFunction
+    , rewPath
+    , rewGlob
+    , rewDynamicLinks
+
+    -- * DomainProvisioningCertStatus
+    , DomainProvisioningCertStatus (..)
+
+    -- * PopulateVersionFilesRequestFiles
+    , PopulateVersionFilesRequestFiles
+    , populateVersionFilesRequestFiles
+    , pvfrfAddtional
+
+    -- * VersionFileStatus
+    , VersionFileStatus (..)
+
+    -- * HeaderHeaders
+    , HeaderHeaders
+    , headerHeaders
+    , hhAddtional
+
+    -- * CertHTTPChallenge
+    , CertHTTPChallenge
+    , certHTTPChallenge
+    , chttpcPath
+    , chttpcToken
+
+    -- * ServingConfigTrailingSlashBehavior
+    , ServingConfigTrailingSlashBehavior (..)
+
+    -- * ListVersionFilesResponse
+    , ListVersionFilesResponse
+    , listVersionFilesResponse
+    , lvfrNextPageToken
+    , lvfrFiles
+
+    -- * ReleaseType
+    , ReleaseType (..)
+
+    -- * SiteConfig
+    , SiteConfig
+    , siteConfig
+    , scMaxVersions
+    ) where
+
+import           Network.Google.FirebaseHosting.Types.Product
+import           Network.Google.FirebaseHosting.Types.Sum
+import           Network.Google.Prelude
+
+-- | Default request referring to version 'v1beta1' of the Firebase Hosting API. This contains the host and root path used as a starting point for constructing service requests.
+firebaseHostingService :: ServiceConfig
+firebaseHostingService
+  = defaultService
+      (ServiceId "firebasehosting:v1beta1")
+      "firebasehosting.googleapis.com"
+
+-- | View and administer all your Firebase data and settings
+firebaseScope :: Proxy '["https://www.googleapis.com/auth/firebase"]
+firebaseScope = Proxy;
+
+-- | View your data across Google Cloud Platform services
+cloudPlatformReadOnlyScope :: Proxy '["https://www.googleapis.com/auth/cloud-platform.read-only"]
+cloudPlatformReadOnlyScope = Proxy;
+
+-- | View and manage your data across Google Cloud Platform services
+cloudPlatformScope :: Proxy '["https://www.googleapis.com/auth/cloud-platform"]
+cloudPlatformScope = Proxy;
+
+-- | View all your Firebase data and settings
+firebaseReadOnlyScope :: Proxy '["https://www.googleapis.com/auth/firebase.readonly"]
+firebaseReadOnlyScope = Proxy;
diff --git a/gen/Network/Google/FirebaseHosting/Types/Product.hs b/gen/Network/Google/FirebaseHosting/Types/Product.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/FirebaseHosting/Types/Product.hs
@@ -0,0 +1,1476 @@
+{-# 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.FirebaseHosting.Types.Product
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+module Network.Google.FirebaseHosting.Types.Product where
+
+import           Network.Google.FirebaseHosting.Types.Sum
+import           Network.Google.Prelude
+
+-- | The labels used for extra metadata and\/or filtering.
+--
+-- /See:/ 'versionLabels' smart constructor.
+newtype VersionLabels = VersionLabels'
+    { _vlAddtional :: HashMap Text Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'VersionLabels' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'vlAddtional'
+versionLabels
+    :: HashMap Text Text -- ^ 'vlAddtional'
+    -> VersionLabels
+versionLabels pVlAddtional_ =
+    VersionLabels'
+    { _vlAddtional = _Coerce # pVlAddtional_
+    }
+
+vlAddtional :: Lens' VersionLabels (HashMap Text Text)
+vlAddtional
+  = lens _vlAddtional (\ s a -> s{_vlAddtional = a}) .
+      _Coerce
+
+instance FromJSON VersionLabels where
+        parseJSON
+          = withObject "VersionLabels"
+              (\ o -> VersionLabels' <$> (parseJSONObject o))
+
+instance ToJSON VersionLabels where
+        toJSON = toJSON . _vlAddtional
+
+--
+-- /See:/ 'populateVersionFilesResponse' smart constructor.
+data PopulateVersionFilesResponse = PopulateVersionFilesResponse'
+    { _pvfrUploadURL            :: !(Maybe Text)
+    , _pvfrUploadRequiredHashes :: !(Maybe [Text])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'PopulateVersionFilesResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pvfrUploadURL'
+--
+-- * 'pvfrUploadRequiredHashes'
+populateVersionFilesResponse
+    :: PopulateVersionFilesResponse
+populateVersionFilesResponse =
+    PopulateVersionFilesResponse'
+    { _pvfrUploadURL = Nothing
+    , _pvfrUploadRequiredHashes = Nothing
+    }
+
+-- | The URL to which the files should be uploaded, in the format:
+-- \"https:\/\/upload-firebasehosting.googleapis.com\/upload\/sites\/site-name\/versions\/versionID\/files\".
+-- Perform a multipart \`POST\` of the Gzipped file contents to the URL
+-- using a forward slash and the hash of the file appended to the end.
+pvfrUploadURL :: Lens' PopulateVersionFilesResponse (Maybe Text)
+pvfrUploadURL
+  = lens _pvfrUploadURL
+      (\ s a -> s{_pvfrUploadURL = a})
+
+-- | The content hashes of the specified files that need to be uploaded to
+-- the specified endpoint.
+pvfrUploadRequiredHashes :: Lens' PopulateVersionFilesResponse [Text]
+pvfrUploadRequiredHashes
+  = lens _pvfrUploadRequiredHashes
+      (\ s a -> s{_pvfrUploadRequiredHashes = a})
+      . _Default
+      . _Coerce
+
+instance FromJSON PopulateVersionFilesResponse where
+        parseJSON
+          = withObject "PopulateVersionFilesResponse"
+              (\ o ->
+                 PopulateVersionFilesResponse' <$>
+                   (o .:? "uploadUrl") <*>
+                     (o .:? "uploadRequiredHashes" .!= mempty))
+
+instance ToJSON PopulateVersionFilesResponse where
+        toJSON PopulateVersionFilesResponse'{..}
+          = object
+              (catMaybes
+                 [("uploadUrl" .=) <$> _pvfrUploadURL,
+                  ("uploadRequiredHashes" .=) <$>
+                    _pvfrUploadRequiredHashes])
+
+-- | Represents a DNS certificate challenge.
+--
+-- /See:/ 'certDNSChallenge' smart constructor.
+data CertDNSChallenge = CertDNSChallenge'
+    { _cdcToken      :: !(Maybe Text)
+    , _cdcDomainName :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CertDNSChallenge' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cdcToken'
+--
+-- * 'cdcDomainName'
+certDNSChallenge
+    :: CertDNSChallenge
+certDNSChallenge =
+    CertDNSChallenge'
+    { _cdcToken = Nothing
+    , _cdcDomainName = Nothing
+    }
+
+-- | The value that must be present as a TXT record on the domain name to
+-- satisfy the challenge.
+cdcToken :: Lens' CertDNSChallenge (Maybe Text)
+cdcToken = lens _cdcToken (\ s a -> s{_cdcToken = a})
+
+-- | The domain name upon which the DNS challenge must be satisfied.
+cdcDomainName :: Lens' CertDNSChallenge (Maybe Text)
+cdcDomainName
+  = lens _cdcDomainName
+      (\ s a -> s{_cdcDomainName = a})
+
+instance FromJSON CertDNSChallenge where
+        parseJSON
+          = withObject "CertDNSChallenge"
+              (\ o ->
+                 CertDNSChallenge' <$>
+                   (o .:? "token") <*> (o .:? "domainName"))
+
+instance ToJSON CertDNSChallenge where
+        toJSON CertDNSChallenge'{..}
+          = object
+              (catMaybes
+                 [("token" .=) <$> _cdcToken,
+                  ("domainName" .=) <$> _cdcDomainName])
+
+-- | A generic empty message that you can re-use to avoid defining duplicated
+-- empty messages in your APIs. A typical example is to use it as the
+-- request or the response type of an API method. For instance: service Foo
+-- { rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty); } The
+-- JSON representation for \`Empty\` is empty JSON object \`{}\`.
+--
+-- /See:/ 'empty' smart constructor.
+data Empty =
+    Empty'
+    deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Empty' with the minimum fields required to make a request.
+--
+empty
+    :: Empty
+empty = Empty'
+
+instance FromJSON Empty where
+        parseJSON = withObject "Empty" (\ o -> pure Empty')
+
+instance ToJSON Empty where
+        toJSON = const emptyObject
+
+--
+-- /See:/ 'populateVersionFilesRequest' smart constructor.
+newtype PopulateVersionFilesRequest = PopulateVersionFilesRequest'
+    { _pvfrFiles :: Maybe PopulateVersionFilesRequestFiles
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'PopulateVersionFilesRequest' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pvfrFiles'
+populateVersionFilesRequest
+    :: PopulateVersionFilesRequest
+populateVersionFilesRequest =
+    PopulateVersionFilesRequest'
+    { _pvfrFiles = Nothing
+    }
+
+-- | A set of file paths to the hashes corresponding to assets that should be
+-- added to the version. Note that a file path to an empty hash will remove
+-- the path from the version. Calculate a hash by Gzipping the file then
+-- taking the SHA256 hash of the newly compressed file.
+pvfrFiles :: Lens' PopulateVersionFilesRequest (Maybe PopulateVersionFilesRequestFiles)
+pvfrFiles
+  = lens _pvfrFiles (\ s a -> s{_pvfrFiles = a})
+
+instance FromJSON PopulateVersionFilesRequest where
+        parseJSON
+          = withObject "PopulateVersionFilesRequest"
+              (\ o ->
+                 PopulateVersionFilesRequest' <$> (o .:? "files"))
+
+instance ToJSON PopulateVersionFilesRequest where
+        toJSON PopulateVersionFilesRequest'{..}
+          = object (catMaybes [("files" .=) <$> _pvfrFiles])
+
+-- | The configuration for how incoming requests to a site should be routed
+-- and processed before serving content. The patterns are matched and
+-- applied according to a specific [priority
+-- order](\/docs\/hosting\/full-config#hosting_priority_order).
+--
+-- /See:/ 'servingConfig' smart constructor.
+data ServingConfig = ServingConfig'
+    { _scCleanURLs             :: !(Maybe Bool)
+    , _scAppAssociation        :: !(Maybe ServingConfigAppAssociation)
+    , _scRewrites              :: !(Maybe [Rewrite])
+    , _scRedirects             :: !(Maybe [Redirect])
+    , _scHeaders               :: !(Maybe [Header])
+    , _scTrailingSlashBehavior :: !(Maybe ServingConfigTrailingSlashBehavior)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ServingConfig' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'scCleanURLs'
+--
+-- * 'scAppAssociation'
+--
+-- * 'scRewrites'
+--
+-- * 'scRedirects'
+--
+-- * 'scHeaders'
+--
+-- * 'scTrailingSlashBehavior'
+servingConfig
+    :: ServingConfig
+servingConfig =
+    ServingConfig'
+    { _scCleanURLs = Nothing
+    , _scAppAssociation = Nothing
+    , _scRewrites = Nothing
+    , _scRedirects = Nothing
+    , _scHeaders = Nothing
+    , _scTrailingSlashBehavior = Nothing
+    }
+
+-- | Defines whether to drop the file extension from uploaded files.
+scCleanURLs :: Lens' ServingConfig (Maybe Bool)
+scCleanURLs
+  = lens _scCleanURLs (\ s a -> s{_scCleanURLs = a})
+
+-- | How to handle well known App Association files.
+scAppAssociation :: Lens' ServingConfig (Maybe ServingConfigAppAssociation)
+scAppAssociation
+  = lens _scAppAssociation
+      (\ s a -> s{_scAppAssociation = a})
+
+-- | A list of rewrites that will act as if the service were given the
+-- destination URL.
+scRewrites :: Lens' ServingConfig [Rewrite]
+scRewrites
+  = lens _scRewrites (\ s a -> s{_scRewrites = a}) .
+      _Default
+      . _Coerce
+
+-- | A list of globs that will cause the response to redirect to another
+-- location.
+scRedirects :: Lens' ServingConfig [Redirect]
+scRedirects
+  = lens _scRedirects (\ s a -> s{_scRedirects = a}) .
+      _Default
+      . _Coerce
+
+-- | A list of custom response headers that are added to the content if the
+-- request URL path matches the glob.
+scHeaders :: Lens' ServingConfig [Header]
+scHeaders
+  = lens _scHeaders (\ s a -> s{_scHeaders = a}) .
+      _Default
+      . _Coerce
+
+-- | Defines how to handle a trailing slash in the URL path.
+scTrailingSlashBehavior :: Lens' ServingConfig (Maybe ServingConfigTrailingSlashBehavior)
+scTrailingSlashBehavior
+  = lens _scTrailingSlashBehavior
+      (\ s a -> s{_scTrailingSlashBehavior = a})
+
+instance FromJSON ServingConfig where
+        parseJSON
+          = withObject "ServingConfig"
+              (\ o ->
+                 ServingConfig' <$>
+                   (o .:? "cleanUrls") <*> (o .:? "appAssociation") <*>
+                     (o .:? "rewrites" .!= mempty)
+                     <*> (o .:? "redirects" .!= mempty)
+                     <*> (o .:? "headers" .!= mempty)
+                     <*> (o .:? "trailingSlashBehavior"))
+
+instance ToJSON ServingConfig where
+        toJSON ServingConfig'{..}
+          = object
+              (catMaybes
+                 [("cleanUrls" .=) <$> _scCleanURLs,
+                  ("appAssociation" .=) <$> _scAppAssociation,
+                  ("rewrites" .=) <$> _scRewrites,
+                  ("redirects" .=) <$> _scRedirects,
+                  ("headers" .=) <$> _scHeaders,
+                  ("trailingSlashBehavior" .=) <$>
+                    _scTrailingSlashBehavior])
+
+-- | The intended behavior and status information of a domain.
+--
+-- /See:/ 'domain' smart constructor.
+data Domain = Domain'
+    { _dStatus         :: !(Maybe DomainStatus)
+    , _dProvisioning   :: !(Maybe DomainProvisioning)
+    , _dUpdateTime     :: !(Maybe DateTime')
+    , _dDomainName     :: !(Maybe Text)
+    , _dDomainRedirect :: !(Maybe DomainRedirect)
+    , _dSite           :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Domain' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dStatus'
+--
+-- * 'dProvisioning'
+--
+-- * 'dUpdateTime'
+--
+-- * 'dDomainName'
+--
+-- * 'dDomainRedirect'
+--
+-- * 'dSite'
+domain
+    :: Domain
+domain =
+    Domain'
+    { _dStatus = Nothing
+    , _dProvisioning = Nothing
+    , _dUpdateTime = Nothing
+    , _dDomainName = Nothing
+    , _dDomainRedirect = Nothing
+    , _dSite = Nothing
+    }
+
+-- | Output only. Additional status of the domain association.
+dStatus :: Lens' Domain (Maybe DomainStatus)
+dStatus = lens _dStatus (\ s a -> s{_dStatus = a})
+
+-- | Output only. Information about the provisioning of certificates and the
+-- health of the DNS resolution for the domain.
+dProvisioning :: Lens' Domain (Maybe DomainProvisioning)
+dProvisioning
+  = lens _dProvisioning
+      (\ s a -> s{_dProvisioning = a})
+
+-- | Output only. The time at which the domain was last updated.
+dUpdateTime :: Lens' Domain (Maybe UTCTime)
+dUpdateTime
+  = lens _dUpdateTime (\ s a -> s{_dUpdateTime = a}) .
+      mapping _DateTime
+
+-- | Required. The domain name of the association.
+dDomainName :: Lens' Domain (Maybe Text)
+dDomainName
+  = lens _dDomainName (\ s a -> s{_dDomainName = a})
+
+-- | If set, the domain should redirect with the provided parameters.
+dDomainRedirect :: Lens' Domain (Maybe DomainRedirect)
+dDomainRedirect
+  = lens _dDomainRedirect
+      (\ s a -> s{_dDomainRedirect = a})
+
+-- | Required. The site name of the association.
+dSite :: Lens' Domain (Maybe Text)
+dSite = lens _dSite (\ s a -> s{_dSite = a})
+
+instance FromJSON Domain where
+        parseJSON
+          = withObject "Domain"
+              (\ o ->
+                 Domain' <$>
+                   (o .:? "status") <*> (o .:? "provisioning") <*>
+                     (o .:? "updateTime")
+                     <*> (o .:? "domainName")
+                     <*> (o .:? "domainRedirect")
+                     <*> (o .:? "site"))
+
+instance ToJSON Domain where
+        toJSON Domain'{..}
+          = object
+              (catMaybes
+                 [("status" .=) <$> _dStatus,
+                  ("provisioning" .=) <$> _dProvisioning,
+                  ("updateTime" .=) <$> _dUpdateTime,
+                  ("domainName" .=) <$> _dDomainName,
+                  ("domainRedirect" .=) <$> _dDomainRedirect,
+                  ("site" .=) <$> _dSite])
+
+--
+-- /See:/ 'listReleasesResponse' smart constructor.
+data ListReleasesResponse = ListReleasesResponse'
+    { _lrrNextPageToken :: !(Maybe Text)
+    , _lrrReleases      :: !(Maybe [Release])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ListReleasesResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'lrrNextPageToken'
+--
+-- * 'lrrReleases'
+listReleasesResponse
+    :: ListReleasesResponse
+listReleasesResponse =
+    ListReleasesResponse'
+    { _lrrNextPageToken = Nothing
+    , _lrrReleases = Nothing
+    }
+
+-- | If there are additional releases remaining beyond the ones in this
+-- response, then supply this token in the next
+-- [\`list\`](..\/sites.versions.files\/list) call to continue with the
+-- next set of releases.
+lrrNextPageToken :: Lens' ListReleasesResponse (Maybe Text)
+lrrNextPageToken
+  = lens _lrrNextPageToken
+      (\ s a -> s{_lrrNextPageToken = a})
+
+-- | The list of hashes of files that still need to be uploaded, if any
+-- exist.
+lrrReleases :: Lens' ListReleasesResponse [Release]
+lrrReleases
+  = lens _lrrReleases (\ s a -> s{_lrrReleases = a}) .
+      _Default
+      . _Coerce
+
+instance FromJSON ListReleasesResponse where
+        parseJSON
+          = withObject "ListReleasesResponse"
+              (\ o ->
+                 ListReleasesResponse' <$>
+                   (o .:? "nextPageToken") <*>
+                     (o .:? "releases" .!= mempty))
+
+instance ToJSON ListReleasesResponse where
+        toJSON ListReleasesResponse'{..}
+          = object
+              (catMaybes
+                 [("nextPageToken" .=) <$> _lrrNextPageToken,
+                  ("releases" .=) <$> _lrrReleases])
+
+-- | The current certificate provisioning status information for a domain.
+--
+-- /See:/ 'domainProvisioning' smart constructor.
+data DomainProvisioning = DomainProvisioning'
+    { _dpExpectedIPs                :: !(Maybe [Text])
+    , _dpCertChallengeDNS           :: !(Maybe CertDNSChallenge)
+    , _dpDNSFetchTime               :: !(Maybe DateTime')
+    , _dpCertStatus                 :: !(Maybe DomainProvisioningCertStatus)
+    , _dpDNSStatus                  :: !(Maybe DomainProvisioningDNSStatus)
+    , _dpDiscoveredIPs              :: !(Maybe [Text])
+    , _dpCertChallengeHTTP          :: !(Maybe CertHTTPChallenge)
+    , _dpCertChallengeDiscoveredTxt :: !(Maybe [Text])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DomainProvisioning' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dpExpectedIPs'
+--
+-- * 'dpCertChallengeDNS'
+--
+-- * 'dpDNSFetchTime'
+--
+-- * 'dpCertStatus'
+--
+-- * 'dpDNSStatus'
+--
+-- * 'dpDiscoveredIPs'
+--
+-- * 'dpCertChallengeHTTP'
+--
+-- * 'dpCertChallengeDiscoveredTxt'
+domainProvisioning
+    :: DomainProvisioning
+domainProvisioning =
+    DomainProvisioning'
+    { _dpExpectedIPs = Nothing
+    , _dpCertChallengeDNS = Nothing
+    , _dpDNSFetchTime = Nothing
+    , _dpCertStatus = Nothing
+    , _dpDNSStatus = Nothing
+    , _dpDiscoveredIPs = Nothing
+    , _dpCertChallengeHTTP = Nothing
+    , _dpCertChallengeDiscoveredTxt = Nothing
+    }
+
+-- | The list of IPs to which the domain is expected to resolve.
+dpExpectedIPs :: Lens' DomainProvisioning [Text]
+dpExpectedIPs
+  = lens _dpExpectedIPs
+      (\ s a -> s{_dpExpectedIPs = a})
+      . _Default
+      . _Coerce
+
+-- | The DNS challenge for generating a certificate.
+dpCertChallengeDNS :: Lens' DomainProvisioning (Maybe CertDNSChallenge)
+dpCertChallengeDNS
+  = lens _dpCertChallengeDNS
+      (\ s a -> s{_dpCertChallengeDNS = a})
+
+-- | The time at which the last DNS fetch occurred.
+dpDNSFetchTime :: Lens' DomainProvisioning (Maybe UTCTime)
+dpDNSFetchTime
+  = lens _dpDNSFetchTime
+      (\ s a -> s{_dpDNSFetchTime = a})
+      . mapping _DateTime
+
+-- | The certificate provisioning status; updated when Firebase Hosting
+-- provisions an SSL certificate for the domain.
+dpCertStatus :: Lens' DomainProvisioning (Maybe DomainProvisioningCertStatus)
+dpCertStatus
+  = lens _dpCertStatus (\ s a -> s{_dpCertStatus = a})
+
+-- | The DNS record match status as of the last DNS fetch.
+dpDNSStatus :: Lens' DomainProvisioning (Maybe DomainProvisioningDNSStatus)
+dpDNSStatus
+  = lens _dpDNSStatus (\ s a -> s{_dpDNSStatus = a})
+
+-- | The IPs found at the last DNS fetch.
+dpDiscoveredIPs :: Lens' DomainProvisioning [Text]
+dpDiscoveredIPs
+  = lens _dpDiscoveredIPs
+      (\ s a -> s{_dpDiscoveredIPs = a})
+      . _Default
+      . _Coerce
+
+-- | The HTTP challenge for generating a certificate.
+dpCertChallengeHTTP :: Lens' DomainProvisioning (Maybe CertHTTPChallenge)
+dpCertChallengeHTTP
+  = lens _dpCertChallengeHTTP
+      (\ s a -> s{_dpCertChallengeHTTP = a})
+
+-- | The TXT records (for the certificate challenge) that were found at the
+-- last DNS fetch.
+dpCertChallengeDiscoveredTxt :: Lens' DomainProvisioning [Text]
+dpCertChallengeDiscoveredTxt
+  = lens _dpCertChallengeDiscoveredTxt
+      (\ s a -> s{_dpCertChallengeDiscoveredTxt = a})
+      . _Default
+      . _Coerce
+
+instance FromJSON DomainProvisioning where
+        parseJSON
+          = withObject "DomainProvisioning"
+              (\ o ->
+                 DomainProvisioning' <$>
+                   (o .:? "expectedIps" .!= mempty) <*>
+                     (o .:? "certChallengeDns")
+                     <*> (o .:? "dnsFetchTime")
+                     <*> (o .:? "certStatus")
+                     <*> (o .:? "dnsStatus")
+                     <*> (o .:? "discoveredIps" .!= mempty)
+                     <*> (o .:? "certChallengeHttp")
+                     <*> (o .:? "certChallengeDiscoveredTxt" .!= mempty))
+
+instance ToJSON DomainProvisioning where
+        toJSON DomainProvisioning'{..}
+          = object
+              (catMaybes
+                 [("expectedIps" .=) <$> _dpExpectedIPs,
+                  ("certChallengeDns" .=) <$> _dpCertChallengeDNS,
+                  ("dnsFetchTime" .=) <$> _dpDNSFetchTime,
+                  ("certStatus" .=) <$> _dpCertStatus,
+                  ("dnsStatus" .=) <$> _dpDNSStatus,
+                  ("discoveredIps" .=) <$> _dpDiscoveredIPs,
+                  ("certChallengeHttp" .=) <$> _dpCertChallengeHTTP,
+                  ("certChallengeDiscoveredTxt" .=) <$>
+                    _dpCertChallengeDiscoveredTxt])
+
+-- | A \`Release\` is a particular [collection of configurations and
+-- files](sites.versions) that is set to be public at a particular time.
+--
+-- /See:/ 'release' smart constructor.
+data Release = Release'
+    { _rReleaseTime :: !(Maybe DateTime')
+    , _rReleaseUser :: !(Maybe ActingUser)
+    , _rName        :: !(Maybe Text)
+    , _rVersion     :: !(Maybe Version)
+    , _rType        :: !(Maybe ReleaseType)
+    , _rMessage     :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Release' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'rReleaseTime'
+--
+-- * 'rReleaseUser'
+--
+-- * 'rName'
+--
+-- * 'rVersion'
+--
+-- * 'rType'
+--
+-- * 'rMessage'
+release
+    :: Release
+release =
+    Release'
+    { _rReleaseTime = Nothing
+    , _rReleaseUser = Nothing
+    , _rName = Nothing
+    , _rVersion = Nothing
+    , _rType = Nothing
+    , _rMessage = Nothing
+    }
+
+-- | Output only. The time at which the version is set to be public.
+rReleaseTime :: Lens' Release (Maybe UTCTime)
+rReleaseTime
+  = lens _rReleaseTime (\ s a -> s{_rReleaseTime = a})
+      . mapping _DateTime
+
+-- | Output only. Identifies the user who created the release.
+rReleaseUser :: Lens' Release (Maybe ActingUser)
+rReleaseUser
+  = lens _rReleaseUser (\ s a -> s{_rReleaseUser = a})
+
+-- | Output only. The unique identifier for the release, in the format:
+-- 'sites\/site-name\/releases\/releaseID' This name is provided in the
+-- response body when you call the
+-- [\`CreateRelease\`](sites.releases\/create) endpoint.
+rName :: Lens' Release (Maybe Text)
+rName = lens _rName (\ s a -> s{_rName = a})
+
+-- | Output only. The configuration and content that was released.
+rVersion :: Lens' Release (Maybe Version)
+rVersion = lens _rVersion (\ s a -> s{_rVersion = a})
+
+-- | Explains the reason for the release.
+-- Specify a value for this field only when creating a \`SITE_DISABLE\`
+-- type release.
+rType :: Lens' Release (Maybe ReleaseType)
+rType = lens _rType (\ s a -> s{_rType = a})
+
+-- | The deploy description when the release was created. The value can be up
+-- to 512 characters.
+rMessage :: Lens' Release (Maybe Text)
+rMessage = lens _rMessage (\ s a -> s{_rMessage = a})
+
+instance FromJSON Release where
+        parseJSON
+          = withObject "Release"
+              (\ o ->
+                 Release' <$>
+                   (o .:? "releaseTime") <*> (o .:? "releaseUser") <*>
+                     (o .:? "name")
+                     <*> (o .:? "version")
+                     <*> (o .:? "type")
+                     <*> (o .:? "message"))
+
+instance ToJSON Release where
+        toJSON Release'{..}
+          = object
+              (catMaybes
+                 [("releaseTime" .=) <$> _rReleaseTime,
+                  ("releaseUser" .=) <$> _rReleaseUser,
+                  ("name" .=) <$> _rName, ("version" .=) <$> _rVersion,
+                  ("type" .=) <$> _rType,
+                  ("message" .=) <$> _rMessage])
+
+-- | A static content file that is part of a version.
+--
+-- /See:/ 'versionFile' smart constructor.
+data VersionFile = VersionFile'
+    { _vfStatus :: !(Maybe VersionFileStatus)
+    , _vfHash   :: !(Maybe Text)
+    , _vfPath   :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'VersionFile' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'vfStatus'
+--
+-- * 'vfHash'
+--
+-- * 'vfPath'
+versionFile
+    :: VersionFile
+versionFile =
+    VersionFile'
+    { _vfStatus = Nothing
+    , _vfHash = Nothing
+    , _vfPath = Nothing
+    }
+
+-- | Output only. The current status of a particular file in the specified
+-- version.
+-- The value will be either \`pending upload\` or \`uploaded\`.
+vfStatus :: Lens' VersionFile (Maybe VersionFileStatus)
+vfStatus = lens _vfStatus (\ s a -> s{_vfStatus = a})
+
+-- | The SHA256 content hash of the file.
+vfHash :: Lens' VersionFile (Maybe Text)
+vfHash = lens _vfHash (\ s a -> s{_vfHash = a})
+
+-- | The URI at which the file\'s content should display.
+vfPath :: Lens' VersionFile (Maybe Text)
+vfPath = lens _vfPath (\ s a -> s{_vfPath = a})
+
+instance FromJSON VersionFile where
+        parseJSON
+          = withObject "VersionFile"
+              (\ o ->
+                 VersionFile' <$>
+                   (o .:? "status") <*> (o .:? "hash") <*>
+                     (o .:? "path"))
+
+instance ToJSON VersionFile where
+        toJSON VersionFile'{..}
+          = object
+              (catMaybes
+                 [("status" .=) <$> _vfStatus,
+                  ("hash" .=) <$> _vfHash, ("path" .=) <$> _vfPath])
+
+-- | A [\`header\`](\/docs\/hosting\/full-config#headers) defines custom
+-- headers to add to a response should the request URL path match the
+-- pattern.
+--
+-- /See:/ 'header' smart constructor.
+data Header = Header'
+    { _hHeaders :: !(Maybe HeaderHeaders)
+    , _hGlob    :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Header' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'hHeaders'
+--
+-- * 'hGlob'
+header
+    :: Header
+header =
+    Header'
+    { _hHeaders = Nothing
+    , _hGlob = Nothing
+    }
+
+-- | Required. The additional headers to add to the response.
+hHeaders :: Lens' Header (Maybe HeaderHeaders)
+hHeaders = lens _hHeaders (\ s a -> s{_hHeaders = a})
+
+-- | Required. The user-supplied [glob
+-- pattern](\/docs\/hosting\/full-config#glob_pattern_matching) to match
+-- against the request URL path.
+hGlob :: Lens' Header (Maybe Text)
+hGlob = lens _hGlob (\ s a -> s{_hGlob = a})
+
+instance FromJSON Header where
+        parseJSON
+          = withObject "Header"
+              (\ o ->
+                 Header' <$> (o .:? "headers") <*> (o .:? "glob"))
+
+instance ToJSON Header where
+        toJSON Header'{..}
+          = object
+              (catMaybes
+                 [("headers" .=) <$> _hHeaders,
+                  ("glob" .=) <$> _hGlob])
+
+-- | Contains metadata about the user who performed an action, such as
+-- creating a release or finalizing a version.
+--
+-- /See:/ 'actingUser' smart constructor.
+data ActingUser = ActingUser'
+    { _auEmail    :: !(Maybe Text)
+    , _auImageURL :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ActingUser' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'auEmail'
+--
+-- * 'auImageURL'
+actingUser
+    :: ActingUser
+actingUser =
+    ActingUser'
+    { _auEmail = Nothing
+    , _auImageURL = Nothing
+    }
+
+-- | The email address of the user when the user performed the action.
+auEmail :: Lens' ActingUser (Maybe Text)
+auEmail = lens _auEmail (\ s a -> s{_auEmail = a})
+
+-- | A profile image URL for the user. May not be present if the user has
+-- changed their email address or deleted their account.
+auImageURL :: Lens' ActingUser (Maybe Text)
+auImageURL
+  = lens _auImageURL (\ s a -> s{_auImageURL = a})
+
+instance FromJSON ActingUser where
+        parseJSON
+          = withObject "ActingUser"
+              (\ o ->
+                 ActingUser' <$>
+                   (o .:? "email") <*> (o .:? "imageUrl"))
+
+instance ToJSON ActingUser where
+        toJSON ActingUser'{..}
+          = object
+              (catMaybes
+                 [("email" .=) <$> _auEmail,
+                  ("imageUrl" .=) <$> _auImageURL])
+
+-- | A \`Version\` is the collection of configuration and [static
+-- files](sites.versions.files) that determine how a site is displayed.
+--
+-- /See:/ 'version' smart constructor.
+data Version = Version'
+    { _vStatus       :: !(Maybe VersionStatus)
+    , _vFinalizeTime :: !(Maybe DateTime')
+    , _vConfig       :: !(Maybe ServingConfig)
+    , _vFileCount    :: !(Maybe (Textual Int64))
+    , _vFinalizeUser :: !(Maybe ActingUser)
+    , _vVersionBytes :: !(Maybe (Textual Int64))
+    , _vDeleteTime   :: !(Maybe DateTime')
+    , _vName         :: !(Maybe Text)
+    , _vLabels       :: !(Maybe VersionLabels)
+    , _vCreateUser   :: !(Maybe ActingUser)
+    , _vDeleteUser   :: !(Maybe ActingUser)
+    , _vCreateTime   :: !(Maybe DateTime')
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Version' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'vStatus'
+--
+-- * 'vFinalizeTime'
+--
+-- * 'vConfig'
+--
+-- * 'vFileCount'
+--
+-- * 'vFinalizeUser'
+--
+-- * 'vVersionBytes'
+--
+-- * 'vDeleteTime'
+--
+-- * 'vName'
+--
+-- * 'vLabels'
+--
+-- * 'vCreateUser'
+--
+-- * 'vDeleteUser'
+--
+-- * 'vCreateTime'
+version
+    :: Version
+version =
+    Version'
+    { _vStatus = Nothing
+    , _vFinalizeTime = Nothing
+    , _vConfig = Nothing
+    , _vFileCount = Nothing
+    , _vFinalizeUser = Nothing
+    , _vVersionBytes = Nothing
+    , _vDeleteTime = Nothing
+    , _vName = Nothing
+    , _vLabels = Nothing
+    , _vCreateUser = Nothing
+    , _vDeleteUser = Nothing
+    , _vCreateTime = Nothing
+    }
+
+-- | The deploy status of a version.
+-- For a successful deploy, call the
+-- [\`CreateVersion\`](sites.versions\/create) endpoint to make a new
+-- version (\`CREATED\` status), [upload all desired
+-- files](sites.versions\/populateFiles) to the version, then
+-- [update](sites.versions\/patch) the version to the \`FINALIZED\` status.
+-- Note that if you leave the version in the \`CREATED\` state for more
+-- than 12 hours, the system will automatically mark the version as
+-- \`ABANDONED\`.
+-- You can also change the status of a version to \`DELETED\` by calling
+-- the [\`DeleteVersion\`](sites.versions\/delete) endpoint.
+vStatus :: Lens' Version (Maybe VersionStatus)
+vStatus = lens _vStatus (\ s a -> s{_vStatus = a})
+
+-- | Output only. The time at which the version was \`FINALIZED\`.
+vFinalizeTime :: Lens' Version (Maybe UTCTime)
+vFinalizeTime
+  = lens _vFinalizeTime
+      (\ s a -> s{_vFinalizeTime = a})
+      . mapping _DateTime
+
+-- | The configuration for the behavior of the site. This configuration
+-- exists in the [\`firebase.json\`](\/docs\/cli\/#the_firebasejson_file)
+-- file.
+vConfig :: Lens' Version (Maybe ServingConfig)
+vConfig = lens _vConfig (\ s a -> s{_vConfig = a})
+
+-- | Output only. The total number of files associated with the version.
+-- This value is calculated after a version is \`FINALIZED\`.
+vFileCount :: Lens' Version (Maybe Int64)
+vFileCount
+  = lens _vFileCount (\ s a -> s{_vFileCount = a}) .
+      mapping _Coerce
+
+-- | Output only. Identifies the user who \`FINALIZED\` the version.
+vFinalizeUser :: Lens' Version (Maybe ActingUser)
+vFinalizeUser
+  = lens _vFinalizeUser
+      (\ s a -> s{_vFinalizeUser = a})
+
+-- | Output only. The total stored bytesize of the version.
+-- This value is calculated after a version is \`FINALIZED\`.
+vVersionBytes :: Lens' Version (Maybe Int64)
+vVersionBytes
+  = lens _vVersionBytes
+      (\ s a -> s{_vVersionBytes = a})
+      . mapping _Coerce
+
+-- | Output only. The time at which the version was \`DELETED\`.
+vDeleteTime :: Lens' Version (Maybe UTCTime)
+vDeleteTime
+  = lens _vDeleteTime (\ s a -> s{_vDeleteTime = a}) .
+      mapping _DateTime
+
+-- | The unique identifier for a version, in the format:
+-- 'sites\/site-name\/versions\/versionID' This name is provided in the
+-- response body when you call the
+-- [\`CreateVersion\`](..\/sites.versions\/create) endpoint.
+vName :: Lens' Version (Maybe Text)
+vName = lens _vName (\ s a -> s{_vName = a})
+
+-- | The labels used for extra metadata and\/or filtering.
+vLabels :: Lens' Version (Maybe VersionLabels)
+vLabels = lens _vLabels (\ s a -> s{_vLabels = a})
+
+-- | Output only. Identifies the user who created the version.
+vCreateUser :: Lens' Version (Maybe ActingUser)
+vCreateUser
+  = lens _vCreateUser (\ s a -> s{_vCreateUser = a})
+
+-- | Output only. Identifies the user who \`DELETED\` the version.
+vDeleteUser :: Lens' Version (Maybe ActingUser)
+vDeleteUser
+  = lens _vDeleteUser (\ s a -> s{_vDeleteUser = a})
+
+-- | Output only. The time at which the version was created.
+vCreateTime :: Lens' Version (Maybe UTCTime)
+vCreateTime
+  = lens _vCreateTime (\ s a -> s{_vCreateTime = a}) .
+      mapping _DateTime
+
+instance FromJSON Version where
+        parseJSON
+          = withObject "Version"
+              (\ o ->
+                 Version' <$>
+                   (o .:? "status") <*> (o .:? "finalizeTime") <*>
+                     (o .:? "config")
+                     <*> (o .:? "fileCount")
+                     <*> (o .:? "finalizeUser")
+                     <*> (o .:? "versionBytes")
+                     <*> (o .:? "deleteTime")
+                     <*> (o .:? "name")
+                     <*> (o .:? "labels")
+                     <*> (o .:? "createUser")
+                     <*> (o .:? "deleteUser")
+                     <*> (o .:? "createTime"))
+
+instance ToJSON Version where
+        toJSON Version'{..}
+          = object
+              (catMaybes
+                 [("status" .=) <$> _vStatus,
+                  ("finalizeTime" .=) <$> _vFinalizeTime,
+                  ("config" .=) <$> _vConfig,
+                  ("fileCount" .=) <$> _vFileCount,
+                  ("finalizeUser" .=) <$> _vFinalizeUser,
+                  ("versionBytes" .=) <$> _vVersionBytes,
+                  ("deleteTime" .=) <$> _vDeleteTime,
+                  ("name" .=) <$> _vName, ("labels" .=) <$> _vLabels,
+                  ("createUser" .=) <$> _vCreateUser,
+                  ("deleteUser" .=) <$> _vDeleteUser,
+                  ("createTime" .=) <$> _vCreateTime])
+
+--
+-- /See:/ 'listDomainsResponse' smart constructor.
+data ListDomainsResponse = ListDomainsResponse'
+    { _ldrNextPageToken :: !(Maybe Text)
+    , _ldrDomains       :: !(Maybe [Domain])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ListDomainsResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ldrNextPageToken'
+--
+-- * 'ldrDomains'
+listDomainsResponse
+    :: ListDomainsResponse
+listDomainsResponse =
+    ListDomainsResponse'
+    { _ldrNextPageToken = Nothing
+    , _ldrDomains = Nothing
+    }
+
+-- | The pagination token, if more results exist.
+ldrNextPageToken :: Lens' ListDomainsResponse (Maybe Text)
+ldrNextPageToken
+  = lens _ldrNextPageToken
+      (\ s a -> s{_ldrNextPageToken = a})
+
+-- | The list of domains, if any exist.
+ldrDomains :: Lens' ListDomainsResponse [Domain]
+ldrDomains
+  = lens _ldrDomains (\ s a -> s{_ldrDomains = a}) .
+      _Default
+      . _Coerce
+
+instance FromJSON ListDomainsResponse where
+        parseJSON
+          = withObject "ListDomainsResponse"
+              (\ o ->
+                 ListDomainsResponse' <$>
+                   (o .:? "nextPageToken") <*>
+                     (o .:? "domains" .!= mempty))
+
+instance ToJSON ListDomainsResponse where
+        toJSON ListDomainsResponse'{..}
+          = object
+              (catMaybes
+                 [("nextPageToken" .=) <$> _ldrNextPageToken,
+                  ("domains" .=) <$> _ldrDomains])
+
+-- | A [\`redirect\`](\/docs\/hosting\/full-config#redirects) represents the
+-- configuration for returning an HTTP redirect response given a matching
+-- request URL path.
+--
+-- /See:/ 'redirect' smart constructor.
+data Redirect = Redirect'
+    { _rLocation   :: !(Maybe Text)
+    , _rGlob       :: !(Maybe Text)
+    , _rStatusCode :: !(Maybe (Textual Int32))
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Redirect' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'rLocation'
+--
+-- * 'rGlob'
+--
+-- * 'rStatusCode'
+redirect
+    :: Redirect
+redirect =
+    Redirect'
+    { _rLocation = Nothing
+    , _rGlob = Nothing
+    , _rStatusCode = Nothing
+    }
+
+-- | Required. The value to put in the HTTP location header of the response.
+-- The location can contain capture group values from the pattern using a
+-- \`:\` prefix to identify the segment and an optional \`*\` to capture
+-- the rest of the URL. For example:
+-- '\"glob\": \"\/:capture*\", \"statusCode\": 301, \"location\": \"https:\/\/example.com\/foo\/:capture\"'
+rLocation :: Lens' Redirect (Maybe Text)
+rLocation
+  = lens _rLocation (\ s a -> s{_rLocation = a})
+
+-- | Required. The user-supplied [glob
+-- pattern](\/docs\/hosting\/full-config#glob_pattern_matching) to match
+-- against the request URL path.
+rGlob :: Lens' Redirect (Maybe Text)
+rGlob = lens _rGlob (\ s a -> s{_rGlob = a})
+
+-- | Required. The status HTTP code to return in the response. It must be a
+-- valid 3xx status code.
+rStatusCode :: Lens' Redirect (Maybe Int32)
+rStatusCode
+  = lens _rStatusCode (\ s a -> s{_rStatusCode = a}) .
+      mapping _Coerce
+
+instance FromJSON Redirect where
+        parseJSON
+          = withObject "Redirect"
+              (\ o ->
+                 Redirect' <$>
+                   (o .:? "location") <*> (o .:? "glob") <*>
+                     (o .:? "statusCode"))
+
+instance ToJSON Redirect where
+        toJSON Redirect'{..}
+          = object
+              (catMaybes
+                 [("location" .=) <$> _rLocation,
+                  ("glob" .=) <$> _rGlob,
+                  ("statusCode" .=) <$> _rStatusCode])
+
+-- | Defines the behavior of a domain-level redirect. Domain redirects
+-- preserve the path of the redirect but replace the requested domain with
+-- the one specified in the redirect configuration.
+--
+-- /See:/ 'domainRedirect' smart constructor.
+data DomainRedirect = DomainRedirect'
+    { _drDomainName :: !(Maybe Text)
+    , _drType       :: !(Maybe DomainRedirectType)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DomainRedirect' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'drDomainName'
+--
+-- * 'drType'
+domainRedirect
+    :: DomainRedirect
+domainRedirect =
+    DomainRedirect'
+    { _drDomainName = Nothing
+    , _drType = Nothing
+    }
+
+-- | Required. The domain name to redirect to.
+drDomainName :: Lens' DomainRedirect (Maybe Text)
+drDomainName
+  = lens _drDomainName (\ s a -> s{_drDomainName = a})
+
+-- | Required. The redirect status code.
+drType :: Lens' DomainRedirect (Maybe DomainRedirectType)
+drType = lens _drType (\ s a -> s{_drType = a})
+
+instance FromJSON DomainRedirect where
+        parseJSON
+          = withObject "DomainRedirect"
+              (\ o ->
+                 DomainRedirect' <$>
+                   (o .:? "domainName") <*> (o .:? "type"))
+
+instance ToJSON DomainRedirect where
+        toJSON DomainRedirect'{..}
+          = object
+              (catMaybes
+                 [("domainName" .=) <$> _drDomainName,
+                  ("type" .=) <$> _drType])
+
+-- | A [\`rewrite\`](\/docs\/hosting\/full-config#rewrites) represents an
+-- internal content rewrite on the version. If the pattern matches, the
+-- request will be handled as if it were to the destination path specified
+-- in the configuration.
+--
+-- /See:/ 'rewrite' smart constructor.
+data Rewrite = Rewrite'
+    { _rewFunction     :: !(Maybe Text)
+    , _rewPath         :: !(Maybe Text)
+    , _rewGlob         :: !(Maybe Text)
+    , _rewDynamicLinks :: !(Maybe Bool)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Rewrite' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'rewFunction'
+--
+-- * 'rewPath'
+--
+-- * 'rewGlob'
+--
+-- * 'rewDynamicLinks'
+rewrite
+    :: Rewrite
+rewrite =
+    Rewrite'
+    { _rewFunction = Nothing
+    , _rewPath = Nothing
+    , _rewGlob = Nothing
+    , _rewDynamicLinks = Nothing
+    }
+
+-- | The function to proxy requests to. Must match the exported function name
+-- exactly.
+rewFunction :: Lens' Rewrite (Maybe Text)
+rewFunction
+  = lens _rewFunction (\ s a -> s{_rewFunction = a})
+
+-- | The URL path to rewrite the request to.
+rewPath :: Lens' Rewrite (Maybe Text)
+rewPath = lens _rewPath (\ s a -> s{_rewPath = a})
+
+-- | Required. The user-supplied [glob
+-- pattern](\/docs\/hosting\/full-config#glob_pattern_matching) to match
+-- against the request URL path.
+rewGlob :: Lens' Rewrite (Maybe Text)
+rewGlob = lens _rewGlob (\ s a -> s{_rewGlob = a})
+
+-- | The request will be forwarded to Firebase Dynamic Links.
+rewDynamicLinks :: Lens' Rewrite (Maybe Bool)
+rewDynamicLinks
+  = lens _rewDynamicLinks
+      (\ s a -> s{_rewDynamicLinks = a})
+
+instance FromJSON Rewrite where
+        parseJSON
+          = withObject "Rewrite"
+              (\ o ->
+                 Rewrite' <$>
+                   (o .:? "function") <*> (o .:? "path") <*>
+                     (o .:? "glob")
+                     <*> (o .:? "dynamicLinks"))
+
+instance ToJSON Rewrite where
+        toJSON Rewrite'{..}
+          = object
+              (catMaybes
+                 [("function" .=) <$> _rewFunction,
+                  ("path" .=) <$> _rewPath, ("glob" .=) <$> _rewGlob,
+                  ("dynamicLinks" .=) <$> _rewDynamicLinks])
+
+-- | A set of file paths to the hashes corresponding to assets that should be
+-- added to the version. Note that a file path to an empty hash will remove
+-- the path from the version. Calculate a hash by Gzipping the file then
+-- taking the SHA256 hash of the newly compressed file.
+--
+-- /See:/ 'populateVersionFilesRequestFiles' smart constructor.
+newtype PopulateVersionFilesRequestFiles = PopulateVersionFilesRequestFiles'
+    { _pvfrfAddtional :: HashMap Text Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'PopulateVersionFilesRequestFiles' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pvfrfAddtional'
+populateVersionFilesRequestFiles
+    :: HashMap Text Text -- ^ 'pvfrfAddtional'
+    -> PopulateVersionFilesRequestFiles
+populateVersionFilesRequestFiles pPvfrfAddtional_ =
+    PopulateVersionFilesRequestFiles'
+    { _pvfrfAddtional = _Coerce # pPvfrfAddtional_
+    }
+
+pvfrfAddtional :: Lens' PopulateVersionFilesRequestFiles (HashMap Text Text)
+pvfrfAddtional
+  = lens _pvfrfAddtional
+      (\ s a -> s{_pvfrfAddtional = a})
+      . _Coerce
+
+instance FromJSON PopulateVersionFilesRequestFiles
+         where
+        parseJSON
+          = withObject "PopulateVersionFilesRequestFiles"
+              (\ o ->
+                 PopulateVersionFilesRequestFiles' <$>
+                   (parseJSONObject o))
+
+instance ToJSON PopulateVersionFilesRequestFiles
+         where
+        toJSON = toJSON . _pvfrfAddtional
+
+-- | Required. The additional headers to add to the response.
+--
+-- /See:/ 'headerHeaders' smart constructor.
+newtype HeaderHeaders = HeaderHeaders'
+    { _hhAddtional :: HashMap Text Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'HeaderHeaders' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'hhAddtional'
+headerHeaders
+    :: HashMap Text Text -- ^ 'hhAddtional'
+    -> HeaderHeaders
+headerHeaders pHhAddtional_ =
+    HeaderHeaders'
+    { _hhAddtional = _Coerce # pHhAddtional_
+    }
+
+hhAddtional :: Lens' HeaderHeaders (HashMap Text Text)
+hhAddtional
+  = lens _hhAddtional (\ s a -> s{_hhAddtional = a}) .
+      _Coerce
+
+instance FromJSON HeaderHeaders where
+        parseJSON
+          = withObject "HeaderHeaders"
+              (\ o -> HeaderHeaders' <$> (parseJSONObject o))
+
+instance ToJSON HeaderHeaders where
+        toJSON = toJSON . _hhAddtional
+
+-- | Represents an HTTP certificate challenge.
+--
+-- /See:/ 'certHTTPChallenge' smart constructor.
+data CertHTTPChallenge = CertHTTPChallenge'
+    { _chttpcPath  :: !(Maybe Text)
+    , _chttpcToken :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CertHTTPChallenge' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'chttpcPath'
+--
+-- * 'chttpcToken'
+certHTTPChallenge
+    :: CertHTTPChallenge
+certHTTPChallenge =
+    CertHTTPChallenge'
+    { _chttpcPath = Nothing
+    , _chttpcToken = Nothing
+    }
+
+-- | The URL path on which to serve the specified token to satisfy the
+-- certificate challenge.
+chttpcPath :: Lens' CertHTTPChallenge (Maybe Text)
+chttpcPath
+  = lens _chttpcPath (\ s a -> s{_chttpcPath = a})
+
+-- | The token to serve at the specified URL path to satisfy the certificate
+-- challenge.
+chttpcToken :: Lens' CertHTTPChallenge (Maybe Text)
+chttpcToken
+  = lens _chttpcToken (\ s a -> s{_chttpcToken = a})
+
+instance FromJSON CertHTTPChallenge where
+        parseJSON
+          = withObject "CertHTTPChallenge"
+              (\ o ->
+                 CertHTTPChallenge' <$>
+                   (o .:? "path") <*> (o .:? "token"))
+
+instance ToJSON CertHTTPChallenge where
+        toJSON CertHTTPChallenge'{..}
+          = object
+              (catMaybes
+                 [("path" .=) <$> _chttpcPath,
+                  ("token" .=) <$> _chttpcToken])
+
+--
+-- /See:/ 'listVersionFilesResponse' smart constructor.
+data ListVersionFilesResponse = ListVersionFilesResponse'
+    { _lvfrNextPageToken :: !(Maybe Text)
+    , _lvfrFiles         :: !(Maybe [VersionFile])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ListVersionFilesResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'lvfrNextPageToken'
+--
+-- * 'lvfrFiles'
+listVersionFilesResponse
+    :: ListVersionFilesResponse
+listVersionFilesResponse =
+    ListVersionFilesResponse'
+    { _lvfrNextPageToken = Nothing
+    , _lvfrFiles = Nothing
+    }
+
+-- | The pagination token, if more results exist.
+lvfrNextPageToken :: Lens' ListVersionFilesResponse (Maybe Text)
+lvfrNextPageToken
+  = lens _lvfrNextPageToken
+      (\ s a -> s{_lvfrNextPageToken = a})
+
+-- | The list path\/hashes in the specified version.
+lvfrFiles :: Lens' ListVersionFilesResponse [VersionFile]
+lvfrFiles
+  = lens _lvfrFiles (\ s a -> s{_lvfrFiles = a}) .
+      _Default
+      . _Coerce
+
+instance FromJSON ListVersionFilesResponse where
+        parseJSON
+          = withObject "ListVersionFilesResponse"
+              (\ o ->
+                 ListVersionFilesResponse' <$>
+                   (o .:? "nextPageToken") <*>
+                     (o .:? "files" .!= mempty))
+
+instance ToJSON ListVersionFilesResponse where
+        toJSON ListVersionFilesResponse'{..}
+          = object
+              (catMaybes
+                 [("nextPageToken" .=) <$> _lvfrNextPageToken,
+                  ("files" .=) <$> _lvfrFiles])
+
+-- | A \`SiteConfig\` contains metadata associated with a specific site that
+-- controls Firebase Hosting serving behavior
+--
+-- /See:/ 'siteConfig' smart constructor.
+newtype SiteConfig = SiteConfig'
+    { _scMaxVersions :: Maybe (Textual Int64)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'SiteConfig' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'scMaxVersions'
+siteConfig
+    :: SiteConfig
+siteConfig =
+    SiteConfig'
+    { _scMaxVersions = Nothing
+    }
+
+-- | The number of FINALIZED versions that will be held for a site before
+-- automatic deletion. When a new version is deployed, content for versions
+-- in storage in excess of this number will be deleted, and will no longer
+-- be billed for storage usage. Oldest versions will be deleted first;
+-- sites are created with an unlimited number of max_versions by default.
+scMaxVersions :: Lens' SiteConfig (Maybe Int64)
+scMaxVersions
+  = lens _scMaxVersions
+      (\ s a -> s{_scMaxVersions = a})
+      . mapping _Coerce
+
+instance FromJSON SiteConfig where
+        parseJSON
+          = withObject "SiteConfig"
+              (\ o -> SiteConfig' <$> (o .:? "maxVersions"))
+
+instance ToJSON SiteConfig where
+        toJSON SiteConfig'{..}
+          = object
+              (catMaybes [("maxVersions" .=) <$> _scMaxVersions])
diff --git a/gen/Network/Google/FirebaseHosting/Types/Sum.hs b/gen/Network/Google/FirebaseHosting/Types/Sum.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/FirebaseHosting/Types/Sum.hs
@@ -0,0 +1,445 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE LambdaCase         #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- |
+-- Module      : Network.Google.FirebaseHosting.Types.Sum
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+module Network.Google.FirebaseHosting.Types.Sum where
+
+import           Network.Google.Prelude hiding (Bytes)
+
+-- | Output only. Additional status of the domain association.
+data DomainStatus
+    = DomainStatusUnspecified
+      -- ^ @DOMAIN_STATUS_UNSPECIFIED@
+      -- Unspecified domain association status.
+    | DomainChangePending
+      -- ^ @DOMAIN_CHANGE_PENDING@
+      -- An operation is in progress on the domain association and no further
+      -- operations can be performed until it is complete.
+    | DomainActive
+      -- ^ @DOMAIN_ACTIVE@
+      -- The domain association is active and no additional action is required.
+    | DomainVerificationRequired
+      -- ^ @DOMAIN_VERIFICATION_REQUIRED@
+      -- The domain was previously verified in the legacy system. User must
+      -- reverify the domain through the ownership service.
+    | DomainVerificationLost
+      -- ^ @DOMAIN_VERIFICATION_LOST@
+      -- The domain verification has been lost and the domain is in the grace
+      -- period before being removed from the Firebase Hosting site.
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable DomainStatus
+
+instance FromHttpApiData DomainStatus where
+    parseQueryParam = \case
+        "DOMAIN_STATUS_UNSPECIFIED" -> Right DomainStatusUnspecified
+        "DOMAIN_CHANGE_PENDING" -> Right DomainChangePending
+        "DOMAIN_ACTIVE" -> Right DomainActive
+        "DOMAIN_VERIFICATION_REQUIRED" -> Right DomainVerificationRequired
+        "DOMAIN_VERIFICATION_LOST" -> Right DomainVerificationLost
+        x -> Left ("Unable to parse DomainStatus from: " <> x)
+
+instance ToHttpApiData DomainStatus where
+    toQueryParam = \case
+        DomainStatusUnspecified -> "DOMAIN_STATUS_UNSPECIFIED"
+        DomainChangePending -> "DOMAIN_CHANGE_PENDING"
+        DomainActive -> "DOMAIN_ACTIVE"
+        DomainVerificationRequired -> "DOMAIN_VERIFICATION_REQUIRED"
+        DomainVerificationLost -> "DOMAIN_VERIFICATION_LOST"
+
+instance FromJSON DomainStatus where
+    parseJSON = parseJSONText "DomainStatus"
+
+instance ToJSON DomainStatus where
+    toJSON = toJSONText
+
+-- | The DNS record match status as of the last DNS fetch.
+data DomainProvisioningDNSStatus
+    = DNSStatusUnspecified
+      -- ^ @DNS_STATUS_UNSPECIFIED@
+      -- Unspecified DNS status.
+    | DNSPending
+      -- ^ @DNS_PENDING@
+      -- No DNS records have been specified for this domain yet.
+    | DNSMissing
+      -- ^ @DNS_MISSING@
+      -- None of the required DNS records have been detected on the domain.
+    | DNSPartialMatch
+      -- ^ @DNS_PARTIAL_MATCH@
+      -- Some of the required DNS records were detected, but not all of them. No
+      -- extra (non-required) DNS records were detected.
+    | DNSMatch
+      -- ^ @DNS_MATCH@
+      -- All required DNS records were detected. No extra (non-required) DNS
+      -- records were detected.
+    | DNSExtraneousMatch
+      -- ^ @DNS_EXTRANEOUS_MATCH@
+      -- The domain has at least one of the required DNS records, and it has at
+      -- least one extra (non-required) DNS record.
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable DomainProvisioningDNSStatus
+
+instance FromHttpApiData DomainProvisioningDNSStatus where
+    parseQueryParam = \case
+        "DNS_STATUS_UNSPECIFIED" -> Right DNSStatusUnspecified
+        "DNS_PENDING" -> Right DNSPending
+        "DNS_MISSING" -> Right DNSMissing
+        "DNS_PARTIAL_MATCH" -> Right DNSPartialMatch
+        "DNS_MATCH" -> Right DNSMatch
+        "DNS_EXTRANEOUS_MATCH" -> Right DNSExtraneousMatch
+        x -> Left ("Unable to parse DomainProvisioningDNSStatus from: " <> x)
+
+instance ToHttpApiData DomainProvisioningDNSStatus where
+    toQueryParam = \case
+        DNSStatusUnspecified -> "DNS_STATUS_UNSPECIFIED"
+        DNSPending -> "DNS_PENDING"
+        DNSMissing -> "DNS_MISSING"
+        DNSPartialMatch -> "DNS_PARTIAL_MATCH"
+        DNSMatch -> "DNS_MATCH"
+        DNSExtraneousMatch -> "DNS_EXTRANEOUS_MATCH"
+
+instance FromJSON DomainProvisioningDNSStatus where
+    parseJSON = parseJSONText "DomainProvisioningDNSStatus"
+
+instance ToJSON DomainProvisioningDNSStatus where
+    toJSON = toJSONText
+
+-- | Required. The redirect status code.
+data DomainRedirectType
+    = RedirectTypeUnspecified
+      -- ^ @REDIRECT_TYPE_UNSPECIFIED@
+      -- The default redirect type; should not be intentionlly used.
+    | MovedPermanently
+      -- ^ @MOVED_PERMANENTLY@
+      -- The redirect will respond with an HTTP status code of \`301 Moved
+      -- Permanently\`.
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable DomainRedirectType
+
+instance FromHttpApiData DomainRedirectType where
+    parseQueryParam = \case
+        "REDIRECT_TYPE_UNSPECIFIED" -> Right RedirectTypeUnspecified
+        "MOVED_PERMANENTLY" -> Right MovedPermanently
+        x -> Left ("Unable to parse DomainRedirectType from: " <> x)
+
+instance ToHttpApiData DomainRedirectType where
+    toQueryParam = \case
+        RedirectTypeUnspecified -> "REDIRECT_TYPE_UNSPECIFIED"
+        MovedPermanently -> "MOVED_PERMANENTLY"
+
+instance FromJSON DomainRedirectType where
+    parseJSON = parseJSONText "DomainRedirectType"
+
+instance ToJSON DomainRedirectType where
+    toJSON = toJSONText
+
+-- | How to handle well known App Association files.
+data ServingConfigAppAssociation
+    = Auto
+      -- ^ @AUTO@
+      -- The app association files will be automattically created from the apps
+      -- that exist in the Firebase project.
+    | None
+      -- ^ @NONE@
+      -- No special handling of the app association files will occur, these paths
+      -- will result in a 404 unless caught with a Rewrite.
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable ServingConfigAppAssociation
+
+instance FromHttpApiData ServingConfigAppAssociation where
+    parseQueryParam = \case
+        "AUTO" -> Right Auto
+        "NONE" -> Right None
+        x -> Left ("Unable to parse ServingConfigAppAssociation from: " <> x)
+
+instance ToHttpApiData ServingConfigAppAssociation where
+    toQueryParam = \case
+        Auto -> "AUTO"
+        None -> "NONE"
+
+instance FromJSON ServingConfigAppAssociation where
+    parseJSON = parseJSONText "ServingConfigAppAssociation"
+
+instance ToJSON ServingConfigAppAssociation where
+    toJSON = toJSONText
+
+-- | The deploy status of a version.
+-- For a successful deploy, call the
+-- [\`CreateVersion\`](sites.versions\/create) endpoint to make a new
+-- version (\`CREATED\` status), [upload all desired
+-- files](sites.versions\/populateFiles) to the version, then
+-- [update](sites.versions\/patch) the version to the \`FINALIZED\` status.
+-- Note that if you leave the version in the \`CREATED\` state for more
+-- than 12 hours, the system will automatically mark the version as
+-- \`ABANDONED\`.
+-- You can also change the status of a version to \`DELETED\` by calling
+-- the [\`DeleteVersion\`](sites.versions\/delete) endpoint.
+data VersionStatus
+    = VersionStatusUnspecified
+      -- ^ @VERSION_STATUS_UNSPECIFIED@
+      -- The default status; should not be intentionally used.
+    | Created
+      -- ^ @CREATED@
+      -- The version has been created, and content is currently being added to
+      -- the version.
+    | Finalized
+      -- ^ @FINALIZED@
+      -- All content has been added to the version, and the version can no longer
+      -- be changed.
+    | Deleted
+      -- ^ @DELETED@
+      -- The version has been deleted.
+    | Abandoned
+      -- ^ @ABANDONED@
+      -- The version was not updated to \`FINALIZED\` within 12 hours and was
+      -- automatically deleted.
+    | Expired
+      -- ^ @EXPIRED@
+      -- The version has fallen out of the site-configured retention window and
+      -- its associated files in GCS have been\/been scheduled for deletion.
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable VersionStatus
+
+instance FromHttpApiData VersionStatus where
+    parseQueryParam = \case
+        "VERSION_STATUS_UNSPECIFIED" -> Right VersionStatusUnspecified
+        "CREATED" -> Right Created
+        "FINALIZED" -> Right Finalized
+        "DELETED" -> Right Deleted
+        "ABANDONED" -> Right Abandoned
+        "EXPIRED" -> Right Expired
+        x -> Left ("Unable to parse VersionStatus from: " <> x)
+
+instance ToHttpApiData VersionStatus where
+    toQueryParam = \case
+        VersionStatusUnspecified -> "VERSION_STATUS_UNSPECIFIED"
+        Created -> "CREATED"
+        Finalized -> "FINALIZED"
+        Deleted -> "DELETED"
+        Abandoned -> "ABANDONED"
+        Expired -> "EXPIRED"
+
+instance FromJSON VersionStatus where
+    parseJSON = parseJSONText "VersionStatus"
+
+instance ToJSON VersionStatus where
+    toJSON = toJSONText
+
+-- | V1 error format.
+data Xgafv
+    = X1
+      -- ^ @1@
+      -- v1 error format
+    | X2
+      -- ^ @2@
+      -- v2 error format
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable Xgafv
+
+instance FromHttpApiData Xgafv where
+    parseQueryParam = \case
+        "1" -> Right X1
+        "2" -> Right X2
+        x -> Left ("Unable to parse Xgafv from: " <> x)
+
+instance ToHttpApiData Xgafv where
+    toQueryParam = \case
+        X1 -> "1"
+        X2 -> "2"
+
+instance FromJSON Xgafv where
+    parseJSON = parseJSONText "Xgafv"
+
+instance ToJSON Xgafv where
+    toJSON = toJSONText
+
+-- | The certificate provisioning status; updated when Firebase Hosting
+-- provisions an SSL certificate for the domain.
+data DomainProvisioningCertStatus
+    = CertStatusUnspecified
+      -- ^ @CERT_STATUS_UNSPECIFIED@
+      -- Unspecified certificate provisioning status.
+    | CertPending
+      -- ^ @CERT_PENDING@
+      -- Waiting for certificate challenge to be created.
+    | CertMissing
+      -- ^ @CERT_MISSING@
+      -- Waiting for certificate challenge to be met.
+    | CertProcessing
+      -- ^ @CERT_PROCESSING@
+      -- Certificate challenge met; attempting to acquire\/propagate certificate.
+    | CertPropagating
+      -- ^ @CERT_PROPAGATING@
+      -- Certificate obtained; propagating to the CDN.
+    | CertActive
+      -- ^ @CERT_ACTIVE@
+      -- Certificate provisioned and deployed across the CDN.
+    | CertError
+      -- ^ @CERT_ERROR@
+      -- Certificate provisioning failed in a non-recoverable manner.
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable DomainProvisioningCertStatus
+
+instance FromHttpApiData DomainProvisioningCertStatus where
+    parseQueryParam = \case
+        "CERT_STATUS_UNSPECIFIED" -> Right CertStatusUnspecified
+        "CERT_PENDING" -> Right CertPending
+        "CERT_MISSING" -> Right CertMissing
+        "CERT_PROCESSING" -> Right CertProcessing
+        "CERT_PROPAGATING" -> Right CertPropagating
+        "CERT_ACTIVE" -> Right CertActive
+        "CERT_ERROR" -> Right CertError
+        x -> Left ("Unable to parse DomainProvisioningCertStatus from: " <> x)
+
+instance ToHttpApiData DomainProvisioningCertStatus where
+    toQueryParam = \case
+        CertStatusUnspecified -> "CERT_STATUS_UNSPECIFIED"
+        CertPending -> "CERT_PENDING"
+        CertMissing -> "CERT_MISSING"
+        CertProcessing -> "CERT_PROCESSING"
+        CertPropagating -> "CERT_PROPAGATING"
+        CertActive -> "CERT_ACTIVE"
+        CertError -> "CERT_ERROR"
+
+instance FromJSON DomainProvisioningCertStatus where
+    parseJSON = parseJSONText "DomainProvisioningCertStatus"
+
+instance ToJSON DomainProvisioningCertStatus where
+    toJSON = toJSONText
+
+-- | Output only. The current status of a particular file in the specified
+-- version.
+-- The value will be either \`pending upload\` or \`uploaded\`.
+data VersionFileStatus
+    = StatusUnspecified
+      -- ^ @STATUS_UNSPECIFIED@
+      -- The default status; should not be intentionally used.
+    | Expected
+      -- ^ @EXPECTED@
+      -- The file has been included in the version and is expected to be uploaded
+      -- in the near future.
+    | Active
+      -- ^ @ACTIVE@
+      -- The file has already been uploaded to Firebase Hosting.
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable VersionFileStatus
+
+instance FromHttpApiData VersionFileStatus where
+    parseQueryParam = \case
+        "STATUS_UNSPECIFIED" -> Right StatusUnspecified
+        "EXPECTED" -> Right Expected
+        "ACTIVE" -> Right Active
+        x -> Left ("Unable to parse VersionFileStatus from: " <> x)
+
+instance ToHttpApiData VersionFileStatus where
+    toQueryParam = \case
+        StatusUnspecified -> "STATUS_UNSPECIFIED"
+        Expected -> "EXPECTED"
+        Active -> "ACTIVE"
+
+instance FromJSON VersionFileStatus where
+    parseJSON = parseJSONText "VersionFileStatus"
+
+instance ToJSON VersionFileStatus where
+    toJSON = toJSONText
+
+-- | Defines how to handle a trailing slash in the URL path.
+data ServingConfigTrailingSlashBehavior
+    = TrailingSlashBehaviorUnspecified
+      -- ^ @TRAILING_SLASH_BEHAVIOR_UNSPECIFIED@
+      -- No behavior is specified.
+      -- Files are served at their exact location only, and trailing slashes are
+      -- only added to directory indexes.
+    | Add
+      -- ^ @ADD@
+      -- Trailing slashes are _added_ to directory indexes as well as to any URL
+      -- path not ending in a file extension.
+    | Remove
+      -- ^ @REMOVE@
+      -- Trailing slashes are _removed_ from directory indexes as well as from
+      -- any URL path not ending in a file extension.
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable ServingConfigTrailingSlashBehavior
+
+instance FromHttpApiData ServingConfigTrailingSlashBehavior where
+    parseQueryParam = \case
+        "TRAILING_SLASH_BEHAVIOR_UNSPECIFIED" -> Right TrailingSlashBehaviorUnspecified
+        "ADD" -> Right Add
+        "REMOVE" -> Right Remove
+        x -> Left ("Unable to parse ServingConfigTrailingSlashBehavior from: " <> x)
+
+instance ToHttpApiData ServingConfigTrailingSlashBehavior where
+    toQueryParam = \case
+        TrailingSlashBehaviorUnspecified -> "TRAILING_SLASH_BEHAVIOR_UNSPECIFIED"
+        Add -> "ADD"
+        Remove -> "REMOVE"
+
+instance FromJSON ServingConfigTrailingSlashBehavior where
+    parseJSON = parseJSONText "ServingConfigTrailingSlashBehavior"
+
+instance ToJSON ServingConfigTrailingSlashBehavior where
+    toJSON = toJSONText
+
+-- | Explains the reason for the release.
+-- Specify a value for this field only when creating a \`SITE_DISABLE\`
+-- type release.
+data ReleaseType
+    = TypeUnspecified
+      -- ^ @TYPE_UNSPECIFIED@
+      -- An unspecified type. Indicates that a version was released.
+      -- This is the default value when no other \`type\` is explicitly
+      -- specified.
+    | Deploy
+      -- ^ @DEPLOY@
+      -- A version was uploaded to Firebase Hosting and released.
+    | Rollback
+      -- ^ @ROLLBACK@
+      -- The release points back to a previously deployed version.
+    | SiteDisable
+      -- ^ @SITE_DISABLE@
+      -- The release prevents the site from serving content. Firebase Hosting
+      -- acts as if the site never existed.
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable ReleaseType
+
+instance FromHttpApiData ReleaseType where
+    parseQueryParam = \case
+        "TYPE_UNSPECIFIED" -> Right TypeUnspecified
+        "DEPLOY" -> Right Deploy
+        "ROLLBACK" -> Right Rollback
+        "SITE_DISABLE" -> Right SiteDisable
+        x -> Left ("Unable to parse ReleaseType from: " <> x)
+
+instance ToHttpApiData ReleaseType where
+    toQueryParam = \case
+        TypeUnspecified -> "TYPE_UNSPECIFIED"
+        Deploy -> "DEPLOY"
+        Rollback -> "ROLLBACK"
+        SiteDisable -> "SITE_DISABLE"
+
+instance FromJSON ReleaseType where
+    parseJSON = parseJSONText "ReleaseType"
+
+instance ToJSON ReleaseType where
+    toJSON = toJSONText
diff --git a/gen/Network/Google/Resource/FirebaseHosting/Sites/Domains/Create.hs b/gen/Network/Google/Resource/FirebaseHosting/Sites/Domains/Create.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/FirebaseHosting/Sites/Domains/Create.hs
@@ -0,0 +1,161 @@
+{-# 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.FirebaseHosting.Sites.Domains.Create
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates a domain mapping on the specified site.
+--
+-- /See:/ <https://firebase.google.com/docs/hosting/ Firebase Hosting API Reference> for @firebasehosting.sites.domains.create@.
+module Network.Google.Resource.FirebaseHosting.Sites.Domains.Create
+    (
+    -- * REST Resource
+      SitesDomainsCreateResource
+
+    -- * Creating a Request
+    , sitesDomainsCreate
+    , SitesDomainsCreate
+
+    -- * Request Lenses
+    , sdcParent
+    , sdcXgafv
+    , sdcUploadProtocol
+    , sdcAccessToken
+    , sdcUploadType
+    , sdcPayload
+    , sdcCallback
+    ) where
+
+import           Network.Google.FirebaseHosting.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @firebasehosting.sites.domains.create@ method which the
+-- 'SitesDomainsCreate' request conforms to.
+type SitesDomainsCreateResource =
+     "v1beta1" :>
+       Capture "parent" Text :>
+         "domains" :>
+           QueryParam "$.xgafv" Xgafv :>
+             QueryParam "upload_protocol" Text :>
+               QueryParam "access_token" Text :>
+                 QueryParam "uploadType" Text :>
+                   QueryParam "callback" Text :>
+                     QueryParam "alt" AltJSON :>
+                       ReqBody '[JSON] Domain :> Post '[JSON] Domain
+
+-- | Creates a domain mapping on the specified site.
+--
+-- /See:/ 'sitesDomainsCreate' smart constructor.
+data SitesDomainsCreate = SitesDomainsCreate'
+    { _sdcParent         :: !Text
+    , _sdcXgafv          :: !(Maybe Xgafv)
+    , _sdcUploadProtocol :: !(Maybe Text)
+    , _sdcAccessToken    :: !(Maybe Text)
+    , _sdcUploadType     :: !(Maybe Text)
+    , _sdcPayload        :: !Domain
+    , _sdcCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'SitesDomainsCreate' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'sdcParent'
+--
+-- * 'sdcXgafv'
+--
+-- * 'sdcUploadProtocol'
+--
+-- * 'sdcAccessToken'
+--
+-- * 'sdcUploadType'
+--
+-- * 'sdcPayload'
+--
+-- * 'sdcCallback'
+sitesDomainsCreate
+    :: Text -- ^ 'sdcParent'
+    -> Domain -- ^ 'sdcPayload'
+    -> SitesDomainsCreate
+sitesDomainsCreate pSdcParent_ pSdcPayload_ =
+    SitesDomainsCreate'
+    { _sdcParent = pSdcParent_
+    , _sdcXgafv = Nothing
+    , _sdcUploadProtocol = Nothing
+    , _sdcAccessToken = Nothing
+    , _sdcUploadType = Nothing
+    , _sdcPayload = pSdcPayload_
+    , _sdcCallback = Nothing
+    }
+
+-- | Required. The parent to create the domain association for, in the
+-- format: 'sites\/site-name'
+sdcParent :: Lens' SitesDomainsCreate Text
+sdcParent
+  = lens _sdcParent (\ s a -> s{_sdcParent = a})
+
+-- | V1 error format.
+sdcXgafv :: Lens' SitesDomainsCreate (Maybe Xgafv)
+sdcXgafv = lens _sdcXgafv (\ s a -> s{_sdcXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+sdcUploadProtocol :: Lens' SitesDomainsCreate (Maybe Text)
+sdcUploadProtocol
+  = lens _sdcUploadProtocol
+      (\ s a -> s{_sdcUploadProtocol = a})
+
+-- | OAuth access token.
+sdcAccessToken :: Lens' SitesDomainsCreate (Maybe Text)
+sdcAccessToken
+  = lens _sdcAccessToken
+      (\ s a -> s{_sdcAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+sdcUploadType :: Lens' SitesDomainsCreate (Maybe Text)
+sdcUploadType
+  = lens _sdcUploadType
+      (\ s a -> s{_sdcUploadType = a})
+
+-- | Multipart request metadata.
+sdcPayload :: Lens' SitesDomainsCreate Domain
+sdcPayload
+  = lens _sdcPayload (\ s a -> s{_sdcPayload = a})
+
+-- | JSONP
+sdcCallback :: Lens' SitesDomainsCreate (Maybe Text)
+sdcCallback
+  = lens _sdcCallback (\ s a -> s{_sdcCallback = a})
+
+instance GoogleRequest SitesDomainsCreate where
+        type Rs SitesDomainsCreate = Domain
+        type Scopes SitesDomainsCreate =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/firebase"]
+        requestClient SitesDomainsCreate'{..}
+          = go _sdcParent _sdcXgafv _sdcUploadProtocol
+              _sdcAccessToken
+              _sdcUploadType
+              _sdcCallback
+              (Just AltJSON)
+              _sdcPayload
+              firebaseHostingService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy SitesDomainsCreateResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/FirebaseHosting/Sites/Domains/Delete.hs b/gen/Network/Google/Resource/FirebaseHosting/Sites/Domains/Delete.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/FirebaseHosting/Sites/Domains/Delete.hs
@@ -0,0 +1,145 @@
+{-# 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.FirebaseHosting.Sites.Domains.Delete
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes the existing domain mapping on the specified site.
+--
+-- /See:/ <https://firebase.google.com/docs/hosting/ Firebase Hosting API Reference> for @firebasehosting.sites.domains.delete@.
+module Network.Google.Resource.FirebaseHosting.Sites.Domains.Delete
+    (
+    -- * REST Resource
+      SitesDomainsDeleteResource
+
+    -- * Creating a Request
+    , sitesDomainsDelete
+    , SitesDomainsDelete
+
+    -- * Request Lenses
+    , sddXgafv
+    , sddUploadProtocol
+    , sddAccessToken
+    , sddUploadType
+    , sddName
+    , sddCallback
+    ) where
+
+import           Network.Google.FirebaseHosting.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @firebasehosting.sites.domains.delete@ method which the
+-- 'SitesDomainsDelete' request conforms to.
+type SitesDomainsDeleteResource =
+     "v1beta1" :>
+       Capture "name" Text :>
+         QueryParam "$.xgafv" Xgafv :>
+           QueryParam "upload_protocol" Text :>
+             QueryParam "access_token" Text :>
+               QueryParam "uploadType" Text :>
+                 QueryParam "callback" Text :>
+                   QueryParam "alt" AltJSON :> Delete '[JSON] Empty
+
+-- | Deletes the existing domain mapping on the specified site.
+--
+-- /See:/ 'sitesDomainsDelete' smart constructor.
+data SitesDomainsDelete = SitesDomainsDelete'
+    { _sddXgafv          :: !(Maybe Xgafv)
+    , _sddUploadProtocol :: !(Maybe Text)
+    , _sddAccessToken    :: !(Maybe Text)
+    , _sddUploadType     :: !(Maybe Text)
+    , _sddName           :: !Text
+    , _sddCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'SitesDomainsDelete' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'sddXgafv'
+--
+-- * 'sddUploadProtocol'
+--
+-- * 'sddAccessToken'
+--
+-- * 'sddUploadType'
+--
+-- * 'sddName'
+--
+-- * 'sddCallback'
+sitesDomainsDelete
+    :: Text -- ^ 'sddName'
+    -> SitesDomainsDelete
+sitesDomainsDelete pSddName_ =
+    SitesDomainsDelete'
+    { _sddXgafv = Nothing
+    , _sddUploadProtocol = Nothing
+    , _sddAccessToken = Nothing
+    , _sddUploadType = Nothing
+    , _sddName = pSddName_
+    , _sddCallback = Nothing
+    }
+
+-- | V1 error format.
+sddXgafv :: Lens' SitesDomainsDelete (Maybe Xgafv)
+sddXgafv = lens _sddXgafv (\ s a -> s{_sddXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+sddUploadProtocol :: Lens' SitesDomainsDelete (Maybe Text)
+sddUploadProtocol
+  = lens _sddUploadProtocol
+      (\ s a -> s{_sddUploadProtocol = a})
+
+-- | OAuth access token.
+sddAccessToken :: Lens' SitesDomainsDelete (Maybe Text)
+sddAccessToken
+  = lens _sddAccessToken
+      (\ s a -> s{_sddAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+sddUploadType :: Lens' SitesDomainsDelete (Maybe Text)
+sddUploadType
+  = lens _sddUploadType
+      (\ s a -> s{_sddUploadType = a})
+
+-- | Required. The name of the domain association to delete.
+sddName :: Lens' SitesDomainsDelete Text
+sddName = lens _sddName (\ s a -> s{_sddName = a})
+
+-- | JSONP
+sddCallback :: Lens' SitesDomainsDelete (Maybe Text)
+sddCallback
+  = lens _sddCallback (\ s a -> s{_sddCallback = a})
+
+instance GoogleRequest SitesDomainsDelete where
+        type Rs SitesDomainsDelete = Empty
+        type Scopes SitesDomainsDelete =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/firebase"]
+        requestClient SitesDomainsDelete'{..}
+          = go _sddName _sddXgafv _sddUploadProtocol
+              _sddAccessToken
+              _sddUploadType
+              _sddCallback
+              (Just AltJSON)
+              firebaseHostingService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy SitesDomainsDeleteResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/FirebaseHosting/Sites/Domains/Get.hs b/gen/Network/Google/Resource/FirebaseHosting/Sites/Domains/Get.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/FirebaseHosting/Sites/Domains/Get.hs
@@ -0,0 +1,147 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.FirebaseHosting.Sites.Domains.Get
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Gets a domain mapping on the specified site.
+--
+-- /See:/ <https://firebase.google.com/docs/hosting/ Firebase Hosting API Reference> for @firebasehosting.sites.domains.get@.
+module Network.Google.Resource.FirebaseHosting.Sites.Domains.Get
+    (
+    -- * REST Resource
+      SitesDomainsGetResource
+
+    -- * Creating a Request
+    , sitesDomainsGet
+    , SitesDomainsGet
+
+    -- * Request Lenses
+    , sdgXgafv
+    , sdgUploadProtocol
+    , sdgAccessToken
+    , sdgUploadType
+    , sdgName
+    , sdgCallback
+    ) where
+
+import           Network.Google.FirebaseHosting.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @firebasehosting.sites.domains.get@ method which the
+-- 'SitesDomainsGet' request conforms to.
+type SitesDomainsGetResource =
+     "v1beta1" :>
+       Capture "name" Text :>
+         QueryParam "$.xgafv" Xgafv :>
+           QueryParam "upload_protocol" Text :>
+             QueryParam "access_token" Text :>
+               QueryParam "uploadType" Text :>
+                 QueryParam "callback" Text :>
+                   QueryParam "alt" AltJSON :> Get '[JSON] Domain
+
+-- | Gets a domain mapping on the specified site.
+--
+-- /See:/ 'sitesDomainsGet' smart constructor.
+data SitesDomainsGet = SitesDomainsGet'
+    { _sdgXgafv          :: !(Maybe Xgafv)
+    , _sdgUploadProtocol :: !(Maybe Text)
+    , _sdgAccessToken    :: !(Maybe Text)
+    , _sdgUploadType     :: !(Maybe Text)
+    , _sdgName           :: !Text
+    , _sdgCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'SitesDomainsGet' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'sdgXgafv'
+--
+-- * 'sdgUploadProtocol'
+--
+-- * 'sdgAccessToken'
+--
+-- * 'sdgUploadType'
+--
+-- * 'sdgName'
+--
+-- * 'sdgCallback'
+sitesDomainsGet
+    :: Text -- ^ 'sdgName'
+    -> SitesDomainsGet
+sitesDomainsGet pSdgName_ =
+    SitesDomainsGet'
+    { _sdgXgafv = Nothing
+    , _sdgUploadProtocol = Nothing
+    , _sdgAccessToken = Nothing
+    , _sdgUploadType = Nothing
+    , _sdgName = pSdgName_
+    , _sdgCallback = Nothing
+    }
+
+-- | V1 error format.
+sdgXgafv :: Lens' SitesDomainsGet (Maybe Xgafv)
+sdgXgafv = lens _sdgXgafv (\ s a -> s{_sdgXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+sdgUploadProtocol :: Lens' SitesDomainsGet (Maybe Text)
+sdgUploadProtocol
+  = lens _sdgUploadProtocol
+      (\ s a -> s{_sdgUploadProtocol = a})
+
+-- | OAuth access token.
+sdgAccessToken :: Lens' SitesDomainsGet (Maybe Text)
+sdgAccessToken
+  = lens _sdgAccessToken
+      (\ s a -> s{_sdgAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+sdgUploadType :: Lens' SitesDomainsGet (Maybe Text)
+sdgUploadType
+  = lens _sdgUploadType
+      (\ s a -> s{_sdgUploadType = a})
+
+-- | Required. The name of the domain configuration to get.
+sdgName :: Lens' SitesDomainsGet Text
+sdgName = lens _sdgName (\ s a -> s{_sdgName = a})
+
+-- | JSONP
+sdgCallback :: Lens' SitesDomainsGet (Maybe Text)
+sdgCallback
+  = lens _sdgCallback (\ s a -> s{_sdgCallback = a})
+
+instance GoogleRequest SitesDomainsGet where
+        type Rs SitesDomainsGet = Domain
+        type Scopes SitesDomainsGet =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/cloud-platform.read-only",
+               "https://www.googleapis.com/auth/firebase",
+               "https://www.googleapis.com/auth/firebase.readonly"]
+        requestClient SitesDomainsGet'{..}
+          = go _sdgName _sdgXgafv _sdgUploadProtocol
+              _sdgAccessToken
+              _sdgUploadType
+              _sdgCallback
+              (Just AltJSON)
+              firebaseHostingService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy SitesDomainsGetResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/FirebaseHosting/Sites/Domains/List.hs b/gen/Network/Google/Resource/FirebaseHosting/Sites/Domains/List.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/FirebaseHosting/Sites/Domains/List.hs
@@ -0,0 +1,176 @@
+{-# 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.FirebaseHosting.Sites.Domains.List
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Lists the domains for the specified site.
+--
+-- /See:/ <https://firebase.google.com/docs/hosting/ Firebase Hosting API Reference> for @firebasehosting.sites.domains.list@.
+module Network.Google.Resource.FirebaseHosting.Sites.Domains.List
+    (
+    -- * REST Resource
+      SitesDomainsListResource
+
+    -- * Creating a Request
+    , sitesDomainsList
+    , SitesDomainsList
+
+    -- * Request Lenses
+    , sdlParent
+    , sdlXgafv
+    , sdlUploadProtocol
+    , sdlAccessToken
+    , sdlUploadType
+    , sdlPageToken
+    , sdlPageSize
+    , sdlCallback
+    ) where
+
+import           Network.Google.FirebaseHosting.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @firebasehosting.sites.domains.list@ method which the
+-- 'SitesDomainsList' request conforms to.
+type SitesDomainsListResource =
+     "v1beta1" :>
+       Capture "parent" Text :>
+         "domains" :>
+           QueryParam "$.xgafv" Xgafv :>
+             QueryParam "upload_protocol" Text :>
+               QueryParam "access_token" Text :>
+                 QueryParam "uploadType" Text :>
+                   QueryParam "pageToken" Text :>
+                     QueryParam "pageSize" (Textual Int32) :>
+                       QueryParam "callback" Text :>
+                         QueryParam "alt" AltJSON :>
+                           Get '[JSON] ListDomainsResponse
+
+-- | Lists the domains for the specified site.
+--
+-- /See:/ 'sitesDomainsList' smart constructor.
+data SitesDomainsList = SitesDomainsList'
+    { _sdlParent         :: !Text
+    , _sdlXgafv          :: !(Maybe Xgafv)
+    , _sdlUploadProtocol :: !(Maybe Text)
+    , _sdlAccessToken    :: !(Maybe Text)
+    , _sdlUploadType     :: !(Maybe Text)
+    , _sdlPageToken      :: !(Maybe Text)
+    , _sdlPageSize       :: !(Maybe (Textual Int32))
+    , _sdlCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'SitesDomainsList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'sdlParent'
+--
+-- * 'sdlXgafv'
+--
+-- * 'sdlUploadProtocol'
+--
+-- * 'sdlAccessToken'
+--
+-- * 'sdlUploadType'
+--
+-- * 'sdlPageToken'
+--
+-- * 'sdlPageSize'
+--
+-- * 'sdlCallback'
+sitesDomainsList
+    :: Text -- ^ 'sdlParent'
+    -> SitesDomainsList
+sitesDomainsList pSdlParent_ =
+    SitesDomainsList'
+    { _sdlParent = pSdlParent_
+    , _sdlXgafv = Nothing
+    , _sdlUploadProtocol = Nothing
+    , _sdlAccessToken = Nothing
+    , _sdlUploadType = Nothing
+    , _sdlPageToken = Nothing
+    , _sdlPageSize = Nothing
+    , _sdlCallback = Nothing
+    }
+
+-- | Required. The parent for which to list domains, in the format:
+-- 'sites\/site-name'
+sdlParent :: Lens' SitesDomainsList Text
+sdlParent
+  = lens _sdlParent (\ s a -> s{_sdlParent = a})
+
+-- | V1 error format.
+sdlXgafv :: Lens' SitesDomainsList (Maybe Xgafv)
+sdlXgafv = lens _sdlXgafv (\ s a -> s{_sdlXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+sdlUploadProtocol :: Lens' SitesDomainsList (Maybe Text)
+sdlUploadProtocol
+  = lens _sdlUploadProtocol
+      (\ s a -> s{_sdlUploadProtocol = a})
+
+-- | OAuth access token.
+sdlAccessToken :: Lens' SitesDomainsList (Maybe Text)
+sdlAccessToken
+  = lens _sdlAccessToken
+      (\ s a -> s{_sdlAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+sdlUploadType :: Lens' SitesDomainsList (Maybe Text)
+sdlUploadType
+  = lens _sdlUploadType
+      (\ s a -> s{_sdlUploadType = a})
+
+-- | The next_page_token from a previous request, if provided.
+sdlPageToken :: Lens' SitesDomainsList (Maybe Text)
+sdlPageToken
+  = lens _sdlPageToken (\ s a -> s{_sdlPageToken = a})
+
+-- | The page size to return. Defaults to 50.
+sdlPageSize :: Lens' SitesDomainsList (Maybe Int32)
+sdlPageSize
+  = lens _sdlPageSize (\ s a -> s{_sdlPageSize = a}) .
+      mapping _Coerce
+
+-- | JSONP
+sdlCallback :: Lens' SitesDomainsList (Maybe Text)
+sdlCallback
+  = lens _sdlCallback (\ s a -> s{_sdlCallback = a})
+
+instance GoogleRequest SitesDomainsList where
+        type Rs SitesDomainsList = ListDomainsResponse
+        type Scopes SitesDomainsList =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/cloud-platform.read-only",
+               "https://www.googleapis.com/auth/firebase",
+               "https://www.googleapis.com/auth/firebase.readonly"]
+        requestClient SitesDomainsList'{..}
+          = go _sdlParent _sdlXgafv _sdlUploadProtocol
+              _sdlAccessToken
+              _sdlUploadType
+              _sdlPageToken
+              _sdlPageSize
+              _sdlCallback
+              (Just AltJSON)
+              firebaseHostingService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy SitesDomainsListResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/FirebaseHosting/Sites/Domains/Update.hs b/gen/Network/Google/Resource/FirebaseHosting/Sites/Domains/Update.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/FirebaseHosting/Sites/Domains/Update.hs
@@ -0,0 +1,161 @@
+{-# 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.FirebaseHosting.Sites.Domains.Update
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Updates the specified domain mapping, creating the mapping as if it does
+-- not exist.
+--
+-- /See:/ <https://firebase.google.com/docs/hosting/ Firebase Hosting API Reference> for @firebasehosting.sites.domains.update@.
+module Network.Google.Resource.FirebaseHosting.Sites.Domains.Update
+    (
+    -- * REST Resource
+      SitesDomainsUpdateResource
+
+    -- * Creating a Request
+    , sitesDomainsUpdate
+    , SitesDomainsUpdate
+
+    -- * Request Lenses
+    , sduXgafv
+    , sduUploadProtocol
+    , sduAccessToken
+    , sduUploadType
+    , sduPayload
+    , sduName
+    , sduCallback
+    ) where
+
+import           Network.Google.FirebaseHosting.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @firebasehosting.sites.domains.update@ method which the
+-- 'SitesDomainsUpdate' request conforms to.
+type SitesDomainsUpdateResource =
+     "v1beta1" :>
+       Capture "name" Text :>
+         QueryParam "$.xgafv" Xgafv :>
+           QueryParam "upload_protocol" Text :>
+             QueryParam "access_token" Text :>
+               QueryParam "uploadType" Text :>
+                 QueryParam "callback" Text :>
+                   QueryParam "alt" AltJSON :>
+                     ReqBody '[JSON] Domain :> Put '[JSON] Domain
+
+-- | Updates the specified domain mapping, creating the mapping as if it does
+-- not exist.
+--
+-- /See:/ 'sitesDomainsUpdate' smart constructor.
+data SitesDomainsUpdate = SitesDomainsUpdate'
+    { _sduXgafv          :: !(Maybe Xgafv)
+    , _sduUploadProtocol :: !(Maybe Text)
+    , _sduAccessToken    :: !(Maybe Text)
+    , _sduUploadType     :: !(Maybe Text)
+    , _sduPayload        :: !Domain
+    , _sduName           :: !Text
+    , _sduCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'SitesDomainsUpdate' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'sduXgafv'
+--
+-- * 'sduUploadProtocol'
+--
+-- * 'sduAccessToken'
+--
+-- * 'sduUploadType'
+--
+-- * 'sduPayload'
+--
+-- * 'sduName'
+--
+-- * 'sduCallback'
+sitesDomainsUpdate
+    :: Domain -- ^ 'sduPayload'
+    -> Text -- ^ 'sduName'
+    -> SitesDomainsUpdate
+sitesDomainsUpdate pSduPayload_ pSduName_ =
+    SitesDomainsUpdate'
+    { _sduXgafv = Nothing
+    , _sduUploadProtocol = Nothing
+    , _sduAccessToken = Nothing
+    , _sduUploadType = Nothing
+    , _sduPayload = pSduPayload_
+    , _sduName = pSduName_
+    , _sduCallback = Nothing
+    }
+
+-- | V1 error format.
+sduXgafv :: Lens' SitesDomainsUpdate (Maybe Xgafv)
+sduXgafv = lens _sduXgafv (\ s a -> s{_sduXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+sduUploadProtocol :: Lens' SitesDomainsUpdate (Maybe Text)
+sduUploadProtocol
+  = lens _sduUploadProtocol
+      (\ s a -> s{_sduUploadProtocol = a})
+
+-- | OAuth access token.
+sduAccessToken :: Lens' SitesDomainsUpdate (Maybe Text)
+sduAccessToken
+  = lens _sduAccessToken
+      (\ s a -> s{_sduAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+sduUploadType :: Lens' SitesDomainsUpdate (Maybe Text)
+sduUploadType
+  = lens _sduUploadType
+      (\ s a -> s{_sduUploadType = a})
+
+-- | Multipart request metadata.
+sduPayload :: Lens' SitesDomainsUpdate Domain
+sduPayload
+  = lens _sduPayload (\ s a -> s{_sduPayload = a})
+
+-- | Required. The name of the domain association to update or create, if an
+-- association doesn\'t already exist.
+sduName :: Lens' SitesDomainsUpdate Text
+sduName = lens _sduName (\ s a -> s{_sduName = a})
+
+-- | JSONP
+sduCallback :: Lens' SitesDomainsUpdate (Maybe Text)
+sduCallback
+  = lens _sduCallback (\ s a -> s{_sduCallback = a})
+
+instance GoogleRequest SitesDomainsUpdate where
+        type Rs SitesDomainsUpdate = Domain
+        type Scopes SitesDomainsUpdate =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/firebase"]
+        requestClient SitesDomainsUpdate'{..}
+          = go _sduName _sduXgafv _sduUploadProtocol
+              _sduAccessToken
+              _sduUploadType
+              _sduCallback
+              (Just AltJSON)
+              _sduPayload
+              firebaseHostingService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy SitesDomainsUpdateResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/FirebaseHosting/Sites/GetConfig.hs b/gen/Network/Google/Resource/FirebaseHosting/Sites/GetConfig.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/FirebaseHosting/Sites/GetConfig.hs
@@ -0,0 +1,147 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.FirebaseHosting.Sites.GetConfig
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Gets the Hosting metadata for a specific site.
+--
+-- /See:/ <https://firebase.google.com/docs/hosting/ Firebase Hosting API Reference> for @firebasehosting.sites.getConfig@.
+module Network.Google.Resource.FirebaseHosting.Sites.GetConfig
+    (
+    -- * REST Resource
+      SitesGetConfigResource
+
+    -- * Creating a Request
+    , sitesGetConfig
+    , SitesGetConfig
+
+    -- * Request Lenses
+    , sgcXgafv
+    , sgcUploadProtocol
+    , sgcAccessToken
+    , sgcUploadType
+    , sgcName
+    , sgcCallback
+    ) where
+
+import           Network.Google.FirebaseHosting.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @firebasehosting.sites.getConfig@ method which the
+-- 'SitesGetConfig' request conforms to.
+type SitesGetConfigResource =
+     "v1beta1" :>
+       Capture "name" Text :>
+         QueryParam "$.xgafv" Xgafv :>
+           QueryParam "upload_protocol" Text :>
+             QueryParam "access_token" Text :>
+               QueryParam "uploadType" Text :>
+                 QueryParam "callback" Text :>
+                   QueryParam "alt" AltJSON :> Get '[JSON] SiteConfig
+
+-- | Gets the Hosting metadata for a specific site.
+--
+-- /See:/ 'sitesGetConfig' smart constructor.
+data SitesGetConfig = SitesGetConfig'
+    { _sgcXgafv          :: !(Maybe Xgafv)
+    , _sgcUploadProtocol :: !(Maybe Text)
+    , _sgcAccessToken    :: !(Maybe Text)
+    , _sgcUploadType     :: !(Maybe Text)
+    , _sgcName           :: !Text
+    , _sgcCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'SitesGetConfig' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'sgcXgafv'
+--
+-- * 'sgcUploadProtocol'
+--
+-- * 'sgcAccessToken'
+--
+-- * 'sgcUploadType'
+--
+-- * 'sgcName'
+--
+-- * 'sgcCallback'
+sitesGetConfig
+    :: Text -- ^ 'sgcName'
+    -> SitesGetConfig
+sitesGetConfig pSgcName_ =
+    SitesGetConfig'
+    { _sgcXgafv = Nothing
+    , _sgcUploadProtocol = Nothing
+    , _sgcAccessToken = Nothing
+    , _sgcUploadType = Nothing
+    , _sgcName = pSgcName_
+    , _sgcCallback = Nothing
+    }
+
+-- | V1 error format.
+sgcXgafv :: Lens' SitesGetConfig (Maybe Xgafv)
+sgcXgafv = lens _sgcXgafv (\ s a -> s{_sgcXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+sgcUploadProtocol :: Lens' SitesGetConfig (Maybe Text)
+sgcUploadProtocol
+  = lens _sgcUploadProtocol
+      (\ s a -> s{_sgcUploadProtocol = a})
+
+-- | OAuth access token.
+sgcAccessToken :: Lens' SitesGetConfig (Maybe Text)
+sgcAccessToken
+  = lens _sgcAccessToken
+      (\ s a -> s{_sgcAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+sgcUploadType :: Lens' SitesGetConfig (Maybe Text)
+sgcUploadType
+  = lens _sgcUploadType
+      (\ s a -> s{_sgcUploadType = a})
+
+-- | Required. The site for which to get the SiteConfig, in the format:
+-- 'sites\/site-name\/config'
+sgcName :: Lens' SitesGetConfig Text
+sgcName = lens _sgcName (\ s a -> s{_sgcName = a})
+
+-- | JSONP
+sgcCallback :: Lens' SitesGetConfig (Maybe Text)
+sgcCallback
+  = lens _sgcCallback (\ s a -> s{_sgcCallback = a})
+
+instance GoogleRequest SitesGetConfig where
+        type Rs SitesGetConfig = SiteConfig
+        type Scopes SitesGetConfig =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/cloud-platform.read-only",
+               "https://www.googleapis.com/auth/firebase",
+               "https://www.googleapis.com/auth/firebase.readonly"]
+        requestClient SitesGetConfig'{..}
+          = go _sgcName _sgcXgafv _sgcUploadProtocol
+              _sgcAccessToken
+              _sgcUploadType
+              _sgcCallback
+              (Just AltJSON)
+              firebaseHostingService
+          where go
+                  = buildClient (Proxy :: Proxy SitesGetConfigResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/FirebaseHosting/Sites/Releases/Create.hs b/gen/Network/Google/Resource/FirebaseHosting/Sites/Releases/Create.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/FirebaseHosting/Sites/Releases/Create.hs
@@ -0,0 +1,179 @@
+{-# 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.FirebaseHosting.Sites.Releases.Create
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates a new release which makes the content of the specified version
+-- actively display on the site.
+--
+-- /See:/ <https://firebase.google.com/docs/hosting/ Firebase Hosting API Reference> for @firebasehosting.sites.releases.create@.
+module Network.Google.Resource.FirebaseHosting.Sites.Releases.Create
+    (
+    -- * REST Resource
+      SitesReleasesCreateResource
+
+    -- * Creating a Request
+    , sitesReleasesCreate
+    , SitesReleasesCreate
+
+    -- * Request Lenses
+    , srcParent
+    , srcXgafv
+    , srcUploadProtocol
+    , srcVersionName
+    , srcAccessToken
+    , srcUploadType
+    , srcPayload
+    , srcCallback
+    ) where
+
+import           Network.Google.FirebaseHosting.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @firebasehosting.sites.releases.create@ method which the
+-- 'SitesReleasesCreate' request conforms to.
+type SitesReleasesCreateResource =
+     "v1beta1" :>
+       Capture "parent" Text :>
+         "releases" :>
+           QueryParam "$.xgafv" Xgafv :>
+             QueryParam "upload_protocol" Text :>
+               QueryParam "versionName" Text :>
+                 QueryParam "access_token" Text :>
+                   QueryParam "uploadType" Text :>
+                     QueryParam "callback" Text :>
+                       QueryParam "alt" AltJSON :>
+                         ReqBody '[JSON] Release :> Post '[JSON] Release
+
+-- | Creates a new release which makes the content of the specified version
+-- actively display on the site.
+--
+-- /See:/ 'sitesReleasesCreate' smart constructor.
+data SitesReleasesCreate = SitesReleasesCreate'
+    { _srcParent         :: !Text
+    , _srcXgafv          :: !(Maybe Xgafv)
+    , _srcUploadProtocol :: !(Maybe Text)
+    , _srcVersionName    :: !(Maybe Text)
+    , _srcAccessToken    :: !(Maybe Text)
+    , _srcUploadType     :: !(Maybe Text)
+    , _srcPayload        :: !Release
+    , _srcCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'SitesReleasesCreate' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'srcParent'
+--
+-- * 'srcXgafv'
+--
+-- * 'srcUploadProtocol'
+--
+-- * 'srcVersionName'
+--
+-- * 'srcAccessToken'
+--
+-- * 'srcUploadType'
+--
+-- * 'srcPayload'
+--
+-- * 'srcCallback'
+sitesReleasesCreate
+    :: Text -- ^ 'srcParent'
+    -> Release -- ^ 'srcPayload'
+    -> SitesReleasesCreate
+sitesReleasesCreate pSrcParent_ pSrcPayload_ =
+    SitesReleasesCreate'
+    { _srcParent = pSrcParent_
+    , _srcXgafv = Nothing
+    , _srcUploadProtocol = Nothing
+    , _srcVersionName = Nothing
+    , _srcAccessToken = Nothing
+    , _srcUploadType = Nothing
+    , _srcPayload = pSrcPayload_
+    , _srcCallback = Nothing
+    }
+
+-- | The site that the release belongs to, in the format: 'sites\/site-name'
+srcParent :: Lens' SitesReleasesCreate Text
+srcParent
+  = lens _srcParent (\ s a -> s{_srcParent = a})
+
+-- | V1 error format.
+srcXgafv :: Lens' SitesReleasesCreate (Maybe Xgafv)
+srcXgafv = lens _srcXgafv (\ s a -> s{_srcXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+srcUploadProtocol :: Lens' SitesReleasesCreate (Maybe Text)
+srcUploadProtocol
+  = lens _srcUploadProtocol
+      (\ s a -> s{_srcUploadProtocol = a})
+
+-- | The unique identifier for a version, in the format:
+-- '\/sites\/site-name\/versions\/versionID' The site-name in this version
+-- identifier must match the site-name in the \`parent\` parameter.
+-- This query parameter must be empty if the \`type\` field in the request
+-- body is \`SITE_DISABLE\`.
+srcVersionName :: Lens' SitesReleasesCreate (Maybe Text)
+srcVersionName
+  = lens _srcVersionName
+      (\ s a -> s{_srcVersionName = a})
+
+-- | OAuth access token.
+srcAccessToken :: Lens' SitesReleasesCreate (Maybe Text)
+srcAccessToken
+  = lens _srcAccessToken
+      (\ s a -> s{_srcAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+srcUploadType :: Lens' SitesReleasesCreate (Maybe Text)
+srcUploadType
+  = lens _srcUploadType
+      (\ s a -> s{_srcUploadType = a})
+
+-- | Multipart request metadata.
+srcPayload :: Lens' SitesReleasesCreate Release
+srcPayload
+  = lens _srcPayload (\ s a -> s{_srcPayload = a})
+
+-- | JSONP
+srcCallback :: Lens' SitesReleasesCreate (Maybe Text)
+srcCallback
+  = lens _srcCallback (\ s a -> s{_srcCallback = a})
+
+instance GoogleRequest SitesReleasesCreate where
+        type Rs SitesReleasesCreate = Release
+        type Scopes SitesReleasesCreate =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/firebase"]
+        requestClient SitesReleasesCreate'{..}
+          = go _srcParent _srcXgafv _srcUploadProtocol
+              _srcVersionName
+              _srcAccessToken
+              _srcUploadType
+              _srcCallback
+              (Just AltJSON)
+              _srcPayload
+              firebaseHostingService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy SitesReleasesCreateResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/FirebaseHosting/Sites/Releases/List.hs b/gen/Network/Google/Resource/FirebaseHosting/Sites/Releases/List.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/FirebaseHosting/Sites/Releases/List.hs
@@ -0,0 +1,176 @@
+{-# 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.FirebaseHosting.Sites.Releases.List
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Lists the releases that have been created on the specified site.
+--
+-- /See:/ <https://firebase.google.com/docs/hosting/ Firebase Hosting API Reference> for @firebasehosting.sites.releases.list@.
+module Network.Google.Resource.FirebaseHosting.Sites.Releases.List
+    (
+    -- * REST Resource
+      SitesReleasesListResource
+
+    -- * Creating a Request
+    , sitesReleasesList
+    , SitesReleasesList
+
+    -- * Request Lenses
+    , srlParent
+    , srlXgafv
+    , srlUploadProtocol
+    , srlAccessToken
+    , srlUploadType
+    , srlPageToken
+    , srlPageSize
+    , srlCallback
+    ) where
+
+import           Network.Google.FirebaseHosting.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @firebasehosting.sites.releases.list@ method which the
+-- 'SitesReleasesList' request conforms to.
+type SitesReleasesListResource =
+     "v1beta1" :>
+       Capture "parent" Text :>
+         "releases" :>
+           QueryParam "$.xgafv" Xgafv :>
+             QueryParam "upload_protocol" Text :>
+               QueryParam "access_token" Text :>
+                 QueryParam "uploadType" Text :>
+                   QueryParam "pageToken" Text :>
+                     QueryParam "pageSize" (Textual Int32) :>
+                       QueryParam "callback" Text :>
+                         QueryParam "alt" AltJSON :>
+                           Get '[JSON] ListReleasesResponse
+
+-- | Lists the releases that have been created on the specified site.
+--
+-- /See:/ 'sitesReleasesList' smart constructor.
+data SitesReleasesList = SitesReleasesList'
+    { _srlParent         :: !Text
+    , _srlXgafv          :: !(Maybe Xgafv)
+    , _srlUploadProtocol :: !(Maybe Text)
+    , _srlAccessToken    :: !(Maybe Text)
+    , _srlUploadType     :: !(Maybe Text)
+    , _srlPageToken      :: !(Maybe Text)
+    , _srlPageSize       :: !(Maybe (Textual Int32))
+    , _srlCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'SitesReleasesList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'srlParent'
+--
+-- * 'srlXgafv'
+--
+-- * 'srlUploadProtocol'
+--
+-- * 'srlAccessToken'
+--
+-- * 'srlUploadType'
+--
+-- * 'srlPageToken'
+--
+-- * 'srlPageSize'
+--
+-- * 'srlCallback'
+sitesReleasesList
+    :: Text -- ^ 'srlParent'
+    -> SitesReleasesList
+sitesReleasesList pSrlParent_ =
+    SitesReleasesList'
+    { _srlParent = pSrlParent_
+    , _srlXgafv = Nothing
+    , _srlUploadProtocol = Nothing
+    , _srlAccessToken = Nothing
+    , _srlUploadType = Nothing
+    , _srlPageToken = Nothing
+    , _srlPageSize = Nothing
+    , _srlCallback = Nothing
+    }
+
+-- | Required. The parent for which to list files, in the format:
+-- 'sites\/site-name'
+srlParent :: Lens' SitesReleasesList Text
+srlParent
+  = lens _srlParent (\ s a -> s{_srlParent = a})
+
+-- | V1 error format.
+srlXgafv :: Lens' SitesReleasesList (Maybe Xgafv)
+srlXgafv = lens _srlXgafv (\ s a -> s{_srlXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+srlUploadProtocol :: Lens' SitesReleasesList (Maybe Text)
+srlUploadProtocol
+  = lens _srlUploadProtocol
+      (\ s a -> s{_srlUploadProtocol = a})
+
+-- | OAuth access token.
+srlAccessToken :: Lens' SitesReleasesList (Maybe Text)
+srlAccessToken
+  = lens _srlAccessToken
+      (\ s a -> s{_srlAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+srlUploadType :: Lens' SitesReleasesList (Maybe Text)
+srlUploadType
+  = lens _srlUploadType
+      (\ s a -> s{_srlUploadType = a})
+
+-- | The next_page_token from a previous request, if provided.
+srlPageToken :: Lens' SitesReleasesList (Maybe Text)
+srlPageToken
+  = lens _srlPageToken (\ s a -> s{_srlPageToken = a})
+
+-- | The page size to return. Defaults to 100.
+srlPageSize :: Lens' SitesReleasesList (Maybe Int32)
+srlPageSize
+  = lens _srlPageSize (\ s a -> s{_srlPageSize = a}) .
+      mapping _Coerce
+
+-- | JSONP
+srlCallback :: Lens' SitesReleasesList (Maybe Text)
+srlCallback
+  = lens _srlCallback (\ s a -> s{_srlCallback = a})
+
+instance GoogleRequest SitesReleasesList where
+        type Rs SitesReleasesList = ListReleasesResponse
+        type Scopes SitesReleasesList =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/cloud-platform.read-only",
+               "https://www.googleapis.com/auth/firebase",
+               "https://www.googleapis.com/auth/firebase.readonly"]
+        requestClient SitesReleasesList'{..}
+          = go _srlParent _srlXgafv _srlUploadProtocol
+              _srlAccessToken
+              _srlUploadType
+              _srlPageToken
+              _srlPageSize
+              _srlCallback
+              (Just AltJSON)
+              firebaseHostingService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy SitesReleasesListResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/FirebaseHosting/Sites/UpdateConfig.hs b/gen/Network/Google/Resource/FirebaseHosting/Sites/UpdateConfig.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/FirebaseHosting/Sites/UpdateConfig.hs
@@ -0,0 +1,177 @@
+{-# 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.FirebaseHosting.Sites.UpdateConfig
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Sets the Hosting metadata for a specific site.
+--
+-- /See:/ <https://firebase.google.com/docs/hosting/ Firebase Hosting API Reference> for @firebasehosting.sites.updateConfig@.
+module Network.Google.Resource.FirebaseHosting.Sites.UpdateConfig
+    (
+    -- * REST Resource
+      SitesUpdateConfigResource
+
+    -- * Creating a Request
+    , sitesUpdateConfig
+    , SitesUpdateConfig
+
+    -- * Request Lenses
+    , sucXgafv
+    , sucUploadProtocol
+    , sucUpdateMask
+    , sucAccessToken
+    , sucUploadType
+    , sucPayload
+    , sucName
+    , sucCallback
+    ) where
+
+import           Network.Google.FirebaseHosting.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @firebasehosting.sites.updateConfig@ method which the
+-- 'SitesUpdateConfig' request conforms to.
+type SitesUpdateConfigResource =
+     "v1beta1" :>
+       Capture "name" Text :>
+         QueryParam "$.xgafv" Xgafv :>
+           QueryParam "upload_protocol" Text :>
+             QueryParam "updateMask" GFieldMask :>
+               QueryParam "access_token" Text :>
+                 QueryParam "uploadType" Text :>
+                   QueryParam "callback" Text :>
+                     QueryParam "alt" AltJSON :>
+                       ReqBody '[JSON] SiteConfig :>
+                         Patch '[JSON] SiteConfig
+
+-- | Sets the Hosting metadata for a specific site.
+--
+-- /See:/ 'sitesUpdateConfig' smart constructor.
+data SitesUpdateConfig = SitesUpdateConfig'
+    { _sucXgafv          :: !(Maybe Xgafv)
+    , _sucUploadProtocol :: !(Maybe Text)
+    , _sucUpdateMask     :: !(Maybe GFieldMask)
+    , _sucAccessToken    :: !(Maybe Text)
+    , _sucUploadType     :: !(Maybe Text)
+    , _sucPayload        :: !SiteConfig
+    , _sucName           :: !Text
+    , _sucCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'SitesUpdateConfig' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'sucXgafv'
+--
+-- * 'sucUploadProtocol'
+--
+-- * 'sucUpdateMask'
+--
+-- * 'sucAccessToken'
+--
+-- * 'sucUploadType'
+--
+-- * 'sucPayload'
+--
+-- * 'sucName'
+--
+-- * 'sucCallback'
+sitesUpdateConfig
+    :: SiteConfig -- ^ 'sucPayload'
+    -> Text -- ^ 'sucName'
+    -> SitesUpdateConfig
+sitesUpdateConfig pSucPayload_ pSucName_ =
+    SitesUpdateConfig'
+    { _sucXgafv = Nothing
+    , _sucUploadProtocol = Nothing
+    , _sucUpdateMask = Nothing
+    , _sucAccessToken = Nothing
+    , _sucUploadType = Nothing
+    , _sucPayload = pSucPayload_
+    , _sucName = pSucName_
+    , _sucCallback = Nothing
+    }
+
+-- | V1 error format.
+sucXgafv :: Lens' SitesUpdateConfig (Maybe Xgafv)
+sucXgafv = lens _sucXgafv (\ s a -> s{_sucXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+sucUploadProtocol :: Lens' SitesUpdateConfig (Maybe Text)
+sucUploadProtocol
+  = lens _sucUploadProtocol
+      (\ s a -> s{_sucUploadProtocol = a})
+
+-- | A set of field names from your [site
+-- configuration](..\/sites.SiteConfig) that you want to update.
+-- A field will be overwritten if, and only if, it\'s in the mask.
+-- If a mask is not provided then a default mask of only
+-- [\`max_versions\`](..\/sites.SiteConfig.max_versions) will be used.
+sucUpdateMask :: Lens' SitesUpdateConfig (Maybe GFieldMask)
+sucUpdateMask
+  = lens _sucUpdateMask
+      (\ s a -> s{_sucUpdateMask = a})
+
+-- | OAuth access token.
+sucAccessToken :: Lens' SitesUpdateConfig (Maybe Text)
+sucAccessToken
+  = lens _sucAccessToken
+      (\ s a -> s{_sucAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+sucUploadType :: Lens' SitesUpdateConfig (Maybe Text)
+sucUploadType
+  = lens _sucUploadType
+      (\ s a -> s{_sucUploadType = a})
+
+-- | Multipart request metadata.
+sucPayload :: Lens' SitesUpdateConfig SiteConfig
+sucPayload
+  = lens _sucPayload (\ s a -> s{_sucPayload = a})
+
+-- | Required. The site for which to update the SiteConfig, in the format:
+-- 'sites\/site-name\/config'
+sucName :: Lens' SitesUpdateConfig Text
+sucName = lens _sucName (\ s a -> s{_sucName = a})
+
+-- | JSONP
+sucCallback :: Lens' SitesUpdateConfig (Maybe Text)
+sucCallback
+  = lens _sucCallback (\ s a -> s{_sucCallback = a})
+
+instance GoogleRequest SitesUpdateConfig where
+        type Rs SitesUpdateConfig = SiteConfig
+        type Scopes SitesUpdateConfig =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/firebase"]
+        requestClient SitesUpdateConfig'{..}
+          = go _sucName _sucXgafv _sucUploadProtocol
+              _sucUpdateMask
+              _sucAccessToken
+              _sucUploadType
+              _sucCallback
+              (Just AltJSON)
+              _sucPayload
+              firebaseHostingService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy SitesUpdateConfigResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/FirebaseHosting/Sites/Versions/Create.hs b/gen/Network/Google/Resource/FirebaseHosting/Sites/Versions/Create.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/FirebaseHosting/Sites/Versions/Create.hs
@@ -0,0 +1,187 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.FirebaseHosting.Sites.Versions.Create
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates a new version for a site.
+--
+-- /See:/ <https://firebase.google.com/docs/hosting/ Firebase Hosting API Reference> for @firebasehosting.sites.versions.create@.
+module Network.Google.Resource.FirebaseHosting.Sites.Versions.Create
+    (
+    -- * REST Resource
+      SitesVersionsCreateResource
+
+    -- * Creating a Request
+    , sitesVersionsCreate
+    , SitesVersionsCreate
+
+    -- * Request Lenses
+    , svcSizeBytes
+    , svcParent
+    , svcXgafv
+    , svcVersionId
+    , svcUploadProtocol
+    , svcAccessToken
+    , svcUploadType
+    , svcPayload
+    , svcCallback
+    ) where
+
+import           Network.Google.FirebaseHosting.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @firebasehosting.sites.versions.create@ method which the
+-- 'SitesVersionsCreate' request conforms to.
+type SitesVersionsCreateResource =
+     "v1beta1" :>
+       Capture "parent" Text :>
+         "versions" :>
+           QueryParam "sizeBytes" (Textual Int64) :>
+             QueryParam "$.xgafv" Xgafv :>
+               QueryParam "versionId" Text :>
+                 QueryParam "upload_protocol" Text :>
+                   QueryParam "access_token" Text :>
+                     QueryParam "uploadType" Text :>
+                       QueryParam "callback" Text :>
+                         QueryParam "alt" AltJSON :>
+                           ReqBody '[JSON] Version :> Post '[JSON] Version
+
+-- | Creates a new version for a site.
+--
+-- /See:/ 'sitesVersionsCreate' smart constructor.
+data SitesVersionsCreate = SitesVersionsCreate'
+    { _svcSizeBytes      :: !(Maybe (Textual Int64))
+    , _svcParent         :: !Text
+    , _svcXgafv          :: !(Maybe Xgafv)
+    , _svcVersionId      :: !(Maybe Text)
+    , _svcUploadProtocol :: !(Maybe Text)
+    , _svcAccessToken    :: !(Maybe Text)
+    , _svcUploadType     :: !(Maybe Text)
+    , _svcPayload        :: !Version
+    , _svcCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'SitesVersionsCreate' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'svcSizeBytes'
+--
+-- * 'svcParent'
+--
+-- * 'svcXgafv'
+--
+-- * 'svcVersionId'
+--
+-- * 'svcUploadProtocol'
+--
+-- * 'svcAccessToken'
+--
+-- * 'svcUploadType'
+--
+-- * 'svcPayload'
+--
+-- * 'svcCallback'
+sitesVersionsCreate
+    :: Text -- ^ 'svcParent'
+    -> Version -- ^ 'svcPayload'
+    -> SitesVersionsCreate
+sitesVersionsCreate pSvcParent_ pSvcPayload_ =
+    SitesVersionsCreate'
+    { _svcSizeBytes = Nothing
+    , _svcParent = pSvcParent_
+    , _svcXgafv = Nothing
+    , _svcVersionId = Nothing
+    , _svcUploadProtocol = Nothing
+    , _svcAccessToken = Nothing
+    , _svcUploadType = Nothing
+    , _svcPayload = pSvcPayload_
+    , _svcCallback = Nothing
+    }
+
+-- | The self-reported size of the version. This value is used for a
+-- pre-emptive quota check for legacy version uploads.
+svcSizeBytes :: Lens' SitesVersionsCreate (Maybe Int64)
+svcSizeBytes
+  = lens _svcSizeBytes (\ s a -> s{_svcSizeBytes = a})
+      . mapping _Coerce
+
+-- | Required. The parent to create the version for, in the format:
+-- 'sites\/site-name'
+svcParent :: Lens' SitesVersionsCreate Text
+svcParent
+  = lens _svcParent (\ s a -> s{_svcParent = a})
+
+-- | V1 error format.
+svcXgafv :: Lens' SitesVersionsCreate (Maybe Xgafv)
+svcXgafv = lens _svcXgafv (\ s a -> s{_svcXgafv = a})
+
+-- | A unique id for the new version. This is only specified for legacy
+-- version creations.
+svcVersionId :: Lens' SitesVersionsCreate (Maybe Text)
+svcVersionId
+  = lens _svcVersionId (\ s a -> s{_svcVersionId = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+svcUploadProtocol :: Lens' SitesVersionsCreate (Maybe Text)
+svcUploadProtocol
+  = lens _svcUploadProtocol
+      (\ s a -> s{_svcUploadProtocol = a})
+
+-- | OAuth access token.
+svcAccessToken :: Lens' SitesVersionsCreate (Maybe Text)
+svcAccessToken
+  = lens _svcAccessToken
+      (\ s a -> s{_svcAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+svcUploadType :: Lens' SitesVersionsCreate (Maybe Text)
+svcUploadType
+  = lens _svcUploadType
+      (\ s a -> s{_svcUploadType = a})
+
+-- | Multipart request metadata.
+svcPayload :: Lens' SitesVersionsCreate Version
+svcPayload
+  = lens _svcPayload (\ s a -> s{_svcPayload = a})
+
+-- | JSONP
+svcCallback :: Lens' SitesVersionsCreate (Maybe Text)
+svcCallback
+  = lens _svcCallback (\ s a -> s{_svcCallback = a})
+
+instance GoogleRequest SitesVersionsCreate where
+        type Rs SitesVersionsCreate = Version
+        type Scopes SitesVersionsCreate =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/firebase"]
+        requestClient SitesVersionsCreate'{..}
+          = go _svcParent _svcSizeBytes _svcXgafv _svcVersionId
+              _svcUploadProtocol
+              _svcAccessToken
+              _svcUploadType
+              _svcCallback
+              (Just AltJSON)
+              _svcPayload
+              firebaseHostingService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy SitesVersionsCreateResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/FirebaseHosting/Sites/Versions/Delete.hs b/gen/Network/Google/Resource/FirebaseHosting/Sites/Versions/Delete.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/FirebaseHosting/Sites/Versions/Delete.hs
@@ -0,0 +1,146 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.FirebaseHosting.Sites.Versions.Delete
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes the specified version.
+--
+-- /See:/ <https://firebase.google.com/docs/hosting/ Firebase Hosting API Reference> for @firebasehosting.sites.versions.delete@.
+module Network.Google.Resource.FirebaseHosting.Sites.Versions.Delete
+    (
+    -- * REST Resource
+      SitesVersionsDeleteResource
+
+    -- * Creating a Request
+    , sitesVersionsDelete
+    , SitesVersionsDelete
+
+    -- * Request Lenses
+    , svdXgafv
+    , svdUploadProtocol
+    , svdAccessToken
+    , svdUploadType
+    , svdName
+    , svdCallback
+    ) where
+
+import           Network.Google.FirebaseHosting.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @firebasehosting.sites.versions.delete@ method which the
+-- 'SitesVersionsDelete' request conforms to.
+type SitesVersionsDeleteResource =
+     "v1beta1" :>
+       Capture "name" Text :>
+         QueryParam "$.xgafv" Xgafv :>
+           QueryParam "upload_protocol" Text :>
+             QueryParam "access_token" Text :>
+               QueryParam "uploadType" Text :>
+                 QueryParam "callback" Text :>
+                   QueryParam "alt" AltJSON :> Delete '[JSON] Empty
+
+-- | Deletes the specified version.
+--
+-- /See:/ 'sitesVersionsDelete' smart constructor.
+data SitesVersionsDelete = SitesVersionsDelete'
+    { _svdXgafv          :: !(Maybe Xgafv)
+    , _svdUploadProtocol :: !(Maybe Text)
+    , _svdAccessToken    :: !(Maybe Text)
+    , _svdUploadType     :: !(Maybe Text)
+    , _svdName           :: !Text
+    , _svdCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'SitesVersionsDelete' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'svdXgafv'
+--
+-- * 'svdUploadProtocol'
+--
+-- * 'svdAccessToken'
+--
+-- * 'svdUploadType'
+--
+-- * 'svdName'
+--
+-- * 'svdCallback'
+sitesVersionsDelete
+    :: Text -- ^ 'svdName'
+    -> SitesVersionsDelete
+sitesVersionsDelete pSvdName_ =
+    SitesVersionsDelete'
+    { _svdXgafv = Nothing
+    , _svdUploadProtocol = Nothing
+    , _svdAccessToken = Nothing
+    , _svdUploadType = Nothing
+    , _svdName = pSvdName_
+    , _svdCallback = Nothing
+    }
+
+-- | V1 error format.
+svdXgafv :: Lens' SitesVersionsDelete (Maybe Xgafv)
+svdXgafv = lens _svdXgafv (\ s a -> s{_svdXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+svdUploadProtocol :: Lens' SitesVersionsDelete (Maybe Text)
+svdUploadProtocol
+  = lens _svdUploadProtocol
+      (\ s a -> s{_svdUploadProtocol = a})
+
+-- | OAuth access token.
+svdAccessToken :: Lens' SitesVersionsDelete (Maybe Text)
+svdAccessToken
+  = lens _svdAccessToken
+      (\ s a -> s{_svdAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+svdUploadType :: Lens' SitesVersionsDelete (Maybe Text)
+svdUploadType
+  = lens _svdUploadType
+      (\ s a -> s{_svdUploadType = a})
+
+-- | Required. The name of the version to be deleted, in the format:
+-- 'sites\/site-name\/versions\/versionID'
+svdName :: Lens' SitesVersionsDelete Text
+svdName = lens _svdName (\ s a -> s{_svdName = a})
+
+-- | JSONP
+svdCallback :: Lens' SitesVersionsDelete (Maybe Text)
+svdCallback
+  = lens _svdCallback (\ s a -> s{_svdCallback = a})
+
+instance GoogleRequest SitesVersionsDelete where
+        type Rs SitesVersionsDelete = Empty
+        type Scopes SitesVersionsDelete =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/firebase"]
+        requestClient SitesVersionsDelete'{..}
+          = go _svdName _svdXgafv _svdUploadProtocol
+              _svdAccessToken
+              _svdUploadType
+              _svdCallback
+              (Just AltJSON)
+              firebaseHostingService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy SitesVersionsDeleteResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/FirebaseHosting/Sites/Versions/Files/List.hs b/gen/Network/Google/Resource/FirebaseHosting/Sites/Versions/Files/List.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/FirebaseHosting/Sites/Versions/Files/List.hs
@@ -0,0 +1,193 @@
+{-# 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.FirebaseHosting.Sites.Versions.Files.List
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Lists the remaining files to be uploaded for the specified version.
+--
+-- /See:/ <https://firebase.google.com/docs/hosting/ Firebase Hosting API Reference> for @firebasehosting.sites.versions.files.list@.
+module Network.Google.Resource.FirebaseHosting.Sites.Versions.Files.List
+    (
+    -- * REST Resource
+      SitesVersionsFilesListResource
+
+    -- * Creating a Request
+    , sitesVersionsFilesList
+    , SitesVersionsFilesList
+
+    -- * Request Lenses
+    , svflParent
+    , svflStatus
+    , svflXgafv
+    , svflUploadProtocol
+    , svflAccessToken
+    , svflUploadType
+    , svflPageToken
+    , svflPageSize
+    , svflCallback
+    ) where
+
+import           Network.Google.FirebaseHosting.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @firebasehosting.sites.versions.files.list@ method which the
+-- 'SitesVersionsFilesList' request conforms to.
+type SitesVersionsFilesListResource =
+     "v1beta1" :>
+       Capture "parent" Text :>
+         "files" :>
+           QueryParam "status" Text :>
+             QueryParam "$.xgafv" Xgafv :>
+               QueryParam "upload_protocol" Text :>
+                 QueryParam "access_token" Text :>
+                   QueryParam "uploadType" Text :>
+                     QueryParam "pageToken" Text :>
+                       QueryParam "pageSize" (Textual Int32) :>
+                         QueryParam "callback" Text :>
+                           QueryParam "alt" AltJSON :>
+                             Get '[JSON] ListVersionFilesResponse
+
+-- | Lists the remaining files to be uploaded for the specified version.
+--
+-- /See:/ 'sitesVersionsFilesList' smart constructor.
+data SitesVersionsFilesList = SitesVersionsFilesList'
+    { _svflParent         :: !Text
+    , _svflStatus         :: !(Maybe Text)
+    , _svflXgafv          :: !(Maybe Xgafv)
+    , _svflUploadProtocol :: !(Maybe Text)
+    , _svflAccessToken    :: !(Maybe Text)
+    , _svflUploadType     :: !(Maybe Text)
+    , _svflPageToken      :: !(Maybe Text)
+    , _svflPageSize       :: !(Maybe (Textual Int32))
+    , _svflCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'SitesVersionsFilesList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'svflParent'
+--
+-- * 'svflStatus'
+--
+-- * 'svflXgafv'
+--
+-- * 'svflUploadProtocol'
+--
+-- * 'svflAccessToken'
+--
+-- * 'svflUploadType'
+--
+-- * 'svflPageToken'
+--
+-- * 'svflPageSize'
+--
+-- * 'svflCallback'
+sitesVersionsFilesList
+    :: Text -- ^ 'svflParent'
+    -> SitesVersionsFilesList
+sitesVersionsFilesList pSvflParent_ =
+    SitesVersionsFilesList'
+    { _svflParent = pSvflParent_
+    , _svflStatus = Nothing
+    , _svflXgafv = Nothing
+    , _svflUploadProtocol = Nothing
+    , _svflAccessToken = Nothing
+    , _svflUploadType = Nothing
+    , _svflPageToken = Nothing
+    , _svflPageSize = Nothing
+    , _svflCallback = Nothing
+    }
+
+-- | Required. The parent to list files for, in the format:
+-- 'sites\/site-name\/versions\/versionID'
+svflParent :: Lens' SitesVersionsFilesList Text
+svflParent
+  = lens _svflParent (\ s a -> s{_svflParent = a})
+
+-- | The type of files in the version that should be listed.
+svflStatus :: Lens' SitesVersionsFilesList (Maybe Text)
+svflStatus
+  = lens _svflStatus (\ s a -> s{_svflStatus = a})
+
+-- | V1 error format.
+svflXgafv :: Lens' SitesVersionsFilesList (Maybe Xgafv)
+svflXgafv
+  = lens _svflXgafv (\ s a -> s{_svflXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+svflUploadProtocol :: Lens' SitesVersionsFilesList (Maybe Text)
+svflUploadProtocol
+  = lens _svflUploadProtocol
+      (\ s a -> s{_svflUploadProtocol = a})
+
+-- | OAuth access token.
+svflAccessToken :: Lens' SitesVersionsFilesList (Maybe Text)
+svflAccessToken
+  = lens _svflAccessToken
+      (\ s a -> s{_svflAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+svflUploadType :: Lens' SitesVersionsFilesList (Maybe Text)
+svflUploadType
+  = lens _svflUploadType
+      (\ s a -> s{_svflUploadType = a})
+
+-- | The next_page_token from a previous request, if provided. This will be
+-- the encoded version of a
+-- firebase.hosting.proto.metadata.ListFilesPageToken.
+svflPageToken :: Lens' SitesVersionsFilesList (Maybe Text)
+svflPageToken
+  = lens _svflPageToken
+      (\ s a -> s{_svflPageToken = a})
+
+-- | The page size to return. Defaults to 1000.
+svflPageSize :: Lens' SitesVersionsFilesList (Maybe Int32)
+svflPageSize
+  = lens _svflPageSize (\ s a -> s{_svflPageSize = a})
+      . mapping _Coerce
+
+-- | JSONP
+svflCallback :: Lens' SitesVersionsFilesList (Maybe Text)
+svflCallback
+  = lens _svflCallback (\ s a -> s{_svflCallback = a})
+
+instance GoogleRequest SitesVersionsFilesList where
+        type Rs SitesVersionsFilesList =
+             ListVersionFilesResponse
+        type Scopes SitesVersionsFilesList =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/cloud-platform.read-only",
+               "https://www.googleapis.com/auth/firebase",
+               "https://www.googleapis.com/auth/firebase.readonly"]
+        requestClient SitesVersionsFilesList'{..}
+          = go _svflParent _svflStatus _svflXgafv
+              _svflUploadProtocol
+              _svflAccessToken
+              _svflUploadType
+              _svflPageToken
+              _svflPageSize
+              _svflCallback
+              (Just AltJSON)
+              firebaseHostingService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy SitesVersionsFilesListResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/FirebaseHosting/Sites/Versions/Patch.hs b/gen/Network/Google/Resource/FirebaseHosting/Sites/Versions/Patch.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/FirebaseHosting/Sites/Versions/Patch.hs
@@ -0,0 +1,188 @@
+{-# 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.FirebaseHosting.Sites.Versions.Patch
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Updates the specified metadata for a version. Note that this method will
+-- fail with \`FAILED_PRECONDITION\` in the event of an invalid state
+-- transition. The only valid transition for a version is currently from a
+-- \`CREATED\` status to a \`FINALIZED\` status. Use
+-- [\`DeleteVersion\`](..\/sites.versions\/delete) to set the status of a
+-- version to \`DELETED\`.
+--
+-- /See:/ <https://firebase.google.com/docs/hosting/ Firebase Hosting API Reference> for @firebasehosting.sites.versions.patch@.
+module Network.Google.Resource.FirebaseHosting.Sites.Versions.Patch
+    (
+    -- * REST Resource
+      SitesVersionsPatchResource
+
+    -- * Creating a Request
+    , sitesVersionsPatch
+    , SitesVersionsPatch
+
+    -- * Request Lenses
+    , svpXgafv
+    , svpUploadProtocol
+    , svpUpdateMask
+    , svpAccessToken
+    , svpUploadType
+    , svpPayload
+    , svpName
+    , svpCallback
+    ) where
+
+import           Network.Google.FirebaseHosting.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @firebasehosting.sites.versions.patch@ method which the
+-- 'SitesVersionsPatch' request conforms to.
+type SitesVersionsPatchResource =
+     "v1beta1" :>
+       Capture "name" Text :>
+         QueryParam "$.xgafv" Xgafv :>
+           QueryParam "upload_protocol" Text :>
+             QueryParam "updateMask" GFieldMask :>
+               QueryParam "access_token" Text :>
+                 QueryParam "uploadType" Text :>
+                   QueryParam "callback" Text :>
+                     QueryParam "alt" AltJSON :>
+                       ReqBody '[JSON] Version :> Patch '[JSON] Version
+
+-- | Updates the specified metadata for a version. Note that this method will
+-- fail with \`FAILED_PRECONDITION\` in the event of an invalid state
+-- transition. The only valid transition for a version is currently from a
+-- \`CREATED\` status to a \`FINALIZED\` status. Use
+-- [\`DeleteVersion\`](..\/sites.versions\/delete) to set the status of a
+-- version to \`DELETED\`.
+--
+-- /See:/ 'sitesVersionsPatch' smart constructor.
+data SitesVersionsPatch = SitesVersionsPatch'
+    { _svpXgafv          :: !(Maybe Xgafv)
+    , _svpUploadProtocol :: !(Maybe Text)
+    , _svpUpdateMask     :: !(Maybe GFieldMask)
+    , _svpAccessToken    :: !(Maybe Text)
+    , _svpUploadType     :: !(Maybe Text)
+    , _svpPayload        :: !Version
+    , _svpName           :: !Text
+    , _svpCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'SitesVersionsPatch' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'svpXgafv'
+--
+-- * 'svpUploadProtocol'
+--
+-- * 'svpUpdateMask'
+--
+-- * 'svpAccessToken'
+--
+-- * 'svpUploadType'
+--
+-- * 'svpPayload'
+--
+-- * 'svpName'
+--
+-- * 'svpCallback'
+sitesVersionsPatch
+    :: Version -- ^ 'svpPayload'
+    -> Text -- ^ 'svpName'
+    -> SitesVersionsPatch
+sitesVersionsPatch pSvpPayload_ pSvpName_ =
+    SitesVersionsPatch'
+    { _svpXgafv = Nothing
+    , _svpUploadProtocol = Nothing
+    , _svpUpdateMask = Nothing
+    , _svpAccessToken = Nothing
+    , _svpUploadType = Nothing
+    , _svpPayload = pSvpPayload_
+    , _svpName = pSvpName_
+    , _svpCallback = Nothing
+    }
+
+-- | V1 error format.
+svpXgafv :: Lens' SitesVersionsPatch (Maybe Xgafv)
+svpXgafv = lens _svpXgafv (\ s a -> s{_svpXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+svpUploadProtocol :: Lens' SitesVersionsPatch (Maybe Text)
+svpUploadProtocol
+  = lens _svpUploadProtocol
+      (\ s a -> s{_svpUploadProtocol = a})
+
+-- | A set of field names from your [version](..\/sites.versions) that you
+-- want to update.
+-- A field will be overwritten if, and only if, it\'s in the mask.
+-- If a mask is not provided then a default mask of only
+-- [\`status\`](..\/sites.versions#Version.FIELDS.status) will be used.
+svpUpdateMask :: Lens' SitesVersionsPatch (Maybe GFieldMask)
+svpUpdateMask
+  = lens _svpUpdateMask
+      (\ s a -> s{_svpUpdateMask = a})
+
+-- | OAuth access token.
+svpAccessToken :: Lens' SitesVersionsPatch (Maybe Text)
+svpAccessToken
+  = lens _svpAccessToken
+      (\ s a -> s{_svpAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+svpUploadType :: Lens' SitesVersionsPatch (Maybe Text)
+svpUploadType
+  = lens _svpUploadType
+      (\ s a -> s{_svpUploadType = a})
+
+-- | Multipart request metadata.
+svpPayload :: Lens' SitesVersionsPatch Version
+svpPayload
+  = lens _svpPayload (\ s a -> s{_svpPayload = a})
+
+-- | The unique identifier for a version, in the format:
+-- 'sites\/site-name\/versions\/versionID' This name is provided in the
+-- response body when you call the
+-- [\`CreateVersion\`](..\/sites.versions\/create) endpoint.
+svpName :: Lens' SitesVersionsPatch Text
+svpName = lens _svpName (\ s a -> s{_svpName = a})
+
+-- | JSONP
+svpCallback :: Lens' SitesVersionsPatch (Maybe Text)
+svpCallback
+  = lens _svpCallback (\ s a -> s{_svpCallback = a})
+
+instance GoogleRequest SitesVersionsPatch where
+        type Rs SitesVersionsPatch = Version
+        type Scopes SitesVersionsPatch =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/firebase"]
+        requestClient SitesVersionsPatch'{..}
+          = go _svpName _svpXgafv _svpUploadProtocol
+              _svpUpdateMask
+              _svpAccessToken
+              _svpUploadType
+              _svpCallback
+              (Just AltJSON)
+              _svpPayload
+              firebaseHostingService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy SitesVersionsPatchResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/FirebaseHosting/Sites/Versions/PopulateFiles.hs b/gen/Network/Google/Resource/FirebaseHosting/Sites/Versions/PopulateFiles.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/FirebaseHosting/Sites/Versions/PopulateFiles.hs
@@ -0,0 +1,164 @@
+{-# 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.FirebaseHosting.Sites.Versions.PopulateFiles
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Adds content files to a version.
+--
+-- /See:/ <https://firebase.google.com/docs/hosting/ Firebase Hosting API Reference> for @firebasehosting.sites.versions.populateFiles@.
+module Network.Google.Resource.FirebaseHosting.Sites.Versions.PopulateFiles
+    (
+    -- * REST Resource
+      SitesVersionsPopulateFilesResource
+
+    -- * Creating a Request
+    , sitesVersionsPopulateFiles
+    , SitesVersionsPopulateFiles
+
+    -- * Request Lenses
+    , svpfParent
+    , svpfXgafv
+    , svpfUploadProtocol
+    , svpfAccessToken
+    , svpfUploadType
+    , svpfPayload
+    , svpfCallback
+    ) where
+
+import           Network.Google.FirebaseHosting.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @firebasehosting.sites.versions.populateFiles@ method which the
+-- 'SitesVersionsPopulateFiles' request conforms to.
+type SitesVersionsPopulateFilesResource =
+     "v1beta1" :>
+       CaptureMode "parent" "populateFiles" Text :>
+         QueryParam "$.xgafv" Xgafv :>
+           QueryParam "upload_protocol" Text :>
+             QueryParam "access_token" Text :>
+               QueryParam "uploadType" Text :>
+                 QueryParam "callback" Text :>
+                   QueryParam "alt" AltJSON :>
+                     ReqBody '[JSON] PopulateVersionFilesRequest :>
+                       Post '[JSON] PopulateVersionFilesResponse
+
+-- | Adds content files to a version.
+--
+-- /See:/ 'sitesVersionsPopulateFiles' smart constructor.
+data SitesVersionsPopulateFiles = SitesVersionsPopulateFiles'
+    { _svpfParent         :: !Text
+    , _svpfXgafv          :: !(Maybe Xgafv)
+    , _svpfUploadProtocol :: !(Maybe Text)
+    , _svpfAccessToken    :: !(Maybe Text)
+    , _svpfUploadType     :: !(Maybe Text)
+    , _svpfPayload        :: !PopulateVersionFilesRequest
+    , _svpfCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'SitesVersionsPopulateFiles' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'svpfParent'
+--
+-- * 'svpfXgafv'
+--
+-- * 'svpfUploadProtocol'
+--
+-- * 'svpfAccessToken'
+--
+-- * 'svpfUploadType'
+--
+-- * 'svpfPayload'
+--
+-- * 'svpfCallback'
+sitesVersionsPopulateFiles
+    :: Text -- ^ 'svpfParent'
+    -> PopulateVersionFilesRequest -- ^ 'svpfPayload'
+    -> SitesVersionsPopulateFiles
+sitesVersionsPopulateFiles pSvpfParent_ pSvpfPayload_ =
+    SitesVersionsPopulateFiles'
+    { _svpfParent = pSvpfParent_
+    , _svpfXgafv = Nothing
+    , _svpfUploadProtocol = Nothing
+    , _svpfAccessToken = Nothing
+    , _svpfUploadType = Nothing
+    , _svpfPayload = pSvpfPayload_
+    , _svpfCallback = Nothing
+    }
+
+-- | Required. The version to add files to, in the format:
+-- 'sites\/site-name\/versions\/versionID'
+svpfParent :: Lens' SitesVersionsPopulateFiles Text
+svpfParent
+  = lens _svpfParent (\ s a -> s{_svpfParent = a})
+
+-- | V1 error format.
+svpfXgafv :: Lens' SitesVersionsPopulateFiles (Maybe Xgafv)
+svpfXgafv
+  = lens _svpfXgafv (\ s a -> s{_svpfXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+svpfUploadProtocol :: Lens' SitesVersionsPopulateFiles (Maybe Text)
+svpfUploadProtocol
+  = lens _svpfUploadProtocol
+      (\ s a -> s{_svpfUploadProtocol = a})
+
+-- | OAuth access token.
+svpfAccessToken :: Lens' SitesVersionsPopulateFiles (Maybe Text)
+svpfAccessToken
+  = lens _svpfAccessToken
+      (\ s a -> s{_svpfAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+svpfUploadType :: Lens' SitesVersionsPopulateFiles (Maybe Text)
+svpfUploadType
+  = lens _svpfUploadType
+      (\ s a -> s{_svpfUploadType = a})
+
+-- | Multipart request metadata.
+svpfPayload :: Lens' SitesVersionsPopulateFiles PopulateVersionFilesRequest
+svpfPayload
+  = lens _svpfPayload (\ s a -> s{_svpfPayload = a})
+
+-- | JSONP
+svpfCallback :: Lens' SitesVersionsPopulateFiles (Maybe Text)
+svpfCallback
+  = lens _svpfCallback (\ s a -> s{_svpfCallback = a})
+
+instance GoogleRequest SitesVersionsPopulateFiles
+         where
+        type Rs SitesVersionsPopulateFiles =
+             PopulateVersionFilesResponse
+        type Scopes SitesVersionsPopulateFiles =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/firebase"]
+        requestClient SitesVersionsPopulateFiles'{..}
+          = go _svpfParent _svpfXgafv _svpfUploadProtocol
+              _svpfAccessToken
+              _svpfUploadType
+              _svpfCallback
+              (Just AltJSON)
+              _svpfPayload
+              firebaseHostingService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy SitesVersionsPopulateFilesResource)
+                      mempty
diff --git a/gogol-firebasehosting.cabal b/gogol-firebasehosting.cabal
new file mode 100644
--- /dev/null
+++ b/gogol-firebasehosting.cabal
@@ -0,0 +1,61 @@
+name:                  gogol-firebasehosting
+version:               0.4.0
+synopsis:              Google Firebase Hosting SDK.
+homepage:              https://github.com/brendanhay/gogol
+bug-reports:           https://github.com/brendanhay/gogol/issues
+license:               OtherLicense
+license-file:          LICENSE
+author:                Brendan Hay
+maintainer:            Brendan Hay <brendan.g.hay@gmail.com>
+copyright:             Copyright (c) 2015-2016 Brendan Hay
+category:              Network, Google, Cloud
+build-type:            Simple
+cabal-version:         >= 1.10
+extra-source-files:    README.md src/.gitkeep
+
+description:
+    The Firebase Hosting REST API enables programmatic custom deployment for
+    releasing versions of your Firebase hosted content and configuration
+    files.
+    .
+    /Warning:/ This is an experimental prototype/preview release which is still
+    under exploratory development and not intended for public use, caveat emptor!
+    .
+    This library is compatible with version @v1beta1@
+    of the API.
+
+source-repository head
+    type:     git
+    location: git://github.com/brendanhay/gogol.git
+
+library
+    default-language:  Haskell2010
+    hs-source-dirs:    src gen
+
+    ghc-options:       -Wall
+
+    exposed-modules:
+          Network.Google.FirebaseHosting
+        , Network.Google.FirebaseHosting.Types
+        , Network.Google.Resource.FirebaseHosting.Sites.Domains.Create
+        , Network.Google.Resource.FirebaseHosting.Sites.Domains.Delete
+        , Network.Google.Resource.FirebaseHosting.Sites.Domains.Get
+        , Network.Google.Resource.FirebaseHosting.Sites.Domains.List
+        , Network.Google.Resource.FirebaseHosting.Sites.Domains.Update
+        , Network.Google.Resource.FirebaseHosting.Sites.GetConfig
+        , Network.Google.Resource.FirebaseHosting.Sites.Releases.Create
+        , Network.Google.Resource.FirebaseHosting.Sites.Releases.List
+        , Network.Google.Resource.FirebaseHosting.Sites.UpdateConfig
+        , Network.Google.Resource.FirebaseHosting.Sites.Versions.Create
+        , Network.Google.Resource.FirebaseHosting.Sites.Versions.Delete
+        , Network.Google.Resource.FirebaseHosting.Sites.Versions.Files.List
+        , Network.Google.Resource.FirebaseHosting.Sites.Versions.Patch
+        , Network.Google.Resource.FirebaseHosting.Sites.Versions.PopulateFiles
+
+    other-modules:
+          Network.Google.FirebaseHosting.Types.Product
+        , Network.Google.FirebaseHosting.Types.Sum
+
+    build-depends:
+          gogol-core == 0.4.0.*
+        , base       >= 4.7 && < 5
diff --git a/src/.gitkeep b/src/.gitkeep
new file mode 100644
--- /dev/null
+++ b/src/.gitkeep
