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 @2016-01-14@ 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.MarketplaceMetering](http://hackage.haskell.org/package/amazonka-marketplace-metering/docs/Network-AWS-MarketplaceMetering.html)
+See [Amazonka.MarketplaceMetering](http://hackage.haskell.org/package/amazonka-marketplace-metering/docs/Amazonka-MarketplaceMetering.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-marketplace-metering.cabal b/amazonka-marketplace-metering.cabal
--- a/amazonka-marketplace-metering.cabal
+++ b/amazonka-marketplace-metering.cabal
@@ -1,88 +1,92 @@
-name:                  amazonka-marketplace-metering
-version:               1.6.1
-synopsis:              Amazon Marketplace Metering 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-marketplace-metering
+version:            2.0
+synopsis:           Amazon Marketplace Metering 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.MarketplaceMetering" or <https://aws.amazon.com/documentation/ the AWS documentation>
-    to get started.
+  Derived from API version @2016-01-14@ 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.MarketplaceMetering.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.MarketplaceMetering" 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-marketplace-metering
+  type:     git
+  location: git://github.com/brendanhay/amazonka.git
+  subdir:   amazonka-marketplace-metering
 
 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.MarketplaceMetering
-        , Network.AWS.MarketplaceMetering.BatchMeterUsage
-        , Network.AWS.MarketplaceMetering.MeterUsage
-        , Network.AWS.MarketplaceMetering.ResolveCustomer
-        , Network.AWS.MarketplaceMetering.Types
-        , Network.AWS.MarketplaceMetering.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.MarketplaceMetering.Types.Product
-        , Network.AWS.MarketplaceMetering.Types.Sum
+  exposed-modules:
+    Amazonka.MarketplaceMetering
+    Amazonka.MarketplaceMetering.BatchMeterUsage
+    Amazonka.MarketplaceMetering.Lens
+    Amazonka.MarketplaceMetering.MeterUsage
+    Amazonka.MarketplaceMetering.RegisterUsage
+    Amazonka.MarketplaceMetering.ResolveCustomer
+    Amazonka.MarketplaceMetering.Types
+    Amazonka.MarketplaceMetering.Types.Tag
+    Amazonka.MarketplaceMetering.Types.UsageAllocation
+    Amazonka.MarketplaceMetering.Types.UsageRecord
+    Amazonka.MarketplaceMetering.Types.UsageRecordResult
+    Amazonka.MarketplaceMetering.Types.UsageRecordResultStatus
+    Amazonka.MarketplaceMetering.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-marketplace-metering-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.MarketplaceMetering
-        , Test.AWS.Gen.MarketplaceMetering
-        , Test.AWS.MarketplaceMetering.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.MarketplaceMetering
+    Test.Amazonka.MarketplaceMetering
+    Test.Amazonka.MarketplaceMetering.Internal
 
-    build-depends:
-          amazonka-core == 1.6.1.*
-        , amazonka-test == 1.6.1.*
-        , amazonka-marketplace-metering
-        , base
-        , bytestring
-        , tasty
-        , tasty-hunit
-        , text
-        , time
-        , unordered-containers
+  build-depends:
+    , amazonka-core                  >=2.0 && <2.1
+    , amazonka-marketplace-metering
+    , amazonka-test                  >=2.0 && <2.1
+    , base
+    , bytestring
+    , case-insensitive
+    , tasty
+    , tasty-hunit
+    , text
+    , time
+    , unordered-containers
diff --git a/fixture/BatchMeterUsage.yaml b/fixture/BatchMeterUsage.yaml
--- a/fixture/BatchMeterUsage.yaml
+++ b/fixture/BatchMeterUsage.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/metering.marketplace/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  metering.marketplace.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/MeterUsage.yaml b/fixture/MeterUsage.yaml
--- a/fixture/MeterUsage.yaml
+++ b/fixture/MeterUsage.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/metering.marketplace/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  metering.marketplace.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/RegisterUsage.yaml b/fixture/RegisterUsage.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/RegisterUsage.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/metering.marketplace/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  metering.marketplace.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/RegisterUsageResponse.proto b/fixture/RegisterUsageResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/RegisterUsageResponse.proto
diff --git a/fixture/ResolveCustomer.yaml b/fixture/ResolveCustomer.yaml
--- a/fixture/ResolveCustomer.yaml
+++ b/fixture/ResolveCustomer.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/metering.marketplace/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  metering.marketplace.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/gen/Amazonka/MarketplaceMetering.hs b/gen/Amazonka/MarketplaceMetering.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MarketplaceMetering.hs
@@ -0,0 +1,206 @@
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- |
+-- Module      : Amazonka.MarketplaceMetering
+-- 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 @2016-01-14@ of the AWS service descriptions, licensed under Apache 2.0.
+--
+-- AWS Marketplace Metering Service
+--
+-- This reference provides descriptions of the low-level AWS Marketplace
+-- Metering Service API.
+--
+-- AWS Marketplace sellers can use this API to submit usage data for custom
+-- usage dimensions.
+--
+-- For information on the permissions you need to use this API, see
+-- <https://docs.aws.amazon.com/marketplace/latest/userguide/iam-user-policy-for-aws-marketplace-actions.html AWS Marketplace metering and entitlement API permissions>
+-- in the /AWS Marketplace Seller Guide./
+--
+-- __Submitting Metering Records__
+--
+-- -   /MeterUsage/ - Submits the metering record for an AWS Marketplace
+--     product. @MeterUsage@ is called from an EC2 instance or a container
+--     running on EKS or ECS.
+--
+-- -   /BatchMeterUsage/ - Submits the metering record for a set of
+--     customers. @BatchMeterUsage@ is called from a software-as-a-service
+--     (SaaS) application.
+--
+-- __Accepting New Customers__
+--
+-- -   /ResolveCustomer/ - Called by a SaaS application during the
+--     registration process. When a buyer visits your website during the
+--     registration process, the buyer submits a Registration Token through
+--     the browser. The Registration Token is resolved through this API to
+--     obtain a @CustomerIdentifier@ along with the @CustomerAWSAccountId@
+--     and @ProductCode@.
+--
+-- __Entitlement and Metering for Paid Container Products__
+--
+-- -   Paid container software products sold through AWS Marketplace must
+--     integrate with the AWS Marketplace Metering Service and call the
+--     @RegisterUsage@ operation for software entitlement and metering.
+--     Free and BYOL products for Amazon ECS or Amazon EKS aren\'t required
+--     to call @RegisterUsage@, but you can do so if you want to receive
+--     usage data in your seller reports. For more information on using the
+--     @RegisterUsage@ operation, see
+--     <https://docs.aws.amazon.com/marketplace/latest/userguide/container-based-products.html Container-Based Products>.
+--
+-- @BatchMeterUsage@ API calls are captured by AWS CloudTrail. You can use
+-- Cloudtrail to verify that the SaaS metering records that you sent are
+-- accurate by searching for records with the @eventName@ of
+-- @BatchMeterUsage@. You can also use CloudTrail to audit records over
+-- time. For more information, see the
+-- /<http://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-concepts.html AWS CloudTrail User Guide>./
+module Amazonka.MarketplaceMetering
+  ( -- * Service Configuration
+    defaultService,
+
+    -- * Errors
+    -- $errors
+
+    -- ** CustomerNotEntitledException
+    _CustomerNotEntitledException,
+
+    -- ** DisabledApiException
+    _DisabledApiException,
+
+    -- ** DuplicateRequestException
+    _DuplicateRequestException,
+
+    -- ** ExpiredTokenException
+    _ExpiredTokenException,
+
+    -- ** InternalServiceErrorException
+    _InternalServiceErrorException,
+
+    -- ** InvalidCustomerIdentifierException
+    _InvalidCustomerIdentifierException,
+
+    -- ** InvalidEndpointRegionException
+    _InvalidEndpointRegionException,
+
+    -- ** InvalidProductCodeException
+    _InvalidProductCodeException,
+
+    -- ** InvalidPublicKeyVersionException
+    _InvalidPublicKeyVersionException,
+
+    -- ** InvalidRegionException
+    _InvalidRegionException,
+
+    -- ** InvalidTagException
+    _InvalidTagException,
+
+    -- ** InvalidTokenException
+    _InvalidTokenException,
+
+    -- ** InvalidUsageAllocationsException
+    _InvalidUsageAllocationsException,
+
+    -- ** InvalidUsageDimensionException
+    _InvalidUsageDimensionException,
+
+    -- ** PlatformNotSupportedException
+    _PlatformNotSupportedException,
+
+    -- ** ThrottlingException
+    _ThrottlingException,
+
+    -- ** TimestampOutOfBoundsException
+    _TimestampOutOfBoundsException,
+
+    -- * Waiters
+    -- $waiters
+
+    -- * Operations
+    -- $operations
+
+    -- ** BatchMeterUsage
+    BatchMeterUsage (BatchMeterUsage'),
+    newBatchMeterUsage,
+    BatchMeterUsageResponse (BatchMeterUsageResponse'),
+    newBatchMeterUsageResponse,
+
+    -- ** MeterUsage
+    MeterUsage (MeterUsage'),
+    newMeterUsage,
+    MeterUsageResponse (MeterUsageResponse'),
+    newMeterUsageResponse,
+
+    -- ** RegisterUsage
+    RegisterUsage (RegisterUsage'),
+    newRegisterUsage,
+    RegisterUsageResponse (RegisterUsageResponse'),
+    newRegisterUsageResponse,
+
+    -- ** ResolveCustomer
+    ResolveCustomer (ResolveCustomer'),
+    newResolveCustomer,
+    ResolveCustomerResponse (ResolveCustomerResponse'),
+    newResolveCustomerResponse,
+
+    -- * Types
+
+    -- ** UsageRecordResultStatus
+    UsageRecordResultStatus (..),
+
+    -- ** Tag
+    Tag (Tag'),
+    newTag,
+
+    -- ** UsageAllocation
+    UsageAllocation (UsageAllocation'),
+    newUsageAllocation,
+
+    -- ** UsageRecord
+    UsageRecord (UsageRecord'),
+    newUsageRecord,
+
+    -- ** UsageRecordResult
+    UsageRecordResult (UsageRecordResult'),
+    newUsageRecordResult,
+  )
+where
+
+import Amazonka.MarketplaceMetering.BatchMeterUsage
+import Amazonka.MarketplaceMetering.Lens
+import Amazonka.MarketplaceMetering.MeterUsage
+import Amazonka.MarketplaceMetering.RegisterUsage
+import Amazonka.MarketplaceMetering.ResolveCustomer
+import Amazonka.MarketplaceMetering.Types
+import Amazonka.MarketplaceMetering.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 'MarketplaceMetering'.
+
+-- $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/MarketplaceMetering/BatchMeterUsage.hs b/gen/Amazonka/MarketplaceMetering/BatchMeterUsage.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MarketplaceMetering/BatchMeterUsage.hs
@@ -0,0 +1,259 @@
+{-# 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.MarketplaceMetering.BatchMeterUsage
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- @BatchMeterUsage@ is called from a SaaS application listed on AWS
+-- Marketplace to post metering records for a set of customers.
+--
+-- For identical requests, the API is idempotent; requests can be retried
+-- with the same records or a subset of the input records.
+--
+-- Every request to @BatchMeterUsage@ is for one product. If you need to
+-- meter usage for multiple products, you must make multiple calls to
+-- @BatchMeterUsage@.
+--
+-- Usage records are expected to be submitted as quickly as possible after
+-- the event that is being recorded, and are not accepted more than 6 hours
+-- after the event.
+--
+-- @BatchMeterUsage@ can process up to 25 @UsageRecords@ at a time.
+--
+-- A @UsageRecord@ can optionally include multiple usage allocations, to
+-- provide customers with usage data split into buckets by tags that you
+-- define (or allow the customer to define).
+--
+-- @BatchMeterUsage@ returns a list of @UsageRecordResult@ objects, showing
+-- the result for each @UsageRecord@, as well as a list of
+-- @UnprocessedRecords@, indicating errors in the service side that you
+-- should retry.
+--
+-- @BatchMeterUsage@ requests must be less than 1MB in size.
+--
+-- For an example of using @BatchMeterUsage@, see
+-- <https://docs.aws.amazon.com/marketplace/latest/userguide/saas-code-examples.html#saas-batchmeterusage-example BatchMeterUsage code example>
+-- in the /AWS Marketplace Seller Guide/.
+module Amazonka.MarketplaceMetering.BatchMeterUsage
+  ( -- * Creating a Request
+    BatchMeterUsage (..),
+    newBatchMeterUsage,
+
+    -- * Request Lenses
+    batchMeterUsage_usageRecords,
+    batchMeterUsage_productCode,
+
+    -- * Destructuring the Response
+    BatchMeterUsageResponse (..),
+    newBatchMeterUsageResponse,
+
+    -- * Response Lenses
+    batchMeterUsageResponse_results,
+    batchMeterUsageResponse_unprocessedRecords,
+    batchMeterUsageResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MarketplaceMetering.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | A @BatchMeterUsageRequest@ contains @UsageRecords@, which indicate
+-- quantities of usage within your application.
+--
+-- /See:/ 'newBatchMeterUsage' smart constructor.
+data BatchMeterUsage = BatchMeterUsage'
+  { -- | The set of @UsageRecords@ to submit. @BatchMeterUsage@ accepts up to 25
+    -- @UsageRecords@ at a time.
+    usageRecords :: [UsageRecord],
+    -- | Product code is used to uniquely identify a product in AWS Marketplace.
+    -- The product code should be the same as the one used during the
+    -- publishing of a new product.
+    productCode :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'BatchMeterUsage' 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:
+--
+-- 'usageRecords', 'batchMeterUsage_usageRecords' - The set of @UsageRecords@ to submit. @BatchMeterUsage@ accepts up to 25
+-- @UsageRecords@ at a time.
+--
+-- 'productCode', 'batchMeterUsage_productCode' - Product code is used to uniquely identify a product in AWS Marketplace.
+-- The product code should be the same as the one used during the
+-- publishing of a new product.
+newBatchMeterUsage ::
+  -- | 'productCode'
+  Prelude.Text ->
+  BatchMeterUsage
+newBatchMeterUsage pProductCode_ =
+  BatchMeterUsage'
+    { usageRecords = Prelude.mempty,
+      productCode = pProductCode_
+    }
+
+-- | The set of @UsageRecords@ to submit. @BatchMeterUsage@ accepts up to 25
+-- @UsageRecords@ at a time.
+batchMeterUsage_usageRecords :: Lens.Lens' BatchMeterUsage [UsageRecord]
+batchMeterUsage_usageRecords = Lens.lens (\BatchMeterUsage' {usageRecords} -> usageRecords) (\s@BatchMeterUsage' {} a -> s {usageRecords = a} :: BatchMeterUsage) Prelude.. Lens.coerced
+
+-- | Product code is used to uniquely identify a product in AWS Marketplace.
+-- The product code should be the same as the one used during the
+-- publishing of a new product.
+batchMeterUsage_productCode :: Lens.Lens' BatchMeterUsage Prelude.Text
+batchMeterUsage_productCode = Lens.lens (\BatchMeterUsage' {productCode} -> productCode) (\s@BatchMeterUsage' {} a -> s {productCode = a} :: BatchMeterUsage)
+
+instance Core.AWSRequest BatchMeterUsage where
+  type
+    AWSResponse BatchMeterUsage =
+      BatchMeterUsageResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          BatchMeterUsageResponse'
+            Prelude.<$> (x Data..?> "Results" Core..!@ Prelude.mempty)
+            Prelude.<*> ( x
+                            Data..?> "UnprocessedRecords"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable BatchMeterUsage where
+  hashWithSalt _salt BatchMeterUsage' {..} =
+    _salt
+      `Prelude.hashWithSalt` usageRecords
+      `Prelude.hashWithSalt` productCode
+
+instance Prelude.NFData BatchMeterUsage where
+  rnf BatchMeterUsage' {..} =
+    Prelude.rnf usageRecords
+      `Prelude.seq` Prelude.rnf productCode
+
+instance Data.ToHeaders BatchMeterUsage where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AWSMPMeteringService.BatchMeterUsage" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON BatchMeterUsage where
+  toJSON BatchMeterUsage' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("UsageRecords" Data..= usageRecords),
+            Prelude.Just ("ProductCode" Data..= productCode)
+          ]
+      )
+
+instance Data.ToPath BatchMeterUsage where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery BatchMeterUsage where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | Contains the @UsageRecords@ processed by @BatchMeterUsage@ and any
+-- records that have failed due to transient error.
+--
+-- /See:/ 'newBatchMeterUsageResponse' smart constructor.
+data BatchMeterUsageResponse = BatchMeterUsageResponse'
+  { -- | Contains all @UsageRecords@ processed by @BatchMeterUsage@. These
+    -- records were either honored by AWS Marketplace Metering Service or were
+    -- invalid. Invalid records should be fixed before being resubmitted.
+    results :: Prelude.Maybe [UsageRecordResult],
+    -- | Contains all @UsageRecords@ that were not processed by
+    -- @BatchMeterUsage@. This is a list of @UsageRecords@. You can retry the
+    -- failed request by making another @BatchMeterUsage@ call with this list
+    -- as input in the @BatchMeterUsageRequest@.
+    unprocessedRecords :: Prelude.Maybe [UsageRecord],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'BatchMeterUsageResponse' 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:
+--
+-- 'results', 'batchMeterUsageResponse_results' - Contains all @UsageRecords@ processed by @BatchMeterUsage@. These
+-- records were either honored by AWS Marketplace Metering Service or were
+-- invalid. Invalid records should be fixed before being resubmitted.
+--
+-- 'unprocessedRecords', 'batchMeterUsageResponse_unprocessedRecords' - Contains all @UsageRecords@ that were not processed by
+-- @BatchMeterUsage@. This is a list of @UsageRecords@. You can retry the
+-- failed request by making another @BatchMeterUsage@ call with this list
+-- as input in the @BatchMeterUsageRequest@.
+--
+-- 'httpStatus', 'batchMeterUsageResponse_httpStatus' - The response's http status code.
+newBatchMeterUsageResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  BatchMeterUsageResponse
+newBatchMeterUsageResponse pHttpStatus_ =
+  BatchMeterUsageResponse'
+    { results = Prelude.Nothing,
+      unprocessedRecords = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Contains all @UsageRecords@ processed by @BatchMeterUsage@. These
+-- records were either honored by AWS Marketplace Metering Service or were
+-- invalid. Invalid records should be fixed before being resubmitted.
+batchMeterUsageResponse_results :: Lens.Lens' BatchMeterUsageResponse (Prelude.Maybe [UsageRecordResult])
+batchMeterUsageResponse_results = Lens.lens (\BatchMeterUsageResponse' {results} -> results) (\s@BatchMeterUsageResponse' {} a -> s {results = a} :: BatchMeterUsageResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | Contains all @UsageRecords@ that were not processed by
+-- @BatchMeterUsage@. This is a list of @UsageRecords@. You can retry the
+-- failed request by making another @BatchMeterUsage@ call with this list
+-- as input in the @BatchMeterUsageRequest@.
+batchMeterUsageResponse_unprocessedRecords :: Lens.Lens' BatchMeterUsageResponse (Prelude.Maybe [UsageRecord])
+batchMeterUsageResponse_unprocessedRecords = Lens.lens (\BatchMeterUsageResponse' {unprocessedRecords} -> unprocessedRecords) (\s@BatchMeterUsageResponse' {} a -> s {unprocessedRecords = a} :: BatchMeterUsageResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+batchMeterUsageResponse_httpStatus :: Lens.Lens' BatchMeterUsageResponse Prelude.Int
+batchMeterUsageResponse_httpStatus = Lens.lens (\BatchMeterUsageResponse' {httpStatus} -> httpStatus) (\s@BatchMeterUsageResponse' {} a -> s {httpStatus = a} :: BatchMeterUsageResponse)
+
+instance Prelude.NFData BatchMeterUsageResponse where
+  rnf BatchMeterUsageResponse' {..} =
+    Prelude.rnf results
+      `Prelude.seq` Prelude.rnf unprocessedRecords
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MarketplaceMetering/Lens.hs b/gen/Amazonka/MarketplaceMetering/Lens.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MarketplaceMetering/Lens.hs
@@ -0,0 +1,80 @@
+{-# 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.MarketplaceMetering.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.MarketplaceMetering.Lens
+  ( -- * Operations
+
+    -- ** BatchMeterUsage
+    batchMeterUsage_usageRecords,
+    batchMeterUsage_productCode,
+    batchMeterUsageResponse_results,
+    batchMeterUsageResponse_unprocessedRecords,
+    batchMeterUsageResponse_httpStatus,
+
+    -- ** MeterUsage
+    meterUsage_dryRun,
+    meterUsage_usageAllocations,
+    meterUsage_usageQuantity,
+    meterUsage_productCode,
+    meterUsage_timestamp,
+    meterUsage_usageDimension,
+    meterUsageResponse_meteringRecordId,
+    meterUsageResponse_httpStatus,
+
+    -- ** RegisterUsage
+    registerUsage_nonce,
+    registerUsage_productCode,
+    registerUsage_publicKeyVersion,
+    registerUsageResponse_publicKeyRotationTimestamp,
+    registerUsageResponse_signature,
+    registerUsageResponse_httpStatus,
+
+    -- ** ResolveCustomer
+    resolveCustomer_registrationToken,
+    resolveCustomerResponse_customerAWSAccountId,
+    resolveCustomerResponse_customerIdentifier,
+    resolveCustomerResponse_productCode,
+    resolveCustomerResponse_httpStatus,
+
+    -- * Types
+
+    -- ** Tag
+    tag_key,
+    tag_value,
+
+    -- ** UsageAllocation
+    usageAllocation_tags,
+    usageAllocation_allocatedUsageQuantity,
+
+    -- ** UsageRecord
+    usageRecord_quantity,
+    usageRecord_usageAllocations,
+    usageRecord_timestamp,
+    usageRecord_customerIdentifier,
+    usageRecord_dimension,
+
+    -- ** UsageRecordResult
+    usageRecordResult_meteringRecordId,
+    usageRecordResult_status,
+    usageRecordResult_usageRecord,
+  )
+where
+
+import Amazonka.MarketplaceMetering.BatchMeterUsage
+import Amazonka.MarketplaceMetering.MeterUsage
+import Amazonka.MarketplaceMetering.RegisterUsage
+import Amazonka.MarketplaceMetering.ResolveCustomer
+import Amazonka.MarketplaceMetering.Types.Tag
+import Amazonka.MarketplaceMetering.Types.UsageAllocation
+import Amazonka.MarketplaceMetering.Types.UsageRecord
+import Amazonka.MarketplaceMetering.Types.UsageRecordResult
diff --git a/gen/Amazonka/MarketplaceMetering/MeterUsage.hs b/gen/Amazonka/MarketplaceMetering/MeterUsage.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MarketplaceMetering/MeterUsage.hs
@@ -0,0 +1,293 @@
+{-# 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.MarketplaceMetering.MeterUsage
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- API to emit metering records. For identical requests, the API is
+-- idempotent. It simply returns the metering record ID.
+--
+-- @MeterUsage@ is authenticated on the buyer\'s AWS account using
+-- credentials from the EC2 instance, ECS task, or EKS pod.
+--
+-- @MeterUsage@ can optionally include multiple usage allocations, to
+-- provide customers with usage data split into buckets by tags that you
+-- define (or allow the customer to define).
+--
+-- Usage records are expected to be submitted as quickly as possible after
+-- the event that is being recorded, and are not accepted more than 6 hours
+-- after the event.
+module Amazonka.MarketplaceMetering.MeterUsage
+  ( -- * Creating a Request
+    MeterUsage (..),
+    newMeterUsage,
+
+    -- * Request Lenses
+    meterUsage_dryRun,
+    meterUsage_usageAllocations,
+    meterUsage_usageQuantity,
+    meterUsage_productCode,
+    meterUsage_timestamp,
+    meterUsage_usageDimension,
+
+    -- * Destructuring the Response
+    MeterUsageResponse (..),
+    newMeterUsageResponse,
+
+    -- * Response Lenses
+    meterUsageResponse_meteringRecordId,
+    meterUsageResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MarketplaceMetering.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newMeterUsage' smart constructor.
+data MeterUsage = MeterUsage'
+  { -- | Checks whether you have the permissions required for the action, but
+    -- does not make the request. If you have the permissions, the request
+    -- returns @DryRunOperation@; otherwise, it returns
+    -- @UnauthorizedException@. Defaults to @false@ if not specified.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The set of @UsageAllocations@ to submit.
+    --
+    -- The sum of all @UsageAllocation@ quantities must equal the
+    -- @UsageQuantity@ of the @MeterUsage@ request, and each @UsageAllocation@
+    -- must have a unique set of tags (include no tags).
+    usageAllocations :: Prelude.Maybe (Prelude.NonEmpty UsageAllocation),
+    -- | Consumption value for the hour. Defaults to @0@ if not specified.
+    usageQuantity :: Prelude.Maybe Prelude.Natural,
+    -- | Product code is used to uniquely identify a product in AWS Marketplace.
+    -- The product code should be the same as the one used during the
+    -- publishing of a new product.
+    productCode :: Prelude.Text,
+    -- | Timestamp, in UTC, for which the usage is being reported. Your
+    -- application can meter usage for up to one hour in the past. Make sure
+    -- the @timestamp@ value is not before the start of the software usage.
+    timestamp :: Data.POSIX,
+    -- | It will be one of the fcp dimension name provided during the publishing
+    -- of the product.
+    usageDimension :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'MeterUsage' 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:
+--
+-- 'dryRun', 'meterUsage_dryRun' - Checks whether you have the permissions required for the action, but
+-- does not make the request. If you have the permissions, the request
+-- returns @DryRunOperation@; otherwise, it returns
+-- @UnauthorizedException@. Defaults to @false@ if not specified.
+--
+-- 'usageAllocations', 'meterUsage_usageAllocations' - The set of @UsageAllocations@ to submit.
+--
+-- The sum of all @UsageAllocation@ quantities must equal the
+-- @UsageQuantity@ of the @MeterUsage@ request, and each @UsageAllocation@
+-- must have a unique set of tags (include no tags).
+--
+-- 'usageQuantity', 'meterUsage_usageQuantity' - Consumption value for the hour. Defaults to @0@ if not specified.
+--
+-- 'productCode', 'meterUsage_productCode' - Product code is used to uniquely identify a product in AWS Marketplace.
+-- The product code should be the same as the one used during the
+-- publishing of a new product.
+--
+-- 'timestamp', 'meterUsage_timestamp' - Timestamp, in UTC, for which the usage is being reported. Your
+-- application can meter usage for up to one hour in the past. Make sure
+-- the @timestamp@ value is not before the start of the software usage.
+--
+-- 'usageDimension', 'meterUsage_usageDimension' - It will be one of the fcp dimension name provided during the publishing
+-- of the product.
+newMeterUsage ::
+  -- | 'productCode'
+  Prelude.Text ->
+  -- | 'timestamp'
+  Prelude.UTCTime ->
+  -- | 'usageDimension'
+  Prelude.Text ->
+  MeterUsage
+newMeterUsage
+  pProductCode_
+  pTimestamp_
+  pUsageDimension_ =
+    MeterUsage'
+      { dryRun = Prelude.Nothing,
+        usageAllocations = Prelude.Nothing,
+        usageQuantity = Prelude.Nothing,
+        productCode = pProductCode_,
+        timestamp = Data._Time Lens.# pTimestamp_,
+        usageDimension = pUsageDimension_
+      }
+
+-- | Checks whether you have the permissions required for the action, but
+-- does not make the request. If you have the permissions, the request
+-- returns @DryRunOperation@; otherwise, it returns
+-- @UnauthorizedException@. Defaults to @false@ if not specified.
+meterUsage_dryRun :: Lens.Lens' MeterUsage (Prelude.Maybe Prelude.Bool)
+meterUsage_dryRun = Lens.lens (\MeterUsage' {dryRun} -> dryRun) (\s@MeterUsage' {} a -> s {dryRun = a} :: MeterUsage)
+
+-- | The set of @UsageAllocations@ to submit.
+--
+-- The sum of all @UsageAllocation@ quantities must equal the
+-- @UsageQuantity@ of the @MeterUsage@ request, and each @UsageAllocation@
+-- must have a unique set of tags (include no tags).
+meterUsage_usageAllocations :: Lens.Lens' MeterUsage (Prelude.Maybe (Prelude.NonEmpty UsageAllocation))
+meterUsage_usageAllocations = Lens.lens (\MeterUsage' {usageAllocations} -> usageAllocations) (\s@MeterUsage' {} a -> s {usageAllocations = a} :: MeterUsage) Prelude.. Lens.mapping Lens.coerced
+
+-- | Consumption value for the hour. Defaults to @0@ if not specified.
+meterUsage_usageQuantity :: Lens.Lens' MeterUsage (Prelude.Maybe Prelude.Natural)
+meterUsage_usageQuantity = Lens.lens (\MeterUsage' {usageQuantity} -> usageQuantity) (\s@MeterUsage' {} a -> s {usageQuantity = a} :: MeterUsage)
+
+-- | Product code is used to uniquely identify a product in AWS Marketplace.
+-- The product code should be the same as the one used during the
+-- publishing of a new product.
+meterUsage_productCode :: Lens.Lens' MeterUsage Prelude.Text
+meterUsage_productCode = Lens.lens (\MeterUsage' {productCode} -> productCode) (\s@MeterUsage' {} a -> s {productCode = a} :: MeterUsage)
+
+-- | Timestamp, in UTC, for which the usage is being reported. Your
+-- application can meter usage for up to one hour in the past. Make sure
+-- the @timestamp@ value is not before the start of the software usage.
+meterUsage_timestamp :: Lens.Lens' MeterUsage Prelude.UTCTime
+meterUsage_timestamp = Lens.lens (\MeterUsage' {timestamp} -> timestamp) (\s@MeterUsage' {} a -> s {timestamp = a} :: MeterUsage) Prelude.. Data._Time
+
+-- | It will be one of the fcp dimension name provided during the publishing
+-- of the product.
+meterUsage_usageDimension :: Lens.Lens' MeterUsage Prelude.Text
+meterUsage_usageDimension = Lens.lens (\MeterUsage' {usageDimension} -> usageDimension) (\s@MeterUsage' {} a -> s {usageDimension = a} :: MeterUsage)
+
+instance Core.AWSRequest MeterUsage where
+  type AWSResponse MeterUsage = MeterUsageResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          MeterUsageResponse'
+            Prelude.<$> (x Data..?> "MeteringRecordId")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable MeterUsage where
+  hashWithSalt _salt MeterUsage' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` usageAllocations
+      `Prelude.hashWithSalt` usageQuantity
+      `Prelude.hashWithSalt` productCode
+      `Prelude.hashWithSalt` timestamp
+      `Prelude.hashWithSalt` usageDimension
+
+instance Prelude.NFData MeterUsage where
+  rnf MeterUsage' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf usageAllocations
+      `Prelude.seq` Prelude.rnf usageQuantity
+      `Prelude.seq` Prelude.rnf productCode
+      `Prelude.seq` Prelude.rnf timestamp
+      `Prelude.seq` Prelude.rnf usageDimension
+
+instance Data.ToHeaders MeterUsage where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AWSMPMeteringService.MeterUsage" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON MeterUsage where
+  toJSON MeterUsage' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("DryRun" Data..=) Prelude.<$> dryRun,
+            ("UsageAllocations" Data..=)
+              Prelude.<$> usageAllocations,
+            ("UsageQuantity" Data..=) Prelude.<$> usageQuantity,
+            Prelude.Just ("ProductCode" Data..= productCode),
+            Prelude.Just ("Timestamp" Data..= timestamp),
+            Prelude.Just
+              ("UsageDimension" Data..= usageDimension)
+          ]
+      )
+
+instance Data.ToPath MeterUsage where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery MeterUsage where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newMeterUsageResponse' smart constructor.
+data MeterUsageResponse = MeterUsageResponse'
+  { -- | Metering record id.
+    meteringRecordId :: 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 'MeterUsageResponse' 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:
+--
+-- 'meteringRecordId', 'meterUsageResponse_meteringRecordId' - Metering record id.
+--
+-- 'httpStatus', 'meterUsageResponse_httpStatus' - The response's http status code.
+newMeterUsageResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  MeterUsageResponse
+newMeterUsageResponse pHttpStatus_ =
+  MeterUsageResponse'
+    { meteringRecordId =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Metering record id.
+meterUsageResponse_meteringRecordId :: Lens.Lens' MeterUsageResponse (Prelude.Maybe Prelude.Text)
+meterUsageResponse_meteringRecordId = Lens.lens (\MeterUsageResponse' {meteringRecordId} -> meteringRecordId) (\s@MeterUsageResponse' {} a -> s {meteringRecordId = a} :: MeterUsageResponse)
+
+-- | The response's http status code.
+meterUsageResponse_httpStatus :: Lens.Lens' MeterUsageResponse Prelude.Int
+meterUsageResponse_httpStatus = Lens.lens (\MeterUsageResponse' {httpStatus} -> httpStatus) (\s@MeterUsageResponse' {} a -> s {httpStatus = a} :: MeterUsageResponse)
+
+instance Prelude.NFData MeterUsageResponse where
+  rnf MeterUsageResponse' {..} =
+    Prelude.rnf meteringRecordId
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MarketplaceMetering/RegisterUsage.hs b/gen/Amazonka/MarketplaceMetering/RegisterUsage.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MarketplaceMetering/RegisterUsage.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.MarketplaceMetering.RegisterUsage
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Paid container software products sold through AWS Marketplace must
+-- integrate with the AWS Marketplace Metering Service and call the
+-- @RegisterUsage@ operation for software entitlement and metering. Free
+-- and BYOL products for Amazon ECS or Amazon EKS aren\'t required to call
+-- @RegisterUsage@, but you may choose to do so if you would like to
+-- receive usage data in your seller reports. The sections below explain
+-- the behavior of @RegisterUsage@. @RegisterUsage@ performs two primary
+-- functions: metering and entitlement.
+--
+-- -   /Entitlement/: @RegisterUsage@ allows you to verify that the
+--     customer running your paid software is subscribed to your product on
+--     AWS Marketplace, enabling you to guard against unauthorized use.
+--     Your container image that integrates with @RegisterUsage@ is only
+--     required to guard against unauthorized use at container startup, as
+--     such a @CustomerNotSubscribedException@ or
+--     @PlatformNotSupportedException@ will only be thrown on the initial
+--     call to @RegisterUsage@. Subsequent calls from the same Amazon ECS
+--     task instance (e.g. task-id) or Amazon EKS pod will not throw a
+--     @CustomerNotSubscribedException@, even if the customer unsubscribes
+--     while the Amazon ECS task or Amazon EKS pod is still running.
+--
+-- -   /Metering/: @RegisterUsage@ meters software use per ECS task, per
+--     hour, or per pod for Amazon EKS with usage prorated to the second. A
+--     minimum of 1 minute of usage applies to tasks that are short lived.
+--     For example, if a customer has a 10 node Amazon ECS or Amazon EKS
+--     cluster and a service configured as a Daemon Set, then Amazon ECS or
+--     Amazon EKS will launch a task on all 10 cluster nodes and the
+--     customer will be charged: (10 * hourly_rate). Metering for software
+--     use is automatically handled by the AWS Marketplace Metering Control
+--     Plane -- your software is not required to perform any metering
+--     specific actions, other than call @RegisterUsage@ once for metering
+--     of software use to commence. The AWS Marketplace Metering Control
+--     Plane will also continue to bill customers for running ECS tasks and
+--     Amazon EKS pods, regardless of the customers subscription state,
+--     removing the need for your software to perform entitlement checks at
+--     runtime.
+module Amazonka.MarketplaceMetering.RegisterUsage
+  ( -- * Creating a Request
+    RegisterUsage (..),
+    newRegisterUsage,
+
+    -- * Request Lenses
+    registerUsage_nonce,
+    registerUsage_productCode,
+    registerUsage_publicKeyVersion,
+
+    -- * Destructuring the Response
+    RegisterUsageResponse (..),
+    newRegisterUsageResponse,
+
+    -- * Response Lenses
+    registerUsageResponse_publicKeyRotationTimestamp,
+    registerUsageResponse_signature,
+    registerUsageResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MarketplaceMetering.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newRegisterUsage' smart constructor.
+data RegisterUsage = RegisterUsage'
+  { -- | (Optional) To scope down the registration to a specific running software
+    -- instance and guard against replay attacks.
+    nonce :: Prelude.Maybe Prelude.Text,
+    -- | Product code is used to uniquely identify a product in AWS Marketplace.
+    -- The product code should be the same as the one used during the
+    -- publishing of a new product.
+    productCode :: Prelude.Text,
+    -- | Public Key Version provided by AWS Marketplace
+    publicKeyVersion :: Prelude.Natural
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'RegisterUsage' 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:
+--
+-- 'nonce', 'registerUsage_nonce' - (Optional) To scope down the registration to a specific running software
+-- instance and guard against replay attacks.
+--
+-- 'productCode', 'registerUsage_productCode' - Product code is used to uniquely identify a product in AWS Marketplace.
+-- The product code should be the same as the one used during the
+-- publishing of a new product.
+--
+-- 'publicKeyVersion', 'registerUsage_publicKeyVersion' - Public Key Version provided by AWS Marketplace
+newRegisterUsage ::
+  -- | 'productCode'
+  Prelude.Text ->
+  -- | 'publicKeyVersion'
+  Prelude.Natural ->
+  RegisterUsage
+newRegisterUsage pProductCode_ pPublicKeyVersion_ =
+  RegisterUsage'
+    { nonce = Prelude.Nothing,
+      productCode = pProductCode_,
+      publicKeyVersion = pPublicKeyVersion_
+    }
+
+-- | (Optional) To scope down the registration to a specific running software
+-- instance and guard against replay attacks.
+registerUsage_nonce :: Lens.Lens' RegisterUsage (Prelude.Maybe Prelude.Text)
+registerUsage_nonce = Lens.lens (\RegisterUsage' {nonce} -> nonce) (\s@RegisterUsage' {} a -> s {nonce = a} :: RegisterUsage)
+
+-- | Product code is used to uniquely identify a product in AWS Marketplace.
+-- The product code should be the same as the one used during the
+-- publishing of a new product.
+registerUsage_productCode :: Lens.Lens' RegisterUsage Prelude.Text
+registerUsage_productCode = Lens.lens (\RegisterUsage' {productCode} -> productCode) (\s@RegisterUsage' {} a -> s {productCode = a} :: RegisterUsage)
+
+-- | Public Key Version provided by AWS Marketplace
+registerUsage_publicKeyVersion :: Lens.Lens' RegisterUsage Prelude.Natural
+registerUsage_publicKeyVersion = Lens.lens (\RegisterUsage' {publicKeyVersion} -> publicKeyVersion) (\s@RegisterUsage' {} a -> s {publicKeyVersion = a} :: RegisterUsage)
+
+instance Core.AWSRequest RegisterUsage where
+  type
+    AWSResponse RegisterUsage =
+      RegisterUsageResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          RegisterUsageResponse'
+            Prelude.<$> (x Data..?> "PublicKeyRotationTimestamp")
+            Prelude.<*> (x Data..?> "Signature")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable RegisterUsage where
+  hashWithSalt _salt RegisterUsage' {..} =
+    _salt
+      `Prelude.hashWithSalt` nonce
+      `Prelude.hashWithSalt` productCode
+      `Prelude.hashWithSalt` publicKeyVersion
+
+instance Prelude.NFData RegisterUsage where
+  rnf RegisterUsage' {..} =
+    Prelude.rnf nonce
+      `Prelude.seq` Prelude.rnf productCode
+      `Prelude.seq` Prelude.rnf publicKeyVersion
+
+instance Data.ToHeaders RegisterUsage where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AWSMPMeteringService.RegisterUsage" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON RegisterUsage where
+  toJSON RegisterUsage' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Nonce" Data..=) Prelude.<$> nonce,
+            Prelude.Just ("ProductCode" Data..= productCode),
+            Prelude.Just
+              ("PublicKeyVersion" Data..= publicKeyVersion)
+          ]
+      )
+
+instance Data.ToPath RegisterUsage where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery RegisterUsage where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newRegisterUsageResponse' smart constructor.
+data RegisterUsageResponse = RegisterUsageResponse'
+  { -- | (Optional) Only included when public key version has expired
+    publicKeyRotationTimestamp :: Prelude.Maybe Data.POSIX,
+    -- | JWT Token
+    signature :: 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 'RegisterUsageResponse' 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:
+--
+-- 'publicKeyRotationTimestamp', 'registerUsageResponse_publicKeyRotationTimestamp' - (Optional) Only included when public key version has expired
+--
+-- 'signature', 'registerUsageResponse_signature' - JWT Token
+--
+-- 'httpStatus', 'registerUsageResponse_httpStatus' - The response's http status code.
+newRegisterUsageResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  RegisterUsageResponse
+newRegisterUsageResponse pHttpStatus_ =
+  RegisterUsageResponse'
+    { publicKeyRotationTimestamp =
+        Prelude.Nothing,
+      signature = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | (Optional) Only included when public key version has expired
+registerUsageResponse_publicKeyRotationTimestamp :: Lens.Lens' RegisterUsageResponse (Prelude.Maybe Prelude.UTCTime)
+registerUsageResponse_publicKeyRotationTimestamp = Lens.lens (\RegisterUsageResponse' {publicKeyRotationTimestamp} -> publicKeyRotationTimestamp) (\s@RegisterUsageResponse' {} a -> s {publicKeyRotationTimestamp = a} :: RegisterUsageResponse) Prelude.. Lens.mapping Data._Time
+
+-- | JWT Token
+registerUsageResponse_signature :: Lens.Lens' RegisterUsageResponse (Prelude.Maybe Prelude.Text)
+registerUsageResponse_signature = Lens.lens (\RegisterUsageResponse' {signature} -> signature) (\s@RegisterUsageResponse' {} a -> s {signature = a} :: RegisterUsageResponse)
+
+-- | The response's http status code.
+registerUsageResponse_httpStatus :: Lens.Lens' RegisterUsageResponse Prelude.Int
+registerUsageResponse_httpStatus = Lens.lens (\RegisterUsageResponse' {httpStatus} -> httpStatus) (\s@RegisterUsageResponse' {} a -> s {httpStatus = a} :: RegisterUsageResponse)
+
+instance Prelude.NFData RegisterUsageResponse where
+  rnf RegisterUsageResponse' {..} =
+    Prelude.rnf publicKeyRotationTimestamp
+      `Prelude.seq` Prelude.rnf signature
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MarketplaceMetering/ResolveCustomer.hs b/gen/Amazonka/MarketplaceMetering/ResolveCustomer.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MarketplaceMetering/ResolveCustomer.hs
@@ -0,0 +1,240 @@
+{-# 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.MarketplaceMetering.ResolveCustomer
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- @ResolveCustomer@ is called by a SaaS application during the
+-- registration process. When a buyer visits your website during the
+-- registration process, the buyer submits a registration token through
+-- their browser. The registration token is resolved through this API to
+-- obtain a @CustomerIdentifier@ along with the @CustomerAWSAccountId@ and
+-- @ProductCode@.
+--
+-- The API needs to called from the seller account id used to publish the
+-- SaaS application to successfully resolve the token.
+--
+-- For an example of using @ResolveCustomer@, see
+-- <https://docs.aws.amazon.com/marketplace/latest/userguide/saas-code-examples.html#saas-resolvecustomer-example ResolveCustomer code example>
+-- in the /AWS Marketplace Seller Guide/.
+module Amazonka.MarketplaceMetering.ResolveCustomer
+  ( -- * Creating a Request
+    ResolveCustomer (..),
+    newResolveCustomer,
+
+    -- * Request Lenses
+    resolveCustomer_registrationToken,
+
+    -- * Destructuring the Response
+    ResolveCustomerResponse (..),
+    newResolveCustomerResponse,
+
+    -- * Response Lenses
+    resolveCustomerResponse_customerAWSAccountId,
+    resolveCustomerResponse_customerIdentifier,
+    resolveCustomerResponse_productCode,
+    resolveCustomerResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MarketplaceMetering.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | Contains input to the @ResolveCustomer@ operation.
+--
+-- /See:/ 'newResolveCustomer' smart constructor.
+data ResolveCustomer = ResolveCustomer'
+  { -- | When a buyer visits your website during the registration process, the
+    -- buyer submits a registration token through the browser. The registration
+    -- token is resolved to obtain a @CustomerIdentifier@ along with the
+    -- @CustomerAWSAccountId@ and @ProductCode@.
+    registrationToken :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ResolveCustomer' 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:
+--
+-- 'registrationToken', 'resolveCustomer_registrationToken' - When a buyer visits your website during the registration process, the
+-- buyer submits a registration token through the browser. The registration
+-- token is resolved to obtain a @CustomerIdentifier@ along with the
+-- @CustomerAWSAccountId@ and @ProductCode@.
+newResolveCustomer ::
+  -- | 'registrationToken'
+  Prelude.Text ->
+  ResolveCustomer
+newResolveCustomer pRegistrationToken_ =
+  ResolveCustomer'
+    { registrationToken =
+        pRegistrationToken_
+    }
+
+-- | When a buyer visits your website during the registration process, the
+-- buyer submits a registration token through the browser. The registration
+-- token is resolved to obtain a @CustomerIdentifier@ along with the
+-- @CustomerAWSAccountId@ and @ProductCode@.
+resolveCustomer_registrationToken :: Lens.Lens' ResolveCustomer Prelude.Text
+resolveCustomer_registrationToken = Lens.lens (\ResolveCustomer' {registrationToken} -> registrationToken) (\s@ResolveCustomer' {} a -> s {registrationToken = a} :: ResolveCustomer)
+
+instance Core.AWSRequest ResolveCustomer where
+  type
+    AWSResponse ResolveCustomer =
+      ResolveCustomerResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ResolveCustomerResponse'
+            Prelude.<$> (x Data..?> "CustomerAWSAccountId")
+            Prelude.<*> (x Data..?> "CustomerIdentifier")
+            Prelude.<*> (x Data..?> "ProductCode")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ResolveCustomer where
+  hashWithSalt _salt ResolveCustomer' {..} =
+    _salt `Prelude.hashWithSalt` registrationToken
+
+instance Prelude.NFData ResolveCustomer where
+  rnf ResolveCustomer' {..} =
+    Prelude.rnf registrationToken
+
+instance Data.ToHeaders ResolveCustomer where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AWSMPMeteringService.ResolveCustomer" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ResolveCustomer where
+  toJSON ResolveCustomer' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ("RegistrationToken" Data..= registrationToken)
+          ]
+      )
+
+instance Data.ToPath ResolveCustomer where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery ResolveCustomer where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | The result of the @ResolveCustomer@ operation. Contains the
+-- @CustomerIdentifier@ along with the @CustomerAWSAccountId@ and
+-- @ProductCode@.
+--
+-- /See:/ 'newResolveCustomerResponse' smart constructor.
+data ResolveCustomerResponse = ResolveCustomerResponse'
+  { -- | The @CustomerAWSAccountId@ provides the AWS account ID associated with
+    -- the @CustomerIdentifier@ for the individual customer.
+    customerAWSAccountId :: Prelude.Maybe Prelude.Text,
+    -- | The @CustomerIdentifier@ is used to identify an individual customer in
+    -- your application. Calls to @BatchMeterUsage@ require
+    -- @CustomerIdentifiers@ for each @UsageRecord@.
+    customerIdentifier :: Prelude.Maybe Prelude.Text,
+    -- | The product code is returned to confirm that the buyer is registering
+    -- for your product. Subsequent @BatchMeterUsage@ calls should be made
+    -- using this product code.
+    productCode :: 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 'ResolveCustomerResponse' 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:
+--
+-- 'customerAWSAccountId', 'resolveCustomerResponse_customerAWSAccountId' - The @CustomerAWSAccountId@ provides the AWS account ID associated with
+-- the @CustomerIdentifier@ for the individual customer.
+--
+-- 'customerIdentifier', 'resolveCustomerResponse_customerIdentifier' - The @CustomerIdentifier@ is used to identify an individual customer in
+-- your application. Calls to @BatchMeterUsage@ require
+-- @CustomerIdentifiers@ for each @UsageRecord@.
+--
+-- 'productCode', 'resolveCustomerResponse_productCode' - The product code is returned to confirm that the buyer is registering
+-- for your product. Subsequent @BatchMeterUsage@ calls should be made
+-- using this product code.
+--
+-- 'httpStatus', 'resolveCustomerResponse_httpStatus' - The response's http status code.
+newResolveCustomerResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ResolveCustomerResponse
+newResolveCustomerResponse pHttpStatus_ =
+  ResolveCustomerResponse'
+    { customerAWSAccountId =
+        Prelude.Nothing,
+      customerIdentifier = Prelude.Nothing,
+      productCode = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The @CustomerAWSAccountId@ provides the AWS account ID associated with
+-- the @CustomerIdentifier@ for the individual customer.
+resolveCustomerResponse_customerAWSAccountId :: Lens.Lens' ResolveCustomerResponse (Prelude.Maybe Prelude.Text)
+resolveCustomerResponse_customerAWSAccountId = Lens.lens (\ResolveCustomerResponse' {customerAWSAccountId} -> customerAWSAccountId) (\s@ResolveCustomerResponse' {} a -> s {customerAWSAccountId = a} :: ResolveCustomerResponse)
+
+-- | The @CustomerIdentifier@ is used to identify an individual customer in
+-- your application. Calls to @BatchMeterUsage@ require
+-- @CustomerIdentifiers@ for each @UsageRecord@.
+resolveCustomerResponse_customerIdentifier :: Lens.Lens' ResolveCustomerResponse (Prelude.Maybe Prelude.Text)
+resolveCustomerResponse_customerIdentifier = Lens.lens (\ResolveCustomerResponse' {customerIdentifier} -> customerIdentifier) (\s@ResolveCustomerResponse' {} a -> s {customerIdentifier = a} :: ResolveCustomerResponse)
+
+-- | The product code is returned to confirm that the buyer is registering
+-- for your product. Subsequent @BatchMeterUsage@ calls should be made
+-- using this product code.
+resolveCustomerResponse_productCode :: Lens.Lens' ResolveCustomerResponse (Prelude.Maybe Prelude.Text)
+resolveCustomerResponse_productCode = Lens.lens (\ResolveCustomerResponse' {productCode} -> productCode) (\s@ResolveCustomerResponse' {} a -> s {productCode = a} :: ResolveCustomerResponse)
+
+-- | The response's http status code.
+resolveCustomerResponse_httpStatus :: Lens.Lens' ResolveCustomerResponse Prelude.Int
+resolveCustomerResponse_httpStatus = Lens.lens (\ResolveCustomerResponse' {httpStatus} -> httpStatus) (\s@ResolveCustomerResponse' {} a -> s {httpStatus = a} :: ResolveCustomerResponse)
+
+instance Prelude.NFData ResolveCustomerResponse where
+  rnf ResolveCustomerResponse' {..} =
+    Prelude.rnf customerAWSAccountId
+      `Prelude.seq` Prelude.rnf customerIdentifier
+      `Prelude.seq` Prelude.rnf productCode
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MarketplaceMetering/Types.hs b/gen/Amazonka/MarketplaceMetering/Types.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MarketplaceMetering/Types.hs
@@ -0,0 +1,293 @@
+{-# 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.MarketplaceMetering.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.MarketplaceMetering.Types
+  ( -- * Service Configuration
+    defaultService,
+
+    -- * Errors
+    _CustomerNotEntitledException,
+    _DisabledApiException,
+    _DuplicateRequestException,
+    _ExpiredTokenException,
+    _InternalServiceErrorException,
+    _InvalidCustomerIdentifierException,
+    _InvalidEndpointRegionException,
+    _InvalidProductCodeException,
+    _InvalidPublicKeyVersionException,
+    _InvalidRegionException,
+    _InvalidTagException,
+    _InvalidTokenException,
+    _InvalidUsageAllocationsException,
+    _InvalidUsageDimensionException,
+    _PlatformNotSupportedException,
+    _ThrottlingException,
+    _TimestampOutOfBoundsException,
+
+    -- * UsageRecordResultStatus
+    UsageRecordResultStatus (..),
+
+    -- * Tag
+    Tag (..),
+    newTag,
+    tag_key,
+    tag_value,
+
+    -- * UsageAllocation
+    UsageAllocation (..),
+    newUsageAllocation,
+    usageAllocation_tags,
+    usageAllocation_allocatedUsageQuantity,
+
+    -- * UsageRecord
+    UsageRecord (..),
+    newUsageRecord,
+    usageRecord_quantity,
+    usageRecord_usageAllocations,
+    usageRecord_timestamp,
+    usageRecord_customerIdentifier,
+    usageRecord_dimension,
+
+    -- * UsageRecordResult
+    UsageRecordResult (..),
+    newUsageRecordResult,
+    usageRecordResult_meteringRecordId,
+    usageRecordResult_status,
+    usageRecordResult_usageRecord,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import Amazonka.MarketplaceMetering.Types.Tag
+import Amazonka.MarketplaceMetering.Types.UsageAllocation
+import Amazonka.MarketplaceMetering.Types.UsageRecord
+import Amazonka.MarketplaceMetering.Types.UsageRecordResult
+import Amazonka.MarketplaceMetering.Types.UsageRecordResultStatus
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Sign.V4 as Sign
+
+-- | API version @2016-01-14@ of the Amazon Marketplace Metering SDK configuration.
+defaultService :: Core.Service
+defaultService =
+  Core.Service
+    { Core.abbrev = "MarketplaceMetering",
+      Core.signer = Sign.v4,
+      Core.endpointPrefix = "metering.marketplace",
+      Core.signingName = "aws-marketplace",
+      Core.version = "2016-01-14",
+      Core.s3AddressingStyle = Core.S3AddressingStyleAuto,
+      Core.endpoint = Core.defaultEndpoint defaultService,
+      Core.timeout = Prelude.Just 70,
+      Core.check = Core.statusSuccess,
+      Core.error =
+        Core.parseJSONError "MarketplaceMetering",
+      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
+
+-- | Exception thrown when the customer does not have a valid subscription
+-- for the product.
+_CustomerNotEntitledException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_CustomerNotEntitledException =
+  Core._MatchServiceError
+    defaultService
+    "CustomerNotEntitledException"
+
+-- | The API is disabled in the Region.
+_DisabledApiException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_DisabledApiException =
+  Core._MatchServiceError
+    defaultService
+    "DisabledApiException"
+
+-- | A metering record has already been emitted by the same EC2 instance, ECS
+-- task, or EKS pod for the given {@usageDimension@, @timestamp@} with a
+-- different @usageQuantity@.
+_DuplicateRequestException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_DuplicateRequestException =
+  Core._MatchServiceError
+    defaultService
+    "DuplicateRequestException"
+
+-- | The submitted registration token has expired. This can happen if the
+-- buyer\'s browser takes too long to redirect to your page, the buyer has
+-- resubmitted the registration token, or your application has held on to
+-- the registration token for too long. Your SaaS registration website
+-- should redeem this token as soon as it is submitted by the buyer\'s
+-- browser.
+_ExpiredTokenException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ExpiredTokenException =
+  Core._MatchServiceError
+    defaultService
+    "ExpiredTokenException"
+
+-- | An internal error has occurred. Retry your request. If the problem
+-- persists, post a message with details on the AWS forums.
+_InternalServiceErrorException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_InternalServiceErrorException =
+  Core._MatchServiceError
+    defaultService
+    "InternalServiceErrorException"
+
+-- | You have metered usage for a @CustomerIdentifier@ that does not exist.
+_InvalidCustomerIdentifierException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_InvalidCustomerIdentifierException =
+  Core._MatchServiceError
+    defaultService
+    "InvalidCustomerIdentifierException"
+
+-- | The endpoint being called is in a AWS Region different from your EC2
+-- instance, ECS task, or EKS pod. The Region of the Metering Service
+-- endpoint and the AWS Region of the resource must match.
+_InvalidEndpointRegionException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_InvalidEndpointRegionException =
+  Core._MatchServiceError
+    defaultService
+    "InvalidEndpointRegionException"
+
+-- | The product code passed does not match the product code used for
+-- publishing the product.
+_InvalidProductCodeException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_InvalidProductCodeException =
+  Core._MatchServiceError
+    defaultService
+    "InvalidProductCodeException"
+
+-- | Public Key version is invalid.
+_InvalidPublicKeyVersionException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_InvalidPublicKeyVersionException =
+  Core._MatchServiceError
+    defaultService
+    "InvalidPublicKeyVersionException"
+
+-- | @RegisterUsage@ must be called in the same AWS Region the ECS task was
+-- launched in. This prevents a container from hardcoding a Region (e.g.
+-- withRegion(“us-east-1”) when calling @RegisterUsage@.
+_InvalidRegionException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_InvalidRegionException =
+  Core._MatchServiceError
+    defaultService
+    "InvalidRegionException"
+
+-- | The tag is invalid, or the number of tags is greater than 5.
+_InvalidTagException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_InvalidTagException =
+  Core._MatchServiceError
+    defaultService
+    "InvalidTagException"
+
+-- | Registration token is invalid.
+_InvalidTokenException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_InvalidTokenException =
+  Core._MatchServiceError
+    defaultService
+    "InvalidTokenException"
+
+-- | The usage allocation objects are invalid, or the number of allocations
+-- is greater than 500 for a single usage record.
+_InvalidUsageAllocationsException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_InvalidUsageAllocationsException =
+  Core._MatchServiceError
+    defaultService
+    "InvalidUsageAllocationsException"
+
+-- | The usage dimension does not match one of the @UsageDimensions@
+-- associated with products.
+_InvalidUsageDimensionException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_InvalidUsageDimensionException =
+  Core._MatchServiceError
+    defaultService
+    "InvalidUsageDimensionException"
+
+-- | AWS Marketplace does not support metering usage from the underlying
+-- platform. Currently, Amazon ECS, Amazon EKS, and AWS Fargate are
+-- supported.
+_PlatformNotSupportedException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_PlatformNotSupportedException =
+  Core._MatchServiceError
+    defaultService
+    "PlatformNotSupportedException"
+
+-- | The calls to the API are throttled.
+_ThrottlingException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ThrottlingException =
+  Core._MatchServiceError
+    defaultService
+    "ThrottlingException"
+
+-- | The @timestamp@ value passed in the @UsageRecord@ is out of allowed
+-- range.
+--
+-- For @BatchMeterUsage@, if any of the records are outside of the allowed
+-- range, the entire batch is not processed. You must remove invalid
+-- records and try again.
+_TimestampOutOfBoundsException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_TimestampOutOfBoundsException =
+  Core._MatchServiceError
+    defaultService
+    "TimestampOutOfBoundsException"
diff --git a/gen/Amazonka/MarketplaceMetering/Types/Tag.hs b/gen/Amazonka/MarketplaceMetering/Types/Tag.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MarketplaceMetering/Types/Tag.hs
@@ -0,0 +1,100 @@
+{-# 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.MarketplaceMetering.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.MarketplaceMetering.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
+
+-- | Metadata assigned to an allocation. Each tag is made up of a @key@ and a
+-- @value@.
+--
+-- /See:/ 'newTag' smart constructor.
+data Tag = Tag'
+  { -- | One part of a key-value pair that makes up a @tag@. A @key@ is a label
+    -- that acts like a category for the specific tag values.
+    key :: Prelude.Text,
+    -- | One part of a key-value pair that makes 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 label
+-- that acts like a category for the specific tag values.
+--
+-- 'value', 'tag_value' - One part of a key-value pair that makes 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 label
+-- that acts like a category for the 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 makes 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
+
+instance Data.ToJSON Tag where
+  toJSON Tag' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("Key" Data..= key),
+            Prelude.Just ("Value" Data..= value)
+          ]
+      )
diff --git a/gen/Amazonka/MarketplaceMetering/Types/UsageAllocation.hs b/gen/Amazonka/MarketplaceMetering/Types/UsageAllocation.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MarketplaceMetering/Types/UsageAllocation.hs
@@ -0,0 +1,105 @@
+{-# 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.MarketplaceMetering.Types.UsageAllocation
+-- 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.MarketplaceMetering.Types.UsageAllocation where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MarketplaceMetering.Types.Tag
+import qualified Amazonka.Prelude as Prelude
+
+-- | Usage allocations allow you to split usage into buckets by tags.
+--
+-- Each @UsageAllocation@ indicates the usage quantity for a specific set
+-- of tags.
+--
+-- /See:/ 'newUsageAllocation' smart constructor.
+data UsageAllocation = UsageAllocation'
+  { -- | The set of tags that define the bucket of usage. For the bucket of items
+    -- with no tags, this parameter can be left out.
+    tags :: Prelude.Maybe (Prelude.NonEmpty Tag),
+    -- | The total quantity allocated to this bucket of usage.
+    allocatedUsageQuantity :: Prelude.Natural
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UsageAllocation' 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:
+--
+-- 'tags', 'usageAllocation_tags' - The set of tags that define the bucket of usage. For the bucket of items
+-- with no tags, this parameter can be left out.
+--
+-- 'allocatedUsageQuantity', 'usageAllocation_allocatedUsageQuantity' - The total quantity allocated to this bucket of usage.
+newUsageAllocation ::
+  -- | 'allocatedUsageQuantity'
+  Prelude.Natural ->
+  UsageAllocation
+newUsageAllocation pAllocatedUsageQuantity_ =
+  UsageAllocation'
+    { tags = Prelude.Nothing,
+      allocatedUsageQuantity = pAllocatedUsageQuantity_
+    }
+
+-- | The set of tags that define the bucket of usage. For the bucket of items
+-- with no tags, this parameter can be left out.
+usageAllocation_tags :: Lens.Lens' UsageAllocation (Prelude.Maybe (Prelude.NonEmpty Tag))
+usageAllocation_tags = Lens.lens (\UsageAllocation' {tags} -> tags) (\s@UsageAllocation' {} a -> s {tags = a} :: UsageAllocation) Prelude.. Lens.mapping Lens.coerced
+
+-- | The total quantity allocated to this bucket of usage.
+usageAllocation_allocatedUsageQuantity :: Lens.Lens' UsageAllocation Prelude.Natural
+usageAllocation_allocatedUsageQuantity = Lens.lens (\UsageAllocation' {allocatedUsageQuantity} -> allocatedUsageQuantity) (\s@UsageAllocation' {} a -> s {allocatedUsageQuantity = a} :: UsageAllocation)
+
+instance Data.FromJSON UsageAllocation where
+  parseJSON =
+    Data.withObject
+      "UsageAllocation"
+      ( \x ->
+          UsageAllocation'
+            Prelude.<$> (x Data..:? "Tags")
+            Prelude.<*> (x Data..: "AllocatedUsageQuantity")
+      )
+
+instance Prelude.Hashable UsageAllocation where
+  hashWithSalt _salt UsageAllocation' {..} =
+    _salt
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` allocatedUsageQuantity
+
+instance Prelude.NFData UsageAllocation where
+  rnf UsageAllocation' {..} =
+    Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf allocatedUsageQuantity
+
+instance Data.ToJSON UsageAllocation where
+  toJSON UsageAllocation' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Tags" Data..=) Prelude.<$> tags,
+            Prelude.Just
+              ( "AllocatedUsageQuantity"
+                  Data..= allocatedUsageQuantity
+              )
+          ]
+      )
diff --git a/gen/Amazonka/MarketplaceMetering/Types/UsageRecord.hs b/gen/Amazonka/MarketplaceMetering/Types/UsageRecord.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MarketplaceMetering/Types/UsageRecord.hs
@@ -0,0 +1,178 @@
+{-# 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.MarketplaceMetering.Types.UsageRecord
+-- 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.MarketplaceMetering.Types.UsageRecord where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MarketplaceMetering.Types.UsageAllocation
+import qualified Amazonka.Prelude as Prelude
+
+-- | A @UsageRecord@ indicates a quantity of usage for a given product,
+-- customer, dimension and time.
+--
+-- Multiple requests with the same @UsageRecords@ as input will be
+-- de-duplicated to prevent double charges.
+--
+-- /See:/ 'newUsageRecord' smart constructor.
+data UsageRecord = UsageRecord'
+  { -- | The quantity of usage consumed by the customer for the given dimension
+    -- and time. Defaults to @0@ if not specified.
+    quantity :: Prelude.Maybe Prelude.Natural,
+    -- | The set of @UsageAllocations@ to submit. The sum of all
+    -- @UsageAllocation@ quantities must equal the Quantity of the
+    -- @UsageRecord@.
+    usageAllocations :: Prelude.Maybe (Prelude.NonEmpty UsageAllocation),
+    -- | Timestamp, in UTC, for which the usage is being reported.
+    --
+    -- Your application can meter usage for up to one hour in the past. Make
+    -- sure the @timestamp@ value is not before the start of the software
+    -- usage.
+    timestamp :: Data.POSIX,
+    -- | The @CustomerIdentifier@ is obtained through the @ResolveCustomer@
+    -- operation and represents an individual buyer in your application.
+    customerIdentifier :: Prelude.Text,
+    -- | During the process of registering a product on AWS Marketplace,
+    -- dimensions are specified. These represent different units of value in
+    -- your application.
+    dimension :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UsageRecord' 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:
+--
+-- 'quantity', 'usageRecord_quantity' - The quantity of usage consumed by the customer for the given dimension
+-- and time. Defaults to @0@ if not specified.
+--
+-- 'usageAllocations', 'usageRecord_usageAllocations' - The set of @UsageAllocations@ to submit. The sum of all
+-- @UsageAllocation@ quantities must equal the Quantity of the
+-- @UsageRecord@.
+--
+-- 'timestamp', 'usageRecord_timestamp' - Timestamp, in UTC, for which the usage is being reported.
+--
+-- Your application can meter usage for up to one hour in the past. Make
+-- sure the @timestamp@ value is not before the start of the software
+-- usage.
+--
+-- 'customerIdentifier', 'usageRecord_customerIdentifier' - The @CustomerIdentifier@ is obtained through the @ResolveCustomer@
+-- operation and represents an individual buyer in your application.
+--
+-- 'dimension', 'usageRecord_dimension' - During the process of registering a product on AWS Marketplace,
+-- dimensions are specified. These represent different units of value in
+-- your application.
+newUsageRecord ::
+  -- | 'timestamp'
+  Prelude.UTCTime ->
+  -- | 'customerIdentifier'
+  Prelude.Text ->
+  -- | 'dimension'
+  Prelude.Text ->
+  UsageRecord
+newUsageRecord
+  pTimestamp_
+  pCustomerIdentifier_
+  pDimension_ =
+    UsageRecord'
+      { quantity = Prelude.Nothing,
+        usageAllocations = Prelude.Nothing,
+        timestamp = Data._Time Lens.# pTimestamp_,
+        customerIdentifier = pCustomerIdentifier_,
+        dimension = pDimension_
+      }
+
+-- | The quantity of usage consumed by the customer for the given dimension
+-- and time. Defaults to @0@ if not specified.
+usageRecord_quantity :: Lens.Lens' UsageRecord (Prelude.Maybe Prelude.Natural)
+usageRecord_quantity = Lens.lens (\UsageRecord' {quantity} -> quantity) (\s@UsageRecord' {} a -> s {quantity = a} :: UsageRecord)
+
+-- | The set of @UsageAllocations@ to submit. The sum of all
+-- @UsageAllocation@ quantities must equal the Quantity of the
+-- @UsageRecord@.
+usageRecord_usageAllocations :: Lens.Lens' UsageRecord (Prelude.Maybe (Prelude.NonEmpty UsageAllocation))
+usageRecord_usageAllocations = Lens.lens (\UsageRecord' {usageAllocations} -> usageAllocations) (\s@UsageRecord' {} a -> s {usageAllocations = a} :: UsageRecord) Prelude.. Lens.mapping Lens.coerced
+
+-- | Timestamp, in UTC, for which the usage is being reported.
+--
+-- Your application can meter usage for up to one hour in the past. Make
+-- sure the @timestamp@ value is not before the start of the software
+-- usage.
+usageRecord_timestamp :: Lens.Lens' UsageRecord Prelude.UTCTime
+usageRecord_timestamp = Lens.lens (\UsageRecord' {timestamp} -> timestamp) (\s@UsageRecord' {} a -> s {timestamp = a} :: UsageRecord) Prelude.. Data._Time
+
+-- | The @CustomerIdentifier@ is obtained through the @ResolveCustomer@
+-- operation and represents an individual buyer in your application.
+usageRecord_customerIdentifier :: Lens.Lens' UsageRecord Prelude.Text
+usageRecord_customerIdentifier = Lens.lens (\UsageRecord' {customerIdentifier} -> customerIdentifier) (\s@UsageRecord' {} a -> s {customerIdentifier = a} :: UsageRecord)
+
+-- | During the process of registering a product on AWS Marketplace,
+-- dimensions are specified. These represent different units of value in
+-- your application.
+usageRecord_dimension :: Lens.Lens' UsageRecord Prelude.Text
+usageRecord_dimension = Lens.lens (\UsageRecord' {dimension} -> dimension) (\s@UsageRecord' {} a -> s {dimension = a} :: UsageRecord)
+
+instance Data.FromJSON UsageRecord where
+  parseJSON =
+    Data.withObject
+      "UsageRecord"
+      ( \x ->
+          UsageRecord'
+            Prelude.<$> (x Data..:? "Quantity")
+            Prelude.<*> (x Data..:? "UsageAllocations")
+            Prelude.<*> (x Data..: "Timestamp")
+            Prelude.<*> (x Data..: "CustomerIdentifier")
+            Prelude.<*> (x Data..: "Dimension")
+      )
+
+instance Prelude.Hashable UsageRecord where
+  hashWithSalt _salt UsageRecord' {..} =
+    _salt
+      `Prelude.hashWithSalt` quantity
+      `Prelude.hashWithSalt` usageAllocations
+      `Prelude.hashWithSalt` timestamp
+      `Prelude.hashWithSalt` customerIdentifier
+      `Prelude.hashWithSalt` dimension
+
+instance Prelude.NFData UsageRecord where
+  rnf UsageRecord' {..} =
+    Prelude.rnf quantity
+      `Prelude.seq` Prelude.rnf usageAllocations
+      `Prelude.seq` Prelude.rnf timestamp
+      `Prelude.seq` Prelude.rnf customerIdentifier
+      `Prelude.seq` Prelude.rnf dimension
+
+instance Data.ToJSON UsageRecord where
+  toJSON UsageRecord' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Quantity" Data..=) Prelude.<$> quantity,
+            ("UsageAllocations" Data..=)
+              Prelude.<$> usageAllocations,
+            Prelude.Just ("Timestamp" Data..= timestamp),
+            Prelude.Just
+              ("CustomerIdentifier" Data..= customerIdentifier),
+            Prelude.Just ("Dimension" Data..= dimension)
+          ]
+      )
diff --git a/gen/Amazonka/MarketplaceMetering/Types/UsageRecordResult.hs b/gen/Amazonka/MarketplaceMetering/Types/UsageRecordResult.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MarketplaceMetering/Types/UsageRecordResult.hs
@@ -0,0 +1,163 @@
+{-# 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.MarketplaceMetering.Types.UsageRecordResult
+-- 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.MarketplaceMetering.Types.UsageRecordResult where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MarketplaceMetering.Types.UsageRecord
+import Amazonka.MarketplaceMetering.Types.UsageRecordResultStatus
+import qualified Amazonka.Prelude as Prelude
+
+-- | A @UsageRecordResult@ indicates the status of a given @UsageRecord@
+-- processed by @BatchMeterUsage@.
+--
+-- /See:/ 'newUsageRecordResult' smart constructor.
+data UsageRecordResult = UsageRecordResult'
+  { -- | The @MeteringRecordId@ is a unique identifier for this metering event.
+    meteringRecordId :: Prelude.Maybe Prelude.Text,
+    -- | The @UsageRecordResult@ @Status@ indicates the status of an individual
+    -- @UsageRecord@ processed by @BatchMeterUsage@.
+    --
+    -- -   /Success/- The @UsageRecord@ was accepted and honored by
+    --     @BatchMeterUsage@.
+    --
+    -- -   /CustomerNotSubscribed/- The @CustomerIdentifier@ specified is not
+    --     able to use your product. The @UsageRecord@ was not honored. There
+    --     are three causes for this result:
+    --
+    --     -   The customer identifier is invalid.
+    --
+    --     -   The customer identifier provided in the metering record does not
+    --         have an active agreement or subscription with this product.
+    --         Future @UsageRecords@ for this customer will fail until the
+    --         customer subscribes to your product.
+    --
+    --     -   The customer\'s AWS account was suspended.
+    --
+    -- -   /DuplicateRecord/- Indicates that the @UsageRecord@ was invalid and
+    --     not honored. A previously metered @UsageRecord@ had the same
+    --     customer, dimension, and time, but a different quantity.
+    status :: Prelude.Maybe UsageRecordResultStatus,
+    -- | The @UsageRecord@ that was part of the @BatchMeterUsage@ request.
+    usageRecord :: Prelude.Maybe UsageRecord
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UsageRecordResult' 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:
+--
+-- 'meteringRecordId', 'usageRecordResult_meteringRecordId' - The @MeteringRecordId@ is a unique identifier for this metering event.
+--
+-- 'status', 'usageRecordResult_status' - The @UsageRecordResult@ @Status@ indicates the status of an individual
+-- @UsageRecord@ processed by @BatchMeterUsage@.
+--
+-- -   /Success/- The @UsageRecord@ was accepted and honored by
+--     @BatchMeterUsage@.
+--
+-- -   /CustomerNotSubscribed/- The @CustomerIdentifier@ specified is not
+--     able to use your product. The @UsageRecord@ was not honored. There
+--     are three causes for this result:
+--
+--     -   The customer identifier is invalid.
+--
+--     -   The customer identifier provided in the metering record does not
+--         have an active agreement or subscription with this product.
+--         Future @UsageRecords@ for this customer will fail until the
+--         customer subscribes to your product.
+--
+--     -   The customer\'s AWS account was suspended.
+--
+-- -   /DuplicateRecord/- Indicates that the @UsageRecord@ was invalid and
+--     not honored. A previously metered @UsageRecord@ had the same
+--     customer, dimension, and time, but a different quantity.
+--
+-- 'usageRecord', 'usageRecordResult_usageRecord' - The @UsageRecord@ that was part of the @BatchMeterUsage@ request.
+newUsageRecordResult ::
+  UsageRecordResult
+newUsageRecordResult =
+  UsageRecordResult'
+    { meteringRecordId =
+        Prelude.Nothing,
+      status = Prelude.Nothing,
+      usageRecord = Prelude.Nothing
+    }
+
+-- | The @MeteringRecordId@ is a unique identifier for this metering event.
+usageRecordResult_meteringRecordId :: Lens.Lens' UsageRecordResult (Prelude.Maybe Prelude.Text)
+usageRecordResult_meteringRecordId = Lens.lens (\UsageRecordResult' {meteringRecordId} -> meteringRecordId) (\s@UsageRecordResult' {} a -> s {meteringRecordId = a} :: UsageRecordResult)
+
+-- | The @UsageRecordResult@ @Status@ indicates the status of an individual
+-- @UsageRecord@ processed by @BatchMeterUsage@.
+--
+-- -   /Success/- The @UsageRecord@ was accepted and honored by
+--     @BatchMeterUsage@.
+--
+-- -   /CustomerNotSubscribed/- The @CustomerIdentifier@ specified is not
+--     able to use your product. The @UsageRecord@ was not honored. There
+--     are three causes for this result:
+--
+--     -   The customer identifier is invalid.
+--
+--     -   The customer identifier provided in the metering record does not
+--         have an active agreement or subscription with this product.
+--         Future @UsageRecords@ for this customer will fail until the
+--         customer subscribes to your product.
+--
+--     -   The customer\'s AWS account was suspended.
+--
+-- -   /DuplicateRecord/- Indicates that the @UsageRecord@ was invalid and
+--     not honored. A previously metered @UsageRecord@ had the same
+--     customer, dimension, and time, but a different quantity.
+usageRecordResult_status :: Lens.Lens' UsageRecordResult (Prelude.Maybe UsageRecordResultStatus)
+usageRecordResult_status = Lens.lens (\UsageRecordResult' {status} -> status) (\s@UsageRecordResult' {} a -> s {status = a} :: UsageRecordResult)
+
+-- | The @UsageRecord@ that was part of the @BatchMeterUsage@ request.
+usageRecordResult_usageRecord :: Lens.Lens' UsageRecordResult (Prelude.Maybe UsageRecord)
+usageRecordResult_usageRecord = Lens.lens (\UsageRecordResult' {usageRecord} -> usageRecord) (\s@UsageRecordResult' {} a -> s {usageRecord = a} :: UsageRecordResult)
+
+instance Data.FromJSON UsageRecordResult where
+  parseJSON =
+    Data.withObject
+      "UsageRecordResult"
+      ( \x ->
+          UsageRecordResult'
+            Prelude.<$> (x Data..:? "MeteringRecordId")
+            Prelude.<*> (x Data..:? "Status")
+            Prelude.<*> (x Data..:? "UsageRecord")
+      )
+
+instance Prelude.Hashable UsageRecordResult where
+  hashWithSalt _salt UsageRecordResult' {..} =
+    _salt
+      `Prelude.hashWithSalt` meteringRecordId
+      `Prelude.hashWithSalt` status
+      `Prelude.hashWithSalt` usageRecord
+
+instance Prelude.NFData UsageRecordResult where
+  rnf UsageRecordResult' {..} =
+    Prelude.rnf meteringRecordId
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf usageRecord
diff --git a/gen/Amazonka/MarketplaceMetering/Types/UsageRecordResultStatus.hs b/gen/Amazonka/MarketplaceMetering/Types/UsageRecordResultStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MarketplaceMetering/Types/UsageRecordResultStatus.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.MarketplaceMetering.Types.UsageRecordResultStatus
+-- 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.MarketplaceMetering.Types.UsageRecordResultStatus
+  ( UsageRecordResultStatus
+      ( ..,
+        UsageRecordResultStatus_CustomerNotSubscribed,
+        UsageRecordResultStatus_DuplicateRecord,
+        UsageRecordResultStatus_Success
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype UsageRecordResultStatus = UsageRecordResultStatus'
+  { fromUsageRecordResultStatus ::
+      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 UsageRecordResultStatus_CustomerNotSubscribed :: UsageRecordResultStatus
+pattern UsageRecordResultStatus_CustomerNotSubscribed = UsageRecordResultStatus' "CustomerNotSubscribed"
+
+pattern UsageRecordResultStatus_DuplicateRecord :: UsageRecordResultStatus
+pattern UsageRecordResultStatus_DuplicateRecord = UsageRecordResultStatus' "DuplicateRecord"
+
+pattern UsageRecordResultStatus_Success :: UsageRecordResultStatus
+pattern UsageRecordResultStatus_Success = UsageRecordResultStatus' "Success"
+
+{-# COMPLETE
+  UsageRecordResultStatus_CustomerNotSubscribed,
+  UsageRecordResultStatus_DuplicateRecord,
+  UsageRecordResultStatus_Success,
+  UsageRecordResultStatus'
+  #-}
diff --git a/gen/Amazonka/MarketplaceMetering/Waiters.hs b/gen/Amazonka/MarketplaceMetering/Waiters.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MarketplaceMetering/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.MarketplaceMetering.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.MarketplaceMetering.Waiters where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MarketplaceMetering.Lens
+import Amazonka.MarketplaceMetering.Types
+import qualified Amazonka.Prelude as Prelude
diff --git a/gen/Network/AWS/MarketplaceMetering.hs b/gen/Network/AWS/MarketplaceMetering.hs
deleted file mode 100644
--- a/gen/Network/AWS/MarketplaceMetering.hs
+++ /dev/null
@@ -1,142 +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.MarketplaceMetering
--- 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)
---
--- __AWS Marketplace Metering Service__
---
--- This reference provides descriptions of the low-level AWS Marketplace Metering Service API.
---
--- AWS Marketplace sellers can use this API to submit usage data for custom usage dimensions.
---
--- __Submitting Metering Records__
---
---     * /MeterUsage/ - Submits the metering record for a Marketplace product. MeterUsage is called from an EC2 instance.
---
---     * /BatchMeterUsage/ - Submits the metering record for a set of customers. BatchMeterUsage is called from a software-as-a-service (SaaS) application.
---
---
---
--- __Accepting New Customers__
---
---     * /ResolveCustomer/ - Called by a SaaS application during the registration process. When a buyer visits your website during the registration process, the buyer submits a Registration Token through the browser. The Registration Token is resolved through this API to obtain a CustomerIdentifier and Product Code.
---
---
---
-module Network.AWS.MarketplaceMetering
-    (
-    -- * Service Configuration
-      marketplaceMetering
-
-    -- * Errors
-    -- $errors
-
-    -- ** InvalidEndpointRegionException
-    , _InvalidEndpointRegionException
-
-    -- ** InvalidProductCodeException
-    , _InvalidProductCodeException
-
-    -- ** InvalidUsageDimensionException
-    , _InvalidUsageDimensionException
-
-    -- ** DuplicateRequestException
-    , _DuplicateRequestException
-
-    -- ** TimestampOutOfBoundsException
-    , _TimestampOutOfBoundsException
-
-    -- ** ThrottlingException
-    , _ThrottlingException
-
-    -- ** InternalServiceErrorException
-    , _InternalServiceErrorException
-
-    -- ** InvalidTokenException
-    , _InvalidTokenException
-
-    -- ** ExpiredTokenException
-    , _ExpiredTokenException
-
-    -- ** InvalidCustomerIdentifierException
-    , _InvalidCustomerIdentifierException
-
-    -- * Waiters
-    -- $waiters
-
-    -- * Operations
-    -- $operations
-
-    -- ** BatchMeterUsage
-    , module Network.AWS.MarketplaceMetering.BatchMeterUsage
-
-    -- ** ResolveCustomer
-    , module Network.AWS.MarketplaceMetering.ResolveCustomer
-
-    -- ** MeterUsage
-    , module Network.AWS.MarketplaceMetering.MeterUsage
-
-    -- * Types
-
-    -- ** UsageRecordResultStatus
-    , UsageRecordResultStatus (..)
-
-    -- ** UsageRecord
-    , UsageRecord
-    , usageRecord
-    , urTimestamp
-    , urCustomerIdentifier
-    , urDimension
-    , urQuantity
-
-    -- ** UsageRecordResult
-    , UsageRecordResult
-    , usageRecordResult
-    , urrStatus
-    , urrUsageRecord
-    , urrMeteringRecordId
-    ) where
-
-import Network.AWS.MarketplaceMetering.BatchMeterUsage
-import Network.AWS.MarketplaceMetering.MeterUsage
-import Network.AWS.MarketplaceMetering.ResolveCustomer
-import Network.AWS.MarketplaceMetering.Types
-import Network.AWS.MarketplaceMetering.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 'MarketplaceMetering'.
--}
-
-{- $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/MarketplaceMetering/BatchMeterUsage.hs b/gen/Network/AWS/MarketplaceMetering/BatchMeterUsage.hs
deleted file mode 100644
--- a/gen/Network/AWS/MarketplaceMetering/BatchMeterUsage.hs
+++ /dev/null
@@ -1,170 +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.MarketplaceMetering.BatchMeterUsage
--- 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)
---
--- BatchMeterUsage is called from a SaaS application listed on the AWS Marketplace to post metering records for a set of customers.
---
---
--- For identical requests, the API is idempotent; requests can be retried with the same records or a subset of the input records.
---
--- Every request to BatchMeterUsage is for one product. If you need to meter usage for multiple products, you must make multiple calls to BatchMeterUsage.
---
--- BatchMeterUsage can process up to 25 UsageRecords at a time.
---
-module Network.AWS.MarketplaceMetering.BatchMeterUsage
-    (
-    -- * Creating a Request
-      batchMeterUsage
-    , BatchMeterUsage
-    -- * Request Lenses
-    , bmuUsageRecords
-    , bmuProductCode
-
-    -- * Destructuring the Response
-    , batchMeterUsageResponse
-    , BatchMeterUsageResponse
-    -- * Response Lenses
-    , bmursResults
-    , bmursUnprocessedRecords
-    , bmursResponseStatus
-    ) where
-
-import Network.AWS.Lens
-import Network.AWS.MarketplaceMetering.Types
-import Network.AWS.MarketplaceMetering.Types.Product
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-
--- | A BatchMeterUsageRequest contains UsageRecords, which indicate quantities of usage within your application.
---
---
---
--- /See:/ 'batchMeterUsage' smart constructor.
-data BatchMeterUsage = BatchMeterUsage'
-  { _bmuUsageRecords :: ![UsageRecord]
-  , _bmuProductCode  :: !Text
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'BatchMeterUsage' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'bmuUsageRecords' - The set of UsageRecords to submit. BatchMeterUsage accepts up to 25 UsageRecords at a time.
---
--- * 'bmuProductCode' - Product code is used to uniquely identify a product in AWS Marketplace. The product code should be the same as the one used during the publishing of a new product.
-batchMeterUsage
-    :: Text -- ^ 'bmuProductCode'
-    -> BatchMeterUsage
-batchMeterUsage pProductCode_ =
-  BatchMeterUsage' {_bmuUsageRecords = mempty, _bmuProductCode = pProductCode_}
-
-
--- | The set of UsageRecords to submit. BatchMeterUsage accepts up to 25 UsageRecords at a time.
-bmuUsageRecords :: Lens' BatchMeterUsage [UsageRecord]
-bmuUsageRecords = lens _bmuUsageRecords (\ s a -> s{_bmuUsageRecords = a}) . _Coerce
-
--- | Product code is used to uniquely identify a product in AWS Marketplace. The product code should be the same as the one used during the publishing of a new product.
-bmuProductCode :: Lens' BatchMeterUsage Text
-bmuProductCode = lens _bmuProductCode (\ s a -> s{_bmuProductCode = a})
-
-instance AWSRequest BatchMeterUsage where
-        type Rs BatchMeterUsage = BatchMeterUsageResponse
-        request = postJSON marketplaceMetering
-        response
-          = receiveJSON
-              (\ s h x ->
-                 BatchMeterUsageResponse' <$>
-                   (x .?> "Results" .!@ mempty) <*>
-                     (x .?> "UnprocessedRecords" .!@ mempty)
-                     <*> (pure (fromEnum s)))
-
-instance Hashable BatchMeterUsage where
-
-instance NFData BatchMeterUsage where
-
-instance ToHeaders BatchMeterUsage where
-        toHeaders
-          = const
-              (mconcat
-                 ["X-Amz-Target" =#
-                    ("AWSMPMeteringService.BatchMeterUsage" ::
-                       ByteString),
-                  "Content-Type" =#
-                    ("application/x-amz-json-1.1" :: ByteString)])
-
-instance ToJSON BatchMeterUsage where
-        toJSON BatchMeterUsage'{..}
-          = object
-              (catMaybes
-                 [Just ("UsageRecords" .= _bmuUsageRecords),
-                  Just ("ProductCode" .= _bmuProductCode)])
-
-instance ToPath BatchMeterUsage where
-        toPath = const "/"
-
-instance ToQuery BatchMeterUsage where
-        toQuery = const mempty
-
--- | Contains the UsageRecords processed by BatchMeterUsage and any records that have failed due to transient error.
---
---
---
--- /See:/ 'batchMeterUsageResponse' smart constructor.
-data BatchMeterUsageResponse = BatchMeterUsageResponse'
-  { _bmursResults            :: !(Maybe [UsageRecordResult])
-  , _bmursUnprocessedRecords :: !(Maybe [UsageRecord])
-  , _bmursResponseStatus     :: !Int
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'BatchMeterUsageResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'bmursResults' - Contains all UsageRecords processed by BatchMeterUsage. These records were either honored by AWS Marketplace Metering Service or were invalid.
---
--- * 'bmursUnprocessedRecords' - Contains all UsageRecords that were not processed by BatchMeterUsage. This is a list of UsageRecords. You can retry the failed request by making another BatchMeterUsage call with this list as input in the BatchMeterUsageRequest.
---
--- * 'bmursResponseStatus' - -- | The response status code.
-batchMeterUsageResponse
-    :: Int -- ^ 'bmursResponseStatus'
-    -> BatchMeterUsageResponse
-batchMeterUsageResponse pResponseStatus_ =
-  BatchMeterUsageResponse'
-    { _bmursResults = Nothing
-    , _bmursUnprocessedRecords = Nothing
-    , _bmursResponseStatus = pResponseStatus_
-    }
-
-
--- | Contains all UsageRecords processed by BatchMeterUsage. These records were either honored by AWS Marketplace Metering Service or were invalid.
-bmursResults :: Lens' BatchMeterUsageResponse [UsageRecordResult]
-bmursResults = lens _bmursResults (\ s a -> s{_bmursResults = a}) . _Default . _Coerce
-
--- | Contains all UsageRecords that were not processed by BatchMeterUsage. This is a list of UsageRecords. You can retry the failed request by making another BatchMeterUsage call with this list as input in the BatchMeterUsageRequest.
-bmursUnprocessedRecords :: Lens' BatchMeterUsageResponse [UsageRecord]
-bmursUnprocessedRecords = lens _bmursUnprocessedRecords (\ s a -> s{_bmursUnprocessedRecords = a}) . _Default . _Coerce
-
--- | -- | The response status code.
-bmursResponseStatus :: Lens' BatchMeterUsageResponse Int
-bmursResponseStatus = lens _bmursResponseStatus (\ s a -> s{_bmursResponseStatus = a})
-
-instance NFData BatchMeterUsageResponse where
diff --git a/gen/Network/AWS/MarketplaceMetering/MeterUsage.hs b/gen/Network/AWS/MarketplaceMetering/MeterUsage.hs
deleted file mode 100644
--- a/gen/Network/AWS/MarketplaceMetering/MeterUsage.hs
+++ /dev/null
@@ -1,181 +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.MarketplaceMetering.MeterUsage
--- 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)
---
--- API to emit metering records. For identical requests, the API is idempotent. It simply returns the metering record ID.
---
---
--- MeterUsage is authenticated on the buyer's AWS account, generally when running from an EC2 instance on the AWS Marketplace.
---
-module Network.AWS.MarketplaceMetering.MeterUsage
-    (
-    -- * Creating a Request
-      meterUsage
-    , MeterUsage
-    -- * Request Lenses
-    , muProductCode
-    , muTimestamp
-    , muUsageDimension
-    , muUsageQuantity
-    , muDryRun
-
-    -- * Destructuring the Response
-    , meterUsageResponse
-    , MeterUsageResponse
-    -- * Response Lenses
-    , mursMeteringRecordId
-    , mursResponseStatus
-    ) where
-
-import Network.AWS.Lens
-import Network.AWS.MarketplaceMetering.Types
-import Network.AWS.MarketplaceMetering.Types.Product
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-
--- | /See:/ 'meterUsage' smart constructor.
-data MeterUsage = MeterUsage'
-  { _muProductCode    :: !Text
-  , _muTimestamp      :: !POSIX
-  , _muUsageDimension :: !Text
-  , _muUsageQuantity  :: !Nat
-  , _muDryRun         :: !Bool
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'MeterUsage' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'muProductCode' - Product code is used to uniquely identify a product in AWS Marketplace. The product code should be the same as the one used during the publishing of a new product.
---
--- * 'muTimestamp' - Timestamp of the hour, recorded in UTC. The seconds and milliseconds portions of the timestamp will be ignored.
---
--- * 'muUsageDimension' - It will be one of the fcp dimension name provided during the publishing of the product.
---
--- * 'muUsageQuantity' - Consumption value for the hour.
---
--- * 'muDryRun' - Checks whether you have the permissions required for the action, but does not make the request. If you have the permissions, the request returns DryRunOperation; otherwise, it returns UnauthorizedException.
-meterUsage
-    :: Text -- ^ 'muProductCode'
-    -> UTCTime -- ^ 'muTimestamp'
-    -> Text -- ^ 'muUsageDimension'
-    -> Natural -- ^ 'muUsageQuantity'
-    -> Bool -- ^ 'muDryRun'
-    -> MeterUsage
-meterUsage pProductCode_ pTimestamp_ pUsageDimension_ pUsageQuantity_ pDryRun_ =
-  MeterUsage'
-    { _muProductCode = pProductCode_
-    , _muTimestamp = _Time # pTimestamp_
-    , _muUsageDimension = pUsageDimension_
-    , _muUsageQuantity = _Nat # pUsageQuantity_
-    , _muDryRun = pDryRun_
-    }
-
-
--- | Product code is used to uniquely identify a product in AWS Marketplace. The product code should be the same as the one used during the publishing of a new product.
-muProductCode :: Lens' MeterUsage Text
-muProductCode = lens _muProductCode (\ s a -> s{_muProductCode = a})
-
--- | Timestamp of the hour, recorded in UTC. The seconds and milliseconds portions of the timestamp will be ignored.
-muTimestamp :: Lens' MeterUsage UTCTime
-muTimestamp = lens _muTimestamp (\ s a -> s{_muTimestamp = a}) . _Time
-
--- | It will be one of the fcp dimension name provided during the publishing of the product.
-muUsageDimension :: Lens' MeterUsage Text
-muUsageDimension = lens _muUsageDimension (\ s a -> s{_muUsageDimension = a})
-
--- | Consumption value for the hour.
-muUsageQuantity :: Lens' MeterUsage Natural
-muUsageQuantity = lens _muUsageQuantity (\ s a -> s{_muUsageQuantity = a}) . _Nat
-
--- | Checks whether you have the permissions required for the action, but does not make the request. If you have the permissions, the request returns DryRunOperation; otherwise, it returns UnauthorizedException.
-muDryRun :: Lens' MeterUsage Bool
-muDryRun = lens _muDryRun (\ s a -> s{_muDryRun = a})
-
-instance AWSRequest MeterUsage where
-        type Rs MeterUsage = MeterUsageResponse
-        request = postJSON marketplaceMetering
-        response
-          = receiveJSON
-              (\ s h x ->
-                 MeterUsageResponse' <$>
-                   (x .?> "MeteringRecordId") <*> (pure (fromEnum s)))
-
-instance Hashable MeterUsage where
-
-instance NFData MeterUsage where
-
-instance ToHeaders MeterUsage where
-        toHeaders
-          = const
-              (mconcat
-                 ["X-Amz-Target" =#
-                    ("AWSMPMeteringService.MeterUsage" :: ByteString),
-                  "Content-Type" =#
-                    ("application/x-amz-json-1.1" :: ByteString)])
-
-instance ToJSON MeterUsage where
-        toJSON MeterUsage'{..}
-          = object
-              (catMaybes
-                 [Just ("ProductCode" .= _muProductCode),
-                  Just ("Timestamp" .= _muTimestamp),
-                  Just ("UsageDimension" .= _muUsageDimension),
-                  Just ("UsageQuantity" .= _muUsageQuantity),
-                  Just ("DryRun" .= _muDryRun)])
-
-instance ToPath MeterUsage where
-        toPath = const "/"
-
-instance ToQuery MeterUsage where
-        toQuery = const mempty
-
--- | /See:/ 'meterUsageResponse' smart constructor.
-data MeterUsageResponse = MeterUsageResponse'
-  { _mursMeteringRecordId :: !(Maybe Text)
-  , _mursResponseStatus   :: !Int
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'MeterUsageResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'mursMeteringRecordId' - Undocumented member.
---
--- * 'mursResponseStatus' - -- | The response status code.
-meterUsageResponse
-    :: Int -- ^ 'mursResponseStatus'
-    -> MeterUsageResponse
-meterUsageResponse pResponseStatus_ =
-  MeterUsageResponse'
-    {_mursMeteringRecordId = Nothing, _mursResponseStatus = pResponseStatus_}
-
-
--- | Undocumented member.
-mursMeteringRecordId :: Lens' MeterUsageResponse (Maybe Text)
-mursMeteringRecordId = lens _mursMeteringRecordId (\ s a -> s{_mursMeteringRecordId = a})
-
--- | -- | The response status code.
-mursResponseStatus :: Lens' MeterUsageResponse Int
-mursResponseStatus = lens _mursResponseStatus (\ s a -> s{_mursResponseStatus = a})
-
-instance NFData MeterUsageResponse where
diff --git a/gen/Network/AWS/MarketplaceMetering/ResolveCustomer.hs b/gen/Network/AWS/MarketplaceMetering/ResolveCustomer.hs
deleted file mode 100644
--- a/gen/Network/AWS/MarketplaceMetering/ResolveCustomer.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.MarketplaceMetering.ResolveCustomer
--- 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)
---
--- ResolveCustomer is called by a SaaS application during the registration process. When a buyer visits your website during the registration process, the buyer submits a registration token through their browser. The registration token is resolved through this API to obtain a CustomerIdentifier and product code.
---
---
-module Network.AWS.MarketplaceMetering.ResolveCustomer
-    (
-    -- * Creating a Request
-      resolveCustomer
-    , ResolveCustomer
-    -- * Request Lenses
-    , rcRegistrationToken
-
-    -- * Destructuring the Response
-    , resolveCustomerResponse
-    , ResolveCustomerResponse
-    -- * Response Lenses
-    , rcrsCustomerIdentifier
-    , rcrsProductCode
-    , rcrsResponseStatus
-    ) where
-
-import Network.AWS.Lens
-import Network.AWS.MarketplaceMetering.Types
-import Network.AWS.MarketplaceMetering.Types.Product
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-
--- | Contains input to the ResolveCustomer operation.
---
---
---
--- /See:/ 'resolveCustomer' smart constructor.
-newtype ResolveCustomer = ResolveCustomer'
-  { _rcRegistrationToken :: Text
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'ResolveCustomer' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'rcRegistrationToken' - When a buyer visits your website during the registration process, the buyer submits a registration token through the browser. The registration token is resolved to obtain a CustomerIdentifier and product code.
-resolveCustomer
-    :: Text -- ^ 'rcRegistrationToken'
-    -> ResolveCustomer
-resolveCustomer pRegistrationToken_ =
-  ResolveCustomer' {_rcRegistrationToken = pRegistrationToken_}
-
-
--- | When a buyer visits your website during the registration process, the buyer submits a registration token through the browser. The registration token is resolved to obtain a CustomerIdentifier and product code.
-rcRegistrationToken :: Lens' ResolveCustomer Text
-rcRegistrationToken = lens _rcRegistrationToken (\ s a -> s{_rcRegistrationToken = a})
-
-instance AWSRequest ResolveCustomer where
-        type Rs ResolveCustomer = ResolveCustomerResponse
-        request = postJSON marketplaceMetering
-        response
-          = receiveJSON
-              (\ s h x ->
-                 ResolveCustomerResponse' <$>
-                   (x .?> "CustomerIdentifier") <*>
-                     (x .?> "ProductCode")
-                     <*> (pure (fromEnum s)))
-
-instance Hashable ResolveCustomer where
-
-instance NFData ResolveCustomer where
-
-instance ToHeaders ResolveCustomer where
-        toHeaders
-          = const
-              (mconcat
-                 ["X-Amz-Target" =#
-                    ("AWSMPMeteringService.ResolveCustomer" ::
-                       ByteString),
-                  "Content-Type" =#
-                    ("application/x-amz-json-1.1" :: ByteString)])
-
-instance ToJSON ResolveCustomer where
-        toJSON ResolveCustomer'{..}
-          = object
-              (catMaybes
-                 [Just ("RegistrationToken" .= _rcRegistrationToken)])
-
-instance ToPath ResolveCustomer where
-        toPath = const "/"
-
-instance ToQuery ResolveCustomer where
-        toQuery = const mempty
-
--- | The result of the ResolveCustomer operation. Contains the CustomerIdentifier and product code.
---
---
---
--- /See:/ 'resolveCustomerResponse' smart constructor.
-data ResolveCustomerResponse = ResolveCustomerResponse'
-  { _rcrsCustomerIdentifier :: !(Maybe Text)
-  , _rcrsProductCode        :: !(Maybe Text)
-  , _rcrsResponseStatus     :: !Int
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'ResolveCustomerResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'rcrsCustomerIdentifier' - The CustomerIdentifier is used to identify an individual customer in your application. Calls to BatchMeterUsage require CustomerIdentifiers for each UsageRecord.
---
--- * 'rcrsProductCode' - The product code is returned to confirm that the buyer is registering for your product. Subsequent BatchMeterUsage calls should be made using this product code.
---
--- * 'rcrsResponseStatus' - -- | The response status code.
-resolveCustomerResponse
-    :: Int -- ^ 'rcrsResponseStatus'
-    -> ResolveCustomerResponse
-resolveCustomerResponse pResponseStatus_ =
-  ResolveCustomerResponse'
-    { _rcrsCustomerIdentifier = Nothing
-    , _rcrsProductCode = Nothing
-    , _rcrsResponseStatus = pResponseStatus_
-    }
-
-
--- | The CustomerIdentifier is used to identify an individual customer in your application. Calls to BatchMeterUsage require CustomerIdentifiers for each UsageRecord.
-rcrsCustomerIdentifier :: Lens' ResolveCustomerResponse (Maybe Text)
-rcrsCustomerIdentifier = lens _rcrsCustomerIdentifier (\ s a -> s{_rcrsCustomerIdentifier = a})
-
--- | The product code is returned to confirm that the buyer is registering for your product. Subsequent BatchMeterUsage calls should be made using this product code.
-rcrsProductCode :: Lens' ResolveCustomerResponse (Maybe Text)
-rcrsProductCode = lens _rcrsProductCode (\ s a -> s{_rcrsProductCode = a})
-
--- | -- | The response status code.
-rcrsResponseStatus :: Lens' ResolveCustomerResponse Int
-rcrsResponseStatus = lens _rcrsResponseStatus (\ s a -> s{_rcrsResponseStatus = a})
-
-instance NFData ResolveCustomerResponse where
diff --git a/gen/Network/AWS/MarketplaceMetering/Types.hs b/gen/Network/AWS/MarketplaceMetering/Types.hs
deleted file mode 100644
--- a/gen/Network/AWS/MarketplaceMetering/Types.hs
+++ /dev/null
@@ -1,170 +0,0 @@
-{-# LANGUAGE OverloadedStrings #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.MarketplaceMetering.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.MarketplaceMetering.Types
-    (
-    -- * Service Configuration
-      marketplaceMetering
-
-    -- * Errors
-    , _InvalidEndpointRegionException
-    , _InvalidProductCodeException
-    , _InvalidUsageDimensionException
-    , _DuplicateRequestException
-    , _TimestampOutOfBoundsException
-    , _ThrottlingException
-    , _InternalServiceErrorException
-    , _InvalidTokenException
-    , _ExpiredTokenException
-    , _InvalidCustomerIdentifierException
-
-    -- * UsageRecordResultStatus
-    , UsageRecordResultStatus (..)
-
-    -- * UsageRecord
-    , UsageRecord
-    , usageRecord
-    , urTimestamp
-    , urCustomerIdentifier
-    , urDimension
-    , urQuantity
-
-    -- * UsageRecordResult
-    , UsageRecordResult
-    , usageRecordResult
-    , urrStatus
-    , urrUsageRecord
-    , urrMeteringRecordId
-    ) where
-
-import Network.AWS.Lens
-import Network.AWS.MarketplaceMetering.Types.Product
-import Network.AWS.MarketplaceMetering.Types.Sum
-import Network.AWS.Prelude
-import Network.AWS.Sign.V4
-
--- | API version @2016-01-14@ of the Amazon Marketplace Metering SDK configuration.
-marketplaceMetering :: Service
-marketplaceMetering =
-  Service
-    { _svcAbbrev = "MarketplaceMetering"
-    , _svcSigner = v4
-    , _svcPrefix = "metering.marketplace"
-    , _svcVersion = "2016-01-14"
-    , _svcEndpoint = defaultEndpoint marketplaceMetering
-    , _svcTimeout = Just 70
-    , _svcCheck = statusSuccess
-    , _svcError = parseJSONError "MarketplaceMetering"
-    , _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
-
-
--- | The endpoint being called is in a region different from your EC2 instance. The region of the Metering service endpoint and the region of the EC2 instance must match.
---
---
-_InvalidEndpointRegionException :: AsError a => Getting (First ServiceError) a ServiceError
-_InvalidEndpointRegionException =
-  _MatchServiceError marketplaceMetering "InvalidEndpointRegionException"
-
-
--- | The product code passed does not match the product code used for publishing the product.
---
---
-_InvalidProductCodeException :: AsError a => Getting (First ServiceError) a ServiceError
-_InvalidProductCodeException =
-  _MatchServiceError marketplaceMetering "InvalidProductCodeException"
-
-
--- | The usage dimension does not match one of the UsageDimensions associated with products.
---
---
-_InvalidUsageDimensionException :: AsError a => Getting (First ServiceError) a ServiceError
-_InvalidUsageDimensionException =
-  _MatchServiceError marketplaceMetering "InvalidUsageDimensionException"
-
-
--- | A metering record has already been emitted by the same EC2 instance for the given {usageDimension, timestamp} with a different usageQuantity.
---
---
-_DuplicateRequestException :: AsError a => Getting (First ServiceError) a ServiceError
-_DuplicateRequestException =
-  _MatchServiceError marketplaceMetering "DuplicateRequestException"
-
-
--- | The timestamp value passed in the meterUsage() is out of allowed range.
---
---
-_TimestampOutOfBoundsException :: AsError a => Getting (First ServiceError) a ServiceError
-_TimestampOutOfBoundsException =
-  _MatchServiceError marketplaceMetering "TimestampOutOfBoundsException"
-
-
--- | The calls to the MeterUsage API are throttled.
---
---
-_ThrottlingException :: AsError a => Getting (First ServiceError) a ServiceError
-_ThrottlingException =
-  _MatchServiceError marketplaceMetering "ThrottlingException"
-
-
--- | An internal error has occurred. Retry your request. If the problem persists, post a message with details on the AWS forums.
---
---
-_InternalServiceErrorException :: AsError a => Getting (First ServiceError) a ServiceError
-_InternalServiceErrorException =
-  _MatchServiceError marketplaceMetering "InternalServiceErrorException"
-
-
--- | Prism for InvalidTokenException' errors.
-_InvalidTokenException :: AsError a => Getting (First ServiceError) a ServiceError
-_InvalidTokenException =
-  _MatchServiceError marketplaceMetering "InvalidTokenException"
-
-
--- | The submitted registration token has expired. This can happen if the buyer's browser takes too long to redirect to your page, the buyer has resubmitted the registration token, or your application has held on to the registration token for too long. Your SaaS registration website should redeem this token as soon as it is submitted by the buyer's browser.
---
---
-_ExpiredTokenException :: AsError a => Getting (First ServiceError) a ServiceError
-_ExpiredTokenException =
-  _MatchServiceError marketplaceMetering "ExpiredTokenException"
-
-
--- | You have metered usage for a CustomerIdentifier that does not exist.
---
---
-_InvalidCustomerIdentifierException :: AsError a => Getting (First ServiceError) a ServiceError
-_InvalidCustomerIdentifierException =
-  _MatchServiceError marketplaceMetering "InvalidCustomerIdentifierException"
-
diff --git a/gen/Network/AWS/MarketplaceMetering/Types/Product.hs b/gen/Network/AWS/MarketplaceMetering/Types/Product.hs
deleted file mode 100644
--- a/gen/Network/AWS/MarketplaceMetering/Types/Product.hs
+++ /dev/null
@@ -1,156 +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.MarketplaceMetering.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.MarketplaceMetering.Types.Product where
-
-import Network.AWS.Lens
-import Network.AWS.MarketplaceMetering.Types.Sum
-import Network.AWS.Prelude
-
--- | A UsageRecord indicates a quantity of usage for a given product, customer, dimension and time.
---
---
--- Multiple requests with the same UsageRecords as input will be deduplicated to prevent double charges.
---
---
--- /See:/ 'usageRecord' smart constructor.
-data UsageRecord = UsageRecord'
-  { _urTimestamp          :: !POSIX
-  , _urCustomerIdentifier :: !Text
-  , _urDimension          :: !Text
-  , _urQuantity           :: !Nat
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'UsageRecord' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'urTimestamp' - Timestamp of the hour, recorded in UTC. The seconds and milliseconds portions of the timestamp will be ignored. Your application can meter usage for up to one hour in the past.
---
--- * 'urCustomerIdentifier' - The CustomerIdentifier is obtained through the ResolveCustomer operation and represents an individual buyer in your application.
---
--- * 'urDimension' - During the process of registering a product on AWS Marketplace, up to eight dimensions are specified. These represent different units of value in your application.
---
--- * 'urQuantity' - The quantity of usage consumed by the customer for the given dimension and time.
-usageRecord
-    :: UTCTime -- ^ 'urTimestamp'
-    -> Text -- ^ 'urCustomerIdentifier'
-    -> Text -- ^ 'urDimension'
-    -> Natural -- ^ 'urQuantity'
-    -> UsageRecord
-usageRecord pTimestamp_ pCustomerIdentifier_ pDimension_ pQuantity_ =
-  UsageRecord'
-    { _urTimestamp = _Time # pTimestamp_
-    , _urCustomerIdentifier = pCustomerIdentifier_
-    , _urDimension = pDimension_
-    , _urQuantity = _Nat # pQuantity_
-    }
-
-
--- | Timestamp of the hour, recorded in UTC. The seconds and milliseconds portions of the timestamp will be ignored. Your application can meter usage for up to one hour in the past.
-urTimestamp :: Lens' UsageRecord UTCTime
-urTimestamp = lens _urTimestamp (\ s a -> s{_urTimestamp = a}) . _Time
-
--- | The CustomerIdentifier is obtained through the ResolveCustomer operation and represents an individual buyer in your application.
-urCustomerIdentifier :: Lens' UsageRecord Text
-urCustomerIdentifier = lens _urCustomerIdentifier (\ s a -> s{_urCustomerIdentifier = a})
-
--- | During the process of registering a product on AWS Marketplace, up to eight dimensions are specified. These represent different units of value in your application.
-urDimension :: Lens' UsageRecord Text
-urDimension = lens _urDimension (\ s a -> s{_urDimension = a})
-
--- | The quantity of usage consumed by the customer for the given dimension and time.
-urQuantity :: Lens' UsageRecord Natural
-urQuantity = lens _urQuantity (\ s a -> s{_urQuantity = a}) . _Nat
-
-instance FromJSON UsageRecord where
-        parseJSON
-          = withObject "UsageRecord"
-              (\ x ->
-                 UsageRecord' <$>
-                   (x .: "Timestamp") <*> (x .: "CustomerIdentifier")
-                     <*> (x .: "Dimension")
-                     <*> (x .: "Quantity"))
-
-instance Hashable UsageRecord where
-
-instance NFData UsageRecord where
-
-instance ToJSON UsageRecord where
-        toJSON UsageRecord'{..}
-          = object
-              (catMaybes
-                 [Just ("Timestamp" .= _urTimestamp),
-                  Just ("CustomerIdentifier" .= _urCustomerIdentifier),
-                  Just ("Dimension" .= _urDimension),
-                  Just ("Quantity" .= _urQuantity)])
-
--- | A UsageRecordResult indicates the status of a given UsageRecord processed by BatchMeterUsage.
---
---
---
--- /See:/ 'usageRecordResult' smart constructor.
-data UsageRecordResult = UsageRecordResult'
-  { _urrStatus           :: !(Maybe UsageRecordResultStatus)
-  , _urrUsageRecord      :: !(Maybe UsageRecord)
-  , _urrMeteringRecordId :: !(Maybe Text)
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'UsageRecordResult' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'urrStatus' - The UsageRecordResult Status indicates the status of an individual UsageRecord processed by BatchMeterUsage.     * /Success/ - The UsageRecord was accepted and honored by BatchMeterUsage.     * /CustomerNotSubscribed/ - The CustomerIdentifier specified is not subscribed to your product. The UsageRecord was not honored. Future UsageRecords for this customer will fail until the customer subscribes to your product.     * /DuplicateRecord/ - Indicates that the UsageRecord was invalid and not honored. A previously metered UsageRecord had the same customer, dimension, and time, but a different quantity.
---
--- * 'urrUsageRecord' - The UsageRecord that was part of the BatchMeterUsage request.
---
--- * 'urrMeteringRecordId' - The MeteringRecordId is a unique identifier for this metering event.
-usageRecordResult
-    :: UsageRecordResult
-usageRecordResult =
-  UsageRecordResult'
-    { _urrStatus = Nothing
-    , _urrUsageRecord = Nothing
-    , _urrMeteringRecordId = Nothing
-    }
-
-
--- | The UsageRecordResult Status indicates the status of an individual UsageRecord processed by BatchMeterUsage.     * /Success/ - The UsageRecord was accepted and honored by BatchMeterUsage.     * /CustomerNotSubscribed/ - The CustomerIdentifier specified is not subscribed to your product. The UsageRecord was not honored. Future UsageRecords for this customer will fail until the customer subscribes to your product.     * /DuplicateRecord/ - Indicates that the UsageRecord was invalid and not honored. A previously metered UsageRecord had the same customer, dimension, and time, but a different quantity.
-urrStatus :: Lens' UsageRecordResult (Maybe UsageRecordResultStatus)
-urrStatus = lens _urrStatus (\ s a -> s{_urrStatus = a})
-
--- | The UsageRecord that was part of the BatchMeterUsage request.
-urrUsageRecord :: Lens' UsageRecordResult (Maybe UsageRecord)
-urrUsageRecord = lens _urrUsageRecord (\ s a -> s{_urrUsageRecord = a})
-
--- | The MeteringRecordId is a unique identifier for this metering event.
-urrMeteringRecordId :: Lens' UsageRecordResult (Maybe Text)
-urrMeteringRecordId = lens _urrMeteringRecordId (\ s a -> s{_urrMeteringRecordId = a})
-
-instance FromJSON UsageRecordResult where
-        parseJSON
-          = withObject "UsageRecordResult"
-              (\ x ->
-                 UsageRecordResult' <$>
-                   (x .:? "Status") <*> (x .:? "UsageRecord") <*>
-                     (x .:? "MeteringRecordId"))
-
-instance Hashable UsageRecordResult where
-
-instance NFData UsageRecordResult where
diff --git a/gen/Network/AWS/MarketplaceMetering/Types/Sum.hs b/gen/Network/AWS/MarketplaceMetering/Types/Sum.hs
deleted file mode 100644
--- a/gen/Network/AWS/MarketplaceMetering/Types/Sum.hs
+++ /dev/null
@@ -1,50 +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.MarketplaceMetering.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.MarketplaceMetering.Types.Sum where
-
-import Network.AWS.Prelude
-
-data UsageRecordResultStatus
-  = CustomerNotSubscribed
-  | DuplicateRecord
-  | Success
-  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
-
-
-instance FromText UsageRecordResultStatus where
-    parser = takeLowerText >>= \case
-        "customernotsubscribed" -> pure CustomerNotSubscribed
-        "duplicaterecord" -> pure DuplicateRecord
-        "success" -> pure Success
-        e -> fromTextError $ "Failure parsing UsageRecordResultStatus from value: '" <> e
-           <> "'. Accepted values: customernotsubscribed, duplicaterecord, success"
-
-instance ToText UsageRecordResultStatus where
-    toText = \case
-        CustomerNotSubscribed -> "CustomerNotSubscribed"
-        DuplicateRecord -> "DuplicateRecord"
-        Success -> "Success"
-
-instance Hashable     UsageRecordResultStatus
-instance NFData       UsageRecordResultStatus
-instance ToByteString UsageRecordResultStatus
-instance ToQuery      UsageRecordResultStatus
-instance ToHeader     UsageRecordResultStatus
-
-instance FromJSON UsageRecordResultStatus where
-    parseJSON = parseJSONText "UsageRecordResultStatus"
diff --git a/gen/Network/AWS/MarketplaceMetering/Waiters.hs b/gen/Network/AWS/MarketplaceMetering/Waiters.hs
deleted file mode 100644
--- a/gen/Network/AWS/MarketplaceMetering/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.MarketplaceMetering.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.MarketplaceMetering.Waiters where
-
-import Network.AWS.Lens
-import Network.AWS.MarketplaceMetering.Types
-import Network.AWS.Prelude
-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.MarketplaceMetering
+import Test.Amazonka.MarketplaceMetering.Internal
 import Test.Tasty
-import Test.AWS.MarketplaceMetering
-import Test.AWS.MarketplaceMetering.Internal
 
 main :: IO ()
-main = defaultMain $ testGroup "MarketplaceMetering"
-    [ testGroup "tests"    tests
-    , testGroup "fixtures" fixtures
-    ]
+main =
+  defaultMain $
+    testGroup
+      "MarketplaceMetering"
+      [ testGroup "tests" tests,
+        testGroup "fixtures" fixtures
+      ]
diff --git a/test/Test/AWS/Gen/MarketplaceMetering.hs b/test/Test/AWS/Gen/MarketplaceMetering.hs
deleted file mode 100644
--- a/test/Test/AWS/Gen/MarketplaceMetering.hs
+++ /dev/null
@@ -1,93 +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.MarketplaceMetering
--- 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.MarketplaceMetering where
-
-import Data.Proxy
-import Network.AWS.MarketplaceMetering
-import Test.AWS.Fixture
-import Test.AWS.MarketplaceMetering.Internal
-import Test.AWS.Prelude
-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"
---         [ requestBatchMeterUsage $
---             batchMeterUsage
---
---         , requestResolveCustomer $
---             resolveCustomer
---
---         , requestMeterUsage $
---             meterUsage
---
---           ]
-
---     , testGroup "response"
---         [ responseBatchMeterUsage $
---             batchMeterUsageResponse
---
---         , responseResolveCustomer $
---             resolveCustomerResponse
---
---         , responseMeterUsage $
---             meterUsageResponse
---
---           ]
---     ]
-
--- Requests
-
-requestBatchMeterUsage :: BatchMeterUsage -> TestTree
-requestBatchMeterUsage = req
-    "BatchMeterUsage"
-    "fixture/BatchMeterUsage.yaml"
-
-requestResolveCustomer :: ResolveCustomer -> TestTree
-requestResolveCustomer = req
-    "ResolveCustomer"
-    "fixture/ResolveCustomer.yaml"
-
-requestMeterUsage :: MeterUsage -> TestTree
-requestMeterUsage = req
-    "MeterUsage"
-    "fixture/MeterUsage.yaml"
-
--- Responses
-
-responseBatchMeterUsage :: BatchMeterUsageResponse -> TestTree
-responseBatchMeterUsage = res
-    "BatchMeterUsageResponse"
-    "fixture/BatchMeterUsageResponse.proto"
-    marketplaceMetering
-    (Proxy :: Proxy BatchMeterUsage)
-
-responseResolveCustomer :: ResolveCustomerResponse -> TestTree
-responseResolveCustomer = res
-    "ResolveCustomerResponse"
-    "fixture/ResolveCustomerResponse.proto"
-    marketplaceMetering
-    (Proxy :: Proxy ResolveCustomer)
-
-responseMeterUsage :: MeterUsageResponse -> TestTree
-responseMeterUsage = res
-    "MeterUsageResponse"
-    "fixture/MeterUsageResponse.proto"
-    marketplaceMetering
-    (Proxy :: Proxy MeterUsage)
diff --git a/test/Test/AWS/MarketplaceMetering.hs b/test/Test/AWS/MarketplaceMetering.hs
deleted file mode 100644
--- a/test/Test/AWS/MarketplaceMetering.hs
+++ /dev/null
@@ -1,23 +0,0 @@
-{-# LANGUAGE OverloadedStrings #-}
-{-# LANGUAGE TemplateHaskell   #-}
-
--- |
--- Module      : Test.AWS.MarketplaceMetering
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
--- Portability : non-portable (GHC extensions)
---
-module Test.AWS.MarketplaceMetering
-    ( tests
-    , fixtures
-    ) where
-
-import           Test.AWS.Prelude
-
-tests :: [TestTree]
-tests = []
-
-fixtures :: [TestTree]
-fixtures = []
diff --git a/test/Test/AWS/MarketplaceMetering/Internal.hs b/test/Test/AWS/MarketplaceMetering/Internal.hs
deleted file mode 100644
--- a/test/Test/AWS/MarketplaceMetering/Internal.hs
+++ /dev/null
@@ -1,15 +0,0 @@
-{-# LANGUAGE OverloadedStrings #-}
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-
--- |
--- Module      : Test.AWS.MarketplaceMetering.Internal
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
--- Portability : non-portable (GHC extensions)
---
-
-module Test.AWS.MarketplaceMetering.Internal where
-
-import           Test.AWS.Prelude
diff --git a/test/Test/Amazonka/Gen/MarketplaceMetering.hs b/test/Test/Amazonka/Gen/MarketplaceMetering.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/Gen/MarketplaceMetering.hs
@@ -0,0 +1,118 @@
+{-# 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.MarketplaceMetering
+-- 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.MarketplaceMetering where
+
+import Amazonka.MarketplaceMetering
+import qualified Data.Proxy as Proxy
+import Test.Amazonka.Fixture
+import Test.Amazonka.MarketplaceMetering.Internal
+import Test.Amazonka.Prelude
+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"
+--         [ requestBatchMeterUsage $
+--             newBatchMeterUsage
+--
+--         , requestMeterUsage $
+--             newMeterUsage
+--
+--         , requestRegisterUsage $
+--             newRegisterUsage
+--
+--         , requestResolveCustomer $
+--             newResolveCustomer
+--
+--           ]
+
+--     , testGroup "response"
+--         [ responseBatchMeterUsage $
+--             newBatchMeterUsageResponse
+--
+--         , responseMeterUsage $
+--             newMeterUsageResponse
+--
+--         , responseRegisterUsage $
+--             newRegisterUsageResponse
+--
+--         , responseResolveCustomer $
+--             newResolveCustomerResponse
+--
+--           ]
+--     ]
+
+-- Requests
+
+requestBatchMeterUsage :: BatchMeterUsage -> TestTree
+requestBatchMeterUsage =
+  req
+    "BatchMeterUsage"
+    "fixture/BatchMeterUsage.yaml"
+
+requestMeterUsage :: MeterUsage -> TestTree
+requestMeterUsage =
+  req
+    "MeterUsage"
+    "fixture/MeterUsage.yaml"
+
+requestRegisterUsage :: RegisterUsage -> TestTree
+requestRegisterUsage =
+  req
+    "RegisterUsage"
+    "fixture/RegisterUsage.yaml"
+
+requestResolveCustomer :: ResolveCustomer -> TestTree
+requestResolveCustomer =
+  req
+    "ResolveCustomer"
+    "fixture/ResolveCustomer.yaml"
+
+-- Responses
+
+responseBatchMeterUsage :: BatchMeterUsageResponse -> TestTree
+responseBatchMeterUsage =
+  res
+    "BatchMeterUsageResponse"
+    "fixture/BatchMeterUsageResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy BatchMeterUsage)
+
+responseMeterUsage :: MeterUsageResponse -> TestTree
+responseMeterUsage =
+  res
+    "MeterUsageResponse"
+    "fixture/MeterUsageResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy MeterUsage)
+
+responseRegisterUsage :: RegisterUsageResponse -> TestTree
+responseRegisterUsage =
+  res
+    "RegisterUsageResponse"
+    "fixture/RegisterUsageResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy RegisterUsage)
+
+responseResolveCustomer :: ResolveCustomerResponse -> TestTree
+responseResolveCustomer =
+  res
+    "ResolveCustomerResponse"
+    "fixture/ResolveCustomerResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ResolveCustomer)
diff --git a/test/Test/Amazonka/MarketplaceMetering.hs b/test/Test/Amazonka/MarketplaceMetering.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/MarketplaceMetering.hs
@@ -0,0 +1,20 @@
+-- |
+-- Module      : Test.Amazonka.MarketplaceMetering
+-- 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.MarketplaceMetering
+  ( tests,
+    fixtures,
+  )
+where
+
+import Test.Tasty (TestTree)
+
+tests :: [TestTree]
+tests = []
+
+fixtures :: [TestTree]
+fixtures = []
diff --git a/test/Test/Amazonka/MarketplaceMetering/Internal.hs b/test/Test/Amazonka/MarketplaceMetering/Internal.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/MarketplaceMetering/Internal.hs
@@ -0,0 +1,8 @@
+-- |
+-- Module      : Test.Amazonka.MarketplaceMetering.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.MarketplaceMetering.Internal where
