diff --git a/LICENSE b/LICENSE
new file mode 100644
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,367 @@
+Mozilla Public License Version 2.0
+==================================
+
+1. Definitions
+--------------
+
+1.1. "Contributor"
+    means each individual or legal entity that creates, contributes to
+    the creation of, or owns Covered Software.
+
+1.2. "Contributor Version"
+    means the combination of the Contributions of others (if any) used
+    by a Contributor and that particular Contributor's Contribution.
+
+1.3. "Contribution"
+    means Covered Software of a particular Contributor.
+
+1.4. "Covered Software"
+    means Source Code Form to which the initial Contributor has attached
+    the notice in Exhibit A, the Executable Form of such Source Code
+    Form, and Modifications of such Source Code Form, in each case
+    including portions thereof.
+
+1.5. "Incompatible With Secondary Licenses"
+    means
+
+    (a) that the initial Contributor has attached the notice described
+        in Exhibit B to the Covered Software; or
+
+    (b) that the Covered Software was made available under the terms of
+        version 1.1 or earlier of the License, but not also under the
+        terms of a Secondary License.
+
+1.6. "Executable Form"
+    means any form of the work other than Source Code Form.
+
+1.7. "Larger Work"
+    means a work that combines Covered Software with other material, in
+    a separate file or files, that is not Covered Software.
+
+1.8. "License"
+    means this document.
+
+1.9. "Licensable"
+    means having the right to grant, to the maximum extent possible,
+    whether at the time of the initial grant or subsequently, any and
+    all of the rights conveyed by this License.
+
+1.10. "Modifications"
+    means any of the following:
+
+    (a) any file in Source Code Form that results from an addition to,
+        deletion from, or modification of the contents of Covered
+        Software; or
+
+    (b) any new file in Source Code Form that contains any Covered
+        Software.
+
+1.11. "Patent Claims" of a Contributor
+    means any patent claim(s), including without limitation, method,
+    process, and apparatus claims, in any patent Licensable by such
+    Contributor that would be infringed, but for the grant of the
+    License, by the making, using, selling, offering for sale, having
+    made, import, or transfer of either its Contributions or its
+    Contributor Version.
+
+1.12. "Secondary License"
+    means either the GNU General Public License, Version 2.0, the GNU
+    Lesser General Public License, Version 2.1, the GNU Affero General
+    Public License, Version 3.0, or any later versions of those
+    licenses.
+
+1.13. "Source Code Form"
+    means the form of the work preferred for making modifications.
+
+1.14. "You" (or "Your")
+    means an individual or a legal entity exercising rights under this
+    License. For legal entities, "You" includes any entity that
+    controls, is controlled by, or is under common control with You. For
+    purposes of this definition, "control" means (a) the power, direct
+    or indirect, to cause the direction or management of such entity,
+    whether by contract or otherwise, or (b) ownership of more than
+    fifty percent (50%) of the outstanding shares or beneficial
+    ownership of such entity.
+
+2. License Grants and Conditions
+--------------------------------
+
+2.1. Grants
+
+Each Contributor hereby grants You a world-wide, royalty-free,
+non-exclusive license:
+
+(a) under intellectual property rights (other than patent or trademark)
+    Licensable by such Contributor to use, reproduce, make available,
+    modify, display, perform, distribute, and otherwise exploit its
+    Contributions, either on an unmodified basis, with Modifications, or
+    as part of a Larger Work; and
+
+(b) under Patent Claims of such Contributor to make, use, sell, offer
+    for sale, have made, import, and otherwise transfer either its
+    Contributions or its Contributor Version.
+
+2.2. Effective Date
+
+The licenses granted in Section 2.1 with respect to any Contribution
+become effective for each Contribution on the date the Contributor first
+distributes such Contribution.
+
+2.3. Limitations on Grant Scope
+
+The licenses granted in this Section 2 are the only rights granted under
+this License. No additional rights or licenses will be implied from the
+distribution or licensing of Covered Software under this License.
+Notwithstanding Section 2.1(b) above, no patent license is granted by a
+Contributor:
+
+(a) for any code that a Contributor has removed from Covered Software;
+    or
+
+(b) for infringements caused by: (i) Your and any other third party's
+    modifications of Covered Software, or (ii) the combination of its
+    Contributions with other software (except as part of its Contributor
+    Version); or
+
+(c) under Patent Claims infringed by Covered Software in the absence of
+    its Contributions.
+
+This License does not grant any rights in the trademarks, service marks,
+or logos of any Contributor (except as may be necessary to comply with
+the notice requirements in Section 3.4).
+
+2.4. Subsequent Licenses
+
+No Contributor makes additional grants as a result of Your choice to
+distribute the Covered Software under a subsequent version of this
+License (see Section 10.2) or under the terms of a Secondary License (if
+permitted under the terms of Section 3.3).
+
+2.5. Representation
+
+Each Contributor represents that the Contributor believes its
+Contributions are its original creation(s) or it has sufficient rights
+to grant the rights to its Contributions conveyed by this License.
+
+2.6. Fair Use
+
+This License is not intended to limit any rights You have under
+applicable copyright doctrines of fair use, fair dealing, or other
+equivalents.
+
+2.7. Conditions
+
+Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted
+in Section 2.1.
+
+3. Responsibilities
+-------------------
+
+3.1. Distribution of Source Form
+
+All distribution of Covered Software in Source Code Form, including any
+Modifications that You create or to which You contribute, must be under
+the terms of this License. You must inform recipients that the Source
+Code Form of the Covered Software is governed by the terms of this
+License, and how they can obtain a copy of this License. You may not
+attempt to alter or restrict the recipients' rights in the Source Code
+Form.
+
+3.2. Distribution of Executable Form
+
+If You distribute Covered Software in Executable Form then:
+
+(a) such Covered Software must also be made available in Source Code
+    Form, as described in Section 3.1, and You must inform recipients of
+    the Executable Form how they can obtain a copy of such Source Code
+    Form by reasonable means in a timely manner, at a charge no more
+    than the cost of distribution to the recipient; and
+
+(b) You may distribute such Executable Form under the terms of this
+    License, or sublicense it under different terms, provided that the
+    license for the Executable Form does not attempt to limit or alter
+    the recipients' rights in the Source Code Form under this License.
+
+3.3. Distribution of a Larger Work
+
+You may create and distribute a Larger Work under terms of Your choice,
+provided that You also comply with the requirements of this License for
+the Covered Software. If the Larger Work is a combination of Covered
+Software with a work governed by one or more Secondary Licenses, and the
+Covered Software is not Incompatible With Secondary Licenses, this
+License permits You to additionally distribute such Covered Software
+under the terms of such Secondary License(s), so that the recipient of
+the Larger Work may, at their option, further distribute the Covered
+Software under the terms of either this License or such Secondary
+License(s).
+
+3.4. Notices
+
+You may not remove or alter the substance of any license notices
+(including copyright notices, patent notices, disclaimers of warranty,
+or limitations of liability) contained within the Source Code Form of
+the Covered Software, except that You may alter any license notices to
+the extent required to remedy known factual inaccuracies.
+
+3.5. Application of Additional Terms
+
+You may choose to offer, and to charge a fee for, warranty, support,
+indemnity or liability obligations to one or more recipients of Covered
+Software. However, You may do so only on Your own behalf, and not on
+behalf of any Contributor. You must make it absolutely clear that any
+such warranty, support, indemnity, or liability obligation is offered by
+You alone, and You hereby agree to indemnify every Contributor for any
+liability incurred by such Contributor as a result of warranty, support,
+indemnity or liability terms You offer. You may include additional
+disclaimers of warranty and limitations of liability specific to any
+jurisdiction.
+
+4. Inability to Comply Due to Statute or Regulation
+---------------------------------------------------
+
+If it is impossible for You to comply with any of the terms of this
+License with respect to some or all of the Covered Software due to
+statute, judicial order, or regulation then You must: (a) comply with
+the terms of this License to the maximum extent possible; and (b)
+describe the limitations and the code they affect. Such description must
+be placed in a text file included with all distributions of the Covered
+Software under this License. Except to the extent prohibited by statute
+or regulation, such description must be sufficiently detailed for a
+recipient of ordinary skill to be able to understand it.
+
+5. Termination
+--------------
+
+5.1. The rights granted under this License will terminate automatically
+if You fail to comply with any of its terms. However, if You become
+compliant, then the rights granted under this License from a particular
+Contributor are reinstated (a) provisionally, unless and until such
+Contributor explicitly and finally terminates Your grants, and (b) on an
+ongoing basis, if such Contributor fails to notify You of the
+non-compliance by some reasonable means prior to 60 days after You have
+come back into compliance. Moreover, Your grants from a particular
+Contributor are reinstated on an ongoing basis if such Contributor
+notifies You of the non-compliance by some reasonable means, this is the
+first time You have received notice of non-compliance with this License
+from such Contributor, and You become compliant prior to 30 days after
+Your receipt of the notice.
+
+5.2. If You initiate litigation against any entity by asserting a patent
+infringement claim (excluding declaratory judgment actions,
+counter-claims, and cross-claims) alleging that a Contributor Version
+directly or indirectly infringes any patent, then the rights granted to
+You by any and all Contributors for the Covered Software under Section
+2.1 of this License shall terminate.
+
+5.3. In the event of termination under Sections 5.1 or 5.2 above, all
+end user license agreements (excluding distributors and resellers) which
+have been validly granted by You or Your distributors under this License
+prior to termination shall survive termination.
+
+************************************************************************
+*                                                                      *
+*  6. Disclaimer of Warranty                                           *
+*  -------------------------                                           *
+*                                                                      *
+*  Covered Software is provided under this License on an "as is"       *
+*  basis, without warranty of any kind, either expressed, implied, or  *
+*  statutory, including, without limitation, warranties that the       *
+*  Covered Software is free of defects, merchantable, fit for a        *
+*  particular purpose or non-infringing. The entire risk as to the     *
+*  quality and performance of the Covered Software is with You.        *
+*  Should any Covered Software prove defective in any respect, You     *
+*  (not any Contributor) assume the cost of any necessary servicing,   *
+*  repair, or correction. This disclaimer of warranty constitutes an   *
+*  essential part of this License. No use of any Covered Software is   *
+*  authorized under this License except under this disclaimer.         *
+*                                                                      *
+************************************************************************
+
+************************************************************************
+*                                                                      *
+*  7. Limitation of Liability                                          *
+*  --------------------------                                          *
+*                                                                      *
+*  Under no circumstances and under no legal theory, whether tort      *
+*  (including negligence), contract, or otherwise, shall any           *
+*  Contributor, or anyone who distributes Covered Software as          *
+*  permitted above, be liable to You for any direct, indirect,         *
+*  special, incidental, or consequential damages of any character      *
+*  including, without limitation, damages for lost profits, loss of    *
+*  goodwill, work stoppage, computer failure or malfunction, or any    *
+*  and all other commercial damages or losses, even if such party      *
+*  shall have been informed of the possibility of such damages. This   *
+*  limitation of liability shall not apply to liability for death or   *
+*  personal injury resulting from such party's negligence to the       *
+*  extent applicable law prohibits such limitation. Some               *
+*  jurisdictions do not allow the exclusion or limitation of           *
+*  incidental or consequential damages, so this exclusion and          *
+*  limitation may not apply to You.                                    *
+*                                                                      *
+************************************************************************
+
+8. Litigation
+-------------
+
+Any litigation relating to this License may be brought only in the
+courts of a jurisdiction where the defendant maintains its principal
+place of business and such litigation shall be governed by laws of that
+jurisdiction, without reference to its conflict-of-law provisions.
+Nothing in this Section shall prevent a party's ability to bring
+cross-claims or counter-claims.
+
+9. Miscellaneous
+----------------
+
+This License represents the complete agreement concerning the subject
+matter hereof. If any provision of this License is held to be
+unenforceable, such provision shall be reformed only to the extent
+necessary to make it enforceable. Any law or regulation which provides
+that the language of a contract shall be construed against the drafter
+shall not be used to construe this License against a Contributor.
+
+10. Versions of the License
+---------------------------
+
+10.1. New Versions
+
+Mozilla Foundation is the license steward. Except as provided in Section
+10.3, no one other than the license steward has the right to modify or
+publish new versions of this License. Each version will be given a
+distinguishing version number.
+
+10.2. Effect of New Versions
+
+You may distribute the Covered Software under the terms of the version
+of the License under which You originally received the Covered Software,
+or under the terms of any subsequent version published by the license
+steward.
+
+10.3. Modified Versions
+
+If you create software not governed by this License, and you want to
+create a new license for such software, you may create and use a
+modified version of this License if you rename the license and remove
+any references to the name of the license steward (except to note that
+such modified license differs from this License).
+
+10.4. Distributing Source Code Form that is Incompatible With Secondary
+Licenses
+
+If You choose to distribute Source Code Form that is Incompatible With
+Secondary Licenses under the terms of this version of the License, the
+notice described in Exhibit B of this License must be attached.
+
+Exhibit A - Source Code Form License Notice
+-------------------------------------------
+
+  This Source Code Form is subject to the terms of the Mozilla Public
+  License, v. 2.0. If a copy of the MPL was not distributed with this
+  file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+If it is not possible or desirable to put the notice in a particular
+file, then You may include the notice in a location (such as a LICENSE
+file in a relevant directory) where a recipient would be likely to look
+for such a notice.
+
+You may add additional accurate notices of copyright ownership.
diff --git a/README.md b/README.md
new file mode 100644
--- /dev/null
+++ b/README.md
@@ -0,0 +1,44 @@
+# Amazon Marketplace Catalog Service SDK
+
+* [Version](#version)
+* [Description](#description)
+* [Contribute](#contribute)
+* [Licence](#licence)
+
+
+## Version
+ 
+`2.0` - Derived from API version @2018-09-17@ of the AWS service descriptions, licensed under Apache 2.0.
+
+## Description
+
+Documentation is available via [Hackage](http://hackage.haskell.org/package/amazonka-marketplace-catalog)
+and the [AWS API Reference](https://aws.amazon.com/documentation/).
+
+The types from this library are intended to be used with [amazonka](http://hackage.haskell.org/package/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
+[lens](http://hackage.haskell.org/package/lens) or [lens-family-core](http://hackage.haskell.org/package/lens-family-core).
+
+See [Amazonka.MarketplaceCatalog](http://hackage.haskell.org/package/amazonka-marketplace-catalog/docs/Amazonka-MarketplaceCatalog.html)
+or [the AWS documentation](https://aws.amazon.com/documentation/) to get started.
+
+
+## Contribute
+
+For any problems, comments, or feedback please create an issue [here on GitHub](https://github.com/brendanhay/amazonka/issues).
+
+> _Note:_ this library is an auto-generated Haskell package. Please see `amazonka-gen` for more information.
+
+
+## Licence
+
+`amazonka-marketplace-catalog` is released under the [Mozilla Public License Version 2.0](http://www.mozilla.org/MPL/).
+
+Parts of the code are derived from AWS service descriptions, licensed under Apache 2.0.
+Source files subject to this contain an additional licensing clause in their header.
diff --git a/amazonka-marketplace-catalog.cabal b/amazonka-marketplace-catalog.cabal
new file mode 100644
--- /dev/null
+++ b/amazonka-marketplace-catalog.cabal
@@ -0,0 +1,104 @@
+cabal-version:      2.2
+name:               amazonka-marketplace-catalog
+version:            2.0
+synopsis:           Amazon Marketplace Catalog Service 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:
+  Derived from API version @2018-09-17@ 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.MarketplaceCatalog.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.MarketplaceCatalog" 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-catalog
+
+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:
+    Amazonka.MarketplaceCatalog
+    Amazonka.MarketplaceCatalog.CancelChangeSet
+    Amazonka.MarketplaceCatalog.DescribeChangeSet
+    Amazonka.MarketplaceCatalog.DescribeEntity
+    Amazonka.MarketplaceCatalog.Lens
+    Amazonka.MarketplaceCatalog.ListChangeSets
+    Amazonka.MarketplaceCatalog.ListEntities
+    Amazonka.MarketplaceCatalog.ListTagsForResource
+    Amazonka.MarketplaceCatalog.StartChangeSet
+    Amazonka.MarketplaceCatalog.TagResource
+    Amazonka.MarketplaceCatalog.Types
+    Amazonka.MarketplaceCatalog.Types.Change
+    Amazonka.MarketplaceCatalog.Types.ChangeSetSummaryListItem
+    Amazonka.MarketplaceCatalog.Types.ChangeStatus
+    Amazonka.MarketplaceCatalog.Types.ChangeSummary
+    Amazonka.MarketplaceCatalog.Types.Entity
+    Amazonka.MarketplaceCatalog.Types.EntitySummary
+    Amazonka.MarketplaceCatalog.Types.ErrorDetail
+    Amazonka.MarketplaceCatalog.Types.FailureCode
+    Amazonka.MarketplaceCatalog.Types.Filter
+    Amazonka.MarketplaceCatalog.Types.Sort
+    Amazonka.MarketplaceCatalog.Types.SortOrder
+    Amazonka.MarketplaceCatalog.Types.Tag
+    Amazonka.MarketplaceCatalog.UntagResource
+    Amazonka.MarketplaceCatalog.Waiters
+
+  build-depends:
+    , amazonka-core  >=2.0  && <2.1
+    , base           >=4.12 && <5
+
+test-suite amazonka-marketplace-catalog-test
+  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.Amazonka.Gen.MarketplaceCatalog
+    Test.Amazonka.MarketplaceCatalog
+    Test.Amazonka.MarketplaceCatalog.Internal
+
+  build-depends:
+    , amazonka-core                 >=2.0 && <2.1
+    , amazonka-marketplace-catalog
+    , amazonka-test                 >=2.0 && <2.1
+    , base
+    , bytestring
+    , case-insensitive
+    , tasty
+    , tasty-hunit
+    , text
+    , time
+    , unordered-containers
diff --git a/fixture/CancelChangeSet.yaml b/fixture/CancelChangeSet.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CancelChangeSet.yaml
@@ -0,0 +1,10 @@
+---
+method: PATCH
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/catalog.marketplace/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  catalog.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/CancelChangeSetResponse.proto b/fixture/CancelChangeSetResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CancelChangeSetResponse.proto
diff --git a/fixture/DescribeChangeSet.yaml b/fixture/DescribeChangeSet.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeChangeSet.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/catalog.marketplace/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  catalog.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/DescribeChangeSetResponse.proto b/fixture/DescribeChangeSetResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeChangeSetResponse.proto
diff --git a/fixture/DescribeEntity.yaml b/fixture/DescribeEntity.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeEntity.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/catalog.marketplace/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  catalog.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/DescribeEntityResponse.proto b/fixture/DescribeEntityResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeEntityResponse.proto
diff --git a/fixture/ListChangeSets.yaml b/fixture/ListChangeSets.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListChangeSets.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/catalog.marketplace/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  catalog.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/ListChangeSetsResponse.proto b/fixture/ListChangeSetsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListChangeSetsResponse.proto
diff --git a/fixture/ListEntities.yaml b/fixture/ListEntities.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListEntities.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/catalog.marketplace/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  catalog.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/ListEntitiesResponse.proto b/fixture/ListEntitiesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListEntitiesResponse.proto
diff --git a/fixture/ListTagsForResource.yaml b/fixture/ListTagsForResource.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListTagsForResource.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/catalog.marketplace/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  catalog.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/ListTagsForResourceResponse.proto b/fixture/ListTagsForResourceResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListTagsForResourceResponse.proto
diff --git a/fixture/StartChangeSet.yaml b/fixture/StartChangeSet.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/StartChangeSet.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/catalog.marketplace/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  catalog.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/StartChangeSetResponse.proto b/fixture/StartChangeSetResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/StartChangeSetResponse.proto
diff --git a/fixture/TagResource.yaml b/fixture/TagResource.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/TagResource.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/catalog.marketplace/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  catalog.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/TagResourceResponse.proto b/fixture/TagResourceResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/TagResourceResponse.proto
diff --git a/fixture/UntagResource.yaml b/fixture/UntagResource.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UntagResource.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/catalog.marketplace/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  catalog.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/UntagResourceResponse.proto b/fixture/UntagResourceResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UntagResourceResponse.proto
diff --git a/gen/Amazonka/MarketplaceCatalog.hs b/gen/Amazonka/MarketplaceCatalog.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MarketplaceCatalog.hs
@@ -0,0 +1,200 @@
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- |
+-- Module      : Amazonka.MarketplaceCatalog
+-- 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 @2018-09-17@ of the AWS service descriptions, licensed under Apache 2.0.
+--
+-- Catalog API actions allow you to manage your entities through list,
+-- describe, and update capabilities. An entity can be a product or an
+-- offer on AWS Marketplace.
+--
+-- You can automate your entity update process by integrating the AWS
+-- Marketplace Catalog API with your AWS Marketplace product build or
+-- deployment pipelines. You can also create your own applications on top
+-- of the Catalog API to manage your products on AWS Marketplace.
+module Amazonka.MarketplaceCatalog
+  ( -- * Service Configuration
+    defaultService,
+
+    -- * Errors
+    -- $errors
+
+    -- ** AccessDeniedException
+    _AccessDeniedException,
+
+    -- ** InternalServiceException
+    _InternalServiceException,
+
+    -- ** ResourceInUseException
+    _ResourceInUseException,
+
+    -- ** ResourceNotFoundException
+    _ResourceNotFoundException,
+
+    -- ** ResourceNotSupportedException
+    _ResourceNotSupportedException,
+
+    -- ** ServiceQuotaExceededException
+    _ServiceQuotaExceededException,
+
+    -- ** ThrottlingException
+    _ThrottlingException,
+
+    -- ** ValidationException
+    _ValidationException,
+
+    -- * Waiters
+    -- $waiters
+
+    -- * Operations
+    -- $operations
+
+    -- ** CancelChangeSet
+    CancelChangeSet (CancelChangeSet'),
+    newCancelChangeSet,
+    CancelChangeSetResponse (CancelChangeSetResponse'),
+    newCancelChangeSetResponse,
+
+    -- ** DescribeChangeSet
+    DescribeChangeSet (DescribeChangeSet'),
+    newDescribeChangeSet,
+    DescribeChangeSetResponse (DescribeChangeSetResponse'),
+    newDescribeChangeSetResponse,
+
+    -- ** DescribeEntity
+    DescribeEntity (DescribeEntity'),
+    newDescribeEntity,
+    DescribeEntityResponse (DescribeEntityResponse'),
+    newDescribeEntityResponse,
+
+    -- ** ListChangeSets
+    ListChangeSets (ListChangeSets'),
+    newListChangeSets,
+    ListChangeSetsResponse (ListChangeSetsResponse'),
+    newListChangeSetsResponse,
+
+    -- ** ListEntities
+    ListEntities (ListEntities'),
+    newListEntities,
+    ListEntitiesResponse (ListEntitiesResponse'),
+    newListEntitiesResponse,
+
+    -- ** ListTagsForResource
+    ListTagsForResource (ListTagsForResource'),
+    newListTagsForResource,
+    ListTagsForResourceResponse (ListTagsForResourceResponse'),
+    newListTagsForResourceResponse,
+
+    -- ** StartChangeSet
+    StartChangeSet (StartChangeSet'),
+    newStartChangeSet,
+    StartChangeSetResponse (StartChangeSetResponse'),
+    newStartChangeSetResponse,
+
+    -- ** TagResource
+    TagResource (TagResource'),
+    newTagResource,
+    TagResourceResponse (TagResourceResponse'),
+    newTagResourceResponse,
+
+    -- ** UntagResource
+    UntagResource (UntagResource'),
+    newUntagResource,
+    UntagResourceResponse (UntagResourceResponse'),
+    newUntagResourceResponse,
+
+    -- * Types
+
+    -- ** ChangeStatus
+    ChangeStatus (..),
+
+    -- ** FailureCode
+    FailureCode (..),
+
+    -- ** SortOrder
+    SortOrder (..),
+
+    -- ** Change
+    Change (Change'),
+    newChange,
+
+    -- ** ChangeSetSummaryListItem
+    ChangeSetSummaryListItem (ChangeSetSummaryListItem'),
+    newChangeSetSummaryListItem,
+
+    -- ** ChangeSummary
+    ChangeSummary (ChangeSummary'),
+    newChangeSummary,
+
+    -- ** Entity
+    Entity (Entity'),
+    newEntity,
+
+    -- ** EntitySummary
+    EntitySummary (EntitySummary'),
+    newEntitySummary,
+
+    -- ** ErrorDetail
+    ErrorDetail (ErrorDetail'),
+    newErrorDetail,
+
+    -- ** Filter
+    Filter (Filter'),
+    newFilter,
+
+    -- ** Sort
+    Sort (Sort'),
+    newSort,
+
+    -- ** Tag
+    Tag (Tag'),
+    newTag,
+  )
+where
+
+import Amazonka.MarketplaceCatalog.CancelChangeSet
+import Amazonka.MarketplaceCatalog.DescribeChangeSet
+import Amazonka.MarketplaceCatalog.DescribeEntity
+import Amazonka.MarketplaceCatalog.Lens
+import Amazonka.MarketplaceCatalog.ListChangeSets
+import Amazonka.MarketplaceCatalog.ListEntities
+import Amazonka.MarketplaceCatalog.ListTagsForResource
+import Amazonka.MarketplaceCatalog.StartChangeSet
+import Amazonka.MarketplaceCatalog.TagResource
+import Amazonka.MarketplaceCatalog.Types
+import Amazonka.MarketplaceCatalog.UntagResource
+import Amazonka.MarketplaceCatalog.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 'MarketplaceCatalog'.
+
+-- $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/MarketplaceCatalog/CancelChangeSet.hs b/gen/Amazonka/MarketplaceCatalog/CancelChangeSet.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MarketplaceCatalog/CancelChangeSet.hs
@@ -0,0 +1,203 @@
+{-# 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.MarketplaceCatalog.CancelChangeSet
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Used to cancel an open change request. Must be sent before the status of
+-- the request changes to @APPLYING@, the final stage of completing your
+-- change request. You can describe a change during the 60-day request
+-- history retention period for API calls.
+module Amazonka.MarketplaceCatalog.CancelChangeSet
+  ( -- * Creating a Request
+    CancelChangeSet (..),
+    newCancelChangeSet,
+
+    -- * Request Lenses
+    cancelChangeSet_catalog,
+    cancelChangeSet_changeSetId,
+
+    -- * Destructuring the Response
+    CancelChangeSetResponse (..),
+    newCancelChangeSetResponse,
+
+    -- * Response Lenses
+    cancelChangeSetResponse_changeSetArn,
+    cancelChangeSetResponse_changeSetId,
+    cancelChangeSetResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MarketplaceCatalog.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCancelChangeSet' smart constructor.
+data CancelChangeSet = CancelChangeSet'
+  { -- | Required. The catalog related to the request. Fixed value:
+    -- @AWSMarketplace@.
+    catalog :: Prelude.Text,
+    -- | Required. The unique identifier of the @StartChangeSet@ request that you
+    -- want to cancel.
+    changeSetId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CancelChangeSet' 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:
+--
+-- 'catalog', 'cancelChangeSet_catalog' - Required. The catalog related to the request. Fixed value:
+-- @AWSMarketplace@.
+--
+-- 'changeSetId', 'cancelChangeSet_changeSetId' - Required. The unique identifier of the @StartChangeSet@ request that you
+-- want to cancel.
+newCancelChangeSet ::
+  -- | 'catalog'
+  Prelude.Text ->
+  -- | 'changeSetId'
+  Prelude.Text ->
+  CancelChangeSet
+newCancelChangeSet pCatalog_ pChangeSetId_ =
+  CancelChangeSet'
+    { catalog = pCatalog_,
+      changeSetId = pChangeSetId_
+    }
+
+-- | Required. The catalog related to the request. Fixed value:
+-- @AWSMarketplace@.
+cancelChangeSet_catalog :: Lens.Lens' CancelChangeSet Prelude.Text
+cancelChangeSet_catalog = Lens.lens (\CancelChangeSet' {catalog} -> catalog) (\s@CancelChangeSet' {} a -> s {catalog = a} :: CancelChangeSet)
+
+-- | Required. The unique identifier of the @StartChangeSet@ request that you
+-- want to cancel.
+cancelChangeSet_changeSetId :: Lens.Lens' CancelChangeSet Prelude.Text
+cancelChangeSet_changeSetId = Lens.lens (\CancelChangeSet' {changeSetId} -> changeSetId) (\s@CancelChangeSet' {} a -> s {changeSetId = a} :: CancelChangeSet)
+
+instance Core.AWSRequest CancelChangeSet where
+  type
+    AWSResponse CancelChangeSet =
+      CancelChangeSetResponse
+  request overrides =
+    Request.patchJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CancelChangeSetResponse'
+            Prelude.<$> (x Data..?> "ChangeSetArn")
+            Prelude.<*> (x Data..?> "ChangeSetId")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CancelChangeSet where
+  hashWithSalt _salt CancelChangeSet' {..} =
+    _salt
+      `Prelude.hashWithSalt` catalog
+      `Prelude.hashWithSalt` changeSetId
+
+instance Prelude.NFData CancelChangeSet where
+  rnf CancelChangeSet' {..} =
+    Prelude.rnf catalog
+      `Prelude.seq` Prelude.rnf changeSetId
+
+instance Data.ToHeaders CancelChangeSet where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CancelChangeSet where
+  toJSON = Prelude.const (Data.Object Prelude.mempty)
+
+instance Data.ToPath CancelChangeSet where
+  toPath = Prelude.const "/CancelChangeSet"
+
+instance Data.ToQuery CancelChangeSet where
+  toQuery CancelChangeSet' {..} =
+    Prelude.mconcat
+      [ "catalog" Data.=: catalog,
+        "changeSetId" Data.=: changeSetId
+      ]
+
+-- | /See:/ 'newCancelChangeSetResponse' smart constructor.
+data CancelChangeSetResponse = CancelChangeSetResponse'
+  { -- | The ARN associated with the change set referenced in this request.
+    changeSetArn :: Prelude.Maybe Prelude.Text,
+    -- | The unique identifier for the change set referenced in this request.
+    changeSetId :: 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 'CancelChangeSetResponse' 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:
+--
+-- 'changeSetArn', 'cancelChangeSetResponse_changeSetArn' - The ARN associated with the change set referenced in this request.
+--
+-- 'changeSetId', 'cancelChangeSetResponse_changeSetId' - The unique identifier for the change set referenced in this request.
+--
+-- 'httpStatus', 'cancelChangeSetResponse_httpStatus' - The response's http status code.
+newCancelChangeSetResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CancelChangeSetResponse
+newCancelChangeSetResponse pHttpStatus_ =
+  CancelChangeSetResponse'
+    { changeSetArn =
+        Prelude.Nothing,
+      changeSetId = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The ARN associated with the change set referenced in this request.
+cancelChangeSetResponse_changeSetArn :: Lens.Lens' CancelChangeSetResponse (Prelude.Maybe Prelude.Text)
+cancelChangeSetResponse_changeSetArn = Lens.lens (\CancelChangeSetResponse' {changeSetArn} -> changeSetArn) (\s@CancelChangeSetResponse' {} a -> s {changeSetArn = a} :: CancelChangeSetResponse)
+
+-- | The unique identifier for the change set referenced in this request.
+cancelChangeSetResponse_changeSetId :: Lens.Lens' CancelChangeSetResponse (Prelude.Maybe Prelude.Text)
+cancelChangeSetResponse_changeSetId = Lens.lens (\CancelChangeSetResponse' {changeSetId} -> changeSetId) (\s@CancelChangeSetResponse' {} a -> s {changeSetId = a} :: CancelChangeSetResponse)
+
+-- | The response's http status code.
+cancelChangeSetResponse_httpStatus :: Lens.Lens' CancelChangeSetResponse Prelude.Int
+cancelChangeSetResponse_httpStatus = Lens.lens (\CancelChangeSetResponse' {httpStatus} -> httpStatus) (\s@CancelChangeSetResponse' {} a -> s {httpStatus = a} :: CancelChangeSetResponse)
+
+instance Prelude.NFData CancelChangeSetResponse where
+  rnf CancelChangeSetResponse' {..} =
+    Prelude.rnf changeSetArn
+      `Prelude.seq` Prelude.rnf changeSetId
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MarketplaceCatalog/DescribeChangeSet.hs b/gen/Amazonka/MarketplaceCatalog/DescribeChangeSet.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MarketplaceCatalog/DescribeChangeSet.hs
@@ -0,0 +1,311 @@
+{-# 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.MarketplaceCatalog.DescribeChangeSet
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Provides information about a given change set.
+module Amazonka.MarketplaceCatalog.DescribeChangeSet
+  ( -- * Creating a Request
+    DescribeChangeSet (..),
+    newDescribeChangeSet,
+
+    -- * Request Lenses
+    describeChangeSet_catalog,
+    describeChangeSet_changeSetId,
+
+    -- * Destructuring the Response
+    DescribeChangeSetResponse (..),
+    newDescribeChangeSetResponse,
+
+    -- * Response Lenses
+    describeChangeSetResponse_changeSet,
+    describeChangeSetResponse_changeSetArn,
+    describeChangeSetResponse_changeSetId,
+    describeChangeSetResponse_changeSetName,
+    describeChangeSetResponse_endTime,
+    describeChangeSetResponse_failureCode,
+    describeChangeSetResponse_failureDescription,
+    describeChangeSetResponse_startTime,
+    describeChangeSetResponse_status,
+    describeChangeSetResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MarketplaceCatalog.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeChangeSet' smart constructor.
+data DescribeChangeSet = DescribeChangeSet'
+  { -- | Required. The catalog related to the request. Fixed value:
+    -- @AWSMarketplace@
+    catalog :: Prelude.Text,
+    -- | Required. The unique identifier for the @StartChangeSet@ request that
+    -- you want to describe the details for.
+    changeSetId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeChangeSet' 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:
+--
+-- 'catalog', 'describeChangeSet_catalog' - Required. The catalog related to the request. Fixed value:
+-- @AWSMarketplace@
+--
+-- 'changeSetId', 'describeChangeSet_changeSetId' - Required. The unique identifier for the @StartChangeSet@ request that
+-- you want to describe the details for.
+newDescribeChangeSet ::
+  -- | 'catalog'
+  Prelude.Text ->
+  -- | 'changeSetId'
+  Prelude.Text ->
+  DescribeChangeSet
+newDescribeChangeSet pCatalog_ pChangeSetId_ =
+  DescribeChangeSet'
+    { catalog = pCatalog_,
+      changeSetId = pChangeSetId_
+    }
+
+-- | Required. The catalog related to the request. Fixed value:
+-- @AWSMarketplace@
+describeChangeSet_catalog :: Lens.Lens' DescribeChangeSet Prelude.Text
+describeChangeSet_catalog = Lens.lens (\DescribeChangeSet' {catalog} -> catalog) (\s@DescribeChangeSet' {} a -> s {catalog = a} :: DescribeChangeSet)
+
+-- | Required. The unique identifier for the @StartChangeSet@ request that
+-- you want to describe the details for.
+describeChangeSet_changeSetId :: Lens.Lens' DescribeChangeSet Prelude.Text
+describeChangeSet_changeSetId = Lens.lens (\DescribeChangeSet' {changeSetId} -> changeSetId) (\s@DescribeChangeSet' {} a -> s {changeSetId = a} :: DescribeChangeSet)
+
+instance Core.AWSRequest DescribeChangeSet where
+  type
+    AWSResponse DescribeChangeSet =
+      DescribeChangeSetResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeChangeSetResponse'
+            Prelude.<$> (x Data..?> "ChangeSet" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "ChangeSetArn")
+            Prelude.<*> (x Data..?> "ChangeSetId")
+            Prelude.<*> (x Data..?> "ChangeSetName")
+            Prelude.<*> (x Data..?> "EndTime")
+            Prelude.<*> (x Data..?> "FailureCode")
+            Prelude.<*> (x Data..?> "FailureDescription")
+            Prelude.<*> (x Data..?> "StartTime")
+            Prelude.<*> (x Data..?> "Status")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeChangeSet where
+  hashWithSalt _salt DescribeChangeSet' {..} =
+    _salt
+      `Prelude.hashWithSalt` catalog
+      `Prelude.hashWithSalt` changeSetId
+
+instance Prelude.NFData DescribeChangeSet where
+  rnf DescribeChangeSet' {..} =
+    Prelude.rnf catalog
+      `Prelude.seq` Prelude.rnf changeSetId
+
+instance Data.ToHeaders DescribeChangeSet where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath DescribeChangeSet where
+  toPath = Prelude.const "/DescribeChangeSet"
+
+instance Data.ToQuery DescribeChangeSet where
+  toQuery DescribeChangeSet' {..} =
+    Prelude.mconcat
+      [ "catalog" Data.=: catalog,
+        "changeSetId" Data.=: changeSetId
+      ]
+
+-- | /See:/ 'newDescribeChangeSetResponse' smart constructor.
+data DescribeChangeSetResponse = DescribeChangeSetResponse'
+  { -- | An array of @ChangeSummary@ objects.
+    changeSet :: Prelude.Maybe [ChangeSummary],
+    -- | The ARN associated with the unique identifier for the change set
+    -- referenced in this request.
+    changeSetArn :: Prelude.Maybe Prelude.Text,
+    -- | Required. The unique identifier for the change set referenced in this
+    -- request.
+    changeSetId :: Prelude.Maybe Prelude.Text,
+    -- | The optional name provided in the @StartChangeSet@ request. If you do
+    -- not provide a name, one is set by default.
+    changeSetName :: Prelude.Maybe Prelude.Text,
+    -- | The date and time, in ISO 8601 format (2018-02-27T13:45:22Z), the
+    -- request transitioned to a terminal state. The change cannot transition
+    -- to a different state. Null if the request is not in a terminal state.
+    endTime :: Prelude.Maybe Prelude.Text,
+    -- | Returned if the change set is in @FAILED@ status. Can be either
+    -- @CLIENT_ERROR@, which means that there are issues with the request (see
+    -- the @ErrorDetailList@), or @SERVER_FAULT@, which means that there is a
+    -- problem in the system, and you should retry your request.
+    failureCode :: Prelude.Maybe FailureCode,
+    -- | Returned if there is a failure on the change set, but that failure is
+    -- not related to any of the changes in the request.
+    failureDescription :: Prelude.Maybe Prelude.Text,
+    -- | The date and time, in ISO 8601 format (2018-02-27T13:45:22Z), the
+    -- request started.
+    startTime :: Prelude.Maybe Prelude.Text,
+    -- | The status of the change request.
+    status :: Prelude.Maybe ChangeStatus,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeChangeSetResponse' 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:
+--
+-- 'changeSet', 'describeChangeSetResponse_changeSet' - An array of @ChangeSummary@ objects.
+--
+-- 'changeSetArn', 'describeChangeSetResponse_changeSetArn' - The ARN associated with the unique identifier for the change set
+-- referenced in this request.
+--
+-- 'changeSetId', 'describeChangeSetResponse_changeSetId' - Required. The unique identifier for the change set referenced in this
+-- request.
+--
+-- 'changeSetName', 'describeChangeSetResponse_changeSetName' - The optional name provided in the @StartChangeSet@ request. If you do
+-- not provide a name, one is set by default.
+--
+-- 'endTime', 'describeChangeSetResponse_endTime' - The date and time, in ISO 8601 format (2018-02-27T13:45:22Z), the
+-- request transitioned to a terminal state. The change cannot transition
+-- to a different state. Null if the request is not in a terminal state.
+--
+-- 'failureCode', 'describeChangeSetResponse_failureCode' - Returned if the change set is in @FAILED@ status. Can be either
+-- @CLIENT_ERROR@, which means that there are issues with the request (see
+-- the @ErrorDetailList@), or @SERVER_FAULT@, which means that there is a
+-- problem in the system, and you should retry your request.
+--
+-- 'failureDescription', 'describeChangeSetResponse_failureDescription' - Returned if there is a failure on the change set, but that failure is
+-- not related to any of the changes in the request.
+--
+-- 'startTime', 'describeChangeSetResponse_startTime' - The date and time, in ISO 8601 format (2018-02-27T13:45:22Z), the
+-- request started.
+--
+-- 'status', 'describeChangeSetResponse_status' - The status of the change request.
+--
+-- 'httpStatus', 'describeChangeSetResponse_httpStatus' - The response's http status code.
+newDescribeChangeSetResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeChangeSetResponse
+newDescribeChangeSetResponse pHttpStatus_ =
+  DescribeChangeSetResponse'
+    { changeSet =
+        Prelude.Nothing,
+      changeSetArn = Prelude.Nothing,
+      changeSetId = Prelude.Nothing,
+      changeSetName = Prelude.Nothing,
+      endTime = Prelude.Nothing,
+      failureCode = Prelude.Nothing,
+      failureDescription = Prelude.Nothing,
+      startTime = Prelude.Nothing,
+      status = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | An array of @ChangeSummary@ objects.
+describeChangeSetResponse_changeSet :: Lens.Lens' DescribeChangeSetResponse (Prelude.Maybe [ChangeSummary])
+describeChangeSetResponse_changeSet = Lens.lens (\DescribeChangeSetResponse' {changeSet} -> changeSet) (\s@DescribeChangeSetResponse' {} a -> s {changeSet = a} :: DescribeChangeSetResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ARN associated with the unique identifier for the change set
+-- referenced in this request.
+describeChangeSetResponse_changeSetArn :: Lens.Lens' DescribeChangeSetResponse (Prelude.Maybe Prelude.Text)
+describeChangeSetResponse_changeSetArn = Lens.lens (\DescribeChangeSetResponse' {changeSetArn} -> changeSetArn) (\s@DescribeChangeSetResponse' {} a -> s {changeSetArn = a} :: DescribeChangeSetResponse)
+
+-- | Required. The unique identifier for the change set referenced in this
+-- request.
+describeChangeSetResponse_changeSetId :: Lens.Lens' DescribeChangeSetResponse (Prelude.Maybe Prelude.Text)
+describeChangeSetResponse_changeSetId = Lens.lens (\DescribeChangeSetResponse' {changeSetId} -> changeSetId) (\s@DescribeChangeSetResponse' {} a -> s {changeSetId = a} :: DescribeChangeSetResponse)
+
+-- | The optional name provided in the @StartChangeSet@ request. If you do
+-- not provide a name, one is set by default.
+describeChangeSetResponse_changeSetName :: Lens.Lens' DescribeChangeSetResponse (Prelude.Maybe Prelude.Text)
+describeChangeSetResponse_changeSetName = Lens.lens (\DescribeChangeSetResponse' {changeSetName} -> changeSetName) (\s@DescribeChangeSetResponse' {} a -> s {changeSetName = a} :: DescribeChangeSetResponse)
+
+-- | The date and time, in ISO 8601 format (2018-02-27T13:45:22Z), the
+-- request transitioned to a terminal state. The change cannot transition
+-- to a different state. Null if the request is not in a terminal state.
+describeChangeSetResponse_endTime :: Lens.Lens' DescribeChangeSetResponse (Prelude.Maybe Prelude.Text)
+describeChangeSetResponse_endTime = Lens.lens (\DescribeChangeSetResponse' {endTime} -> endTime) (\s@DescribeChangeSetResponse' {} a -> s {endTime = a} :: DescribeChangeSetResponse)
+
+-- | Returned if the change set is in @FAILED@ status. Can be either
+-- @CLIENT_ERROR@, which means that there are issues with the request (see
+-- the @ErrorDetailList@), or @SERVER_FAULT@, which means that there is a
+-- problem in the system, and you should retry your request.
+describeChangeSetResponse_failureCode :: Lens.Lens' DescribeChangeSetResponse (Prelude.Maybe FailureCode)
+describeChangeSetResponse_failureCode = Lens.lens (\DescribeChangeSetResponse' {failureCode} -> failureCode) (\s@DescribeChangeSetResponse' {} a -> s {failureCode = a} :: DescribeChangeSetResponse)
+
+-- | Returned if there is a failure on the change set, but that failure is
+-- not related to any of the changes in the request.
+describeChangeSetResponse_failureDescription :: Lens.Lens' DescribeChangeSetResponse (Prelude.Maybe Prelude.Text)
+describeChangeSetResponse_failureDescription = Lens.lens (\DescribeChangeSetResponse' {failureDescription} -> failureDescription) (\s@DescribeChangeSetResponse' {} a -> s {failureDescription = a} :: DescribeChangeSetResponse)
+
+-- | The date and time, in ISO 8601 format (2018-02-27T13:45:22Z), the
+-- request started.
+describeChangeSetResponse_startTime :: Lens.Lens' DescribeChangeSetResponse (Prelude.Maybe Prelude.Text)
+describeChangeSetResponse_startTime = Lens.lens (\DescribeChangeSetResponse' {startTime} -> startTime) (\s@DescribeChangeSetResponse' {} a -> s {startTime = a} :: DescribeChangeSetResponse)
+
+-- | The status of the change request.
+describeChangeSetResponse_status :: Lens.Lens' DescribeChangeSetResponse (Prelude.Maybe ChangeStatus)
+describeChangeSetResponse_status = Lens.lens (\DescribeChangeSetResponse' {status} -> status) (\s@DescribeChangeSetResponse' {} a -> s {status = a} :: DescribeChangeSetResponse)
+
+-- | The response's http status code.
+describeChangeSetResponse_httpStatus :: Lens.Lens' DescribeChangeSetResponse Prelude.Int
+describeChangeSetResponse_httpStatus = Lens.lens (\DescribeChangeSetResponse' {httpStatus} -> httpStatus) (\s@DescribeChangeSetResponse' {} a -> s {httpStatus = a} :: DescribeChangeSetResponse)
+
+instance Prelude.NFData DescribeChangeSetResponse where
+  rnf DescribeChangeSetResponse' {..} =
+    Prelude.rnf changeSet
+      `Prelude.seq` Prelude.rnf changeSetArn
+      `Prelude.seq` Prelude.rnf changeSetId
+      `Prelude.seq` Prelude.rnf changeSetName
+      `Prelude.seq` Prelude.rnf endTime
+      `Prelude.seq` Prelude.rnf failureCode
+      `Prelude.seq` Prelude.rnf failureDescription
+      `Prelude.seq` Prelude.rnf startTime
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MarketplaceCatalog/DescribeEntity.hs b/gen/Amazonka/MarketplaceCatalog/DescribeEntity.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MarketplaceCatalog/DescribeEntity.hs
@@ -0,0 +1,235 @@
+{-# 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.MarketplaceCatalog.DescribeEntity
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns the metadata and content of the entity.
+module Amazonka.MarketplaceCatalog.DescribeEntity
+  ( -- * Creating a Request
+    DescribeEntity (..),
+    newDescribeEntity,
+
+    -- * Request Lenses
+    describeEntity_catalog,
+    describeEntity_entityId,
+
+    -- * Destructuring the Response
+    DescribeEntityResponse (..),
+    newDescribeEntityResponse,
+
+    -- * Response Lenses
+    describeEntityResponse_details,
+    describeEntityResponse_entityArn,
+    describeEntityResponse_entityIdentifier,
+    describeEntityResponse_entityType,
+    describeEntityResponse_lastModifiedDate,
+    describeEntityResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MarketplaceCatalog.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeEntity' smart constructor.
+data DescribeEntity = DescribeEntity'
+  { -- | Required. The catalog related to the request. Fixed value:
+    -- @AWSMarketplace@
+    catalog :: Prelude.Text,
+    -- | Required. The unique ID of the entity to describe.
+    entityId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeEntity' 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:
+--
+-- 'catalog', 'describeEntity_catalog' - Required. The catalog related to the request. Fixed value:
+-- @AWSMarketplace@
+--
+-- 'entityId', 'describeEntity_entityId' - Required. The unique ID of the entity to describe.
+newDescribeEntity ::
+  -- | 'catalog'
+  Prelude.Text ->
+  -- | 'entityId'
+  Prelude.Text ->
+  DescribeEntity
+newDescribeEntity pCatalog_ pEntityId_ =
+  DescribeEntity'
+    { catalog = pCatalog_,
+      entityId = pEntityId_
+    }
+
+-- | Required. The catalog related to the request. Fixed value:
+-- @AWSMarketplace@
+describeEntity_catalog :: Lens.Lens' DescribeEntity Prelude.Text
+describeEntity_catalog = Lens.lens (\DescribeEntity' {catalog} -> catalog) (\s@DescribeEntity' {} a -> s {catalog = a} :: DescribeEntity)
+
+-- | Required. The unique ID of the entity to describe.
+describeEntity_entityId :: Lens.Lens' DescribeEntity Prelude.Text
+describeEntity_entityId = Lens.lens (\DescribeEntity' {entityId} -> entityId) (\s@DescribeEntity' {} a -> s {entityId = a} :: DescribeEntity)
+
+instance Core.AWSRequest DescribeEntity where
+  type
+    AWSResponse DescribeEntity =
+      DescribeEntityResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeEntityResponse'
+            Prelude.<$> (x Data..?> "Details")
+            Prelude.<*> (x Data..?> "EntityArn")
+            Prelude.<*> (x Data..?> "EntityIdentifier")
+            Prelude.<*> (x Data..?> "EntityType")
+            Prelude.<*> (x Data..?> "LastModifiedDate")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeEntity where
+  hashWithSalt _salt DescribeEntity' {..} =
+    _salt
+      `Prelude.hashWithSalt` catalog
+      `Prelude.hashWithSalt` entityId
+
+instance Prelude.NFData DescribeEntity where
+  rnf DescribeEntity' {..} =
+    Prelude.rnf catalog
+      `Prelude.seq` Prelude.rnf entityId
+
+instance Data.ToHeaders DescribeEntity where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath DescribeEntity where
+  toPath = Prelude.const "/DescribeEntity"
+
+instance Data.ToQuery DescribeEntity where
+  toQuery DescribeEntity' {..} =
+    Prelude.mconcat
+      [ "catalog" Data.=: catalog,
+        "entityId" Data.=: entityId
+      ]
+
+-- | /See:/ 'newDescribeEntityResponse' smart constructor.
+data DescribeEntityResponse = DescribeEntityResponse'
+  { -- | This stringified JSON object includes the details of the entity.
+    details :: Prelude.Maybe Prelude.Text,
+    -- | The ARN associated to the unique identifier for the entity referenced in
+    -- this request.
+    entityArn :: Prelude.Maybe Prelude.Text,
+    -- | The identifier of the entity, in the format of @EntityId\@RevisionId@.
+    entityIdentifier :: Prelude.Maybe Prelude.Text,
+    -- | The named type of the entity, in the format of @EntityType\@Version@.
+    entityType :: Prelude.Maybe Prelude.Text,
+    -- | The last modified date of the entity, in ISO 8601 format
+    -- (2018-02-27T13:45:22Z).
+    lastModifiedDate :: 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 'DescribeEntityResponse' 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:
+--
+-- 'details', 'describeEntityResponse_details' - This stringified JSON object includes the details of the entity.
+--
+-- 'entityArn', 'describeEntityResponse_entityArn' - The ARN associated to the unique identifier for the entity referenced in
+-- this request.
+--
+-- 'entityIdentifier', 'describeEntityResponse_entityIdentifier' - The identifier of the entity, in the format of @EntityId\@RevisionId@.
+--
+-- 'entityType', 'describeEntityResponse_entityType' - The named type of the entity, in the format of @EntityType\@Version@.
+--
+-- 'lastModifiedDate', 'describeEntityResponse_lastModifiedDate' - The last modified date of the entity, in ISO 8601 format
+-- (2018-02-27T13:45:22Z).
+--
+-- 'httpStatus', 'describeEntityResponse_httpStatus' - The response's http status code.
+newDescribeEntityResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeEntityResponse
+newDescribeEntityResponse pHttpStatus_ =
+  DescribeEntityResponse'
+    { details = Prelude.Nothing,
+      entityArn = Prelude.Nothing,
+      entityIdentifier = Prelude.Nothing,
+      entityType = Prelude.Nothing,
+      lastModifiedDate = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | This stringified JSON object includes the details of the entity.
+describeEntityResponse_details :: Lens.Lens' DescribeEntityResponse (Prelude.Maybe Prelude.Text)
+describeEntityResponse_details = Lens.lens (\DescribeEntityResponse' {details} -> details) (\s@DescribeEntityResponse' {} a -> s {details = a} :: DescribeEntityResponse)
+
+-- | The ARN associated to the unique identifier for the entity referenced in
+-- this request.
+describeEntityResponse_entityArn :: Lens.Lens' DescribeEntityResponse (Prelude.Maybe Prelude.Text)
+describeEntityResponse_entityArn = Lens.lens (\DescribeEntityResponse' {entityArn} -> entityArn) (\s@DescribeEntityResponse' {} a -> s {entityArn = a} :: DescribeEntityResponse)
+
+-- | The identifier of the entity, in the format of @EntityId\@RevisionId@.
+describeEntityResponse_entityIdentifier :: Lens.Lens' DescribeEntityResponse (Prelude.Maybe Prelude.Text)
+describeEntityResponse_entityIdentifier = Lens.lens (\DescribeEntityResponse' {entityIdentifier} -> entityIdentifier) (\s@DescribeEntityResponse' {} a -> s {entityIdentifier = a} :: DescribeEntityResponse)
+
+-- | The named type of the entity, in the format of @EntityType\@Version@.
+describeEntityResponse_entityType :: Lens.Lens' DescribeEntityResponse (Prelude.Maybe Prelude.Text)
+describeEntityResponse_entityType = Lens.lens (\DescribeEntityResponse' {entityType} -> entityType) (\s@DescribeEntityResponse' {} a -> s {entityType = a} :: DescribeEntityResponse)
+
+-- | The last modified date of the entity, in ISO 8601 format
+-- (2018-02-27T13:45:22Z).
+describeEntityResponse_lastModifiedDate :: Lens.Lens' DescribeEntityResponse (Prelude.Maybe Prelude.Text)
+describeEntityResponse_lastModifiedDate = Lens.lens (\DescribeEntityResponse' {lastModifiedDate} -> lastModifiedDate) (\s@DescribeEntityResponse' {} a -> s {lastModifiedDate = a} :: DescribeEntityResponse)
+
+-- | The response's http status code.
+describeEntityResponse_httpStatus :: Lens.Lens' DescribeEntityResponse Prelude.Int
+describeEntityResponse_httpStatus = Lens.lens (\DescribeEntityResponse' {httpStatus} -> httpStatus) (\s@DescribeEntityResponse' {} a -> s {httpStatus = a} :: DescribeEntityResponse)
+
+instance Prelude.NFData DescribeEntityResponse where
+  rnf DescribeEntityResponse' {..} =
+    Prelude.rnf details
+      `Prelude.seq` Prelude.rnf entityArn
+      `Prelude.seq` Prelude.rnf entityIdentifier
+      `Prelude.seq` Prelude.rnf entityType
+      `Prelude.seq` Prelude.rnf lastModifiedDate
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MarketplaceCatalog/Lens.hs b/gen/Amazonka/MarketplaceCatalog/Lens.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MarketplaceCatalog/Lens.hs
@@ -0,0 +1,168 @@
+{-# 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.MarketplaceCatalog.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.MarketplaceCatalog.Lens
+  ( -- * Operations
+
+    -- ** CancelChangeSet
+    cancelChangeSet_catalog,
+    cancelChangeSet_changeSetId,
+    cancelChangeSetResponse_changeSetArn,
+    cancelChangeSetResponse_changeSetId,
+    cancelChangeSetResponse_httpStatus,
+
+    -- ** DescribeChangeSet
+    describeChangeSet_catalog,
+    describeChangeSet_changeSetId,
+    describeChangeSetResponse_changeSet,
+    describeChangeSetResponse_changeSetArn,
+    describeChangeSetResponse_changeSetId,
+    describeChangeSetResponse_changeSetName,
+    describeChangeSetResponse_endTime,
+    describeChangeSetResponse_failureCode,
+    describeChangeSetResponse_failureDescription,
+    describeChangeSetResponse_startTime,
+    describeChangeSetResponse_status,
+    describeChangeSetResponse_httpStatus,
+
+    -- ** DescribeEntity
+    describeEntity_catalog,
+    describeEntity_entityId,
+    describeEntityResponse_details,
+    describeEntityResponse_entityArn,
+    describeEntityResponse_entityIdentifier,
+    describeEntityResponse_entityType,
+    describeEntityResponse_lastModifiedDate,
+    describeEntityResponse_httpStatus,
+
+    -- ** ListChangeSets
+    listChangeSets_filterList,
+    listChangeSets_maxResults,
+    listChangeSets_nextToken,
+    listChangeSets_sort,
+    listChangeSets_catalog,
+    listChangeSetsResponse_changeSetSummaryList,
+    listChangeSetsResponse_nextToken,
+    listChangeSetsResponse_httpStatus,
+
+    -- ** ListEntities
+    listEntities_filterList,
+    listEntities_maxResults,
+    listEntities_nextToken,
+    listEntities_sort,
+    listEntities_catalog,
+    listEntities_entityType,
+    listEntitiesResponse_entitySummaryList,
+    listEntitiesResponse_nextToken,
+    listEntitiesResponse_httpStatus,
+
+    -- ** ListTagsForResource
+    listTagsForResource_resourceArn,
+    listTagsForResourceResponse_resourceArn,
+    listTagsForResourceResponse_tags,
+    listTagsForResourceResponse_httpStatus,
+
+    -- ** StartChangeSet
+    startChangeSet_changeSetName,
+    startChangeSet_changeSetTags,
+    startChangeSet_clientRequestToken,
+    startChangeSet_catalog,
+    startChangeSet_changeSet,
+    startChangeSetResponse_changeSetArn,
+    startChangeSetResponse_changeSetId,
+    startChangeSetResponse_httpStatus,
+
+    -- ** TagResource
+    tagResource_resourceArn,
+    tagResource_tags,
+    tagResourceResponse_httpStatus,
+
+    -- ** UntagResource
+    untagResource_resourceArn,
+    untagResource_tagKeys,
+    untagResourceResponse_httpStatus,
+
+    -- * Types
+
+    -- ** Change
+    change_changeName,
+    change_entityTags,
+    change_changeType,
+    change_entity,
+    change_details,
+
+    -- ** ChangeSetSummaryListItem
+    changeSetSummaryListItem_changeSetArn,
+    changeSetSummaryListItem_changeSetId,
+    changeSetSummaryListItem_changeSetName,
+    changeSetSummaryListItem_endTime,
+    changeSetSummaryListItem_entityIdList,
+    changeSetSummaryListItem_failureCode,
+    changeSetSummaryListItem_startTime,
+    changeSetSummaryListItem_status,
+
+    -- ** ChangeSummary
+    changeSummary_changeName,
+    changeSummary_changeType,
+    changeSummary_details,
+    changeSummary_entity,
+    changeSummary_errorDetailList,
+
+    -- ** Entity
+    entity_identifier,
+    entity_type,
+
+    -- ** EntitySummary
+    entitySummary_entityArn,
+    entitySummary_entityId,
+    entitySummary_entityType,
+    entitySummary_lastModifiedDate,
+    entitySummary_name,
+    entitySummary_visibility,
+
+    -- ** ErrorDetail
+    errorDetail_errorCode,
+    errorDetail_errorMessage,
+
+    -- ** Filter
+    filter_name,
+    filter_valueList,
+
+    -- ** Sort
+    sort_sortBy,
+    sort_sortOrder,
+
+    -- ** Tag
+    tag_key,
+    tag_value,
+  )
+where
+
+import Amazonka.MarketplaceCatalog.CancelChangeSet
+import Amazonka.MarketplaceCatalog.DescribeChangeSet
+import Amazonka.MarketplaceCatalog.DescribeEntity
+import Amazonka.MarketplaceCatalog.ListChangeSets
+import Amazonka.MarketplaceCatalog.ListEntities
+import Amazonka.MarketplaceCatalog.ListTagsForResource
+import Amazonka.MarketplaceCatalog.StartChangeSet
+import Amazonka.MarketplaceCatalog.TagResource
+import Amazonka.MarketplaceCatalog.Types.Change
+import Amazonka.MarketplaceCatalog.Types.ChangeSetSummaryListItem
+import Amazonka.MarketplaceCatalog.Types.ChangeSummary
+import Amazonka.MarketplaceCatalog.Types.Entity
+import Amazonka.MarketplaceCatalog.Types.EntitySummary
+import Amazonka.MarketplaceCatalog.Types.ErrorDetail
+import Amazonka.MarketplaceCatalog.Types.Filter
+import Amazonka.MarketplaceCatalog.Types.Sort
+import Amazonka.MarketplaceCatalog.Types.Tag
+import Amazonka.MarketplaceCatalog.UntagResource
diff --git a/gen/Amazonka/MarketplaceCatalog/ListChangeSets.hs b/gen/Amazonka/MarketplaceCatalog/ListChangeSets.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MarketplaceCatalog/ListChangeSets.hs
@@ -0,0 +1,254 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.MarketplaceCatalog.ListChangeSets
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns the list of change sets owned by the account being used to make
+-- the call. You can filter this list by providing any combination of
+-- @entityId@, @ChangeSetName@, and status. If you provide more than one
+-- filter, the API operation applies a logical AND between the filters.
+--
+-- You can describe a change during the 60-day request history retention
+-- period for API calls.
+module Amazonka.MarketplaceCatalog.ListChangeSets
+  ( -- * Creating a Request
+    ListChangeSets (..),
+    newListChangeSets,
+
+    -- * Request Lenses
+    listChangeSets_filterList,
+    listChangeSets_maxResults,
+    listChangeSets_nextToken,
+    listChangeSets_sort,
+    listChangeSets_catalog,
+
+    -- * Destructuring the Response
+    ListChangeSetsResponse (..),
+    newListChangeSetsResponse,
+
+    -- * Response Lenses
+    listChangeSetsResponse_changeSetSummaryList,
+    listChangeSetsResponse_nextToken,
+    listChangeSetsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MarketplaceCatalog.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListChangeSets' smart constructor.
+data ListChangeSets = ListChangeSets'
+  { -- | An array of filter objects.
+    filterList :: Prelude.Maybe (Prelude.NonEmpty Filter),
+    -- | The maximum number of results returned by a single call. This value must
+    -- be provided in the next call to retrieve the next set of results. By
+    -- default, this value is 20.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The token value retrieved from a previous call to access the next page
+    -- of results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | An object that contains two attributes, @SortBy@ and @SortOrder@.
+    sort :: Prelude.Maybe Sort,
+    -- | The catalog related to the request. Fixed value: @AWSMarketplace@
+    catalog :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListChangeSets' 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:
+--
+-- 'filterList', 'listChangeSets_filterList' - An array of filter objects.
+--
+-- 'maxResults', 'listChangeSets_maxResults' - The maximum number of results returned by a single call. This value must
+-- be provided in the next call to retrieve the next set of results. By
+-- default, this value is 20.
+--
+-- 'nextToken', 'listChangeSets_nextToken' - The token value retrieved from a previous call to access the next page
+-- of results.
+--
+-- 'sort', 'listChangeSets_sort' - An object that contains two attributes, @SortBy@ and @SortOrder@.
+--
+-- 'catalog', 'listChangeSets_catalog' - The catalog related to the request. Fixed value: @AWSMarketplace@
+newListChangeSets ::
+  -- | 'catalog'
+  Prelude.Text ->
+  ListChangeSets
+newListChangeSets pCatalog_ =
+  ListChangeSets'
+    { filterList = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      sort = Prelude.Nothing,
+      catalog = pCatalog_
+    }
+
+-- | An array of filter objects.
+listChangeSets_filterList :: Lens.Lens' ListChangeSets (Prelude.Maybe (Prelude.NonEmpty Filter))
+listChangeSets_filterList = Lens.lens (\ListChangeSets' {filterList} -> filterList) (\s@ListChangeSets' {} a -> s {filterList = a} :: ListChangeSets) Prelude.. Lens.mapping Lens.coerced
+
+-- | The maximum number of results returned by a single call. This value must
+-- be provided in the next call to retrieve the next set of results. By
+-- default, this value is 20.
+listChangeSets_maxResults :: Lens.Lens' ListChangeSets (Prelude.Maybe Prelude.Natural)
+listChangeSets_maxResults = Lens.lens (\ListChangeSets' {maxResults} -> maxResults) (\s@ListChangeSets' {} a -> s {maxResults = a} :: ListChangeSets)
+
+-- | The token value retrieved from a previous call to access the next page
+-- of results.
+listChangeSets_nextToken :: Lens.Lens' ListChangeSets (Prelude.Maybe Prelude.Text)
+listChangeSets_nextToken = Lens.lens (\ListChangeSets' {nextToken} -> nextToken) (\s@ListChangeSets' {} a -> s {nextToken = a} :: ListChangeSets)
+
+-- | An object that contains two attributes, @SortBy@ and @SortOrder@.
+listChangeSets_sort :: Lens.Lens' ListChangeSets (Prelude.Maybe Sort)
+listChangeSets_sort = Lens.lens (\ListChangeSets' {sort} -> sort) (\s@ListChangeSets' {} a -> s {sort = a} :: ListChangeSets)
+
+-- | The catalog related to the request. Fixed value: @AWSMarketplace@
+listChangeSets_catalog :: Lens.Lens' ListChangeSets Prelude.Text
+listChangeSets_catalog = Lens.lens (\ListChangeSets' {catalog} -> catalog) (\s@ListChangeSets' {} a -> s {catalog = a} :: ListChangeSets)
+
+instance Core.AWSRequest ListChangeSets where
+  type
+    AWSResponse ListChangeSets =
+      ListChangeSetsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListChangeSetsResponse'
+            Prelude.<$> ( x
+                            Data..?> "ChangeSetSummaryList"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (x Data..?> "NextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListChangeSets where
+  hashWithSalt _salt ListChangeSets' {..} =
+    _salt
+      `Prelude.hashWithSalt` filterList
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` sort
+      `Prelude.hashWithSalt` catalog
+
+instance Prelude.NFData ListChangeSets where
+  rnf ListChangeSets' {..} =
+    Prelude.rnf filterList
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf sort
+      `Prelude.seq` Prelude.rnf catalog
+
+instance Data.ToHeaders ListChangeSets where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ListChangeSets where
+  toJSON ListChangeSets' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("FilterList" Data..=) Prelude.<$> filterList,
+            ("MaxResults" Data..=) Prelude.<$> maxResults,
+            ("NextToken" Data..=) Prelude.<$> nextToken,
+            ("Sort" Data..=) Prelude.<$> sort,
+            Prelude.Just ("Catalog" Data..= catalog)
+          ]
+      )
+
+instance Data.ToPath ListChangeSets where
+  toPath = Prelude.const "/ListChangeSets"
+
+instance Data.ToQuery ListChangeSets where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListChangeSetsResponse' smart constructor.
+data ListChangeSetsResponse = ListChangeSetsResponse'
+  { -- | Array of @ChangeSetSummaryListItem@ objects.
+    changeSetSummaryList :: Prelude.Maybe [ChangeSetSummaryListItem],
+    -- | The value of the next token, if it exists. Null if there are no more
+    -- results.
+    nextToken :: 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 'ListChangeSetsResponse' 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:
+--
+-- 'changeSetSummaryList', 'listChangeSetsResponse_changeSetSummaryList' - Array of @ChangeSetSummaryListItem@ objects.
+--
+-- 'nextToken', 'listChangeSetsResponse_nextToken' - The value of the next token, if it exists. Null if there are no more
+-- results.
+--
+-- 'httpStatus', 'listChangeSetsResponse_httpStatus' - The response's http status code.
+newListChangeSetsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListChangeSetsResponse
+newListChangeSetsResponse pHttpStatus_ =
+  ListChangeSetsResponse'
+    { changeSetSummaryList =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Array of @ChangeSetSummaryListItem@ objects.
+listChangeSetsResponse_changeSetSummaryList :: Lens.Lens' ListChangeSetsResponse (Prelude.Maybe [ChangeSetSummaryListItem])
+listChangeSetsResponse_changeSetSummaryList = Lens.lens (\ListChangeSetsResponse' {changeSetSummaryList} -> changeSetSummaryList) (\s@ListChangeSetsResponse' {} a -> s {changeSetSummaryList = a} :: ListChangeSetsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The value of the next token, if it exists. Null if there are no more
+-- results.
+listChangeSetsResponse_nextToken :: Lens.Lens' ListChangeSetsResponse (Prelude.Maybe Prelude.Text)
+listChangeSetsResponse_nextToken = Lens.lens (\ListChangeSetsResponse' {nextToken} -> nextToken) (\s@ListChangeSetsResponse' {} a -> s {nextToken = a} :: ListChangeSetsResponse)
+
+-- | The response's http status code.
+listChangeSetsResponse_httpStatus :: Lens.Lens' ListChangeSetsResponse Prelude.Int
+listChangeSetsResponse_httpStatus = Lens.lens (\ListChangeSetsResponse' {httpStatus} -> httpStatus) (\s@ListChangeSetsResponse' {} a -> s {httpStatus = a} :: ListChangeSetsResponse)
+
+instance Prelude.NFData ListChangeSetsResponse where
+  rnf ListChangeSetsResponse' {..} =
+    Prelude.rnf changeSetSummaryList
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MarketplaceCatalog/ListEntities.hs b/gen/Amazonka/MarketplaceCatalog/ListEntities.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MarketplaceCatalog/ListEntities.hs
@@ -0,0 +1,261 @@
+{-# 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.MarketplaceCatalog.ListEntities
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Provides the list of entities of a given type.
+module Amazonka.MarketplaceCatalog.ListEntities
+  ( -- * Creating a Request
+    ListEntities (..),
+    newListEntities,
+
+    -- * Request Lenses
+    listEntities_filterList,
+    listEntities_maxResults,
+    listEntities_nextToken,
+    listEntities_sort,
+    listEntities_catalog,
+    listEntities_entityType,
+
+    -- * Destructuring the Response
+    ListEntitiesResponse (..),
+    newListEntitiesResponse,
+
+    -- * Response Lenses
+    listEntitiesResponse_entitySummaryList,
+    listEntitiesResponse_nextToken,
+    listEntitiesResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MarketplaceCatalog.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListEntities' smart constructor.
+data ListEntities = ListEntities'
+  { -- | An array of filter objects. Each filter object contains two attributes,
+    -- @filterName@ and @filterValues@.
+    filterList :: Prelude.Maybe (Prelude.NonEmpty Filter),
+    -- | Specifies the upper limit of the elements on a single page. If a value
+    -- isn\'t provided, the default value is 20.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The value of the next token, if it exists. Null if there are no more
+    -- results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | An object that contains two attributes, @SortBy@ and @SortOrder@.
+    sort :: Prelude.Maybe Sort,
+    -- | The catalog related to the request. Fixed value: @AWSMarketplace@
+    catalog :: Prelude.Text,
+    -- | The type of entities to retrieve.
+    entityType :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListEntities' 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:
+--
+-- 'filterList', 'listEntities_filterList' - An array of filter objects. Each filter object contains two attributes,
+-- @filterName@ and @filterValues@.
+--
+-- 'maxResults', 'listEntities_maxResults' - Specifies the upper limit of the elements on a single page. If a value
+-- isn\'t provided, the default value is 20.
+--
+-- 'nextToken', 'listEntities_nextToken' - The value of the next token, if it exists. Null if there are no more
+-- results.
+--
+-- 'sort', 'listEntities_sort' - An object that contains two attributes, @SortBy@ and @SortOrder@.
+--
+-- 'catalog', 'listEntities_catalog' - The catalog related to the request. Fixed value: @AWSMarketplace@
+--
+-- 'entityType', 'listEntities_entityType' - The type of entities to retrieve.
+newListEntities ::
+  -- | 'catalog'
+  Prelude.Text ->
+  -- | 'entityType'
+  Prelude.Text ->
+  ListEntities
+newListEntities pCatalog_ pEntityType_ =
+  ListEntities'
+    { filterList = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      sort = Prelude.Nothing,
+      catalog = pCatalog_,
+      entityType = pEntityType_
+    }
+
+-- | An array of filter objects. Each filter object contains two attributes,
+-- @filterName@ and @filterValues@.
+listEntities_filterList :: Lens.Lens' ListEntities (Prelude.Maybe (Prelude.NonEmpty Filter))
+listEntities_filterList = Lens.lens (\ListEntities' {filterList} -> filterList) (\s@ListEntities' {} a -> s {filterList = a} :: ListEntities) Prelude.. Lens.mapping Lens.coerced
+
+-- | Specifies the upper limit of the elements on a single page. If a value
+-- isn\'t provided, the default value is 20.
+listEntities_maxResults :: Lens.Lens' ListEntities (Prelude.Maybe Prelude.Natural)
+listEntities_maxResults = Lens.lens (\ListEntities' {maxResults} -> maxResults) (\s@ListEntities' {} a -> s {maxResults = a} :: ListEntities)
+
+-- | The value of the next token, if it exists. Null if there are no more
+-- results.
+listEntities_nextToken :: Lens.Lens' ListEntities (Prelude.Maybe Prelude.Text)
+listEntities_nextToken = Lens.lens (\ListEntities' {nextToken} -> nextToken) (\s@ListEntities' {} a -> s {nextToken = a} :: ListEntities)
+
+-- | An object that contains two attributes, @SortBy@ and @SortOrder@.
+listEntities_sort :: Lens.Lens' ListEntities (Prelude.Maybe Sort)
+listEntities_sort = Lens.lens (\ListEntities' {sort} -> sort) (\s@ListEntities' {} a -> s {sort = a} :: ListEntities)
+
+-- | The catalog related to the request. Fixed value: @AWSMarketplace@
+listEntities_catalog :: Lens.Lens' ListEntities Prelude.Text
+listEntities_catalog = Lens.lens (\ListEntities' {catalog} -> catalog) (\s@ListEntities' {} a -> s {catalog = a} :: ListEntities)
+
+-- | The type of entities to retrieve.
+listEntities_entityType :: Lens.Lens' ListEntities Prelude.Text
+listEntities_entityType = Lens.lens (\ListEntities' {entityType} -> entityType) (\s@ListEntities' {} a -> s {entityType = a} :: ListEntities)
+
+instance Core.AWSRequest ListEntities where
+  type AWSResponse ListEntities = ListEntitiesResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListEntitiesResponse'
+            Prelude.<$> ( x
+                            Data..?> "EntitySummaryList"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (x Data..?> "NextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListEntities where
+  hashWithSalt _salt ListEntities' {..} =
+    _salt
+      `Prelude.hashWithSalt` filterList
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` sort
+      `Prelude.hashWithSalt` catalog
+      `Prelude.hashWithSalt` entityType
+
+instance Prelude.NFData ListEntities where
+  rnf ListEntities' {..} =
+    Prelude.rnf filterList
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf sort
+      `Prelude.seq` Prelude.rnf catalog
+      `Prelude.seq` Prelude.rnf entityType
+
+instance Data.ToHeaders ListEntities where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ListEntities where
+  toJSON ListEntities' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("FilterList" Data..=) Prelude.<$> filterList,
+            ("MaxResults" Data..=) Prelude.<$> maxResults,
+            ("NextToken" Data..=) Prelude.<$> nextToken,
+            ("Sort" Data..=) Prelude.<$> sort,
+            Prelude.Just ("Catalog" Data..= catalog),
+            Prelude.Just ("EntityType" Data..= entityType)
+          ]
+      )
+
+instance Data.ToPath ListEntities where
+  toPath = Prelude.const "/ListEntities"
+
+instance Data.ToQuery ListEntities where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListEntitiesResponse' smart constructor.
+data ListEntitiesResponse = ListEntitiesResponse'
+  { -- | Array of @EntitySummary@ object.
+    entitySummaryList :: Prelude.Maybe [EntitySummary],
+    -- | The value of the next token if it exists. Null if there is no more
+    -- result.
+    nextToken :: 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 'ListEntitiesResponse' 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:
+--
+-- 'entitySummaryList', 'listEntitiesResponse_entitySummaryList' - Array of @EntitySummary@ object.
+--
+-- 'nextToken', 'listEntitiesResponse_nextToken' - The value of the next token if it exists. Null if there is no more
+-- result.
+--
+-- 'httpStatus', 'listEntitiesResponse_httpStatus' - The response's http status code.
+newListEntitiesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListEntitiesResponse
+newListEntitiesResponse pHttpStatus_ =
+  ListEntitiesResponse'
+    { entitySummaryList =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Array of @EntitySummary@ object.
+listEntitiesResponse_entitySummaryList :: Lens.Lens' ListEntitiesResponse (Prelude.Maybe [EntitySummary])
+listEntitiesResponse_entitySummaryList = Lens.lens (\ListEntitiesResponse' {entitySummaryList} -> entitySummaryList) (\s@ListEntitiesResponse' {} a -> s {entitySummaryList = a} :: ListEntitiesResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The value of the next token if it exists. Null if there is no more
+-- result.
+listEntitiesResponse_nextToken :: Lens.Lens' ListEntitiesResponse (Prelude.Maybe Prelude.Text)
+listEntitiesResponse_nextToken = Lens.lens (\ListEntitiesResponse' {nextToken} -> nextToken) (\s@ListEntitiesResponse' {} a -> s {nextToken = a} :: ListEntitiesResponse)
+
+-- | The response's http status code.
+listEntitiesResponse_httpStatus :: Lens.Lens' ListEntitiesResponse Prelude.Int
+listEntitiesResponse_httpStatus = Lens.lens (\ListEntitiesResponse' {httpStatus} -> httpStatus) (\s@ListEntitiesResponse' {} a -> s {httpStatus = a} :: ListEntitiesResponse)
+
+instance Prelude.NFData ListEntitiesResponse where
+  rnf ListEntitiesResponse' {..} =
+    Prelude.rnf entitySummaryList
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MarketplaceCatalog/ListTagsForResource.hs b/gen/Amazonka/MarketplaceCatalog/ListTagsForResource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MarketplaceCatalog/ListTagsForResource.hs
@@ -0,0 +1,186 @@
+{-# 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.MarketplaceCatalog.ListTagsForResource
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Lists all tags that have been added to a resource (either an
+-- <https://docs.aws.amazon.com/marketplace-catalog/latest/api-reference/welcome.html#catalog-api-entities entity>
+-- or
+-- <https://docs.aws.amazon.com/marketplace-catalog/latest/api-reference/welcome.html#working-with-change-sets change set>).
+module Amazonka.MarketplaceCatalog.ListTagsForResource
+  ( -- * Creating a Request
+    ListTagsForResource (..),
+    newListTagsForResource,
+
+    -- * Request Lenses
+    listTagsForResource_resourceArn,
+
+    -- * Destructuring the Response
+    ListTagsForResourceResponse (..),
+    newListTagsForResourceResponse,
+
+    -- * Response Lenses
+    listTagsForResourceResponse_resourceArn,
+    listTagsForResourceResponse_tags,
+    listTagsForResourceResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MarketplaceCatalog.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListTagsForResource' smart constructor.
+data ListTagsForResource = ListTagsForResource'
+  { -- | Required. The Amazon Resource Name (ARN) associated with the resource
+    -- you want to list tags on.
+    resourceArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListTagsForResource' 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:
+--
+-- 'resourceArn', 'listTagsForResource_resourceArn' - Required. The Amazon Resource Name (ARN) associated with the resource
+-- you want to list tags on.
+newListTagsForResource ::
+  -- | 'resourceArn'
+  Prelude.Text ->
+  ListTagsForResource
+newListTagsForResource pResourceArn_ =
+  ListTagsForResource' {resourceArn = pResourceArn_}
+
+-- | Required. The Amazon Resource Name (ARN) associated with the resource
+-- you want to list tags on.
+listTagsForResource_resourceArn :: Lens.Lens' ListTagsForResource Prelude.Text
+listTagsForResource_resourceArn = Lens.lens (\ListTagsForResource' {resourceArn} -> resourceArn) (\s@ListTagsForResource' {} a -> s {resourceArn = a} :: ListTagsForResource)
+
+instance Core.AWSRequest ListTagsForResource where
+  type
+    AWSResponse ListTagsForResource =
+      ListTagsForResourceResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListTagsForResourceResponse'
+            Prelude.<$> (x Data..?> "ResourceArn")
+            Prelude.<*> (x Data..?> "Tags")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListTagsForResource where
+  hashWithSalt _salt ListTagsForResource' {..} =
+    _salt `Prelude.hashWithSalt` resourceArn
+
+instance Prelude.NFData ListTagsForResource where
+  rnf ListTagsForResource' {..} =
+    Prelude.rnf resourceArn
+
+instance Data.ToHeaders ListTagsForResource where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ListTagsForResource where
+  toJSON ListTagsForResource' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("ResourceArn" Data..= resourceArn)]
+      )
+
+instance Data.ToPath ListTagsForResource where
+  toPath = Prelude.const "/ListTagsForResource"
+
+instance Data.ToQuery ListTagsForResource where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListTagsForResourceResponse' smart constructor.
+data ListTagsForResourceResponse = ListTagsForResourceResponse'
+  { -- | Required. The ARN associated with the resource you want to list tags on.
+    resourceArn :: Prelude.Maybe Prelude.Text,
+    -- | Required. A list of objects specifying each key name and value. Number
+    -- of objects allowed: 1-50.
+    tags :: Prelude.Maybe (Prelude.NonEmpty Tag),
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListTagsForResourceResponse' 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:
+--
+-- 'resourceArn', 'listTagsForResourceResponse_resourceArn' - Required. The ARN associated with the resource you want to list tags on.
+--
+-- 'tags', 'listTagsForResourceResponse_tags' - Required. A list of objects specifying each key name and value. Number
+-- of objects allowed: 1-50.
+--
+-- 'httpStatus', 'listTagsForResourceResponse_httpStatus' - The response's http status code.
+newListTagsForResourceResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListTagsForResourceResponse
+newListTagsForResourceResponse pHttpStatus_ =
+  ListTagsForResourceResponse'
+    { resourceArn =
+        Prelude.Nothing,
+      tags = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Required. The ARN associated with the resource you want to list tags on.
+listTagsForResourceResponse_resourceArn :: Lens.Lens' ListTagsForResourceResponse (Prelude.Maybe Prelude.Text)
+listTagsForResourceResponse_resourceArn = Lens.lens (\ListTagsForResourceResponse' {resourceArn} -> resourceArn) (\s@ListTagsForResourceResponse' {} a -> s {resourceArn = a} :: ListTagsForResourceResponse)
+
+-- | Required. A list of objects specifying each key name and value. Number
+-- of objects allowed: 1-50.
+listTagsForResourceResponse_tags :: Lens.Lens' ListTagsForResourceResponse (Prelude.Maybe (Prelude.NonEmpty Tag))
+listTagsForResourceResponse_tags = Lens.lens (\ListTagsForResourceResponse' {tags} -> tags) (\s@ListTagsForResourceResponse' {} a -> s {tags = a} :: ListTagsForResourceResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+listTagsForResourceResponse_httpStatus :: Lens.Lens' ListTagsForResourceResponse Prelude.Int
+listTagsForResourceResponse_httpStatus = Lens.lens (\ListTagsForResourceResponse' {httpStatus} -> httpStatus) (\s@ListTagsForResourceResponse' {} a -> s {httpStatus = a} :: ListTagsForResourceResponse)
+
+instance Prelude.NFData ListTagsForResourceResponse where
+  rnf ListTagsForResourceResponse' {..} =
+    Prelude.rnf resourceArn
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MarketplaceCatalog/StartChangeSet.hs b/gen/Amazonka/MarketplaceCatalog/StartChangeSet.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MarketplaceCatalog/StartChangeSet.hs
@@ -0,0 +1,256 @@
+{-# 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.MarketplaceCatalog.StartChangeSet
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Allows you to request changes for your entities. Within a single
+-- @ChangeSet@, you can\'t start the same change type against the same
+-- entity multiple times. Additionally, when a @ChangeSet@ is running, all
+-- the entities targeted by the different changes are locked until the
+-- change set has completed (either succeeded, cancelled, or failed). If
+-- you try to start a change set containing a change against an entity that
+-- is already locked, you will receive a @ResourceInUseException@ error.
+--
+-- For example, you can\'t start the @ChangeSet@ described in the
+-- <https://docs.aws.amazon.com/marketplace-catalog/latest/api-reference/API_StartChangeSet.html#API_StartChangeSet_Examples example>
+-- later in this topic because it contains two changes to run the same
+-- change type (@AddRevisions@) against the same entity (@entity-id\@1@).
+--
+-- For more information about working with change sets, see
+-- <https://docs.aws.amazon.com/marketplace-catalog/latest/api-reference/welcome.html#working-with-change-sets Working with change sets>.
+module Amazonka.MarketplaceCatalog.StartChangeSet
+  ( -- * Creating a Request
+    StartChangeSet (..),
+    newStartChangeSet,
+
+    -- * Request Lenses
+    startChangeSet_changeSetName,
+    startChangeSet_changeSetTags,
+    startChangeSet_clientRequestToken,
+    startChangeSet_catalog,
+    startChangeSet_changeSet,
+
+    -- * Destructuring the Response
+    StartChangeSetResponse (..),
+    newStartChangeSetResponse,
+
+    -- * Response Lenses
+    startChangeSetResponse_changeSetArn,
+    startChangeSetResponse_changeSetId,
+    startChangeSetResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MarketplaceCatalog.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newStartChangeSet' smart constructor.
+data StartChangeSet = StartChangeSet'
+  { -- | Optional case sensitive string of up to 100 ASCII characters. The change
+    -- set name can be used to filter the list of change sets.
+    changeSetName :: Prelude.Maybe Prelude.Text,
+    -- | A list of objects specifying each key name and value for the
+    -- @ChangeSetTags@ property.
+    changeSetTags :: Prelude.Maybe (Prelude.NonEmpty Tag),
+    -- | A unique token to identify the request to ensure idempotency.
+    clientRequestToken :: Prelude.Maybe Prelude.Text,
+    -- | The catalog related to the request. Fixed value: @AWSMarketplace@
+    catalog :: Prelude.Text,
+    -- | Array of @change@ object.
+    changeSet :: Prelude.NonEmpty Change
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StartChangeSet' 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:
+--
+-- 'changeSetName', 'startChangeSet_changeSetName' - Optional case sensitive string of up to 100 ASCII characters. The change
+-- set name can be used to filter the list of change sets.
+--
+-- 'changeSetTags', 'startChangeSet_changeSetTags' - A list of objects specifying each key name and value for the
+-- @ChangeSetTags@ property.
+--
+-- 'clientRequestToken', 'startChangeSet_clientRequestToken' - A unique token to identify the request to ensure idempotency.
+--
+-- 'catalog', 'startChangeSet_catalog' - The catalog related to the request. Fixed value: @AWSMarketplace@
+--
+-- 'changeSet', 'startChangeSet_changeSet' - Array of @change@ object.
+newStartChangeSet ::
+  -- | 'catalog'
+  Prelude.Text ->
+  -- | 'changeSet'
+  Prelude.NonEmpty Change ->
+  StartChangeSet
+newStartChangeSet pCatalog_ pChangeSet_ =
+  StartChangeSet'
+    { changeSetName = Prelude.Nothing,
+      changeSetTags = Prelude.Nothing,
+      clientRequestToken = Prelude.Nothing,
+      catalog = pCatalog_,
+      changeSet = Lens.coerced Lens.# pChangeSet_
+    }
+
+-- | Optional case sensitive string of up to 100 ASCII characters. The change
+-- set name can be used to filter the list of change sets.
+startChangeSet_changeSetName :: Lens.Lens' StartChangeSet (Prelude.Maybe Prelude.Text)
+startChangeSet_changeSetName = Lens.lens (\StartChangeSet' {changeSetName} -> changeSetName) (\s@StartChangeSet' {} a -> s {changeSetName = a} :: StartChangeSet)
+
+-- | A list of objects specifying each key name and value for the
+-- @ChangeSetTags@ property.
+startChangeSet_changeSetTags :: Lens.Lens' StartChangeSet (Prelude.Maybe (Prelude.NonEmpty Tag))
+startChangeSet_changeSetTags = Lens.lens (\StartChangeSet' {changeSetTags} -> changeSetTags) (\s@StartChangeSet' {} a -> s {changeSetTags = a} :: StartChangeSet) Prelude.. Lens.mapping Lens.coerced
+
+-- | A unique token to identify the request to ensure idempotency.
+startChangeSet_clientRequestToken :: Lens.Lens' StartChangeSet (Prelude.Maybe Prelude.Text)
+startChangeSet_clientRequestToken = Lens.lens (\StartChangeSet' {clientRequestToken} -> clientRequestToken) (\s@StartChangeSet' {} a -> s {clientRequestToken = a} :: StartChangeSet)
+
+-- | The catalog related to the request. Fixed value: @AWSMarketplace@
+startChangeSet_catalog :: Lens.Lens' StartChangeSet Prelude.Text
+startChangeSet_catalog = Lens.lens (\StartChangeSet' {catalog} -> catalog) (\s@StartChangeSet' {} a -> s {catalog = a} :: StartChangeSet)
+
+-- | Array of @change@ object.
+startChangeSet_changeSet :: Lens.Lens' StartChangeSet (Prelude.NonEmpty Change)
+startChangeSet_changeSet = Lens.lens (\StartChangeSet' {changeSet} -> changeSet) (\s@StartChangeSet' {} a -> s {changeSet = a} :: StartChangeSet) Prelude.. Lens.coerced
+
+instance Core.AWSRequest StartChangeSet where
+  type
+    AWSResponse StartChangeSet =
+      StartChangeSetResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          StartChangeSetResponse'
+            Prelude.<$> (x Data..?> "ChangeSetArn")
+            Prelude.<*> (x Data..?> "ChangeSetId")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable StartChangeSet where
+  hashWithSalt _salt StartChangeSet' {..} =
+    _salt
+      `Prelude.hashWithSalt` changeSetName
+      `Prelude.hashWithSalt` changeSetTags
+      `Prelude.hashWithSalt` clientRequestToken
+      `Prelude.hashWithSalt` catalog
+      `Prelude.hashWithSalt` changeSet
+
+instance Prelude.NFData StartChangeSet where
+  rnf StartChangeSet' {..} =
+    Prelude.rnf changeSetName
+      `Prelude.seq` Prelude.rnf changeSetTags
+      `Prelude.seq` Prelude.rnf clientRequestToken
+      `Prelude.seq` Prelude.rnf catalog
+      `Prelude.seq` Prelude.rnf changeSet
+
+instance Data.ToHeaders StartChangeSet where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON StartChangeSet where
+  toJSON StartChangeSet' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("ChangeSetName" Data..=) Prelude.<$> changeSetName,
+            ("ChangeSetTags" Data..=) Prelude.<$> changeSetTags,
+            ("ClientRequestToken" Data..=)
+              Prelude.<$> clientRequestToken,
+            Prelude.Just ("Catalog" Data..= catalog),
+            Prelude.Just ("ChangeSet" Data..= changeSet)
+          ]
+      )
+
+instance Data.ToPath StartChangeSet where
+  toPath = Prelude.const "/StartChangeSet"
+
+instance Data.ToQuery StartChangeSet where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newStartChangeSetResponse' smart constructor.
+data StartChangeSetResponse = StartChangeSetResponse'
+  { -- | The ARN associated to the unique identifier generated for the request.
+    changeSetArn :: Prelude.Maybe Prelude.Text,
+    -- | Unique identifier generated for the request.
+    changeSetId :: 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 'StartChangeSetResponse' 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:
+--
+-- 'changeSetArn', 'startChangeSetResponse_changeSetArn' - The ARN associated to the unique identifier generated for the request.
+--
+-- 'changeSetId', 'startChangeSetResponse_changeSetId' - Unique identifier generated for the request.
+--
+-- 'httpStatus', 'startChangeSetResponse_httpStatus' - The response's http status code.
+newStartChangeSetResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  StartChangeSetResponse
+newStartChangeSetResponse pHttpStatus_ =
+  StartChangeSetResponse'
+    { changeSetArn =
+        Prelude.Nothing,
+      changeSetId = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The ARN associated to the unique identifier generated for the request.
+startChangeSetResponse_changeSetArn :: Lens.Lens' StartChangeSetResponse (Prelude.Maybe Prelude.Text)
+startChangeSetResponse_changeSetArn = Lens.lens (\StartChangeSetResponse' {changeSetArn} -> changeSetArn) (\s@StartChangeSetResponse' {} a -> s {changeSetArn = a} :: StartChangeSetResponse)
+
+-- | Unique identifier generated for the request.
+startChangeSetResponse_changeSetId :: Lens.Lens' StartChangeSetResponse (Prelude.Maybe Prelude.Text)
+startChangeSetResponse_changeSetId = Lens.lens (\StartChangeSetResponse' {changeSetId} -> changeSetId) (\s@StartChangeSetResponse' {} a -> s {changeSetId = a} :: StartChangeSetResponse)
+
+-- | The response's http status code.
+startChangeSetResponse_httpStatus :: Lens.Lens' StartChangeSetResponse Prelude.Int
+startChangeSetResponse_httpStatus = Lens.lens (\StartChangeSetResponse' {httpStatus} -> httpStatus) (\s@StartChangeSetResponse' {} a -> s {httpStatus = a} :: StartChangeSetResponse)
+
+instance Prelude.NFData StartChangeSetResponse where
+  rnf StartChangeSetResponse' {..} =
+    Prelude.rnf changeSetArn
+      `Prelude.seq` Prelude.rnf changeSetId
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MarketplaceCatalog/TagResource.hs b/gen/Amazonka/MarketplaceCatalog/TagResource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MarketplaceCatalog/TagResource.hs
@@ -0,0 +1,175 @@
+{-# 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.MarketplaceCatalog.TagResource
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Tags a resource (either an
+-- <https://docs.aws.amazon.com/marketplace-catalog/latest/api-reference/welcome.html#catalog-api-entities entity>
+-- or
+-- <https://docs.aws.amazon.com/marketplace-catalog/latest/api-reference/welcome.html#working-with-change-sets change set>).
+module Amazonka.MarketplaceCatalog.TagResource
+  ( -- * Creating a Request
+    TagResource (..),
+    newTagResource,
+
+    -- * Request Lenses
+    tagResource_resourceArn,
+    tagResource_tags,
+
+    -- * Destructuring the Response
+    TagResourceResponse (..),
+    newTagResourceResponse,
+
+    -- * Response Lenses
+    tagResourceResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MarketplaceCatalog.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newTagResource' smart constructor.
+data TagResource = TagResource'
+  { -- | Required. The Amazon Resource Name (ARN) associated with the resource
+    -- you want to tag.
+    resourceArn :: Prelude.Text,
+    -- | Required. A list of objects specifying each key name and value. Number
+    -- of objects allowed: 1-50.
+    tags :: Prelude.NonEmpty Tag
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TagResource' 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:
+--
+-- 'resourceArn', 'tagResource_resourceArn' - Required. The Amazon Resource Name (ARN) associated with the resource
+-- you want to tag.
+--
+-- 'tags', 'tagResource_tags' - Required. A list of objects specifying each key name and value. Number
+-- of objects allowed: 1-50.
+newTagResource ::
+  -- | 'resourceArn'
+  Prelude.Text ->
+  -- | 'tags'
+  Prelude.NonEmpty Tag ->
+  TagResource
+newTagResource pResourceArn_ pTags_ =
+  TagResource'
+    { resourceArn = pResourceArn_,
+      tags = Lens.coerced Lens.# pTags_
+    }
+
+-- | Required. The Amazon Resource Name (ARN) associated with the resource
+-- you want to tag.
+tagResource_resourceArn :: Lens.Lens' TagResource Prelude.Text
+tagResource_resourceArn = Lens.lens (\TagResource' {resourceArn} -> resourceArn) (\s@TagResource' {} a -> s {resourceArn = a} :: TagResource)
+
+-- | Required. A list of objects specifying each key name and value. Number
+-- of objects allowed: 1-50.
+tagResource_tags :: Lens.Lens' TagResource (Prelude.NonEmpty Tag)
+tagResource_tags = Lens.lens (\TagResource' {tags} -> tags) (\s@TagResource' {} a -> s {tags = a} :: TagResource) Prelude.. Lens.coerced
+
+instance Core.AWSRequest TagResource where
+  type AWSResponse TagResource = TagResourceResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          TagResourceResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable TagResource where
+  hashWithSalt _salt TagResource' {..} =
+    _salt
+      `Prelude.hashWithSalt` resourceArn
+      `Prelude.hashWithSalt` tags
+
+instance Prelude.NFData TagResource where
+  rnf TagResource' {..} =
+    Prelude.rnf resourceArn
+      `Prelude.seq` Prelude.rnf tags
+
+instance Data.ToHeaders TagResource where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON TagResource where
+  toJSON TagResource' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("ResourceArn" Data..= resourceArn),
+            Prelude.Just ("Tags" Data..= tags)
+          ]
+      )
+
+instance Data.ToPath TagResource where
+  toPath = Prelude.const "/TagResource"
+
+instance Data.ToQuery TagResource where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newTagResourceResponse' smart constructor.
+data TagResourceResponse = TagResourceResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TagResourceResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'tagResourceResponse_httpStatus' - The response's http status code.
+newTagResourceResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  TagResourceResponse
+newTagResourceResponse pHttpStatus_ =
+  TagResourceResponse' {httpStatus = pHttpStatus_}
+
+-- | The response's http status code.
+tagResourceResponse_httpStatus :: Lens.Lens' TagResourceResponse Prelude.Int
+tagResourceResponse_httpStatus = Lens.lens (\TagResourceResponse' {httpStatus} -> httpStatus) (\s@TagResourceResponse' {} a -> s {httpStatus = a} :: TagResourceResponse)
+
+instance Prelude.NFData TagResourceResponse where
+  rnf TagResourceResponse' {..} = Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MarketplaceCatalog/Types.hs b/gen/Amazonka/MarketplaceCatalog/Types.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MarketplaceCatalog/Types.hs
@@ -0,0 +1,261 @@
+{-# 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.MarketplaceCatalog.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.MarketplaceCatalog.Types
+  ( -- * Service Configuration
+    defaultService,
+
+    -- * Errors
+    _AccessDeniedException,
+    _InternalServiceException,
+    _ResourceInUseException,
+    _ResourceNotFoundException,
+    _ResourceNotSupportedException,
+    _ServiceQuotaExceededException,
+    _ThrottlingException,
+    _ValidationException,
+
+    -- * ChangeStatus
+    ChangeStatus (..),
+
+    -- * FailureCode
+    FailureCode (..),
+
+    -- * SortOrder
+    SortOrder (..),
+
+    -- * Change
+    Change (..),
+    newChange,
+    change_changeName,
+    change_entityTags,
+    change_changeType,
+    change_entity,
+    change_details,
+
+    -- * ChangeSetSummaryListItem
+    ChangeSetSummaryListItem (..),
+    newChangeSetSummaryListItem,
+    changeSetSummaryListItem_changeSetArn,
+    changeSetSummaryListItem_changeSetId,
+    changeSetSummaryListItem_changeSetName,
+    changeSetSummaryListItem_endTime,
+    changeSetSummaryListItem_entityIdList,
+    changeSetSummaryListItem_failureCode,
+    changeSetSummaryListItem_startTime,
+    changeSetSummaryListItem_status,
+
+    -- * ChangeSummary
+    ChangeSummary (..),
+    newChangeSummary,
+    changeSummary_changeName,
+    changeSummary_changeType,
+    changeSummary_details,
+    changeSummary_entity,
+    changeSummary_errorDetailList,
+
+    -- * Entity
+    Entity (..),
+    newEntity,
+    entity_identifier,
+    entity_type,
+
+    -- * EntitySummary
+    EntitySummary (..),
+    newEntitySummary,
+    entitySummary_entityArn,
+    entitySummary_entityId,
+    entitySummary_entityType,
+    entitySummary_lastModifiedDate,
+    entitySummary_name,
+    entitySummary_visibility,
+
+    -- * ErrorDetail
+    ErrorDetail (..),
+    newErrorDetail,
+    errorDetail_errorCode,
+    errorDetail_errorMessage,
+
+    -- * Filter
+    Filter (..),
+    newFilter,
+    filter_name,
+    filter_valueList,
+
+    -- * Sort
+    Sort (..),
+    newSort,
+    sort_sortBy,
+    sort_sortOrder,
+
+    -- * Tag
+    Tag (..),
+    newTag,
+    tag_key,
+    tag_value,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import Amazonka.MarketplaceCatalog.Types.Change
+import Amazonka.MarketplaceCatalog.Types.ChangeSetSummaryListItem
+import Amazonka.MarketplaceCatalog.Types.ChangeStatus
+import Amazonka.MarketplaceCatalog.Types.ChangeSummary
+import Amazonka.MarketplaceCatalog.Types.Entity
+import Amazonka.MarketplaceCatalog.Types.EntitySummary
+import Amazonka.MarketplaceCatalog.Types.ErrorDetail
+import Amazonka.MarketplaceCatalog.Types.FailureCode
+import Amazonka.MarketplaceCatalog.Types.Filter
+import Amazonka.MarketplaceCatalog.Types.Sort
+import Amazonka.MarketplaceCatalog.Types.SortOrder
+import Amazonka.MarketplaceCatalog.Types.Tag
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Sign.V4 as Sign
+
+-- | API version @2018-09-17@ of the Amazon Marketplace Catalog Service SDK configuration.
+defaultService :: Core.Service
+defaultService =
+  Core.Service
+    { Core.abbrev = "MarketplaceCatalog",
+      Core.signer = Sign.v4,
+      Core.endpointPrefix = "catalog.marketplace",
+      Core.signingName = "aws-marketplace",
+      Core.version = "2018-09-17",
+      Core.s3AddressingStyle = Core.S3AddressingStyleAuto,
+      Core.endpoint = Core.defaultEndpoint defaultService,
+      Core.timeout = Prelude.Just 70,
+      Core.check = Core.statusSuccess,
+      Core.error =
+        Core.parseJSONError "MarketplaceCatalog",
+      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
+
+-- | Access is denied.
+_AccessDeniedException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_AccessDeniedException =
+  Core._MatchServiceError
+    defaultService
+    "AccessDeniedException"
+    Prelude.. Core.hasStatus 403
+
+-- | There was an internal service exception.
+_InternalServiceException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_InternalServiceException =
+  Core._MatchServiceError
+    defaultService
+    "InternalServiceException"
+    Prelude.. Core.hasStatus 500
+
+-- | The resource is currently in use.
+_ResourceInUseException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ResourceInUseException =
+  Core._MatchServiceError
+    defaultService
+    "ResourceInUseException"
+    Prelude.. Core.hasStatus 423
+
+-- | The specified resource wasn\'t found.
+_ResourceNotFoundException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ResourceNotFoundException =
+  Core._MatchServiceError
+    defaultService
+    "ResourceNotFoundException"
+    Prelude.. Core.hasStatus 404
+
+-- | Currently, the specified resource is not supported.
+_ResourceNotSupportedException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ResourceNotSupportedException =
+  Core._MatchServiceError
+    defaultService
+    "ResourceNotSupportedException"
+    Prelude.. Core.hasStatus 415
+
+-- | The maximum number of open requests per account has been exceeded.
+_ServiceQuotaExceededException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ServiceQuotaExceededException =
+  Core._MatchServiceError
+    defaultService
+    "ServiceQuotaExceededException"
+    Prelude.. Core.hasStatus 402
+
+-- | Too many requests.
+_ThrottlingException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ThrottlingException =
+  Core._MatchServiceError
+    defaultService
+    "ThrottlingException"
+    Prelude.. Core.hasStatus 429
+
+-- | An error occurred during validation.
+_ValidationException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ValidationException =
+  Core._MatchServiceError
+    defaultService
+    "ValidationException"
+    Prelude.. Core.hasStatus 422
diff --git a/gen/Amazonka/MarketplaceCatalog/Types/Change.hs b/gen/Amazonka/MarketplaceCatalog/Types/Change.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MarketplaceCatalog/Types/Change.hs
@@ -0,0 +1,136 @@
+{-# 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.MarketplaceCatalog.Types.Change
+-- 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.MarketplaceCatalog.Types.Change where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MarketplaceCatalog.Types.Entity
+import Amazonka.MarketplaceCatalog.Types.Tag
+import qualified Amazonka.Prelude as Prelude
+
+-- | An object that contains the @ChangeType@, @Details@, and @Entity@.
+--
+-- /See:/ 'newChange' smart constructor.
+data Change = Change'
+  { -- | Optional name for the change.
+    changeName :: Prelude.Maybe Prelude.Text,
+    -- | The tags associated with the change.
+    entityTags :: Prelude.Maybe (Prelude.NonEmpty Tag),
+    -- | Change types are single string values that describe your intention for
+    -- the change. Each change type is unique for each @EntityType@ provided in
+    -- the change\'s scope.
+    changeType :: Prelude.Text,
+    -- | The entity to be changed.
+    entity :: Entity,
+    -- | This object contains details specific to the change type of the
+    -- requested change.
+    details :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Change' 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:
+--
+-- 'changeName', 'change_changeName' - Optional name for the change.
+--
+-- 'entityTags', 'change_entityTags' - The tags associated with the change.
+--
+-- 'changeType', 'change_changeType' - Change types are single string values that describe your intention for
+-- the change. Each change type is unique for each @EntityType@ provided in
+-- the change\'s scope.
+--
+-- 'entity', 'change_entity' - The entity to be changed.
+--
+-- 'details', 'change_details' - This object contains details specific to the change type of the
+-- requested change.
+newChange ::
+  -- | 'changeType'
+  Prelude.Text ->
+  -- | 'entity'
+  Entity ->
+  -- | 'details'
+  Prelude.Text ->
+  Change
+newChange pChangeType_ pEntity_ pDetails_ =
+  Change'
+    { changeName = Prelude.Nothing,
+      entityTags = Prelude.Nothing,
+      changeType = pChangeType_,
+      entity = pEntity_,
+      details = pDetails_
+    }
+
+-- | Optional name for the change.
+change_changeName :: Lens.Lens' Change (Prelude.Maybe Prelude.Text)
+change_changeName = Lens.lens (\Change' {changeName} -> changeName) (\s@Change' {} a -> s {changeName = a} :: Change)
+
+-- | The tags associated with the change.
+change_entityTags :: Lens.Lens' Change (Prelude.Maybe (Prelude.NonEmpty Tag))
+change_entityTags = Lens.lens (\Change' {entityTags} -> entityTags) (\s@Change' {} a -> s {entityTags = a} :: Change) Prelude.. Lens.mapping Lens.coerced
+
+-- | Change types are single string values that describe your intention for
+-- the change. Each change type is unique for each @EntityType@ provided in
+-- the change\'s scope.
+change_changeType :: Lens.Lens' Change Prelude.Text
+change_changeType = Lens.lens (\Change' {changeType} -> changeType) (\s@Change' {} a -> s {changeType = a} :: Change)
+
+-- | The entity to be changed.
+change_entity :: Lens.Lens' Change Entity
+change_entity = Lens.lens (\Change' {entity} -> entity) (\s@Change' {} a -> s {entity = a} :: Change)
+
+-- | This object contains details specific to the change type of the
+-- requested change.
+change_details :: Lens.Lens' Change Prelude.Text
+change_details = Lens.lens (\Change' {details} -> details) (\s@Change' {} a -> s {details = a} :: Change)
+
+instance Prelude.Hashable Change where
+  hashWithSalt _salt Change' {..} =
+    _salt
+      `Prelude.hashWithSalt` changeName
+      `Prelude.hashWithSalt` entityTags
+      `Prelude.hashWithSalt` changeType
+      `Prelude.hashWithSalt` entity
+      `Prelude.hashWithSalt` details
+
+instance Prelude.NFData Change where
+  rnf Change' {..} =
+    Prelude.rnf changeName
+      `Prelude.seq` Prelude.rnf entityTags
+      `Prelude.seq` Prelude.rnf changeType
+      `Prelude.seq` Prelude.rnf entity
+      `Prelude.seq` Prelude.rnf details
+
+instance Data.ToJSON Change where
+  toJSON Change' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("ChangeName" Data..=) Prelude.<$> changeName,
+            ("EntityTags" Data..=) Prelude.<$> entityTags,
+            Prelude.Just ("ChangeType" Data..= changeType),
+            Prelude.Just ("Entity" Data..= entity),
+            Prelude.Just ("Details" Data..= details)
+          ]
+      )
diff --git a/gen/Amazonka/MarketplaceCatalog/Types/ChangeSetSummaryListItem.hs b/gen/Amazonka/MarketplaceCatalog/Types/ChangeSetSummaryListItem.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MarketplaceCatalog/Types/ChangeSetSummaryListItem.hs
@@ -0,0 +1,187 @@
+{-# 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.MarketplaceCatalog.Types.ChangeSetSummaryListItem
+-- 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.MarketplaceCatalog.Types.ChangeSetSummaryListItem where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MarketplaceCatalog.Types.ChangeStatus
+import Amazonka.MarketplaceCatalog.Types.FailureCode
+import qualified Amazonka.Prelude as Prelude
+
+-- | A summary of a change set returned in a list of change sets when the
+-- @ListChangeSets@ action is called.
+--
+-- /See:/ 'newChangeSetSummaryListItem' smart constructor.
+data ChangeSetSummaryListItem = ChangeSetSummaryListItem'
+  { -- | The ARN associated with the unique identifier for the change set
+    -- referenced in this request.
+    changeSetArn :: Prelude.Maybe Prelude.Text,
+    -- | The unique identifier for a change set.
+    changeSetId :: Prelude.Maybe Prelude.Text,
+    -- | The non-unique name for the change set.
+    changeSetName :: Prelude.Maybe Prelude.Text,
+    -- | The time, in ISO 8601 format (2018-02-27T13:45:22Z), when the change set
+    -- was finished.
+    endTime :: Prelude.Maybe Prelude.Text,
+    -- | This object is a list of entity IDs (string) that are a part of a change
+    -- set. The entity ID list is a maximum of 20 entities. It must contain at
+    -- least one entity.
+    entityIdList :: Prelude.Maybe [Prelude.Text],
+    -- | Returned if the change set is in @FAILED@ status. Can be either
+    -- @CLIENT_ERROR@, which means that there are issues with the request (see
+    -- the @ErrorDetailList@ of @DescribeChangeSet@), or @SERVER_FAULT@, which
+    -- means that there is a problem in the system, and you should retry your
+    -- request.
+    failureCode :: Prelude.Maybe FailureCode,
+    -- | The time, in ISO 8601 format (2018-02-27T13:45:22Z), when the change set
+    -- was started.
+    startTime :: Prelude.Maybe Prelude.Text,
+    -- | The current status of the change set.
+    status :: Prelude.Maybe ChangeStatus
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ChangeSetSummaryListItem' 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:
+--
+-- 'changeSetArn', 'changeSetSummaryListItem_changeSetArn' - The ARN associated with the unique identifier for the change set
+-- referenced in this request.
+--
+-- 'changeSetId', 'changeSetSummaryListItem_changeSetId' - The unique identifier for a change set.
+--
+-- 'changeSetName', 'changeSetSummaryListItem_changeSetName' - The non-unique name for the change set.
+--
+-- 'endTime', 'changeSetSummaryListItem_endTime' - The time, in ISO 8601 format (2018-02-27T13:45:22Z), when the change set
+-- was finished.
+--
+-- 'entityIdList', 'changeSetSummaryListItem_entityIdList' - This object is a list of entity IDs (string) that are a part of a change
+-- set. The entity ID list is a maximum of 20 entities. It must contain at
+-- least one entity.
+--
+-- 'failureCode', 'changeSetSummaryListItem_failureCode' - Returned if the change set is in @FAILED@ status. Can be either
+-- @CLIENT_ERROR@, which means that there are issues with the request (see
+-- the @ErrorDetailList@ of @DescribeChangeSet@), or @SERVER_FAULT@, which
+-- means that there is a problem in the system, and you should retry your
+-- request.
+--
+-- 'startTime', 'changeSetSummaryListItem_startTime' - The time, in ISO 8601 format (2018-02-27T13:45:22Z), when the change set
+-- was started.
+--
+-- 'status', 'changeSetSummaryListItem_status' - The current status of the change set.
+newChangeSetSummaryListItem ::
+  ChangeSetSummaryListItem
+newChangeSetSummaryListItem =
+  ChangeSetSummaryListItem'
+    { changeSetArn =
+        Prelude.Nothing,
+      changeSetId = Prelude.Nothing,
+      changeSetName = Prelude.Nothing,
+      endTime = Prelude.Nothing,
+      entityIdList = Prelude.Nothing,
+      failureCode = Prelude.Nothing,
+      startTime = Prelude.Nothing,
+      status = Prelude.Nothing
+    }
+
+-- | The ARN associated with the unique identifier for the change set
+-- referenced in this request.
+changeSetSummaryListItem_changeSetArn :: Lens.Lens' ChangeSetSummaryListItem (Prelude.Maybe Prelude.Text)
+changeSetSummaryListItem_changeSetArn = Lens.lens (\ChangeSetSummaryListItem' {changeSetArn} -> changeSetArn) (\s@ChangeSetSummaryListItem' {} a -> s {changeSetArn = a} :: ChangeSetSummaryListItem)
+
+-- | The unique identifier for a change set.
+changeSetSummaryListItem_changeSetId :: Lens.Lens' ChangeSetSummaryListItem (Prelude.Maybe Prelude.Text)
+changeSetSummaryListItem_changeSetId = Lens.lens (\ChangeSetSummaryListItem' {changeSetId} -> changeSetId) (\s@ChangeSetSummaryListItem' {} a -> s {changeSetId = a} :: ChangeSetSummaryListItem)
+
+-- | The non-unique name for the change set.
+changeSetSummaryListItem_changeSetName :: Lens.Lens' ChangeSetSummaryListItem (Prelude.Maybe Prelude.Text)
+changeSetSummaryListItem_changeSetName = Lens.lens (\ChangeSetSummaryListItem' {changeSetName} -> changeSetName) (\s@ChangeSetSummaryListItem' {} a -> s {changeSetName = a} :: ChangeSetSummaryListItem)
+
+-- | The time, in ISO 8601 format (2018-02-27T13:45:22Z), when the change set
+-- was finished.
+changeSetSummaryListItem_endTime :: Lens.Lens' ChangeSetSummaryListItem (Prelude.Maybe Prelude.Text)
+changeSetSummaryListItem_endTime = Lens.lens (\ChangeSetSummaryListItem' {endTime} -> endTime) (\s@ChangeSetSummaryListItem' {} a -> s {endTime = a} :: ChangeSetSummaryListItem)
+
+-- | This object is a list of entity IDs (string) that are a part of a change
+-- set. The entity ID list is a maximum of 20 entities. It must contain at
+-- least one entity.
+changeSetSummaryListItem_entityIdList :: Lens.Lens' ChangeSetSummaryListItem (Prelude.Maybe [Prelude.Text])
+changeSetSummaryListItem_entityIdList = Lens.lens (\ChangeSetSummaryListItem' {entityIdList} -> entityIdList) (\s@ChangeSetSummaryListItem' {} a -> s {entityIdList = a} :: ChangeSetSummaryListItem) Prelude.. Lens.mapping Lens.coerced
+
+-- | Returned if the change set is in @FAILED@ status. Can be either
+-- @CLIENT_ERROR@, which means that there are issues with the request (see
+-- the @ErrorDetailList@ of @DescribeChangeSet@), or @SERVER_FAULT@, which
+-- means that there is a problem in the system, and you should retry your
+-- request.
+changeSetSummaryListItem_failureCode :: Lens.Lens' ChangeSetSummaryListItem (Prelude.Maybe FailureCode)
+changeSetSummaryListItem_failureCode = Lens.lens (\ChangeSetSummaryListItem' {failureCode} -> failureCode) (\s@ChangeSetSummaryListItem' {} a -> s {failureCode = a} :: ChangeSetSummaryListItem)
+
+-- | The time, in ISO 8601 format (2018-02-27T13:45:22Z), when the change set
+-- was started.
+changeSetSummaryListItem_startTime :: Lens.Lens' ChangeSetSummaryListItem (Prelude.Maybe Prelude.Text)
+changeSetSummaryListItem_startTime = Lens.lens (\ChangeSetSummaryListItem' {startTime} -> startTime) (\s@ChangeSetSummaryListItem' {} a -> s {startTime = a} :: ChangeSetSummaryListItem)
+
+-- | The current status of the change set.
+changeSetSummaryListItem_status :: Lens.Lens' ChangeSetSummaryListItem (Prelude.Maybe ChangeStatus)
+changeSetSummaryListItem_status = Lens.lens (\ChangeSetSummaryListItem' {status} -> status) (\s@ChangeSetSummaryListItem' {} a -> s {status = a} :: ChangeSetSummaryListItem)
+
+instance Data.FromJSON ChangeSetSummaryListItem where
+  parseJSON =
+    Data.withObject
+      "ChangeSetSummaryListItem"
+      ( \x ->
+          ChangeSetSummaryListItem'
+            Prelude.<$> (x Data..:? "ChangeSetArn")
+            Prelude.<*> (x Data..:? "ChangeSetId")
+            Prelude.<*> (x Data..:? "ChangeSetName")
+            Prelude.<*> (x Data..:? "EndTime")
+            Prelude.<*> (x Data..:? "EntityIdList" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "FailureCode")
+            Prelude.<*> (x Data..:? "StartTime")
+            Prelude.<*> (x Data..:? "Status")
+      )
+
+instance Prelude.Hashable ChangeSetSummaryListItem where
+  hashWithSalt _salt ChangeSetSummaryListItem' {..} =
+    _salt
+      `Prelude.hashWithSalt` changeSetArn
+      `Prelude.hashWithSalt` changeSetId
+      `Prelude.hashWithSalt` changeSetName
+      `Prelude.hashWithSalt` endTime
+      `Prelude.hashWithSalt` entityIdList
+      `Prelude.hashWithSalt` failureCode
+      `Prelude.hashWithSalt` startTime
+      `Prelude.hashWithSalt` status
+
+instance Prelude.NFData ChangeSetSummaryListItem where
+  rnf ChangeSetSummaryListItem' {..} =
+    Prelude.rnf changeSetArn
+      `Prelude.seq` Prelude.rnf changeSetId
+      `Prelude.seq` Prelude.rnf changeSetName
+      `Prelude.seq` Prelude.rnf endTime
+      `Prelude.seq` Prelude.rnf entityIdList
+      `Prelude.seq` Prelude.rnf failureCode
+      `Prelude.seq` Prelude.rnf startTime
+      `Prelude.seq` Prelude.rnf status
diff --git a/gen/Amazonka/MarketplaceCatalog/Types/ChangeStatus.hs b/gen/Amazonka/MarketplaceCatalog/Types/ChangeStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MarketplaceCatalog/Types/ChangeStatus.hs
@@ -0,0 +1,86 @@
+{-# 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.MarketplaceCatalog.Types.ChangeStatus
+-- 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.MarketplaceCatalog.Types.ChangeStatus
+  ( ChangeStatus
+      ( ..,
+        ChangeStatus_APPLYING,
+        ChangeStatus_CANCELLED,
+        ChangeStatus_FAILED,
+        ChangeStatus_PREPARING,
+        ChangeStatus_SUCCEEDED
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype ChangeStatus = ChangeStatus'
+  { fromChangeStatus ::
+      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 ChangeStatus_APPLYING :: ChangeStatus
+pattern ChangeStatus_APPLYING = ChangeStatus' "APPLYING"
+
+pattern ChangeStatus_CANCELLED :: ChangeStatus
+pattern ChangeStatus_CANCELLED = ChangeStatus' "CANCELLED"
+
+pattern ChangeStatus_FAILED :: ChangeStatus
+pattern ChangeStatus_FAILED = ChangeStatus' "FAILED"
+
+pattern ChangeStatus_PREPARING :: ChangeStatus
+pattern ChangeStatus_PREPARING = ChangeStatus' "PREPARING"
+
+pattern ChangeStatus_SUCCEEDED :: ChangeStatus
+pattern ChangeStatus_SUCCEEDED = ChangeStatus' "SUCCEEDED"
+
+{-# COMPLETE
+  ChangeStatus_APPLYING,
+  ChangeStatus_CANCELLED,
+  ChangeStatus_FAILED,
+  ChangeStatus_PREPARING,
+  ChangeStatus_SUCCEEDED,
+  ChangeStatus'
+  #-}
diff --git a/gen/Amazonka/MarketplaceCatalog/Types/ChangeSummary.hs b/gen/Amazonka/MarketplaceCatalog/Types/ChangeSummary.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MarketplaceCatalog/Types/ChangeSummary.hs
@@ -0,0 +1,129 @@
+{-# 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.MarketplaceCatalog.Types.ChangeSummary
+-- 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.MarketplaceCatalog.Types.ChangeSummary where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MarketplaceCatalog.Types.Entity
+import Amazonka.MarketplaceCatalog.Types.ErrorDetail
+import qualified Amazonka.Prelude as Prelude
+
+-- | This object is a container for common summary information about the
+-- change. The summary doesn\'t contain the whole change structure.
+--
+-- /See:/ 'newChangeSummary' smart constructor.
+data ChangeSummary = ChangeSummary'
+  { -- | Optional name for the change.
+    changeName :: Prelude.Maybe Prelude.Text,
+    -- | The type of the change.
+    changeType :: Prelude.Maybe Prelude.Text,
+    -- | This object contains details specific to the change type of the
+    -- requested change.
+    details :: Prelude.Maybe Prelude.Text,
+    -- | The entity to be changed.
+    entity :: Prelude.Maybe Entity,
+    -- | An array of @ErrorDetail@ objects associated with the change.
+    errorDetailList :: Prelude.Maybe [ErrorDetail]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ChangeSummary' 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:
+--
+-- 'changeName', 'changeSummary_changeName' - Optional name for the change.
+--
+-- 'changeType', 'changeSummary_changeType' - The type of the change.
+--
+-- 'details', 'changeSummary_details' - This object contains details specific to the change type of the
+-- requested change.
+--
+-- 'entity', 'changeSummary_entity' - The entity to be changed.
+--
+-- 'errorDetailList', 'changeSummary_errorDetailList' - An array of @ErrorDetail@ objects associated with the change.
+newChangeSummary ::
+  ChangeSummary
+newChangeSummary =
+  ChangeSummary'
+    { changeName = Prelude.Nothing,
+      changeType = Prelude.Nothing,
+      details = Prelude.Nothing,
+      entity = Prelude.Nothing,
+      errorDetailList = Prelude.Nothing
+    }
+
+-- | Optional name for the change.
+changeSummary_changeName :: Lens.Lens' ChangeSummary (Prelude.Maybe Prelude.Text)
+changeSummary_changeName = Lens.lens (\ChangeSummary' {changeName} -> changeName) (\s@ChangeSummary' {} a -> s {changeName = a} :: ChangeSummary)
+
+-- | The type of the change.
+changeSummary_changeType :: Lens.Lens' ChangeSummary (Prelude.Maybe Prelude.Text)
+changeSummary_changeType = Lens.lens (\ChangeSummary' {changeType} -> changeType) (\s@ChangeSummary' {} a -> s {changeType = a} :: ChangeSummary)
+
+-- | This object contains details specific to the change type of the
+-- requested change.
+changeSummary_details :: Lens.Lens' ChangeSummary (Prelude.Maybe Prelude.Text)
+changeSummary_details = Lens.lens (\ChangeSummary' {details} -> details) (\s@ChangeSummary' {} a -> s {details = a} :: ChangeSummary)
+
+-- | The entity to be changed.
+changeSummary_entity :: Lens.Lens' ChangeSummary (Prelude.Maybe Entity)
+changeSummary_entity = Lens.lens (\ChangeSummary' {entity} -> entity) (\s@ChangeSummary' {} a -> s {entity = a} :: ChangeSummary)
+
+-- | An array of @ErrorDetail@ objects associated with the change.
+changeSummary_errorDetailList :: Lens.Lens' ChangeSummary (Prelude.Maybe [ErrorDetail])
+changeSummary_errorDetailList = Lens.lens (\ChangeSummary' {errorDetailList} -> errorDetailList) (\s@ChangeSummary' {} a -> s {errorDetailList = a} :: ChangeSummary) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromJSON ChangeSummary where
+  parseJSON =
+    Data.withObject
+      "ChangeSummary"
+      ( \x ->
+          ChangeSummary'
+            Prelude.<$> (x Data..:? "ChangeName")
+            Prelude.<*> (x Data..:? "ChangeType")
+            Prelude.<*> (x Data..:? "Details")
+            Prelude.<*> (x Data..:? "Entity")
+            Prelude.<*> ( x
+                            Data..:? "ErrorDetailList"
+                            Data..!= Prelude.mempty
+                        )
+      )
+
+instance Prelude.Hashable ChangeSummary where
+  hashWithSalt _salt ChangeSummary' {..} =
+    _salt
+      `Prelude.hashWithSalt` changeName
+      `Prelude.hashWithSalt` changeType
+      `Prelude.hashWithSalt` details
+      `Prelude.hashWithSalt` entity
+      `Prelude.hashWithSalt` errorDetailList
+
+instance Prelude.NFData ChangeSummary where
+  rnf ChangeSummary' {..} =
+    Prelude.rnf changeName
+      `Prelude.seq` Prelude.rnf changeType
+      `Prelude.seq` Prelude.rnf details
+      `Prelude.seq` Prelude.rnf entity
+      `Prelude.seq` Prelude.rnf errorDetailList
diff --git a/gen/Amazonka/MarketplaceCatalog/Types/Entity.hs b/gen/Amazonka/MarketplaceCatalog/Types/Entity.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MarketplaceCatalog/Types/Entity.hs
@@ -0,0 +1,96 @@
+{-# 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.MarketplaceCatalog.Types.Entity
+-- 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.MarketplaceCatalog.Types.Entity 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
+
+-- | An entity contains data that describes your product, its supported
+-- features, and how it can be used or launched by your customer.
+--
+-- /See:/ 'newEntity' smart constructor.
+data Entity = Entity'
+  { -- | The identifier for the entity.
+    identifier :: Prelude.Maybe Prelude.Text,
+    -- | The type of entity.
+    type' :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Entity' 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:
+--
+-- 'identifier', 'entity_identifier' - The identifier for the entity.
+--
+-- 'type'', 'entity_type' - The type of entity.
+newEntity ::
+  -- | 'type''
+  Prelude.Text ->
+  Entity
+newEntity pType_ =
+  Entity'
+    { identifier = Prelude.Nothing,
+      type' = pType_
+    }
+
+-- | The identifier for the entity.
+entity_identifier :: Lens.Lens' Entity (Prelude.Maybe Prelude.Text)
+entity_identifier = Lens.lens (\Entity' {identifier} -> identifier) (\s@Entity' {} a -> s {identifier = a} :: Entity)
+
+-- | The type of entity.
+entity_type :: Lens.Lens' Entity Prelude.Text
+entity_type = Lens.lens (\Entity' {type'} -> type') (\s@Entity' {} a -> s {type' = a} :: Entity)
+
+instance Data.FromJSON Entity where
+  parseJSON =
+    Data.withObject
+      "Entity"
+      ( \x ->
+          Entity'
+            Prelude.<$> (x Data..:? "Identifier")
+            Prelude.<*> (x Data..: "Type")
+      )
+
+instance Prelude.Hashable Entity where
+  hashWithSalt _salt Entity' {..} =
+    _salt
+      `Prelude.hashWithSalt` identifier
+      `Prelude.hashWithSalt` type'
+
+instance Prelude.NFData Entity where
+  rnf Entity' {..} =
+    Prelude.rnf identifier
+      `Prelude.seq` Prelude.rnf type'
+
+instance Data.ToJSON Entity where
+  toJSON Entity' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Identifier" Data..=) Prelude.<$> identifier,
+            Prelude.Just ("Type" Data..= type')
+          ]
+      )
diff --git a/gen/Amazonka/MarketplaceCatalog/Types/EntitySummary.hs b/gen/Amazonka/MarketplaceCatalog/Types/EntitySummary.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MarketplaceCatalog/Types/EntitySummary.hs
@@ -0,0 +1,149 @@
+{-# 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.MarketplaceCatalog.Types.EntitySummary
+-- 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.MarketplaceCatalog.Types.EntitySummary 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
+
+-- | This object is a container for common summary information about the
+-- entity. The summary doesn\'t contain the whole entity structure, but it
+-- does contain information common across all entities.
+--
+-- /See:/ 'newEntitySummary' smart constructor.
+data EntitySummary = EntitySummary'
+  { -- | The ARN associated with the unique identifier for the entity.
+    entityArn :: Prelude.Maybe Prelude.Text,
+    -- | The unique identifier for the entity.
+    entityId :: Prelude.Maybe Prelude.Text,
+    -- | The type of the entity.
+    entityType :: Prelude.Maybe Prelude.Text,
+    -- | The last time the entity was published, using ISO 8601 format
+    -- (2018-02-27T13:45:22Z).
+    lastModifiedDate :: Prelude.Maybe Prelude.Text,
+    -- | The name for the entity. This value is not unique. It is defined by the
+    -- seller.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The visibility status of the entity to buyers. This value can be
+    -- @Public@ (everyone can view the entity), @Limited@ (the entity is
+    -- visible to limited accounts only), or @Restricted@ (the entity was
+    -- published and then unpublished and only existing buyers can view it).
+    visibility :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'EntitySummary' 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:
+--
+-- 'entityArn', 'entitySummary_entityArn' - The ARN associated with the unique identifier for the entity.
+--
+-- 'entityId', 'entitySummary_entityId' - The unique identifier for the entity.
+--
+-- 'entityType', 'entitySummary_entityType' - The type of the entity.
+--
+-- 'lastModifiedDate', 'entitySummary_lastModifiedDate' - The last time the entity was published, using ISO 8601 format
+-- (2018-02-27T13:45:22Z).
+--
+-- 'name', 'entitySummary_name' - The name for the entity. This value is not unique. It is defined by the
+-- seller.
+--
+-- 'visibility', 'entitySummary_visibility' - The visibility status of the entity to buyers. This value can be
+-- @Public@ (everyone can view the entity), @Limited@ (the entity is
+-- visible to limited accounts only), or @Restricted@ (the entity was
+-- published and then unpublished and only existing buyers can view it).
+newEntitySummary ::
+  EntitySummary
+newEntitySummary =
+  EntitySummary'
+    { entityArn = Prelude.Nothing,
+      entityId = Prelude.Nothing,
+      entityType = Prelude.Nothing,
+      lastModifiedDate = Prelude.Nothing,
+      name = Prelude.Nothing,
+      visibility = Prelude.Nothing
+    }
+
+-- | The ARN associated with the unique identifier for the entity.
+entitySummary_entityArn :: Lens.Lens' EntitySummary (Prelude.Maybe Prelude.Text)
+entitySummary_entityArn = Lens.lens (\EntitySummary' {entityArn} -> entityArn) (\s@EntitySummary' {} a -> s {entityArn = a} :: EntitySummary)
+
+-- | The unique identifier for the entity.
+entitySummary_entityId :: Lens.Lens' EntitySummary (Prelude.Maybe Prelude.Text)
+entitySummary_entityId = Lens.lens (\EntitySummary' {entityId} -> entityId) (\s@EntitySummary' {} a -> s {entityId = a} :: EntitySummary)
+
+-- | The type of the entity.
+entitySummary_entityType :: Lens.Lens' EntitySummary (Prelude.Maybe Prelude.Text)
+entitySummary_entityType = Lens.lens (\EntitySummary' {entityType} -> entityType) (\s@EntitySummary' {} a -> s {entityType = a} :: EntitySummary)
+
+-- | The last time the entity was published, using ISO 8601 format
+-- (2018-02-27T13:45:22Z).
+entitySummary_lastModifiedDate :: Lens.Lens' EntitySummary (Prelude.Maybe Prelude.Text)
+entitySummary_lastModifiedDate = Lens.lens (\EntitySummary' {lastModifiedDate} -> lastModifiedDate) (\s@EntitySummary' {} a -> s {lastModifiedDate = a} :: EntitySummary)
+
+-- | The name for the entity. This value is not unique. It is defined by the
+-- seller.
+entitySummary_name :: Lens.Lens' EntitySummary (Prelude.Maybe Prelude.Text)
+entitySummary_name = Lens.lens (\EntitySummary' {name} -> name) (\s@EntitySummary' {} a -> s {name = a} :: EntitySummary)
+
+-- | The visibility status of the entity to buyers. This value can be
+-- @Public@ (everyone can view the entity), @Limited@ (the entity is
+-- visible to limited accounts only), or @Restricted@ (the entity was
+-- published and then unpublished and only existing buyers can view it).
+entitySummary_visibility :: Lens.Lens' EntitySummary (Prelude.Maybe Prelude.Text)
+entitySummary_visibility = Lens.lens (\EntitySummary' {visibility} -> visibility) (\s@EntitySummary' {} a -> s {visibility = a} :: EntitySummary)
+
+instance Data.FromJSON EntitySummary where
+  parseJSON =
+    Data.withObject
+      "EntitySummary"
+      ( \x ->
+          EntitySummary'
+            Prelude.<$> (x Data..:? "EntityArn")
+            Prelude.<*> (x Data..:? "EntityId")
+            Prelude.<*> (x Data..:? "EntityType")
+            Prelude.<*> (x Data..:? "LastModifiedDate")
+            Prelude.<*> (x Data..:? "Name")
+            Prelude.<*> (x Data..:? "Visibility")
+      )
+
+instance Prelude.Hashable EntitySummary where
+  hashWithSalt _salt EntitySummary' {..} =
+    _salt
+      `Prelude.hashWithSalt` entityArn
+      `Prelude.hashWithSalt` entityId
+      `Prelude.hashWithSalt` entityType
+      `Prelude.hashWithSalt` lastModifiedDate
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` visibility
+
+instance Prelude.NFData EntitySummary where
+  rnf EntitySummary' {..} =
+    Prelude.rnf entityArn
+      `Prelude.seq` Prelude.rnf entityId
+      `Prelude.seq` Prelude.rnf entityType
+      `Prelude.seq` Prelude.rnf lastModifiedDate
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf visibility
diff --git a/gen/Amazonka/MarketplaceCatalog/Types/ErrorDetail.hs b/gen/Amazonka/MarketplaceCatalog/Types/ErrorDetail.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MarketplaceCatalog/Types/ErrorDetail.hs
@@ -0,0 +1,84 @@
+{-# 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.MarketplaceCatalog.Types.ErrorDetail
+-- 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.MarketplaceCatalog.Types.ErrorDetail 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
+
+-- | Details about the error.
+--
+-- /See:/ 'newErrorDetail' smart constructor.
+data ErrorDetail = ErrorDetail'
+  { -- | The error code that identifies the type of error.
+    errorCode :: Prelude.Maybe Prelude.Text,
+    -- | The message for the error.
+    errorMessage :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ErrorDetail' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'errorCode', 'errorDetail_errorCode' - The error code that identifies the type of error.
+--
+-- 'errorMessage', 'errorDetail_errorMessage' - The message for the error.
+newErrorDetail ::
+  ErrorDetail
+newErrorDetail =
+  ErrorDetail'
+    { errorCode = Prelude.Nothing,
+      errorMessage = Prelude.Nothing
+    }
+
+-- | The error code that identifies the type of error.
+errorDetail_errorCode :: Lens.Lens' ErrorDetail (Prelude.Maybe Prelude.Text)
+errorDetail_errorCode = Lens.lens (\ErrorDetail' {errorCode} -> errorCode) (\s@ErrorDetail' {} a -> s {errorCode = a} :: ErrorDetail)
+
+-- | The message for the error.
+errorDetail_errorMessage :: Lens.Lens' ErrorDetail (Prelude.Maybe Prelude.Text)
+errorDetail_errorMessage = Lens.lens (\ErrorDetail' {errorMessage} -> errorMessage) (\s@ErrorDetail' {} a -> s {errorMessage = a} :: ErrorDetail)
+
+instance Data.FromJSON ErrorDetail where
+  parseJSON =
+    Data.withObject
+      "ErrorDetail"
+      ( \x ->
+          ErrorDetail'
+            Prelude.<$> (x Data..:? "ErrorCode")
+            Prelude.<*> (x Data..:? "ErrorMessage")
+      )
+
+instance Prelude.Hashable ErrorDetail where
+  hashWithSalt _salt ErrorDetail' {..} =
+    _salt
+      `Prelude.hashWithSalt` errorCode
+      `Prelude.hashWithSalt` errorMessage
+
+instance Prelude.NFData ErrorDetail where
+  rnf ErrorDetail' {..} =
+    Prelude.rnf errorCode
+      `Prelude.seq` Prelude.rnf errorMessage
diff --git a/gen/Amazonka/MarketplaceCatalog/Types/FailureCode.hs b/gen/Amazonka/MarketplaceCatalog/Types/FailureCode.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MarketplaceCatalog/Types/FailureCode.hs
@@ -0,0 +1,71 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.MarketplaceCatalog.Types.FailureCode
+-- 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.MarketplaceCatalog.Types.FailureCode
+  ( FailureCode
+      ( ..,
+        FailureCode_CLIENT_ERROR,
+        FailureCode_SERVER_FAULT
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype FailureCode = FailureCode'
+  { fromFailureCode ::
+      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 FailureCode_CLIENT_ERROR :: FailureCode
+pattern FailureCode_CLIENT_ERROR = FailureCode' "CLIENT_ERROR"
+
+pattern FailureCode_SERVER_FAULT :: FailureCode
+pattern FailureCode_SERVER_FAULT = FailureCode' "SERVER_FAULT"
+
+{-# COMPLETE
+  FailureCode_CLIENT_ERROR,
+  FailureCode_SERVER_FAULT,
+  FailureCode'
+  #-}
diff --git a/gen/Amazonka/MarketplaceCatalog/Types/Filter.hs b/gen/Amazonka/MarketplaceCatalog/Types/Filter.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MarketplaceCatalog/Types/Filter.hs
@@ -0,0 +1,165 @@
+{-# 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.MarketplaceCatalog.Types.Filter
+-- 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.MarketplaceCatalog.Types.Filter where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | A filter object, used to optionally filter results from calls to the
+-- @ListEntities@ and @ListChangeSets@ actions.
+--
+-- /See:/ 'newFilter' smart constructor.
+data Filter = Filter'
+  { -- | For @ListEntities@, the supported value for this is an @EntityId@.
+    --
+    -- For @ListChangeSets@, the supported values are as follows:
+    name :: Prelude.Maybe Prelude.Text,
+    -- | @ListEntities@ - This is a list of unique @EntityId@s.
+    --
+    -- @ListChangeSets@ - The supported filter names and associated
+    -- @ValueList@s is as follows:
+    --
+    -- -   @ChangeSetName@ - The supported @ValueList@ is a list of non-unique
+    --     @ChangeSetName@s. These are defined when you call the
+    --     @StartChangeSet@ action.
+    --
+    -- -   @Status@ - The supported @ValueList@ is a list of statuses for all
+    --     change set requests.
+    --
+    -- -   @EntityId@ - The supported @ValueList@ is a list of unique
+    --     @EntityId@s.
+    --
+    -- -   @BeforeStartTime@ - The supported @ValueList@ is a list of all
+    --     change sets that started before the filter value.
+    --
+    -- -   @AfterStartTime@ - The supported @ValueList@ is a list of all change
+    --     sets that started after the filter value.
+    --
+    -- -   @BeforeEndTime@ - The supported @ValueList@ is a list of all change
+    --     sets that ended before the filter value.
+    --
+    -- -   @AfterEndTime@ - The supported @ValueList@ is a list of all change
+    --     sets that ended after the filter value.
+    valueList :: Prelude.Maybe (Prelude.NonEmpty Prelude.Text)
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Filter' 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:
+--
+-- 'name', 'filter_name' - For @ListEntities@, the supported value for this is an @EntityId@.
+--
+-- For @ListChangeSets@, the supported values are as follows:
+--
+-- 'valueList', 'filter_valueList' - @ListEntities@ - This is a list of unique @EntityId@s.
+--
+-- @ListChangeSets@ - The supported filter names and associated
+-- @ValueList@s is as follows:
+--
+-- -   @ChangeSetName@ - The supported @ValueList@ is a list of non-unique
+--     @ChangeSetName@s. These are defined when you call the
+--     @StartChangeSet@ action.
+--
+-- -   @Status@ - The supported @ValueList@ is a list of statuses for all
+--     change set requests.
+--
+-- -   @EntityId@ - The supported @ValueList@ is a list of unique
+--     @EntityId@s.
+--
+-- -   @BeforeStartTime@ - The supported @ValueList@ is a list of all
+--     change sets that started before the filter value.
+--
+-- -   @AfterStartTime@ - The supported @ValueList@ is a list of all change
+--     sets that started after the filter value.
+--
+-- -   @BeforeEndTime@ - The supported @ValueList@ is a list of all change
+--     sets that ended before the filter value.
+--
+-- -   @AfterEndTime@ - The supported @ValueList@ is a list of all change
+--     sets that ended after the filter value.
+newFilter ::
+  Filter
+newFilter =
+  Filter'
+    { name = Prelude.Nothing,
+      valueList = Prelude.Nothing
+    }
+
+-- | For @ListEntities@, the supported value for this is an @EntityId@.
+--
+-- For @ListChangeSets@, the supported values are as follows:
+filter_name :: Lens.Lens' Filter (Prelude.Maybe Prelude.Text)
+filter_name = Lens.lens (\Filter' {name} -> name) (\s@Filter' {} a -> s {name = a} :: Filter)
+
+-- | @ListEntities@ - This is a list of unique @EntityId@s.
+--
+-- @ListChangeSets@ - The supported filter names and associated
+-- @ValueList@s is as follows:
+--
+-- -   @ChangeSetName@ - The supported @ValueList@ is a list of non-unique
+--     @ChangeSetName@s. These are defined when you call the
+--     @StartChangeSet@ action.
+--
+-- -   @Status@ - The supported @ValueList@ is a list of statuses for all
+--     change set requests.
+--
+-- -   @EntityId@ - The supported @ValueList@ is a list of unique
+--     @EntityId@s.
+--
+-- -   @BeforeStartTime@ - The supported @ValueList@ is a list of all
+--     change sets that started before the filter value.
+--
+-- -   @AfterStartTime@ - The supported @ValueList@ is a list of all change
+--     sets that started after the filter value.
+--
+-- -   @BeforeEndTime@ - The supported @ValueList@ is a list of all change
+--     sets that ended before the filter value.
+--
+-- -   @AfterEndTime@ - The supported @ValueList@ is a list of all change
+--     sets that ended after the filter value.
+filter_valueList :: Lens.Lens' Filter (Prelude.Maybe (Prelude.NonEmpty Prelude.Text))
+filter_valueList = Lens.lens (\Filter' {valueList} -> valueList) (\s@Filter' {} a -> s {valueList = a} :: Filter) Prelude.. Lens.mapping Lens.coerced
+
+instance Prelude.Hashable Filter where
+  hashWithSalt _salt Filter' {..} =
+    _salt
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` valueList
+
+instance Prelude.NFData Filter where
+  rnf Filter' {..} =
+    Prelude.rnf name
+      `Prelude.seq` Prelude.rnf valueList
+
+instance Data.ToJSON Filter where
+  toJSON Filter' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Name" Data..=) Prelude.<$> name,
+            ("ValueList" Data..=) Prelude.<$> valueList
+          ]
+      )
diff --git a/gen/Amazonka/MarketplaceCatalog/Types/Sort.hs b/gen/Amazonka/MarketplaceCatalog/Types/Sort.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MarketplaceCatalog/Types/Sort.hs
@@ -0,0 +1,99 @@
+{-# 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.MarketplaceCatalog.Types.Sort
+-- 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.MarketplaceCatalog.Types.Sort where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MarketplaceCatalog.Types.SortOrder
+import qualified Amazonka.Prelude as Prelude
+
+-- | An object that contains two attributes, @SortBy@ and @SortOrder@.
+--
+-- /See:/ 'newSort' smart constructor.
+data Sort = Sort'
+  { -- | For @ListEntities@, supported attributes include @LastModifiedDate@
+    -- (default), @Visibility@, @EntityId@, and @Name@.
+    --
+    -- For @ListChangeSets@, supported attributes include @StartTime@ and
+    -- @EndTime@.
+    sortBy :: Prelude.Maybe Prelude.Text,
+    -- | The sorting order. Can be @ASCENDING@ or @DESCENDING@. The default value
+    -- is @DESCENDING@.
+    sortOrder :: Prelude.Maybe SortOrder
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Sort' 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:
+--
+-- 'sortBy', 'sort_sortBy' - For @ListEntities@, supported attributes include @LastModifiedDate@
+-- (default), @Visibility@, @EntityId@, and @Name@.
+--
+-- For @ListChangeSets@, supported attributes include @StartTime@ and
+-- @EndTime@.
+--
+-- 'sortOrder', 'sort_sortOrder' - The sorting order. Can be @ASCENDING@ or @DESCENDING@. The default value
+-- is @DESCENDING@.
+newSort ::
+  Sort
+newSort =
+  Sort'
+    { sortBy = Prelude.Nothing,
+      sortOrder = Prelude.Nothing
+    }
+
+-- | For @ListEntities@, supported attributes include @LastModifiedDate@
+-- (default), @Visibility@, @EntityId@, and @Name@.
+--
+-- For @ListChangeSets@, supported attributes include @StartTime@ and
+-- @EndTime@.
+sort_sortBy :: Lens.Lens' Sort (Prelude.Maybe Prelude.Text)
+sort_sortBy = Lens.lens (\Sort' {sortBy} -> sortBy) (\s@Sort' {} a -> s {sortBy = a} :: Sort)
+
+-- | The sorting order. Can be @ASCENDING@ or @DESCENDING@. The default value
+-- is @DESCENDING@.
+sort_sortOrder :: Lens.Lens' Sort (Prelude.Maybe SortOrder)
+sort_sortOrder = Lens.lens (\Sort' {sortOrder} -> sortOrder) (\s@Sort' {} a -> s {sortOrder = a} :: Sort)
+
+instance Prelude.Hashable Sort where
+  hashWithSalt _salt Sort' {..} =
+    _salt
+      `Prelude.hashWithSalt` sortBy
+      `Prelude.hashWithSalt` sortOrder
+
+instance Prelude.NFData Sort where
+  rnf Sort' {..} =
+    Prelude.rnf sortBy
+      `Prelude.seq` Prelude.rnf sortOrder
+
+instance Data.ToJSON Sort where
+  toJSON Sort' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("SortBy" Data..=) Prelude.<$> sortBy,
+            ("SortOrder" Data..=) Prelude.<$> sortOrder
+          ]
+      )
diff --git a/gen/Amazonka/MarketplaceCatalog/Types/SortOrder.hs b/gen/Amazonka/MarketplaceCatalog/Types/SortOrder.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MarketplaceCatalog/Types/SortOrder.hs
@@ -0,0 +1,71 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.MarketplaceCatalog.Types.SortOrder
+-- 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.MarketplaceCatalog.Types.SortOrder
+  ( SortOrder
+      ( ..,
+        SortOrder_ASCENDING,
+        SortOrder_DESCENDING
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype SortOrder = SortOrder'
+  { fromSortOrder ::
+      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 SortOrder_ASCENDING :: SortOrder
+pattern SortOrder_ASCENDING = SortOrder' "ASCENDING"
+
+pattern SortOrder_DESCENDING :: SortOrder
+pattern SortOrder_DESCENDING = SortOrder' "DESCENDING"
+
+{-# COMPLETE
+  SortOrder_ASCENDING,
+  SortOrder_DESCENDING,
+  SortOrder'
+  #-}
diff --git a/gen/Amazonka/MarketplaceCatalog/Types/Tag.hs b/gen/Amazonka/MarketplaceCatalog/Types/Tag.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MarketplaceCatalog/Types/Tag.hs
@@ -0,0 +1,93 @@
+{-# 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.MarketplaceCatalog.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.MarketplaceCatalog.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
+
+-- | A list of objects specifying each key name and value.
+--
+-- /See:/ 'newTag' smart constructor.
+data Tag = Tag'
+  { -- | The key associated with the tag.
+    key :: Prelude.Text,
+    -- | The value associated with the tag.
+    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' - The key associated with the tag.
+--
+-- 'value', 'tag_value' - The value associated with the tag.
+newTag ::
+  -- | 'key'
+  Prelude.Text ->
+  -- | 'value'
+  Prelude.Text ->
+  Tag
+newTag pKey_ pValue_ =
+  Tag' {key = pKey_, value = pValue_}
+
+-- | The key associated with the tag.
+tag_key :: Lens.Lens' Tag Prelude.Text
+tag_key = Lens.lens (\Tag' {key} -> key) (\s@Tag' {} a -> s {key = a} :: Tag)
+
+-- | The value associated with the tag.
+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/MarketplaceCatalog/UntagResource.hs b/gen/Amazonka/MarketplaceCatalog/UntagResource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MarketplaceCatalog/UntagResource.hs
@@ -0,0 +1,178 @@
+{-# 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.MarketplaceCatalog.UntagResource
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Removes a tag or list of tags from a resource (either an
+-- <https://docs.aws.amazon.com/marketplace-catalog/latest/api-reference/welcome.html#catalog-api-entities entity>
+-- or
+-- <https://docs.aws.amazon.com/marketplace-catalog/latest/api-reference/welcome.html#working-with-change-sets change set>).
+module Amazonka.MarketplaceCatalog.UntagResource
+  ( -- * Creating a Request
+    UntagResource (..),
+    newUntagResource,
+
+    -- * Request Lenses
+    untagResource_resourceArn,
+    untagResource_tagKeys,
+
+    -- * Destructuring the Response
+    UntagResourceResponse (..),
+    newUntagResourceResponse,
+
+    -- * Response Lenses
+    untagResourceResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MarketplaceCatalog.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUntagResource' smart constructor.
+data UntagResource = UntagResource'
+  { -- | Required. The Amazon Resource Name (ARN) associated with the resource
+    -- you want to remove the tag from.
+    resourceArn :: Prelude.Text,
+    -- | Required. A list of key names of tags to be removed. Number of strings
+    -- allowed: 0-256.
+    tagKeys :: Prelude.NonEmpty Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UntagResource' 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:
+--
+-- 'resourceArn', 'untagResource_resourceArn' - Required. The Amazon Resource Name (ARN) associated with the resource
+-- you want to remove the tag from.
+--
+-- 'tagKeys', 'untagResource_tagKeys' - Required. A list of key names of tags to be removed. Number of strings
+-- allowed: 0-256.
+newUntagResource ::
+  -- | 'resourceArn'
+  Prelude.Text ->
+  -- | 'tagKeys'
+  Prelude.NonEmpty Prelude.Text ->
+  UntagResource
+newUntagResource pResourceArn_ pTagKeys_ =
+  UntagResource'
+    { resourceArn = pResourceArn_,
+      tagKeys = Lens.coerced Lens.# pTagKeys_
+    }
+
+-- | Required. The Amazon Resource Name (ARN) associated with the resource
+-- you want to remove the tag from.
+untagResource_resourceArn :: Lens.Lens' UntagResource Prelude.Text
+untagResource_resourceArn = Lens.lens (\UntagResource' {resourceArn} -> resourceArn) (\s@UntagResource' {} a -> s {resourceArn = a} :: UntagResource)
+
+-- | Required. A list of key names of tags to be removed. Number of strings
+-- allowed: 0-256.
+untagResource_tagKeys :: Lens.Lens' UntagResource (Prelude.NonEmpty Prelude.Text)
+untagResource_tagKeys = Lens.lens (\UntagResource' {tagKeys} -> tagKeys) (\s@UntagResource' {} a -> s {tagKeys = a} :: UntagResource) Prelude.. Lens.coerced
+
+instance Core.AWSRequest UntagResource where
+  type
+    AWSResponse UntagResource =
+      UntagResourceResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          UntagResourceResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UntagResource where
+  hashWithSalt _salt UntagResource' {..} =
+    _salt
+      `Prelude.hashWithSalt` resourceArn
+      `Prelude.hashWithSalt` tagKeys
+
+instance Prelude.NFData UntagResource where
+  rnf UntagResource' {..} =
+    Prelude.rnf resourceArn
+      `Prelude.seq` Prelude.rnf tagKeys
+
+instance Data.ToHeaders UntagResource where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UntagResource where
+  toJSON UntagResource' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("ResourceArn" Data..= resourceArn),
+            Prelude.Just ("TagKeys" Data..= tagKeys)
+          ]
+      )
+
+instance Data.ToPath UntagResource where
+  toPath = Prelude.const "/UntagResource"
+
+instance Data.ToQuery UntagResource where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUntagResourceResponse' smart constructor.
+data UntagResourceResponse = UntagResourceResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UntagResourceResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'untagResourceResponse_httpStatus' - The response's http status code.
+newUntagResourceResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UntagResourceResponse
+newUntagResourceResponse pHttpStatus_ =
+  UntagResourceResponse' {httpStatus = pHttpStatus_}
+
+-- | The response's http status code.
+untagResourceResponse_httpStatus :: Lens.Lens' UntagResourceResponse Prelude.Int
+untagResourceResponse_httpStatus = Lens.lens (\UntagResourceResponse' {httpStatus} -> httpStatus) (\s@UntagResourceResponse' {} a -> s {httpStatus = a} :: UntagResourceResponse)
+
+instance Prelude.NFData UntagResourceResponse where
+  rnf UntagResourceResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/MarketplaceCatalog/Waiters.hs b/gen/Amazonka/MarketplaceCatalog/Waiters.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/MarketplaceCatalog/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.MarketplaceCatalog.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.MarketplaceCatalog.Waiters where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.MarketplaceCatalog.Lens
+import Amazonka.MarketplaceCatalog.Types
+import qualified Amazonka.Prelude as Prelude
diff --git a/src/.gitkeep b/src/.gitkeep
new file mode 100644
--- /dev/null
+++ b/src/.gitkeep
diff --git a/test/Main.hs b/test/Main.hs
new file mode 100644
--- /dev/null
+++ b/test/Main.hs
@@ -0,0 +1,23 @@
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- |
+-- Module      : Main
+-- 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 Main (main) where
+
+import Test.Amazonka.MarketplaceCatalog
+import Test.Amazonka.MarketplaceCatalog.Internal
+import Test.Tasty
+
+main :: IO ()
+main =
+  defaultMain $
+    testGroup
+      "MarketplaceCatalog"
+      [ testGroup "tests" tests,
+        testGroup "fixtures" fixtures
+      ]
diff --git a/test/Test/Amazonka/Gen/MarketplaceCatalog.hs b/test/Test/Amazonka/Gen/MarketplaceCatalog.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/Gen/MarketplaceCatalog.hs
@@ -0,0 +1,218 @@
+{-# 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.MarketplaceCatalog
+-- 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.MarketplaceCatalog where
+
+import Amazonka.MarketplaceCatalog
+import qualified Data.Proxy as Proxy
+import Test.Amazonka.Fixture
+import Test.Amazonka.MarketplaceCatalog.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"
+--         [ requestCancelChangeSet $
+--             newCancelChangeSet
+--
+--         , requestDescribeChangeSet $
+--             newDescribeChangeSet
+--
+--         , requestDescribeEntity $
+--             newDescribeEntity
+--
+--         , requestListChangeSets $
+--             newListChangeSets
+--
+--         , requestListEntities $
+--             newListEntities
+--
+--         , requestListTagsForResource $
+--             newListTagsForResource
+--
+--         , requestStartChangeSet $
+--             newStartChangeSet
+--
+--         , requestTagResource $
+--             newTagResource
+--
+--         , requestUntagResource $
+--             newUntagResource
+--
+--           ]
+
+--     , testGroup "response"
+--         [ responseCancelChangeSet $
+--             newCancelChangeSetResponse
+--
+--         , responseDescribeChangeSet $
+--             newDescribeChangeSetResponse
+--
+--         , responseDescribeEntity $
+--             newDescribeEntityResponse
+--
+--         , responseListChangeSets $
+--             newListChangeSetsResponse
+--
+--         , responseListEntities $
+--             newListEntitiesResponse
+--
+--         , responseListTagsForResource $
+--             newListTagsForResourceResponse
+--
+--         , responseStartChangeSet $
+--             newStartChangeSetResponse
+--
+--         , responseTagResource $
+--             newTagResourceResponse
+--
+--         , responseUntagResource $
+--             newUntagResourceResponse
+--
+--           ]
+--     ]
+
+-- Requests
+
+requestCancelChangeSet :: CancelChangeSet -> TestTree
+requestCancelChangeSet =
+  req
+    "CancelChangeSet"
+    "fixture/CancelChangeSet.yaml"
+
+requestDescribeChangeSet :: DescribeChangeSet -> TestTree
+requestDescribeChangeSet =
+  req
+    "DescribeChangeSet"
+    "fixture/DescribeChangeSet.yaml"
+
+requestDescribeEntity :: DescribeEntity -> TestTree
+requestDescribeEntity =
+  req
+    "DescribeEntity"
+    "fixture/DescribeEntity.yaml"
+
+requestListChangeSets :: ListChangeSets -> TestTree
+requestListChangeSets =
+  req
+    "ListChangeSets"
+    "fixture/ListChangeSets.yaml"
+
+requestListEntities :: ListEntities -> TestTree
+requestListEntities =
+  req
+    "ListEntities"
+    "fixture/ListEntities.yaml"
+
+requestListTagsForResource :: ListTagsForResource -> TestTree
+requestListTagsForResource =
+  req
+    "ListTagsForResource"
+    "fixture/ListTagsForResource.yaml"
+
+requestStartChangeSet :: StartChangeSet -> TestTree
+requestStartChangeSet =
+  req
+    "StartChangeSet"
+    "fixture/StartChangeSet.yaml"
+
+requestTagResource :: TagResource -> TestTree
+requestTagResource =
+  req
+    "TagResource"
+    "fixture/TagResource.yaml"
+
+requestUntagResource :: UntagResource -> TestTree
+requestUntagResource =
+  req
+    "UntagResource"
+    "fixture/UntagResource.yaml"
+
+-- Responses
+
+responseCancelChangeSet :: CancelChangeSetResponse -> TestTree
+responseCancelChangeSet =
+  res
+    "CancelChangeSetResponse"
+    "fixture/CancelChangeSetResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CancelChangeSet)
+
+responseDescribeChangeSet :: DescribeChangeSetResponse -> TestTree
+responseDescribeChangeSet =
+  res
+    "DescribeChangeSetResponse"
+    "fixture/DescribeChangeSetResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeChangeSet)
+
+responseDescribeEntity :: DescribeEntityResponse -> TestTree
+responseDescribeEntity =
+  res
+    "DescribeEntityResponse"
+    "fixture/DescribeEntityResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeEntity)
+
+responseListChangeSets :: ListChangeSetsResponse -> TestTree
+responseListChangeSets =
+  res
+    "ListChangeSetsResponse"
+    "fixture/ListChangeSetsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListChangeSets)
+
+responseListEntities :: ListEntitiesResponse -> TestTree
+responseListEntities =
+  res
+    "ListEntitiesResponse"
+    "fixture/ListEntitiesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListEntities)
+
+responseListTagsForResource :: ListTagsForResourceResponse -> TestTree
+responseListTagsForResource =
+  res
+    "ListTagsForResourceResponse"
+    "fixture/ListTagsForResourceResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListTagsForResource)
+
+responseStartChangeSet :: StartChangeSetResponse -> TestTree
+responseStartChangeSet =
+  res
+    "StartChangeSetResponse"
+    "fixture/StartChangeSetResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy StartChangeSet)
+
+responseTagResource :: TagResourceResponse -> TestTree
+responseTagResource =
+  res
+    "TagResourceResponse"
+    "fixture/TagResourceResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy TagResource)
+
+responseUntagResource :: UntagResourceResponse -> TestTree
+responseUntagResource =
+  res
+    "UntagResourceResponse"
+    "fixture/UntagResourceResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UntagResource)
diff --git a/test/Test/Amazonka/MarketplaceCatalog.hs b/test/Test/Amazonka/MarketplaceCatalog.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/MarketplaceCatalog.hs
@@ -0,0 +1,20 @@
+-- |
+-- Module      : Test.Amazonka.MarketplaceCatalog
+-- 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.MarketplaceCatalog
+  ( tests,
+    fixtures,
+  )
+where
+
+import Test.Tasty (TestTree)
+
+tests :: [TestTree]
+tests = []
+
+fixtures :: [TestTree]
+fixtures = []
diff --git a/test/Test/Amazonka/MarketplaceCatalog/Internal.hs b/test/Test/Amazonka/MarketplaceCatalog/Internal.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/MarketplaceCatalog/Internal.hs
@@ -0,0 +1,8 @@
+-- |
+-- Module      : Test.Amazonka.MarketplaceCatalog.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.MarketplaceCatalog.Internal where
