diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -7,9 +7,8 @@
 
 
 ## Version
-
-`1.6.1`
-
+ 
+`2.0` - Derived from API version @2017-01-26@ of the AWS service descriptions, licensed under Apache 2.0.
 
 ## Description
 
@@ -26,7 +25,7 @@
 The provided lenses should be compatible with any of the major lens libraries
 [lens](http://hackage.haskell.org/package/lens) or [lens-family-core](http://hackage.haskell.org/package/lens-family-core).
 
-See [Network.AWS.ResourceGroupsTagging](http://hackage.haskell.org/package/amazonka-resourcegroupstagging/docs/Network-AWS-ResourceGroupsTagging.html)
+See [Amazonka.ResourceGroupsTagging](http://hackage.haskell.org/package/amazonka-resourcegroupstagging/docs/Amazonka-ResourceGroupsTagging.html)
 or [the AWS documentation](https://aws.amazon.com/documentation/) to get started.
 
 
diff --git a/Setup.hs b/Setup.hs
deleted file mode 100644
--- a/Setup.hs
+++ /dev/null
@@ -1,2 +0,0 @@
-import           Distribution.Simple
-main = defaultMain
diff --git a/amazonka-resourcegroupstagging.cabal b/amazonka-resourcegroupstagging.cabal
--- a/amazonka-resourcegroupstagging.cabal
+++ b/amazonka-resourcegroupstagging.cabal
@@ -1,90 +1,100 @@
-name:                  amazonka-resourcegroupstagging
-version:               1.6.1
-synopsis:              Amazon Resource Groups Tagging API SDK.
-homepage:              https://github.com/brendanhay/amazonka
-bug-reports:           https://github.com/brendanhay/amazonka/issues
-license:               MPL-2.0
-license-file:          LICENSE
-author:                Brendan Hay
-maintainer:            Brendan Hay <brendan.g.hay+amazonka@gmail.com>
-copyright:             Copyright (c) 2013-2018 Brendan Hay
-category:              Network, AWS, Cloud, Distributed Computing
-build-type:            Simple
-cabal-version:         >= 1.10
-extra-source-files:    README.md fixture/*.yaml fixture/*.proto src/.gitkeep
+cabal-version:      2.2
+name:               amazonka-resourcegroupstagging
+version:            2.0
+synopsis:           Amazon Resource Groups Tagging API SDK.
+homepage:           https://github.com/brendanhay/amazonka
+bug-reports:        https://github.com/brendanhay/amazonka/issues
+license:            MPL-2.0
+license-file:       LICENSE
+author:             Brendan Hay
+maintainer:
+  Brendan Hay <brendan.g.hay+amazonka@gmail.com>, Jack Kelly <jack@jackkelly.name>
+
+copyright:          Copyright (c) 2013-2023 Brendan Hay
+category:           AWS
+build-type:         Simple
+extra-source-files:
+  fixture/*.proto
+  fixture/*.yaml
+  README.md
+  src/.gitkeep
+
 description:
-    The types from this library are intended to be used with
-    <http://hackage.haskell.org/package/amazonka amazonka>, which provides
-    mechanisms for specifying AuthN/AuthZ information, sending requests,
-    and receiving responses.
-    .
-    Lenses are used for constructing and manipulating types,
-    due to the depth of nesting of AWS types and transparency regarding
-    de/serialisation into more palatable Haskell values.
-    The provided lenses should be compatible with any of the major lens libraries
-    such as <http://hackage.haskell.org/package/lens lens> or
-    <http://hackage.haskell.org/package/lens-family-core lens-family-core>.
-    .
-    See "Network.AWS.ResourceGroupsTagging" or <https://aws.amazon.com/documentation/ the AWS documentation>
-    to get started.
+  Derived from API version @2017-01-26@ of the AWS service descriptions, licensed under Apache 2.0.
+  .
+  The types from this library are intended to be used with <http://hackage.haskell.org/package/amazonka amazonka>,
+  which provides mechanisms for specifying AuthN/AuthZ information, sending requests, and receiving responses.
+  .
+  It is recommended to use generic lenses or optics from packages such as <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify optional fields and deconstruct responses.
+  .
+  Generated lenses can be found in "Amazonka.ResourceGroupsTagging.Lens" and are
+  suitable for use with a lens package such as <http://hackage.haskell.org/package/lens lens> or <http://hackage.haskell.org/package/lens-family-core lens-family-core>.
+  .
+  See "Amazonka.ResourceGroupsTagging" and the <https://aws.amazon.com/documentation/ AWS documentation> to get started.
 
 source-repository head
-    type:              git
-    location:          git://github.com/brendanhay/amazonka.git
-    subdir:            amazonka-resourcegroupstagging
+  type:     git
+  location: git://github.com/brendanhay/amazonka.git
+  subdir:   amazonka-resourcegroupstagging
 
 library
-    default-language:  Haskell2010
-    hs-source-dirs:    src gen
-
-    ghc-options:
-        -Wall
-        -fwarn-incomplete-uni-patterns
-        -fwarn-incomplete-record-updates
-        -funbox-strict-fields
-
-    exposed-modules:
-          Network.AWS.ResourceGroupsTagging
-        , Network.AWS.ResourceGroupsTagging.GetResources
-        , Network.AWS.ResourceGroupsTagging.GetTagKeys
-        , Network.AWS.ResourceGroupsTagging.GetTagValues
-        , Network.AWS.ResourceGroupsTagging.TagResources
-        , Network.AWS.ResourceGroupsTagging.Types
-        , Network.AWS.ResourceGroupsTagging.UntagResources
-        , Network.AWS.ResourceGroupsTagging.Waiters
+  default-language: Haskell2010
+  hs-source-dirs:   src gen
+  ghc-options:
+    -Wall -fwarn-incomplete-uni-patterns
+    -fwarn-incomplete-record-updates -funbox-strict-fields
 
-    other-modules:
-          Network.AWS.ResourceGroupsTagging.Types.Product
-        , Network.AWS.ResourceGroupsTagging.Types.Sum
+  exposed-modules:
+    Amazonka.ResourceGroupsTagging
+    Amazonka.ResourceGroupsTagging.DescribeReportCreation
+    Amazonka.ResourceGroupsTagging.GetComplianceSummary
+    Amazonka.ResourceGroupsTagging.GetResources
+    Amazonka.ResourceGroupsTagging.GetTagKeys
+    Amazonka.ResourceGroupsTagging.GetTagValues
+    Amazonka.ResourceGroupsTagging.Lens
+    Amazonka.ResourceGroupsTagging.StartReportCreation
+    Amazonka.ResourceGroupsTagging.TagResources
+    Amazonka.ResourceGroupsTagging.Types
+    Amazonka.ResourceGroupsTagging.Types.ComplianceDetails
+    Amazonka.ResourceGroupsTagging.Types.FailureInfo
+    Amazonka.ResourceGroupsTagging.Types.GroupByAttribute
+    Amazonka.ResourceGroupsTagging.Types.ResourceErrorCode
+    Amazonka.ResourceGroupsTagging.Types.ResourceTagMapping
+    Amazonka.ResourceGroupsTagging.Types.Summary
+    Amazonka.ResourceGroupsTagging.Types.Tag
+    Amazonka.ResourceGroupsTagging.Types.TagFilter
+    Amazonka.ResourceGroupsTagging.Types.TargetIdType
+    Amazonka.ResourceGroupsTagging.UntagResources
+    Amazonka.ResourceGroupsTagging.Waiters
 
-    build-depends:
-          amazonka-core == 1.6.1.*
-        , base          >= 4.7     && < 5
+  build-depends:
+    , amazonka-core  >=2.0  && <2.1
+    , base           >=4.12 && <5
 
 test-suite amazonka-resourcegroupstagging-test
-    type:              exitcode-stdio-1.0
-    default-language:  Haskell2010
-    hs-source-dirs:    test
-    main-is:           Main.hs
-
-    ghc-options:       -Wall -threaded
+  type:             exitcode-stdio-1.0
+  default-language: Haskell2010
+  hs-source-dirs:   test
+  main-is:          Main.hs
+  ghc-options:      -Wall -threaded
 
-    -- This section is encoded by the template and any modules added by
-    -- hand outside these namespaces will not correctly be added to the
-    -- distribution package.
-    other-modules:
-          Test.AWS.ResourceGroupsTagging
-        , Test.AWS.Gen.ResourceGroupsTagging
-        , Test.AWS.ResourceGroupsTagging.Internal
+  -- This section is encoded by the template and any modules added by
+  -- hand outside these namespaces will not correctly be added to the
+  -- distribution package.
+  other-modules:
+    Test.Amazonka.Gen.ResourceGroupsTagging
+    Test.Amazonka.ResourceGroupsTagging
+    Test.Amazonka.ResourceGroupsTagging.Internal
 
-    build-depends:
-          amazonka-core == 1.6.1.*
-        , amazonka-test == 1.6.1.*
-        , amazonka-resourcegroupstagging
-        , base
-        , bytestring
-        , tasty
-        , tasty-hunit
-        , text
-        , time
-        , unordered-containers
+  build-depends:
+    , amazonka-core                   >=2.0 && <2.1
+    , amazonka-resourcegroupstagging
+    , amazonka-test                   >=2.0 && <2.1
+    , base
+    , bytestring
+    , case-insensitive
+    , tasty
+    , tasty-hunit
+    , text
+    , time
+    , unordered-containers
diff --git a/fixture/DescribeReportCreation.yaml b/fixture/DescribeReportCreation.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeReportCreation.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/tagging/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  tagging.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeReportCreationResponse.proto b/fixture/DescribeReportCreationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeReportCreationResponse.proto
diff --git a/fixture/GetComplianceSummary.yaml b/fixture/GetComplianceSummary.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetComplianceSummary.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/tagging/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  tagging.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/GetComplianceSummaryResponse.proto b/fixture/GetComplianceSummaryResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetComplianceSummaryResponse.proto
diff --git a/fixture/StartReportCreation.yaml b/fixture/StartReportCreation.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/StartReportCreation.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/tagging/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  tagging.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/StartReportCreationResponse.proto b/fixture/StartReportCreationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/StartReportCreationResponse.proto
diff --git a/gen/Amazonka/ResourceGroupsTagging.hs b/gen/Amazonka/ResourceGroupsTagging.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ResourceGroupsTagging.hs
@@ -0,0 +1,168 @@
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- |
+-- Module      : Amazonka.ResourceGroupsTagging
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Derived from API version @2017-01-26@ of the AWS service descriptions, licensed under Apache 2.0.
+--
+-- Resource Groups Tagging API
+module Amazonka.ResourceGroupsTagging
+  ( -- * Service Configuration
+    defaultService,
+
+    -- * Errors
+    -- $errors
+
+    -- ** ConcurrentModificationException
+    _ConcurrentModificationException,
+
+    -- ** ConstraintViolationException
+    _ConstraintViolationException,
+
+    -- ** InternalServiceException
+    _InternalServiceException,
+
+    -- ** InvalidParameterException
+    _InvalidParameterException,
+
+    -- ** PaginationTokenExpiredException
+    _PaginationTokenExpiredException,
+
+    -- ** ThrottledException
+    _ThrottledException,
+
+    -- * Waiters
+    -- $waiters
+
+    -- * Operations
+    -- $operations
+
+    -- ** DescribeReportCreation
+    DescribeReportCreation (DescribeReportCreation'),
+    newDescribeReportCreation,
+    DescribeReportCreationResponse (DescribeReportCreationResponse'),
+    newDescribeReportCreationResponse,
+
+    -- ** GetComplianceSummary (Paginated)
+    GetComplianceSummary (GetComplianceSummary'),
+    newGetComplianceSummary,
+    GetComplianceSummaryResponse (GetComplianceSummaryResponse'),
+    newGetComplianceSummaryResponse,
+
+    -- ** GetResources (Paginated)
+    GetResources (GetResources'),
+    newGetResources,
+    GetResourcesResponse (GetResourcesResponse'),
+    newGetResourcesResponse,
+
+    -- ** GetTagKeys (Paginated)
+    GetTagKeys (GetTagKeys'),
+    newGetTagKeys,
+    GetTagKeysResponse (GetTagKeysResponse'),
+    newGetTagKeysResponse,
+
+    -- ** GetTagValues (Paginated)
+    GetTagValues (GetTagValues'),
+    newGetTagValues,
+    GetTagValuesResponse (GetTagValuesResponse'),
+    newGetTagValuesResponse,
+
+    -- ** StartReportCreation
+    StartReportCreation (StartReportCreation'),
+    newStartReportCreation,
+    StartReportCreationResponse (StartReportCreationResponse'),
+    newStartReportCreationResponse,
+
+    -- ** TagResources
+    TagResources (TagResources'),
+    newTagResources,
+    TagResourcesResponse (TagResourcesResponse'),
+    newTagResourcesResponse,
+
+    -- ** UntagResources
+    UntagResources (UntagResources'),
+    newUntagResources,
+    UntagResourcesResponse (UntagResourcesResponse'),
+    newUntagResourcesResponse,
+
+    -- * Types
+
+    -- ** GroupByAttribute
+    GroupByAttribute (..),
+
+    -- ** ResourceErrorCode
+    ResourceErrorCode (..),
+
+    -- ** TargetIdType
+    TargetIdType (..),
+
+    -- ** ComplianceDetails
+    ComplianceDetails (ComplianceDetails'),
+    newComplianceDetails,
+
+    -- ** FailureInfo
+    FailureInfo (FailureInfo'),
+    newFailureInfo,
+
+    -- ** ResourceTagMapping
+    ResourceTagMapping (ResourceTagMapping'),
+    newResourceTagMapping,
+
+    -- ** Summary
+    Summary (Summary'),
+    newSummary,
+
+    -- ** Tag
+    Tag (Tag'),
+    newTag,
+
+    -- ** TagFilter
+    TagFilter (TagFilter'),
+    newTagFilter,
+  )
+where
+
+import Amazonka.ResourceGroupsTagging.DescribeReportCreation
+import Amazonka.ResourceGroupsTagging.GetComplianceSummary
+import Amazonka.ResourceGroupsTagging.GetResources
+import Amazonka.ResourceGroupsTagging.GetTagKeys
+import Amazonka.ResourceGroupsTagging.GetTagValues
+import Amazonka.ResourceGroupsTagging.Lens
+import Amazonka.ResourceGroupsTagging.StartReportCreation
+import Amazonka.ResourceGroupsTagging.TagResources
+import Amazonka.ResourceGroupsTagging.Types
+import Amazonka.ResourceGroupsTagging.UntagResources
+import Amazonka.ResourceGroupsTagging.Waiters
+
+-- $errors
+-- Error matchers are designed for use with the functions provided by
+-- <http://hackage.haskell.org/package/lens/docs/Control-Exception-Lens.html Control.Exception.Lens>.
+-- This allows catching (and rethrowing) service specific errors returned
+-- by 'ResourceGroupsTagging'.
+
+-- $operations
+-- Some AWS operations return results that are incomplete and require subsequent
+-- requests in order to obtain the entire result set. The process of sending
+-- subsequent requests to continue where a previous request left off is called
+-- pagination. For example, the 'ListObjects' operation of Amazon S3 returns up to
+-- 1000 objects at a time, and you must send subsequent requests with the
+-- appropriate Marker in order to retrieve the next page of results.
+--
+-- Operations that have an 'AWSPager' instance can transparently perform subsequent
+-- requests, correctly setting Markers and other request facets to iterate through
+-- the entire result set of a truncated API operation. Operations which support
+-- this have an additional note in the documentation.
+--
+-- Many operations have the ability to filter results on the server side. See the
+-- individual operation parameters for details.
+
+-- $waiters
+-- Waiters poll by repeatedly sending a request until some remote success condition
+-- configured by the 'Wait' specification is fulfilled. The 'Wait' specification
+-- determines how many attempts should be made, in addition to delay and retry strategies.
diff --git a/gen/Amazonka/ResourceGroupsTagging/DescribeReportCreation.hs b/gen/Amazonka/ResourceGroupsTagging/DescribeReportCreation.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ResourceGroupsTagging/DescribeReportCreation.hs
@@ -0,0 +1,220 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ResourceGroupsTagging.DescribeReportCreation
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Describes the status of the @StartReportCreation@ operation.
+--
+-- You can call this operation only from the organization\'s management
+-- account and from the us-east-1 Region.
+module Amazonka.ResourceGroupsTagging.DescribeReportCreation
+  ( -- * Creating a Request
+    DescribeReportCreation (..),
+    newDescribeReportCreation,
+
+    -- * Destructuring the Response
+    DescribeReportCreationResponse (..),
+    newDescribeReportCreationResponse,
+
+    -- * Response Lenses
+    describeReportCreationResponse_errorMessage,
+    describeReportCreationResponse_s3Location,
+    describeReportCreationResponse_status,
+    describeReportCreationResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import Amazonka.ResourceGroupsTagging.Types
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeReportCreation' smart constructor.
+data DescribeReportCreation = DescribeReportCreation'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeReportCreation' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newDescribeReportCreation ::
+  DescribeReportCreation
+newDescribeReportCreation = DescribeReportCreation'
+
+instance Core.AWSRequest DescribeReportCreation where
+  type
+    AWSResponse DescribeReportCreation =
+      DescribeReportCreationResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeReportCreationResponse'
+            Prelude.<$> (x Data..?> "ErrorMessage")
+            Prelude.<*> (x Data..?> "S3Location")
+            Prelude.<*> (x Data..?> "Status")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeReportCreation where
+  hashWithSalt _salt _ =
+    _salt `Prelude.hashWithSalt` ()
+
+instance Prelude.NFData DescribeReportCreation where
+  rnf _ = ()
+
+instance Data.ToHeaders DescribeReportCreation where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "ResourceGroupsTaggingAPI_20170126.DescribeReportCreation" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DescribeReportCreation where
+  toJSON = Prelude.const (Data.Object Prelude.mempty)
+
+instance Data.ToPath DescribeReportCreation where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DescribeReportCreation where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDescribeReportCreationResponse' smart constructor.
+data DescribeReportCreationResponse = DescribeReportCreationResponse'
+  { -- | Details of the common errors that all operations return.
+    errorMessage :: Prelude.Maybe Prelude.Text,
+    -- | The path to the Amazon S3 bucket where the report was stored on
+    -- creation.
+    s3Location :: Prelude.Maybe Prelude.Text,
+    -- | Reports the status of the operation.
+    --
+    -- The operation status can be one of the following:
+    --
+    -- -   @RUNNING@ - Report creation is in progress.
+    --
+    -- -   @SUCCEEDED@ - Report creation is complete. You can open the report
+    --     from the Amazon S3 bucket that you specified when you ran
+    --     @StartReportCreation@.
+    --
+    -- -   @FAILED@ - Report creation timed out or the Amazon S3 bucket is not
+    --     accessible.
+    --
+    -- -   @NO REPORT@ - No report was generated in the last 90 days.
+    status :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeReportCreationResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'errorMessage', 'describeReportCreationResponse_errorMessage' - Details of the common errors that all operations return.
+--
+-- 's3Location', 'describeReportCreationResponse_s3Location' - The path to the Amazon S3 bucket where the report was stored on
+-- creation.
+--
+-- 'status', 'describeReportCreationResponse_status' - Reports the status of the operation.
+--
+-- The operation status can be one of the following:
+--
+-- -   @RUNNING@ - Report creation is in progress.
+--
+-- -   @SUCCEEDED@ - Report creation is complete. You can open the report
+--     from the Amazon S3 bucket that you specified when you ran
+--     @StartReportCreation@.
+--
+-- -   @FAILED@ - Report creation timed out or the Amazon S3 bucket is not
+--     accessible.
+--
+-- -   @NO REPORT@ - No report was generated in the last 90 days.
+--
+-- 'httpStatus', 'describeReportCreationResponse_httpStatus' - The response's http status code.
+newDescribeReportCreationResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeReportCreationResponse
+newDescribeReportCreationResponse pHttpStatus_ =
+  DescribeReportCreationResponse'
+    { errorMessage =
+        Prelude.Nothing,
+      s3Location = Prelude.Nothing,
+      status = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Details of the common errors that all operations return.
+describeReportCreationResponse_errorMessage :: Lens.Lens' DescribeReportCreationResponse (Prelude.Maybe Prelude.Text)
+describeReportCreationResponse_errorMessage = Lens.lens (\DescribeReportCreationResponse' {errorMessage} -> errorMessage) (\s@DescribeReportCreationResponse' {} a -> s {errorMessage = a} :: DescribeReportCreationResponse)
+
+-- | The path to the Amazon S3 bucket where the report was stored on
+-- creation.
+describeReportCreationResponse_s3Location :: Lens.Lens' DescribeReportCreationResponse (Prelude.Maybe Prelude.Text)
+describeReportCreationResponse_s3Location = Lens.lens (\DescribeReportCreationResponse' {s3Location} -> s3Location) (\s@DescribeReportCreationResponse' {} a -> s {s3Location = a} :: DescribeReportCreationResponse)
+
+-- | Reports the status of the operation.
+--
+-- The operation status can be one of the following:
+--
+-- -   @RUNNING@ - Report creation is in progress.
+--
+-- -   @SUCCEEDED@ - Report creation is complete. You can open the report
+--     from the Amazon S3 bucket that you specified when you ran
+--     @StartReportCreation@.
+--
+-- -   @FAILED@ - Report creation timed out or the Amazon S3 bucket is not
+--     accessible.
+--
+-- -   @NO REPORT@ - No report was generated in the last 90 days.
+describeReportCreationResponse_status :: Lens.Lens' DescribeReportCreationResponse (Prelude.Maybe Prelude.Text)
+describeReportCreationResponse_status = Lens.lens (\DescribeReportCreationResponse' {status} -> status) (\s@DescribeReportCreationResponse' {} a -> s {status = a} :: DescribeReportCreationResponse)
+
+-- | The response's http status code.
+describeReportCreationResponse_httpStatus :: Lens.Lens' DescribeReportCreationResponse Prelude.Int
+describeReportCreationResponse_httpStatus = Lens.lens (\DescribeReportCreationResponse' {httpStatus} -> httpStatus) (\s@DescribeReportCreationResponse' {} a -> s {httpStatus = a} :: DescribeReportCreationResponse)
+
+instance
+  Prelude.NFData
+    DescribeReportCreationResponse
+  where
+  rnf DescribeReportCreationResponse' {..} =
+    Prelude.rnf errorMessage
+      `Prelude.seq` Prelude.rnf s3Location
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ResourceGroupsTagging/GetComplianceSummary.hs b/gen/Amazonka/ResourceGroupsTagging/GetComplianceSummary.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ResourceGroupsTagging/GetComplianceSummary.hs
@@ -0,0 +1,424 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ResourceGroupsTagging.GetComplianceSummary
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns a table that shows counts of resources that are noncompliant
+-- with their tag policies.
+--
+-- For more information on tag policies, see
+-- <https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_tag-policies.html Tag Policies>
+-- in the /Organizations User Guide./
+--
+-- You can call this operation only from the organization\'s management
+-- account and from the us-east-1 Region.
+--
+-- This operation supports pagination, where the response can be sent in
+-- multiple pages. You should check the @PaginationToken@ response
+-- parameter to determine if there are additional results available to
+-- return. Repeat the query, passing the @PaginationToken@ response
+-- parameter value as an input to the next request until you recieve a
+-- @null@ value. A null value for @PaginationToken@ indicates that there
+-- are no more results waiting to be returned.
+--
+-- This operation returns paginated results.
+module Amazonka.ResourceGroupsTagging.GetComplianceSummary
+  ( -- * Creating a Request
+    GetComplianceSummary (..),
+    newGetComplianceSummary,
+
+    -- * Request Lenses
+    getComplianceSummary_groupBy,
+    getComplianceSummary_maxResults,
+    getComplianceSummary_paginationToken,
+    getComplianceSummary_regionFilters,
+    getComplianceSummary_resourceTypeFilters,
+    getComplianceSummary_tagKeyFilters,
+    getComplianceSummary_targetIdFilters,
+
+    -- * Destructuring the Response
+    GetComplianceSummaryResponse (..),
+    newGetComplianceSummaryResponse,
+
+    -- * Response Lenses
+    getComplianceSummaryResponse_paginationToken,
+    getComplianceSummaryResponse_summaryList,
+    getComplianceSummaryResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import Amazonka.ResourceGroupsTagging.Types
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetComplianceSummary' smart constructor.
+data GetComplianceSummary = GetComplianceSummary'
+  { -- | Specifies a list of attributes to group the counts of noncompliant
+    -- resources by. If supplied, the counts are sorted by those attributes.
+    groupBy :: Prelude.Maybe [GroupByAttribute],
+    -- | Specifies the maximum number of results to be returned in each page. A
+    -- query can return fewer than this maximum, even if there are more results
+    -- still to return. You should always check the @PaginationToken@ response
+    -- value to see if there are more results. You can specify a minimum of 1
+    -- and a maximum value of 100.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | Specifies a @PaginationToken@ response value from a previous request to
+    -- indicate that you want the next page of results. Leave this parameter
+    -- empty in your initial request.
+    paginationToken :: Prelude.Maybe Prelude.Text,
+    -- | Specifies a list of Amazon Web Services Regions to limit the output to.
+    -- If you use this parameter, the count of returned noncompliant resources
+    -- includes only resources in the specified Regions.
+    regionFilters :: Prelude.Maybe (Prelude.NonEmpty Prelude.Text),
+    -- | Specifies that you want the response to include information for only
+    -- resources of the specified types. The format of each resource type is
+    -- @service[:resourceType]@. For example, specifying a resource type of
+    -- @ec2@ returns all Amazon EC2 resources (which includes EC2 instances).
+    -- Specifying a resource type of @ec2:instance@ returns only EC2 instances.
+    --
+    -- The string for each service name and resource type is the same as that
+    -- embedded in a resource\'s Amazon Resource Name (ARN). Consult the
+    -- /<https://docs.aws.amazon.com/general/latest/gr/ Amazon Web Services General Reference>/
+    -- for the following:
+    --
+    -- -   For a list of service name strings, see
+    --     <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html#genref-aws-service-namespaces Amazon Web Services Service Namespaces>.
+    --
+    -- -   For resource type strings, see
+    --     <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html#arns-syntax Example ARNs>.
+    --
+    -- -   For more information about ARNs, see
+    --     <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs) and Amazon Web Services Service Namespaces>.
+    --
+    -- You can specify multiple resource types by using a comma separated
+    -- array. The array can include up to 100 items. Note that the length
+    -- constraint requirement applies to each resource type filter.
+    resourceTypeFilters :: Prelude.Maybe [Prelude.Text],
+    -- | Specifies that you want the response to include information for only
+    -- resources that have tags with the specified tag keys. If you use this
+    -- parameter, the count of returned noncompliant resources includes only
+    -- resources that have the specified tag keys.
+    tagKeyFilters :: Prelude.Maybe (Prelude.NonEmpty Prelude.Text),
+    -- | Specifies target identifiers (usually, specific account IDs) to limit
+    -- the output by. If you use this parameter, the count of returned
+    -- noncompliant resources includes only resources with the specified target
+    -- IDs.
+    targetIdFilters :: Prelude.Maybe (Prelude.NonEmpty Prelude.Text)
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetComplianceSummary' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'groupBy', 'getComplianceSummary_groupBy' - Specifies a list of attributes to group the counts of noncompliant
+-- resources by. If supplied, the counts are sorted by those attributes.
+--
+-- 'maxResults', 'getComplianceSummary_maxResults' - Specifies the maximum number of results to be returned in each page. A
+-- query can return fewer than this maximum, even if there are more results
+-- still to return. You should always check the @PaginationToken@ response
+-- value to see if there are more results. You can specify a minimum of 1
+-- and a maximum value of 100.
+--
+-- 'paginationToken', 'getComplianceSummary_paginationToken' - Specifies a @PaginationToken@ response value from a previous request to
+-- indicate that you want the next page of results. Leave this parameter
+-- empty in your initial request.
+--
+-- 'regionFilters', 'getComplianceSummary_regionFilters' - Specifies a list of Amazon Web Services Regions to limit the output to.
+-- If you use this parameter, the count of returned noncompliant resources
+-- includes only resources in the specified Regions.
+--
+-- 'resourceTypeFilters', 'getComplianceSummary_resourceTypeFilters' - Specifies that you want the response to include information for only
+-- resources of the specified types. The format of each resource type is
+-- @service[:resourceType]@. For example, specifying a resource type of
+-- @ec2@ returns all Amazon EC2 resources (which includes EC2 instances).
+-- Specifying a resource type of @ec2:instance@ returns only EC2 instances.
+--
+-- The string for each service name and resource type is the same as that
+-- embedded in a resource\'s Amazon Resource Name (ARN). Consult the
+-- /<https://docs.aws.amazon.com/general/latest/gr/ Amazon Web Services General Reference>/
+-- for the following:
+--
+-- -   For a list of service name strings, see
+--     <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html#genref-aws-service-namespaces Amazon Web Services Service Namespaces>.
+--
+-- -   For resource type strings, see
+--     <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html#arns-syntax Example ARNs>.
+--
+-- -   For more information about ARNs, see
+--     <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs) and Amazon Web Services Service Namespaces>.
+--
+-- You can specify multiple resource types by using a comma separated
+-- array. The array can include up to 100 items. Note that the length
+-- constraint requirement applies to each resource type filter.
+--
+-- 'tagKeyFilters', 'getComplianceSummary_tagKeyFilters' - Specifies that you want the response to include information for only
+-- resources that have tags with the specified tag keys. If you use this
+-- parameter, the count of returned noncompliant resources includes only
+-- resources that have the specified tag keys.
+--
+-- 'targetIdFilters', 'getComplianceSummary_targetIdFilters' - Specifies target identifiers (usually, specific account IDs) to limit
+-- the output by. If you use this parameter, the count of returned
+-- noncompliant resources includes only resources with the specified target
+-- IDs.
+newGetComplianceSummary ::
+  GetComplianceSummary
+newGetComplianceSummary =
+  GetComplianceSummary'
+    { groupBy = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      paginationToken = Prelude.Nothing,
+      regionFilters = Prelude.Nothing,
+      resourceTypeFilters = Prelude.Nothing,
+      tagKeyFilters = Prelude.Nothing,
+      targetIdFilters = Prelude.Nothing
+    }
+
+-- | Specifies a list of attributes to group the counts of noncompliant
+-- resources by. If supplied, the counts are sorted by those attributes.
+getComplianceSummary_groupBy :: Lens.Lens' GetComplianceSummary (Prelude.Maybe [GroupByAttribute])
+getComplianceSummary_groupBy = Lens.lens (\GetComplianceSummary' {groupBy} -> groupBy) (\s@GetComplianceSummary' {} a -> s {groupBy = a} :: GetComplianceSummary) Prelude.. Lens.mapping Lens.coerced
+
+-- | Specifies the maximum number of results to be returned in each page. A
+-- query can return fewer than this maximum, even if there are more results
+-- still to return. You should always check the @PaginationToken@ response
+-- value to see if there are more results. You can specify a minimum of 1
+-- and a maximum value of 100.
+getComplianceSummary_maxResults :: Lens.Lens' GetComplianceSummary (Prelude.Maybe Prelude.Natural)
+getComplianceSummary_maxResults = Lens.lens (\GetComplianceSummary' {maxResults} -> maxResults) (\s@GetComplianceSummary' {} a -> s {maxResults = a} :: GetComplianceSummary)
+
+-- | Specifies a @PaginationToken@ response value from a previous request to
+-- indicate that you want the next page of results. Leave this parameter
+-- empty in your initial request.
+getComplianceSummary_paginationToken :: Lens.Lens' GetComplianceSummary (Prelude.Maybe Prelude.Text)
+getComplianceSummary_paginationToken = Lens.lens (\GetComplianceSummary' {paginationToken} -> paginationToken) (\s@GetComplianceSummary' {} a -> s {paginationToken = a} :: GetComplianceSummary)
+
+-- | Specifies a list of Amazon Web Services Regions to limit the output to.
+-- If you use this parameter, the count of returned noncompliant resources
+-- includes only resources in the specified Regions.
+getComplianceSummary_regionFilters :: Lens.Lens' GetComplianceSummary (Prelude.Maybe (Prelude.NonEmpty Prelude.Text))
+getComplianceSummary_regionFilters = Lens.lens (\GetComplianceSummary' {regionFilters} -> regionFilters) (\s@GetComplianceSummary' {} a -> s {regionFilters = a} :: GetComplianceSummary) Prelude.. Lens.mapping Lens.coerced
+
+-- | Specifies that you want the response to include information for only
+-- resources of the specified types. The format of each resource type is
+-- @service[:resourceType]@. For example, specifying a resource type of
+-- @ec2@ returns all Amazon EC2 resources (which includes EC2 instances).
+-- Specifying a resource type of @ec2:instance@ returns only EC2 instances.
+--
+-- The string for each service name and resource type is the same as that
+-- embedded in a resource\'s Amazon Resource Name (ARN). Consult the
+-- /<https://docs.aws.amazon.com/general/latest/gr/ Amazon Web Services General Reference>/
+-- for the following:
+--
+-- -   For a list of service name strings, see
+--     <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html#genref-aws-service-namespaces Amazon Web Services Service Namespaces>.
+--
+-- -   For resource type strings, see
+--     <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html#arns-syntax Example ARNs>.
+--
+-- -   For more information about ARNs, see
+--     <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs) and Amazon Web Services Service Namespaces>.
+--
+-- You can specify multiple resource types by using a comma separated
+-- array. The array can include up to 100 items. Note that the length
+-- constraint requirement applies to each resource type filter.
+getComplianceSummary_resourceTypeFilters :: Lens.Lens' GetComplianceSummary (Prelude.Maybe [Prelude.Text])
+getComplianceSummary_resourceTypeFilters = Lens.lens (\GetComplianceSummary' {resourceTypeFilters} -> resourceTypeFilters) (\s@GetComplianceSummary' {} a -> s {resourceTypeFilters = a} :: GetComplianceSummary) Prelude.. Lens.mapping Lens.coerced
+
+-- | Specifies that you want the response to include information for only
+-- resources that have tags with the specified tag keys. If you use this
+-- parameter, the count of returned noncompliant resources includes only
+-- resources that have the specified tag keys.
+getComplianceSummary_tagKeyFilters :: Lens.Lens' GetComplianceSummary (Prelude.Maybe (Prelude.NonEmpty Prelude.Text))
+getComplianceSummary_tagKeyFilters = Lens.lens (\GetComplianceSummary' {tagKeyFilters} -> tagKeyFilters) (\s@GetComplianceSummary' {} a -> s {tagKeyFilters = a} :: GetComplianceSummary) Prelude.. Lens.mapping Lens.coerced
+
+-- | Specifies target identifiers (usually, specific account IDs) to limit
+-- the output by. If you use this parameter, the count of returned
+-- noncompliant resources includes only resources with the specified target
+-- IDs.
+getComplianceSummary_targetIdFilters :: Lens.Lens' GetComplianceSummary (Prelude.Maybe (Prelude.NonEmpty Prelude.Text))
+getComplianceSummary_targetIdFilters = Lens.lens (\GetComplianceSummary' {targetIdFilters} -> targetIdFilters) (\s@GetComplianceSummary' {} a -> s {targetIdFilters = a} :: GetComplianceSummary) Prelude.. Lens.mapping Lens.coerced
+
+instance Core.AWSPager GetComplianceSummary where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? getComplianceSummaryResponse_paginationToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? getComplianceSummaryResponse_summaryList
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& getComplianceSummary_paginationToken
+          Lens..~ rs
+          Lens.^? getComplianceSummaryResponse_paginationToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest GetComplianceSummary where
+  type
+    AWSResponse GetComplianceSummary =
+      GetComplianceSummaryResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetComplianceSummaryResponse'
+            Prelude.<$> (x Data..?> "PaginationToken")
+            Prelude.<*> (x Data..?> "SummaryList" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetComplianceSummary where
+  hashWithSalt _salt GetComplianceSummary' {..} =
+    _salt
+      `Prelude.hashWithSalt` groupBy
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` paginationToken
+      `Prelude.hashWithSalt` regionFilters
+      `Prelude.hashWithSalt` resourceTypeFilters
+      `Prelude.hashWithSalt` tagKeyFilters
+      `Prelude.hashWithSalt` targetIdFilters
+
+instance Prelude.NFData GetComplianceSummary where
+  rnf GetComplianceSummary' {..} =
+    Prelude.rnf groupBy
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf paginationToken
+      `Prelude.seq` Prelude.rnf regionFilters
+      `Prelude.seq` Prelude.rnf resourceTypeFilters
+      `Prelude.seq` Prelude.rnf tagKeyFilters
+      `Prelude.seq` Prelude.rnf targetIdFilters
+
+instance Data.ToHeaders GetComplianceSummary where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "ResourceGroupsTaggingAPI_20170126.GetComplianceSummary" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON GetComplianceSummary where
+  toJSON GetComplianceSummary' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("GroupBy" Data..=) Prelude.<$> groupBy,
+            ("MaxResults" Data..=) Prelude.<$> maxResults,
+            ("PaginationToken" Data..=)
+              Prelude.<$> paginationToken,
+            ("RegionFilters" Data..=) Prelude.<$> regionFilters,
+            ("ResourceTypeFilters" Data..=)
+              Prelude.<$> resourceTypeFilters,
+            ("TagKeyFilters" Data..=) Prelude.<$> tagKeyFilters,
+            ("TargetIdFilters" Data..=)
+              Prelude.<$> targetIdFilters
+          ]
+      )
+
+instance Data.ToPath GetComplianceSummary where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery GetComplianceSummary where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetComplianceSummaryResponse' smart constructor.
+data GetComplianceSummaryResponse = GetComplianceSummaryResponse'
+  { -- | A string that indicates that there is more data available than this
+    -- response contains. To receive the next part of the response, specify
+    -- this response value as the @PaginationToken@ value in the request for
+    -- the next page.
+    paginationToken :: Prelude.Maybe Prelude.Text,
+    -- | A table that shows counts of noncompliant resources.
+    summaryList :: Prelude.Maybe [Summary],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetComplianceSummaryResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'paginationToken', 'getComplianceSummaryResponse_paginationToken' - A string that indicates that there is more data available than this
+-- response contains. To receive the next part of the response, specify
+-- this response value as the @PaginationToken@ value in the request for
+-- the next page.
+--
+-- 'summaryList', 'getComplianceSummaryResponse_summaryList' - A table that shows counts of noncompliant resources.
+--
+-- 'httpStatus', 'getComplianceSummaryResponse_httpStatus' - The response's http status code.
+newGetComplianceSummaryResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetComplianceSummaryResponse
+newGetComplianceSummaryResponse pHttpStatus_ =
+  GetComplianceSummaryResponse'
+    { paginationToken =
+        Prelude.Nothing,
+      summaryList = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | A string that indicates that there is more data available than this
+-- response contains. To receive the next part of the response, specify
+-- this response value as the @PaginationToken@ value in the request for
+-- the next page.
+getComplianceSummaryResponse_paginationToken :: Lens.Lens' GetComplianceSummaryResponse (Prelude.Maybe Prelude.Text)
+getComplianceSummaryResponse_paginationToken = Lens.lens (\GetComplianceSummaryResponse' {paginationToken} -> paginationToken) (\s@GetComplianceSummaryResponse' {} a -> s {paginationToken = a} :: GetComplianceSummaryResponse)
+
+-- | A table that shows counts of noncompliant resources.
+getComplianceSummaryResponse_summaryList :: Lens.Lens' GetComplianceSummaryResponse (Prelude.Maybe [Summary])
+getComplianceSummaryResponse_summaryList = Lens.lens (\GetComplianceSummaryResponse' {summaryList} -> summaryList) (\s@GetComplianceSummaryResponse' {} a -> s {summaryList = a} :: GetComplianceSummaryResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+getComplianceSummaryResponse_httpStatus :: Lens.Lens' GetComplianceSummaryResponse Prelude.Int
+getComplianceSummaryResponse_httpStatus = Lens.lens (\GetComplianceSummaryResponse' {httpStatus} -> httpStatus) (\s@GetComplianceSummaryResponse' {} a -> s {httpStatus = a} :: GetComplianceSummaryResponse)
+
+instance Prelude.NFData GetComplianceSummaryResponse where
+  rnf GetComplianceSummaryResponse' {..} =
+    Prelude.rnf paginationToken
+      `Prelude.seq` Prelude.rnf summaryList
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ResourceGroupsTagging/GetResources.hs b/gen/Amazonka/ResourceGroupsTagging/GetResources.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ResourceGroupsTagging/GetResources.hs
@@ -0,0 +1,633 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ResourceGroupsTagging.GetResources
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns all the tagged or previously tagged resources that are located
+-- in the specified Amazon Web Services Region for the account.
+--
+-- Depending on what information you want returned, you can also specify
+-- the following:
+--
+-- -   /Filters/ that specify what tags and resource types you want
+--     returned. The response includes all tags that are associated with
+--     the requested resources.
+--
+-- -   Information about compliance with the account\'s effective tag
+--     policy. For more information on tag policies, see
+--     <https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_tag-policies.html Tag Policies>
+--     in the /Organizations User Guide./
+--
+-- This operation supports pagination, where the response can be sent in
+-- multiple pages. You should check the @PaginationToken@ response
+-- parameter to determine if there are additional results available to
+-- return. Repeat the query, passing the @PaginationToken@ response
+-- parameter value as an input to the next request until you recieve a
+-- @null@ value. A null value for @PaginationToken@ indicates that there
+-- are no more results waiting to be returned.
+--
+-- This operation returns paginated results.
+module Amazonka.ResourceGroupsTagging.GetResources
+  ( -- * Creating a Request
+    GetResources (..),
+    newGetResources,
+
+    -- * Request Lenses
+    getResources_excludeCompliantResources,
+    getResources_includeComplianceDetails,
+    getResources_paginationToken,
+    getResources_resourceARNList,
+    getResources_resourceTypeFilters,
+    getResources_resourcesPerPage,
+    getResources_tagFilters,
+    getResources_tagsPerPage,
+
+    -- * Destructuring the Response
+    GetResourcesResponse (..),
+    newGetResourcesResponse,
+
+    -- * Response Lenses
+    getResourcesResponse_paginationToken,
+    getResourcesResponse_resourceTagMappingList,
+    getResourcesResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import Amazonka.ResourceGroupsTagging.Types
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetResources' smart constructor.
+data GetResources = GetResources'
+  { -- | Specifies whether to exclude resources that are compliant with the tag
+    -- policy. Set this to @true@ if you are interested in retrieving
+    -- information on noncompliant resources only.
+    --
+    -- You can use this parameter only if the @IncludeComplianceDetails@
+    -- parameter is also set to @true@.
+    excludeCompliantResources :: Prelude.Maybe Prelude.Bool,
+    -- | Specifies whether to include details regarding the compliance with the
+    -- effective tag policy. Set this to @true@ to determine whether resources
+    -- are compliant with the tag policy and to get details.
+    includeComplianceDetails :: Prelude.Maybe Prelude.Bool,
+    -- | Specifies a @PaginationToken@ response value from a previous request to
+    -- indicate that you want the next page of results. Leave this parameter
+    -- empty in your initial request.
+    paginationToken :: Prelude.Maybe Prelude.Text,
+    -- | Specifies a list of ARNs of resources for which you want to retrieve tag
+    -- data. You can\'t specify both this parameter and any of the pagination
+    -- parameters (@ResourcesPerPage@, @TagsPerPage@, @PaginationToken@) in the
+    -- same request. If you specify both, you get an @Invalid Parameter@
+    -- exception.
+    --
+    -- If a resource specified by this parameter doesn\'t exist, it doesn\'t
+    -- generate an error; it simply isn\'t included in the response.
+    --
+    -- An ARN (Amazon Resource Name) uniquely identifies a resource. For more
+    -- information, see
+    -- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs) and Amazon Web Services Service Namespaces>
+    -- in the /Amazon Web Services General Reference/.
+    resourceARNList :: Prelude.Maybe (Prelude.NonEmpty Prelude.Text),
+    -- | Specifies the resource types that you want included in the response. The
+    -- format of each resource type is @service[:resourceType]@. For example,
+    -- specifying a resource type of @ec2@ returns all Amazon EC2 resources
+    -- (which includes EC2 instances). Specifying a resource type of
+    -- @ec2:instance@ returns only EC2 instances.
+    --
+    -- The string for each service name and resource type is the same as that
+    -- embedded in a resource\'s Amazon Resource Name (ARN). For the list of
+    -- services whose resources you can use in this parameter, see
+    -- <https://docs.aws.amazon.com/resourcegroupstagging/latest/APIReference/supported-services.html Services that support the Resource Groups Tagging API>.
+    --
+    -- You can specify multiple resource types by using an array. The array can
+    -- include up to 100 items. Note that the length constraint requirement
+    -- applies to each resource type filter. For example, the following string
+    -- would limit the response to only Amazon EC2 instances, Amazon S3
+    -- buckets, or any Audit Manager resource:
+    --
+    -- @ec2:instance,s3:bucket,auditmanager@
+    resourceTypeFilters :: Prelude.Maybe [Prelude.Text],
+    -- | Specifies the maximum number of results to be returned in each page. A
+    -- query can return fewer than this maximum, even if there are more results
+    -- still to return. You should always check the @PaginationToken@ response
+    -- value to see if there are more results. You can specify a minimum of 1
+    -- and a maximum value of 100.
+    resourcesPerPage :: Prelude.Maybe Prelude.Int,
+    -- | Specifies a list of TagFilters (keys and values) to restrict the output
+    -- to only those resources that have tags with the specified keys and, if
+    -- included, the specified values. Each @TagFilter@ must contain a key with
+    -- values optional. A request can include up to 50 keys, and each key can
+    -- include up to 20 values.
+    --
+    -- Note the following when deciding how to use TagFilters:
+    --
+    -- -   If you /don\'t/ specify a @TagFilter@, the response includes all
+    --     resources that are currently tagged or ever had a tag. Resources
+    --     that currently don\'t have tags are shown with an empty tag set,
+    --     like this: @\"Tags\": []@.
+    --
+    -- -   If you specify more than one filter in a single request, the
+    --     response returns only those resources that satisfy all filters.
+    --
+    -- -   If you specify a filter that contains more than one value for a key,
+    --     the response returns resources that match /any/ of the specified
+    --     values for that key.
+    --
+    -- -   If you don\'t specify a value for a key, the response returns all
+    --     resources that are tagged with that key, with any or no value.
+    --
+    --     For example, for the following filters: @filter1= {keyA,{value1}}@,
+    --     @filter2={keyB,{value2,value3,value4}}@, @filter3= {keyC}@:
+    --
+    --     -   @GetResources({filter1})@ returns resources tagged with
+    --         @key1=value1@
+    --
+    --     -   @GetResources({filter2})@ returns resources tagged with
+    --         @key2=value2@ or @key2=value3@ or @key2=value4@
+    --
+    --     -   @GetResources({filter3})@ returns resources tagged with any tag
+    --         with the key @key3@, and with any or no value
+    --
+    --     -   @GetResources({filter1,filter2,filter3})@ returns resources
+    --         tagged with
+    --         @(key1=value1) and (key2=value2 or key2=value3 or key2=value4) and (key3, any or no value)@
+    tagFilters :: Prelude.Maybe [TagFilter],
+    -- | Amazon Web Services recommends using @ResourcesPerPage@ instead of this
+    -- parameter.
+    --
+    -- A limit that restricts the number of tags (key and value pairs) returned
+    -- by @GetResources@ in paginated output. A resource with no tags is
+    -- counted as having one tag (one key and value pair).
+    --
+    -- @GetResources@ does not split a resource and its associated tags across
+    -- pages. If the specified @TagsPerPage@ would cause such a break, a
+    -- @PaginationToken@ is returned in place of the affected resource and its
+    -- tags. Use that token in another request to get the remaining data. For
+    -- example, if you specify a @TagsPerPage@ of @100@ and the account has 22
+    -- resources with 10 tags each (meaning that each resource has 10 key and
+    -- value pairs), the output will consist of three pages. The first page
+    -- displays the first 10 resources, each with its 10 tags. The second page
+    -- displays the next 10 resources, each with its 10 tags. The third page
+    -- displays the remaining 2 resources, each with its 10 tags.
+    --
+    -- You can set @TagsPerPage@ to a minimum of 100 items up to a maximum of
+    -- 500 items.
+    tagsPerPage :: Prelude.Maybe Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetResources' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'excludeCompliantResources', 'getResources_excludeCompliantResources' - Specifies whether to exclude resources that are compliant with the tag
+-- policy. Set this to @true@ if you are interested in retrieving
+-- information on noncompliant resources only.
+--
+-- You can use this parameter only if the @IncludeComplianceDetails@
+-- parameter is also set to @true@.
+--
+-- 'includeComplianceDetails', 'getResources_includeComplianceDetails' - Specifies whether to include details regarding the compliance with the
+-- effective tag policy. Set this to @true@ to determine whether resources
+-- are compliant with the tag policy and to get details.
+--
+-- 'paginationToken', 'getResources_paginationToken' - Specifies a @PaginationToken@ response value from a previous request to
+-- indicate that you want the next page of results. Leave this parameter
+-- empty in your initial request.
+--
+-- 'resourceARNList', 'getResources_resourceARNList' - Specifies a list of ARNs of resources for which you want to retrieve tag
+-- data. You can\'t specify both this parameter and any of the pagination
+-- parameters (@ResourcesPerPage@, @TagsPerPage@, @PaginationToken@) in the
+-- same request. If you specify both, you get an @Invalid Parameter@
+-- exception.
+--
+-- If a resource specified by this parameter doesn\'t exist, it doesn\'t
+-- generate an error; it simply isn\'t included in the response.
+--
+-- An ARN (Amazon Resource Name) uniquely identifies a resource. For more
+-- information, see
+-- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs) and Amazon Web Services Service Namespaces>
+-- in the /Amazon Web Services General Reference/.
+--
+-- 'resourceTypeFilters', 'getResources_resourceTypeFilters' - Specifies the resource types that you want included in the response. The
+-- format of each resource type is @service[:resourceType]@. For example,
+-- specifying a resource type of @ec2@ returns all Amazon EC2 resources
+-- (which includes EC2 instances). Specifying a resource type of
+-- @ec2:instance@ returns only EC2 instances.
+--
+-- The string for each service name and resource type is the same as that
+-- embedded in a resource\'s Amazon Resource Name (ARN). For the list of
+-- services whose resources you can use in this parameter, see
+-- <https://docs.aws.amazon.com/resourcegroupstagging/latest/APIReference/supported-services.html Services that support the Resource Groups Tagging API>.
+--
+-- You can specify multiple resource types by using an array. The array can
+-- include up to 100 items. Note that the length constraint requirement
+-- applies to each resource type filter. For example, the following string
+-- would limit the response to only Amazon EC2 instances, Amazon S3
+-- buckets, or any Audit Manager resource:
+--
+-- @ec2:instance,s3:bucket,auditmanager@
+--
+-- 'resourcesPerPage', 'getResources_resourcesPerPage' - Specifies the maximum number of results to be returned in each page. A
+-- query can return fewer than this maximum, even if there are more results
+-- still to return. You should always check the @PaginationToken@ response
+-- value to see if there are more results. You can specify a minimum of 1
+-- and a maximum value of 100.
+--
+-- 'tagFilters', 'getResources_tagFilters' - Specifies a list of TagFilters (keys and values) to restrict the output
+-- to only those resources that have tags with the specified keys and, if
+-- included, the specified values. Each @TagFilter@ must contain a key with
+-- values optional. A request can include up to 50 keys, and each key can
+-- include up to 20 values.
+--
+-- Note the following when deciding how to use TagFilters:
+--
+-- -   If you /don\'t/ specify a @TagFilter@, the response includes all
+--     resources that are currently tagged or ever had a tag. Resources
+--     that currently don\'t have tags are shown with an empty tag set,
+--     like this: @\"Tags\": []@.
+--
+-- -   If you specify more than one filter in a single request, the
+--     response returns only those resources that satisfy all filters.
+--
+-- -   If you specify a filter that contains more than one value for a key,
+--     the response returns resources that match /any/ of the specified
+--     values for that key.
+--
+-- -   If you don\'t specify a value for a key, the response returns all
+--     resources that are tagged with that key, with any or no value.
+--
+--     For example, for the following filters: @filter1= {keyA,{value1}}@,
+--     @filter2={keyB,{value2,value3,value4}}@, @filter3= {keyC}@:
+--
+--     -   @GetResources({filter1})@ returns resources tagged with
+--         @key1=value1@
+--
+--     -   @GetResources({filter2})@ returns resources tagged with
+--         @key2=value2@ or @key2=value3@ or @key2=value4@
+--
+--     -   @GetResources({filter3})@ returns resources tagged with any tag
+--         with the key @key3@, and with any or no value
+--
+--     -   @GetResources({filter1,filter2,filter3})@ returns resources
+--         tagged with
+--         @(key1=value1) and (key2=value2 or key2=value3 or key2=value4) and (key3, any or no value)@
+--
+-- 'tagsPerPage', 'getResources_tagsPerPage' - Amazon Web Services recommends using @ResourcesPerPage@ instead of this
+-- parameter.
+--
+-- A limit that restricts the number of tags (key and value pairs) returned
+-- by @GetResources@ in paginated output. A resource with no tags is
+-- counted as having one tag (one key and value pair).
+--
+-- @GetResources@ does not split a resource and its associated tags across
+-- pages. If the specified @TagsPerPage@ would cause such a break, a
+-- @PaginationToken@ is returned in place of the affected resource and its
+-- tags. Use that token in another request to get the remaining data. For
+-- example, if you specify a @TagsPerPage@ of @100@ and the account has 22
+-- resources with 10 tags each (meaning that each resource has 10 key and
+-- value pairs), the output will consist of three pages. The first page
+-- displays the first 10 resources, each with its 10 tags. The second page
+-- displays the next 10 resources, each with its 10 tags. The third page
+-- displays the remaining 2 resources, each with its 10 tags.
+--
+-- You can set @TagsPerPage@ to a minimum of 100 items up to a maximum of
+-- 500 items.
+newGetResources ::
+  GetResources
+newGetResources =
+  GetResources'
+    { excludeCompliantResources =
+        Prelude.Nothing,
+      includeComplianceDetails = Prelude.Nothing,
+      paginationToken = Prelude.Nothing,
+      resourceARNList = Prelude.Nothing,
+      resourceTypeFilters = Prelude.Nothing,
+      resourcesPerPage = Prelude.Nothing,
+      tagFilters = Prelude.Nothing,
+      tagsPerPage = Prelude.Nothing
+    }
+
+-- | Specifies whether to exclude resources that are compliant with the tag
+-- policy. Set this to @true@ if you are interested in retrieving
+-- information on noncompliant resources only.
+--
+-- You can use this parameter only if the @IncludeComplianceDetails@
+-- parameter is also set to @true@.
+getResources_excludeCompliantResources :: Lens.Lens' GetResources (Prelude.Maybe Prelude.Bool)
+getResources_excludeCompliantResources = Lens.lens (\GetResources' {excludeCompliantResources} -> excludeCompliantResources) (\s@GetResources' {} a -> s {excludeCompliantResources = a} :: GetResources)
+
+-- | Specifies whether to include details regarding the compliance with the
+-- effective tag policy. Set this to @true@ to determine whether resources
+-- are compliant with the tag policy and to get details.
+getResources_includeComplianceDetails :: Lens.Lens' GetResources (Prelude.Maybe Prelude.Bool)
+getResources_includeComplianceDetails = Lens.lens (\GetResources' {includeComplianceDetails} -> includeComplianceDetails) (\s@GetResources' {} a -> s {includeComplianceDetails = a} :: GetResources)
+
+-- | Specifies a @PaginationToken@ response value from a previous request to
+-- indicate that you want the next page of results. Leave this parameter
+-- empty in your initial request.
+getResources_paginationToken :: Lens.Lens' GetResources (Prelude.Maybe Prelude.Text)
+getResources_paginationToken = Lens.lens (\GetResources' {paginationToken} -> paginationToken) (\s@GetResources' {} a -> s {paginationToken = a} :: GetResources)
+
+-- | Specifies a list of ARNs of resources for which you want to retrieve tag
+-- data. You can\'t specify both this parameter and any of the pagination
+-- parameters (@ResourcesPerPage@, @TagsPerPage@, @PaginationToken@) in the
+-- same request. If you specify both, you get an @Invalid Parameter@
+-- exception.
+--
+-- If a resource specified by this parameter doesn\'t exist, it doesn\'t
+-- generate an error; it simply isn\'t included in the response.
+--
+-- An ARN (Amazon Resource Name) uniquely identifies a resource. For more
+-- information, see
+-- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs) and Amazon Web Services Service Namespaces>
+-- in the /Amazon Web Services General Reference/.
+getResources_resourceARNList :: Lens.Lens' GetResources (Prelude.Maybe (Prelude.NonEmpty Prelude.Text))
+getResources_resourceARNList = Lens.lens (\GetResources' {resourceARNList} -> resourceARNList) (\s@GetResources' {} a -> s {resourceARNList = a} :: GetResources) Prelude.. Lens.mapping Lens.coerced
+
+-- | Specifies the resource types that you want included in the response. The
+-- format of each resource type is @service[:resourceType]@. For example,
+-- specifying a resource type of @ec2@ returns all Amazon EC2 resources
+-- (which includes EC2 instances). Specifying a resource type of
+-- @ec2:instance@ returns only EC2 instances.
+--
+-- The string for each service name and resource type is the same as that
+-- embedded in a resource\'s Amazon Resource Name (ARN). For the list of
+-- services whose resources you can use in this parameter, see
+-- <https://docs.aws.amazon.com/resourcegroupstagging/latest/APIReference/supported-services.html Services that support the Resource Groups Tagging API>.
+--
+-- You can specify multiple resource types by using an array. The array can
+-- include up to 100 items. Note that the length constraint requirement
+-- applies to each resource type filter. For example, the following string
+-- would limit the response to only Amazon EC2 instances, Amazon S3
+-- buckets, or any Audit Manager resource:
+--
+-- @ec2:instance,s3:bucket,auditmanager@
+getResources_resourceTypeFilters :: Lens.Lens' GetResources (Prelude.Maybe [Prelude.Text])
+getResources_resourceTypeFilters = Lens.lens (\GetResources' {resourceTypeFilters} -> resourceTypeFilters) (\s@GetResources' {} a -> s {resourceTypeFilters = a} :: GetResources) Prelude.. Lens.mapping Lens.coerced
+
+-- | Specifies the maximum number of results to be returned in each page. A
+-- query can return fewer than this maximum, even if there are more results
+-- still to return. You should always check the @PaginationToken@ response
+-- value to see if there are more results. You can specify a minimum of 1
+-- and a maximum value of 100.
+getResources_resourcesPerPage :: Lens.Lens' GetResources (Prelude.Maybe Prelude.Int)
+getResources_resourcesPerPage = Lens.lens (\GetResources' {resourcesPerPage} -> resourcesPerPage) (\s@GetResources' {} a -> s {resourcesPerPage = a} :: GetResources)
+
+-- | Specifies a list of TagFilters (keys and values) to restrict the output
+-- to only those resources that have tags with the specified keys and, if
+-- included, the specified values. Each @TagFilter@ must contain a key with
+-- values optional. A request can include up to 50 keys, and each key can
+-- include up to 20 values.
+--
+-- Note the following when deciding how to use TagFilters:
+--
+-- -   If you /don\'t/ specify a @TagFilter@, the response includes all
+--     resources that are currently tagged or ever had a tag. Resources
+--     that currently don\'t have tags are shown with an empty tag set,
+--     like this: @\"Tags\": []@.
+--
+-- -   If you specify more than one filter in a single request, the
+--     response returns only those resources that satisfy all filters.
+--
+-- -   If you specify a filter that contains more than one value for a key,
+--     the response returns resources that match /any/ of the specified
+--     values for that key.
+--
+-- -   If you don\'t specify a value for a key, the response returns all
+--     resources that are tagged with that key, with any or no value.
+--
+--     For example, for the following filters: @filter1= {keyA,{value1}}@,
+--     @filter2={keyB,{value2,value3,value4}}@, @filter3= {keyC}@:
+--
+--     -   @GetResources({filter1})@ returns resources tagged with
+--         @key1=value1@
+--
+--     -   @GetResources({filter2})@ returns resources tagged with
+--         @key2=value2@ or @key2=value3@ or @key2=value4@
+--
+--     -   @GetResources({filter3})@ returns resources tagged with any tag
+--         with the key @key3@, and with any or no value
+--
+--     -   @GetResources({filter1,filter2,filter3})@ returns resources
+--         tagged with
+--         @(key1=value1) and (key2=value2 or key2=value3 or key2=value4) and (key3, any or no value)@
+getResources_tagFilters :: Lens.Lens' GetResources (Prelude.Maybe [TagFilter])
+getResources_tagFilters = Lens.lens (\GetResources' {tagFilters} -> tagFilters) (\s@GetResources' {} a -> s {tagFilters = a} :: GetResources) Prelude.. Lens.mapping Lens.coerced
+
+-- | Amazon Web Services recommends using @ResourcesPerPage@ instead of this
+-- parameter.
+--
+-- A limit that restricts the number of tags (key and value pairs) returned
+-- by @GetResources@ in paginated output. A resource with no tags is
+-- counted as having one tag (one key and value pair).
+--
+-- @GetResources@ does not split a resource and its associated tags across
+-- pages. If the specified @TagsPerPage@ would cause such a break, a
+-- @PaginationToken@ is returned in place of the affected resource and its
+-- tags. Use that token in another request to get the remaining data. For
+-- example, if you specify a @TagsPerPage@ of @100@ and the account has 22
+-- resources with 10 tags each (meaning that each resource has 10 key and
+-- value pairs), the output will consist of three pages. The first page
+-- displays the first 10 resources, each with its 10 tags. The second page
+-- displays the next 10 resources, each with its 10 tags. The third page
+-- displays the remaining 2 resources, each with its 10 tags.
+--
+-- You can set @TagsPerPage@ to a minimum of 100 items up to a maximum of
+-- 500 items.
+getResources_tagsPerPage :: Lens.Lens' GetResources (Prelude.Maybe Prelude.Int)
+getResources_tagsPerPage = Lens.lens (\GetResources' {tagsPerPage} -> tagsPerPage) (\s@GetResources' {} a -> s {tagsPerPage = a} :: GetResources)
+
+instance Core.AWSPager GetResources where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? getResourcesResponse_paginationToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? getResourcesResponse_resourceTagMappingList
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& getResources_paginationToken
+          Lens..~ rs
+          Lens.^? getResourcesResponse_paginationToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest GetResources where
+  type AWSResponse GetResources = GetResourcesResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetResourcesResponse'
+            Prelude.<$> (x Data..?> "PaginationToken")
+            Prelude.<*> ( x
+                            Data..?> "ResourceTagMappingList"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetResources where
+  hashWithSalt _salt GetResources' {..} =
+    _salt
+      `Prelude.hashWithSalt` excludeCompliantResources
+      `Prelude.hashWithSalt` includeComplianceDetails
+      `Prelude.hashWithSalt` paginationToken
+      `Prelude.hashWithSalt` resourceARNList
+      `Prelude.hashWithSalt` resourceTypeFilters
+      `Prelude.hashWithSalt` resourcesPerPage
+      `Prelude.hashWithSalt` tagFilters
+      `Prelude.hashWithSalt` tagsPerPage
+
+instance Prelude.NFData GetResources where
+  rnf GetResources' {..} =
+    Prelude.rnf excludeCompliantResources
+      `Prelude.seq` Prelude.rnf includeComplianceDetails
+      `Prelude.seq` Prelude.rnf paginationToken
+      `Prelude.seq` Prelude.rnf resourceARNList
+      `Prelude.seq` Prelude.rnf resourceTypeFilters
+      `Prelude.seq` Prelude.rnf resourcesPerPage
+      `Prelude.seq` Prelude.rnf tagFilters
+      `Prelude.seq` Prelude.rnf tagsPerPage
+
+instance Data.ToHeaders GetResources where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "ResourceGroupsTaggingAPI_20170126.GetResources" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON GetResources where
+  toJSON GetResources' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("ExcludeCompliantResources" Data..=)
+              Prelude.<$> excludeCompliantResources,
+            ("IncludeComplianceDetails" Data..=)
+              Prelude.<$> includeComplianceDetails,
+            ("PaginationToken" Data..=)
+              Prelude.<$> paginationToken,
+            ("ResourceARNList" Data..=)
+              Prelude.<$> resourceARNList,
+            ("ResourceTypeFilters" Data..=)
+              Prelude.<$> resourceTypeFilters,
+            ("ResourcesPerPage" Data..=)
+              Prelude.<$> resourcesPerPage,
+            ("TagFilters" Data..=) Prelude.<$> tagFilters,
+            ("TagsPerPage" Data..=) Prelude.<$> tagsPerPage
+          ]
+      )
+
+instance Data.ToPath GetResources where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery GetResources where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetResourcesResponse' smart constructor.
+data GetResourcesResponse = GetResourcesResponse'
+  { -- | A string that indicates that there is more data available than this
+    -- response contains. To receive the next part of the response, specify
+    -- this response value as the @PaginationToken@ value in the request for
+    -- the next page.
+    paginationToken :: Prelude.Maybe Prelude.Text,
+    -- | A list of resource ARNs and the tags (keys and values) associated with
+    -- each.
+    resourceTagMappingList :: Prelude.Maybe [ResourceTagMapping],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetResourcesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'paginationToken', 'getResourcesResponse_paginationToken' - A string that indicates that there is more data available than this
+-- response contains. To receive the next part of the response, specify
+-- this response value as the @PaginationToken@ value in the request for
+-- the next page.
+--
+-- 'resourceTagMappingList', 'getResourcesResponse_resourceTagMappingList' - A list of resource ARNs and the tags (keys and values) associated with
+-- each.
+--
+-- 'httpStatus', 'getResourcesResponse_httpStatus' - The response's http status code.
+newGetResourcesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetResourcesResponse
+newGetResourcesResponse pHttpStatus_ =
+  GetResourcesResponse'
+    { paginationToken =
+        Prelude.Nothing,
+      resourceTagMappingList = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | A string that indicates that there is more data available than this
+-- response contains. To receive the next part of the response, specify
+-- this response value as the @PaginationToken@ value in the request for
+-- the next page.
+getResourcesResponse_paginationToken :: Lens.Lens' GetResourcesResponse (Prelude.Maybe Prelude.Text)
+getResourcesResponse_paginationToken = Lens.lens (\GetResourcesResponse' {paginationToken} -> paginationToken) (\s@GetResourcesResponse' {} a -> s {paginationToken = a} :: GetResourcesResponse)
+
+-- | A list of resource ARNs and the tags (keys and values) associated with
+-- each.
+getResourcesResponse_resourceTagMappingList :: Lens.Lens' GetResourcesResponse (Prelude.Maybe [ResourceTagMapping])
+getResourcesResponse_resourceTagMappingList = Lens.lens (\GetResourcesResponse' {resourceTagMappingList} -> resourceTagMappingList) (\s@GetResourcesResponse' {} a -> s {resourceTagMappingList = a} :: GetResourcesResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+getResourcesResponse_httpStatus :: Lens.Lens' GetResourcesResponse Prelude.Int
+getResourcesResponse_httpStatus = Lens.lens (\GetResourcesResponse' {httpStatus} -> httpStatus) (\s@GetResourcesResponse' {} a -> s {httpStatus = a} :: GetResourcesResponse)
+
+instance Prelude.NFData GetResourcesResponse where
+  rnf GetResourcesResponse' {..} =
+    Prelude.rnf paginationToken
+      `Prelude.seq` Prelude.rnf resourceTagMappingList
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ResourceGroupsTagging/GetTagKeys.hs b/gen/Amazonka/ResourceGroupsTagging/GetTagKeys.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ResourceGroupsTagging/GetTagKeys.hs
@@ -0,0 +1,226 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ResourceGroupsTagging.GetTagKeys
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns all tag keys currently in use in the specified Amazon Web
+-- Services Region for the calling account.
+--
+-- This operation supports pagination, where the response can be sent in
+-- multiple pages. You should check the @PaginationToken@ response
+-- parameter to determine if there are additional results available to
+-- return. Repeat the query, passing the @PaginationToken@ response
+-- parameter value as an input to the next request until you recieve a
+-- @null@ value. A null value for @PaginationToken@ indicates that there
+-- are no more results waiting to be returned.
+--
+-- This operation returns paginated results.
+module Amazonka.ResourceGroupsTagging.GetTagKeys
+  ( -- * Creating a Request
+    GetTagKeys (..),
+    newGetTagKeys,
+
+    -- * Request Lenses
+    getTagKeys_paginationToken,
+
+    -- * Destructuring the Response
+    GetTagKeysResponse (..),
+    newGetTagKeysResponse,
+
+    -- * Response Lenses
+    getTagKeysResponse_paginationToken,
+    getTagKeysResponse_tagKeys,
+    getTagKeysResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import Amazonka.ResourceGroupsTagging.Types
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetTagKeys' smart constructor.
+data GetTagKeys = GetTagKeys'
+  { -- | Specifies a @PaginationToken@ response value from a previous request to
+    -- indicate that you want the next page of results. Leave this parameter
+    -- empty in your initial request.
+    paginationToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetTagKeys' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'paginationToken', 'getTagKeys_paginationToken' - Specifies a @PaginationToken@ response value from a previous request to
+-- indicate that you want the next page of results. Leave this parameter
+-- empty in your initial request.
+newGetTagKeys ::
+  GetTagKeys
+newGetTagKeys =
+  GetTagKeys' {paginationToken = Prelude.Nothing}
+
+-- | Specifies a @PaginationToken@ response value from a previous request to
+-- indicate that you want the next page of results. Leave this parameter
+-- empty in your initial request.
+getTagKeys_paginationToken :: Lens.Lens' GetTagKeys (Prelude.Maybe Prelude.Text)
+getTagKeys_paginationToken = Lens.lens (\GetTagKeys' {paginationToken} -> paginationToken) (\s@GetTagKeys' {} a -> s {paginationToken = a} :: GetTagKeys)
+
+instance Core.AWSPager GetTagKeys where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? getTagKeysResponse_paginationToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? getTagKeysResponse_tagKeys
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& getTagKeys_paginationToken
+          Lens..~ rs
+          Lens.^? getTagKeysResponse_paginationToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest GetTagKeys where
+  type AWSResponse GetTagKeys = GetTagKeysResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetTagKeysResponse'
+            Prelude.<$> (x Data..?> "PaginationToken")
+            Prelude.<*> (x Data..?> "TagKeys" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetTagKeys where
+  hashWithSalt _salt GetTagKeys' {..} =
+    _salt `Prelude.hashWithSalt` paginationToken
+
+instance Prelude.NFData GetTagKeys where
+  rnf GetTagKeys' {..} = Prelude.rnf paginationToken
+
+instance Data.ToHeaders GetTagKeys where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "ResourceGroupsTaggingAPI_20170126.GetTagKeys" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON GetTagKeys where
+  toJSON GetTagKeys' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("PaginationToken" Data..=)
+              Prelude.<$> paginationToken
+          ]
+      )
+
+instance Data.ToPath GetTagKeys where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery GetTagKeys where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetTagKeysResponse' smart constructor.
+data GetTagKeysResponse = GetTagKeysResponse'
+  { -- | A string that indicates that there is more data available than this
+    -- response contains. To receive the next part of the response, specify
+    -- this response value as the @PaginationToken@ value in the request for
+    -- the next page.
+    paginationToken :: Prelude.Maybe Prelude.Text,
+    -- | A list of all tag keys in the Amazon Web Services account.
+    tagKeys :: Prelude.Maybe [Prelude.Text],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetTagKeysResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'paginationToken', 'getTagKeysResponse_paginationToken' - A string that indicates that there is more data available than this
+-- response contains. To receive the next part of the response, specify
+-- this response value as the @PaginationToken@ value in the request for
+-- the next page.
+--
+-- 'tagKeys', 'getTagKeysResponse_tagKeys' - A list of all tag keys in the Amazon Web Services account.
+--
+-- 'httpStatus', 'getTagKeysResponse_httpStatus' - The response's http status code.
+newGetTagKeysResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetTagKeysResponse
+newGetTagKeysResponse pHttpStatus_ =
+  GetTagKeysResponse'
+    { paginationToken =
+        Prelude.Nothing,
+      tagKeys = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | A string that indicates that there is more data available than this
+-- response contains. To receive the next part of the response, specify
+-- this response value as the @PaginationToken@ value in the request for
+-- the next page.
+getTagKeysResponse_paginationToken :: Lens.Lens' GetTagKeysResponse (Prelude.Maybe Prelude.Text)
+getTagKeysResponse_paginationToken = Lens.lens (\GetTagKeysResponse' {paginationToken} -> paginationToken) (\s@GetTagKeysResponse' {} a -> s {paginationToken = a} :: GetTagKeysResponse)
+
+-- | A list of all tag keys in the Amazon Web Services account.
+getTagKeysResponse_tagKeys :: Lens.Lens' GetTagKeysResponse (Prelude.Maybe [Prelude.Text])
+getTagKeysResponse_tagKeys = Lens.lens (\GetTagKeysResponse' {tagKeys} -> tagKeys) (\s@GetTagKeysResponse' {} a -> s {tagKeys = a} :: GetTagKeysResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+getTagKeysResponse_httpStatus :: Lens.Lens' GetTagKeysResponse Prelude.Int
+getTagKeysResponse_httpStatus = Lens.lens (\GetTagKeysResponse' {httpStatus} -> httpStatus) (\s@GetTagKeysResponse' {} a -> s {httpStatus = a} :: GetTagKeysResponse)
+
+instance Prelude.NFData GetTagKeysResponse where
+  rnf GetTagKeysResponse' {..} =
+    Prelude.rnf paginationToken
+      `Prelude.seq` Prelude.rnf tagKeys
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ResourceGroupsTagging/GetTagValues.hs b/gen/Amazonka/ResourceGroupsTagging/GetTagValues.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ResourceGroupsTagging/GetTagValues.hs
@@ -0,0 +1,254 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ResourceGroupsTagging.GetTagValues
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns all tag values for the specified key that are used in the
+-- specified Amazon Web Services Region for the calling account.
+--
+-- This operation supports pagination, where the response can be sent in
+-- multiple pages. You should check the @PaginationToken@ response
+-- parameter to determine if there are additional results available to
+-- return. Repeat the query, passing the @PaginationToken@ response
+-- parameter value as an input to the next request until you recieve a
+-- @null@ value. A null value for @PaginationToken@ indicates that there
+-- are no more results waiting to be returned.
+--
+-- This operation returns paginated results.
+module Amazonka.ResourceGroupsTagging.GetTagValues
+  ( -- * Creating a Request
+    GetTagValues (..),
+    newGetTagValues,
+
+    -- * Request Lenses
+    getTagValues_paginationToken,
+    getTagValues_key,
+
+    -- * Destructuring the Response
+    GetTagValuesResponse (..),
+    newGetTagValuesResponse,
+
+    -- * Response Lenses
+    getTagValuesResponse_paginationToken,
+    getTagValuesResponse_tagValues,
+    getTagValuesResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import Amazonka.ResourceGroupsTagging.Types
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetTagValues' smart constructor.
+data GetTagValues = GetTagValues'
+  { -- | Specifies a @PaginationToken@ response value from a previous request to
+    -- indicate that you want the next page of results. Leave this parameter
+    -- empty in your initial request.
+    paginationToken :: Prelude.Maybe Prelude.Text,
+    -- | Specifies the tag key for which you want to list all existing values
+    -- that are currently used in the specified Amazon Web Services Region for
+    -- the calling account.
+    key :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetTagValues' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'paginationToken', 'getTagValues_paginationToken' - Specifies a @PaginationToken@ response value from a previous request to
+-- indicate that you want the next page of results. Leave this parameter
+-- empty in your initial request.
+--
+-- 'key', 'getTagValues_key' - Specifies the tag key for which you want to list all existing values
+-- that are currently used in the specified Amazon Web Services Region for
+-- the calling account.
+newGetTagValues ::
+  -- | 'key'
+  Prelude.Text ->
+  GetTagValues
+newGetTagValues pKey_ =
+  GetTagValues'
+    { paginationToken = Prelude.Nothing,
+      key = pKey_
+    }
+
+-- | Specifies a @PaginationToken@ response value from a previous request to
+-- indicate that you want the next page of results. Leave this parameter
+-- empty in your initial request.
+getTagValues_paginationToken :: Lens.Lens' GetTagValues (Prelude.Maybe Prelude.Text)
+getTagValues_paginationToken = Lens.lens (\GetTagValues' {paginationToken} -> paginationToken) (\s@GetTagValues' {} a -> s {paginationToken = a} :: GetTagValues)
+
+-- | Specifies the tag key for which you want to list all existing values
+-- that are currently used in the specified Amazon Web Services Region for
+-- the calling account.
+getTagValues_key :: Lens.Lens' GetTagValues Prelude.Text
+getTagValues_key = Lens.lens (\GetTagValues' {key} -> key) (\s@GetTagValues' {} a -> s {key = a} :: GetTagValues)
+
+instance Core.AWSPager GetTagValues where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? getTagValuesResponse_paginationToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? getTagValuesResponse_tagValues
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& getTagValues_paginationToken
+          Lens..~ rs
+          Lens.^? getTagValuesResponse_paginationToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest GetTagValues where
+  type AWSResponse GetTagValues = GetTagValuesResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetTagValuesResponse'
+            Prelude.<$> (x Data..?> "PaginationToken")
+            Prelude.<*> (x Data..?> "TagValues" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetTagValues where
+  hashWithSalt _salt GetTagValues' {..} =
+    _salt
+      `Prelude.hashWithSalt` paginationToken
+      `Prelude.hashWithSalt` key
+
+instance Prelude.NFData GetTagValues where
+  rnf GetTagValues' {..} =
+    Prelude.rnf paginationToken
+      `Prelude.seq` Prelude.rnf key
+
+instance Data.ToHeaders GetTagValues where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "ResourceGroupsTaggingAPI_20170126.GetTagValues" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON GetTagValues where
+  toJSON GetTagValues' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("PaginationToken" Data..=)
+              Prelude.<$> paginationToken,
+            Prelude.Just ("Key" Data..= key)
+          ]
+      )
+
+instance Data.ToPath GetTagValues where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery GetTagValues where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetTagValuesResponse' smart constructor.
+data GetTagValuesResponse = GetTagValuesResponse'
+  { -- | A string that indicates that there is more data available than this
+    -- response contains. To receive the next part of the response, specify
+    -- this response value as the @PaginationToken@ value in the request for
+    -- the next page.
+    paginationToken :: Prelude.Maybe Prelude.Text,
+    -- | A list of all tag values for the specified key currently used in the
+    -- specified Amazon Web Services Region for the calling account.
+    tagValues :: Prelude.Maybe [Prelude.Text],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetTagValuesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'paginationToken', 'getTagValuesResponse_paginationToken' - A string that indicates that there is more data available than this
+-- response contains. To receive the next part of the response, specify
+-- this response value as the @PaginationToken@ value in the request for
+-- the next page.
+--
+-- 'tagValues', 'getTagValuesResponse_tagValues' - A list of all tag values for the specified key currently used in the
+-- specified Amazon Web Services Region for the calling account.
+--
+-- 'httpStatus', 'getTagValuesResponse_httpStatus' - The response's http status code.
+newGetTagValuesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetTagValuesResponse
+newGetTagValuesResponse pHttpStatus_ =
+  GetTagValuesResponse'
+    { paginationToken =
+        Prelude.Nothing,
+      tagValues = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | A string that indicates that there is more data available than this
+-- response contains. To receive the next part of the response, specify
+-- this response value as the @PaginationToken@ value in the request for
+-- the next page.
+getTagValuesResponse_paginationToken :: Lens.Lens' GetTagValuesResponse (Prelude.Maybe Prelude.Text)
+getTagValuesResponse_paginationToken = Lens.lens (\GetTagValuesResponse' {paginationToken} -> paginationToken) (\s@GetTagValuesResponse' {} a -> s {paginationToken = a} :: GetTagValuesResponse)
+
+-- | A list of all tag values for the specified key currently used in the
+-- specified Amazon Web Services Region for the calling account.
+getTagValuesResponse_tagValues :: Lens.Lens' GetTagValuesResponse (Prelude.Maybe [Prelude.Text])
+getTagValuesResponse_tagValues = Lens.lens (\GetTagValuesResponse' {tagValues} -> tagValues) (\s@GetTagValuesResponse' {} a -> s {tagValues = a} :: GetTagValuesResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+getTagValuesResponse_httpStatus :: Lens.Lens' GetTagValuesResponse Prelude.Int
+getTagValuesResponse_httpStatus = Lens.lens (\GetTagValuesResponse' {httpStatus} -> httpStatus) (\s@GetTagValuesResponse' {} a -> s {httpStatus = a} :: GetTagValuesResponse)
+
+instance Prelude.NFData GetTagValuesResponse where
+  rnf GetTagValuesResponse' {..} =
+    Prelude.rnf paginationToken
+      `Prelude.seq` Prelude.rnf tagValues
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ResourceGroupsTagging/Lens.hs b/gen/Amazonka/ResourceGroupsTagging/Lens.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ResourceGroupsTagging/Lens.hs
@@ -0,0 +1,125 @@
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ResourceGroupsTagging.Lens
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ResourceGroupsTagging.Lens
+  ( -- * Operations
+
+    -- ** DescribeReportCreation
+    describeReportCreationResponse_errorMessage,
+    describeReportCreationResponse_s3Location,
+    describeReportCreationResponse_status,
+    describeReportCreationResponse_httpStatus,
+
+    -- ** GetComplianceSummary
+    getComplianceSummary_groupBy,
+    getComplianceSummary_maxResults,
+    getComplianceSummary_paginationToken,
+    getComplianceSummary_regionFilters,
+    getComplianceSummary_resourceTypeFilters,
+    getComplianceSummary_tagKeyFilters,
+    getComplianceSummary_targetIdFilters,
+    getComplianceSummaryResponse_paginationToken,
+    getComplianceSummaryResponse_summaryList,
+    getComplianceSummaryResponse_httpStatus,
+
+    -- ** GetResources
+    getResources_excludeCompliantResources,
+    getResources_includeComplianceDetails,
+    getResources_paginationToken,
+    getResources_resourceARNList,
+    getResources_resourceTypeFilters,
+    getResources_resourcesPerPage,
+    getResources_tagFilters,
+    getResources_tagsPerPage,
+    getResourcesResponse_paginationToken,
+    getResourcesResponse_resourceTagMappingList,
+    getResourcesResponse_httpStatus,
+
+    -- ** GetTagKeys
+    getTagKeys_paginationToken,
+    getTagKeysResponse_paginationToken,
+    getTagKeysResponse_tagKeys,
+    getTagKeysResponse_httpStatus,
+
+    -- ** GetTagValues
+    getTagValues_paginationToken,
+    getTagValues_key,
+    getTagValuesResponse_paginationToken,
+    getTagValuesResponse_tagValues,
+    getTagValuesResponse_httpStatus,
+
+    -- ** StartReportCreation
+    startReportCreation_s3Bucket,
+    startReportCreationResponse_httpStatus,
+
+    -- ** TagResources
+    tagResources_resourceARNList,
+    tagResources_tags,
+    tagResourcesResponse_failedResourcesMap,
+    tagResourcesResponse_httpStatus,
+
+    -- ** UntagResources
+    untagResources_resourceARNList,
+    untagResources_tagKeys,
+    untagResourcesResponse_failedResourcesMap,
+    untagResourcesResponse_httpStatus,
+
+    -- * Types
+
+    -- ** ComplianceDetails
+    complianceDetails_complianceStatus,
+    complianceDetails_keysWithNoncompliantValues,
+    complianceDetails_noncompliantKeys,
+
+    -- ** FailureInfo
+    failureInfo_errorCode,
+    failureInfo_errorMessage,
+    failureInfo_statusCode,
+
+    -- ** ResourceTagMapping
+    resourceTagMapping_complianceDetails,
+    resourceTagMapping_resourceARN,
+    resourceTagMapping_tags,
+
+    -- ** Summary
+    summary_lastUpdated,
+    summary_nonCompliantResources,
+    summary_region,
+    summary_resourceType,
+    summary_targetId,
+    summary_targetIdType,
+
+    -- ** Tag
+    tag_key,
+    tag_value,
+
+    -- ** TagFilter
+    tagFilter_key,
+    tagFilter_values,
+  )
+where
+
+import Amazonka.ResourceGroupsTagging.DescribeReportCreation
+import Amazonka.ResourceGroupsTagging.GetComplianceSummary
+import Amazonka.ResourceGroupsTagging.GetResources
+import Amazonka.ResourceGroupsTagging.GetTagKeys
+import Amazonka.ResourceGroupsTagging.GetTagValues
+import Amazonka.ResourceGroupsTagging.StartReportCreation
+import Amazonka.ResourceGroupsTagging.TagResources
+import Amazonka.ResourceGroupsTagging.Types.ComplianceDetails
+import Amazonka.ResourceGroupsTagging.Types.FailureInfo
+import Amazonka.ResourceGroupsTagging.Types.ResourceTagMapping
+import Amazonka.ResourceGroupsTagging.Types.Summary
+import Amazonka.ResourceGroupsTagging.Types.Tag
+import Amazonka.ResourceGroupsTagging.Types.TagFilter
+import Amazonka.ResourceGroupsTagging.UntagResources
diff --git a/gen/Amazonka/ResourceGroupsTagging/StartReportCreation.hs b/gen/Amazonka/ResourceGroupsTagging/StartReportCreation.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ResourceGroupsTagging/StartReportCreation.hs
@@ -0,0 +1,184 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ResourceGroupsTagging.StartReportCreation
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Generates a report that lists all tagged resources in the accounts
+-- across your organization and tells whether each resource is compliant
+-- with the effective tag policy. Compliance data is refreshed daily. The
+-- report is generated asynchronously.
+--
+-- The generated report is saved to the following location:
+--
+-- @s3:\/\/example-bucket\/AwsTagPolicies\/o-exampleorgid\/YYYY-MM-ddTHH:mm:ssZ\/report.csv@
+--
+-- You can call this operation only from the organization\'s management
+-- account and from the us-east-1 Region.
+module Amazonka.ResourceGroupsTagging.StartReportCreation
+  ( -- * Creating a Request
+    StartReportCreation (..),
+    newStartReportCreation,
+
+    -- * Request Lenses
+    startReportCreation_s3Bucket,
+
+    -- * Destructuring the Response
+    StartReportCreationResponse (..),
+    newStartReportCreationResponse,
+
+    -- * Response Lenses
+    startReportCreationResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import Amazonka.ResourceGroupsTagging.Types
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newStartReportCreation' smart constructor.
+data StartReportCreation = StartReportCreation'
+  { -- | The name of the Amazon S3 bucket where the report will be stored; for
+    -- example:
+    --
+    -- @awsexamplebucket@
+    --
+    -- For more information on S3 bucket requirements, including an example
+    -- bucket policy, see the example S3 bucket policy on this page.
+    s3Bucket :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StartReportCreation' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 's3Bucket', 'startReportCreation_s3Bucket' - The name of the Amazon S3 bucket where the report will be stored; for
+-- example:
+--
+-- @awsexamplebucket@
+--
+-- For more information on S3 bucket requirements, including an example
+-- bucket policy, see the example S3 bucket policy on this page.
+newStartReportCreation ::
+  -- | 's3Bucket'
+  Prelude.Text ->
+  StartReportCreation
+newStartReportCreation pS3Bucket_ =
+  StartReportCreation' {s3Bucket = pS3Bucket_}
+
+-- | The name of the Amazon S3 bucket where the report will be stored; for
+-- example:
+--
+-- @awsexamplebucket@
+--
+-- For more information on S3 bucket requirements, including an example
+-- bucket policy, see the example S3 bucket policy on this page.
+startReportCreation_s3Bucket :: Lens.Lens' StartReportCreation Prelude.Text
+startReportCreation_s3Bucket = Lens.lens (\StartReportCreation' {s3Bucket} -> s3Bucket) (\s@StartReportCreation' {} a -> s {s3Bucket = a} :: StartReportCreation)
+
+instance Core.AWSRequest StartReportCreation where
+  type
+    AWSResponse StartReportCreation =
+      StartReportCreationResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          StartReportCreationResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable StartReportCreation where
+  hashWithSalt _salt StartReportCreation' {..} =
+    _salt `Prelude.hashWithSalt` s3Bucket
+
+instance Prelude.NFData StartReportCreation where
+  rnf StartReportCreation' {..} = Prelude.rnf s3Bucket
+
+instance Data.ToHeaders StartReportCreation where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "ResourceGroupsTaggingAPI_20170126.StartReportCreation" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON StartReportCreation where
+  toJSON StartReportCreation' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("S3Bucket" Data..= s3Bucket)]
+      )
+
+instance Data.ToPath StartReportCreation where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery StartReportCreation where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newStartReportCreationResponse' smart constructor.
+data StartReportCreationResponse = StartReportCreationResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StartReportCreationResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'startReportCreationResponse_httpStatus' - The response's http status code.
+newStartReportCreationResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  StartReportCreationResponse
+newStartReportCreationResponse pHttpStatus_ =
+  StartReportCreationResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+startReportCreationResponse_httpStatus :: Lens.Lens' StartReportCreationResponse Prelude.Int
+startReportCreationResponse_httpStatus = Lens.lens (\StartReportCreationResponse' {httpStatus} -> httpStatus) (\s@StartReportCreationResponse' {} a -> s {httpStatus = a} :: StartReportCreationResponse)
+
+instance Prelude.NFData StartReportCreationResponse where
+  rnf StartReportCreationResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ResourceGroupsTagging/TagResources.hs b/gen/Amazonka/ResourceGroupsTagging/TagResources.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ResourceGroupsTagging/TagResources.hs
@@ -0,0 +1,258 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ResourceGroupsTagging.TagResources
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Applies one or more tags to the specified resources. Note the following:
+--
+-- -   Not all resources can have tags. For a list of services with
+--     resources that support tagging using this operation, see
+--     <https://docs.aws.amazon.com/resourcegroupstagging/latest/APIReference/supported-services.html Services that support the Resource Groups Tagging API>.
+--     If the resource doesn\'t yet support this operation, the resource\'s
+--     service might support tagging using its own API operations. For more
+--     information, refer to the documentation for that service.
+--
+-- -   Each resource can have up to 50 tags. For other limits, see
+--     <https://docs.aws.amazon.com/general/latest/gr/aws_tagging.html#tag-conventions Tag Naming and Usage Conventions>
+--     in the /Amazon Web Services General Reference./
+--
+-- -   You can only tag resources that are located in the specified Amazon
+--     Web Services Region for the Amazon Web Services account.
+--
+-- -   To add tags to a resource, you need the necessary permissions for
+--     the service that the resource belongs to as well as permissions for
+--     adding tags. For more information, see the documentation for each
+--     service.
+--
+-- Do not store personally identifiable information (PII) or other
+-- confidential or sensitive information in tags. We use tags to provide
+-- you with billing and administration services. Tags are not intended to
+-- be used for private or sensitive data.
+--
+-- __Minimum permissions__
+--
+-- In addition to the @tag:TagResources@ permission required by this
+-- operation, you must also have the tagging permission defined by the
+-- service that created the resource. For example, to tag an Amazon EC2
+-- instance using the @TagResources@ operation, you must have both of the
+-- following permissions:
+--
+-- -   @tag:TagResource@
+--
+-- -   @ec2:CreateTags@
+module Amazonka.ResourceGroupsTagging.TagResources
+  ( -- * Creating a Request
+    TagResources (..),
+    newTagResources,
+
+    -- * Request Lenses
+    tagResources_resourceARNList,
+    tagResources_tags,
+
+    -- * Destructuring the Response
+    TagResourcesResponse (..),
+    newTagResourcesResponse,
+
+    -- * Response Lenses
+    tagResourcesResponse_failedResourcesMap,
+    tagResourcesResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import Amazonka.ResourceGroupsTagging.Types
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newTagResources' smart constructor.
+data TagResources = TagResources'
+  { -- | Specifies the list of ARNs of the resources that you want to apply tags
+    -- to.
+    --
+    -- An ARN (Amazon Resource Name) uniquely identifies a resource. For more
+    -- information, see
+    -- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs) and Amazon Web Services Service Namespaces>
+    -- in the /Amazon Web Services General Reference/.
+    resourceARNList :: Prelude.NonEmpty Prelude.Text,
+    -- | Specifies a list of tags that you want to add to the specified
+    -- resources. A tag consists of a key and a value that you define.
+    tags :: Prelude.HashMap Prelude.Text Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TagResources' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'resourceARNList', 'tagResources_resourceARNList' - Specifies the list of ARNs of the resources that you want to apply tags
+-- to.
+--
+-- An ARN (Amazon Resource Name) uniquely identifies a resource. For more
+-- information, see
+-- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs) and Amazon Web Services Service Namespaces>
+-- in the /Amazon Web Services General Reference/.
+--
+-- 'tags', 'tagResources_tags' - Specifies a list of tags that you want to add to the specified
+-- resources. A tag consists of a key and a value that you define.
+newTagResources ::
+  -- | 'resourceARNList'
+  Prelude.NonEmpty Prelude.Text ->
+  TagResources
+newTagResources pResourceARNList_ =
+  TagResources'
+    { resourceARNList =
+        Lens.coerced Lens.# pResourceARNList_,
+      tags = Prelude.mempty
+    }
+
+-- | Specifies the list of ARNs of the resources that you want to apply tags
+-- to.
+--
+-- An ARN (Amazon Resource Name) uniquely identifies a resource. For more
+-- information, see
+-- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs) and Amazon Web Services Service Namespaces>
+-- in the /Amazon Web Services General Reference/.
+tagResources_resourceARNList :: Lens.Lens' TagResources (Prelude.NonEmpty Prelude.Text)
+tagResources_resourceARNList = Lens.lens (\TagResources' {resourceARNList} -> resourceARNList) (\s@TagResources' {} a -> s {resourceARNList = a} :: TagResources) Prelude.. Lens.coerced
+
+-- | Specifies a list of tags that you want to add to the specified
+-- resources. A tag consists of a key and a value that you define.
+tagResources_tags :: Lens.Lens' TagResources (Prelude.HashMap Prelude.Text Prelude.Text)
+tagResources_tags = Lens.lens (\TagResources' {tags} -> tags) (\s@TagResources' {} a -> s {tags = a} :: TagResources) Prelude.. Lens.coerced
+
+instance Core.AWSRequest TagResources where
+  type AWSResponse TagResources = TagResourcesResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          TagResourcesResponse'
+            Prelude.<$> ( x
+                            Data..?> "FailedResourcesMap"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable TagResources where
+  hashWithSalt _salt TagResources' {..} =
+    _salt
+      `Prelude.hashWithSalt` resourceARNList
+      `Prelude.hashWithSalt` tags
+
+instance Prelude.NFData TagResources where
+  rnf TagResources' {..} =
+    Prelude.rnf resourceARNList
+      `Prelude.seq` Prelude.rnf tags
+
+instance Data.ToHeaders TagResources where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "ResourceGroupsTaggingAPI_20170126.TagResources" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON TagResources where
+  toJSON TagResources' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ("ResourceARNList" Data..= resourceARNList),
+            Prelude.Just ("Tags" Data..= tags)
+          ]
+      )
+
+instance Data.ToPath TagResources where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery TagResources where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newTagResourcesResponse' smart constructor.
+data TagResourcesResponse = TagResourcesResponse'
+  { -- | A map containing a key-value pair for each failed item that couldn\'t be
+    -- tagged. The key is the ARN of the failed resource. The value is a
+    -- @FailureInfo@ object that contains an error code, a status code, and an
+    -- error message. If there are no errors, the @FailedResourcesMap@ is
+    -- empty.
+    failedResourcesMap :: Prelude.Maybe (Prelude.HashMap Prelude.Text FailureInfo),
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TagResourcesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'failedResourcesMap', 'tagResourcesResponse_failedResourcesMap' - A map containing a key-value pair for each failed item that couldn\'t be
+-- tagged. The key is the ARN of the failed resource. The value is a
+-- @FailureInfo@ object that contains an error code, a status code, and an
+-- error message. If there are no errors, the @FailedResourcesMap@ is
+-- empty.
+--
+-- 'httpStatus', 'tagResourcesResponse_httpStatus' - The response's http status code.
+newTagResourcesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  TagResourcesResponse
+newTagResourcesResponse pHttpStatus_ =
+  TagResourcesResponse'
+    { failedResourcesMap =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | A map containing a key-value pair for each failed item that couldn\'t be
+-- tagged. The key is the ARN of the failed resource. The value is a
+-- @FailureInfo@ object that contains an error code, a status code, and an
+-- error message. If there are no errors, the @FailedResourcesMap@ is
+-- empty.
+tagResourcesResponse_failedResourcesMap :: Lens.Lens' TagResourcesResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text FailureInfo))
+tagResourcesResponse_failedResourcesMap = Lens.lens (\TagResourcesResponse' {failedResourcesMap} -> failedResourcesMap) (\s@TagResourcesResponse' {} a -> s {failedResourcesMap = a} :: TagResourcesResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+tagResourcesResponse_httpStatus :: Lens.Lens' TagResourcesResponse Prelude.Int
+tagResourcesResponse_httpStatus = Lens.lens (\TagResourcesResponse' {httpStatus} -> httpStatus) (\s@TagResourcesResponse' {} a -> s {httpStatus = a} :: TagResourcesResponse)
+
+instance Prelude.NFData TagResourcesResponse where
+  rnf TagResourcesResponse' {..} =
+    Prelude.rnf failedResourcesMap
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ResourceGroupsTagging/Types.hs b/gen/Amazonka/ResourceGroupsTagging/Types.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ResourceGroupsTagging/Types.hs
@@ -0,0 +1,240 @@
+{-# LANGUAGE DisambiguateRecordFields #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ResourceGroupsTagging.Types
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ResourceGroupsTagging.Types
+  ( -- * Service Configuration
+    defaultService,
+
+    -- * Errors
+    _ConcurrentModificationException,
+    _ConstraintViolationException,
+    _InternalServiceException,
+    _InvalidParameterException,
+    _PaginationTokenExpiredException,
+    _ThrottledException,
+
+    -- * GroupByAttribute
+    GroupByAttribute (..),
+
+    -- * ResourceErrorCode
+    ResourceErrorCode (..),
+
+    -- * TargetIdType
+    TargetIdType (..),
+
+    -- * ComplianceDetails
+    ComplianceDetails (..),
+    newComplianceDetails,
+    complianceDetails_complianceStatus,
+    complianceDetails_keysWithNoncompliantValues,
+    complianceDetails_noncompliantKeys,
+
+    -- * FailureInfo
+    FailureInfo (..),
+    newFailureInfo,
+    failureInfo_errorCode,
+    failureInfo_errorMessage,
+    failureInfo_statusCode,
+
+    -- * ResourceTagMapping
+    ResourceTagMapping (..),
+    newResourceTagMapping,
+    resourceTagMapping_complianceDetails,
+    resourceTagMapping_resourceARN,
+    resourceTagMapping_tags,
+
+    -- * Summary
+    Summary (..),
+    newSummary,
+    summary_lastUpdated,
+    summary_nonCompliantResources,
+    summary_region,
+    summary_resourceType,
+    summary_targetId,
+    summary_targetIdType,
+
+    -- * Tag
+    Tag (..),
+    newTag,
+    tag_key,
+    tag_value,
+
+    -- * TagFilter
+    TagFilter (..),
+    newTagFilter,
+    tagFilter_key,
+    tagFilter_values,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Prelude as Prelude
+import Amazonka.ResourceGroupsTagging.Types.ComplianceDetails
+import Amazonka.ResourceGroupsTagging.Types.FailureInfo
+import Amazonka.ResourceGroupsTagging.Types.GroupByAttribute
+import Amazonka.ResourceGroupsTagging.Types.ResourceErrorCode
+import Amazonka.ResourceGroupsTagging.Types.ResourceTagMapping
+import Amazonka.ResourceGroupsTagging.Types.Summary
+import Amazonka.ResourceGroupsTagging.Types.Tag
+import Amazonka.ResourceGroupsTagging.Types.TagFilter
+import Amazonka.ResourceGroupsTagging.Types.TargetIdType
+import qualified Amazonka.Sign.V4 as Sign
+
+-- | API version @2017-01-26@ of the Amazon Resource Groups Tagging API SDK configuration.
+defaultService :: Core.Service
+defaultService =
+  Core.Service
+    { Core.abbrev = "ResourceGroupsTagging",
+      Core.signer = Sign.v4,
+      Core.endpointPrefix = "tagging",
+      Core.signingName = "tagging",
+      Core.version = "2017-01-26",
+      Core.s3AddressingStyle = Core.S3AddressingStyleAuto,
+      Core.endpoint = Core.defaultEndpoint defaultService,
+      Core.timeout = Prelude.Just 70,
+      Core.check = Core.statusSuccess,
+      Core.error =
+        Core.parseJSONError "ResourceGroupsTagging",
+      Core.retry = retry
+    }
+  where
+    retry =
+      Core.Exponential
+        { Core.base = 5.0e-2,
+          Core.growth = 2,
+          Core.attempts = 5,
+          Core.check = check
+        }
+    check e
+      | Lens.has (Core.hasStatus 502) e =
+          Prelude.Just "bad_gateway"
+      | Lens.has (Core.hasStatus 504) e =
+          Prelude.Just "gateway_timeout"
+      | Lens.has (Core.hasStatus 500) e =
+          Prelude.Just "general_server_error"
+      | Lens.has (Core.hasStatus 509) e =
+          Prelude.Just "limit_exceeded"
+      | Lens.has
+          ( Core.hasCode "RequestThrottledException"
+              Prelude.. Core.hasStatus 400
+          )
+          e =
+          Prelude.Just "request_throttled_exception"
+      | Lens.has (Core.hasStatus 503) e =
+          Prelude.Just "service_unavailable"
+      | Lens.has
+          ( Core.hasCode "ThrottledException"
+              Prelude.. Core.hasStatus 400
+          )
+          e =
+          Prelude.Just "throttled_exception"
+      | Lens.has
+          ( Core.hasCode "Throttling"
+              Prelude.. Core.hasStatus 400
+          )
+          e =
+          Prelude.Just "throttling"
+      | Lens.has
+          ( Core.hasCode "ThrottlingException"
+              Prelude.. Core.hasStatus 400
+          )
+          e =
+          Prelude.Just "throttling_exception"
+      | Lens.has
+          ( Core.hasCode
+              "ProvisionedThroughputExceededException"
+              Prelude.. Core.hasStatus 400
+          )
+          e =
+          Prelude.Just "throughput_exceeded"
+      | Lens.has (Core.hasStatus 429) e =
+          Prelude.Just "too_many_requests"
+      | Prelude.otherwise = Prelude.Nothing
+
+-- | The target of the operation is currently being modified by a different
+-- request. Try again later.
+_ConcurrentModificationException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ConcurrentModificationException =
+  Core._MatchServiceError
+    defaultService
+    "ConcurrentModificationException"
+
+-- | The request was denied because performing this operation violates a
+-- constraint.
+--
+-- Some of the reasons in the following list might not apply to this
+-- specific operation.
+--
+-- -   You must meet the prerequisites for using tag policies. For
+--     information, see
+--     <https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_tag-policies-prereqs.html Prerequisites and Permissions for Using Tag Policies>
+--     in the /Organizations User Guide./
+--
+-- -   You must enable the tag policies service principal
+--     (@tagpolicies.tag.amazonaws.com@) to integrate with Organizations
+--     For information, see
+--     <https://docs.aws.amazon.com/organizations/latest/APIReference/API_EnableAWSServiceAccess.html EnableAWSServiceAccess>.
+--
+-- -   You must have a tag policy attached to the organization root, an OU,
+--     or an account.
+_ConstraintViolationException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ConstraintViolationException =
+  Core._MatchServiceError
+    defaultService
+    "ConstraintViolationException"
+
+-- | The request processing failed because of an unknown error, exception, or
+-- failure. You can retry the request.
+_InternalServiceException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_InternalServiceException =
+  Core._MatchServiceError
+    defaultService
+    "InternalServiceException"
+
+-- | This error indicates one of the following:
+--
+-- -   A parameter is missing.
+--
+-- -   A malformed string was supplied for the request parameter.
+--
+-- -   An out-of-range value was supplied for the request parameter.
+--
+-- -   The target ID is invalid, unsupported, or doesn\'t exist.
+--
+-- -   You can\'t access the Amazon S3 bucket for report storage. For more
+--     information, see
+--     <https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_tag-policies-prereqs.html#bucket-policies-org-report Additional Requirements for Organization-wide Tag Compliance Reports>
+--     in the /Organizations User Guide./
+_InvalidParameterException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_InvalidParameterException =
+  Core._MatchServiceError
+    defaultService
+    "InvalidParameterException"
+
+-- | A @PaginationToken@ is valid for a maximum of 15 minutes. Your request
+-- was denied because the specified @PaginationToken@ has expired.
+_PaginationTokenExpiredException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_PaginationTokenExpiredException =
+  Core._MatchServiceError
+    defaultService
+    "PaginationTokenExpiredException"
+
+-- | The request was denied to limit the frequency of submitted requests.
+_ThrottledException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ThrottledException =
+  Core._MatchServiceError
+    defaultService
+    "ThrottledException"
diff --git a/gen/Amazonka/ResourceGroupsTagging/Types/ComplianceDetails.hs b/gen/Amazonka/ResourceGroupsTagging/Types/ComplianceDetails.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ResourceGroupsTagging/Types/ComplianceDetails.hs
@@ -0,0 +1,110 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ResourceGroupsTagging.Types.ComplianceDetails
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ResourceGroupsTagging.Types.ComplianceDetails where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Information that shows whether a resource is compliant with the
+-- effective tag policy, including details on any noncompliant tag keys.
+--
+-- /See:/ 'newComplianceDetails' smart constructor.
+data ComplianceDetails = ComplianceDetails'
+  { -- | Whether a resource is compliant with the effective tag policy.
+    complianceStatus :: Prelude.Maybe Prelude.Bool,
+    -- | These are keys defined in the effective policy that are on the resource
+    -- with either incorrect case treatment or noncompliant values.
+    keysWithNoncompliantValues :: Prelude.Maybe [Prelude.Text],
+    -- | These tag keys on the resource are noncompliant with the effective tag
+    -- policy.
+    noncompliantKeys :: Prelude.Maybe [Prelude.Text]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ComplianceDetails' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'complianceStatus', 'complianceDetails_complianceStatus' - Whether a resource is compliant with the effective tag policy.
+--
+-- 'keysWithNoncompliantValues', 'complianceDetails_keysWithNoncompliantValues' - These are keys defined in the effective policy that are on the resource
+-- with either incorrect case treatment or noncompliant values.
+--
+-- 'noncompliantKeys', 'complianceDetails_noncompliantKeys' - These tag keys on the resource are noncompliant with the effective tag
+-- policy.
+newComplianceDetails ::
+  ComplianceDetails
+newComplianceDetails =
+  ComplianceDetails'
+    { complianceStatus =
+        Prelude.Nothing,
+      keysWithNoncompliantValues = Prelude.Nothing,
+      noncompliantKeys = Prelude.Nothing
+    }
+
+-- | Whether a resource is compliant with the effective tag policy.
+complianceDetails_complianceStatus :: Lens.Lens' ComplianceDetails (Prelude.Maybe Prelude.Bool)
+complianceDetails_complianceStatus = Lens.lens (\ComplianceDetails' {complianceStatus} -> complianceStatus) (\s@ComplianceDetails' {} a -> s {complianceStatus = a} :: ComplianceDetails)
+
+-- | These are keys defined in the effective policy that are on the resource
+-- with either incorrect case treatment or noncompliant values.
+complianceDetails_keysWithNoncompliantValues :: Lens.Lens' ComplianceDetails (Prelude.Maybe [Prelude.Text])
+complianceDetails_keysWithNoncompliantValues = Lens.lens (\ComplianceDetails' {keysWithNoncompliantValues} -> keysWithNoncompliantValues) (\s@ComplianceDetails' {} a -> s {keysWithNoncompliantValues = a} :: ComplianceDetails) Prelude.. Lens.mapping Lens.coerced
+
+-- | These tag keys on the resource are noncompliant with the effective tag
+-- policy.
+complianceDetails_noncompliantKeys :: Lens.Lens' ComplianceDetails (Prelude.Maybe [Prelude.Text])
+complianceDetails_noncompliantKeys = Lens.lens (\ComplianceDetails' {noncompliantKeys} -> noncompliantKeys) (\s@ComplianceDetails' {} a -> s {noncompliantKeys = a} :: ComplianceDetails) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromJSON ComplianceDetails where
+  parseJSON =
+    Data.withObject
+      "ComplianceDetails"
+      ( \x ->
+          ComplianceDetails'
+            Prelude.<$> (x Data..:? "ComplianceStatus")
+            Prelude.<*> ( x
+                            Data..:? "KeysWithNoncompliantValues"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> ( x
+                            Data..:? "NoncompliantKeys"
+                            Data..!= Prelude.mempty
+                        )
+      )
+
+instance Prelude.Hashable ComplianceDetails where
+  hashWithSalt _salt ComplianceDetails' {..} =
+    _salt
+      `Prelude.hashWithSalt` complianceStatus
+      `Prelude.hashWithSalt` keysWithNoncompliantValues
+      `Prelude.hashWithSalt` noncompliantKeys
+
+instance Prelude.NFData ComplianceDetails where
+  rnf ComplianceDetails' {..} =
+    Prelude.rnf complianceStatus
+      `Prelude.seq` Prelude.rnf keysWithNoncompliantValues
+      `Prelude.seq` Prelude.rnf noncompliantKeys
diff --git a/gen/Amazonka/ResourceGroupsTagging/Types/FailureInfo.hs b/gen/Amazonka/ResourceGroupsTagging/Types/FailureInfo.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ResourceGroupsTagging/Types/FailureInfo.hs
@@ -0,0 +1,134 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ResourceGroupsTagging.Types.FailureInfo
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ResourceGroupsTagging.Types.FailureInfo where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import Amazonka.ResourceGroupsTagging.Types.ResourceErrorCode
+
+-- | Information about the errors that are returned for each failed resource.
+-- This information can include @InternalServiceException@ and
+-- @InvalidParameterException@ errors. It can also include any valid error
+-- code returned by the Amazon Web Services service that hosts the resource
+-- that the ARN key represents.
+--
+-- The following are common error codes that you might receive from other
+-- Amazon Web Services services:
+--
+-- -   __InternalServiceException__ – This can mean that the Resource
+--     Groups Tagging API didn\'t receive a response from another Amazon
+--     Web Services service. It can also mean that the resource type in the
+--     request is not supported by the Resource Groups Tagging API. In
+--     these cases, it\'s safe to retry the request and then call
+--     <https://docs.aws.amazon.com/resourcegroupstagging/latest/APIReference/API_GetResources.html GetResources>
+--     to verify the changes.
+--
+-- -   __AccessDeniedException__ – This can mean that you need permission
+--     to call the tagging operations in the Amazon Web Services service
+--     that contains the resource. For example, to use the Resource Groups
+--     Tagging API to tag a Amazon CloudWatch alarm resource, you need
+--     permission to call both
+--     <https://docs.aws.amazon.com/resourcegroupstagging/latest/APIReference/API_TagResources.html TagResources>
+--     /and/
+--     <https://docs.aws.amazon.com/AmazonCloudWatch/latest/APIReference/API_TagResource.html TagResource>
+--     in the CloudWatch API.
+--
+-- For more information on errors that are generated from other Amazon Web
+-- Services services, see the documentation for that service.
+--
+-- /See:/ 'newFailureInfo' smart constructor.
+data FailureInfo = FailureInfo'
+  { -- | The code of the common error. Valid values include
+    -- @InternalServiceException@, @InvalidParameterException@, and any valid
+    -- error code returned by the Amazon Web Services service that hosts the
+    -- resource that you want to tag.
+    errorCode :: Prelude.Maybe ResourceErrorCode,
+    -- | The message of the common error.
+    errorMessage :: Prelude.Maybe Prelude.Text,
+    -- | The HTTP status code of the common error.
+    statusCode :: Prelude.Maybe Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'FailureInfo' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'errorCode', 'failureInfo_errorCode' - The code of the common error. Valid values include
+-- @InternalServiceException@, @InvalidParameterException@, and any valid
+-- error code returned by the Amazon Web Services service that hosts the
+-- resource that you want to tag.
+--
+-- 'errorMessage', 'failureInfo_errorMessage' - The message of the common error.
+--
+-- 'statusCode', 'failureInfo_statusCode' - The HTTP status code of the common error.
+newFailureInfo ::
+  FailureInfo
+newFailureInfo =
+  FailureInfo'
+    { errorCode = Prelude.Nothing,
+      errorMessage = Prelude.Nothing,
+      statusCode = Prelude.Nothing
+    }
+
+-- | The code of the common error. Valid values include
+-- @InternalServiceException@, @InvalidParameterException@, and any valid
+-- error code returned by the Amazon Web Services service that hosts the
+-- resource that you want to tag.
+failureInfo_errorCode :: Lens.Lens' FailureInfo (Prelude.Maybe ResourceErrorCode)
+failureInfo_errorCode = Lens.lens (\FailureInfo' {errorCode} -> errorCode) (\s@FailureInfo' {} a -> s {errorCode = a} :: FailureInfo)
+
+-- | The message of the common error.
+failureInfo_errorMessage :: Lens.Lens' FailureInfo (Prelude.Maybe Prelude.Text)
+failureInfo_errorMessage = Lens.lens (\FailureInfo' {errorMessage} -> errorMessage) (\s@FailureInfo' {} a -> s {errorMessage = a} :: FailureInfo)
+
+-- | The HTTP status code of the common error.
+failureInfo_statusCode :: Lens.Lens' FailureInfo (Prelude.Maybe Prelude.Int)
+failureInfo_statusCode = Lens.lens (\FailureInfo' {statusCode} -> statusCode) (\s@FailureInfo' {} a -> s {statusCode = a} :: FailureInfo)
+
+instance Data.FromJSON FailureInfo where
+  parseJSON =
+    Data.withObject
+      "FailureInfo"
+      ( \x ->
+          FailureInfo'
+            Prelude.<$> (x Data..:? "ErrorCode")
+            Prelude.<*> (x Data..:? "ErrorMessage")
+            Prelude.<*> (x Data..:? "StatusCode")
+      )
+
+instance Prelude.Hashable FailureInfo where
+  hashWithSalt _salt FailureInfo' {..} =
+    _salt
+      `Prelude.hashWithSalt` errorCode
+      `Prelude.hashWithSalt` errorMessage
+      `Prelude.hashWithSalt` statusCode
+
+instance Prelude.NFData FailureInfo where
+  rnf FailureInfo' {..} =
+    Prelude.rnf errorCode
+      `Prelude.seq` Prelude.rnf errorMessage
+      `Prelude.seq` Prelude.rnf statusCode
diff --git a/gen/Amazonka/ResourceGroupsTagging/Types/GroupByAttribute.hs b/gen/Amazonka/ResourceGroupsTagging/Types/GroupByAttribute.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ResourceGroupsTagging/Types/GroupByAttribute.hs
@@ -0,0 +1,76 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ResourceGroupsTagging.Types.GroupByAttribute
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ResourceGroupsTagging.Types.GroupByAttribute
+  ( GroupByAttribute
+      ( ..,
+        GroupByAttribute_REGION,
+        GroupByAttribute_RESOURCE_TYPE,
+        GroupByAttribute_TARGET_ID
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype GroupByAttribute = GroupByAttribute'
+  { fromGroupByAttribute ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern GroupByAttribute_REGION :: GroupByAttribute
+pattern GroupByAttribute_REGION = GroupByAttribute' "REGION"
+
+pattern GroupByAttribute_RESOURCE_TYPE :: GroupByAttribute
+pattern GroupByAttribute_RESOURCE_TYPE = GroupByAttribute' "RESOURCE_TYPE"
+
+pattern GroupByAttribute_TARGET_ID :: GroupByAttribute
+pattern GroupByAttribute_TARGET_ID = GroupByAttribute' "TARGET_ID"
+
+{-# COMPLETE
+  GroupByAttribute_REGION,
+  GroupByAttribute_RESOURCE_TYPE,
+  GroupByAttribute_TARGET_ID,
+  GroupByAttribute'
+  #-}
diff --git a/gen/Amazonka/ResourceGroupsTagging/Types/ResourceErrorCode.hs b/gen/Amazonka/ResourceGroupsTagging/Types/ResourceErrorCode.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ResourceGroupsTagging/Types/ResourceErrorCode.hs
@@ -0,0 +1,71 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ResourceGroupsTagging.Types.ResourceErrorCode
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ResourceGroupsTagging.Types.ResourceErrorCode
+  ( ResourceErrorCode
+      ( ..,
+        ResourceErrorCode_InternalServiceException,
+        ResourceErrorCode_InvalidParameterException
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype ResourceErrorCode = ResourceErrorCode'
+  { fromResourceErrorCode ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern ResourceErrorCode_InternalServiceException :: ResourceErrorCode
+pattern ResourceErrorCode_InternalServiceException = ResourceErrorCode' "InternalServiceException"
+
+pattern ResourceErrorCode_InvalidParameterException :: ResourceErrorCode
+pattern ResourceErrorCode_InvalidParameterException = ResourceErrorCode' "InvalidParameterException"
+
+{-# COMPLETE
+  ResourceErrorCode_InternalServiceException,
+  ResourceErrorCode_InvalidParameterException,
+  ResourceErrorCode'
+  #-}
diff --git a/gen/Amazonka/ResourceGroupsTagging/Types/ResourceTagMapping.hs b/gen/Amazonka/ResourceGroupsTagging/Types/ResourceTagMapping.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ResourceGroupsTagging/Types/ResourceTagMapping.hs
@@ -0,0 +1,106 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ResourceGroupsTagging.Types.ResourceTagMapping
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ResourceGroupsTagging.Types.ResourceTagMapping where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import Amazonka.ResourceGroupsTagging.Types.ComplianceDetails
+import Amazonka.ResourceGroupsTagging.Types.Tag
+
+-- | A list of resource ARNs and the tags (keys and values) that are
+-- associated with each.
+--
+-- /See:/ 'newResourceTagMapping' smart constructor.
+data ResourceTagMapping = ResourceTagMapping'
+  { -- | Information that shows whether a resource is compliant with the
+    -- effective tag policy, including details on any noncompliant tag keys.
+    complianceDetails :: Prelude.Maybe ComplianceDetails,
+    -- | The ARN of the resource.
+    resourceARN :: Prelude.Maybe Prelude.Text,
+    -- | The tags that have been applied to one or more Amazon Web Services
+    -- resources.
+    tags :: Prelude.Maybe [Tag]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ResourceTagMapping' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'complianceDetails', 'resourceTagMapping_complianceDetails' - Information that shows whether a resource is compliant with the
+-- effective tag policy, including details on any noncompliant tag keys.
+--
+-- 'resourceARN', 'resourceTagMapping_resourceARN' - The ARN of the resource.
+--
+-- 'tags', 'resourceTagMapping_tags' - The tags that have been applied to one or more Amazon Web Services
+-- resources.
+newResourceTagMapping ::
+  ResourceTagMapping
+newResourceTagMapping =
+  ResourceTagMapping'
+    { complianceDetails =
+        Prelude.Nothing,
+      resourceARN = Prelude.Nothing,
+      tags = Prelude.Nothing
+    }
+
+-- | Information that shows whether a resource is compliant with the
+-- effective tag policy, including details on any noncompliant tag keys.
+resourceTagMapping_complianceDetails :: Lens.Lens' ResourceTagMapping (Prelude.Maybe ComplianceDetails)
+resourceTagMapping_complianceDetails = Lens.lens (\ResourceTagMapping' {complianceDetails} -> complianceDetails) (\s@ResourceTagMapping' {} a -> s {complianceDetails = a} :: ResourceTagMapping)
+
+-- | The ARN of the resource.
+resourceTagMapping_resourceARN :: Lens.Lens' ResourceTagMapping (Prelude.Maybe Prelude.Text)
+resourceTagMapping_resourceARN = Lens.lens (\ResourceTagMapping' {resourceARN} -> resourceARN) (\s@ResourceTagMapping' {} a -> s {resourceARN = a} :: ResourceTagMapping)
+
+-- | The tags that have been applied to one or more Amazon Web Services
+-- resources.
+resourceTagMapping_tags :: Lens.Lens' ResourceTagMapping (Prelude.Maybe [Tag])
+resourceTagMapping_tags = Lens.lens (\ResourceTagMapping' {tags} -> tags) (\s@ResourceTagMapping' {} a -> s {tags = a} :: ResourceTagMapping) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromJSON ResourceTagMapping where
+  parseJSON =
+    Data.withObject
+      "ResourceTagMapping"
+      ( \x ->
+          ResourceTagMapping'
+            Prelude.<$> (x Data..:? "ComplianceDetails")
+            Prelude.<*> (x Data..:? "ResourceARN")
+            Prelude.<*> (x Data..:? "Tags" Data..!= Prelude.mempty)
+      )
+
+instance Prelude.Hashable ResourceTagMapping where
+  hashWithSalt _salt ResourceTagMapping' {..} =
+    _salt
+      `Prelude.hashWithSalt` complianceDetails
+      `Prelude.hashWithSalt` resourceARN
+      `Prelude.hashWithSalt` tags
+
+instance Prelude.NFData ResourceTagMapping where
+  rnf ResourceTagMapping' {..} =
+    Prelude.rnf complianceDetails
+      `Prelude.seq` Prelude.rnf resourceARN
+      `Prelude.seq` Prelude.rnf tags
diff --git a/gen/Amazonka/ResourceGroupsTagging/Types/Summary.hs b/gen/Amazonka/ResourceGroupsTagging/Types/Summary.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ResourceGroupsTagging/Types/Summary.hs
@@ -0,0 +1,142 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ResourceGroupsTagging.Types.Summary
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ResourceGroupsTagging.Types.Summary where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import Amazonka.ResourceGroupsTagging.Types.TargetIdType
+
+-- | A count of noncompliant resources.
+--
+-- /See:/ 'newSummary' smart constructor.
+data Summary = Summary'
+  { -- | The timestamp that shows when this summary was generated in this Region.
+    lastUpdated :: Prelude.Maybe Prelude.Text,
+    -- | The count of noncompliant resources.
+    nonCompliantResources :: Prelude.Maybe Prelude.Integer,
+    -- | The Amazon Web Services Region that the summary applies to.
+    region :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Web Services resource type.
+    resourceType :: Prelude.Maybe Prelude.Text,
+    -- | The account identifier or the root identifier of the organization. If
+    -- you don\'t know the root ID, you can call the Organizations
+    -- <https://docs.aws.amazon.com/organizations/latest/APIReference/API_ListRoots.html ListRoots>
+    -- API.
+    targetId :: Prelude.Maybe Prelude.Text,
+    -- | Whether the target is an account, an OU, or the organization root.
+    targetIdType :: Prelude.Maybe TargetIdType
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Summary' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'lastUpdated', 'summary_lastUpdated' - The timestamp that shows when this summary was generated in this Region.
+--
+-- 'nonCompliantResources', 'summary_nonCompliantResources' - The count of noncompliant resources.
+--
+-- 'region', 'summary_region' - The Amazon Web Services Region that the summary applies to.
+--
+-- 'resourceType', 'summary_resourceType' - The Amazon Web Services resource type.
+--
+-- 'targetId', 'summary_targetId' - The account identifier or the root identifier of the organization. If
+-- you don\'t know the root ID, you can call the Organizations
+-- <https://docs.aws.amazon.com/organizations/latest/APIReference/API_ListRoots.html ListRoots>
+-- API.
+--
+-- 'targetIdType', 'summary_targetIdType' - Whether the target is an account, an OU, or the organization root.
+newSummary ::
+  Summary
+newSummary =
+  Summary'
+    { lastUpdated = Prelude.Nothing,
+      nonCompliantResources = Prelude.Nothing,
+      region = Prelude.Nothing,
+      resourceType = Prelude.Nothing,
+      targetId = Prelude.Nothing,
+      targetIdType = Prelude.Nothing
+    }
+
+-- | The timestamp that shows when this summary was generated in this Region.
+summary_lastUpdated :: Lens.Lens' Summary (Prelude.Maybe Prelude.Text)
+summary_lastUpdated = Lens.lens (\Summary' {lastUpdated} -> lastUpdated) (\s@Summary' {} a -> s {lastUpdated = a} :: Summary)
+
+-- | The count of noncompliant resources.
+summary_nonCompliantResources :: Lens.Lens' Summary (Prelude.Maybe Prelude.Integer)
+summary_nonCompliantResources = Lens.lens (\Summary' {nonCompliantResources} -> nonCompliantResources) (\s@Summary' {} a -> s {nonCompliantResources = a} :: Summary)
+
+-- | The Amazon Web Services Region that the summary applies to.
+summary_region :: Lens.Lens' Summary (Prelude.Maybe Prelude.Text)
+summary_region = Lens.lens (\Summary' {region} -> region) (\s@Summary' {} a -> s {region = a} :: Summary)
+
+-- | The Amazon Web Services resource type.
+summary_resourceType :: Lens.Lens' Summary (Prelude.Maybe Prelude.Text)
+summary_resourceType = Lens.lens (\Summary' {resourceType} -> resourceType) (\s@Summary' {} a -> s {resourceType = a} :: Summary)
+
+-- | The account identifier or the root identifier of the organization. If
+-- you don\'t know the root ID, you can call the Organizations
+-- <https://docs.aws.amazon.com/organizations/latest/APIReference/API_ListRoots.html ListRoots>
+-- API.
+summary_targetId :: Lens.Lens' Summary (Prelude.Maybe Prelude.Text)
+summary_targetId = Lens.lens (\Summary' {targetId} -> targetId) (\s@Summary' {} a -> s {targetId = a} :: Summary)
+
+-- | Whether the target is an account, an OU, or the organization root.
+summary_targetIdType :: Lens.Lens' Summary (Prelude.Maybe TargetIdType)
+summary_targetIdType = Lens.lens (\Summary' {targetIdType} -> targetIdType) (\s@Summary' {} a -> s {targetIdType = a} :: Summary)
+
+instance Data.FromJSON Summary where
+  parseJSON =
+    Data.withObject
+      "Summary"
+      ( \x ->
+          Summary'
+            Prelude.<$> (x Data..:? "LastUpdated")
+            Prelude.<*> (x Data..:? "NonCompliantResources")
+            Prelude.<*> (x Data..:? "Region")
+            Prelude.<*> (x Data..:? "ResourceType")
+            Prelude.<*> (x Data..:? "TargetId")
+            Prelude.<*> (x Data..:? "TargetIdType")
+      )
+
+instance Prelude.Hashable Summary where
+  hashWithSalt _salt Summary' {..} =
+    _salt
+      `Prelude.hashWithSalt` lastUpdated
+      `Prelude.hashWithSalt` nonCompliantResources
+      `Prelude.hashWithSalt` region
+      `Prelude.hashWithSalt` resourceType
+      `Prelude.hashWithSalt` targetId
+      `Prelude.hashWithSalt` targetIdType
+
+instance Prelude.NFData Summary where
+  rnf Summary' {..} =
+    Prelude.rnf lastUpdated
+      `Prelude.seq` Prelude.rnf nonCompliantResources
+      `Prelude.seq` Prelude.rnf region
+      `Prelude.seq` Prelude.rnf resourceType
+      `Prelude.seq` Prelude.rnf targetId
+      `Prelude.seq` Prelude.rnf targetIdType
diff --git a/gen/Amazonka/ResourceGroupsTagging/Types/Tag.hs b/gen/Amazonka/ResourceGroupsTagging/Types/Tag.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ResourceGroupsTagging/Types/Tag.hs
@@ -0,0 +1,94 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ResourceGroupsTagging.Types.Tag
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ResourceGroupsTagging.Types.Tag where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | The metadata that you apply to Amazon Web Services resources to help you
+-- categorize and organize them. Each tag consists of a key and a value,
+-- both of which you define. For more information, see
+-- <https://docs.aws.amazon.com/general/latest/gr/aws_tagging.html Tagging Amazon Web Services Resources>
+-- in the /Amazon Web Services General Reference/.
+--
+-- /See:/ 'newTag' smart constructor.
+data Tag = Tag'
+  { -- | One part of a key-value pair that makes up a tag. A key is a general
+    -- label that acts like a category for more specific tag values.
+    key :: Prelude.Text,
+    -- | One part of a key-value pair that make up a tag. A value acts as a
+    -- descriptor within a tag category (key). The value can be empty or null.
+    value :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Tag' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'key', 'tag_key' - One part of a key-value pair that makes up a tag. A key is a general
+-- label that acts like a category for more specific tag values.
+--
+-- 'value', 'tag_value' - One part of a key-value pair that make up a tag. A value acts as a
+-- descriptor within a tag category (key). The value can be empty or null.
+newTag ::
+  -- | 'key'
+  Prelude.Text ->
+  -- | 'value'
+  Prelude.Text ->
+  Tag
+newTag pKey_ pValue_ =
+  Tag' {key = pKey_, value = pValue_}
+
+-- | One part of a key-value pair that makes up a tag. A key is a general
+-- label that acts like a category for more specific tag values.
+tag_key :: Lens.Lens' Tag Prelude.Text
+tag_key = Lens.lens (\Tag' {key} -> key) (\s@Tag' {} a -> s {key = a} :: Tag)
+
+-- | One part of a key-value pair that make up a tag. A value acts as a
+-- descriptor within a tag category (key). The value can be empty or null.
+tag_value :: Lens.Lens' Tag Prelude.Text
+tag_value = Lens.lens (\Tag' {value} -> value) (\s@Tag' {} a -> s {value = a} :: Tag)
+
+instance Data.FromJSON Tag where
+  parseJSON =
+    Data.withObject
+      "Tag"
+      ( \x ->
+          Tag'
+            Prelude.<$> (x Data..: "Key")
+            Prelude.<*> (x Data..: "Value")
+      )
+
+instance Prelude.Hashable Tag where
+  hashWithSalt _salt Tag' {..} =
+    _salt
+      `Prelude.hashWithSalt` key
+      `Prelude.hashWithSalt` value
+
+instance Prelude.NFData Tag where
+  rnf Tag' {..} =
+    Prelude.rnf key `Prelude.seq` Prelude.rnf value
diff --git a/gen/Amazonka/ResourceGroupsTagging/Types/TagFilter.hs b/gen/Amazonka/ResourceGroupsTagging/Types/TagFilter.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ResourceGroupsTagging/Types/TagFilter.hs
@@ -0,0 +1,89 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ResourceGroupsTagging.Types.TagFilter
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ResourceGroupsTagging.Types.TagFilter where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | A list of tags (keys and values) that are used to specify the associated
+-- resources.
+--
+-- /See:/ 'newTagFilter' smart constructor.
+data TagFilter = TagFilter'
+  { -- | One part of a key-value pair that makes up a tag. A key is a general
+    -- label that acts like a category for more specific tag values.
+    key :: Prelude.Maybe Prelude.Text,
+    -- | One part of a key-value pair that make up a tag. A value acts as a
+    -- descriptor within a tag category (key). The value can be empty or null.
+    values :: Prelude.Maybe [Prelude.Text]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TagFilter' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'key', 'tagFilter_key' - One part of a key-value pair that makes up a tag. A key is a general
+-- label that acts like a category for more specific tag values.
+--
+-- 'values', 'tagFilter_values' - One part of a key-value pair that make up a tag. A value acts as a
+-- descriptor within a tag category (key). The value can be empty or null.
+newTagFilter ::
+  TagFilter
+newTagFilter =
+  TagFilter'
+    { key = Prelude.Nothing,
+      values = Prelude.Nothing
+    }
+
+-- | One part of a key-value pair that makes up a tag. A key is a general
+-- label that acts like a category for more specific tag values.
+tagFilter_key :: Lens.Lens' TagFilter (Prelude.Maybe Prelude.Text)
+tagFilter_key = Lens.lens (\TagFilter' {key} -> key) (\s@TagFilter' {} a -> s {key = a} :: TagFilter)
+
+-- | One part of a key-value pair that make up a tag. A value acts as a
+-- descriptor within a tag category (key). The value can be empty or null.
+tagFilter_values :: Lens.Lens' TagFilter (Prelude.Maybe [Prelude.Text])
+tagFilter_values = Lens.lens (\TagFilter' {values} -> values) (\s@TagFilter' {} a -> s {values = a} :: TagFilter) Prelude.. Lens.mapping Lens.coerced
+
+instance Prelude.Hashable TagFilter where
+  hashWithSalt _salt TagFilter' {..} =
+    _salt
+      `Prelude.hashWithSalt` key
+      `Prelude.hashWithSalt` values
+
+instance Prelude.NFData TagFilter where
+  rnf TagFilter' {..} =
+    Prelude.rnf key `Prelude.seq` Prelude.rnf values
+
+instance Data.ToJSON TagFilter where
+  toJSON TagFilter' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Key" Data..=) Prelude.<$> key,
+            ("Values" Data..=) Prelude.<$> values
+          ]
+      )
diff --git a/gen/Amazonka/ResourceGroupsTagging/Types/TargetIdType.hs b/gen/Amazonka/ResourceGroupsTagging/Types/TargetIdType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ResourceGroupsTagging/Types/TargetIdType.hs
@@ -0,0 +1,76 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ResourceGroupsTagging.Types.TargetIdType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ResourceGroupsTagging.Types.TargetIdType
+  ( TargetIdType
+      ( ..,
+        TargetIdType_ACCOUNT,
+        TargetIdType_OU,
+        TargetIdType_ROOT
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype TargetIdType = TargetIdType'
+  { fromTargetIdType ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern TargetIdType_ACCOUNT :: TargetIdType
+pattern TargetIdType_ACCOUNT = TargetIdType' "ACCOUNT"
+
+pattern TargetIdType_OU :: TargetIdType
+pattern TargetIdType_OU = TargetIdType' "OU"
+
+pattern TargetIdType_ROOT :: TargetIdType
+pattern TargetIdType_ROOT = TargetIdType' "ROOT"
+
+{-# COMPLETE
+  TargetIdType_ACCOUNT,
+  TargetIdType_OU,
+  TargetIdType_ROOT,
+  TargetIdType'
+  #-}
diff --git a/gen/Amazonka/ResourceGroupsTagging/UntagResources.hs b/gen/Amazonka/ResourceGroupsTagging/UntagResources.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ResourceGroupsTagging/UntagResources.hs
@@ -0,0 +1,249 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ResourceGroupsTagging.UntagResources
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Removes the specified tags from the specified resources. When you
+-- specify a tag key, the action removes both that key and its associated
+-- value. The operation succeeds even if you attempt to remove tags from a
+-- resource that were already removed. Note the following:
+--
+-- -   To remove tags from a resource, you need the necessary permissions
+--     for the service that the resource belongs to as well as permissions
+--     for removing tags. For more information, see the documentation for
+--     the service whose resource you want to untag.
+--
+-- -   You can only tag resources that are located in the specified Amazon
+--     Web Services Region for the calling Amazon Web Services account.
+--
+-- __Minimum permissions__
+--
+-- In addition to the @tag:UntagResources@ permission required by this
+-- operation, you must also have the remove tags permission defined by the
+-- service that created the resource. For example, to remove the tags from
+-- an Amazon EC2 instance using the @UntagResources@ operation, you must
+-- have both of the following permissions:
+--
+-- -   @tag:UntagResource@
+--
+-- -   @ec2:DeleteTags@
+module Amazonka.ResourceGroupsTagging.UntagResources
+  ( -- * Creating a Request
+    UntagResources (..),
+    newUntagResources,
+
+    -- * Request Lenses
+    untagResources_resourceARNList,
+    untagResources_tagKeys,
+
+    -- * Destructuring the Response
+    UntagResourcesResponse (..),
+    newUntagResourcesResponse,
+
+    -- * Response Lenses
+    untagResourcesResponse_failedResourcesMap,
+    untagResourcesResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import Amazonka.ResourceGroupsTagging.Types
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUntagResources' smart constructor.
+data UntagResources = UntagResources'
+  { -- | Specifies a list of ARNs of the resources that you want to remove tags
+    -- from.
+    --
+    -- An ARN (Amazon Resource Name) uniquely identifies a resource. For more
+    -- information, see
+    -- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs) and Amazon Web Services Service Namespaces>
+    -- in the /Amazon Web Services General Reference/.
+    resourceARNList :: Prelude.NonEmpty Prelude.Text,
+    -- | Specifies a list of tag keys that you want to remove from the specified
+    -- resources.
+    tagKeys :: Prelude.NonEmpty Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UntagResources' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'resourceARNList', 'untagResources_resourceARNList' - Specifies a list of ARNs of the resources that you want to remove tags
+-- from.
+--
+-- An ARN (Amazon Resource Name) uniquely identifies a resource. For more
+-- information, see
+-- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs) and Amazon Web Services Service Namespaces>
+-- in the /Amazon Web Services General Reference/.
+--
+-- 'tagKeys', 'untagResources_tagKeys' - Specifies a list of tag keys that you want to remove from the specified
+-- resources.
+newUntagResources ::
+  -- | 'resourceARNList'
+  Prelude.NonEmpty Prelude.Text ->
+  -- | 'tagKeys'
+  Prelude.NonEmpty Prelude.Text ->
+  UntagResources
+newUntagResources pResourceARNList_ pTagKeys_ =
+  UntagResources'
+    { resourceARNList =
+        Lens.coerced Lens.# pResourceARNList_,
+      tagKeys = Lens.coerced Lens.# pTagKeys_
+    }
+
+-- | Specifies a list of ARNs of the resources that you want to remove tags
+-- from.
+--
+-- An ARN (Amazon Resource Name) uniquely identifies a resource. For more
+-- information, see
+-- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs) and Amazon Web Services Service Namespaces>
+-- in the /Amazon Web Services General Reference/.
+untagResources_resourceARNList :: Lens.Lens' UntagResources (Prelude.NonEmpty Prelude.Text)
+untagResources_resourceARNList = Lens.lens (\UntagResources' {resourceARNList} -> resourceARNList) (\s@UntagResources' {} a -> s {resourceARNList = a} :: UntagResources) Prelude.. Lens.coerced
+
+-- | Specifies a list of tag keys that you want to remove from the specified
+-- resources.
+untagResources_tagKeys :: Lens.Lens' UntagResources (Prelude.NonEmpty Prelude.Text)
+untagResources_tagKeys = Lens.lens (\UntagResources' {tagKeys} -> tagKeys) (\s@UntagResources' {} a -> s {tagKeys = a} :: UntagResources) Prelude.. Lens.coerced
+
+instance Core.AWSRequest UntagResources where
+  type
+    AWSResponse UntagResources =
+      UntagResourcesResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          UntagResourcesResponse'
+            Prelude.<$> ( x
+                            Data..?> "FailedResourcesMap"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UntagResources where
+  hashWithSalt _salt UntagResources' {..} =
+    _salt
+      `Prelude.hashWithSalt` resourceARNList
+      `Prelude.hashWithSalt` tagKeys
+
+instance Prelude.NFData UntagResources where
+  rnf UntagResources' {..} =
+    Prelude.rnf resourceARNList
+      `Prelude.seq` Prelude.rnf tagKeys
+
+instance Data.ToHeaders UntagResources where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "ResourceGroupsTaggingAPI_20170126.UntagResources" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UntagResources where
+  toJSON UntagResources' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ("ResourceARNList" Data..= resourceARNList),
+            Prelude.Just ("TagKeys" Data..= tagKeys)
+          ]
+      )
+
+instance Data.ToPath UntagResources where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery UntagResources where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUntagResourcesResponse' smart constructor.
+data UntagResourcesResponse = UntagResourcesResponse'
+  { -- | A map containing a key-value pair for each failed item that couldn\'t be
+    -- untagged. The key is the ARN of the failed resource. The value is a
+    -- @FailureInfo@ object that contains an error code, a status code, and an
+    -- error message. If there are no errors, the @FailedResourcesMap@ is
+    -- empty.
+    failedResourcesMap :: Prelude.Maybe (Prelude.HashMap Prelude.Text FailureInfo),
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UntagResourcesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'failedResourcesMap', 'untagResourcesResponse_failedResourcesMap' - A map containing a key-value pair for each failed item that couldn\'t be
+-- untagged. The key is the ARN of the failed resource. The value is a
+-- @FailureInfo@ object that contains an error code, a status code, and an
+-- error message. If there are no errors, the @FailedResourcesMap@ is
+-- empty.
+--
+-- 'httpStatus', 'untagResourcesResponse_httpStatus' - The response's http status code.
+newUntagResourcesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UntagResourcesResponse
+newUntagResourcesResponse pHttpStatus_ =
+  UntagResourcesResponse'
+    { failedResourcesMap =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | A map containing a key-value pair for each failed item that couldn\'t be
+-- untagged. The key is the ARN of the failed resource. The value is a
+-- @FailureInfo@ object that contains an error code, a status code, and an
+-- error message. If there are no errors, the @FailedResourcesMap@ is
+-- empty.
+untagResourcesResponse_failedResourcesMap :: Lens.Lens' UntagResourcesResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text FailureInfo))
+untagResourcesResponse_failedResourcesMap = Lens.lens (\UntagResourcesResponse' {failedResourcesMap} -> failedResourcesMap) (\s@UntagResourcesResponse' {} a -> s {failedResourcesMap = a} :: UntagResourcesResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+untagResourcesResponse_httpStatus :: Lens.Lens' UntagResourcesResponse Prelude.Int
+untagResourcesResponse_httpStatus = Lens.lens (\UntagResourcesResponse' {httpStatus} -> httpStatus) (\s@UntagResourcesResponse' {} a -> s {httpStatus = a} :: UntagResourcesResponse)
+
+instance Prelude.NFData UntagResourcesResponse where
+  rnf UntagResourcesResponse' {..} =
+    Prelude.rnf failedResourcesMap
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ResourceGroupsTagging/Waiters.hs b/gen/Amazonka/ResourceGroupsTagging/Waiters.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ResourceGroupsTagging/Waiters.hs
@@ -0,0 +1,24 @@
+{-# LANGUAGE DisambiguateRecordFields #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ResourceGroupsTagging.Waiters
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ResourceGroupsTagging.Waiters where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import Amazonka.ResourceGroupsTagging.Lens
+import Amazonka.ResourceGroupsTagging.Types
diff --git a/gen/Network/AWS/ResourceGroupsTagging.hs b/gen/Network/AWS/ResourceGroupsTagging.hs
deleted file mode 100644
--- a/gen/Network/AWS/ResourceGroupsTagging.hs
+++ /dev/null
@@ -1,146 +0,0 @@
-{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
-{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.ResourceGroupsTagging
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- __Resource Groups Tagging API__
---
--- This guide describes the API operations for the resource groups tagging.
---
--- A tag is a label that you assign to an AWS resource. A tag consists of a key and a value, both of which you define. For example, if you have two Amazon EC2 instances, you might assign both a tag key of "Stack." But the value of "Stack" might be "Testing" for one and "Production" for the other.
---
--- Tagging can help you organize your resources and enables you to simplify resource management, access management and cost allocation. For more information about tagging, see <http://docs.aws.amazon.com/awsconsolehelpdocs/latest/gsg/tag-editor.html Working with Tag Editor> and <http://docs.aws.amazon.com/awsconsolehelpdocs/latest/gsg/resource-groups.html Working with Resource Groups> . For more information about permissions you need to use the resource groups tagging APIs, see <http://docs.aws.amazon.com/awsconsolehelpdocs/latest/gsg/obtaining-permissions-for-resource-groups.html Obtaining Permissions for Resource Groups > and <http://docs.aws.amazon.com/awsconsolehelpdocs/latest/gsg/obtaining-permissions-for-tagging.html Obtaining Permissions for Tagging > .
---
--- You can use the resource groups tagging APIs to complete the following tasks:
---
---     * Tag and untag supported resources located in the specified region for the AWS account
---
---     * Use tag-based filters to search for resources located in the specified region for the AWS account
---
---     * List all existing tag keys in the specified region for the AWS account
---
---     * List all existing values for the specified key in the specified region for the AWS account
---
---
---
--- Not all resources can have tags. For a lists of resources that you can tag, see <http://docs.aws.amazon.com/awsconsolehelpdocs/latest/gsg/supported-resources.html Supported Resources> in the /AWS Resource Groups and Tag Editor User Guide/ .
---
--- To make full use of the resource groups tagging APIs, you might need additional IAM permissions, including permission to access the resources of individual services as well as permission to view and apply tags to those resources. For more information, see <http://docs.aws.amazon.com/awsconsolehelpdocs/latest/gsg/obtaining-permissions-for-tagging.html Obtaining Permissions for Tagging> in the /AWS Resource Groups and Tag Editor User Guide/ .
---
-module Network.AWS.ResourceGroupsTagging
-    (
-    -- * Service Configuration
-      resourceGroupsTagging
-
-    -- * Errors
-    -- $errors
-
-    -- ** InvalidParameterException
-    , _InvalidParameterException
-
-    -- ** ThrottledException
-    , _ThrottledException
-
-    -- ** PaginationTokenExpiredException
-    , _PaginationTokenExpiredException
-
-    -- ** InternalServiceException
-    , _InternalServiceException
-
-    -- * Waiters
-    -- $waiters
-
-    -- * Operations
-    -- $operations
-
-    -- ** GetTagKeys (Paginated)
-    , module Network.AWS.ResourceGroupsTagging.GetTagKeys
-
-    -- ** TagResources
-    , module Network.AWS.ResourceGroupsTagging.TagResources
-
-    -- ** GetTagValues (Paginated)
-    , module Network.AWS.ResourceGroupsTagging.GetTagValues
-
-    -- ** GetResources (Paginated)
-    , module Network.AWS.ResourceGroupsTagging.GetResources
-
-    -- ** UntagResources
-    , module Network.AWS.ResourceGroupsTagging.UntagResources
-
-    -- * Types
-
-    -- ** ResourceErrorCode
-    , ResourceErrorCode (..)
-
-    -- ** FailureInfo
-    , FailureInfo
-    , failureInfo
-    , fiErrorCode
-    , fiErrorMessage
-    , fiStatusCode
-
-    -- ** ResourceTagMapping
-    , ResourceTagMapping
-    , resourceTagMapping
-    , rtmResourceARN
-    , rtmTags
-
-    -- ** Tag
-    , Tag
-    , tag
-    , tagKey
-    , tagValue
-
-    -- ** TagFilter
-    , TagFilter
-    , tagFilter
-    , tfValues
-    , tfKey
-    ) where
-
-import Network.AWS.ResourceGroupsTagging.GetResources
-import Network.AWS.ResourceGroupsTagging.GetTagKeys
-import Network.AWS.ResourceGroupsTagging.GetTagValues
-import Network.AWS.ResourceGroupsTagging.TagResources
-import Network.AWS.ResourceGroupsTagging.Types
-import Network.AWS.ResourceGroupsTagging.UntagResources
-import Network.AWS.ResourceGroupsTagging.Waiters
-
-{- $errors
-Error matchers are designed for use with the functions provided by
-<http://hackage.haskell.org/package/lens/docs/Control-Exception-Lens.html Control.Exception.Lens>.
-This allows catching (and rethrowing) service specific errors returned
-by 'ResourceGroupsTagging'.
--}
-
-{- $operations
-Some AWS operations return results that are incomplete and require subsequent
-requests in order to obtain the entire result set. The process of sending
-subsequent requests to continue where a previous request left off is called
-pagination. For example, the 'ListObjects' operation of Amazon S3 returns up to
-1000 objects at a time, and you must send subsequent requests with the
-appropriate Marker in order to retrieve the next page of results.
-
-Operations that have an 'AWSPager' instance can transparently perform subsequent
-requests, correctly setting Markers and other request facets to iterate through
-the entire result set of a truncated API operation. Operations which support
-this have an additional note in the documentation.
-
-Many operations have the ability to filter results on the server side. See the
-individual operation parameters for details.
--}
-
-{- $waiters
-Waiters poll by repeatedly sending a request until some remote success condition
-configured by the 'Wait' specification is fulfilled. The 'Wait' specification
-determines how many attempts should be made, in addition to delay and retry strategies.
--}
diff --git a/gen/Network/AWS/ResourceGroupsTagging/GetResources.hs b/gen/Network/AWS/ResourceGroupsTagging/GetResources.hs
deleted file mode 100644
--- a/gen/Network/AWS/ResourceGroupsTagging/GetResources.hs
+++ /dev/null
@@ -1,200 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.ResourceGroupsTagging.GetResources
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Returns all the tagged resources that are associated with the specified tags (keys and values) located in the specified region for the AWS account. The tags and the resource types that you specify in the request are known as /filters/ . The response includes all tags that are associated with the requested resources. If no filter is provided, this action returns a paginated resource list with the associated tags.
---
---
---
--- This operation returns paginated results.
-module Network.AWS.ResourceGroupsTagging.GetResources
-    (
-    -- * Creating a Request
-      getResources
-    , GetResources
-    -- * Request Lenses
-    , grPaginationToken
-    , grResourcesPerPage
-    , grResourceTypeFilters
-    , grTagFilters
-    , grTagsPerPage
-
-    -- * Destructuring the Response
-    , getResourcesResponse
-    , GetResourcesResponse
-    -- * Response Lenses
-    , grrsPaginationToken
-    , grrsResourceTagMappingList
-    , grrsResponseStatus
-    ) where
-
-import Network.AWS.Lens
-import Network.AWS.Pager
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.ResourceGroupsTagging.Types
-import Network.AWS.ResourceGroupsTagging.Types.Product
-import Network.AWS.Response
-
--- | /See:/ 'getResources' smart constructor.
-data GetResources = GetResources'
-  { _grPaginationToken     :: !(Maybe Text)
-  , _grResourcesPerPage    :: !(Maybe Int)
-  , _grResourceTypeFilters :: !(Maybe [Text])
-  , _grTagFilters          :: !(Maybe [TagFilter])
-  , _grTagsPerPage         :: !(Maybe Int)
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'GetResources' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'grPaginationToken' - A string that indicates that additional data is available. Leave this value empty for your initial request. If the response includes a @PaginationToken@ , use that string for this value to request an additional page of data.
---
--- * 'grResourcesPerPage' - A limit that restricts the number of resources returned by GetResources in paginated output. You can set ResourcesPerPage to a minimum of 1 item and the maximum of 50 items.
---
--- * 'grResourceTypeFilters' - The constraints on the resources that you want returned. The format of each resource type is @service[:resourceType]@ . For example, specifying a resource type of @ec2@ returns all tagged Amazon EC2 resources (which includes tagged EC2 instances). Specifying a resource type of @ec2:instance@ returns only EC2 instances.  The string for each service name and resource type is the same as that embedded in a resource's Amazon Resource Name (ARN). Consult the /AWS General Reference/ for the following:     * For a list of service name strings, see <http://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html#genref-aws-service-namespaces AWS Service Namespaces> .     * For resource type strings, see <http://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html#arns-syntax Example ARNs> .     * For more information about ARNs, see <http://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs) and AWS Service Namespaces> .
---
--- * 'grTagFilters' - A list of tags (keys and values). A request can include up to 50 keys, and each key can include up to 20 values. If you specify multiple filters connected by an AND operator in a single request, the response returns only those resources that are associated with every specified filter. If you specify multiple filters connected by an OR operator in a single request, the response returns all resources that are associated with at least one or possibly more of the specified filters.
---
--- * 'grTagsPerPage' - A limit that restricts the number of tags (key and value pairs) returned by GetResources in paginated output. A resource with no tags is counted as having one tag (one key and value pair). @GetResources@ does not split a resource and its associated tags across pages. If the specified @TagsPerPage@ would cause such a break, a @PaginationToken@ is returned in place of the affected resource and its tags. Use that token in another request to get the remaining data. For example, if you specify a @TagsPerPage@ of @100@ and the account has 22 resources with 10 tags each (meaning that each resource has 10 key and value pairs), the output will consist of 3 pages, with the first page displaying the first 10 resources, each with its 10 tags, the second page displaying the next 10 resources each with its 10 tags, and the third page displaying the remaining 2 resources, each with its 10 tags. You can set @TagsPerPage@ to a minimum of 100 items and the maximum of 500 items.
-getResources
-    :: GetResources
-getResources =
-  GetResources'
-    { _grPaginationToken = Nothing
-    , _grResourcesPerPage = Nothing
-    , _grResourceTypeFilters = Nothing
-    , _grTagFilters = Nothing
-    , _grTagsPerPage = Nothing
-    }
-
-
--- | A string that indicates that additional data is available. Leave this value empty for your initial request. If the response includes a @PaginationToken@ , use that string for this value to request an additional page of data.
-grPaginationToken :: Lens' GetResources (Maybe Text)
-grPaginationToken = lens _grPaginationToken (\ s a -> s{_grPaginationToken = a})
-
--- | A limit that restricts the number of resources returned by GetResources in paginated output. You can set ResourcesPerPage to a minimum of 1 item and the maximum of 50 items.
-grResourcesPerPage :: Lens' GetResources (Maybe Int)
-grResourcesPerPage = lens _grResourcesPerPage (\ s a -> s{_grResourcesPerPage = a})
-
--- | The constraints on the resources that you want returned. The format of each resource type is @service[:resourceType]@ . For example, specifying a resource type of @ec2@ returns all tagged Amazon EC2 resources (which includes tagged EC2 instances). Specifying a resource type of @ec2:instance@ returns only EC2 instances.  The string for each service name and resource type is the same as that embedded in a resource's Amazon Resource Name (ARN). Consult the /AWS General Reference/ for the following:     * For a list of service name strings, see <http://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html#genref-aws-service-namespaces AWS Service Namespaces> .     * For resource type strings, see <http://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html#arns-syntax Example ARNs> .     * For more information about ARNs, see <http://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs) and AWS Service Namespaces> .
-grResourceTypeFilters :: Lens' GetResources [Text]
-grResourceTypeFilters = lens _grResourceTypeFilters (\ s a -> s{_grResourceTypeFilters = a}) . _Default . _Coerce
-
--- | A list of tags (keys and values). A request can include up to 50 keys, and each key can include up to 20 values. If you specify multiple filters connected by an AND operator in a single request, the response returns only those resources that are associated with every specified filter. If you specify multiple filters connected by an OR operator in a single request, the response returns all resources that are associated with at least one or possibly more of the specified filters.
-grTagFilters :: Lens' GetResources [TagFilter]
-grTagFilters = lens _grTagFilters (\ s a -> s{_grTagFilters = a}) . _Default . _Coerce
-
--- | A limit that restricts the number of tags (key and value pairs) returned by GetResources in paginated output. A resource with no tags is counted as having one tag (one key and value pair). @GetResources@ does not split a resource and its associated tags across pages. If the specified @TagsPerPage@ would cause such a break, a @PaginationToken@ is returned in place of the affected resource and its tags. Use that token in another request to get the remaining data. For example, if you specify a @TagsPerPage@ of @100@ and the account has 22 resources with 10 tags each (meaning that each resource has 10 key and value pairs), the output will consist of 3 pages, with the first page displaying the first 10 resources, each with its 10 tags, the second page displaying the next 10 resources each with its 10 tags, and the third page displaying the remaining 2 resources, each with its 10 tags. You can set @TagsPerPage@ to a minimum of 100 items and the maximum of 500 items.
-grTagsPerPage :: Lens' GetResources (Maybe Int)
-grTagsPerPage = lens _grTagsPerPage (\ s a -> s{_grTagsPerPage = a})
-
-instance AWSPager GetResources where
-        page rq rs
-          | stop (rs ^. grrsPaginationToken) = Nothing
-          | stop (rs ^. grrsResourceTagMappingList) = Nothing
-          | otherwise =
-            Just $ rq &
-              grPaginationToken .~ rs ^. grrsPaginationToken
-
-instance AWSRequest GetResources where
-        type Rs GetResources = GetResourcesResponse
-        request = postJSON resourceGroupsTagging
-        response
-          = receiveJSON
-              (\ s h x ->
-                 GetResourcesResponse' <$>
-                   (x .?> "PaginationToken") <*>
-                     (x .?> "ResourceTagMappingList" .!@ mempty)
-                     <*> (pure (fromEnum s)))
-
-instance Hashable GetResources where
-
-instance NFData GetResources where
-
-instance ToHeaders GetResources where
-        toHeaders
-          = const
-              (mconcat
-                 ["X-Amz-Target" =#
-                    ("ResourceGroupsTaggingAPI_20170126.GetResources" ::
-                       ByteString),
-                  "Content-Type" =#
-                    ("application/x-amz-json-1.1" :: ByteString)])
-
-instance ToJSON GetResources where
-        toJSON GetResources'{..}
-          = object
-              (catMaybes
-                 [("PaginationToken" .=) <$> _grPaginationToken,
-                  ("ResourcesPerPage" .=) <$> _grResourcesPerPage,
-                  ("ResourceTypeFilters" .=) <$>
-                    _grResourceTypeFilters,
-                  ("TagFilters" .=) <$> _grTagFilters,
-                  ("TagsPerPage" .=) <$> _grTagsPerPage])
-
-instance ToPath GetResources where
-        toPath = const "/"
-
-instance ToQuery GetResources where
-        toQuery = const mempty
-
--- | /See:/ 'getResourcesResponse' smart constructor.
-data GetResourcesResponse = GetResourcesResponse'
-  { _grrsPaginationToken        :: !(Maybe Text)
-  , _grrsResourceTagMappingList :: !(Maybe [ResourceTagMapping])
-  , _grrsResponseStatus         :: !Int
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'GetResourcesResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'grrsPaginationToken' - A string that indicates that the response contains more data than can be returned in a single response. To receive additional data, specify this string for the @PaginationToken@ value in a subsequent request.
---
--- * 'grrsResourceTagMappingList' - A list of resource ARNs and the tags (keys and values) associated with each.
---
--- * 'grrsResponseStatus' - -- | The response status code.
-getResourcesResponse
-    :: Int -- ^ 'grrsResponseStatus'
-    -> GetResourcesResponse
-getResourcesResponse pResponseStatus_ =
-  GetResourcesResponse'
-    { _grrsPaginationToken = Nothing
-    , _grrsResourceTagMappingList = Nothing
-    , _grrsResponseStatus = pResponseStatus_
-    }
-
-
--- | A string that indicates that the response contains more data than can be returned in a single response. To receive additional data, specify this string for the @PaginationToken@ value in a subsequent request.
-grrsPaginationToken :: Lens' GetResourcesResponse (Maybe Text)
-grrsPaginationToken = lens _grrsPaginationToken (\ s a -> s{_grrsPaginationToken = a})
-
--- | A list of resource ARNs and the tags (keys and values) associated with each.
-grrsResourceTagMappingList :: Lens' GetResourcesResponse [ResourceTagMapping]
-grrsResourceTagMappingList = lens _grrsResourceTagMappingList (\ s a -> s{_grrsResourceTagMappingList = a}) . _Default . _Coerce
-
--- | -- | The response status code.
-grrsResponseStatus :: Lens' GetResourcesResponse Int
-grrsResponseStatus = lens _grrsResponseStatus (\ s a -> s{_grrsResponseStatus = a})
-
-instance NFData GetResourcesResponse where
diff --git a/gen/Network/AWS/ResourceGroupsTagging/GetTagKeys.hs b/gen/Network/AWS/ResourceGroupsTagging/GetTagKeys.hs
deleted file mode 100644
--- a/gen/Network/AWS/ResourceGroupsTagging/GetTagKeys.hs
+++ /dev/null
@@ -1,156 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.ResourceGroupsTagging.GetTagKeys
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Returns all tag keys in the specified region for the AWS account.
---
---
---
--- This operation returns paginated results.
-module Network.AWS.ResourceGroupsTagging.GetTagKeys
-    (
-    -- * Creating a Request
-      getTagKeys
-    , GetTagKeys
-    -- * Request Lenses
-    , gtkPaginationToken
-
-    -- * Destructuring the Response
-    , getTagKeysResponse
-    , GetTagKeysResponse
-    -- * Response Lenses
-    , gtkrsPaginationToken
-    , gtkrsTagKeys
-    , gtkrsResponseStatus
-    ) where
-
-import Network.AWS.Lens
-import Network.AWS.Pager
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.ResourceGroupsTagging.Types
-import Network.AWS.ResourceGroupsTagging.Types.Product
-import Network.AWS.Response
-
--- | /See:/ 'getTagKeys' smart constructor.
-newtype GetTagKeys = GetTagKeys'
-  { _gtkPaginationToken :: Maybe Text
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'GetTagKeys' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'gtkPaginationToken' - A string that indicates that additional data is available. Leave this value empty for your initial request. If the response includes a PaginationToken, use that string for this value to request an additional page of data.
-getTagKeys
-    :: GetTagKeys
-getTagKeys = GetTagKeys' {_gtkPaginationToken = Nothing}
-
-
--- | A string that indicates that additional data is available. Leave this value empty for your initial request. If the response includes a PaginationToken, use that string for this value to request an additional page of data.
-gtkPaginationToken :: Lens' GetTagKeys (Maybe Text)
-gtkPaginationToken = lens _gtkPaginationToken (\ s a -> s{_gtkPaginationToken = a})
-
-instance AWSPager GetTagKeys where
-        page rq rs
-          | stop (rs ^. gtkrsPaginationToken) = Nothing
-          | stop (rs ^. gtkrsTagKeys) = Nothing
-          | otherwise =
-            Just $ rq &
-              gtkPaginationToken .~ rs ^. gtkrsPaginationToken
-
-instance AWSRequest GetTagKeys where
-        type Rs GetTagKeys = GetTagKeysResponse
-        request = postJSON resourceGroupsTagging
-        response
-          = receiveJSON
-              (\ s h x ->
-                 GetTagKeysResponse' <$>
-                   (x .?> "PaginationToken") <*>
-                     (x .?> "TagKeys" .!@ mempty)
-                     <*> (pure (fromEnum s)))
-
-instance Hashable GetTagKeys where
-
-instance NFData GetTagKeys where
-
-instance ToHeaders GetTagKeys where
-        toHeaders
-          = const
-              (mconcat
-                 ["X-Amz-Target" =#
-                    ("ResourceGroupsTaggingAPI_20170126.GetTagKeys" ::
-                       ByteString),
-                  "Content-Type" =#
-                    ("application/x-amz-json-1.1" :: ByteString)])
-
-instance ToJSON GetTagKeys where
-        toJSON GetTagKeys'{..}
-          = object
-              (catMaybes
-                 [("PaginationToken" .=) <$> _gtkPaginationToken])
-
-instance ToPath GetTagKeys where
-        toPath = const "/"
-
-instance ToQuery GetTagKeys where
-        toQuery = const mempty
-
--- | /See:/ 'getTagKeysResponse' smart constructor.
-data GetTagKeysResponse = GetTagKeysResponse'
-  { _gtkrsPaginationToken :: !(Maybe Text)
-  , _gtkrsTagKeys         :: !(Maybe [Text])
-  , _gtkrsResponseStatus  :: !Int
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'GetTagKeysResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'gtkrsPaginationToken' - A string that indicates that the response contains more data than can be returned in a single response. To receive additional data, specify this string for the @PaginationToken@ value in a subsequent request.
---
--- * 'gtkrsTagKeys' - A list of all tag keys in the AWS account.
---
--- * 'gtkrsResponseStatus' - -- | The response status code.
-getTagKeysResponse
-    :: Int -- ^ 'gtkrsResponseStatus'
-    -> GetTagKeysResponse
-getTagKeysResponse pResponseStatus_ =
-  GetTagKeysResponse'
-    { _gtkrsPaginationToken = Nothing
-    , _gtkrsTagKeys = Nothing
-    , _gtkrsResponseStatus = pResponseStatus_
-    }
-
-
--- | A string that indicates that the response contains more data than can be returned in a single response. To receive additional data, specify this string for the @PaginationToken@ value in a subsequent request.
-gtkrsPaginationToken :: Lens' GetTagKeysResponse (Maybe Text)
-gtkrsPaginationToken = lens _gtkrsPaginationToken (\ s a -> s{_gtkrsPaginationToken = a})
-
--- | A list of all tag keys in the AWS account.
-gtkrsTagKeys :: Lens' GetTagKeysResponse [Text]
-gtkrsTagKeys = lens _gtkrsTagKeys (\ s a -> s{_gtkrsTagKeys = a}) . _Default . _Coerce
-
--- | -- | The response status code.
-gtkrsResponseStatus :: Lens' GetTagKeysResponse Int
-gtkrsResponseStatus = lens _gtkrsResponseStatus (\ s a -> s{_gtkrsResponseStatus = a})
-
-instance NFData GetTagKeysResponse where
diff --git a/gen/Network/AWS/ResourceGroupsTagging/GetTagValues.hs b/gen/Network/AWS/ResourceGroupsTagging/GetTagValues.hs
deleted file mode 100644
--- a/gen/Network/AWS/ResourceGroupsTagging/GetTagValues.hs
+++ /dev/null
@@ -1,167 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.ResourceGroupsTagging.GetTagValues
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Returns all tag values for the specified key in the specified region for the AWS account.
---
---
---
--- This operation returns paginated results.
-module Network.AWS.ResourceGroupsTagging.GetTagValues
-    (
-    -- * Creating a Request
-      getTagValues
-    , GetTagValues
-    -- * Request Lenses
-    , gtvPaginationToken
-    , gtvKey
-
-    -- * Destructuring the Response
-    , getTagValuesResponse
-    , GetTagValuesResponse
-    -- * Response Lenses
-    , gtvrsPaginationToken
-    , gtvrsTagValues
-    , gtvrsResponseStatus
-    ) where
-
-import Network.AWS.Lens
-import Network.AWS.Pager
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.ResourceGroupsTagging.Types
-import Network.AWS.ResourceGroupsTagging.Types.Product
-import Network.AWS.Response
-
--- | /See:/ 'getTagValues' smart constructor.
-data GetTagValues = GetTagValues'
-  { _gtvPaginationToken :: !(Maybe Text)
-  , _gtvKey             :: !Text
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'GetTagValues' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'gtvPaginationToken' - A string that indicates that additional data is available. Leave this value empty for your initial request. If the response includes a PaginationToken, use that string for this value to request an additional page of data.
---
--- * 'gtvKey' - The key for which you want to list all existing values in the specified region for the AWS account.
-getTagValues
-    :: Text -- ^ 'gtvKey'
-    -> GetTagValues
-getTagValues pKey_ =
-  GetTagValues' {_gtvPaginationToken = Nothing, _gtvKey = pKey_}
-
-
--- | A string that indicates that additional data is available. Leave this value empty for your initial request. If the response includes a PaginationToken, use that string for this value to request an additional page of data.
-gtvPaginationToken :: Lens' GetTagValues (Maybe Text)
-gtvPaginationToken = lens _gtvPaginationToken (\ s a -> s{_gtvPaginationToken = a})
-
--- | The key for which you want to list all existing values in the specified region for the AWS account.
-gtvKey :: Lens' GetTagValues Text
-gtvKey = lens _gtvKey (\ s a -> s{_gtvKey = a})
-
-instance AWSPager GetTagValues where
-        page rq rs
-          | stop (rs ^. gtvrsPaginationToken) = Nothing
-          | stop (rs ^. gtvrsTagValues) = Nothing
-          | otherwise =
-            Just $ rq &
-              gtvPaginationToken .~ rs ^. gtvrsPaginationToken
-
-instance AWSRequest GetTagValues where
-        type Rs GetTagValues = GetTagValuesResponse
-        request = postJSON resourceGroupsTagging
-        response
-          = receiveJSON
-              (\ s h x ->
-                 GetTagValuesResponse' <$>
-                   (x .?> "PaginationToken") <*>
-                     (x .?> "TagValues" .!@ mempty)
-                     <*> (pure (fromEnum s)))
-
-instance Hashable GetTagValues where
-
-instance NFData GetTagValues where
-
-instance ToHeaders GetTagValues where
-        toHeaders
-          = const
-              (mconcat
-                 ["X-Amz-Target" =#
-                    ("ResourceGroupsTaggingAPI_20170126.GetTagValues" ::
-                       ByteString),
-                  "Content-Type" =#
-                    ("application/x-amz-json-1.1" :: ByteString)])
-
-instance ToJSON GetTagValues where
-        toJSON GetTagValues'{..}
-          = object
-              (catMaybes
-                 [("PaginationToken" .=) <$> _gtvPaginationToken,
-                  Just ("Key" .= _gtvKey)])
-
-instance ToPath GetTagValues where
-        toPath = const "/"
-
-instance ToQuery GetTagValues where
-        toQuery = const mempty
-
--- | /See:/ 'getTagValuesResponse' smart constructor.
-data GetTagValuesResponse = GetTagValuesResponse'
-  { _gtvrsPaginationToken :: !(Maybe Text)
-  , _gtvrsTagValues       :: !(Maybe [Text])
-  , _gtvrsResponseStatus  :: !Int
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'GetTagValuesResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'gtvrsPaginationToken' - A string that indicates that the response contains more data than can be returned in a single response. To receive additional data, specify this string for the @PaginationToken@ value in a subsequent request.
---
--- * 'gtvrsTagValues' - A list of all tag values for the specified key in the AWS account.
---
--- * 'gtvrsResponseStatus' - -- | The response status code.
-getTagValuesResponse
-    :: Int -- ^ 'gtvrsResponseStatus'
-    -> GetTagValuesResponse
-getTagValuesResponse pResponseStatus_ =
-  GetTagValuesResponse'
-    { _gtvrsPaginationToken = Nothing
-    , _gtvrsTagValues = Nothing
-    , _gtvrsResponseStatus = pResponseStatus_
-    }
-
-
--- | A string that indicates that the response contains more data than can be returned in a single response. To receive additional data, specify this string for the @PaginationToken@ value in a subsequent request.
-gtvrsPaginationToken :: Lens' GetTagValuesResponse (Maybe Text)
-gtvrsPaginationToken = lens _gtvrsPaginationToken (\ s a -> s{_gtvrsPaginationToken = a})
-
--- | A list of all tag values for the specified key in the AWS account.
-gtvrsTagValues :: Lens' GetTagValuesResponse [Text]
-gtvrsTagValues = lens _gtvrsTagValues (\ s a -> s{_gtvrsTagValues = a}) . _Default . _Coerce
-
--- | -- | The response status code.
-gtvrsResponseStatus :: Lens' GetTagValuesResponse Int
-gtvrsResponseStatus = lens _gtvrsResponseStatus (\ s a -> s{_gtvrsResponseStatus = a})
-
-instance NFData GetTagValuesResponse where
diff --git a/gen/Network/AWS/ResourceGroupsTagging/TagResources.hs b/gen/Network/AWS/ResourceGroupsTagging/TagResources.hs
deleted file mode 100644
--- a/gen/Network/AWS/ResourceGroupsTagging/TagResources.hs
+++ /dev/null
@@ -1,155 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.ResourceGroupsTagging.TagResources
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Applies one or more tags to the specified resources. Note the following:
---
---
---     * Not all resources can have tags. For a list of resources that support tagging, see <http://docs.aws.amazon.com/awsconsolehelpdocs/latest/gsg/supported-resources.html Supported Resources> in the /AWS Resource Groups and Tag Editor User Guide/ .
---
---     * Each resource can have up to 50 tags. For other limits, see <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Using_Tags.html#tag-restrictions Tag Restrictions> in the /Amazon EC2 User Guide for Linux Instances/ .
---
---     * You can only tag resources that are located in the specified region for the AWS account.
---
---     * To add tags to a resource, you need the necessary permissions for the service that the resource belongs to as well as permissions for adding tags. For more information, see <http://docs.aws.amazon.com/awsconsolehelpdocs/latest/gsg/obtaining-permissions-for-tagging.html Obtaining Permissions for Tagging> in the /AWS Resource Groups and Tag Editor User Guide/ .
---
---
---
-module Network.AWS.ResourceGroupsTagging.TagResources
-    (
-    -- * Creating a Request
-      tagResources
-    , TagResources
-    -- * Request Lenses
-    , trResourceARNList
-    , trTags
-
-    -- * Destructuring the Response
-    , tagResourcesResponse
-    , TagResourcesResponse
-    -- * Response Lenses
-    , trrsFailedResourcesMap
-    , trrsResponseStatus
-    ) where
-
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.ResourceGroupsTagging.Types
-import Network.AWS.ResourceGroupsTagging.Types.Product
-import Network.AWS.Response
-
--- | /See:/ 'tagResources' smart constructor.
-data TagResources = TagResources'
-  { _trResourceARNList :: !(List1 Text)
-  , _trTags            :: !(Map Text Text)
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'TagResources' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'trResourceARNList' - A list of ARNs. An ARN (Amazon Resource Name) uniquely identifies a resource. You can specify a minimum of 1 and a maximum of 20 ARNs (resources) to tag. An ARN can be set to a maximum of 1600 characters. For more information, see <http://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs) and AWS Service Namespaces> in the /AWS General Reference/ .
---
--- * 'trTags' - The tags that you want to add to the specified resources. A tag consists of a key and a value that you define.
-tagResources
-    :: NonEmpty Text -- ^ 'trResourceARNList'
-    -> TagResources
-tagResources pResourceARNList_ =
-  TagResources'
-    {_trResourceARNList = _List1 # pResourceARNList_, _trTags = mempty}
-
-
--- | A list of ARNs. An ARN (Amazon Resource Name) uniquely identifies a resource. You can specify a minimum of 1 and a maximum of 20 ARNs (resources) to tag. An ARN can be set to a maximum of 1600 characters. For more information, see <http://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs) and AWS Service Namespaces> in the /AWS General Reference/ .
-trResourceARNList :: Lens' TagResources (NonEmpty Text)
-trResourceARNList = lens _trResourceARNList (\ s a -> s{_trResourceARNList = a}) . _List1
-
--- | The tags that you want to add to the specified resources. A tag consists of a key and a value that you define.
-trTags :: Lens' TagResources (HashMap Text Text)
-trTags = lens _trTags (\ s a -> s{_trTags = a}) . _Map
-
-instance AWSRequest TagResources where
-        type Rs TagResources = TagResourcesResponse
-        request = postJSON resourceGroupsTagging
-        response
-          = receiveJSON
-              (\ s h x ->
-                 TagResourcesResponse' <$>
-                   (x .?> "FailedResourcesMap" .!@ mempty) <*>
-                     (pure (fromEnum s)))
-
-instance Hashable TagResources where
-
-instance NFData TagResources where
-
-instance ToHeaders TagResources where
-        toHeaders
-          = const
-              (mconcat
-                 ["X-Amz-Target" =#
-                    ("ResourceGroupsTaggingAPI_20170126.TagResources" ::
-                       ByteString),
-                  "Content-Type" =#
-                    ("application/x-amz-json-1.1" :: ByteString)])
-
-instance ToJSON TagResources where
-        toJSON TagResources'{..}
-          = object
-              (catMaybes
-                 [Just ("ResourceARNList" .= _trResourceARNList),
-                  Just ("Tags" .= _trTags)])
-
-instance ToPath TagResources where
-        toPath = const "/"
-
-instance ToQuery TagResources where
-        toQuery = const mempty
-
--- | /See:/ 'tagResourcesResponse' smart constructor.
-data TagResourcesResponse = TagResourcesResponse'
-  { _trrsFailedResourcesMap :: !(Maybe (Map Text FailureInfo))
-  , _trrsResponseStatus     :: !Int
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'TagResourcesResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'trrsFailedResourcesMap' - Details of resources that could not be tagged. An error code, status code, and error message are returned for each failed item.
---
--- * 'trrsResponseStatus' - -- | The response status code.
-tagResourcesResponse
-    :: Int -- ^ 'trrsResponseStatus'
-    -> TagResourcesResponse
-tagResourcesResponse pResponseStatus_ =
-  TagResourcesResponse'
-    {_trrsFailedResourcesMap = Nothing, _trrsResponseStatus = pResponseStatus_}
-
-
--- | Details of resources that could not be tagged. An error code, status code, and error message are returned for each failed item.
-trrsFailedResourcesMap :: Lens' TagResourcesResponse (HashMap Text FailureInfo)
-trrsFailedResourcesMap = lens _trrsFailedResourcesMap (\ s a -> s{_trrsFailedResourcesMap = a}) . _Default . _Map
-
--- | -- | The response status code.
-trrsResponseStatus :: Lens' TagResourcesResponse Int
-trrsResponseStatus = lens _trrsResponseStatus (\ s a -> s{_trrsResponseStatus = a})
-
-instance NFData TagResourcesResponse where
diff --git a/gen/Network/AWS/ResourceGroupsTagging/Types.hs b/gen/Network/AWS/ResourceGroupsTagging/Types.hs
deleted file mode 100644
--- a/gen/Network/AWS/ResourceGroupsTagging/Types.hs
+++ /dev/null
@@ -1,128 +0,0 @@
-{-# LANGUAGE OverloadedStrings #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.ResourceGroupsTagging.Types
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
-module Network.AWS.ResourceGroupsTagging.Types
-    (
-    -- * Service Configuration
-      resourceGroupsTagging
-
-    -- * Errors
-    , _InvalidParameterException
-    , _ThrottledException
-    , _PaginationTokenExpiredException
-    , _InternalServiceException
-
-    -- * ResourceErrorCode
-    , ResourceErrorCode (..)
-
-    -- * FailureInfo
-    , FailureInfo
-    , failureInfo
-    , fiErrorCode
-    , fiErrorMessage
-    , fiStatusCode
-
-    -- * ResourceTagMapping
-    , ResourceTagMapping
-    , resourceTagMapping
-    , rtmResourceARN
-    , rtmTags
-
-    -- * Tag
-    , Tag
-    , tag
-    , tagKey
-    , tagValue
-
-    -- * TagFilter
-    , TagFilter
-    , tagFilter
-    , tfValues
-    , tfKey
-    ) where
-
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.ResourceGroupsTagging.Types.Product
-import Network.AWS.ResourceGroupsTagging.Types.Sum
-import Network.AWS.Sign.V4
-
--- | API version @2017-01-26@ of the Amazon Resource Groups Tagging API SDK configuration.
-resourceGroupsTagging :: Service
-resourceGroupsTagging =
-  Service
-    { _svcAbbrev = "ResourceGroupsTagging"
-    , _svcSigner = v4
-    , _svcPrefix = "tagging"
-    , _svcVersion = "2017-01-26"
-    , _svcEndpoint = defaultEndpoint resourceGroupsTagging
-    , _svcTimeout = Just 70
-    , _svcCheck = statusSuccess
-    , _svcError = parseJSONError "ResourceGroupsTagging"
-    , _svcRetry = retry
-    }
-  where
-    retry =
-      Exponential
-        { _retryBase = 5.0e-2
-        , _retryGrowth = 2
-        , _retryAttempts = 5
-        , _retryCheck = check
-        }
-    check e
-      | has (hasCode "ThrottledException" . hasStatus 400) e =
-        Just "throttled_exception"
-      | has (hasStatus 429) e = Just "too_many_requests"
-      | has (hasCode "ThrottlingException" . hasStatus 400) e =
-        Just "throttling_exception"
-      | has (hasCode "Throttling" . hasStatus 400) e = Just "throttling"
-      | has (hasStatus 504) e = Just "gateway_timeout"
-      | has (hasCode "RequestThrottledException" . hasStatus 400) e =
-        Just "request_throttled_exception"
-      | has (hasStatus 502) e = Just "bad_gateway"
-      | has (hasStatus 503) e = Just "service_unavailable"
-      | has (hasStatus 500) e = Just "general_server_error"
-      | has (hasStatus 509) e = Just "limit_exceeded"
-      | otherwise = Nothing
-
-
--- | A parameter is missing or a malformed string or invalid or out-of-range value was supplied for the request parameter.
---
---
-_InvalidParameterException :: AsError a => Getting (First ServiceError) a ServiceError
-_InvalidParameterException =
-  _MatchServiceError resourceGroupsTagging "InvalidParameterException"
-
-
--- | The request was denied to limit the frequency of submitted requests.
---
---
-_ThrottledException :: AsError a => Getting (First ServiceError) a ServiceError
-_ThrottledException =
-  _MatchServiceError resourceGroupsTagging "ThrottledException"
-
-
--- | A @PaginationToken@ is valid for a maximum of 15 minutes. Your request was denied because the specified @PaginationToken@ has expired.
---
---
-_PaginationTokenExpiredException :: AsError a => Getting (First ServiceError) a ServiceError
-_PaginationTokenExpiredException =
-  _MatchServiceError resourceGroupsTagging "PaginationTokenExpiredException"
-
-
--- | The request processing failed because of an unknown error, exception, or failure. You can retry the request.
---
---
-_InternalServiceException :: AsError a => Getting (First ServiceError) a ServiceError
-_InternalServiceException =
-  _MatchServiceError resourceGroupsTagging "InternalServiceException"
-
diff --git a/gen/Network/AWS/ResourceGroupsTagging/Types/Product.hs b/gen/Network/AWS/ResourceGroupsTagging/Types/Product.hs
deleted file mode 100644
--- a/gen/Network/AWS/ResourceGroupsTagging/Types/Product.hs
+++ /dev/null
@@ -1,200 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.ResourceGroupsTagging.Types.Product
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
-module Network.AWS.ResourceGroupsTagging.Types.Product where
-
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.ResourceGroupsTagging.Types.Sum
-
--- | Details of the common errors that all actions return.
---
---
---
--- /See:/ 'failureInfo' smart constructor.
-data FailureInfo = FailureInfo'
-  { _fiErrorCode    :: !(Maybe ResourceErrorCode)
-  , _fiErrorMessage :: !(Maybe Text)
-  , _fiStatusCode   :: !(Maybe Int)
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'FailureInfo' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'fiErrorCode' - The code of the common error. Valid values include @InternalServiceException@ , @InvalidParameterException@ , and any valid error code returned by the AWS service that hosts the resource that you want to tag.
---
--- * 'fiErrorMessage' - The message of the common error.
---
--- * 'fiStatusCode' - The HTTP status code of the common error.
-failureInfo
-    :: FailureInfo
-failureInfo =
-  FailureInfo'
-    {_fiErrorCode = Nothing, _fiErrorMessage = Nothing, _fiStatusCode = Nothing}
-
-
--- | The code of the common error. Valid values include @InternalServiceException@ , @InvalidParameterException@ , and any valid error code returned by the AWS service that hosts the resource that you want to tag.
-fiErrorCode :: Lens' FailureInfo (Maybe ResourceErrorCode)
-fiErrorCode = lens _fiErrorCode (\ s a -> s{_fiErrorCode = a})
-
--- | The message of the common error.
-fiErrorMessage :: Lens' FailureInfo (Maybe Text)
-fiErrorMessage = lens _fiErrorMessage (\ s a -> s{_fiErrorMessage = a})
-
--- | The HTTP status code of the common error.
-fiStatusCode :: Lens' FailureInfo (Maybe Int)
-fiStatusCode = lens _fiStatusCode (\ s a -> s{_fiStatusCode = a})
-
-instance FromJSON FailureInfo where
-        parseJSON
-          = withObject "FailureInfo"
-              (\ x ->
-                 FailureInfo' <$>
-                   (x .:? "ErrorCode") <*> (x .:? "ErrorMessage") <*>
-                     (x .:? "StatusCode"))
-
-instance Hashable FailureInfo where
-
-instance NFData FailureInfo where
-
--- | A list of resource ARNs and the tags (keys and values) that are associated with each.
---
---
---
--- /See:/ 'resourceTagMapping' smart constructor.
-data ResourceTagMapping = ResourceTagMapping'
-  { _rtmResourceARN :: !(Maybe Text)
-  , _rtmTags        :: !(Maybe [Tag])
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'ResourceTagMapping' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'rtmResourceARN' - An array of resource ARN(s).
---
--- * 'rtmTags' - The tags that have been applied to one or more AWS resources.
-resourceTagMapping
-    :: ResourceTagMapping
-resourceTagMapping =
-  ResourceTagMapping' {_rtmResourceARN = Nothing, _rtmTags = Nothing}
-
-
--- | An array of resource ARN(s).
-rtmResourceARN :: Lens' ResourceTagMapping (Maybe Text)
-rtmResourceARN = lens _rtmResourceARN (\ s a -> s{_rtmResourceARN = a})
-
--- | The tags that have been applied to one or more AWS resources.
-rtmTags :: Lens' ResourceTagMapping [Tag]
-rtmTags = lens _rtmTags (\ s a -> s{_rtmTags = a}) . _Default . _Coerce
-
-instance FromJSON ResourceTagMapping where
-        parseJSON
-          = withObject "ResourceTagMapping"
-              (\ x ->
-                 ResourceTagMapping' <$>
-                   (x .:? "ResourceARN") <*> (x .:? "Tags" .!= mempty))
-
-instance Hashable ResourceTagMapping where
-
-instance NFData ResourceTagMapping where
-
--- | The metadata that you apply to AWS resources to help you categorize and organize them. Each tag consists of a key and an optional value, both of which you define. For more information, see <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Using_Tags.html#tag-basics Tag Basics> in the /Amazon EC2 User Guide for Linux Instances/ .
---
---
---
--- /See:/ 'tag' smart constructor.
-data Tag = Tag'
-  { _tagKey   :: !Text
-  , _tagValue :: !Text
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'Tag' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'tagKey' - One part of a key-value pair that make up a tag. A key is a general label that acts like a category for more specific tag values.
---
--- * 'tagValue' - The optional part of a key-value pair that make up a tag. A value acts as a descriptor within a tag category (key).
-tag
-    :: Text -- ^ 'tagKey'
-    -> Text -- ^ 'tagValue'
-    -> Tag
-tag pKey_ pValue_ = Tag' {_tagKey = pKey_, _tagValue = pValue_}
-
-
--- | One part of a key-value pair that make up a tag. A key is a general label that acts like a category for more specific tag values.
-tagKey :: Lens' Tag Text
-tagKey = lens _tagKey (\ s a -> s{_tagKey = a})
-
--- | The optional part of a key-value pair that make up a tag. A value acts as a descriptor within a tag category (key).
-tagValue :: Lens' Tag Text
-tagValue = lens _tagValue (\ s a -> s{_tagValue = a})
-
-instance FromJSON Tag where
-        parseJSON
-          = withObject "Tag"
-              (\ x -> Tag' <$> (x .: "Key") <*> (x .: "Value"))
-
-instance Hashable Tag where
-
-instance NFData Tag where
-
--- | A list of tags (keys and values) that are used to specify the associated resources.
---
---
---
--- /See:/ 'tagFilter' smart constructor.
-data TagFilter = TagFilter'
-  { _tfValues :: !(Maybe [Text])
-  , _tfKey    :: !(Maybe Text)
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'TagFilter' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'tfValues' - The optional part of a key-value pair that make up a tag. A value acts as a descriptor within a tag category (key).
---
--- * 'tfKey' - One part of a key-value pair that make up a tag. A key is a general label that acts like a category for more specific tag values.
-tagFilter
-    :: TagFilter
-tagFilter = TagFilter' {_tfValues = Nothing, _tfKey = Nothing}
-
-
--- | The optional part of a key-value pair that make up a tag. A value acts as a descriptor within a tag category (key).
-tfValues :: Lens' TagFilter [Text]
-tfValues = lens _tfValues (\ s a -> s{_tfValues = a}) . _Default . _Coerce
-
--- | One part of a key-value pair that make up a tag. A key is a general label that acts like a category for more specific tag values.
-tfKey :: Lens' TagFilter (Maybe Text)
-tfKey = lens _tfKey (\ s a -> s{_tfKey = a})
-
-instance Hashable TagFilter where
-
-instance NFData TagFilter where
-
-instance ToJSON TagFilter where
-        toJSON TagFilter'{..}
-          = object
-              (catMaybes
-                 [("Values" .=) <$> _tfValues, ("Key" .=) <$> _tfKey])
diff --git a/gen/Network/AWS/ResourceGroupsTagging/Types/Sum.hs b/gen/Network/AWS/ResourceGroupsTagging/Types/Sum.hs
deleted file mode 100644
--- a/gen/Network/AWS/ResourceGroupsTagging/Types/Sum.hs
+++ /dev/null
@@ -1,47 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE LambdaCase         #-}
-{-# LANGUAGE OverloadedStrings  #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.ResourceGroupsTagging.Types.Sum
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
-module Network.AWS.ResourceGroupsTagging.Types.Sum where
-
-import Network.AWS.Prelude
-
-data ResourceErrorCode
-  = InternalServiceException
-  | InvalidParameterException
-  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
-
-
-instance FromText ResourceErrorCode where
-    parser = takeLowerText >>= \case
-        "internalserviceexception" -> pure InternalServiceException
-        "invalidparameterexception" -> pure InvalidParameterException
-        e -> fromTextError $ "Failure parsing ResourceErrorCode from value: '" <> e
-           <> "'. Accepted values: internalserviceexception, invalidparameterexception"
-
-instance ToText ResourceErrorCode where
-    toText = \case
-        InternalServiceException -> "InternalServiceException"
-        InvalidParameterException -> "InvalidParameterException"
-
-instance Hashable     ResourceErrorCode
-instance NFData       ResourceErrorCode
-instance ToByteString ResourceErrorCode
-instance ToQuery      ResourceErrorCode
-instance ToHeader     ResourceErrorCode
-
-instance FromJSON ResourceErrorCode where
-    parseJSON = parseJSONText "ResourceErrorCode"
diff --git a/gen/Network/AWS/ResourceGroupsTagging/UntagResources.hs b/gen/Network/AWS/ResourceGroupsTagging/UntagResources.hs
deleted file mode 100644
--- a/gen/Network/AWS/ResourceGroupsTagging/UntagResources.hs
+++ /dev/null
@@ -1,154 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.ResourceGroupsTagging.UntagResources
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Removes the specified tags from the specified resources. When you specify a tag key, the action removes both that key and its associated value. The operation succeeds even if you attempt to remove tags from a resource that were already removed. Note the following:
---
---
---     * To remove tags from a resource, you need the necessary permissions for the service that the resource belongs to as well as permissions for removing tags. For more information, see <http://docs.aws.amazon.com/awsconsolehelpdocs/latest/gsg/obtaining-permissions-for-tagging.html Obtaining Permissions for Tagging> in the /AWS Resource Groups and Tag Editor User Guide/ .
---
---     * You can only tag resources that are located in the specified region for the AWS account.
---
---
---
-module Network.AWS.ResourceGroupsTagging.UntagResources
-    (
-    -- * Creating a Request
-      untagResources
-    , UntagResources
-    -- * Request Lenses
-    , urResourceARNList
-    , urTagKeys
-
-    -- * Destructuring the Response
-    , untagResourcesResponse
-    , UntagResourcesResponse
-    -- * Response Lenses
-    , urrsFailedResourcesMap
-    , urrsResponseStatus
-    ) where
-
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.ResourceGroupsTagging.Types
-import Network.AWS.ResourceGroupsTagging.Types.Product
-import Network.AWS.Response
-
--- | /See:/ 'untagResources' smart constructor.
-data UntagResources = UntagResources'
-  { _urResourceARNList :: !(List1 Text)
-  , _urTagKeys         :: !(List1 Text)
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'UntagResources' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'urResourceARNList' - A list of ARNs. An ARN (Amazon Resource Name) uniquely identifies a resource. You can specify a minimum of 1 and a maximum of 20 ARNs (resources) to untag. An ARN can be set to a maximum of 1600 characters. For more information, see <http://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs) and AWS Service Namespaces> in the /AWS General Reference/ .
---
--- * 'urTagKeys' - A list of the tag keys that you want to remove from the specified resources.
-untagResources
-    :: NonEmpty Text -- ^ 'urResourceARNList'
-    -> NonEmpty Text -- ^ 'urTagKeys'
-    -> UntagResources
-untagResources pResourceARNList_ pTagKeys_ =
-  UntagResources'
-    { _urResourceARNList = _List1 # pResourceARNList_
-    , _urTagKeys = _List1 # pTagKeys_
-    }
-
-
--- | A list of ARNs. An ARN (Amazon Resource Name) uniquely identifies a resource. You can specify a minimum of 1 and a maximum of 20 ARNs (resources) to untag. An ARN can be set to a maximum of 1600 characters. For more information, see <http://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs) and AWS Service Namespaces> in the /AWS General Reference/ .
-urResourceARNList :: Lens' UntagResources (NonEmpty Text)
-urResourceARNList = lens _urResourceARNList (\ s a -> s{_urResourceARNList = a}) . _List1
-
--- | A list of the tag keys that you want to remove from the specified resources.
-urTagKeys :: Lens' UntagResources (NonEmpty Text)
-urTagKeys = lens _urTagKeys (\ s a -> s{_urTagKeys = a}) . _List1
-
-instance AWSRequest UntagResources where
-        type Rs UntagResources = UntagResourcesResponse
-        request = postJSON resourceGroupsTagging
-        response
-          = receiveJSON
-              (\ s h x ->
-                 UntagResourcesResponse' <$>
-                   (x .?> "FailedResourcesMap" .!@ mempty) <*>
-                     (pure (fromEnum s)))
-
-instance Hashable UntagResources where
-
-instance NFData UntagResources where
-
-instance ToHeaders UntagResources where
-        toHeaders
-          = const
-              (mconcat
-                 ["X-Amz-Target" =#
-                    ("ResourceGroupsTaggingAPI_20170126.UntagResources"
-                       :: ByteString),
-                  "Content-Type" =#
-                    ("application/x-amz-json-1.1" :: ByteString)])
-
-instance ToJSON UntagResources where
-        toJSON UntagResources'{..}
-          = object
-              (catMaybes
-                 [Just ("ResourceARNList" .= _urResourceARNList),
-                  Just ("TagKeys" .= _urTagKeys)])
-
-instance ToPath UntagResources where
-        toPath = const "/"
-
-instance ToQuery UntagResources where
-        toQuery = const mempty
-
--- | /See:/ 'untagResourcesResponse' smart constructor.
-data UntagResourcesResponse = UntagResourcesResponse'
-  { _urrsFailedResourcesMap :: !(Maybe (Map Text FailureInfo))
-  , _urrsResponseStatus     :: !Int
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'UntagResourcesResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'urrsFailedResourcesMap' - Details of resources that could not be untagged. An error code, status code, and error message are returned for each failed item.
---
--- * 'urrsResponseStatus' - -- | The response status code.
-untagResourcesResponse
-    :: Int -- ^ 'urrsResponseStatus'
-    -> UntagResourcesResponse
-untagResourcesResponse pResponseStatus_ =
-  UntagResourcesResponse'
-    {_urrsFailedResourcesMap = Nothing, _urrsResponseStatus = pResponseStatus_}
-
-
--- | Details of resources that could not be untagged. An error code, status code, and error message are returned for each failed item.
-urrsFailedResourcesMap :: Lens' UntagResourcesResponse (HashMap Text FailureInfo)
-urrsFailedResourcesMap = lens _urrsFailedResourcesMap (\ s a -> s{_urrsFailedResourcesMap = a}) . _Default . _Map
-
--- | -- | The response status code.
-urrsResponseStatus :: Lens' UntagResourcesResponse Int
-urrsResponseStatus = lens _urrsResponseStatus (\ s a -> s{_urrsResponseStatus = a})
-
-instance NFData UntagResourcesResponse where
diff --git a/gen/Network/AWS/ResourceGroupsTagging/Waiters.hs b/gen/Network/AWS/ResourceGroupsTagging/Waiters.hs
deleted file mode 100644
--- a/gen/Network/AWS/ResourceGroupsTagging/Waiters.hs
+++ /dev/null
@@ -1,21 +0,0 @@
-{-# LANGUAGE OverloadedStrings #-}
-{-# LANGUAGE TypeFamilies      #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.ResourceGroupsTagging.Waiters
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
-module Network.AWS.ResourceGroupsTagging.Waiters where
-
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.ResourceGroupsTagging.Types
-import Network.AWS.Waiter
diff --git a/test/Main.hs b/test/Main.hs
--- a/test/Main.hs
+++ b/test/Main.hs
@@ -2,20 +2,22 @@
 
 -- |
 -- Module      : Main
--- Copyright   : (c) 2013-2018 Brendan Hay
+-- Copyright   : (c) 2013-2023 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
+-- Maintainer  : Brendan Hay
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
---
 module Main (main) where
 
+import Test.Amazonka.ResourceGroupsTagging
+import Test.Amazonka.ResourceGroupsTagging.Internal
 import Test.Tasty
-import Test.AWS.ResourceGroupsTagging
-import Test.AWS.ResourceGroupsTagging.Internal
 
 main :: IO ()
-main = defaultMain $ testGroup "ResourceGroupsTagging"
-    [ testGroup "tests"    tests
-    , testGroup "fixtures" fixtures
-    ]
+main =
+  defaultMain $
+    testGroup
+      "ResourceGroupsTagging"
+      [ testGroup "tests" tests,
+        testGroup "fixtures" fixtures
+      ]
diff --git a/test/Test/AWS/Gen/ResourceGroupsTagging.hs b/test/Test/AWS/Gen/ResourceGroupsTagging.hs
deleted file mode 100644
--- a/test/Test/AWS/Gen/ResourceGroupsTagging.hs
+++ /dev/null
@@ -1,129 +0,0 @@
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-orphans        #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Test.AWS.Gen.ResourceGroupsTagging
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
-module Test.AWS.Gen.ResourceGroupsTagging where
-
-import Data.Proxy
-import Network.AWS.ResourceGroupsTagging
-import Test.AWS.Fixture
-import Test.AWS.Prelude
-import Test.AWS.ResourceGroupsTagging.Internal
-import Test.Tasty
-
--- Auto-generated: the actual test selection needs to be manually placed into
--- the top-level so that real test data can be incrementally added.
---
--- This commented snippet is what the entire set should look like:
-
--- fixtures :: TestTree
--- fixtures =
---     [ testGroup "request"
---         [ requestGetTagKeys $
---             getTagKeys
---
---         , requestTagResources $
---             tagResources
---
---         , requestGetTagValues $
---             getTagValues
---
---         , requestGetResources $
---             getResources
---
---         , requestUntagResources $
---             untagResources
---
---           ]
-
---     , testGroup "response"
---         [ responseGetTagKeys $
---             getTagKeysResponse
---
---         , responseTagResources $
---             tagResourcesResponse
---
---         , responseGetTagValues $
---             getTagValuesResponse
---
---         , responseGetResources $
---             getResourcesResponse
---
---         , responseUntagResources $
---             untagResourcesResponse
---
---           ]
---     ]
-
--- Requests
-
-requestGetTagKeys :: GetTagKeys -> TestTree
-requestGetTagKeys = req
-    "GetTagKeys"
-    "fixture/GetTagKeys.yaml"
-
-requestTagResources :: TagResources -> TestTree
-requestTagResources = req
-    "TagResources"
-    "fixture/TagResources.yaml"
-
-requestGetTagValues :: GetTagValues -> TestTree
-requestGetTagValues = req
-    "GetTagValues"
-    "fixture/GetTagValues.yaml"
-
-requestGetResources :: GetResources -> TestTree
-requestGetResources = req
-    "GetResources"
-    "fixture/GetResources.yaml"
-
-requestUntagResources :: UntagResources -> TestTree
-requestUntagResources = req
-    "UntagResources"
-    "fixture/UntagResources.yaml"
-
--- Responses
-
-responseGetTagKeys :: GetTagKeysResponse -> TestTree
-responseGetTagKeys = res
-    "GetTagKeysResponse"
-    "fixture/GetTagKeysResponse.proto"
-    resourceGroupsTagging
-    (Proxy :: Proxy GetTagKeys)
-
-responseTagResources :: TagResourcesResponse -> TestTree
-responseTagResources = res
-    "TagResourcesResponse"
-    "fixture/TagResourcesResponse.proto"
-    resourceGroupsTagging
-    (Proxy :: Proxy TagResources)
-
-responseGetTagValues :: GetTagValuesResponse -> TestTree
-responseGetTagValues = res
-    "GetTagValuesResponse"
-    "fixture/GetTagValuesResponse.proto"
-    resourceGroupsTagging
-    (Proxy :: Proxy GetTagValues)
-
-responseGetResources :: GetResourcesResponse -> TestTree
-responseGetResources = res
-    "GetResourcesResponse"
-    "fixture/GetResourcesResponse.proto"
-    resourceGroupsTagging
-    (Proxy :: Proxy GetResources)
-
-responseUntagResources :: UntagResourcesResponse -> TestTree
-responseUntagResources = res
-    "UntagResourcesResponse"
-    "fixture/UntagResourcesResponse.proto"
-    resourceGroupsTagging
-    (Proxy :: Proxy UntagResources)
diff --git a/test/Test/AWS/ResourceGroupsTagging.hs b/test/Test/AWS/ResourceGroupsTagging.hs
deleted file mode 100644
--- a/test/Test/AWS/ResourceGroupsTagging.hs
+++ /dev/null
@@ -1,20 +0,0 @@
--- |
--- Module      : Test.AWS.ResourceGroupsTagging
--- Copyright   : (c) 2013-2018 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 Test.AWS.ResourceGroupsTagging
-    ( tests
-    , fixtures
-    ) where
-
-import Test.Tasty (TestTree)
-
-tests :: [TestTree]
-tests = []
-
-fixtures :: [TestTree]
-fixtures = []
diff --git a/test/Test/AWS/ResourceGroupsTagging/Internal.hs b/test/Test/AWS/ResourceGroupsTagging/Internal.hs
deleted file mode 100644
--- a/test/Test/AWS/ResourceGroupsTagging/Internal.hs
+++ /dev/null
@@ -1,9 +0,0 @@
--- |
--- Module      : Test.AWS.ResourceGroupsTagging.Internal
--- Copyright   : (c) 2013-2018 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 Test.AWS.ResourceGroupsTagging.Internal where
diff --git a/test/Test/Amazonka/Gen/ResourceGroupsTagging.hs b/test/Test/Amazonka/Gen/ResourceGroupsTagging.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/Gen/ResourceGroupsTagging.hs
@@ -0,0 +1,198 @@
+{-# OPTIONS_GHC -fno-warn-orphans #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Test.Amazonka.Gen.ResourceGroupsTagging
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Test.Amazonka.Gen.ResourceGroupsTagging where
+
+import Amazonka.ResourceGroupsTagging
+import qualified Data.Proxy as Proxy
+import Test.Amazonka.Fixture
+import Test.Amazonka.Prelude
+import Test.Amazonka.ResourceGroupsTagging.Internal
+import Test.Tasty
+
+-- Auto-generated: the actual test selection needs to be manually placed into
+-- the top-level so that real test data can be incrementally added.
+--
+-- This commented snippet is what the entire set should look like:
+
+-- fixtures :: TestTree
+-- fixtures =
+--     [ testGroup "request"
+--         [ requestDescribeReportCreation $
+--             newDescribeReportCreation
+--
+--         , requestGetComplianceSummary $
+--             newGetComplianceSummary
+--
+--         , requestGetResources $
+--             newGetResources
+--
+--         , requestGetTagKeys $
+--             newGetTagKeys
+--
+--         , requestGetTagValues $
+--             newGetTagValues
+--
+--         , requestStartReportCreation $
+--             newStartReportCreation
+--
+--         , requestTagResources $
+--             newTagResources
+--
+--         , requestUntagResources $
+--             newUntagResources
+--
+--           ]
+
+--     , testGroup "response"
+--         [ responseDescribeReportCreation $
+--             newDescribeReportCreationResponse
+--
+--         , responseGetComplianceSummary $
+--             newGetComplianceSummaryResponse
+--
+--         , responseGetResources $
+--             newGetResourcesResponse
+--
+--         , responseGetTagKeys $
+--             newGetTagKeysResponse
+--
+--         , responseGetTagValues $
+--             newGetTagValuesResponse
+--
+--         , responseStartReportCreation $
+--             newStartReportCreationResponse
+--
+--         , responseTagResources $
+--             newTagResourcesResponse
+--
+--         , responseUntagResources $
+--             newUntagResourcesResponse
+--
+--           ]
+--     ]
+
+-- Requests
+
+requestDescribeReportCreation :: DescribeReportCreation -> TestTree
+requestDescribeReportCreation =
+  req
+    "DescribeReportCreation"
+    "fixture/DescribeReportCreation.yaml"
+
+requestGetComplianceSummary :: GetComplianceSummary -> TestTree
+requestGetComplianceSummary =
+  req
+    "GetComplianceSummary"
+    "fixture/GetComplianceSummary.yaml"
+
+requestGetResources :: GetResources -> TestTree
+requestGetResources =
+  req
+    "GetResources"
+    "fixture/GetResources.yaml"
+
+requestGetTagKeys :: GetTagKeys -> TestTree
+requestGetTagKeys =
+  req
+    "GetTagKeys"
+    "fixture/GetTagKeys.yaml"
+
+requestGetTagValues :: GetTagValues -> TestTree
+requestGetTagValues =
+  req
+    "GetTagValues"
+    "fixture/GetTagValues.yaml"
+
+requestStartReportCreation :: StartReportCreation -> TestTree
+requestStartReportCreation =
+  req
+    "StartReportCreation"
+    "fixture/StartReportCreation.yaml"
+
+requestTagResources :: TagResources -> TestTree
+requestTagResources =
+  req
+    "TagResources"
+    "fixture/TagResources.yaml"
+
+requestUntagResources :: UntagResources -> TestTree
+requestUntagResources =
+  req
+    "UntagResources"
+    "fixture/UntagResources.yaml"
+
+-- Responses
+
+responseDescribeReportCreation :: DescribeReportCreationResponse -> TestTree
+responseDescribeReportCreation =
+  res
+    "DescribeReportCreationResponse"
+    "fixture/DescribeReportCreationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeReportCreation)
+
+responseGetComplianceSummary :: GetComplianceSummaryResponse -> TestTree
+responseGetComplianceSummary =
+  res
+    "GetComplianceSummaryResponse"
+    "fixture/GetComplianceSummaryResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetComplianceSummary)
+
+responseGetResources :: GetResourcesResponse -> TestTree
+responseGetResources =
+  res
+    "GetResourcesResponse"
+    "fixture/GetResourcesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetResources)
+
+responseGetTagKeys :: GetTagKeysResponse -> TestTree
+responseGetTagKeys =
+  res
+    "GetTagKeysResponse"
+    "fixture/GetTagKeysResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetTagKeys)
+
+responseGetTagValues :: GetTagValuesResponse -> TestTree
+responseGetTagValues =
+  res
+    "GetTagValuesResponse"
+    "fixture/GetTagValuesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetTagValues)
+
+responseStartReportCreation :: StartReportCreationResponse -> TestTree
+responseStartReportCreation =
+  res
+    "StartReportCreationResponse"
+    "fixture/StartReportCreationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy StartReportCreation)
+
+responseTagResources :: TagResourcesResponse -> TestTree
+responseTagResources =
+  res
+    "TagResourcesResponse"
+    "fixture/TagResourcesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy TagResources)
+
+responseUntagResources :: UntagResourcesResponse -> TestTree
+responseUntagResources =
+  res
+    "UntagResourcesResponse"
+    "fixture/UntagResourcesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UntagResources)
diff --git a/test/Test/Amazonka/ResourceGroupsTagging.hs b/test/Test/Amazonka/ResourceGroupsTagging.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/ResourceGroupsTagging.hs
@@ -0,0 +1,20 @@
+-- |
+-- Module      : Test.Amazonka.ResourceGroupsTagging
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Test.Amazonka.ResourceGroupsTagging
+  ( tests,
+    fixtures,
+  )
+where
+
+import Test.Tasty (TestTree)
+
+tests :: [TestTree]
+tests = []
+
+fixtures :: [TestTree]
+fixtures = []
diff --git a/test/Test/Amazonka/ResourceGroupsTagging/Internal.hs b/test/Test/Amazonka/ResourceGroupsTagging/Internal.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/ResourceGroupsTagging/Internal.hs
@@ -0,0 +1,8 @@
+-- |
+-- Module      : Test.Amazonka.ResourceGroupsTagging.Internal
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Test.Amazonka.ResourceGroupsTagging.Internal where
