diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -8,7 +8,7 @@
 
 ## Version
 
-`0.5.0`
+`1.0.0`
 
 
 ## Description
diff --git a/Setup.hs b/Setup.hs
--- a/Setup.hs
+++ b/Setup.hs
@@ -1,2 +1,3 @@
-import           Distribution.Simple
+import Distribution.Simple
+
 main = defaultMain
diff --git a/gen/Gogol/AdExperienceReport.hs b/gen/Gogol/AdExperienceReport.hs
new file mode 100644
--- /dev/null
+++ b/gen/Gogol/AdExperienceReport.hs
@@ -0,0 +1,76 @@
+{-# LANGUAGE DataKinds #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE ImportQualifiedPost #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-name-shadowing #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- |
+-- Module      : Gogol.AdExperienceReport
+-- Copyright   : (c) 2015-2025 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay+gogol@gmail.com>
+--               Toni Cebrián <toni@tonicebrian.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Views Ad Experience Report data, and gets a list of sites that have a significant number of annoying ads.
+--
+-- /See:/ <https://developers.google.com/ad-experience-report/ Ad Experience Report API Reference>
+module Gogol.AdExperienceReport
+  ( -- * Configuration
+    adExperienceReportService,
+
+    -- * Resources
+
+    -- ** adexperiencereport.sites.get
+    AdExperienceReportSitesGetResource,
+    AdExperienceReportSitesGet (..),
+    newAdExperienceReportSitesGet,
+
+    -- ** adexperiencereport.violatingSites.list
+    AdExperienceReportViolatingSitesListResource,
+    AdExperienceReportViolatingSitesList (..),
+    newAdExperienceReportViolatingSitesList,
+
+    -- * Types
+
+    -- ** Xgafv
+    Xgafv (..),
+
+    -- ** PlatformSummary
+    PlatformSummary (..),
+    newPlatformSummary,
+
+    -- ** PlatformSummary_BetterAdsStatus
+    PlatformSummary_BetterAdsStatus (..),
+
+    -- ** PlatformSummary_FilterStatus
+    PlatformSummary_FilterStatus (..),
+
+    -- ** PlatformSummary_RegionItem
+    PlatformSummary_RegionItem (..),
+
+    -- ** SiteSummaryResponse
+    SiteSummaryResponse (..),
+    newSiteSummaryResponse,
+
+    -- ** ViolatingSitesResponse
+    ViolatingSitesResponse (..),
+    newViolatingSitesResponse,
+  )
+where
+
+import Gogol.AdExperienceReport.Sites.Get
+import Gogol.AdExperienceReport.Types
+import Gogol.AdExperienceReport.ViolatingSites.List
diff --git a/gen/Gogol/AdExperienceReport/Internal/Product.hs b/gen/Gogol/AdExperienceReport/Internal/Product.hs
new file mode 100644
--- /dev/null
+++ b/gen/Gogol/AdExperienceReport/Internal/Product.hs
@@ -0,0 +1,180 @@
+{-# LANGUAGE DataKinds #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE ImportQualifiedPost #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-name-shadowing #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- |
+-- Module      : Gogol.AdExperienceReport.Internal.Product
+-- Copyright   : (c) 2015-2025 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay+gogol@gmail.com>
+--               Toni Cebrián <toni@tonicebrian.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Gogol.AdExperienceReport.Internal.Product
+  ( -- * PlatformSummary
+    PlatformSummary (..),
+    newPlatformSummary,
+
+    -- * SiteSummaryResponse
+    SiteSummaryResponse (..),
+    newSiteSummaryResponse,
+
+    -- * ViolatingSitesResponse
+    ViolatingSitesResponse (..),
+    newViolatingSitesResponse,
+  )
+where
+
+import Gogol.AdExperienceReport.Internal.Sum
+import Gogol.Prelude qualified as Core
+
+-- | A site\'s Ad Experience Report summary on a single platform.
+--
+-- /See:/ 'newPlatformSummary' smart constructor.
+data PlatformSummary = PlatformSummary
+  { -- | The site\'s Ad Experience Report status on this platform.
+    betterAdsStatus :: (Core.Maybe PlatformSummary_BetterAdsStatus),
+    -- | The time at which <https://support.google.com/webtools/answer/7308033 enforcement> against the site began or will begin on this platform. Not set when the filter_status is OFF.
+    enforcementTime :: (Core.Maybe Core.DateTime),
+    -- | The site\'s <https://support.google.com/webtools/answer/7308033 enforcement status> on this platform.
+    filterStatus :: (Core.Maybe PlatformSummary_FilterStatus),
+    -- | The time at which the site\'s status last changed on this platform.
+    lastChangeTime :: (Core.Maybe Core.DateTime),
+    -- | The site\'s regions on this platform. No longer populated, because there is no longer any semantic difference between sites in different regions.
+    region :: (Core.Maybe [PlatformSummary_RegionItem]),
+    -- | A link to the full Ad Experience Report for the site on this platform.. Not set in ViolatingSitesResponse. Note that you must complete the <https://support.google.com/webmasters/answer/9008080 Search Console verification process> for the site before you can access the full report.
+    reportUrl :: (Core.Maybe Core.Text),
+    -- | Whether the site is currently under review on this platform.
+    underReview :: (Core.Maybe Core.Bool)
+  }
+  deriving (Core.Eq, Core.Show, Core.Generic)
+
+-- | Creates a value of 'PlatformSummary' with the minimum fields required to make a request.
+newPlatformSummary ::
+  PlatformSummary
+newPlatformSummary =
+  PlatformSummary
+    { betterAdsStatus = Core.Nothing,
+      enforcementTime = Core.Nothing,
+      filterStatus = Core.Nothing,
+      lastChangeTime = Core.Nothing,
+      region = Core.Nothing,
+      reportUrl = Core.Nothing,
+      underReview = Core.Nothing
+    }
+
+instance Core.FromJSON PlatformSummary where
+  parseJSON =
+    Core.withObject
+      "PlatformSummary"
+      ( \o ->
+          PlatformSummary
+            Core.<$> (o Core..:? "betterAdsStatus")
+            Core.<*> (o Core..:? "enforcementTime")
+            Core.<*> (o Core..:? "filterStatus")
+            Core.<*> (o Core..:? "lastChangeTime")
+            Core.<*> (o Core..:? "region")
+            Core.<*> (o Core..:? "reportUrl")
+            Core.<*> (o Core..:? "underReview")
+      )
+
+instance Core.ToJSON PlatformSummary where
+  toJSON PlatformSummary {..} =
+    Core.object
+      ( Core.catMaybes
+          [ ("betterAdsStatus" Core..=) Core.<$> betterAdsStatus,
+            ("enforcementTime" Core..=) Core.<$> enforcementTime,
+            ("filterStatus" Core..=) Core.<$> filterStatus,
+            ("lastChangeTime" Core..=) Core.<$> lastChangeTime,
+            ("region" Core..=) Core.<$> region,
+            ("reportUrl" Core..=) Core.<$> reportUrl,
+            ("underReview" Core..=) Core.<$> underReview
+          ]
+      )
+
+-- | Response message for GetSiteSummary.
+--
+-- /See:/ 'newSiteSummaryResponse' smart constructor.
+data SiteSummaryResponse = SiteSummaryResponse
+  { -- | The site\'s Ad Experience Report summary on desktop.
+    desktopSummary :: (Core.Maybe PlatformSummary),
+    -- | The site\'s Ad Experience Report summary on mobile.
+    mobileSummary :: (Core.Maybe PlatformSummary),
+    -- | The name of the reviewed site, e.g. @google.com@.
+    reviewedSite :: (Core.Maybe Core.Text)
+  }
+  deriving (Core.Eq, Core.Show, Core.Generic)
+
+-- | Creates a value of 'SiteSummaryResponse' with the minimum fields required to make a request.
+newSiteSummaryResponse ::
+  SiteSummaryResponse
+newSiteSummaryResponse =
+  SiteSummaryResponse
+    { desktopSummary = Core.Nothing,
+      mobileSummary = Core.Nothing,
+      reviewedSite = Core.Nothing
+    }
+
+instance Core.FromJSON SiteSummaryResponse where
+  parseJSON =
+    Core.withObject
+      "SiteSummaryResponse"
+      ( \o ->
+          SiteSummaryResponse
+            Core.<$> (o Core..:? "desktopSummary")
+            Core.<*> (o Core..:? "mobileSummary")
+            Core.<*> (o Core..:? "reviewedSite")
+      )
+
+instance Core.ToJSON SiteSummaryResponse where
+  toJSON SiteSummaryResponse {..} =
+    Core.object
+      ( Core.catMaybes
+          [ ("desktopSummary" Core..=) Core.<$> desktopSummary,
+            ("mobileSummary" Core..=) Core.<$> mobileSummary,
+            ("reviewedSite" Core..=) Core.<$> reviewedSite
+          ]
+      )
+
+-- | Response message for ListViolatingSites.
+--
+-- /See:/ 'newViolatingSitesResponse' smart constructor.
+newtype ViolatingSitesResponse = ViolatingSitesResponse
+  { -- | The list of violating sites.
+    violatingSites :: (Core.Maybe [SiteSummaryResponse])
+  }
+  deriving (Core.Eq, Core.Show, Core.Generic)
+
+-- | Creates a value of 'ViolatingSitesResponse' with the minimum fields required to make a request.
+newViolatingSitesResponse ::
+  ViolatingSitesResponse
+newViolatingSitesResponse =
+  ViolatingSitesResponse {violatingSites = Core.Nothing}
+
+instance Core.FromJSON ViolatingSitesResponse where
+  parseJSON =
+    Core.withObject
+      "ViolatingSitesResponse"
+      ( \o ->
+          ViolatingSitesResponse Core.<$> (o Core..:? "violatingSites")
+      )
+
+instance Core.ToJSON ViolatingSitesResponse where
+  toJSON ViolatingSitesResponse {..} =
+    Core.object
+      ( Core.catMaybes
+          [("violatingSites" Core..=) Core.<$> violatingSites]
+      )
diff --git a/gen/Gogol/AdExperienceReport/Internal/Sum.hs b/gen/Gogol/AdExperienceReport/Internal/Sum.hs
new file mode 100644
--- /dev/null
+++ b/gen/Gogol/AdExperienceReport/Internal/Sum.hs
@@ -0,0 +1,206 @@
+{-# LANGUAGE DataKinds #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE ImportQualifiedPost #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-name-shadowing #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- |
+-- Module      : Gogol.AdExperienceReport.Internal.Sum
+-- Copyright   : (c) 2015-2025 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay+gogol@gmail.com>
+--               Toni Cebrián <toni@tonicebrian.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Gogol.AdExperienceReport.Internal.Sum
+  ( -- * Xgafv
+    Xgafv
+      ( Xgafv_1,
+        Xgafv_2,
+        ..
+      ),
+
+    -- * PlatformSummary_BetterAdsStatus
+    PlatformSummary_BetterAdsStatus
+      ( PlatformSummary_BetterAdsStatus_Unknown,
+        PlatformSummary_BetterAdsStatus_Passing,
+        PlatformSummary_BetterAdsStatus_Warning,
+        PlatformSummary_BetterAdsStatus_Failing,
+        ..
+      ),
+
+    -- * PlatformSummary_FilterStatus
+    PlatformSummary_FilterStatus
+      ( PlatformSummary_FilterStatus_Unknown,
+        PlatformSummary_FilterStatus_ON,
+        PlatformSummary_FilterStatus_Off,
+        PlatformSummary_FilterStatus_Paused,
+        PlatformSummary_FilterStatus_Pending,
+        ..
+      ),
+
+    -- * PlatformSummary_RegionItem
+    PlatformSummary_RegionItem
+      ( PlatformSummary_RegionItem_REGIONUNKNOWN,
+        PlatformSummary_RegionItem_REGIONA,
+        PlatformSummary_RegionItem_REGIONB,
+        PlatformSummary_RegionItem_REGIONC,
+        ..
+      ),
+  )
+where
+
+import Gogol.Prelude qualified as Core
+
+-- | V1 error format.
+newtype Xgafv = Xgafv {fromXgafv :: Core.Text}
+  deriving stock (Core.Show, Core.Read, Core.Eq, Core.Ord, Core.Generic)
+  deriving newtype
+    ( Core.Hashable,
+      Core.ToHttpApiData,
+      Core.FromHttpApiData,
+      Core.ToJSON,
+      Core.ToJSONKey,
+      Core.FromJSON,
+      Core.FromJSONKey
+    )
+
+-- | v1 error format
+pattern Xgafv_1 :: Xgafv
+pattern Xgafv_1 = Xgafv "1"
+
+-- | v2 error format
+pattern Xgafv_2 :: Xgafv
+pattern Xgafv_2 = Xgafv "2"
+
+{-# COMPLETE
+  Xgafv_1,
+  Xgafv_2,
+  Xgafv
+  #-}
+
+-- | The site\'s Ad Experience Report status on this platform.
+newtype PlatformSummary_BetterAdsStatus = PlatformSummary_BetterAdsStatus {fromPlatformSummary_BetterAdsStatus :: Core.Text}
+  deriving stock (Core.Show, Core.Read, Core.Eq, Core.Ord, Core.Generic)
+  deriving newtype
+    ( Core.Hashable,
+      Core.ToHttpApiData,
+      Core.FromHttpApiData,
+      Core.ToJSON,
+      Core.ToJSONKey,
+      Core.FromJSON,
+      Core.FromJSONKey
+    )
+
+-- | Not reviewed.
+pattern PlatformSummary_BetterAdsStatus_Unknown :: PlatformSummary_BetterAdsStatus
+pattern PlatformSummary_BetterAdsStatus_Unknown = PlatformSummary_BetterAdsStatus "UNKNOWN"
+
+-- | Passing.
+pattern PlatformSummary_BetterAdsStatus_Passing :: PlatformSummary_BetterAdsStatus
+pattern PlatformSummary_BetterAdsStatus_Passing = PlatformSummary_BetterAdsStatus "PASSING"
+
+-- | Warning. No longer a possible status.
+pattern PlatformSummary_BetterAdsStatus_Warning :: PlatformSummary_BetterAdsStatus
+pattern PlatformSummary_BetterAdsStatus_Warning = PlatformSummary_BetterAdsStatus "WARNING"
+
+-- | Failing.
+pattern PlatformSummary_BetterAdsStatus_Failing :: PlatformSummary_BetterAdsStatus
+pattern PlatformSummary_BetterAdsStatus_Failing = PlatformSummary_BetterAdsStatus "FAILING"
+
+{-# COMPLETE
+  PlatformSummary_BetterAdsStatus_Unknown,
+  PlatformSummary_BetterAdsStatus_Passing,
+  PlatformSummary_BetterAdsStatus_Warning,
+  PlatformSummary_BetterAdsStatus_Failing,
+  PlatformSummary_BetterAdsStatus
+  #-}
+
+-- | The site\'s <https://support.google.com/webtools/answer/7308033 enforcement status> on this platform.
+newtype PlatformSummary_FilterStatus = PlatformSummary_FilterStatus {fromPlatformSummary_FilterStatus :: Core.Text}
+  deriving stock (Core.Show, Core.Read, Core.Eq, Core.Ord, Core.Generic)
+  deriving newtype
+    ( Core.Hashable,
+      Core.ToHttpApiData,
+      Core.FromHttpApiData,
+      Core.ToJSON,
+      Core.ToJSONKey,
+      Core.FromJSON,
+      Core.FromJSONKey
+    )
+
+-- | N\/A.
+pattern PlatformSummary_FilterStatus_Unknown :: PlatformSummary_FilterStatus
+pattern PlatformSummary_FilterStatus_Unknown = PlatformSummary_FilterStatus "UNKNOWN"
+
+-- | Ad filtering is on.
+pattern PlatformSummary_FilterStatus_ON :: PlatformSummary_FilterStatus
+pattern PlatformSummary_FilterStatus_ON = PlatformSummary_FilterStatus "ON"
+
+-- | Ad filtering is off.
+pattern PlatformSummary_FilterStatus_Off :: PlatformSummary_FilterStatus
+pattern PlatformSummary_FilterStatus_Off = PlatformSummary_FilterStatus "OFF"
+
+-- | Ad filtering is paused.
+pattern PlatformSummary_FilterStatus_Paused :: PlatformSummary_FilterStatus
+pattern PlatformSummary_FilterStatus_Paused = PlatformSummary_FilterStatus "PAUSED"
+
+-- | Ad filtering is pending.
+pattern PlatformSummary_FilterStatus_Pending :: PlatformSummary_FilterStatus
+pattern PlatformSummary_FilterStatus_Pending = PlatformSummary_FilterStatus "PENDING"
+
+{-# COMPLETE
+  PlatformSummary_FilterStatus_Unknown,
+  PlatformSummary_FilterStatus_ON,
+  PlatformSummary_FilterStatus_Off,
+  PlatformSummary_FilterStatus_Paused,
+  PlatformSummary_FilterStatus_Pending,
+  PlatformSummary_FilterStatus
+  #-}
+
+newtype PlatformSummary_RegionItem = PlatformSummary_RegionItem {fromPlatformSummary_RegionItem :: Core.Text}
+  deriving stock (Core.Show, Core.Read, Core.Eq, Core.Ord, Core.Generic)
+  deriving newtype
+    ( Core.Hashable,
+      Core.ToHttpApiData,
+      Core.FromHttpApiData,
+      Core.ToJSON,
+      Core.ToJSONKey,
+      Core.FromJSON,
+      Core.FromJSONKey
+    )
+
+-- | Ad standard not yet defined for your region.
+pattern PlatformSummary_RegionItem_REGIONUNKNOWN :: PlatformSummary_RegionItem
+pattern PlatformSummary_RegionItem_REGIONUNKNOWN = PlatformSummary_RegionItem "REGION_UNKNOWN"
+
+-- | Region A.
+pattern PlatformSummary_RegionItem_REGIONA :: PlatformSummary_RegionItem
+pattern PlatformSummary_RegionItem_REGIONA = PlatformSummary_RegionItem "REGION_A"
+
+-- | Region B.
+pattern PlatformSummary_RegionItem_REGIONB :: PlatformSummary_RegionItem
+pattern PlatformSummary_RegionItem_REGIONB = PlatformSummary_RegionItem "REGION_B"
+
+-- | Region C.
+pattern PlatformSummary_RegionItem_REGIONC :: PlatformSummary_RegionItem
+pattern PlatformSummary_RegionItem_REGIONC = PlatformSummary_RegionItem "REGION_C"
+
+{-# COMPLETE
+  PlatformSummary_RegionItem_REGIONUNKNOWN,
+  PlatformSummary_RegionItem_REGIONA,
+  PlatformSummary_RegionItem_REGIONB,
+  PlatformSummary_RegionItem_REGIONC,
+  PlatformSummary_RegionItem
+  #-}
diff --git a/gen/Gogol/AdExperienceReport/Sites/Get.hs b/gen/Gogol/AdExperienceReport/Sites/Get.hs
new file mode 100644
--- /dev/null
+++ b/gen/Gogol/AdExperienceReport/Sites/Get.hs
@@ -0,0 +1,107 @@
+{-# LANGUAGE DataKinds #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE ImportQualifiedPost #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-name-shadowing #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- |
+-- Module      : Gogol.AdExperienceReport.Sites.Get
+-- Copyright   : (c) 2015-2025 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay+gogol@gmail.com>
+--               Toni Cebrián <toni@tonicebrian.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Gets a site\'s Ad Experience Report summary.
+--
+-- /See:/ <https://developers.google.com/ad-experience-report/ Ad Experience Report API Reference> for @adexperiencereport.sites.get@.
+module Gogol.AdExperienceReport.Sites.Get
+  ( -- * Resource
+    AdExperienceReportSitesGetResource,
+
+    -- ** Constructing a Request
+    AdExperienceReportSitesGet (..),
+    newAdExperienceReportSitesGet,
+  )
+where
+
+import Gogol.AdExperienceReport.Types
+import Gogol.Prelude qualified as Core
+
+-- | A resource alias for @adexperiencereport.sites.get@ method which the
+-- 'AdExperienceReportSitesGet' request conforms to.
+type AdExperienceReportSitesGetResource =
+  "v1"
+    Core.:> Core.Capture "name" Core.Text
+    Core.:> Core.QueryParam "$.xgafv" Xgafv
+    Core.:> Core.QueryParam "access_token" Core.Text
+    Core.:> Core.QueryParam "callback" Core.Text
+    Core.:> Core.QueryParam "uploadType" Core.Text
+    Core.:> Core.QueryParam "upload_protocol" Core.Text
+    Core.:> Core.QueryParam "alt" Core.AltJSON
+    Core.:> Core.Get '[Core.JSON] SiteSummaryResponse
+
+-- | Gets a site\'s Ad Experience Report summary.
+--
+-- /See:/ 'newAdExperienceReportSitesGet' smart constructor.
+data AdExperienceReportSitesGet = AdExperienceReportSitesGet
+  { -- | V1 error format.
+    xgafv :: (Core.Maybe Xgafv),
+    -- | OAuth access token.
+    accessToken :: (Core.Maybe Core.Text),
+    -- | JSONP
+    callback :: (Core.Maybe Core.Text),
+    -- | Required. The name of the site whose summary to get, e.g. @sites\/http%3A%2F%2Fwww.google.com%2F@. Format: @sites\/{site}@
+    name :: Core.Text,
+    -- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+    uploadType :: (Core.Maybe Core.Text),
+    -- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+    uploadProtocol :: (Core.Maybe Core.Text)
+  }
+  deriving (Core.Eq, Core.Show, Core.Generic)
+
+-- | Creates a value of 'AdExperienceReportSitesGet' with the minimum fields required to make a request.
+newAdExperienceReportSitesGet ::
+  -- |  Required. The name of the site whose summary to get, e.g. @sites\/http%3A%2F%2Fwww.google.com%2F@. Format: @sites\/{site}@ See 'name'.
+  Core.Text ->
+  AdExperienceReportSitesGet
+newAdExperienceReportSitesGet name =
+  AdExperienceReportSitesGet
+    { xgafv = Core.Nothing,
+      accessToken = Core.Nothing,
+      callback = Core.Nothing,
+      name = name,
+      uploadType = Core.Nothing,
+      uploadProtocol = Core.Nothing
+    }
+
+instance Core.GoogleRequest AdExperienceReportSitesGet where
+  type Rs AdExperienceReportSitesGet = SiteSummaryResponse
+  type Scopes AdExperienceReportSitesGet = '[]
+  requestClient AdExperienceReportSitesGet {..} =
+    go
+      name
+      xgafv
+      accessToken
+      callback
+      uploadType
+      uploadProtocol
+      (Core.Just Core.AltJSON)
+      adExperienceReportService
+    where
+      go =
+        Core.buildClient
+          (Core.Proxy :: Core.Proxy AdExperienceReportSitesGetResource)
+          Core.mempty
diff --git a/gen/Gogol/AdExperienceReport/Types.hs b/gen/Gogol/AdExperienceReport/Types.hs
new file mode 100644
--- /dev/null
+++ b/gen/Gogol/AdExperienceReport/Types.hs
@@ -0,0 +1,67 @@
+{-# LANGUAGE DataKinds #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE ImportQualifiedPost #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-name-shadowing #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- |
+-- Module      : Gogol.AdExperienceReport.Types
+-- Copyright   : (c) 2015-2025 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay+gogol@gmail.com>
+--               Toni Cebrián <toni@tonicebrian.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Gogol.AdExperienceReport.Types
+  ( -- * Configuration
+    adExperienceReportService,
+
+    -- * Types
+
+    -- ** Xgafv
+    Xgafv (..),
+
+    -- ** PlatformSummary
+    PlatformSummary (..),
+    newPlatformSummary,
+
+    -- ** PlatformSummary_BetterAdsStatus
+    PlatformSummary_BetterAdsStatus (..),
+
+    -- ** PlatformSummary_FilterStatus
+    PlatformSummary_FilterStatus (..),
+
+    -- ** PlatformSummary_RegionItem
+    PlatformSummary_RegionItem (..),
+
+    -- ** SiteSummaryResponse
+    SiteSummaryResponse (..),
+    newSiteSummaryResponse,
+
+    -- ** ViolatingSitesResponse
+    ViolatingSitesResponse (..),
+    newViolatingSitesResponse,
+  )
+where
+
+import Gogol.AdExperienceReport.Internal.Product
+import Gogol.AdExperienceReport.Internal.Sum
+import Gogol.Prelude qualified as Core
+
+-- | Default request referring to version @v1@ of the Ad Experience Report API. This contains the host and root path used as a starting point for constructing service requests.
+adExperienceReportService :: Core.ServiceConfig
+adExperienceReportService =
+  Core.defaultService
+    (Core.ServiceId "adexperiencereport:v1")
+    "adexperiencereport.googleapis.com"
diff --git a/gen/Gogol/AdExperienceReport/ViolatingSites/List.hs b/gen/Gogol/AdExperienceReport/ViolatingSites/List.hs
new file mode 100644
--- /dev/null
+++ b/gen/Gogol/AdExperienceReport/ViolatingSites/List.hs
@@ -0,0 +1,105 @@
+{-# LANGUAGE DataKinds #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE ImportQualifiedPost #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-name-shadowing #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- |
+-- Module      : Gogol.AdExperienceReport.ViolatingSites.List
+-- Copyright   : (c) 2015-2025 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay+gogol@gmail.com>
+--               Toni Cebrián <toni@tonicebrian.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Lists sites that are failing in the Ad Experience Report on at least one platform.
+--
+-- /See:/ <https://developers.google.com/ad-experience-report/ Ad Experience Report API Reference> for @adexperiencereport.violatingSites.list@.
+module Gogol.AdExperienceReport.ViolatingSites.List
+  ( -- * Resource
+    AdExperienceReportViolatingSitesListResource,
+
+    -- ** Constructing a Request
+    AdExperienceReportViolatingSitesList (..),
+    newAdExperienceReportViolatingSitesList,
+  )
+where
+
+import Gogol.AdExperienceReport.Types
+import Gogol.Prelude qualified as Core
+
+-- | A resource alias for @adexperiencereport.violatingSites.list@ method which the
+-- 'AdExperienceReportViolatingSitesList' request conforms to.
+type AdExperienceReportViolatingSitesListResource =
+  "v1"
+    Core.:> "violatingSites"
+    Core.:> Core.QueryParam "$.xgafv" Xgafv
+    Core.:> Core.QueryParam "access_token" Core.Text
+    Core.:> Core.QueryParam "callback" Core.Text
+    Core.:> Core.QueryParam "uploadType" Core.Text
+    Core.:> Core.QueryParam "upload_protocol" Core.Text
+    Core.:> Core.QueryParam "alt" Core.AltJSON
+    Core.:> Core.Get '[Core.JSON] ViolatingSitesResponse
+
+-- | Lists sites that are failing in the Ad Experience Report on at least one platform.
+--
+-- /See:/ 'newAdExperienceReportViolatingSitesList' smart constructor.
+data AdExperienceReportViolatingSitesList = AdExperienceReportViolatingSitesList
+  { -- | V1 error format.
+    xgafv :: (Core.Maybe Xgafv),
+    -- | OAuth access token.
+    accessToken :: (Core.Maybe Core.Text),
+    -- | JSONP
+    callback :: (Core.Maybe Core.Text),
+    -- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+    uploadType :: (Core.Maybe Core.Text),
+    -- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+    uploadProtocol :: (Core.Maybe Core.Text)
+  }
+  deriving (Core.Eq, Core.Show, Core.Generic)
+
+-- | Creates a value of 'AdExperienceReportViolatingSitesList' with the minimum fields required to make a request.
+newAdExperienceReportViolatingSitesList ::
+  AdExperienceReportViolatingSitesList
+newAdExperienceReportViolatingSitesList =
+  AdExperienceReportViolatingSitesList
+    { xgafv = Core.Nothing,
+      accessToken = Core.Nothing,
+      callback = Core.Nothing,
+      uploadType = Core.Nothing,
+      uploadProtocol = Core.Nothing
+    }
+
+instance Core.GoogleRequest AdExperienceReportViolatingSitesList where
+  type
+    Rs AdExperienceReportViolatingSitesList =
+      ViolatingSitesResponse
+  type Scopes AdExperienceReportViolatingSitesList = '[]
+  requestClient AdExperienceReportViolatingSitesList {..} =
+    go
+      xgafv
+      accessToken
+      callback
+      uploadType
+      uploadProtocol
+      (Core.Just Core.AltJSON)
+      adExperienceReportService
+    where
+      go =
+        Core.buildClient
+          ( Core.Proxy ::
+              Core.Proxy AdExperienceReportViolatingSitesListResource
+          )
+          Core.mempty
diff --git a/gen/Network/Google/AdExperienceReport.hs b/gen/Network/Google/AdExperienceReport.hs
deleted file mode 100644
--- a/gen/Network/Google/AdExperienceReport.hs
+++ /dev/null
@@ -1,85 +0,0 @@
-{-# LANGUAGE DataKinds         #-}
-{-# LANGUAGE NoImplicitPrelude #-}
-{-# LANGUAGE TypeOperators     #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
-{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
-
--- |
--- Module      : Network.Google.AdExperienceReport
--- 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)
---
--- Views Ad Experience Report data, and gets a list of sites that have a
--- significant number of annoying ads.
---
--- /See:/ <https://developers.google.com/ad-experience-report/ Ad Experience Report API Reference>
-module Network.Google.AdExperienceReport
-    (
-    -- * Service Configuration
-      adExperienceReportService
-
-    -- * OAuth Scopes
-    , xapiZooScope
-
-    -- * API Declaration
-    , AdExperienceReportAPI
-
-    -- * Resources
-
-    -- ** adexperiencereport.sites.get
-    , module Network.Google.Resource.AdExperienceReport.Sites.Get
-
-    -- ** adexperiencereport.violatingSites.list
-    , module Network.Google.Resource.AdExperienceReport.ViolatingSites.List
-
-    -- * Types
-
-    -- ** SiteSummaryResponse
-    , SiteSummaryResponse
-    , siteSummaryResponse
-    , ssrMobileSummary
-    , ssrReviewedSite
-    , ssrDesktopSummary
-
-    -- ** PlatformSummaryFilterStatus
-    , PlatformSummaryFilterStatus (..)
-
-    -- ** ViolatingSitesResponse
-    , ViolatingSitesResponse
-    , violatingSitesResponse
-    , vsrViolatingSites
-
-    -- ** Xgafv
-    , Xgafv (..)
-
-    -- ** PlatformSummary
-    , PlatformSummary
-    , platformSummary
-    , psEnforcementTime
-    , psLastChangeTime
-    , psFilterStatus
-    , psUnderReview
-    , psBetterAdsStatus
-    , psReportURL
-    , psRegion
-
-    -- ** PlatformSummaryBetterAdsStatus
-    , PlatformSummaryBetterAdsStatus (..)
-    ) where
-
-import           Network.Google.AdExperienceReport.Types
-import           Network.Google.Prelude
-import           Network.Google.Resource.AdExperienceReport.Sites.Get
-import           Network.Google.Resource.AdExperienceReport.ViolatingSites.List
-
-{- $resources
-TODO
--}
-
--- | Represents the entirety of the methods and resources available for the Ad Experience Report API service.
-type AdExperienceReportAPI =
-     ViolatingSitesListResource :<|> SitesGetResource
diff --git a/gen/Network/Google/AdExperienceReport/Types.hs b/gen/Network/Google/AdExperienceReport/Types.hs
deleted file mode 100644
--- a/gen/Network/Google/AdExperienceReport/Types.hs
+++ /dev/null
@@ -1,70 +0,0 @@
-{-# LANGUAGE DataKinds          #-}
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE NoImplicitPrelude  #-}
-{-# LANGUAGE OverloadedStrings  #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-
--- |
--- Module      : Network.Google.AdExperienceReport.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.AdExperienceReport.Types
-    (
-    -- * Service Configuration
-      adExperienceReportService
-
-    -- * OAuth Scopes
-    , xapiZooScope
-
-    -- * SiteSummaryResponse
-    , SiteSummaryResponse
-    , siteSummaryResponse
-    , ssrMobileSummary
-    , ssrReviewedSite
-    , ssrDesktopSummary
-
-    -- * PlatformSummaryFilterStatus
-    , PlatformSummaryFilterStatus (..)
-
-    -- * ViolatingSitesResponse
-    , ViolatingSitesResponse
-    , violatingSitesResponse
-    , vsrViolatingSites
-
-    -- * Xgafv
-    , Xgafv (..)
-
-    -- * PlatformSummary
-    , PlatformSummary
-    , platformSummary
-    , psEnforcementTime
-    , psLastChangeTime
-    , psFilterStatus
-    , psUnderReview
-    , psBetterAdsStatus
-    , psReportURL
-    , psRegion
-
-    -- * PlatformSummaryBetterAdsStatus
-    , PlatformSummaryBetterAdsStatus (..)
-    ) where
-
-import           Network.Google.AdExperienceReport.Types.Product
-import           Network.Google.AdExperienceReport.Types.Sum
-import           Network.Google.Prelude
-
--- | Default request referring to version 'v1' of the Ad Experience Report API. This contains the host and root path used as a starting point for constructing service requests.
-adExperienceReportService :: ServiceConfig
-adExperienceReportService
-  = defaultService (ServiceId "adexperiencereport:v1")
-      "adexperiencereport.googleapis.com"
-
--- | Test scope for access to the Zoo service
-xapiZooScope :: Proxy '["https://www.googleapis.com/auth/xapi.zoo"]
-xapiZooScope = Proxy
diff --git a/gen/Network/Google/AdExperienceReport/Types/Product.hs b/gen/Network/Google/AdExperienceReport/Types/Product.hs
deleted file mode 100644
--- a/gen/Network/Google/AdExperienceReport/Types/Product.hs
+++ /dev/null
@@ -1,243 +0,0 @@
-{-# 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.AdExperienceReport.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.AdExperienceReport.Types.Product where
-
-import           Network.Google.AdExperienceReport.Types.Sum
-import           Network.Google.Prelude
-
--- | Response message for GetSiteSummary.
---
--- /See:/ 'siteSummaryResponse' smart constructor.
-data SiteSummaryResponse =
-  SiteSummaryResponse'
-    { _ssrMobileSummary  :: !(Maybe PlatformSummary)
-    , _ssrReviewedSite   :: !(Maybe Text)
-    , _ssrDesktopSummary :: !(Maybe PlatformSummary)
-    }
-  deriving (Eq, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'SiteSummaryResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'ssrMobileSummary'
---
--- * 'ssrReviewedSite'
---
--- * 'ssrDesktopSummary'
-siteSummaryResponse
-    :: SiteSummaryResponse
-siteSummaryResponse =
-  SiteSummaryResponse'
-    { _ssrMobileSummary = Nothing
-    , _ssrReviewedSite = Nothing
-    , _ssrDesktopSummary = Nothing
-    }
-
-
--- | Summary for the mobile review of the site.
-ssrMobileSummary :: Lens' SiteSummaryResponse (Maybe PlatformSummary)
-ssrMobileSummary
-  = lens _ssrMobileSummary
-      (\ s a -> s{_ssrMobileSummary = a})
-
--- | The name of the site reviewed.
-ssrReviewedSite :: Lens' SiteSummaryResponse (Maybe Text)
-ssrReviewedSite
-  = lens _ssrReviewedSite
-      (\ s a -> s{_ssrReviewedSite = a})
-
--- | Summary for the desktop review of the site.
-ssrDesktopSummary :: Lens' SiteSummaryResponse (Maybe PlatformSummary)
-ssrDesktopSummary
-  = lens _ssrDesktopSummary
-      (\ s a -> s{_ssrDesktopSummary = a})
-
-instance FromJSON SiteSummaryResponse where
-        parseJSON
-          = withObject "SiteSummaryResponse"
-              (\ o ->
-                 SiteSummaryResponse' <$>
-                   (o .:? "mobileSummary") <*> (o .:? "reviewedSite")
-                     <*> (o .:? "desktopSummary"))
-
-instance ToJSON SiteSummaryResponse where
-        toJSON SiteSummaryResponse'{..}
-          = object
-              (catMaybes
-                 [("mobileSummary" .=) <$> _ssrMobileSummary,
-                  ("reviewedSite" .=) <$> _ssrReviewedSite,
-                  ("desktopSummary" .=) <$> _ssrDesktopSummary])
-
--- | Response message for ListViolatingSites.
---
--- /See:/ 'violatingSitesResponse' smart constructor.
-newtype ViolatingSitesResponse =
-  ViolatingSitesResponse'
-    { _vsrViolatingSites :: Maybe [SiteSummaryResponse]
-    }
-  deriving (Eq, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'ViolatingSitesResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'vsrViolatingSites'
-violatingSitesResponse
-    :: ViolatingSitesResponse
-violatingSitesResponse = ViolatingSitesResponse' {_vsrViolatingSites = Nothing}
-
-
--- | A list of summaries of violating sites.
-vsrViolatingSites :: Lens' ViolatingSitesResponse [SiteSummaryResponse]
-vsrViolatingSites
-  = lens _vsrViolatingSites
-      (\ s a -> s{_vsrViolatingSites = a})
-      . _Default
-      . _Coerce
-
-instance FromJSON ViolatingSitesResponse where
-        parseJSON
-          = withObject "ViolatingSitesResponse"
-              (\ o ->
-                 ViolatingSitesResponse' <$>
-                   (o .:? "violatingSites" .!= mempty))
-
-instance ToJSON ViolatingSitesResponse where
-        toJSON ViolatingSitesResponse'{..}
-          = object
-              (catMaybes
-                 [("violatingSites" .=) <$> _vsrViolatingSites])
-
--- | Summary of the ad experience rating of a site for a specific platform.
---
--- /See:/ 'platformSummary' smart constructor.
-data PlatformSummary =
-  PlatformSummary'
-    { _psEnforcementTime :: !(Maybe DateTime')
-    , _psLastChangeTime  :: !(Maybe DateTime')
-    , _psFilterStatus    :: !(Maybe PlatformSummaryFilterStatus)
-    , _psUnderReview     :: !(Maybe Bool)
-    , _psBetterAdsStatus :: !(Maybe PlatformSummaryBetterAdsStatus)
-    , _psReportURL       :: !(Maybe Text)
-    , _psRegion          :: !(Maybe [Text])
-    }
-  deriving (Eq, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'PlatformSummary' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'psEnforcementTime'
---
--- * 'psLastChangeTime'
---
--- * 'psFilterStatus'
---
--- * 'psUnderReview'
---
--- * 'psBetterAdsStatus'
---
--- * 'psReportURL'
---
--- * 'psRegion'
-platformSummary
-    :: PlatformSummary
-platformSummary =
-  PlatformSummary'
-    { _psEnforcementTime = Nothing
-    , _psLastChangeTime = Nothing
-    , _psFilterStatus = Nothing
-    , _psUnderReview = Nothing
-    , _psBetterAdsStatus = Nothing
-    , _psReportURL = Nothing
-    , _psRegion = Nothing
-    }
-
-
--- | The date on which ad filtering begins.
-psEnforcementTime :: Lens' PlatformSummary (Maybe UTCTime)
-psEnforcementTime
-  = lens _psEnforcementTime
-      (\ s a -> s{_psEnforcementTime = a})
-      . mapping _DateTime
-
--- | The last time that the site changed status.
-psLastChangeTime :: Lens' PlatformSummary (Maybe UTCTime)
-psLastChangeTime
-  = lens _psLastChangeTime
-      (\ s a -> s{_psLastChangeTime = a})
-      . mapping _DateTime
-
--- | The ad filtering status of the site.
-psFilterStatus :: Lens' PlatformSummary (Maybe PlatformSummaryFilterStatus)
-psFilterStatus
-  = lens _psFilterStatus
-      (\ s a -> s{_psFilterStatus = a})
-
--- | Whether the site is currently under review.
-psUnderReview :: Lens' PlatformSummary (Maybe Bool)
-psUnderReview
-  = lens _psUnderReview
-      (\ s a -> s{_psUnderReview = a})
-
--- | The status of the site reviewed for the Better Ads Standards.
-psBetterAdsStatus :: Lens' PlatformSummary (Maybe PlatformSummaryBetterAdsStatus)
-psBetterAdsStatus
-  = lens _psBetterAdsStatus
-      (\ s a -> s{_psBetterAdsStatus = a})
-
--- | A link that leads to a full ad experience report.
-psReportURL :: Lens' PlatformSummary (Maybe Text)
-psReportURL
-  = lens _psReportURL (\ s a -> s{_psReportURL = a})
-
--- | The assigned regions for the site and platform.
-psRegion :: Lens' PlatformSummary [Text]
-psRegion
-  = lens _psRegion (\ s a -> s{_psRegion = a}) .
-      _Default
-      . _Coerce
-
-instance FromJSON PlatformSummary where
-        parseJSON
-          = withObject "PlatformSummary"
-              (\ o ->
-                 PlatformSummary' <$>
-                   (o .:? "enforcementTime") <*>
-                     (o .:? "lastChangeTime")
-                     <*> (o .:? "filterStatus")
-                     <*> (o .:? "underReview")
-                     <*> (o .:? "betterAdsStatus")
-                     <*> (o .:? "reportUrl")
-                     <*> (o .:? "region" .!= mempty))
-
-instance ToJSON PlatformSummary where
-        toJSON PlatformSummary'{..}
-          = object
-              (catMaybes
-                 [("enforcementTime" .=) <$> _psEnforcementTime,
-                  ("lastChangeTime" .=) <$> _psLastChangeTime,
-                  ("filterStatus" .=) <$> _psFilterStatus,
-                  ("underReview" .=) <$> _psUnderReview,
-                  ("betterAdsStatus" .=) <$> _psBetterAdsStatus,
-                  ("reportUrl" .=) <$> _psReportURL,
-                  ("region" .=) <$> _psRegion])
diff --git a/gen/Network/Google/AdExperienceReport/Types/Sum.hs b/gen/Network/Google/AdExperienceReport/Types/Sum.hs
deleted file mode 100644
--- a/gen/Network/Google/AdExperienceReport/Types/Sum.hs
+++ /dev/null
@@ -1,131 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE LambdaCase         #-}
-{-# LANGUAGE NoImplicitPrelude  #-}
-{-# LANGUAGE OverloadedStrings  #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-
--- |
--- Module      : Network.Google.AdExperienceReport.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.AdExperienceReport.Types.Sum where
-
-import           Network.Google.Prelude hiding (Bytes)
-
--- | The ad filtering status of the site.
-data PlatformSummaryFilterStatus
-    = Unknown
-      -- ^ @UNKNOWN@
-      -- N\/A.
-    | ON
-      -- ^ @ON@
-      -- Ad filtering is on.
-    | Off
-      -- ^ @OFF@
-      -- Ad filtering is off.
-    | Paused
-      -- ^ @PAUSED@
-      -- Ad filtering is paused.
-    | Pending
-      -- ^ @PENDING@
-      -- Ad filtering is pending.
-      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
-
-instance Hashable PlatformSummaryFilterStatus
-
-instance FromHttpApiData PlatformSummaryFilterStatus where
-    parseQueryParam = \case
-        "UNKNOWN" -> Right Unknown
-        "ON" -> Right ON
-        "OFF" -> Right Off
-        "PAUSED" -> Right Paused
-        "PENDING" -> Right Pending
-        x -> Left ("Unable to parse PlatformSummaryFilterStatus from: " <> x)
-
-instance ToHttpApiData PlatformSummaryFilterStatus where
-    toQueryParam = \case
-        Unknown -> "UNKNOWN"
-        ON -> "ON"
-        Off -> "OFF"
-        Paused -> "PAUSED"
-        Pending -> "PENDING"
-
-instance FromJSON PlatformSummaryFilterStatus where
-    parseJSON = parseJSONText "PlatformSummaryFilterStatus"
-
-instance ToJSON PlatformSummaryFilterStatus 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 status of the site reviewed for the Better Ads Standards.
-data PlatformSummaryBetterAdsStatus
-    = PSBASUnknown
-      -- ^ @UNKNOWN@
-      -- Not reviewed.
-    | PSBASPassing
-      -- ^ @PASSING@
-      -- Passing.
-    | PSBASWarning
-      -- ^ @WARNING@
-      -- Warning.
-    | PSBASFailing
-      -- ^ @FAILING@
-      -- Failing.
-      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
-
-instance Hashable PlatformSummaryBetterAdsStatus
-
-instance FromHttpApiData PlatformSummaryBetterAdsStatus where
-    parseQueryParam = \case
-        "UNKNOWN" -> Right PSBASUnknown
-        "PASSING" -> Right PSBASPassing
-        "WARNING" -> Right PSBASWarning
-        "FAILING" -> Right PSBASFailing
-        x -> Left ("Unable to parse PlatformSummaryBetterAdsStatus from: " <> x)
-
-instance ToHttpApiData PlatformSummaryBetterAdsStatus where
-    toQueryParam = \case
-        PSBASUnknown -> "UNKNOWN"
-        PSBASPassing -> "PASSING"
-        PSBASWarning -> "WARNING"
-        PSBASFailing -> "FAILING"
-
-instance FromJSON PlatformSummaryBetterAdsStatus where
-    parseJSON = parseJSONText "PlatformSummaryBetterAdsStatus"
-
-instance ToJSON PlatformSummaryBetterAdsStatus where
-    toJSON = toJSONText
diff --git a/gen/Network/Google/Resource/AdExperienceReport/Sites/Get.hs b/gen/Network/Google/Resource/AdExperienceReport/Sites/Get.hs
deleted file mode 100644
--- a/gen/Network/Google/Resource/AdExperienceReport/Sites/Get.hs
+++ /dev/null
@@ -1,154 +0,0 @@
-{-# 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.AdExperienceReport.Sites.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 summary of the ad experience rating of a site.
---
--- /See:/ <https://developers.google.com/ad-experience-report/ Ad Experience Report API Reference> for @adexperiencereport.sites.get@.
-module Network.Google.Resource.AdExperienceReport.Sites.Get
-    (
-    -- * REST Resource
-      SitesGetResource
-
-    -- * Creating a Request
-    , sitesGet
-    , SitesGet
-
-    -- * Request Lenses
-    , sgXgafv
-    , sgUploadProtocol
-    , sgAccessToken
-    , sgUploadType
-    , sgName
-    , sgCallback
-    ) where
-
-import           Network.Google.AdExperienceReport.Types
-import           Network.Google.Prelude
-
--- | A resource alias for @adexperiencereport.sites.get@ method which the
--- 'SitesGet' request conforms to.
-type SitesGetResource =
-     "v1" :>
-       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] SiteSummaryResponse
-
--- | Gets a summary of the ad experience rating of a site.
---
--- /See:/ 'sitesGet' smart constructor.
-data SitesGet =
-  SitesGet'
-    { _sgXgafv          :: !(Maybe Xgafv)
-    , _sgUploadProtocol :: !(Maybe Text)
-    , _sgAccessToken    :: !(Maybe Text)
-    , _sgUploadType     :: !(Maybe Text)
-    , _sgName           :: !Text
-    , _sgCallback       :: !(Maybe Text)
-    }
-  deriving (Eq, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'SitesGet' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'sgXgafv'
---
--- * 'sgUploadProtocol'
---
--- * 'sgAccessToken'
---
--- * 'sgUploadType'
---
--- * 'sgName'
---
--- * 'sgCallback'
-sitesGet
-    :: Text -- ^ 'sgName'
-    -> SitesGet
-sitesGet pSgName_ =
-  SitesGet'
-    { _sgXgafv = Nothing
-    , _sgUploadProtocol = Nothing
-    , _sgAccessToken = Nothing
-    , _sgUploadType = Nothing
-    , _sgName = pSgName_
-    , _sgCallback = Nothing
-    }
-
-
--- | V1 error format.
-sgXgafv :: Lens' SitesGet (Maybe Xgafv)
-sgXgafv = lens _sgXgafv (\ s a -> s{_sgXgafv = a})
-
--- | Upload protocol for media (e.g. \"raw\", \"multipart\").
-sgUploadProtocol :: Lens' SitesGet (Maybe Text)
-sgUploadProtocol
-  = lens _sgUploadProtocol
-      (\ s a -> s{_sgUploadProtocol = a})
-
--- | OAuth access token.
-sgAccessToken :: Lens' SitesGet (Maybe Text)
-sgAccessToken
-  = lens _sgAccessToken
-      (\ s a -> s{_sgAccessToken = a})
-
--- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
-sgUploadType :: Lens' SitesGet (Maybe Text)
-sgUploadType
-  = lens _sgUploadType (\ s a -> s{_sgUploadType = a})
-
--- | The required site name. It should be the site property whose ad
--- experiences may have been reviewed, and it should be URL-encoded. For
--- example, sites\/https%3A%2F%2Fwww.google.com. The server will return an
--- error of BAD_REQUEST if this field is not filled in. Note that if the
--- site property is not yet verified in Search Console, the reportUrl field
--- returned by the API will lead to the verification page, prompting the
--- user to go through that process before they can gain access to the Ad
--- Experience Report.
-sgName :: Lens' SitesGet Text
-sgName = lens _sgName (\ s a -> s{_sgName = a})
-
--- | JSONP
-sgCallback :: Lens' SitesGet (Maybe Text)
-sgCallback
-  = lens _sgCallback (\ s a -> s{_sgCallback = a})
-
-instance GoogleRequest SitesGet where
-        type Rs SitesGet = SiteSummaryResponse
-        type Scopes SitesGet =
-             '["https://www.googleapis.com/auth/xapi.zoo"]
-        requestClient SitesGet'{..}
-          = go _sgName _sgXgafv _sgUploadProtocol
-              _sgAccessToken
-              _sgUploadType
-              _sgCallback
-              (Just AltJSON)
-              adExperienceReportService
-          where go
-                  = buildClient (Proxy :: Proxy SitesGetResource)
-                      mempty
diff --git a/gen/Network/Google/Resource/AdExperienceReport/ViolatingSites/List.hs b/gen/Network/Google/Resource/AdExperienceReport/ViolatingSites/List.hs
deleted file mode 100644
--- a/gen/Network/Google/Resource/AdExperienceReport/ViolatingSites/List.hs
+++ /dev/null
@@ -1,140 +0,0 @@
-{-# 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.AdExperienceReport.ViolatingSites.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 sites with Ad Experience Report statuses of \"Failing\" or
--- \"Warning\".
---
--- /See:/ <https://developers.google.com/ad-experience-report/ Ad Experience Report API Reference> for @adexperiencereport.violatingSites.list@.
-module Network.Google.Resource.AdExperienceReport.ViolatingSites.List
-    (
-    -- * REST Resource
-      ViolatingSitesListResource
-
-    -- * Creating a Request
-    , violatingSitesList
-    , ViolatingSitesList
-
-    -- * Request Lenses
-    , vslXgafv
-    , vslUploadProtocol
-    , vslAccessToken
-    , vslUploadType
-    , vslCallback
-    ) where
-
-import           Network.Google.AdExperienceReport.Types
-import           Network.Google.Prelude
-
--- | A resource alias for @adexperiencereport.violatingSites.list@ method which the
--- 'ViolatingSitesList' request conforms to.
-type ViolatingSitesListResource =
-     "v1" :>
-       "violatingSites" :>
-         QueryParam "$.xgafv" Xgafv :>
-           QueryParam "upload_protocol" Text :>
-             QueryParam "access_token" Text :>
-               QueryParam "uploadType" Text :>
-                 QueryParam "callback" Text :>
-                   QueryParam "alt" AltJSON :>
-                     Get '[JSON] ViolatingSitesResponse
-
--- | Lists sites with Ad Experience Report statuses of \"Failing\" or
--- \"Warning\".
---
--- /See:/ 'violatingSitesList' smart constructor.
-data ViolatingSitesList =
-  ViolatingSitesList'
-    { _vslXgafv          :: !(Maybe Xgafv)
-    , _vslUploadProtocol :: !(Maybe Text)
-    , _vslAccessToken    :: !(Maybe Text)
-    , _vslUploadType     :: !(Maybe Text)
-    , _vslCallback       :: !(Maybe Text)
-    }
-  deriving (Eq, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'ViolatingSitesList' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'vslXgafv'
---
--- * 'vslUploadProtocol'
---
--- * 'vslAccessToken'
---
--- * 'vslUploadType'
---
--- * 'vslCallback'
-violatingSitesList
-    :: ViolatingSitesList
-violatingSitesList =
-  ViolatingSitesList'
-    { _vslXgafv = Nothing
-    , _vslUploadProtocol = Nothing
-    , _vslAccessToken = Nothing
-    , _vslUploadType = Nothing
-    , _vslCallback = Nothing
-    }
-
-
--- | V1 error format.
-vslXgafv :: Lens' ViolatingSitesList (Maybe Xgafv)
-vslXgafv = lens _vslXgafv (\ s a -> s{_vslXgafv = a})
-
--- | Upload protocol for media (e.g. \"raw\", \"multipart\").
-vslUploadProtocol :: Lens' ViolatingSitesList (Maybe Text)
-vslUploadProtocol
-  = lens _vslUploadProtocol
-      (\ s a -> s{_vslUploadProtocol = a})
-
--- | OAuth access token.
-vslAccessToken :: Lens' ViolatingSitesList (Maybe Text)
-vslAccessToken
-  = lens _vslAccessToken
-      (\ s a -> s{_vslAccessToken = a})
-
--- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
-vslUploadType :: Lens' ViolatingSitesList (Maybe Text)
-vslUploadType
-  = lens _vslUploadType
-      (\ s a -> s{_vslUploadType = a})
-
--- | JSONP
-vslCallback :: Lens' ViolatingSitesList (Maybe Text)
-vslCallback
-  = lens _vslCallback (\ s a -> s{_vslCallback = a})
-
-instance GoogleRequest ViolatingSitesList where
-        type Rs ViolatingSitesList = ViolatingSitesResponse
-        type Scopes ViolatingSitesList =
-             '["https://www.googleapis.com/auth/xapi.zoo"]
-        requestClient ViolatingSitesList'{..}
-          = go _vslXgafv _vslUploadProtocol _vslAccessToken
-              _vslUploadType
-              _vslCallback
-              (Just AltJSON)
-              adExperienceReportService
-          where go
-                  = buildClient
-                      (Proxy :: Proxy ViolatingSitesListResource)
-                      mempty
diff --git a/gogol-adexperiencereport.cabal b/gogol-adexperiencereport.cabal
--- a/gogol-adexperiencereport.cabal
+++ b/gogol-adexperiencereport.cabal
@@ -1,48 +1,62 @@
-name:                  gogol-adexperiencereport
-version:               0.5.0
-synopsis:              Google Ad Experience Report 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
+cabal-version:      2.2
+name:               gogol-adexperiencereport
+version:            1.0.0
+synopsis:           Google Ad Experience Report SDK.
+homepage:           https://github.com/brendanhay/gogol
+bug-reports:        https://github.com/brendanhay/gogol/issues
+license:            MPL-2.0
+license-file:       LICENSE
+author:             Brendan Hay
+maintainer:
+  Brendan Hay <brendan.g.hay+gogol@gmail.com>, Toni Cebrián <toni@tonicebrian.com>
 
+copyright:          Copyright (c) 2015-2025 Brendan Hay
+category:           Google
+build-type:         Simple
+extra-source-files:
+  README.md
+  src/.gitkeep
+
 description:
-    Views Ad Experience Report data, and gets a list of sites that have a
-    significant number of annoying ads.
-    .
-    /Warning:/ This is an experimental prototype/preview release which is still
-    under exploratory development and not intended for public use, caveat emptor!
-    .
-    This library is compatible with version @v1@
-    of the API.
+  Views Ad Experience Report data, and gets a list of sites that have a significant number of annoying ads.
+  .
+  /Warning:/ This is an experimental prototype/preview release which is still
+  under exploratory development and not intended for public use, caveat emptor!
+  .
+  This library is compatible with version @v1@
+  of the API.
 
 source-repository head
-    type:     git
-    location: git://github.com/brendanhay/gogol.git
+  type:     git
+  location: git://github.com/brendanhay/gogol.git
+  subdir:   gogol-adexperiencereport
 
+flag field-selectors
+  description:
+    If record field selectors should be enabled. Disabling this requires GHC >=9.2 and the NoFieldSelectors extension.
+
+  default:     False
+  manual:      True
+
 library
-    default-language:  Haskell2010
-    hs-source-dirs:    src gen
+  default-language: GHC2021
+  hs-source-dirs:   src gen
+  ghc-options:
+    -Wall -fwarn-incomplete-uni-patterns
+    -fwarn-incomplete-record-updates -funbox-strict-fields
+    -fwarn-unused-packages
 
-    ghc-options:       -Wall
+  if (!flag(field-selectors) && impl(ghc >=9.2))
+    default-extensions: NoFieldSelectors
 
-    exposed-modules:
-          Network.Google.AdExperienceReport
-        , Network.Google.AdExperienceReport.Types
-        , Network.Google.Resource.AdExperienceReport.Sites.Get
-        , Network.Google.Resource.AdExperienceReport.ViolatingSites.List
+  exposed-modules:
+    Gogol.AdExperienceReport
+    Gogol.AdExperienceReport.Sites.Get
+    Gogol.AdExperienceReport.Types
+    Gogol.AdExperienceReport.ViolatingSites.List
 
-    other-modules:
-          Network.Google.AdExperienceReport.Types.Product
-        , Network.Google.AdExperienceReport.Types.Sum
+  other-modules:
+    Gogol.AdExperienceReport.Internal.Product
+    Gogol.AdExperienceReport.Internal.Sum
 
-    build-depends:
-          gogol-core == 0.5.0.*
-        , base       >= 4.7 && < 5
+  build-depends:    gogol-core ^>=1.0.0
