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 Service Catalog App Registry SDK
+
+* [Version](#version)
+* [Description](#description)
+* [Contribute](#contribute)
+* [Licence](#licence)
+
+
+## Version
+ 
+`2.0` - Derived from API version @2020-06-24@ of the AWS service descriptions, licensed under Apache 2.0.
+
+## Description
+
+Documentation is available via [Hackage](http://hackage.haskell.org/package/amazonka-servicecatalog-appregistry)
+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.ServiceCatalogAppRegistry](http://hackage.haskell.org/package/amazonka-servicecatalog-appregistry/docs/Amazonka-ServiceCatalogAppRegistry.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-servicecatalog-appregistry` 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-servicecatalog-appregistry.cabal b/amazonka-servicecatalog-appregistry.cabal
new file mode 100644
--- /dev/null
+++ b/amazonka-servicecatalog-appregistry.cabal
@@ -0,0 +1,123 @@
+cabal-version:      2.2
+name:               amazonka-servicecatalog-appregistry
+version:            2.0
+synopsis:           Amazon Service Catalog App Registry 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 @2020-06-24@ 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.ServiceCatalogAppRegistry.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.ServiceCatalogAppRegistry" 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-servicecatalog-appregistry
+
+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.ServiceCatalogAppRegistry
+    Amazonka.ServiceCatalogAppRegistry.AssociateAttributeGroup
+    Amazonka.ServiceCatalogAppRegistry.AssociateResource
+    Amazonka.ServiceCatalogAppRegistry.CreateApplication
+    Amazonka.ServiceCatalogAppRegistry.CreateAttributeGroup
+    Amazonka.ServiceCatalogAppRegistry.DeleteApplication
+    Amazonka.ServiceCatalogAppRegistry.DeleteAttributeGroup
+    Amazonka.ServiceCatalogAppRegistry.DisassociateAttributeGroup
+    Amazonka.ServiceCatalogAppRegistry.DisassociateResource
+    Amazonka.ServiceCatalogAppRegistry.GetApplication
+    Amazonka.ServiceCatalogAppRegistry.GetAssociatedResource
+    Amazonka.ServiceCatalogAppRegistry.GetAttributeGroup
+    Amazonka.ServiceCatalogAppRegistry.GetConfiguration
+    Amazonka.ServiceCatalogAppRegistry.Lens
+    Amazonka.ServiceCatalogAppRegistry.ListApplications
+    Amazonka.ServiceCatalogAppRegistry.ListAssociatedAttributeGroups
+    Amazonka.ServiceCatalogAppRegistry.ListAssociatedResources
+    Amazonka.ServiceCatalogAppRegistry.ListAttributeGroups
+    Amazonka.ServiceCatalogAppRegistry.ListAttributeGroupsForApplication
+    Amazonka.ServiceCatalogAppRegistry.ListTagsForResource
+    Amazonka.ServiceCatalogAppRegistry.PutConfiguration
+    Amazonka.ServiceCatalogAppRegistry.SyncResource
+    Amazonka.ServiceCatalogAppRegistry.TagResource
+    Amazonka.ServiceCatalogAppRegistry.Types
+    Amazonka.ServiceCatalogAppRegistry.Types.Application
+    Amazonka.ServiceCatalogAppRegistry.Types.ApplicationSummary
+    Amazonka.ServiceCatalogAppRegistry.Types.AppRegistryConfiguration
+    Amazonka.ServiceCatalogAppRegistry.Types.AttributeGroup
+    Amazonka.ServiceCatalogAppRegistry.Types.AttributeGroupDetails
+    Amazonka.ServiceCatalogAppRegistry.Types.AttributeGroupSummary
+    Amazonka.ServiceCatalogAppRegistry.Types.Integrations
+    Amazonka.ServiceCatalogAppRegistry.Types.Resource
+    Amazonka.ServiceCatalogAppRegistry.Types.ResourceDetails
+    Amazonka.ServiceCatalogAppRegistry.Types.ResourceGroup
+    Amazonka.ServiceCatalogAppRegistry.Types.ResourceGroupState
+    Amazonka.ServiceCatalogAppRegistry.Types.ResourceInfo
+    Amazonka.ServiceCatalogAppRegistry.Types.ResourceIntegrations
+    Amazonka.ServiceCatalogAppRegistry.Types.ResourceType
+    Amazonka.ServiceCatalogAppRegistry.Types.SyncAction
+    Amazonka.ServiceCatalogAppRegistry.Types.TagQueryConfiguration
+    Amazonka.ServiceCatalogAppRegistry.UntagResource
+    Amazonka.ServiceCatalogAppRegistry.UpdateApplication
+    Amazonka.ServiceCatalogAppRegistry.UpdateAttributeGroup
+    Amazonka.ServiceCatalogAppRegistry.Waiters
+
+  build-depends:
+    , amazonka-core  >=2.0  && <2.1
+    , base           >=4.12 && <5
+
+test-suite amazonka-servicecatalog-appregistry-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.ServiceCatalogAppRegistry
+    Test.Amazonka.ServiceCatalogAppRegistry
+    Test.Amazonka.ServiceCatalogAppRegistry.Internal
+
+  build-depends:
+    , amazonka-core                        >=2.0 && <2.1
+    , amazonka-servicecatalog-appregistry
+    , amazonka-test                        >=2.0 && <2.1
+    , base
+    , bytestring
+    , case-insensitive
+    , tasty
+    , tasty-hunit
+    , text
+    , time
+    , unordered-containers
diff --git a/fixture/AssociateAttributeGroup.yaml b/fixture/AssociateAttributeGroup.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/AssociateAttributeGroup.yaml
@@ -0,0 +1,10 @@
+---
+method: PUT
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/servicecatalog-appregistry/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  servicecatalog-appregistry.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/AssociateAttributeGroupResponse.proto b/fixture/AssociateAttributeGroupResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/AssociateAttributeGroupResponse.proto
diff --git a/fixture/AssociateResource.yaml b/fixture/AssociateResource.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/AssociateResource.yaml
@@ -0,0 +1,10 @@
+---
+method: PUT
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/servicecatalog-appregistry/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  servicecatalog-appregistry.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/AssociateResourceResponse.proto b/fixture/AssociateResourceResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/AssociateResourceResponse.proto
diff --git a/fixture/CreateApplication.yaml b/fixture/CreateApplication.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateApplication.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/servicecatalog-appregistry/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  servicecatalog-appregistry.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/CreateApplicationResponse.proto b/fixture/CreateApplicationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateApplicationResponse.proto
diff --git a/fixture/CreateAttributeGroup.yaml b/fixture/CreateAttributeGroup.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateAttributeGroup.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/servicecatalog-appregistry/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  servicecatalog-appregistry.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/CreateAttributeGroupResponse.proto b/fixture/CreateAttributeGroupResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateAttributeGroupResponse.proto
diff --git a/fixture/DeleteApplication.yaml b/fixture/DeleteApplication.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteApplication.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/servicecatalog-appregistry/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  servicecatalog-appregistry.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/DeleteApplicationResponse.proto b/fixture/DeleteApplicationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteApplicationResponse.proto
diff --git a/fixture/DeleteAttributeGroup.yaml b/fixture/DeleteAttributeGroup.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteAttributeGroup.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/servicecatalog-appregistry/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  servicecatalog-appregistry.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/DeleteAttributeGroupResponse.proto b/fixture/DeleteAttributeGroupResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteAttributeGroupResponse.proto
diff --git a/fixture/DisassociateAttributeGroup.yaml b/fixture/DisassociateAttributeGroup.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DisassociateAttributeGroup.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/servicecatalog-appregistry/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  servicecatalog-appregistry.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/DisassociateAttributeGroupResponse.proto b/fixture/DisassociateAttributeGroupResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DisassociateAttributeGroupResponse.proto
diff --git a/fixture/DisassociateResource.yaml b/fixture/DisassociateResource.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DisassociateResource.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/servicecatalog-appregistry/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  servicecatalog-appregistry.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/DisassociateResourceResponse.proto b/fixture/DisassociateResourceResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DisassociateResourceResponse.proto
diff --git a/fixture/GetApplication.yaml b/fixture/GetApplication.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetApplication.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/servicecatalog-appregistry/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  servicecatalog-appregistry.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/GetApplicationResponse.proto b/fixture/GetApplicationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetApplicationResponse.proto
diff --git a/fixture/GetAssociatedResource.yaml b/fixture/GetAssociatedResource.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetAssociatedResource.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/servicecatalog-appregistry/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  servicecatalog-appregistry.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/GetAssociatedResourceResponse.proto b/fixture/GetAssociatedResourceResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetAssociatedResourceResponse.proto
diff --git a/fixture/GetAttributeGroup.yaml b/fixture/GetAttributeGroup.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetAttributeGroup.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/servicecatalog-appregistry/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  servicecatalog-appregistry.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/GetAttributeGroupResponse.proto b/fixture/GetAttributeGroupResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetAttributeGroupResponse.proto
diff --git a/fixture/GetConfiguration.yaml b/fixture/GetConfiguration.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetConfiguration.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/servicecatalog-appregistry/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  servicecatalog-appregistry.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/GetConfigurationResponse.proto b/fixture/GetConfigurationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetConfigurationResponse.proto
diff --git a/fixture/ListApplications.yaml b/fixture/ListApplications.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListApplications.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/servicecatalog-appregistry/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  servicecatalog-appregistry.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/ListApplicationsResponse.proto b/fixture/ListApplicationsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListApplicationsResponse.proto
diff --git a/fixture/ListAssociatedAttributeGroups.yaml b/fixture/ListAssociatedAttributeGroups.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListAssociatedAttributeGroups.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/servicecatalog-appregistry/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  servicecatalog-appregistry.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/ListAssociatedAttributeGroupsResponse.proto b/fixture/ListAssociatedAttributeGroupsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListAssociatedAttributeGroupsResponse.proto
diff --git a/fixture/ListAssociatedResources.yaml b/fixture/ListAssociatedResources.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListAssociatedResources.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/servicecatalog-appregistry/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  servicecatalog-appregistry.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/ListAssociatedResourcesResponse.proto b/fixture/ListAssociatedResourcesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListAssociatedResourcesResponse.proto
diff --git a/fixture/ListAttributeGroups.yaml b/fixture/ListAttributeGroups.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListAttributeGroups.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/servicecatalog-appregistry/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  servicecatalog-appregistry.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/ListAttributeGroupsForApplication.yaml b/fixture/ListAttributeGroupsForApplication.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListAttributeGroupsForApplication.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/servicecatalog-appregistry/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  servicecatalog-appregistry.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/ListAttributeGroupsForApplicationResponse.proto b/fixture/ListAttributeGroupsForApplicationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListAttributeGroupsForApplicationResponse.proto
diff --git a/fixture/ListAttributeGroupsResponse.proto b/fixture/ListAttributeGroupsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListAttributeGroupsResponse.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: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/servicecatalog-appregistry/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  servicecatalog-appregistry.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/PutConfiguration.yaml b/fixture/PutConfiguration.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/PutConfiguration.yaml
@@ -0,0 +1,10 @@
+---
+method: PUT
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/servicecatalog-appregistry/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  servicecatalog-appregistry.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/PutConfigurationResponse.proto b/fixture/PutConfigurationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/PutConfigurationResponse.proto
diff --git a/fixture/SyncResource.yaml b/fixture/SyncResource.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/SyncResource.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/servicecatalog-appregistry/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  servicecatalog-appregistry.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/SyncResourceResponse.proto b/fixture/SyncResourceResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/SyncResourceResponse.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/servicecatalog-appregistry/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  servicecatalog-appregistry.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: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/servicecatalog-appregistry/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  servicecatalog-appregistry.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/fixture/UpdateApplication.yaml b/fixture/UpdateApplication.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateApplication.yaml
@@ -0,0 +1,10 @@
+---
+method: PATCH
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/servicecatalog-appregistry/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  servicecatalog-appregistry.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/UpdateApplicationResponse.proto b/fixture/UpdateApplicationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateApplicationResponse.proto
diff --git a/fixture/UpdateAttributeGroup.yaml b/fixture/UpdateAttributeGroup.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateAttributeGroup.yaml
@@ -0,0 +1,10 @@
+---
+method: PATCH
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/servicecatalog-appregistry/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  servicecatalog-appregistry.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/UpdateAttributeGroupResponse.proto b/fixture/UpdateAttributeGroupResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateAttributeGroupResponse.proto
diff --git a/gen/Amazonka/ServiceCatalogAppRegistry.hs b/gen/Amazonka/ServiceCatalogAppRegistry.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ServiceCatalogAppRegistry.hs
@@ -0,0 +1,309 @@
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- |
+-- Module      : Amazonka.ServiceCatalogAppRegistry
+-- 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 @2020-06-24@ of the AWS service descriptions, licensed under Apache 2.0.
+--
+-- Amazon Web Services Service Catalog AppRegistry enables organizations to
+-- understand the application context of their Amazon Web Services
+-- resources. AppRegistry provides a repository of your applications, their
+-- resources, and the application metadata that you use within your
+-- enterprise.
+module Amazonka.ServiceCatalogAppRegistry
+  ( -- * Service Configuration
+    defaultService,
+
+    -- * Errors
+    -- $errors
+
+    -- ** ConflictException
+    _ConflictException,
+
+    -- ** InternalServerException
+    _InternalServerException,
+
+    -- ** ResourceNotFoundException
+    _ResourceNotFoundException,
+
+    -- ** ServiceQuotaExceededException
+    _ServiceQuotaExceededException,
+
+    -- ** ValidationException
+    _ValidationException,
+
+    -- * Waiters
+    -- $waiters
+
+    -- * Operations
+    -- $operations
+
+    -- ** AssociateAttributeGroup
+    AssociateAttributeGroup (AssociateAttributeGroup'),
+    newAssociateAttributeGroup,
+    AssociateAttributeGroupResponse (AssociateAttributeGroupResponse'),
+    newAssociateAttributeGroupResponse,
+
+    -- ** AssociateResource
+    AssociateResource (AssociateResource'),
+    newAssociateResource,
+    AssociateResourceResponse (AssociateResourceResponse'),
+    newAssociateResourceResponse,
+
+    -- ** CreateApplication
+    CreateApplication (CreateApplication'),
+    newCreateApplication,
+    CreateApplicationResponse (CreateApplicationResponse'),
+    newCreateApplicationResponse,
+
+    -- ** CreateAttributeGroup
+    CreateAttributeGroup (CreateAttributeGroup'),
+    newCreateAttributeGroup,
+    CreateAttributeGroupResponse (CreateAttributeGroupResponse'),
+    newCreateAttributeGroupResponse,
+
+    -- ** DeleteApplication
+    DeleteApplication (DeleteApplication'),
+    newDeleteApplication,
+    DeleteApplicationResponse (DeleteApplicationResponse'),
+    newDeleteApplicationResponse,
+
+    -- ** DeleteAttributeGroup
+    DeleteAttributeGroup (DeleteAttributeGroup'),
+    newDeleteAttributeGroup,
+    DeleteAttributeGroupResponse (DeleteAttributeGroupResponse'),
+    newDeleteAttributeGroupResponse,
+
+    -- ** DisassociateAttributeGroup
+    DisassociateAttributeGroup (DisassociateAttributeGroup'),
+    newDisassociateAttributeGroup,
+    DisassociateAttributeGroupResponse (DisassociateAttributeGroupResponse'),
+    newDisassociateAttributeGroupResponse,
+
+    -- ** DisassociateResource
+    DisassociateResource (DisassociateResource'),
+    newDisassociateResource,
+    DisassociateResourceResponse (DisassociateResourceResponse'),
+    newDisassociateResourceResponse,
+
+    -- ** GetApplication
+    GetApplication (GetApplication'),
+    newGetApplication,
+    GetApplicationResponse (GetApplicationResponse'),
+    newGetApplicationResponse,
+
+    -- ** GetAssociatedResource
+    GetAssociatedResource (GetAssociatedResource'),
+    newGetAssociatedResource,
+    GetAssociatedResourceResponse (GetAssociatedResourceResponse'),
+    newGetAssociatedResourceResponse,
+
+    -- ** GetAttributeGroup
+    GetAttributeGroup (GetAttributeGroup'),
+    newGetAttributeGroup,
+    GetAttributeGroupResponse (GetAttributeGroupResponse'),
+    newGetAttributeGroupResponse,
+
+    -- ** GetConfiguration
+    GetConfiguration (GetConfiguration'),
+    newGetConfiguration,
+    GetConfigurationResponse (GetConfigurationResponse'),
+    newGetConfigurationResponse,
+
+    -- ** ListApplications (Paginated)
+    ListApplications (ListApplications'),
+    newListApplications,
+    ListApplicationsResponse (ListApplicationsResponse'),
+    newListApplicationsResponse,
+
+    -- ** ListAssociatedAttributeGroups (Paginated)
+    ListAssociatedAttributeGroups (ListAssociatedAttributeGroups'),
+    newListAssociatedAttributeGroups,
+    ListAssociatedAttributeGroupsResponse (ListAssociatedAttributeGroupsResponse'),
+    newListAssociatedAttributeGroupsResponse,
+
+    -- ** ListAssociatedResources (Paginated)
+    ListAssociatedResources (ListAssociatedResources'),
+    newListAssociatedResources,
+    ListAssociatedResourcesResponse (ListAssociatedResourcesResponse'),
+    newListAssociatedResourcesResponse,
+
+    -- ** ListAttributeGroups (Paginated)
+    ListAttributeGroups (ListAttributeGroups'),
+    newListAttributeGroups,
+    ListAttributeGroupsResponse (ListAttributeGroupsResponse'),
+    newListAttributeGroupsResponse,
+
+    -- ** ListAttributeGroupsForApplication (Paginated)
+    ListAttributeGroupsForApplication (ListAttributeGroupsForApplication'),
+    newListAttributeGroupsForApplication,
+    ListAttributeGroupsForApplicationResponse (ListAttributeGroupsForApplicationResponse'),
+    newListAttributeGroupsForApplicationResponse,
+
+    -- ** ListTagsForResource
+    ListTagsForResource (ListTagsForResource'),
+    newListTagsForResource,
+    ListTagsForResourceResponse (ListTagsForResourceResponse'),
+    newListTagsForResourceResponse,
+
+    -- ** PutConfiguration
+    PutConfiguration (PutConfiguration'),
+    newPutConfiguration,
+    PutConfigurationResponse (PutConfigurationResponse'),
+    newPutConfigurationResponse,
+
+    -- ** SyncResource
+    SyncResource (SyncResource'),
+    newSyncResource,
+    SyncResourceResponse (SyncResourceResponse'),
+    newSyncResourceResponse,
+
+    -- ** TagResource
+    TagResource (TagResource'),
+    newTagResource,
+    TagResourceResponse (TagResourceResponse'),
+    newTagResourceResponse,
+
+    -- ** UntagResource
+    UntagResource (UntagResource'),
+    newUntagResource,
+    UntagResourceResponse (UntagResourceResponse'),
+    newUntagResourceResponse,
+
+    -- ** UpdateApplication
+    UpdateApplication (UpdateApplication'),
+    newUpdateApplication,
+    UpdateApplicationResponse (UpdateApplicationResponse'),
+    newUpdateApplicationResponse,
+
+    -- ** UpdateAttributeGroup
+    UpdateAttributeGroup (UpdateAttributeGroup'),
+    newUpdateAttributeGroup,
+    UpdateAttributeGroupResponse (UpdateAttributeGroupResponse'),
+    newUpdateAttributeGroupResponse,
+
+    -- * Types
+
+    -- ** ResourceGroupState
+    ResourceGroupState (..),
+
+    -- ** ResourceType
+    ResourceType (..),
+
+    -- ** SyncAction
+    SyncAction (..),
+
+    -- ** AppRegistryConfiguration
+    AppRegistryConfiguration (AppRegistryConfiguration'),
+    newAppRegistryConfiguration,
+
+    -- ** Application
+    Application (Application'),
+    newApplication,
+
+    -- ** ApplicationSummary
+    ApplicationSummary (ApplicationSummary'),
+    newApplicationSummary,
+
+    -- ** AttributeGroup
+    AttributeGroup (AttributeGroup'),
+    newAttributeGroup,
+
+    -- ** AttributeGroupDetails
+    AttributeGroupDetails (AttributeGroupDetails'),
+    newAttributeGroupDetails,
+
+    -- ** AttributeGroupSummary
+    AttributeGroupSummary (AttributeGroupSummary'),
+    newAttributeGroupSummary,
+
+    -- ** Integrations
+    Integrations (Integrations'),
+    newIntegrations,
+
+    -- ** Resource
+    Resource (Resource'),
+    newResource,
+
+    -- ** ResourceDetails
+    ResourceDetails (ResourceDetails'),
+    newResourceDetails,
+
+    -- ** ResourceGroup
+    ResourceGroup (ResourceGroup'),
+    newResourceGroup,
+
+    -- ** ResourceInfo
+    ResourceInfo (ResourceInfo'),
+    newResourceInfo,
+
+    -- ** ResourceIntegrations
+    ResourceIntegrations (ResourceIntegrations'),
+    newResourceIntegrations,
+
+    -- ** TagQueryConfiguration
+    TagQueryConfiguration (TagQueryConfiguration'),
+    newTagQueryConfiguration,
+  )
+where
+
+import Amazonka.ServiceCatalogAppRegistry.AssociateAttributeGroup
+import Amazonka.ServiceCatalogAppRegistry.AssociateResource
+import Amazonka.ServiceCatalogAppRegistry.CreateApplication
+import Amazonka.ServiceCatalogAppRegistry.CreateAttributeGroup
+import Amazonka.ServiceCatalogAppRegistry.DeleteApplication
+import Amazonka.ServiceCatalogAppRegistry.DeleteAttributeGroup
+import Amazonka.ServiceCatalogAppRegistry.DisassociateAttributeGroup
+import Amazonka.ServiceCatalogAppRegistry.DisassociateResource
+import Amazonka.ServiceCatalogAppRegistry.GetApplication
+import Amazonka.ServiceCatalogAppRegistry.GetAssociatedResource
+import Amazonka.ServiceCatalogAppRegistry.GetAttributeGroup
+import Amazonka.ServiceCatalogAppRegistry.GetConfiguration
+import Amazonka.ServiceCatalogAppRegistry.Lens
+import Amazonka.ServiceCatalogAppRegistry.ListApplications
+import Amazonka.ServiceCatalogAppRegistry.ListAssociatedAttributeGroups
+import Amazonka.ServiceCatalogAppRegistry.ListAssociatedResources
+import Amazonka.ServiceCatalogAppRegistry.ListAttributeGroups
+import Amazonka.ServiceCatalogAppRegistry.ListAttributeGroupsForApplication
+import Amazonka.ServiceCatalogAppRegistry.ListTagsForResource
+import Amazonka.ServiceCatalogAppRegistry.PutConfiguration
+import Amazonka.ServiceCatalogAppRegistry.SyncResource
+import Amazonka.ServiceCatalogAppRegistry.TagResource
+import Amazonka.ServiceCatalogAppRegistry.Types
+import Amazonka.ServiceCatalogAppRegistry.UntagResource
+import Amazonka.ServiceCatalogAppRegistry.UpdateApplication
+import Amazonka.ServiceCatalogAppRegistry.UpdateAttributeGroup
+import Amazonka.ServiceCatalogAppRegistry.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 'ServiceCatalogAppRegistry'.
+
+-- $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/ServiceCatalogAppRegistry/AssociateAttributeGroup.hs b/gen/Amazonka/ServiceCatalogAppRegistry/AssociateAttributeGroup.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ServiceCatalogAppRegistry/AssociateAttributeGroup.hs
@@ -0,0 +1,214 @@
+{-# 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.ServiceCatalogAppRegistry.AssociateAttributeGroup
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Associates an attribute group with an application to augment the
+-- application\'s metadata with the group\'s attributes. This feature
+-- enables applications to be described with user-defined details that are
+-- machine-readable, such as third-party integrations.
+module Amazonka.ServiceCatalogAppRegistry.AssociateAttributeGroup
+  ( -- * Creating a Request
+    AssociateAttributeGroup (..),
+    newAssociateAttributeGroup,
+
+    -- * Request Lenses
+    associateAttributeGroup_application,
+    associateAttributeGroup_attributeGroup,
+
+    -- * Destructuring the Response
+    AssociateAttributeGroupResponse (..),
+    newAssociateAttributeGroupResponse,
+
+    -- * Response Lenses
+    associateAttributeGroupResponse_applicationArn,
+    associateAttributeGroupResponse_attributeGroupArn,
+    associateAttributeGroupResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.ServiceCatalogAppRegistry.Types
+
+-- | /See:/ 'newAssociateAttributeGroup' smart constructor.
+data AssociateAttributeGroup = AssociateAttributeGroup'
+  { -- | The name or ID of the application.
+    application :: Prelude.Text,
+    -- | The name or ID of the attribute group that holds the attributes to
+    -- describe the application.
+    attributeGroup :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AssociateAttributeGroup' 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:
+--
+-- 'application', 'associateAttributeGroup_application' - The name or ID of the application.
+--
+-- 'attributeGroup', 'associateAttributeGroup_attributeGroup' - The name or ID of the attribute group that holds the attributes to
+-- describe the application.
+newAssociateAttributeGroup ::
+  -- | 'application'
+  Prelude.Text ->
+  -- | 'attributeGroup'
+  Prelude.Text ->
+  AssociateAttributeGroup
+newAssociateAttributeGroup
+  pApplication_
+  pAttributeGroup_ =
+    AssociateAttributeGroup'
+      { application =
+          pApplication_,
+        attributeGroup = pAttributeGroup_
+      }
+
+-- | The name or ID of the application.
+associateAttributeGroup_application :: Lens.Lens' AssociateAttributeGroup Prelude.Text
+associateAttributeGroup_application = Lens.lens (\AssociateAttributeGroup' {application} -> application) (\s@AssociateAttributeGroup' {} a -> s {application = a} :: AssociateAttributeGroup)
+
+-- | The name or ID of the attribute group that holds the attributes to
+-- describe the application.
+associateAttributeGroup_attributeGroup :: Lens.Lens' AssociateAttributeGroup Prelude.Text
+associateAttributeGroup_attributeGroup = Lens.lens (\AssociateAttributeGroup' {attributeGroup} -> attributeGroup) (\s@AssociateAttributeGroup' {} a -> s {attributeGroup = a} :: AssociateAttributeGroup)
+
+instance Core.AWSRequest AssociateAttributeGroup where
+  type
+    AWSResponse AssociateAttributeGroup =
+      AssociateAttributeGroupResponse
+  request overrides =
+    Request.putJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          AssociateAttributeGroupResponse'
+            Prelude.<$> (x Data..?> "applicationArn")
+            Prelude.<*> (x Data..?> "attributeGroupArn")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable AssociateAttributeGroup where
+  hashWithSalt _salt AssociateAttributeGroup' {..} =
+    _salt
+      `Prelude.hashWithSalt` application
+      `Prelude.hashWithSalt` attributeGroup
+
+instance Prelude.NFData AssociateAttributeGroup where
+  rnf AssociateAttributeGroup' {..} =
+    Prelude.rnf application
+      `Prelude.seq` Prelude.rnf attributeGroup
+
+instance Data.ToHeaders AssociateAttributeGroup where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON AssociateAttributeGroup where
+  toJSON = Prelude.const (Data.Object Prelude.mempty)
+
+instance Data.ToPath AssociateAttributeGroup where
+  toPath AssociateAttributeGroup' {..} =
+    Prelude.mconcat
+      [ "/applications/",
+        Data.toBS application,
+        "/attribute-groups/",
+        Data.toBS attributeGroup
+      ]
+
+instance Data.ToQuery AssociateAttributeGroup where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newAssociateAttributeGroupResponse' smart constructor.
+data AssociateAttributeGroupResponse = AssociateAttributeGroupResponse'
+  { -- | The Amazon resource name (ARN) of the application that was augmented
+    -- with attributes.
+    applicationArn :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon resource name (ARN) of the attribute group that contains the
+    -- application\'s new attributes.
+    attributeGroupArn :: 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 'AssociateAttributeGroupResponse' 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:
+--
+-- 'applicationArn', 'associateAttributeGroupResponse_applicationArn' - The Amazon resource name (ARN) of the application that was augmented
+-- with attributes.
+--
+-- 'attributeGroupArn', 'associateAttributeGroupResponse_attributeGroupArn' - The Amazon resource name (ARN) of the attribute group that contains the
+-- application\'s new attributes.
+--
+-- 'httpStatus', 'associateAttributeGroupResponse_httpStatus' - The response's http status code.
+newAssociateAttributeGroupResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  AssociateAttributeGroupResponse
+newAssociateAttributeGroupResponse pHttpStatus_ =
+  AssociateAttributeGroupResponse'
+    { applicationArn =
+        Prelude.Nothing,
+      attributeGroupArn = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The Amazon resource name (ARN) of the application that was augmented
+-- with attributes.
+associateAttributeGroupResponse_applicationArn :: Lens.Lens' AssociateAttributeGroupResponse (Prelude.Maybe Prelude.Text)
+associateAttributeGroupResponse_applicationArn = Lens.lens (\AssociateAttributeGroupResponse' {applicationArn} -> applicationArn) (\s@AssociateAttributeGroupResponse' {} a -> s {applicationArn = a} :: AssociateAttributeGroupResponse)
+
+-- | The Amazon resource name (ARN) of the attribute group that contains the
+-- application\'s new attributes.
+associateAttributeGroupResponse_attributeGroupArn :: Lens.Lens' AssociateAttributeGroupResponse (Prelude.Maybe Prelude.Text)
+associateAttributeGroupResponse_attributeGroupArn = Lens.lens (\AssociateAttributeGroupResponse' {attributeGroupArn} -> attributeGroupArn) (\s@AssociateAttributeGroupResponse' {} a -> s {attributeGroupArn = a} :: AssociateAttributeGroupResponse)
+
+-- | The response's http status code.
+associateAttributeGroupResponse_httpStatus :: Lens.Lens' AssociateAttributeGroupResponse Prelude.Int
+associateAttributeGroupResponse_httpStatus = Lens.lens (\AssociateAttributeGroupResponse' {httpStatus} -> httpStatus) (\s@AssociateAttributeGroupResponse' {} a -> s {httpStatus = a} :: AssociateAttributeGroupResponse)
+
+instance
+  Prelude.NFData
+    AssociateAttributeGroupResponse
+  where
+  rnf AssociateAttributeGroupResponse' {..} =
+    Prelude.rnf applicationArn
+      `Prelude.seq` Prelude.rnf attributeGroupArn
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ServiceCatalogAppRegistry/AssociateResource.hs b/gen/Amazonka/ServiceCatalogAppRegistry/AssociateResource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ServiceCatalogAppRegistry/AssociateResource.hs
@@ -0,0 +1,222 @@
+{-# 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.ServiceCatalogAppRegistry.AssociateResource
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Associates a resource with an application. Both the resource and the
+-- application can be specified either by ID or name.
+module Amazonka.ServiceCatalogAppRegistry.AssociateResource
+  ( -- * Creating a Request
+    AssociateResource (..),
+    newAssociateResource,
+
+    -- * Request Lenses
+    associateResource_application,
+    associateResource_resourceType,
+    associateResource_resource,
+
+    -- * Destructuring the Response
+    AssociateResourceResponse (..),
+    newAssociateResourceResponse,
+
+    -- * Response Lenses
+    associateResourceResponse_applicationArn,
+    associateResourceResponse_resourceArn,
+    associateResourceResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.ServiceCatalogAppRegistry.Types
+
+-- | /See:/ 'newAssociateResource' smart constructor.
+data AssociateResource = AssociateResource'
+  { -- | The name or ID of the application.
+    application :: Prelude.Text,
+    -- | The type of resource of which the application will be associated.
+    resourceType :: ResourceType,
+    -- | The name or ID of the resource of which the application will be
+    -- associated.
+    resource :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AssociateResource' 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:
+--
+-- 'application', 'associateResource_application' - The name or ID of the application.
+--
+-- 'resourceType', 'associateResource_resourceType' - The type of resource of which the application will be associated.
+--
+-- 'resource', 'associateResource_resource' - The name or ID of the resource of which the application will be
+-- associated.
+newAssociateResource ::
+  -- | 'application'
+  Prelude.Text ->
+  -- | 'resourceType'
+  ResourceType ->
+  -- | 'resource'
+  Prelude.Text ->
+  AssociateResource
+newAssociateResource
+  pApplication_
+  pResourceType_
+  pResource_ =
+    AssociateResource'
+      { application = pApplication_,
+        resourceType = pResourceType_,
+        resource = pResource_
+      }
+
+-- | The name or ID of the application.
+associateResource_application :: Lens.Lens' AssociateResource Prelude.Text
+associateResource_application = Lens.lens (\AssociateResource' {application} -> application) (\s@AssociateResource' {} a -> s {application = a} :: AssociateResource)
+
+-- | The type of resource of which the application will be associated.
+associateResource_resourceType :: Lens.Lens' AssociateResource ResourceType
+associateResource_resourceType = Lens.lens (\AssociateResource' {resourceType} -> resourceType) (\s@AssociateResource' {} a -> s {resourceType = a} :: AssociateResource)
+
+-- | The name or ID of the resource of which the application will be
+-- associated.
+associateResource_resource :: Lens.Lens' AssociateResource Prelude.Text
+associateResource_resource = Lens.lens (\AssociateResource' {resource} -> resource) (\s@AssociateResource' {} a -> s {resource = a} :: AssociateResource)
+
+instance Core.AWSRequest AssociateResource where
+  type
+    AWSResponse AssociateResource =
+      AssociateResourceResponse
+  request overrides =
+    Request.putJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          AssociateResourceResponse'
+            Prelude.<$> (x Data..?> "applicationArn")
+            Prelude.<*> (x Data..?> "resourceArn")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable AssociateResource where
+  hashWithSalt _salt AssociateResource' {..} =
+    _salt
+      `Prelude.hashWithSalt` application
+      `Prelude.hashWithSalt` resourceType
+      `Prelude.hashWithSalt` resource
+
+instance Prelude.NFData AssociateResource where
+  rnf AssociateResource' {..} =
+    Prelude.rnf application
+      `Prelude.seq` Prelude.rnf resourceType
+      `Prelude.seq` Prelude.rnf resource
+
+instance Data.ToHeaders AssociateResource where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON AssociateResource where
+  toJSON = Prelude.const (Data.Object Prelude.mempty)
+
+instance Data.ToPath AssociateResource where
+  toPath AssociateResource' {..} =
+    Prelude.mconcat
+      [ "/applications/",
+        Data.toBS application,
+        "/resources/",
+        Data.toBS resourceType,
+        "/",
+        Data.toBS resource
+      ]
+
+instance Data.ToQuery AssociateResource where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newAssociateResourceResponse' smart constructor.
+data AssociateResourceResponse = AssociateResourceResponse'
+  { -- | The Amazon resource name (ARN) of the application that was augmented
+    -- with attributes.
+    applicationArn :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon resource name (ARN) that specifies the resource.
+    resourceArn :: 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 'AssociateResourceResponse' 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:
+--
+-- 'applicationArn', 'associateResourceResponse_applicationArn' - The Amazon resource name (ARN) of the application that was augmented
+-- with attributes.
+--
+-- 'resourceArn', 'associateResourceResponse_resourceArn' - The Amazon resource name (ARN) that specifies the resource.
+--
+-- 'httpStatus', 'associateResourceResponse_httpStatus' - The response's http status code.
+newAssociateResourceResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  AssociateResourceResponse
+newAssociateResourceResponse pHttpStatus_ =
+  AssociateResourceResponse'
+    { applicationArn =
+        Prelude.Nothing,
+      resourceArn = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The Amazon resource name (ARN) of the application that was augmented
+-- with attributes.
+associateResourceResponse_applicationArn :: Lens.Lens' AssociateResourceResponse (Prelude.Maybe Prelude.Text)
+associateResourceResponse_applicationArn = Lens.lens (\AssociateResourceResponse' {applicationArn} -> applicationArn) (\s@AssociateResourceResponse' {} a -> s {applicationArn = a} :: AssociateResourceResponse)
+
+-- | The Amazon resource name (ARN) that specifies the resource.
+associateResourceResponse_resourceArn :: Lens.Lens' AssociateResourceResponse (Prelude.Maybe Prelude.Text)
+associateResourceResponse_resourceArn = Lens.lens (\AssociateResourceResponse' {resourceArn} -> resourceArn) (\s@AssociateResourceResponse' {} a -> s {resourceArn = a} :: AssociateResourceResponse)
+
+-- | The response's http status code.
+associateResourceResponse_httpStatus :: Lens.Lens' AssociateResourceResponse Prelude.Int
+associateResourceResponse_httpStatus = Lens.lens (\AssociateResourceResponse' {httpStatus} -> httpStatus) (\s@AssociateResourceResponse' {} a -> s {httpStatus = a} :: AssociateResourceResponse)
+
+instance Prelude.NFData AssociateResourceResponse where
+  rnf AssociateResourceResponse' {..} =
+    Prelude.rnf applicationArn
+      `Prelude.seq` Prelude.rnf resourceArn
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ServiceCatalogAppRegistry/CreateApplication.hs b/gen/Amazonka/ServiceCatalogAppRegistry/CreateApplication.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ServiceCatalogAppRegistry/CreateApplication.hs
@@ -0,0 +1,226 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ServiceCatalogAppRegistry.CreateApplication
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates a new application that is the top-level node in a hierarchy of
+-- related cloud resource abstractions.
+module Amazonka.ServiceCatalogAppRegistry.CreateApplication
+  ( -- * Creating a Request
+    CreateApplication (..),
+    newCreateApplication,
+
+    -- * Request Lenses
+    createApplication_description,
+    createApplication_tags,
+    createApplication_name,
+    createApplication_clientToken,
+
+    -- * Destructuring the Response
+    CreateApplicationResponse (..),
+    newCreateApplicationResponse,
+
+    -- * Response Lenses
+    createApplicationResponse_application,
+    createApplicationResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.ServiceCatalogAppRegistry.Types
+
+-- | /See:/ 'newCreateApplication' smart constructor.
+data CreateApplication = CreateApplication'
+  { -- | The description of the application.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | Key-value pairs you can use to associate with the application.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The name of the application. The name must be unique in the region in
+    -- which you are creating the application.
+    name :: Prelude.Text,
+    -- | A unique identifier that you provide to ensure idempotency. If you retry
+    -- a request that completed successfully using the same client token and
+    -- the same parameters, the retry succeeds without performing any further
+    -- actions. If you retry a successful request using the same client token,
+    -- but one or more of the parameters are different, the retry fails.
+    clientToken :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateApplication' 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:
+--
+-- 'description', 'createApplication_description' - The description of the application.
+--
+-- 'tags', 'createApplication_tags' - Key-value pairs you can use to associate with the application.
+--
+-- 'name', 'createApplication_name' - The name of the application. The name must be unique in the region in
+-- which you are creating the application.
+--
+-- 'clientToken', 'createApplication_clientToken' - A unique identifier that you provide to ensure idempotency. If you retry
+-- a request that completed successfully using the same client token and
+-- the same parameters, the retry succeeds without performing any further
+-- actions. If you retry a successful request using the same client token,
+-- but one or more of the parameters are different, the retry fails.
+newCreateApplication ::
+  -- | 'name'
+  Prelude.Text ->
+  -- | 'clientToken'
+  Prelude.Text ->
+  CreateApplication
+newCreateApplication pName_ pClientToken_ =
+  CreateApplication'
+    { description = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      name = pName_,
+      clientToken = pClientToken_
+    }
+
+-- | The description of the application.
+createApplication_description :: Lens.Lens' CreateApplication (Prelude.Maybe Prelude.Text)
+createApplication_description = Lens.lens (\CreateApplication' {description} -> description) (\s@CreateApplication' {} a -> s {description = a} :: CreateApplication)
+
+-- | Key-value pairs you can use to associate with the application.
+createApplication_tags :: Lens.Lens' CreateApplication (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+createApplication_tags = Lens.lens (\CreateApplication' {tags} -> tags) (\s@CreateApplication' {} a -> s {tags = a} :: CreateApplication) Prelude.. Lens.mapping Lens.coerced
+
+-- | The name of the application. The name must be unique in the region in
+-- which you are creating the application.
+createApplication_name :: Lens.Lens' CreateApplication Prelude.Text
+createApplication_name = Lens.lens (\CreateApplication' {name} -> name) (\s@CreateApplication' {} a -> s {name = a} :: CreateApplication)
+
+-- | A unique identifier that you provide to ensure idempotency. If you retry
+-- a request that completed successfully using the same client token and
+-- the same parameters, the retry succeeds without performing any further
+-- actions. If you retry a successful request using the same client token,
+-- but one or more of the parameters are different, the retry fails.
+createApplication_clientToken :: Lens.Lens' CreateApplication Prelude.Text
+createApplication_clientToken = Lens.lens (\CreateApplication' {clientToken} -> clientToken) (\s@CreateApplication' {} a -> s {clientToken = a} :: CreateApplication)
+
+instance Core.AWSRequest CreateApplication where
+  type
+    AWSResponse CreateApplication =
+      CreateApplicationResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateApplicationResponse'
+            Prelude.<$> (x Data..?> "application")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateApplication where
+  hashWithSalt _salt CreateApplication' {..} =
+    _salt
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` clientToken
+
+instance Prelude.NFData CreateApplication where
+  rnf CreateApplication' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf clientToken
+
+instance Data.ToHeaders CreateApplication where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateApplication where
+  toJSON CreateApplication' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("description" Data..=) Prelude.<$> description,
+            ("tags" Data..=) Prelude.<$> tags,
+            Prelude.Just ("name" Data..= name),
+            Prelude.Just ("clientToken" Data..= clientToken)
+          ]
+      )
+
+instance Data.ToPath CreateApplication where
+  toPath = Prelude.const "/applications"
+
+instance Data.ToQuery CreateApplication where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateApplicationResponse' smart constructor.
+data CreateApplicationResponse = CreateApplicationResponse'
+  { -- | Information about the application.
+    application :: Prelude.Maybe Application,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateApplicationResponse' 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:
+--
+-- 'application', 'createApplicationResponse_application' - Information about the application.
+--
+-- 'httpStatus', 'createApplicationResponse_httpStatus' - The response's http status code.
+newCreateApplicationResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateApplicationResponse
+newCreateApplicationResponse pHttpStatus_ =
+  CreateApplicationResponse'
+    { application =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about the application.
+createApplicationResponse_application :: Lens.Lens' CreateApplicationResponse (Prelude.Maybe Application)
+createApplicationResponse_application = Lens.lens (\CreateApplicationResponse' {application} -> application) (\s@CreateApplicationResponse' {} a -> s {application = a} :: CreateApplicationResponse)
+
+-- | The response's http status code.
+createApplicationResponse_httpStatus :: Lens.Lens' CreateApplicationResponse Prelude.Int
+createApplicationResponse_httpStatus = Lens.lens (\CreateApplicationResponse' {httpStatus} -> httpStatus) (\s@CreateApplicationResponse' {} a -> s {httpStatus = a} :: CreateApplicationResponse)
+
+instance Prelude.NFData CreateApplicationResponse where
+  rnf CreateApplicationResponse' {..} =
+    Prelude.rnf application
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ServiceCatalogAppRegistry/CreateAttributeGroup.hs b/gen/Amazonka/ServiceCatalogAppRegistry/CreateAttributeGroup.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ServiceCatalogAppRegistry/CreateAttributeGroup.hs
@@ -0,0 +1,247 @@
+{-# 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.ServiceCatalogAppRegistry.CreateAttributeGroup
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates a new attribute group as a container for user-defined
+-- attributes. This feature enables users to have full control over their
+-- cloud application\'s metadata in a rich machine-readable format to
+-- facilitate integration with automated workflows and third-party tools.
+module Amazonka.ServiceCatalogAppRegistry.CreateAttributeGroup
+  ( -- * Creating a Request
+    CreateAttributeGroup (..),
+    newCreateAttributeGroup,
+
+    -- * Request Lenses
+    createAttributeGroup_description,
+    createAttributeGroup_tags,
+    createAttributeGroup_name,
+    createAttributeGroup_attributes,
+    createAttributeGroup_clientToken,
+
+    -- * Destructuring the Response
+    CreateAttributeGroupResponse (..),
+    newCreateAttributeGroupResponse,
+
+    -- * Response Lenses
+    createAttributeGroupResponse_attributeGroup,
+    createAttributeGroupResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.ServiceCatalogAppRegistry.Types
+
+-- | /See:/ 'newCreateAttributeGroup' smart constructor.
+data CreateAttributeGroup = CreateAttributeGroup'
+  { -- | The description of the attribute group that the user provides.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | Key-value pairs you can use to associate with the attribute group.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The name of the attribute group.
+    name :: Prelude.Text,
+    -- | A JSON string in the form of nested key-value pairs that represent the
+    -- attributes in the group and describes an application and its components.
+    attributes :: Prelude.Text,
+    -- | A unique identifier that you provide to ensure idempotency. If you retry
+    -- a request that completed successfully using the same client token and
+    -- the same parameters, the retry succeeds without performing any further
+    -- actions. If you retry a successful request using the same client token,
+    -- but one or more of the parameters are different, the retry fails.
+    clientToken :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateAttributeGroup' 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:
+--
+-- 'description', 'createAttributeGroup_description' - The description of the attribute group that the user provides.
+--
+-- 'tags', 'createAttributeGroup_tags' - Key-value pairs you can use to associate with the attribute group.
+--
+-- 'name', 'createAttributeGroup_name' - The name of the attribute group.
+--
+-- 'attributes', 'createAttributeGroup_attributes' - A JSON string in the form of nested key-value pairs that represent the
+-- attributes in the group and describes an application and its components.
+--
+-- 'clientToken', 'createAttributeGroup_clientToken' - A unique identifier that you provide to ensure idempotency. If you retry
+-- a request that completed successfully using the same client token and
+-- the same parameters, the retry succeeds without performing any further
+-- actions. If you retry a successful request using the same client token,
+-- but one or more of the parameters are different, the retry fails.
+newCreateAttributeGroup ::
+  -- | 'name'
+  Prelude.Text ->
+  -- | 'attributes'
+  Prelude.Text ->
+  -- | 'clientToken'
+  Prelude.Text ->
+  CreateAttributeGroup
+newCreateAttributeGroup
+  pName_
+  pAttributes_
+  pClientToken_ =
+    CreateAttributeGroup'
+      { description =
+          Prelude.Nothing,
+        tags = Prelude.Nothing,
+        name = pName_,
+        attributes = pAttributes_,
+        clientToken = pClientToken_
+      }
+
+-- | The description of the attribute group that the user provides.
+createAttributeGroup_description :: Lens.Lens' CreateAttributeGroup (Prelude.Maybe Prelude.Text)
+createAttributeGroup_description = Lens.lens (\CreateAttributeGroup' {description} -> description) (\s@CreateAttributeGroup' {} a -> s {description = a} :: CreateAttributeGroup)
+
+-- | Key-value pairs you can use to associate with the attribute group.
+createAttributeGroup_tags :: Lens.Lens' CreateAttributeGroup (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+createAttributeGroup_tags = Lens.lens (\CreateAttributeGroup' {tags} -> tags) (\s@CreateAttributeGroup' {} a -> s {tags = a} :: CreateAttributeGroup) Prelude.. Lens.mapping Lens.coerced
+
+-- | The name of the attribute group.
+createAttributeGroup_name :: Lens.Lens' CreateAttributeGroup Prelude.Text
+createAttributeGroup_name = Lens.lens (\CreateAttributeGroup' {name} -> name) (\s@CreateAttributeGroup' {} a -> s {name = a} :: CreateAttributeGroup)
+
+-- | A JSON string in the form of nested key-value pairs that represent the
+-- attributes in the group and describes an application and its components.
+createAttributeGroup_attributes :: Lens.Lens' CreateAttributeGroup Prelude.Text
+createAttributeGroup_attributes = Lens.lens (\CreateAttributeGroup' {attributes} -> attributes) (\s@CreateAttributeGroup' {} a -> s {attributes = a} :: CreateAttributeGroup)
+
+-- | A unique identifier that you provide to ensure idempotency. If you retry
+-- a request that completed successfully using the same client token and
+-- the same parameters, the retry succeeds without performing any further
+-- actions. If you retry a successful request using the same client token,
+-- but one or more of the parameters are different, the retry fails.
+createAttributeGroup_clientToken :: Lens.Lens' CreateAttributeGroup Prelude.Text
+createAttributeGroup_clientToken = Lens.lens (\CreateAttributeGroup' {clientToken} -> clientToken) (\s@CreateAttributeGroup' {} a -> s {clientToken = a} :: CreateAttributeGroup)
+
+instance Core.AWSRequest CreateAttributeGroup where
+  type
+    AWSResponse CreateAttributeGroup =
+      CreateAttributeGroupResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateAttributeGroupResponse'
+            Prelude.<$> (x Data..?> "attributeGroup")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateAttributeGroup where
+  hashWithSalt _salt CreateAttributeGroup' {..} =
+    _salt
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` attributes
+      `Prelude.hashWithSalt` clientToken
+
+instance Prelude.NFData CreateAttributeGroup where
+  rnf CreateAttributeGroup' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf attributes
+      `Prelude.seq` Prelude.rnf clientToken
+
+instance Data.ToHeaders CreateAttributeGroup where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateAttributeGroup where
+  toJSON CreateAttributeGroup' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("description" Data..=) Prelude.<$> description,
+            ("tags" Data..=) Prelude.<$> tags,
+            Prelude.Just ("name" Data..= name),
+            Prelude.Just ("attributes" Data..= attributes),
+            Prelude.Just ("clientToken" Data..= clientToken)
+          ]
+      )
+
+instance Data.ToPath CreateAttributeGroup where
+  toPath = Prelude.const "/attribute-groups"
+
+instance Data.ToQuery CreateAttributeGroup where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateAttributeGroupResponse' smart constructor.
+data CreateAttributeGroupResponse = CreateAttributeGroupResponse'
+  { -- | Information about the attribute group.
+    attributeGroup :: Prelude.Maybe AttributeGroup,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateAttributeGroupResponse' 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:
+--
+-- 'attributeGroup', 'createAttributeGroupResponse_attributeGroup' - Information about the attribute group.
+--
+-- 'httpStatus', 'createAttributeGroupResponse_httpStatus' - The response's http status code.
+newCreateAttributeGroupResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateAttributeGroupResponse
+newCreateAttributeGroupResponse pHttpStatus_ =
+  CreateAttributeGroupResponse'
+    { attributeGroup =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about the attribute group.
+createAttributeGroupResponse_attributeGroup :: Lens.Lens' CreateAttributeGroupResponse (Prelude.Maybe AttributeGroup)
+createAttributeGroupResponse_attributeGroup = Lens.lens (\CreateAttributeGroupResponse' {attributeGroup} -> attributeGroup) (\s@CreateAttributeGroupResponse' {} a -> s {attributeGroup = a} :: CreateAttributeGroupResponse)
+
+-- | The response's http status code.
+createAttributeGroupResponse_httpStatus :: Lens.Lens' CreateAttributeGroupResponse Prelude.Int
+createAttributeGroupResponse_httpStatus = Lens.lens (\CreateAttributeGroupResponse' {httpStatus} -> httpStatus) (\s@CreateAttributeGroupResponse' {} a -> s {httpStatus = a} :: CreateAttributeGroupResponse)
+
+instance Prelude.NFData CreateAttributeGroupResponse where
+  rnf CreateAttributeGroupResponse' {..} =
+    Prelude.rnf attributeGroup
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ServiceCatalogAppRegistry/DeleteApplication.hs b/gen/Amazonka/ServiceCatalogAppRegistry/DeleteApplication.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ServiceCatalogAppRegistry/DeleteApplication.hs
@@ -0,0 +1,161 @@
+{-# 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.ServiceCatalogAppRegistry.DeleteApplication
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes an application that is specified either by its application ID or
+-- name. All associated attribute groups and resources must be
+-- disassociated from it before deleting an application.
+module Amazonka.ServiceCatalogAppRegistry.DeleteApplication
+  ( -- * Creating a Request
+    DeleteApplication (..),
+    newDeleteApplication,
+
+    -- * Request Lenses
+    deleteApplication_application,
+
+    -- * Destructuring the Response
+    DeleteApplicationResponse (..),
+    newDeleteApplicationResponse,
+
+    -- * Response Lenses
+    deleteApplicationResponse_application,
+    deleteApplicationResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.ServiceCatalogAppRegistry.Types
+
+-- | /See:/ 'newDeleteApplication' smart constructor.
+data DeleteApplication = DeleteApplication'
+  { -- | The name or ID of the application.
+    application :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteApplication' 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:
+--
+-- 'application', 'deleteApplication_application' - The name or ID of the application.
+newDeleteApplication ::
+  -- | 'application'
+  Prelude.Text ->
+  DeleteApplication
+newDeleteApplication pApplication_ =
+  DeleteApplication' {application = pApplication_}
+
+-- | The name or ID of the application.
+deleteApplication_application :: Lens.Lens' DeleteApplication Prelude.Text
+deleteApplication_application = Lens.lens (\DeleteApplication' {application} -> application) (\s@DeleteApplication' {} a -> s {application = a} :: DeleteApplication)
+
+instance Core.AWSRequest DeleteApplication where
+  type
+    AWSResponse DeleteApplication =
+      DeleteApplicationResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DeleteApplicationResponse'
+            Prelude.<$> (x Data..?> "application")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeleteApplication where
+  hashWithSalt _salt DeleteApplication' {..} =
+    _salt `Prelude.hashWithSalt` application
+
+instance Prelude.NFData DeleteApplication where
+  rnf DeleteApplication' {..} = Prelude.rnf application
+
+instance Data.ToHeaders DeleteApplication where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath DeleteApplication where
+  toPath DeleteApplication' {..} =
+    Prelude.mconcat
+      ["/applications/", Data.toBS application]
+
+instance Data.ToQuery DeleteApplication where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteApplicationResponse' smart constructor.
+data DeleteApplicationResponse = DeleteApplicationResponse'
+  { -- | Information about the deleted application.
+    application :: Prelude.Maybe ApplicationSummary,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteApplicationResponse' 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:
+--
+-- 'application', 'deleteApplicationResponse_application' - Information about the deleted application.
+--
+-- 'httpStatus', 'deleteApplicationResponse_httpStatus' - The response's http status code.
+newDeleteApplicationResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteApplicationResponse
+newDeleteApplicationResponse pHttpStatus_ =
+  DeleteApplicationResponse'
+    { application =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about the deleted application.
+deleteApplicationResponse_application :: Lens.Lens' DeleteApplicationResponse (Prelude.Maybe ApplicationSummary)
+deleteApplicationResponse_application = Lens.lens (\DeleteApplicationResponse' {application} -> application) (\s@DeleteApplicationResponse' {} a -> s {application = a} :: DeleteApplicationResponse)
+
+-- | The response's http status code.
+deleteApplicationResponse_httpStatus :: Lens.Lens' DeleteApplicationResponse Prelude.Int
+deleteApplicationResponse_httpStatus = Lens.lens (\DeleteApplicationResponse' {httpStatus} -> httpStatus) (\s@DeleteApplicationResponse' {} a -> s {httpStatus = a} :: DeleteApplicationResponse)
+
+instance Prelude.NFData DeleteApplicationResponse where
+  rnf DeleteApplicationResponse' {..} =
+    Prelude.rnf application
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ServiceCatalogAppRegistry/DeleteAttributeGroup.hs b/gen/Amazonka/ServiceCatalogAppRegistry/DeleteAttributeGroup.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ServiceCatalogAppRegistry/DeleteAttributeGroup.hs
@@ -0,0 +1,167 @@
+{-# 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.ServiceCatalogAppRegistry.DeleteAttributeGroup
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes an attribute group, specified either by its attribute group ID
+-- or name.
+module Amazonka.ServiceCatalogAppRegistry.DeleteAttributeGroup
+  ( -- * Creating a Request
+    DeleteAttributeGroup (..),
+    newDeleteAttributeGroup,
+
+    -- * Request Lenses
+    deleteAttributeGroup_attributeGroup,
+
+    -- * Destructuring the Response
+    DeleteAttributeGroupResponse (..),
+    newDeleteAttributeGroupResponse,
+
+    -- * Response Lenses
+    deleteAttributeGroupResponse_attributeGroup,
+    deleteAttributeGroupResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.ServiceCatalogAppRegistry.Types
+
+-- | /See:/ 'newDeleteAttributeGroup' smart constructor.
+data DeleteAttributeGroup = DeleteAttributeGroup'
+  { -- | The name or ID of the attribute group that holds the attributes to
+    -- describe the application.
+    attributeGroup :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteAttributeGroup' 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:
+--
+-- 'attributeGroup', 'deleteAttributeGroup_attributeGroup' - The name or ID of the attribute group that holds the attributes to
+-- describe the application.
+newDeleteAttributeGroup ::
+  -- | 'attributeGroup'
+  Prelude.Text ->
+  DeleteAttributeGroup
+newDeleteAttributeGroup pAttributeGroup_ =
+  DeleteAttributeGroup'
+    { attributeGroup =
+        pAttributeGroup_
+    }
+
+-- | The name or ID of the attribute group that holds the attributes to
+-- describe the application.
+deleteAttributeGroup_attributeGroup :: Lens.Lens' DeleteAttributeGroup Prelude.Text
+deleteAttributeGroup_attributeGroup = Lens.lens (\DeleteAttributeGroup' {attributeGroup} -> attributeGroup) (\s@DeleteAttributeGroup' {} a -> s {attributeGroup = a} :: DeleteAttributeGroup)
+
+instance Core.AWSRequest DeleteAttributeGroup where
+  type
+    AWSResponse DeleteAttributeGroup =
+      DeleteAttributeGroupResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DeleteAttributeGroupResponse'
+            Prelude.<$> (x Data..?> "attributeGroup")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeleteAttributeGroup where
+  hashWithSalt _salt DeleteAttributeGroup' {..} =
+    _salt `Prelude.hashWithSalt` attributeGroup
+
+instance Prelude.NFData DeleteAttributeGroup where
+  rnf DeleteAttributeGroup' {..} =
+    Prelude.rnf attributeGroup
+
+instance Data.ToHeaders DeleteAttributeGroup where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath DeleteAttributeGroup where
+  toPath DeleteAttributeGroup' {..} =
+    Prelude.mconcat
+      ["/attribute-groups/", Data.toBS attributeGroup]
+
+instance Data.ToQuery DeleteAttributeGroup where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteAttributeGroupResponse' smart constructor.
+data DeleteAttributeGroupResponse = DeleteAttributeGroupResponse'
+  { -- | Information about the deleted attribute group.
+    attributeGroup :: Prelude.Maybe AttributeGroupSummary,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteAttributeGroupResponse' 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:
+--
+-- 'attributeGroup', 'deleteAttributeGroupResponse_attributeGroup' - Information about the deleted attribute group.
+--
+-- 'httpStatus', 'deleteAttributeGroupResponse_httpStatus' - The response's http status code.
+newDeleteAttributeGroupResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteAttributeGroupResponse
+newDeleteAttributeGroupResponse pHttpStatus_ =
+  DeleteAttributeGroupResponse'
+    { attributeGroup =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about the deleted attribute group.
+deleteAttributeGroupResponse_attributeGroup :: Lens.Lens' DeleteAttributeGroupResponse (Prelude.Maybe AttributeGroupSummary)
+deleteAttributeGroupResponse_attributeGroup = Lens.lens (\DeleteAttributeGroupResponse' {attributeGroup} -> attributeGroup) (\s@DeleteAttributeGroupResponse' {} a -> s {attributeGroup = a} :: DeleteAttributeGroupResponse)
+
+-- | The response's http status code.
+deleteAttributeGroupResponse_httpStatus :: Lens.Lens' DeleteAttributeGroupResponse Prelude.Int
+deleteAttributeGroupResponse_httpStatus = Lens.lens (\DeleteAttributeGroupResponse' {httpStatus} -> httpStatus) (\s@DeleteAttributeGroupResponse' {} a -> s {httpStatus = a} :: DeleteAttributeGroupResponse)
+
+instance Prelude.NFData DeleteAttributeGroupResponse where
+  rnf DeleteAttributeGroupResponse' {..} =
+    Prelude.rnf attributeGroup
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ServiceCatalogAppRegistry/DisassociateAttributeGroup.hs b/gen/Amazonka/ServiceCatalogAppRegistry/DisassociateAttributeGroup.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ServiceCatalogAppRegistry/DisassociateAttributeGroup.hs
@@ -0,0 +1,204 @@
+{-# 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.ServiceCatalogAppRegistry.DisassociateAttributeGroup
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Disassociates an attribute group from an application to remove the extra
+-- attributes contained in the attribute group from the application\'s
+-- metadata. This operation reverts @AssociateAttributeGroup@.
+module Amazonka.ServiceCatalogAppRegistry.DisassociateAttributeGroup
+  ( -- * Creating a Request
+    DisassociateAttributeGroup (..),
+    newDisassociateAttributeGroup,
+
+    -- * Request Lenses
+    disassociateAttributeGroup_application,
+    disassociateAttributeGroup_attributeGroup,
+
+    -- * Destructuring the Response
+    DisassociateAttributeGroupResponse (..),
+    newDisassociateAttributeGroupResponse,
+
+    -- * Response Lenses
+    disassociateAttributeGroupResponse_applicationArn,
+    disassociateAttributeGroupResponse_attributeGroupArn,
+    disassociateAttributeGroupResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.ServiceCatalogAppRegistry.Types
+
+-- | /See:/ 'newDisassociateAttributeGroup' smart constructor.
+data DisassociateAttributeGroup = DisassociateAttributeGroup'
+  { -- | The name or ID of the application.
+    application :: Prelude.Text,
+    -- | The name or ID of the attribute group that holds the attributes to
+    -- describe the application.
+    attributeGroup :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DisassociateAttributeGroup' 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:
+--
+-- 'application', 'disassociateAttributeGroup_application' - The name or ID of the application.
+--
+-- 'attributeGroup', 'disassociateAttributeGroup_attributeGroup' - The name or ID of the attribute group that holds the attributes to
+-- describe the application.
+newDisassociateAttributeGroup ::
+  -- | 'application'
+  Prelude.Text ->
+  -- | 'attributeGroup'
+  Prelude.Text ->
+  DisassociateAttributeGroup
+newDisassociateAttributeGroup
+  pApplication_
+  pAttributeGroup_ =
+    DisassociateAttributeGroup'
+      { application =
+          pApplication_,
+        attributeGroup = pAttributeGroup_
+      }
+
+-- | The name or ID of the application.
+disassociateAttributeGroup_application :: Lens.Lens' DisassociateAttributeGroup Prelude.Text
+disassociateAttributeGroup_application = Lens.lens (\DisassociateAttributeGroup' {application} -> application) (\s@DisassociateAttributeGroup' {} a -> s {application = a} :: DisassociateAttributeGroup)
+
+-- | The name or ID of the attribute group that holds the attributes to
+-- describe the application.
+disassociateAttributeGroup_attributeGroup :: Lens.Lens' DisassociateAttributeGroup Prelude.Text
+disassociateAttributeGroup_attributeGroup = Lens.lens (\DisassociateAttributeGroup' {attributeGroup} -> attributeGroup) (\s@DisassociateAttributeGroup' {} a -> s {attributeGroup = a} :: DisassociateAttributeGroup)
+
+instance Core.AWSRequest DisassociateAttributeGroup where
+  type
+    AWSResponse DisassociateAttributeGroup =
+      DisassociateAttributeGroupResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DisassociateAttributeGroupResponse'
+            Prelude.<$> (x Data..?> "applicationArn")
+            Prelude.<*> (x Data..?> "attributeGroupArn")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DisassociateAttributeGroup where
+  hashWithSalt _salt DisassociateAttributeGroup' {..} =
+    _salt
+      `Prelude.hashWithSalt` application
+      `Prelude.hashWithSalt` attributeGroup
+
+instance Prelude.NFData DisassociateAttributeGroup where
+  rnf DisassociateAttributeGroup' {..} =
+    Prelude.rnf application
+      `Prelude.seq` Prelude.rnf attributeGroup
+
+instance Data.ToHeaders DisassociateAttributeGroup where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath DisassociateAttributeGroup where
+  toPath DisassociateAttributeGroup' {..} =
+    Prelude.mconcat
+      [ "/applications/",
+        Data.toBS application,
+        "/attribute-groups/",
+        Data.toBS attributeGroup
+      ]
+
+instance Data.ToQuery DisassociateAttributeGroup where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDisassociateAttributeGroupResponse' smart constructor.
+data DisassociateAttributeGroupResponse = DisassociateAttributeGroupResponse'
+  { -- | The Amazon resource name (ARN) that specifies the application.
+    applicationArn :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon resource name (ARN) that specifies the attribute group.
+    attributeGroupArn :: 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 'DisassociateAttributeGroupResponse' 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:
+--
+-- 'applicationArn', 'disassociateAttributeGroupResponse_applicationArn' - The Amazon resource name (ARN) that specifies the application.
+--
+-- 'attributeGroupArn', 'disassociateAttributeGroupResponse_attributeGroupArn' - The Amazon resource name (ARN) that specifies the attribute group.
+--
+-- 'httpStatus', 'disassociateAttributeGroupResponse_httpStatus' - The response's http status code.
+newDisassociateAttributeGroupResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DisassociateAttributeGroupResponse
+newDisassociateAttributeGroupResponse pHttpStatus_ =
+  DisassociateAttributeGroupResponse'
+    { applicationArn =
+        Prelude.Nothing,
+      attributeGroupArn = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The Amazon resource name (ARN) that specifies the application.
+disassociateAttributeGroupResponse_applicationArn :: Lens.Lens' DisassociateAttributeGroupResponse (Prelude.Maybe Prelude.Text)
+disassociateAttributeGroupResponse_applicationArn = Lens.lens (\DisassociateAttributeGroupResponse' {applicationArn} -> applicationArn) (\s@DisassociateAttributeGroupResponse' {} a -> s {applicationArn = a} :: DisassociateAttributeGroupResponse)
+
+-- | The Amazon resource name (ARN) that specifies the attribute group.
+disassociateAttributeGroupResponse_attributeGroupArn :: Lens.Lens' DisassociateAttributeGroupResponse (Prelude.Maybe Prelude.Text)
+disassociateAttributeGroupResponse_attributeGroupArn = Lens.lens (\DisassociateAttributeGroupResponse' {attributeGroupArn} -> attributeGroupArn) (\s@DisassociateAttributeGroupResponse' {} a -> s {attributeGroupArn = a} :: DisassociateAttributeGroupResponse)
+
+-- | The response's http status code.
+disassociateAttributeGroupResponse_httpStatus :: Lens.Lens' DisassociateAttributeGroupResponse Prelude.Int
+disassociateAttributeGroupResponse_httpStatus = Lens.lens (\DisassociateAttributeGroupResponse' {httpStatus} -> httpStatus) (\s@DisassociateAttributeGroupResponse' {} a -> s {httpStatus = a} :: DisassociateAttributeGroupResponse)
+
+instance
+  Prelude.NFData
+    DisassociateAttributeGroupResponse
+  where
+  rnf DisassociateAttributeGroupResponse' {..} =
+    Prelude.rnf applicationArn
+      `Prelude.seq` Prelude.rnf attributeGroupArn
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ServiceCatalogAppRegistry/DisassociateResource.hs b/gen/Amazonka/ServiceCatalogAppRegistry/DisassociateResource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ServiceCatalogAppRegistry/DisassociateResource.hs
@@ -0,0 +1,213 @@
+{-# 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.ServiceCatalogAppRegistry.DisassociateResource
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Disassociates a resource from application. Both the resource and the
+-- application can be specified either by ID or name.
+module Amazonka.ServiceCatalogAppRegistry.DisassociateResource
+  ( -- * Creating a Request
+    DisassociateResource (..),
+    newDisassociateResource,
+
+    -- * Request Lenses
+    disassociateResource_application,
+    disassociateResource_resourceType,
+    disassociateResource_resource,
+
+    -- * Destructuring the Response
+    DisassociateResourceResponse (..),
+    newDisassociateResourceResponse,
+
+    -- * Response Lenses
+    disassociateResourceResponse_applicationArn,
+    disassociateResourceResponse_resourceArn,
+    disassociateResourceResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.ServiceCatalogAppRegistry.Types
+
+-- | /See:/ 'newDisassociateResource' smart constructor.
+data DisassociateResource = DisassociateResource'
+  { -- | The name or ID of the application.
+    application :: Prelude.Text,
+    -- | The type of the resource that is being disassociated.
+    resourceType :: ResourceType,
+    -- | The name or ID of the resource.
+    resource :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DisassociateResource' 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:
+--
+-- 'application', 'disassociateResource_application' - The name or ID of the application.
+--
+-- 'resourceType', 'disassociateResource_resourceType' - The type of the resource that is being disassociated.
+--
+-- 'resource', 'disassociateResource_resource' - The name or ID of the resource.
+newDisassociateResource ::
+  -- | 'application'
+  Prelude.Text ->
+  -- | 'resourceType'
+  ResourceType ->
+  -- | 'resource'
+  Prelude.Text ->
+  DisassociateResource
+newDisassociateResource
+  pApplication_
+  pResourceType_
+  pResource_ =
+    DisassociateResource'
+      { application = pApplication_,
+        resourceType = pResourceType_,
+        resource = pResource_
+      }
+
+-- | The name or ID of the application.
+disassociateResource_application :: Lens.Lens' DisassociateResource Prelude.Text
+disassociateResource_application = Lens.lens (\DisassociateResource' {application} -> application) (\s@DisassociateResource' {} a -> s {application = a} :: DisassociateResource)
+
+-- | The type of the resource that is being disassociated.
+disassociateResource_resourceType :: Lens.Lens' DisassociateResource ResourceType
+disassociateResource_resourceType = Lens.lens (\DisassociateResource' {resourceType} -> resourceType) (\s@DisassociateResource' {} a -> s {resourceType = a} :: DisassociateResource)
+
+-- | The name or ID of the resource.
+disassociateResource_resource :: Lens.Lens' DisassociateResource Prelude.Text
+disassociateResource_resource = Lens.lens (\DisassociateResource' {resource} -> resource) (\s@DisassociateResource' {} a -> s {resource = a} :: DisassociateResource)
+
+instance Core.AWSRequest DisassociateResource where
+  type
+    AWSResponse DisassociateResource =
+      DisassociateResourceResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DisassociateResourceResponse'
+            Prelude.<$> (x Data..?> "applicationArn")
+            Prelude.<*> (x Data..?> "resourceArn")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DisassociateResource where
+  hashWithSalt _salt DisassociateResource' {..} =
+    _salt
+      `Prelude.hashWithSalt` application
+      `Prelude.hashWithSalt` resourceType
+      `Prelude.hashWithSalt` resource
+
+instance Prelude.NFData DisassociateResource where
+  rnf DisassociateResource' {..} =
+    Prelude.rnf application
+      `Prelude.seq` Prelude.rnf resourceType
+      `Prelude.seq` Prelude.rnf resource
+
+instance Data.ToHeaders DisassociateResource where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath DisassociateResource where
+  toPath DisassociateResource' {..} =
+    Prelude.mconcat
+      [ "/applications/",
+        Data.toBS application,
+        "/resources/",
+        Data.toBS resourceType,
+        "/",
+        Data.toBS resource
+      ]
+
+instance Data.ToQuery DisassociateResource where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDisassociateResourceResponse' smart constructor.
+data DisassociateResourceResponse = DisassociateResourceResponse'
+  { -- | The Amazon resource name (ARN) that specifies the application.
+    applicationArn :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon resource name (ARN) that specifies the resource.
+    resourceArn :: 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 'DisassociateResourceResponse' 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:
+--
+-- 'applicationArn', 'disassociateResourceResponse_applicationArn' - The Amazon resource name (ARN) that specifies the application.
+--
+-- 'resourceArn', 'disassociateResourceResponse_resourceArn' - The Amazon resource name (ARN) that specifies the resource.
+--
+-- 'httpStatus', 'disassociateResourceResponse_httpStatus' - The response's http status code.
+newDisassociateResourceResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DisassociateResourceResponse
+newDisassociateResourceResponse pHttpStatus_ =
+  DisassociateResourceResponse'
+    { applicationArn =
+        Prelude.Nothing,
+      resourceArn = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The Amazon resource name (ARN) that specifies the application.
+disassociateResourceResponse_applicationArn :: Lens.Lens' DisassociateResourceResponse (Prelude.Maybe Prelude.Text)
+disassociateResourceResponse_applicationArn = Lens.lens (\DisassociateResourceResponse' {applicationArn} -> applicationArn) (\s@DisassociateResourceResponse' {} a -> s {applicationArn = a} :: DisassociateResourceResponse)
+
+-- | The Amazon resource name (ARN) that specifies the resource.
+disassociateResourceResponse_resourceArn :: Lens.Lens' DisassociateResourceResponse (Prelude.Maybe Prelude.Text)
+disassociateResourceResponse_resourceArn = Lens.lens (\DisassociateResourceResponse' {resourceArn} -> resourceArn) (\s@DisassociateResourceResponse' {} a -> s {resourceArn = a} :: DisassociateResourceResponse)
+
+-- | The response's http status code.
+disassociateResourceResponse_httpStatus :: Lens.Lens' DisassociateResourceResponse Prelude.Int
+disassociateResourceResponse_httpStatus = Lens.lens (\DisassociateResourceResponse' {httpStatus} -> httpStatus) (\s@DisassociateResourceResponse' {} a -> s {httpStatus = a} :: DisassociateResourceResponse)
+
+instance Prelude.NFData DisassociateResourceResponse where
+  rnf DisassociateResourceResponse' {..} =
+    Prelude.rnf applicationArn
+      `Prelude.seq` Prelude.rnf resourceArn
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ServiceCatalogAppRegistry/GetApplication.hs b/gen/Amazonka/ServiceCatalogAppRegistry/GetApplication.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ServiceCatalogAppRegistry/GetApplication.hs
@@ -0,0 +1,278 @@
+{-# 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.ServiceCatalogAppRegistry.GetApplication
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Retrieves metadata information about one of your applications. The
+-- application can be specified either by its unique ID or by its name
+-- (which is unique within one account in one region at a given point in
+-- time). Specify by ID in automated workflows if you want to make sure
+-- that the exact same application is returned or a
+-- @ResourceNotFoundException@ is thrown, avoiding the ABA addressing
+-- problem.
+module Amazonka.ServiceCatalogAppRegistry.GetApplication
+  ( -- * Creating a Request
+    GetApplication (..),
+    newGetApplication,
+
+    -- * Request Lenses
+    getApplication_application,
+
+    -- * Destructuring the Response
+    GetApplicationResponse (..),
+    newGetApplicationResponse,
+
+    -- * Response Lenses
+    getApplicationResponse_arn,
+    getApplicationResponse_associatedResourceCount,
+    getApplicationResponse_creationTime,
+    getApplicationResponse_description,
+    getApplicationResponse_id,
+    getApplicationResponse_integrations,
+    getApplicationResponse_lastUpdateTime,
+    getApplicationResponse_name,
+    getApplicationResponse_tags,
+    getApplicationResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.ServiceCatalogAppRegistry.Types
+
+-- | /See:/ 'newGetApplication' smart constructor.
+data GetApplication = GetApplication'
+  { -- | The name or ID of the application.
+    application :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetApplication' 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:
+--
+-- 'application', 'getApplication_application' - The name or ID of the application.
+newGetApplication ::
+  -- | 'application'
+  Prelude.Text ->
+  GetApplication
+newGetApplication pApplication_ =
+  GetApplication' {application = pApplication_}
+
+-- | The name or ID of the application.
+getApplication_application :: Lens.Lens' GetApplication Prelude.Text
+getApplication_application = Lens.lens (\GetApplication' {application} -> application) (\s@GetApplication' {} a -> s {application = a} :: GetApplication)
+
+instance Core.AWSRequest GetApplication where
+  type
+    AWSResponse GetApplication =
+      GetApplicationResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetApplicationResponse'
+            Prelude.<$> (x Data..?> "arn")
+            Prelude.<*> (x Data..?> "associatedResourceCount")
+            Prelude.<*> (x Data..?> "creationTime")
+            Prelude.<*> (x Data..?> "description")
+            Prelude.<*> (x Data..?> "id")
+            Prelude.<*> (x Data..?> "integrations")
+            Prelude.<*> (x Data..?> "lastUpdateTime")
+            Prelude.<*> (x Data..?> "name")
+            Prelude.<*> (x Data..?> "tags" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetApplication where
+  hashWithSalt _salt GetApplication' {..} =
+    _salt `Prelude.hashWithSalt` application
+
+instance Prelude.NFData GetApplication where
+  rnf GetApplication' {..} = Prelude.rnf application
+
+instance Data.ToHeaders GetApplication where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath GetApplication where
+  toPath GetApplication' {..} =
+    Prelude.mconcat
+      ["/applications/", Data.toBS application]
+
+instance Data.ToQuery GetApplication where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetApplicationResponse' smart constructor.
+data GetApplicationResponse = GetApplicationResponse'
+  { -- | The Amazon resource name (ARN) that specifies the application across
+    -- services.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | The number of top-level resources that were registered as part of this
+    -- application.
+    associatedResourceCount :: Prelude.Maybe Prelude.Natural,
+    -- | The ISO-8601 formatted timestamp of the moment when the application was
+    -- created.
+    creationTime :: Prelude.Maybe Data.ISO8601,
+    -- | The description of the application.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The identifier of the application.
+    id :: Prelude.Maybe Prelude.Text,
+    -- | The information about the integration of the application with other
+    -- services, such as Resource Groups.
+    integrations :: Prelude.Maybe Integrations,
+    -- | The ISO-8601 formatted timestamp of the moment when the application was
+    -- last updated.
+    lastUpdateTime :: Prelude.Maybe Data.ISO8601,
+    -- | The name of the application. The name must be unique in the region in
+    -- which you are creating the application.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | Key-value pairs associated with the application.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetApplicationResponse' 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:
+--
+-- 'arn', 'getApplicationResponse_arn' - The Amazon resource name (ARN) that specifies the application across
+-- services.
+--
+-- 'associatedResourceCount', 'getApplicationResponse_associatedResourceCount' - The number of top-level resources that were registered as part of this
+-- application.
+--
+-- 'creationTime', 'getApplicationResponse_creationTime' - The ISO-8601 formatted timestamp of the moment when the application was
+-- created.
+--
+-- 'description', 'getApplicationResponse_description' - The description of the application.
+--
+-- 'id', 'getApplicationResponse_id' - The identifier of the application.
+--
+-- 'integrations', 'getApplicationResponse_integrations' - The information about the integration of the application with other
+-- services, such as Resource Groups.
+--
+-- 'lastUpdateTime', 'getApplicationResponse_lastUpdateTime' - The ISO-8601 formatted timestamp of the moment when the application was
+-- last updated.
+--
+-- 'name', 'getApplicationResponse_name' - The name of the application. The name must be unique in the region in
+-- which you are creating the application.
+--
+-- 'tags', 'getApplicationResponse_tags' - Key-value pairs associated with the application.
+--
+-- 'httpStatus', 'getApplicationResponse_httpStatus' - The response's http status code.
+newGetApplicationResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetApplicationResponse
+newGetApplicationResponse pHttpStatus_ =
+  GetApplicationResponse'
+    { arn = Prelude.Nothing,
+      associatedResourceCount = Prelude.Nothing,
+      creationTime = Prelude.Nothing,
+      description = Prelude.Nothing,
+      id = Prelude.Nothing,
+      integrations = Prelude.Nothing,
+      lastUpdateTime = Prelude.Nothing,
+      name = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The Amazon resource name (ARN) that specifies the application across
+-- services.
+getApplicationResponse_arn :: Lens.Lens' GetApplicationResponse (Prelude.Maybe Prelude.Text)
+getApplicationResponse_arn = Lens.lens (\GetApplicationResponse' {arn} -> arn) (\s@GetApplicationResponse' {} a -> s {arn = a} :: GetApplicationResponse)
+
+-- | The number of top-level resources that were registered as part of this
+-- application.
+getApplicationResponse_associatedResourceCount :: Lens.Lens' GetApplicationResponse (Prelude.Maybe Prelude.Natural)
+getApplicationResponse_associatedResourceCount = Lens.lens (\GetApplicationResponse' {associatedResourceCount} -> associatedResourceCount) (\s@GetApplicationResponse' {} a -> s {associatedResourceCount = a} :: GetApplicationResponse)
+
+-- | The ISO-8601 formatted timestamp of the moment when the application was
+-- created.
+getApplicationResponse_creationTime :: Lens.Lens' GetApplicationResponse (Prelude.Maybe Prelude.UTCTime)
+getApplicationResponse_creationTime = Lens.lens (\GetApplicationResponse' {creationTime} -> creationTime) (\s@GetApplicationResponse' {} a -> s {creationTime = a} :: GetApplicationResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The description of the application.
+getApplicationResponse_description :: Lens.Lens' GetApplicationResponse (Prelude.Maybe Prelude.Text)
+getApplicationResponse_description = Lens.lens (\GetApplicationResponse' {description} -> description) (\s@GetApplicationResponse' {} a -> s {description = a} :: GetApplicationResponse)
+
+-- | The identifier of the application.
+getApplicationResponse_id :: Lens.Lens' GetApplicationResponse (Prelude.Maybe Prelude.Text)
+getApplicationResponse_id = Lens.lens (\GetApplicationResponse' {id} -> id) (\s@GetApplicationResponse' {} a -> s {id = a} :: GetApplicationResponse)
+
+-- | The information about the integration of the application with other
+-- services, such as Resource Groups.
+getApplicationResponse_integrations :: Lens.Lens' GetApplicationResponse (Prelude.Maybe Integrations)
+getApplicationResponse_integrations = Lens.lens (\GetApplicationResponse' {integrations} -> integrations) (\s@GetApplicationResponse' {} a -> s {integrations = a} :: GetApplicationResponse)
+
+-- | The ISO-8601 formatted timestamp of the moment when the application was
+-- last updated.
+getApplicationResponse_lastUpdateTime :: Lens.Lens' GetApplicationResponse (Prelude.Maybe Prelude.UTCTime)
+getApplicationResponse_lastUpdateTime = Lens.lens (\GetApplicationResponse' {lastUpdateTime} -> lastUpdateTime) (\s@GetApplicationResponse' {} a -> s {lastUpdateTime = a} :: GetApplicationResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The name of the application. The name must be unique in the region in
+-- which you are creating the application.
+getApplicationResponse_name :: Lens.Lens' GetApplicationResponse (Prelude.Maybe Prelude.Text)
+getApplicationResponse_name = Lens.lens (\GetApplicationResponse' {name} -> name) (\s@GetApplicationResponse' {} a -> s {name = a} :: GetApplicationResponse)
+
+-- | Key-value pairs associated with the application.
+getApplicationResponse_tags :: Lens.Lens' GetApplicationResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+getApplicationResponse_tags = Lens.lens (\GetApplicationResponse' {tags} -> tags) (\s@GetApplicationResponse' {} a -> s {tags = a} :: GetApplicationResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+getApplicationResponse_httpStatus :: Lens.Lens' GetApplicationResponse Prelude.Int
+getApplicationResponse_httpStatus = Lens.lens (\GetApplicationResponse' {httpStatus} -> httpStatus) (\s@GetApplicationResponse' {} a -> s {httpStatus = a} :: GetApplicationResponse)
+
+instance Prelude.NFData GetApplicationResponse where
+  rnf GetApplicationResponse' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf associatedResourceCount
+      `Prelude.seq` Prelude.rnf creationTime
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf integrations
+      `Prelude.seq` Prelude.rnf lastUpdateTime
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ServiceCatalogAppRegistry/GetAssociatedResource.hs b/gen/Amazonka/ServiceCatalogAppRegistry/GetAssociatedResource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ServiceCatalogAppRegistry/GetAssociatedResource.hs
@@ -0,0 +1,200 @@
+{-# 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.ServiceCatalogAppRegistry.GetAssociatedResource
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Gets the resource associated with the application.
+module Amazonka.ServiceCatalogAppRegistry.GetAssociatedResource
+  ( -- * Creating a Request
+    GetAssociatedResource (..),
+    newGetAssociatedResource,
+
+    -- * Request Lenses
+    getAssociatedResource_application,
+    getAssociatedResource_resourceType,
+    getAssociatedResource_resource,
+
+    -- * Destructuring the Response
+    GetAssociatedResourceResponse (..),
+    newGetAssociatedResourceResponse,
+
+    -- * Response Lenses
+    getAssociatedResourceResponse_resource,
+    getAssociatedResourceResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.ServiceCatalogAppRegistry.Types
+
+-- | /See:/ 'newGetAssociatedResource' smart constructor.
+data GetAssociatedResource = GetAssociatedResource'
+  { -- | The name or ID of the application.
+    application :: Prelude.Text,
+    -- | The type of resource associated with the application.
+    resourceType :: ResourceType,
+    -- | The name or ID of the resource associated with the application.
+    resource :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetAssociatedResource' 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:
+--
+-- 'application', 'getAssociatedResource_application' - The name or ID of the application.
+--
+-- 'resourceType', 'getAssociatedResource_resourceType' - The type of resource associated with the application.
+--
+-- 'resource', 'getAssociatedResource_resource' - The name or ID of the resource associated with the application.
+newGetAssociatedResource ::
+  -- | 'application'
+  Prelude.Text ->
+  -- | 'resourceType'
+  ResourceType ->
+  -- | 'resource'
+  Prelude.Text ->
+  GetAssociatedResource
+newGetAssociatedResource
+  pApplication_
+  pResourceType_
+  pResource_ =
+    GetAssociatedResource'
+      { application = pApplication_,
+        resourceType = pResourceType_,
+        resource = pResource_
+      }
+
+-- | The name or ID of the application.
+getAssociatedResource_application :: Lens.Lens' GetAssociatedResource Prelude.Text
+getAssociatedResource_application = Lens.lens (\GetAssociatedResource' {application} -> application) (\s@GetAssociatedResource' {} a -> s {application = a} :: GetAssociatedResource)
+
+-- | The type of resource associated with the application.
+getAssociatedResource_resourceType :: Lens.Lens' GetAssociatedResource ResourceType
+getAssociatedResource_resourceType = Lens.lens (\GetAssociatedResource' {resourceType} -> resourceType) (\s@GetAssociatedResource' {} a -> s {resourceType = a} :: GetAssociatedResource)
+
+-- | The name or ID of the resource associated with the application.
+getAssociatedResource_resource :: Lens.Lens' GetAssociatedResource Prelude.Text
+getAssociatedResource_resource = Lens.lens (\GetAssociatedResource' {resource} -> resource) (\s@GetAssociatedResource' {} a -> s {resource = a} :: GetAssociatedResource)
+
+instance Core.AWSRequest GetAssociatedResource where
+  type
+    AWSResponse GetAssociatedResource =
+      GetAssociatedResourceResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetAssociatedResourceResponse'
+            Prelude.<$> (x Data..?> "resource")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetAssociatedResource where
+  hashWithSalt _salt GetAssociatedResource' {..} =
+    _salt
+      `Prelude.hashWithSalt` application
+      `Prelude.hashWithSalt` resourceType
+      `Prelude.hashWithSalt` resource
+
+instance Prelude.NFData GetAssociatedResource where
+  rnf GetAssociatedResource' {..} =
+    Prelude.rnf application
+      `Prelude.seq` Prelude.rnf resourceType
+      `Prelude.seq` Prelude.rnf resource
+
+instance Data.ToHeaders GetAssociatedResource where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath GetAssociatedResource where
+  toPath GetAssociatedResource' {..} =
+    Prelude.mconcat
+      [ "/applications/",
+        Data.toBS application,
+        "/resources/",
+        Data.toBS resourceType,
+        "/",
+        Data.toBS resource
+      ]
+
+instance Data.ToQuery GetAssociatedResource where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetAssociatedResourceResponse' smart constructor.
+data GetAssociatedResourceResponse = GetAssociatedResourceResponse'
+  { -- | The resource associated with the application.
+    resource :: Prelude.Maybe Resource,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetAssociatedResourceResponse' 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:
+--
+-- 'resource', 'getAssociatedResourceResponse_resource' - The resource associated with the application.
+--
+-- 'httpStatus', 'getAssociatedResourceResponse_httpStatus' - The response's http status code.
+newGetAssociatedResourceResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetAssociatedResourceResponse
+newGetAssociatedResourceResponse pHttpStatus_ =
+  GetAssociatedResourceResponse'
+    { resource =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The resource associated with the application.
+getAssociatedResourceResponse_resource :: Lens.Lens' GetAssociatedResourceResponse (Prelude.Maybe Resource)
+getAssociatedResourceResponse_resource = Lens.lens (\GetAssociatedResourceResponse' {resource} -> resource) (\s@GetAssociatedResourceResponse' {} a -> s {resource = a} :: GetAssociatedResourceResponse)
+
+-- | The response's http status code.
+getAssociatedResourceResponse_httpStatus :: Lens.Lens' GetAssociatedResourceResponse Prelude.Int
+getAssociatedResourceResponse_httpStatus = Lens.lens (\GetAssociatedResourceResponse' {httpStatus} -> httpStatus) (\s@GetAssociatedResourceResponse' {} a -> s {httpStatus = a} :: GetAssociatedResourceResponse)
+
+instance Prelude.NFData GetAssociatedResourceResponse where
+  rnf GetAssociatedResourceResponse' {..} =
+    Prelude.rnf resource
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ServiceCatalogAppRegistry/GetAttributeGroup.hs b/gen/Amazonka/ServiceCatalogAppRegistry/GetAttributeGroup.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ServiceCatalogAppRegistry/GetAttributeGroup.hs
@@ -0,0 +1,265 @@
+{-# 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.ServiceCatalogAppRegistry.GetAttributeGroup
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Retrieves an attribute group, either by its name or its ID. The
+-- attribute group can be specified either by its unique ID or by its name.
+module Amazonka.ServiceCatalogAppRegistry.GetAttributeGroup
+  ( -- * Creating a Request
+    GetAttributeGroup (..),
+    newGetAttributeGroup,
+
+    -- * Request Lenses
+    getAttributeGroup_attributeGroup,
+
+    -- * Destructuring the Response
+    GetAttributeGroupResponse (..),
+    newGetAttributeGroupResponse,
+
+    -- * Response Lenses
+    getAttributeGroupResponse_arn,
+    getAttributeGroupResponse_attributes,
+    getAttributeGroupResponse_creationTime,
+    getAttributeGroupResponse_description,
+    getAttributeGroupResponse_id,
+    getAttributeGroupResponse_lastUpdateTime,
+    getAttributeGroupResponse_name,
+    getAttributeGroupResponse_tags,
+    getAttributeGroupResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.ServiceCatalogAppRegistry.Types
+
+-- | /See:/ 'newGetAttributeGroup' smart constructor.
+data GetAttributeGroup = GetAttributeGroup'
+  { -- | The name or ID of the attribute group that holds the attributes to
+    -- describe the application.
+    attributeGroup :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetAttributeGroup' 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:
+--
+-- 'attributeGroup', 'getAttributeGroup_attributeGroup' - The name or ID of the attribute group that holds the attributes to
+-- describe the application.
+newGetAttributeGroup ::
+  -- | 'attributeGroup'
+  Prelude.Text ->
+  GetAttributeGroup
+newGetAttributeGroup pAttributeGroup_ =
+  GetAttributeGroup'
+    { attributeGroup =
+        pAttributeGroup_
+    }
+
+-- | The name or ID of the attribute group that holds the attributes to
+-- describe the application.
+getAttributeGroup_attributeGroup :: Lens.Lens' GetAttributeGroup Prelude.Text
+getAttributeGroup_attributeGroup = Lens.lens (\GetAttributeGroup' {attributeGroup} -> attributeGroup) (\s@GetAttributeGroup' {} a -> s {attributeGroup = a} :: GetAttributeGroup)
+
+instance Core.AWSRequest GetAttributeGroup where
+  type
+    AWSResponse GetAttributeGroup =
+      GetAttributeGroupResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetAttributeGroupResponse'
+            Prelude.<$> (x Data..?> "arn")
+            Prelude.<*> (x Data..?> "attributes")
+            Prelude.<*> (x Data..?> "creationTime")
+            Prelude.<*> (x Data..?> "description")
+            Prelude.<*> (x Data..?> "id")
+            Prelude.<*> (x Data..?> "lastUpdateTime")
+            Prelude.<*> (x Data..?> "name")
+            Prelude.<*> (x Data..?> "tags" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetAttributeGroup where
+  hashWithSalt _salt GetAttributeGroup' {..} =
+    _salt `Prelude.hashWithSalt` attributeGroup
+
+instance Prelude.NFData GetAttributeGroup where
+  rnf GetAttributeGroup' {..} =
+    Prelude.rnf attributeGroup
+
+instance Data.ToHeaders GetAttributeGroup where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath GetAttributeGroup where
+  toPath GetAttributeGroup' {..} =
+    Prelude.mconcat
+      ["/attribute-groups/", Data.toBS attributeGroup]
+
+instance Data.ToQuery GetAttributeGroup where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetAttributeGroupResponse' smart constructor.
+data GetAttributeGroupResponse = GetAttributeGroupResponse'
+  { -- | The Amazon resource name (ARN) that specifies the attribute group across
+    -- services.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | A JSON string in the form of nested key-value pairs that represent the
+    -- attributes in the group and describes an application and its components.
+    attributes :: Prelude.Maybe Prelude.Text,
+    -- | The ISO-8601 formatted timestamp of the moment the attribute group was
+    -- created.
+    creationTime :: Prelude.Maybe Data.ISO8601,
+    -- | The description of the attribute group that the user provides.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The identifier of the attribute group.
+    id :: Prelude.Maybe Prelude.Text,
+    -- | The ISO-8601 formatted timestamp of the moment the attribute group was
+    -- last updated. This time is the same as the creationTime for a newly
+    -- created attribute group.
+    lastUpdateTime :: Prelude.Maybe Data.ISO8601,
+    -- | The name of the attribute group.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | Key-value pairs associated with the attribute group.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetAttributeGroupResponse' 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:
+--
+-- 'arn', 'getAttributeGroupResponse_arn' - The Amazon resource name (ARN) that specifies the attribute group across
+-- services.
+--
+-- 'attributes', 'getAttributeGroupResponse_attributes' - A JSON string in the form of nested key-value pairs that represent the
+-- attributes in the group and describes an application and its components.
+--
+-- 'creationTime', 'getAttributeGroupResponse_creationTime' - The ISO-8601 formatted timestamp of the moment the attribute group was
+-- created.
+--
+-- 'description', 'getAttributeGroupResponse_description' - The description of the attribute group that the user provides.
+--
+-- 'id', 'getAttributeGroupResponse_id' - The identifier of the attribute group.
+--
+-- 'lastUpdateTime', 'getAttributeGroupResponse_lastUpdateTime' - The ISO-8601 formatted timestamp of the moment the attribute group was
+-- last updated. This time is the same as the creationTime for a newly
+-- created attribute group.
+--
+-- 'name', 'getAttributeGroupResponse_name' - The name of the attribute group.
+--
+-- 'tags', 'getAttributeGroupResponse_tags' - Key-value pairs associated with the attribute group.
+--
+-- 'httpStatus', 'getAttributeGroupResponse_httpStatus' - The response's http status code.
+newGetAttributeGroupResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetAttributeGroupResponse
+newGetAttributeGroupResponse pHttpStatus_ =
+  GetAttributeGroupResponse'
+    { arn = Prelude.Nothing,
+      attributes = Prelude.Nothing,
+      creationTime = Prelude.Nothing,
+      description = Prelude.Nothing,
+      id = Prelude.Nothing,
+      lastUpdateTime = Prelude.Nothing,
+      name = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The Amazon resource name (ARN) that specifies the attribute group across
+-- services.
+getAttributeGroupResponse_arn :: Lens.Lens' GetAttributeGroupResponse (Prelude.Maybe Prelude.Text)
+getAttributeGroupResponse_arn = Lens.lens (\GetAttributeGroupResponse' {arn} -> arn) (\s@GetAttributeGroupResponse' {} a -> s {arn = a} :: GetAttributeGroupResponse)
+
+-- | A JSON string in the form of nested key-value pairs that represent the
+-- attributes in the group and describes an application and its components.
+getAttributeGroupResponse_attributes :: Lens.Lens' GetAttributeGroupResponse (Prelude.Maybe Prelude.Text)
+getAttributeGroupResponse_attributes = Lens.lens (\GetAttributeGroupResponse' {attributes} -> attributes) (\s@GetAttributeGroupResponse' {} a -> s {attributes = a} :: GetAttributeGroupResponse)
+
+-- | The ISO-8601 formatted timestamp of the moment the attribute group was
+-- created.
+getAttributeGroupResponse_creationTime :: Lens.Lens' GetAttributeGroupResponse (Prelude.Maybe Prelude.UTCTime)
+getAttributeGroupResponse_creationTime = Lens.lens (\GetAttributeGroupResponse' {creationTime} -> creationTime) (\s@GetAttributeGroupResponse' {} a -> s {creationTime = a} :: GetAttributeGroupResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The description of the attribute group that the user provides.
+getAttributeGroupResponse_description :: Lens.Lens' GetAttributeGroupResponse (Prelude.Maybe Prelude.Text)
+getAttributeGroupResponse_description = Lens.lens (\GetAttributeGroupResponse' {description} -> description) (\s@GetAttributeGroupResponse' {} a -> s {description = a} :: GetAttributeGroupResponse)
+
+-- | The identifier of the attribute group.
+getAttributeGroupResponse_id :: Lens.Lens' GetAttributeGroupResponse (Prelude.Maybe Prelude.Text)
+getAttributeGroupResponse_id = Lens.lens (\GetAttributeGroupResponse' {id} -> id) (\s@GetAttributeGroupResponse' {} a -> s {id = a} :: GetAttributeGroupResponse)
+
+-- | The ISO-8601 formatted timestamp of the moment the attribute group was
+-- last updated. This time is the same as the creationTime for a newly
+-- created attribute group.
+getAttributeGroupResponse_lastUpdateTime :: Lens.Lens' GetAttributeGroupResponse (Prelude.Maybe Prelude.UTCTime)
+getAttributeGroupResponse_lastUpdateTime = Lens.lens (\GetAttributeGroupResponse' {lastUpdateTime} -> lastUpdateTime) (\s@GetAttributeGroupResponse' {} a -> s {lastUpdateTime = a} :: GetAttributeGroupResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The name of the attribute group.
+getAttributeGroupResponse_name :: Lens.Lens' GetAttributeGroupResponse (Prelude.Maybe Prelude.Text)
+getAttributeGroupResponse_name = Lens.lens (\GetAttributeGroupResponse' {name} -> name) (\s@GetAttributeGroupResponse' {} a -> s {name = a} :: GetAttributeGroupResponse)
+
+-- | Key-value pairs associated with the attribute group.
+getAttributeGroupResponse_tags :: Lens.Lens' GetAttributeGroupResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+getAttributeGroupResponse_tags = Lens.lens (\GetAttributeGroupResponse' {tags} -> tags) (\s@GetAttributeGroupResponse' {} a -> s {tags = a} :: GetAttributeGroupResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+getAttributeGroupResponse_httpStatus :: Lens.Lens' GetAttributeGroupResponse Prelude.Int
+getAttributeGroupResponse_httpStatus = Lens.lens (\GetAttributeGroupResponse' {httpStatus} -> httpStatus) (\s@GetAttributeGroupResponse' {} a -> s {httpStatus = a} :: GetAttributeGroupResponse)
+
+instance Prelude.NFData GetAttributeGroupResponse where
+  rnf GetAttributeGroupResponse' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf attributes
+      `Prelude.seq` Prelude.rnf creationTime
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf lastUpdateTime
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ServiceCatalogAppRegistry/GetConfiguration.hs b/gen/Amazonka/ServiceCatalogAppRegistry/GetConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ServiceCatalogAppRegistry/GetConfiguration.hs
@@ -0,0 +1,141 @@
+{-# 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.ServiceCatalogAppRegistry.GetConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Retrieves a @TagKey@ configuration from an account.
+module Amazonka.ServiceCatalogAppRegistry.GetConfiguration
+  ( -- * Creating a Request
+    GetConfiguration (..),
+    newGetConfiguration,
+
+    -- * Destructuring the Response
+    GetConfigurationResponse (..),
+    newGetConfigurationResponse,
+
+    -- * Response Lenses
+    getConfigurationResponse_configuration,
+    getConfigurationResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.ServiceCatalogAppRegistry.Types
+
+-- | /See:/ 'newGetConfiguration' smart constructor.
+data GetConfiguration = GetConfiguration'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetConfiguration' 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.
+newGetConfiguration ::
+  GetConfiguration
+newGetConfiguration = GetConfiguration'
+
+instance Core.AWSRequest GetConfiguration where
+  type
+    AWSResponse GetConfiguration =
+      GetConfigurationResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetConfigurationResponse'
+            Prelude.<$> (x Data..?> "configuration")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetConfiguration where
+  hashWithSalt _salt _ =
+    _salt `Prelude.hashWithSalt` ()
+
+instance Prelude.NFData GetConfiguration where
+  rnf _ = ()
+
+instance Data.ToHeaders GetConfiguration where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath GetConfiguration where
+  toPath = Prelude.const "/configuration"
+
+instance Data.ToQuery GetConfiguration where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetConfigurationResponse' smart constructor.
+data GetConfigurationResponse = GetConfigurationResponse'
+  { -- | Retrieves @TagKey@ configuration from an account.
+    configuration :: Prelude.Maybe AppRegistryConfiguration,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetConfigurationResponse' 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:
+--
+-- 'configuration', 'getConfigurationResponse_configuration' - Retrieves @TagKey@ configuration from an account.
+--
+-- 'httpStatus', 'getConfigurationResponse_httpStatus' - The response's http status code.
+newGetConfigurationResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetConfigurationResponse
+newGetConfigurationResponse pHttpStatus_ =
+  GetConfigurationResponse'
+    { configuration =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Retrieves @TagKey@ configuration from an account.
+getConfigurationResponse_configuration :: Lens.Lens' GetConfigurationResponse (Prelude.Maybe AppRegistryConfiguration)
+getConfigurationResponse_configuration = Lens.lens (\GetConfigurationResponse' {configuration} -> configuration) (\s@GetConfigurationResponse' {} a -> s {configuration = a} :: GetConfigurationResponse)
+
+-- | The response's http status code.
+getConfigurationResponse_httpStatus :: Lens.Lens' GetConfigurationResponse Prelude.Int
+getConfigurationResponse_httpStatus = Lens.lens (\GetConfigurationResponse' {httpStatus} -> httpStatus) (\s@GetConfigurationResponse' {} a -> s {httpStatus = a} :: GetConfigurationResponse)
+
+instance Prelude.NFData GetConfigurationResponse where
+  rnf GetConfigurationResponse' {..} =
+    Prelude.rnf configuration
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ServiceCatalogAppRegistry/Lens.hs b/gen/Amazonka/ServiceCatalogAppRegistry/Lens.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ServiceCatalogAppRegistry/Lens.hs
@@ -0,0 +1,300 @@
+{-# 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.ServiceCatalogAppRegistry.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.ServiceCatalogAppRegistry.Lens
+  ( -- * Operations
+
+    -- ** AssociateAttributeGroup
+    associateAttributeGroup_application,
+    associateAttributeGroup_attributeGroup,
+    associateAttributeGroupResponse_applicationArn,
+    associateAttributeGroupResponse_attributeGroupArn,
+    associateAttributeGroupResponse_httpStatus,
+
+    -- ** AssociateResource
+    associateResource_application,
+    associateResource_resourceType,
+    associateResource_resource,
+    associateResourceResponse_applicationArn,
+    associateResourceResponse_resourceArn,
+    associateResourceResponse_httpStatus,
+
+    -- ** CreateApplication
+    createApplication_description,
+    createApplication_tags,
+    createApplication_name,
+    createApplication_clientToken,
+    createApplicationResponse_application,
+    createApplicationResponse_httpStatus,
+
+    -- ** CreateAttributeGroup
+    createAttributeGroup_description,
+    createAttributeGroup_tags,
+    createAttributeGroup_name,
+    createAttributeGroup_attributes,
+    createAttributeGroup_clientToken,
+    createAttributeGroupResponse_attributeGroup,
+    createAttributeGroupResponse_httpStatus,
+
+    -- ** DeleteApplication
+    deleteApplication_application,
+    deleteApplicationResponse_application,
+    deleteApplicationResponse_httpStatus,
+
+    -- ** DeleteAttributeGroup
+    deleteAttributeGroup_attributeGroup,
+    deleteAttributeGroupResponse_attributeGroup,
+    deleteAttributeGroupResponse_httpStatus,
+
+    -- ** DisassociateAttributeGroup
+    disassociateAttributeGroup_application,
+    disassociateAttributeGroup_attributeGroup,
+    disassociateAttributeGroupResponse_applicationArn,
+    disassociateAttributeGroupResponse_attributeGroupArn,
+    disassociateAttributeGroupResponse_httpStatus,
+
+    -- ** DisassociateResource
+    disassociateResource_application,
+    disassociateResource_resourceType,
+    disassociateResource_resource,
+    disassociateResourceResponse_applicationArn,
+    disassociateResourceResponse_resourceArn,
+    disassociateResourceResponse_httpStatus,
+
+    -- ** GetApplication
+    getApplication_application,
+    getApplicationResponse_arn,
+    getApplicationResponse_associatedResourceCount,
+    getApplicationResponse_creationTime,
+    getApplicationResponse_description,
+    getApplicationResponse_id,
+    getApplicationResponse_integrations,
+    getApplicationResponse_lastUpdateTime,
+    getApplicationResponse_name,
+    getApplicationResponse_tags,
+    getApplicationResponse_httpStatus,
+
+    -- ** GetAssociatedResource
+    getAssociatedResource_application,
+    getAssociatedResource_resourceType,
+    getAssociatedResource_resource,
+    getAssociatedResourceResponse_resource,
+    getAssociatedResourceResponse_httpStatus,
+
+    -- ** GetAttributeGroup
+    getAttributeGroup_attributeGroup,
+    getAttributeGroupResponse_arn,
+    getAttributeGroupResponse_attributes,
+    getAttributeGroupResponse_creationTime,
+    getAttributeGroupResponse_description,
+    getAttributeGroupResponse_id,
+    getAttributeGroupResponse_lastUpdateTime,
+    getAttributeGroupResponse_name,
+    getAttributeGroupResponse_tags,
+    getAttributeGroupResponse_httpStatus,
+
+    -- ** GetConfiguration
+    getConfigurationResponse_configuration,
+    getConfigurationResponse_httpStatus,
+
+    -- ** ListApplications
+    listApplications_maxResults,
+    listApplications_nextToken,
+    listApplicationsResponse_applications,
+    listApplicationsResponse_nextToken,
+    listApplicationsResponse_httpStatus,
+
+    -- ** ListAssociatedAttributeGroups
+    listAssociatedAttributeGroups_maxResults,
+    listAssociatedAttributeGroups_nextToken,
+    listAssociatedAttributeGroups_application,
+    listAssociatedAttributeGroupsResponse_attributeGroups,
+    listAssociatedAttributeGroupsResponse_nextToken,
+    listAssociatedAttributeGroupsResponse_httpStatus,
+
+    -- ** ListAssociatedResources
+    listAssociatedResources_maxResults,
+    listAssociatedResources_nextToken,
+    listAssociatedResources_application,
+    listAssociatedResourcesResponse_nextToken,
+    listAssociatedResourcesResponse_resources,
+    listAssociatedResourcesResponse_httpStatus,
+
+    -- ** ListAttributeGroups
+    listAttributeGroups_maxResults,
+    listAttributeGroups_nextToken,
+    listAttributeGroupsResponse_attributeGroups,
+    listAttributeGroupsResponse_nextToken,
+    listAttributeGroupsResponse_httpStatus,
+
+    -- ** ListAttributeGroupsForApplication
+    listAttributeGroupsForApplication_maxResults,
+    listAttributeGroupsForApplication_nextToken,
+    listAttributeGroupsForApplication_application,
+    listAttributeGroupsForApplicationResponse_attributeGroupsDetails,
+    listAttributeGroupsForApplicationResponse_nextToken,
+    listAttributeGroupsForApplicationResponse_httpStatus,
+
+    -- ** ListTagsForResource
+    listTagsForResource_resourceArn,
+    listTagsForResourceResponse_tags,
+    listTagsForResourceResponse_httpStatus,
+
+    -- ** PutConfiguration
+    putConfiguration_configuration,
+
+    -- ** SyncResource
+    syncResource_resourceType,
+    syncResource_resource,
+    syncResourceResponse_actionTaken,
+    syncResourceResponse_applicationArn,
+    syncResourceResponse_resourceArn,
+    syncResourceResponse_httpStatus,
+
+    -- ** TagResource
+    tagResource_resourceArn,
+    tagResource_tags,
+    tagResourceResponse_httpStatus,
+
+    -- ** UntagResource
+    untagResource_resourceArn,
+    untagResource_tagKeys,
+    untagResourceResponse_httpStatus,
+
+    -- ** UpdateApplication
+    updateApplication_description,
+    updateApplication_name,
+    updateApplication_application,
+    updateApplicationResponse_application,
+    updateApplicationResponse_httpStatus,
+
+    -- ** UpdateAttributeGroup
+    updateAttributeGroup_attributes,
+    updateAttributeGroup_description,
+    updateAttributeGroup_name,
+    updateAttributeGroup_attributeGroup,
+    updateAttributeGroupResponse_attributeGroup,
+    updateAttributeGroupResponse_httpStatus,
+
+    -- * Types
+
+    -- ** AppRegistryConfiguration
+    appRegistryConfiguration_tagQueryConfiguration,
+
+    -- ** Application
+    application_arn,
+    application_creationTime,
+    application_description,
+    application_id,
+    application_lastUpdateTime,
+    application_name,
+    application_tags,
+
+    -- ** ApplicationSummary
+    applicationSummary_arn,
+    applicationSummary_creationTime,
+    applicationSummary_description,
+    applicationSummary_id,
+    applicationSummary_lastUpdateTime,
+    applicationSummary_name,
+
+    -- ** AttributeGroup
+    attributeGroup_arn,
+    attributeGroup_creationTime,
+    attributeGroup_description,
+    attributeGroup_id,
+    attributeGroup_lastUpdateTime,
+    attributeGroup_name,
+    attributeGroup_tags,
+
+    -- ** AttributeGroupDetails
+    attributeGroupDetails_arn,
+    attributeGroupDetails_id,
+    attributeGroupDetails_name,
+
+    -- ** AttributeGroupSummary
+    attributeGroupSummary_arn,
+    attributeGroupSummary_creationTime,
+    attributeGroupSummary_description,
+    attributeGroupSummary_id,
+    attributeGroupSummary_lastUpdateTime,
+    attributeGroupSummary_name,
+
+    -- ** Integrations
+    integrations_resourceGroup,
+
+    -- ** Resource
+    resource_arn,
+    resource_associationTime,
+    resource_integrations,
+    resource_name,
+
+    -- ** ResourceDetails
+    resourceDetails_tagValue,
+
+    -- ** ResourceGroup
+    resourceGroup_arn,
+    resourceGroup_errorMessage,
+    resourceGroup_state,
+
+    -- ** ResourceInfo
+    resourceInfo_arn,
+    resourceInfo_name,
+    resourceInfo_resourceDetails,
+    resourceInfo_resourceType,
+
+    -- ** ResourceIntegrations
+    resourceIntegrations_resourceGroup,
+
+    -- ** TagQueryConfiguration
+    tagQueryConfiguration_tagKey,
+  )
+where
+
+import Amazonka.ServiceCatalogAppRegistry.AssociateAttributeGroup
+import Amazonka.ServiceCatalogAppRegistry.AssociateResource
+import Amazonka.ServiceCatalogAppRegistry.CreateApplication
+import Amazonka.ServiceCatalogAppRegistry.CreateAttributeGroup
+import Amazonka.ServiceCatalogAppRegistry.DeleteApplication
+import Amazonka.ServiceCatalogAppRegistry.DeleteAttributeGroup
+import Amazonka.ServiceCatalogAppRegistry.DisassociateAttributeGroup
+import Amazonka.ServiceCatalogAppRegistry.DisassociateResource
+import Amazonka.ServiceCatalogAppRegistry.GetApplication
+import Amazonka.ServiceCatalogAppRegistry.GetAssociatedResource
+import Amazonka.ServiceCatalogAppRegistry.GetAttributeGroup
+import Amazonka.ServiceCatalogAppRegistry.GetConfiguration
+import Amazonka.ServiceCatalogAppRegistry.ListApplications
+import Amazonka.ServiceCatalogAppRegistry.ListAssociatedAttributeGroups
+import Amazonka.ServiceCatalogAppRegistry.ListAssociatedResources
+import Amazonka.ServiceCatalogAppRegistry.ListAttributeGroups
+import Amazonka.ServiceCatalogAppRegistry.ListAttributeGroupsForApplication
+import Amazonka.ServiceCatalogAppRegistry.ListTagsForResource
+import Amazonka.ServiceCatalogAppRegistry.PutConfiguration
+import Amazonka.ServiceCatalogAppRegistry.SyncResource
+import Amazonka.ServiceCatalogAppRegistry.TagResource
+import Amazonka.ServiceCatalogAppRegistry.Types.AppRegistryConfiguration
+import Amazonka.ServiceCatalogAppRegistry.Types.Application
+import Amazonka.ServiceCatalogAppRegistry.Types.ApplicationSummary
+import Amazonka.ServiceCatalogAppRegistry.Types.AttributeGroup
+import Amazonka.ServiceCatalogAppRegistry.Types.AttributeGroupDetails
+import Amazonka.ServiceCatalogAppRegistry.Types.AttributeGroupSummary
+import Amazonka.ServiceCatalogAppRegistry.Types.Integrations
+import Amazonka.ServiceCatalogAppRegistry.Types.Resource
+import Amazonka.ServiceCatalogAppRegistry.Types.ResourceDetails
+import Amazonka.ServiceCatalogAppRegistry.Types.ResourceGroup
+import Amazonka.ServiceCatalogAppRegistry.Types.ResourceInfo
+import Amazonka.ServiceCatalogAppRegistry.Types.ResourceIntegrations
+import Amazonka.ServiceCatalogAppRegistry.Types.TagQueryConfiguration
+import Amazonka.ServiceCatalogAppRegistry.UntagResource
+import Amazonka.ServiceCatalogAppRegistry.UpdateApplication
+import Amazonka.ServiceCatalogAppRegistry.UpdateAttributeGroup
diff --git a/gen/Amazonka/ServiceCatalogAppRegistry/ListApplications.hs b/gen/Amazonka/ServiceCatalogAppRegistry/ListApplications.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ServiceCatalogAppRegistry/ListApplications.hs
@@ -0,0 +1,220 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ServiceCatalogAppRegistry.ListApplications
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Retrieves a list of all of your applications. Results are paginated.
+--
+-- This operation returns paginated results.
+module Amazonka.ServiceCatalogAppRegistry.ListApplications
+  ( -- * Creating a Request
+    ListApplications (..),
+    newListApplications,
+
+    -- * Request Lenses
+    listApplications_maxResults,
+    listApplications_nextToken,
+
+    -- * Destructuring the Response
+    ListApplicationsResponse (..),
+    newListApplicationsResponse,
+
+    -- * Response Lenses
+    listApplicationsResponse_applications,
+    listApplicationsResponse_nextToken,
+    listApplicationsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.ServiceCatalogAppRegistry.Types
+
+-- | /See:/ 'newListApplications' smart constructor.
+data ListApplications = ListApplications'
+  { -- | The upper bound of the number of results to return (cannot exceed 25).
+    -- If this parameter is omitted, it defaults to 25. This value is optional.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The token to use to get the next page of results after a previous API
+    -- call.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListApplications' 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:
+--
+-- 'maxResults', 'listApplications_maxResults' - The upper bound of the number of results to return (cannot exceed 25).
+-- If this parameter is omitted, it defaults to 25. This value is optional.
+--
+-- 'nextToken', 'listApplications_nextToken' - The token to use to get the next page of results after a previous API
+-- call.
+newListApplications ::
+  ListApplications
+newListApplications =
+  ListApplications'
+    { maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | The upper bound of the number of results to return (cannot exceed 25).
+-- If this parameter is omitted, it defaults to 25. This value is optional.
+listApplications_maxResults :: Lens.Lens' ListApplications (Prelude.Maybe Prelude.Natural)
+listApplications_maxResults = Lens.lens (\ListApplications' {maxResults} -> maxResults) (\s@ListApplications' {} a -> s {maxResults = a} :: ListApplications)
+
+-- | The token to use to get the next page of results after a previous API
+-- call.
+listApplications_nextToken :: Lens.Lens' ListApplications (Prelude.Maybe Prelude.Text)
+listApplications_nextToken = Lens.lens (\ListApplications' {nextToken} -> nextToken) (\s@ListApplications' {} a -> s {nextToken = a} :: ListApplications)
+
+instance Core.AWSPager ListApplications where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listApplicationsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? listApplicationsResponse_applications
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listApplications_nextToken
+          Lens..~ rs
+          Lens.^? listApplicationsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ListApplications where
+  type
+    AWSResponse ListApplications =
+      ListApplicationsResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListApplicationsResponse'
+            Prelude.<$> (x Data..?> "applications" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListApplications where
+  hashWithSalt _salt ListApplications' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData ListApplications where
+  rnf ListApplications' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance Data.ToHeaders ListApplications where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath ListApplications where
+  toPath = Prelude.const "/applications"
+
+instance Data.ToQuery ListApplications where
+  toQuery ListApplications' {..} =
+    Prelude.mconcat
+      [ "maxResults" Data.=: maxResults,
+        "nextToken" Data.=: nextToken
+      ]
+
+-- | /See:/ 'newListApplicationsResponse' smart constructor.
+data ListApplicationsResponse = ListApplicationsResponse'
+  { -- | This list of applications.
+    applications :: Prelude.Maybe [ApplicationSummary],
+    -- | The token to use to get the next page of results after a previous API
+    -- call.
+    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 'ListApplicationsResponse' 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:
+--
+-- 'applications', 'listApplicationsResponse_applications' - This list of applications.
+--
+-- 'nextToken', 'listApplicationsResponse_nextToken' - The token to use to get the next page of results after a previous API
+-- call.
+--
+-- 'httpStatus', 'listApplicationsResponse_httpStatus' - The response's http status code.
+newListApplicationsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListApplicationsResponse
+newListApplicationsResponse pHttpStatus_ =
+  ListApplicationsResponse'
+    { applications =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | This list of applications.
+listApplicationsResponse_applications :: Lens.Lens' ListApplicationsResponse (Prelude.Maybe [ApplicationSummary])
+listApplicationsResponse_applications = Lens.lens (\ListApplicationsResponse' {applications} -> applications) (\s@ListApplicationsResponse' {} a -> s {applications = a} :: ListApplicationsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The token to use to get the next page of results after a previous API
+-- call.
+listApplicationsResponse_nextToken :: Lens.Lens' ListApplicationsResponse (Prelude.Maybe Prelude.Text)
+listApplicationsResponse_nextToken = Lens.lens (\ListApplicationsResponse' {nextToken} -> nextToken) (\s@ListApplicationsResponse' {} a -> s {nextToken = a} :: ListApplicationsResponse)
+
+-- | The response's http status code.
+listApplicationsResponse_httpStatus :: Lens.Lens' ListApplicationsResponse Prelude.Int
+listApplicationsResponse_httpStatus = Lens.lens (\ListApplicationsResponse' {httpStatus} -> httpStatus) (\s@ListApplicationsResponse' {} a -> s {httpStatus = a} :: ListApplicationsResponse)
+
+instance Prelude.NFData ListApplicationsResponse where
+  rnf ListApplicationsResponse' {..} =
+    Prelude.rnf applications
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ServiceCatalogAppRegistry/ListAssociatedAttributeGroups.hs b/gen/Amazonka/ServiceCatalogAppRegistry/ListAssociatedAttributeGroups.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ServiceCatalogAppRegistry/ListAssociatedAttributeGroups.hs
@@ -0,0 +1,253 @@
+{-# 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.ServiceCatalogAppRegistry.ListAssociatedAttributeGroups
+-- 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 attribute groups that are associated with specified
+-- application. Results are paginated.
+--
+-- This operation returns paginated results.
+module Amazonka.ServiceCatalogAppRegistry.ListAssociatedAttributeGroups
+  ( -- * Creating a Request
+    ListAssociatedAttributeGroups (..),
+    newListAssociatedAttributeGroups,
+
+    -- * Request Lenses
+    listAssociatedAttributeGroups_maxResults,
+    listAssociatedAttributeGroups_nextToken,
+    listAssociatedAttributeGroups_application,
+
+    -- * Destructuring the Response
+    ListAssociatedAttributeGroupsResponse (..),
+    newListAssociatedAttributeGroupsResponse,
+
+    -- * Response Lenses
+    listAssociatedAttributeGroupsResponse_attributeGroups,
+    listAssociatedAttributeGroupsResponse_nextToken,
+    listAssociatedAttributeGroupsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.ServiceCatalogAppRegistry.Types
+
+-- | /See:/ 'newListAssociatedAttributeGroups' smart constructor.
+data ListAssociatedAttributeGroups = ListAssociatedAttributeGroups'
+  { -- | The upper bound of the number of results to return (cannot exceed 25).
+    -- If this parameter is omitted, it defaults to 25. This value is optional.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The token to use to get the next page of results after a previous API
+    -- call.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The name or ID of the application.
+    application :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListAssociatedAttributeGroups' 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:
+--
+-- 'maxResults', 'listAssociatedAttributeGroups_maxResults' - The upper bound of the number of results to return (cannot exceed 25).
+-- If this parameter is omitted, it defaults to 25. This value is optional.
+--
+-- 'nextToken', 'listAssociatedAttributeGroups_nextToken' - The token to use to get the next page of results after a previous API
+-- call.
+--
+-- 'application', 'listAssociatedAttributeGroups_application' - The name or ID of the application.
+newListAssociatedAttributeGroups ::
+  -- | 'application'
+  Prelude.Text ->
+  ListAssociatedAttributeGroups
+newListAssociatedAttributeGroups pApplication_ =
+  ListAssociatedAttributeGroups'
+    { maxResults =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      application = pApplication_
+    }
+
+-- | The upper bound of the number of results to return (cannot exceed 25).
+-- If this parameter is omitted, it defaults to 25. This value is optional.
+listAssociatedAttributeGroups_maxResults :: Lens.Lens' ListAssociatedAttributeGroups (Prelude.Maybe Prelude.Natural)
+listAssociatedAttributeGroups_maxResults = Lens.lens (\ListAssociatedAttributeGroups' {maxResults} -> maxResults) (\s@ListAssociatedAttributeGroups' {} a -> s {maxResults = a} :: ListAssociatedAttributeGroups)
+
+-- | The token to use to get the next page of results after a previous API
+-- call.
+listAssociatedAttributeGroups_nextToken :: Lens.Lens' ListAssociatedAttributeGroups (Prelude.Maybe Prelude.Text)
+listAssociatedAttributeGroups_nextToken = Lens.lens (\ListAssociatedAttributeGroups' {nextToken} -> nextToken) (\s@ListAssociatedAttributeGroups' {} a -> s {nextToken = a} :: ListAssociatedAttributeGroups)
+
+-- | The name or ID of the application.
+listAssociatedAttributeGroups_application :: Lens.Lens' ListAssociatedAttributeGroups Prelude.Text
+listAssociatedAttributeGroups_application = Lens.lens (\ListAssociatedAttributeGroups' {application} -> application) (\s@ListAssociatedAttributeGroups' {} a -> s {application = a} :: ListAssociatedAttributeGroups)
+
+instance Core.AWSPager ListAssociatedAttributeGroups where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listAssociatedAttributeGroupsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? listAssociatedAttributeGroupsResponse_attributeGroups
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listAssociatedAttributeGroups_nextToken
+          Lens..~ rs
+          Lens.^? listAssociatedAttributeGroupsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance
+  Core.AWSRequest
+    ListAssociatedAttributeGroups
+  where
+  type
+    AWSResponse ListAssociatedAttributeGroups =
+      ListAssociatedAttributeGroupsResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListAssociatedAttributeGroupsResponse'
+            Prelude.<$> ( x
+                            Data..?> "attributeGroups"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (x Data..?> "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    ListAssociatedAttributeGroups
+  where
+  hashWithSalt _salt ListAssociatedAttributeGroups' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` application
+
+instance Prelude.NFData ListAssociatedAttributeGroups where
+  rnf ListAssociatedAttributeGroups' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf application
+
+instance Data.ToHeaders ListAssociatedAttributeGroups where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath ListAssociatedAttributeGroups where
+  toPath ListAssociatedAttributeGroups' {..} =
+    Prelude.mconcat
+      [ "/applications/",
+        Data.toBS application,
+        "/attribute-groups"
+      ]
+
+instance Data.ToQuery ListAssociatedAttributeGroups where
+  toQuery ListAssociatedAttributeGroups' {..} =
+    Prelude.mconcat
+      [ "maxResults" Data.=: maxResults,
+        "nextToken" Data.=: nextToken
+      ]
+
+-- | /See:/ 'newListAssociatedAttributeGroupsResponse' smart constructor.
+data ListAssociatedAttributeGroupsResponse = ListAssociatedAttributeGroupsResponse'
+  { -- | A list of attribute group IDs.
+    attributeGroups :: Prelude.Maybe [Prelude.Text],
+    -- | The token to use to get the next page of results after a previous API
+    -- call.
+    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 'ListAssociatedAttributeGroupsResponse' 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:
+--
+-- 'attributeGroups', 'listAssociatedAttributeGroupsResponse_attributeGroups' - A list of attribute group IDs.
+--
+-- 'nextToken', 'listAssociatedAttributeGroupsResponse_nextToken' - The token to use to get the next page of results after a previous API
+-- call.
+--
+-- 'httpStatus', 'listAssociatedAttributeGroupsResponse_httpStatus' - The response's http status code.
+newListAssociatedAttributeGroupsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListAssociatedAttributeGroupsResponse
+newListAssociatedAttributeGroupsResponse pHttpStatus_ =
+  ListAssociatedAttributeGroupsResponse'
+    { attributeGroups =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | A list of attribute group IDs.
+listAssociatedAttributeGroupsResponse_attributeGroups :: Lens.Lens' ListAssociatedAttributeGroupsResponse (Prelude.Maybe [Prelude.Text])
+listAssociatedAttributeGroupsResponse_attributeGroups = Lens.lens (\ListAssociatedAttributeGroupsResponse' {attributeGroups} -> attributeGroups) (\s@ListAssociatedAttributeGroupsResponse' {} a -> s {attributeGroups = a} :: ListAssociatedAttributeGroupsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The token to use to get the next page of results after a previous API
+-- call.
+listAssociatedAttributeGroupsResponse_nextToken :: Lens.Lens' ListAssociatedAttributeGroupsResponse (Prelude.Maybe Prelude.Text)
+listAssociatedAttributeGroupsResponse_nextToken = Lens.lens (\ListAssociatedAttributeGroupsResponse' {nextToken} -> nextToken) (\s@ListAssociatedAttributeGroupsResponse' {} a -> s {nextToken = a} :: ListAssociatedAttributeGroupsResponse)
+
+-- | The response's http status code.
+listAssociatedAttributeGroupsResponse_httpStatus :: Lens.Lens' ListAssociatedAttributeGroupsResponse Prelude.Int
+listAssociatedAttributeGroupsResponse_httpStatus = Lens.lens (\ListAssociatedAttributeGroupsResponse' {httpStatus} -> httpStatus) (\s@ListAssociatedAttributeGroupsResponse' {} a -> s {httpStatus = a} :: ListAssociatedAttributeGroupsResponse)
+
+instance
+  Prelude.NFData
+    ListAssociatedAttributeGroupsResponse
+  where
+  rnf ListAssociatedAttributeGroupsResponse' {..} =
+    Prelude.rnf attributeGroups
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ServiceCatalogAppRegistry/ListAssociatedResources.hs b/gen/Amazonka/ServiceCatalogAppRegistry/ListAssociatedResources.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ServiceCatalogAppRegistry/ListAssociatedResources.hs
@@ -0,0 +1,249 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ServiceCatalogAppRegistry.ListAssociatedResources
+-- 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 of the resources that are associated with the specified
+-- application. Results are paginated.
+--
+-- If you share an application, and a consumer account associates a tag
+-- query to the application, all of the users who can access the
+-- application can also view the tag values in all accounts that are
+-- associated with it using this API.
+--
+-- This operation returns paginated results.
+module Amazonka.ServiceCatalogAppRegistry.ListAssociatedResources
+  ( -- * Creating a Request
+    ListAssociatedResources (..),
+    newListAssociatedResources,
+
+    -- * Request Lenses
+    listAssociatedResources_maxResults,
+    listAssociatedResources_nextToken,
+    listAssociatedResources_application,
+
+    -- * Destructuring the Response
+    ListAssociatedResourcesResponse (..),
+    newListAssociatedResourcesResponse,
+
+    -- * Response Lenses
+    listAssociatedResourcesResponse_nextToken,
+    listAssociatedResourcesResponse_resources,
+    listAssociatedResourcesResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.ServiceCatalogAppRegistry.Types
+
+-- | /See:/ 'newListAssociatedResources' smart constructor.
+data ListAssociatedResources = ListAssociatedResources'
+  { -- | The upper bound of the number of results to return (cannot exceed 25).
+    -- If this parameter is omitted, it defaults to 25. This value is optional.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The token to use to get the next page of results after a previous API
+    -- call.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The name or ID of the application.
+    application :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListAssociatedResources' 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:
+--
+-- 'maxResults', 'listAssociatedResources_maxResults' - The upper bound of the number of results to return (cannot exceed 25).
+-- If this parameter is omitted, it defaults to 25. This value is optional.
+--
+-- 'nextToken', 'listAssociatedResources_nextToken' - The token to use to get the next page of results after a previous API
+-- call.
+--
+-- 'application', 'listAssociatedResources_application' - The name or ID of the application.
+newListAssociatedResources ::
+  -- | 'application'
+  Prelude.Text ->
+  ListAssociatedResources
+newListAssociatedResources pApplication_ =
+  ListAssociatedResources'
+    { maxResults =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      application = pApplication_
+    }
+
+-- | The upper bound of the number of results to return (cannot exceed 25).
+-- If this parameter is omitted, it defaults to 25. This value is optional.
+listAssociatedResources_maxResults :: Lens.Lens' ListAssociatedResources (Prelude.Maybe Prelude.Natural)
+listAssociatedResources_maxResults = Lens.lens (\ListAssociatedResources' {maxResults} -> maxResults) (\s@ListAssociatedResources' {} a -> s {maxResults = a} :: ListAssociatedResources)
+
+-- | The token to use to get the next page of results after a previous API
+-- call.
+listAssociatedResources_nextToken :: Lens.Lens' ListAssociatedResources (Prelude.Maybe Prelude.Text)
+listAssociatedResources_nextToken = Lens.lens (\ListAssociatedResources' {nextToken} -> nextToken) (\s@ListAssociatedResources' {} a -> s {nextToken = a} :: ListAssociatedResources)
+
+-- | The name or ID of the application.
+listAssociatedResources_application :: Lens.Lens' ListAssociatedResources Prelude.Text
+listAssociatedResources_application = Lens.lens (\ListAssociatedResources' {application} -> application) (\s@ListAssociatedResources' {} a -> s {application = a} :: ListAssociatedResources)
+
+instance Core.AWSPager ListAssociatedResources where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listAssociatedResourcesResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? listAssociatedResourcesResponse_resources
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listAssociatedResources_nextToken
+          Lens..~ rs
+          Lens.^? listAssociatedResourcesResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ListAssociatedResources where
+  type
+    AWSResponse ListAssociatedResources =
+      ListAssociatedResourcesResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListAssociatedResourcesResponse'
+            Prelude.<$> (x Data..?> "nextToken")
+            Prelude.<*> (x Data..?> "resources" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListAssociatedResources where
+  hashWithSalt _salt ListAssociatedResources' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` application
+
+instance Prelude.NFData ListAssociatedResources where
+  rnf ListAssociatedResources' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf application
+
+instance Data.ToHeaders ListAssociatedResources where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath ListAssociatedResources where
+  toPath ListAssociatedResources' {..} =
+    Prelude.mconcat
+      [ "/applications/",
+        Data.toBS application,
+        "/resources"
+      ]
+
+instance Data.ToQuery ListAssociatedResources where
+  toQuery ListAssociatedResources' {..} =
+    Prelude.mconcat
+      [ "maxResults" Data.=: maxResults,
+        "nextToken" Data.=: nextToken
+      ]
+
+-- | /See:/ 'newListAssociatedResourcesResponse' smart constructor.
+data ListAssociatedResourcesResponse = ListAssociatedResourcesResponse'
+  { -- | The token to use to get the next page of results after a previous API
+    -- call.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | Information about the resources.
+    resources :: Prelude.Maybe [ResourceInfo],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListAssociatedResourcesResponse' 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:
+--
+-- 'nextToken', 'listAssociatedResourcesResponse_nextToken' - The token to use to get the next page of results after a previous API
+-- call.
+--
+-- 'resources', 'listAssociatedResourcesResponse_resources' - Information about the resources.
+--
+-- 'httpStatus', 'listAssociatedResourcesResponse_httpStatus' - The response's http status code.
+newListAssociatedResourcesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListAssociatedResourcesResponse
+newListAssociatedResourcesResponse pHttpStatus_ =
+  ListAssociatedResourcesResponse'
+    { nextToken =
+        Prelude.Nothing,
+      resources = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The token to use to get the next page of results after a previous API
+-- call.
+listAssociatedResourcesResponse_nextToken :: Lens.Lens' ListAssociatedResourcesResponse (Prelude.Maybe Prelude.Text)
+listAssociatedResourcesResponse_nextToken = Lens.lens (\ListAssociatedResourcesResponse' {nextToken} -> nextToken) (\s@ListAssociatedResourcesResponse' {} a -> s {nextToken = a} :: ListAssociatedResourcesResponse)
+
+-- | Information about the resources.
+listAssociatedResourcesResponse_resources :: Lens.Lens' ListAssociatedResourcesResponse (Prelude.Maybe [ResourceInfo])
+listAssociatedResourcesResponse_resources = Lens.lens (\ListAssociatedResourcesResponse' {resources} -> resources) (\s@ListAssociatedResourcesResponse' {} a -> s {resources = a} :: ListAssociatedResourcesResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+listAssociatedResourcesResponse_httpStatus :: Lens.Lens' ListAssociatedResourcesResponse Prelude.Int
+listAssociatedResourcesResponse_httpStatus = Lens.lens (\ListAssociatedResourcesResponse' {httpStatus} -> httpStatus) (\s@ListAssociatedResourcesResponse' {} a -> s {httpStatus = a} :: ListAssociatedResourcesResponse)
+
+instance
+  Prelude.NFData
+    ListAssociatedResourcesResponse
+  where
+  rnf ListAssociatedResourcesResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf resources
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ServiceCatalogAppRegistry/ListAttributeGroups.hs b/gen/Amazonka/ServiceCatalogAppRegistry/ListAttributeGroups.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ServiceCatalogAppRegistry/ListAttributeGroups.hs
@@ -0,0 +1,224 @@
+{-# 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.ServiceCatalogAppRegistry.ListAttributeGroups
+-- 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 attribute groups which you have access to. Results are
+-- paginated.
+--
+-- This operation returns paginated results.
+module Amazonka.ServiceCatalogAppRegistry.ListAttributeGroups
+  ( -- * Creating a Request
+    ListAttributeGroups (..),
+    newListAttributeGroups,
+
+    -- * Request Lenses
+    listAttributeGroups_maxResults,
+    listAttributeGroups_nextToken,
+
+    -- * Destructuring the Response
+    ListAttributeGroupsResponse (..),
+    newListAttributeGroupsResponse,
+
+    -- * Response Lenses
+    listAttributeGroupsResponse_attributeGroups,
+    listAttributeGroupsResponse_nextToken,
+    listAttributeGroupsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.ServiceCatalogAppRegistry.Types
+
+-- | /See:/ 'newListAttributeGroups' smart constructor.
+data ListAttributeGroups = ListAttributeGroups'
+  { -- | The upper bound of the number of results to return (cannot exceed 25).
+    -- If this parameter is omitted, it defaults to 25. This value is optional.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The token to use to get the next page of results after a previous API
+    -- call.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListAttributeGroups' 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:
+--
+-- 'maxResults', 'listAttributeGroups_maxResults' - The upper bound of the number of results to return (cannot exceed 25).
+-- If this parameter is omitted, it defaults to 25. This value is optional.
+--
+-- 'nextToken', 'listAttributeGroups_nextToken' - The token to use to get the next page of results after a previous API
+-- call.
+newListAttributeGroups ::
+  ListAttributeGroups
+newListAttributeGroups =
+  ListAttributeGroups'
+    { maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | The upper bound of the number of results to return (cannot exceed 25).
+-- If this parameter is omitted, it defaults to 25. This value is optional.
+listAttributeGroups_maxResults :: Lens.Lens' ListAttributeGroups (Prelude.Maybe Prelude.Natural)
+listAttributeGroups_maxResults = Lens.lens (\ListAttributeGroups' {maxResults} -> maxResults) (\s@ListAttributeGroups' {} a -> s {maxResults = a} :: ListAttributeGroups)
+
+-- | The token to use to get the next page of results after a previous API
+-- call.
+listAttributeGroups_nextToken :: Lens.Lens' ListAttributeGroups (Prelude.Maybe Prelude.Text)
+listAttributeGroups_nextToken = Lens.lens (\ListAttributeGroups' {nextToken} -> nextToken) (\s@ListAttributeGroups' {} a -> s {nextToken = a} :: ListAttributeGroups)
+
+instance Core.AWSPager ListAttributeGroups where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listAttributeGroupsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? listAttributeGroupsResponse_attributeGroups
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listAttributeGroups_nextToken
+          Lens..~ rs
+          Lens.^? listAttributeGroupsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ListAttributeGroups where
+  type
+    AWSResponse ListAttributeGroups =
+      ListAttributeGroupsResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListAttributeGroupsResponse'
+            Prelude.<$> ( x
+                            Data..?> "attributeGroups"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (x Data..?> "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListAttributeGroups where
+  hashWithSalt _salt ListAttributeGroups' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData ListAttributeGroups where
+  rnf ListAttributeGroups' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance Data.ToHeaders ListAttributeGroups where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath ListAttributeGroups where
+  toPath = Prelude.const "/attribute-groups"
+
+instance Data.ToQuery ListAttributeGroups where
+  toQuery ListAttributeGroups' {..} =
+    Prelude.mconcat
+      [ "maxResults" Data.=: maxResults,
+        "nextToken" Data.=: nextToken
+      ]
+
+-- | /See:/ 'newListAttributeGroupsResponse' smart constructor.
+data ListAttributeGroupsResponse = ListAttributeGroupsResponse'
+  { -- | This list of attribute groups.
+    attributeGroups :: Prelude.Maybe [AttributeGroupSummary],
+    -- | The token to use to get the next page of results after a previous API
+    -- call.
+    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 'ListAttributeGroupsResponse' 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:
+--
+-- 'attributeGroups', 'listAttributeGroupsResponse_attributeGroups' - This list of attribute groups.
+--
+-- 'nextToken', 'listAttributeGroupsResponse_nextToken' - The token to use to get the next page of results after a previous API
+-- call.
+--
+-- 'httpStatus', 'listAttributeGroupsResponse_httpStatus' - The response's http status code.
+newListAttributeGroupsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListAttributeGroupsResponse
+newListAttributeGroupsResponse pHttpStatus_ =
+  ListAttributeGroupsResponse'
+    { attributeGroups =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | This list of attribute groups.
+listAttributeGroupsResponse_attributeGroups :: Lens.Lens' ListAttributeGroupsResponse (Prelude.Maybe [AttributeGroupSummary])
+listAttributeGroupsResponse_attributeGroups = Lens.lens (\ListAttributeGroupsResponse' {attributeGroups} -> attributeGroups) (\s@ListAttributeGroupsResponse' {} a -> s {attributeGroups = a} :: ListAttributeGroupsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The token to use to get the next page of results after a previous API
+-- call.
+listAttributeGroupsResponse_nextToken :: Lens.Lens' ListAttributeGroupsResponse (Prelude.Maybe Prelude.Text)
+listAttributeGroupsResponse_nextToken = Lens.lens (\ListAttributeGroupsResponse' {nextToken} -> nextToken) (\s@ListAttributeGroupsResponse' {} a -> s {nextToken = a} :: ListAttributeGroupsResponse)
+
+-- | The response's http status code.
+listAttributeGroupsResponse_httpStatus :: Lens.Lens' ListAttributeGroupsResponse Prelude.Int
+listAttributeGroupsResponse_httpStatus = Lens.lens (\ListAttributeGroupsResponse' {httpStatus} -> httpStatus) (\s@ListAttributeGroupsResponse' {} a -> s {httpStatus = a} :: ListAttributeGroupsResponse)
+
+instance Prelude.NFData ListAttributeGroupsResponse where
+  rnf ListAttributeGroupsResponse' {..} =
+    Prelude.rnf attributeGroups
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ServiceCatalogAppRegistry/ListAttributeGroupsForApplication.hs b/gen/Amazonka/ServiceCatalogAppRegistry/ListAttributeGroupsForApplication.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ServiceCatalogAppRegistry/ListAttributeGroupsForApplication.hs
@@ -0,0 +1,271 @@
+{-# 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.ServiceCatalogAppRegistry.ListAttributeGroupsForApplication
+-- 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 the details of all attribute groups associated with a specific
+-- application. The results display in pages.
+--
+-- This operation returns paginated results.
+module Amazonka.ServiceCatalogAppRegistry.ListAttributeGroupsForApplication
+  ( -- * Creating a Request
+    ListAttributeGroupsForApplication (..),
+    newListAttributeGroupsForApplication,
+
+    -- * Request Lenses
+    listAttributeGroupsForApplication_maxResults,
+    listAttributeGroupsForApplication_nextToken,
+    listAttributeGroupsForApplication_application,
+
+    -- * Destructuring the Response
+    ListAttributeGroupsForApplicationResponse (..),
+    newListAttributeGroupsForApplicationResponse,
+
+    -- * Response Lenses
+    listAttributeGroupsForApplicationResponse_attributeGroupsDetails,
+    listAttributeGroupsForApplicationResponse_nextToken,
+    listAttributeGroupsForApplicationResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.ServiceCatalogAppRegistry.Types
+
+-- | /See:/ 'newListAttributeGroupsForApplication' smart constructor.
+data ListAttributeGroupsForApplication = ListAttributeGroupsForApplication'
+  { -- | The upper bound of the number of results to return. The value cannot
+    -- exceed 25. If you omit this parameter, it defaults to 25. This value is
+    -- optional.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | This token retrieves the next page of results after a previous API call.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The name or ID of the application.
+    application :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListAttributeGroupsForApplication' 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:
+--
+-- 'maxResults', 'listAttributeGroupsForApplication_maxResults' - The upper bound of the number of results to return. The value cannot
+-- exceed 25. If you omit this parameter, it defaults to 25. This value is
+-- optional.
+--
+-- 'nextToken', 'listAttributeGroupsForApplication_nextToken' - This token retrieves the next page of results after a previous API call.
+--
+-- 'application', 'listAttributeGroupsForApplication_application' - The name or ID of the application.
+newListAttributeGroupsForApplication ::
+  -- | 'application'
+  Prelude.Text ->
+  ListAttributeGroupsForApplication
+newListAttributeGroupsForApplication pApplication_ =
+  ListAttributeGroupsForApplication'
+    { maxResults =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      application = pApplication_
+    }
+
+-- | The upper bound of the number of results to return. The value cannot
+-- exceed 25. If you omit this parameter, it defaults to 25. This value is
+-- optional.
+listAttributeGroupsForApplication_maxResults :: Lens.Lens' ListAttributeGroupsForApplication (Prelude.Maybe Prelude.Natural)
+listAttributeGroupsForApplication_maxResults = Lens.lens (\ListAttributeGroupsForApplication' {maxResults} -> maxResults) (\s@ListAttributeGroupsForApplication' {} a -> s {maxResults = a} :: ListAttributeGroupsForApplication)
+
+-- | This token retrieves the next page of results after a previous API call.
+listAttributeGroupsForApplication_nextToken :: Lens.Lens' ListAttributeGroupsForApplication (Prelude.Maybe Prelude.Text)
+listAttributeGroupsForApplication_nextToken = Lens.lens (\ListAttributeGroupsForApplication' {nextToken} -> nextToken) (\s@ListAttributeGroupsForApplication' {} a -> s {nextToken = a} :: ListAttributeGroupsForApplication)
+
+-- | The name or ID of the application.
+listAttributeGroupsForApplication_application :: Lens.Lens' ListAttributeGroupsForApplication Prelude.Text
+listAttributeGroupsForApplication_application = Lens.lens (\ListAttributeGroupsForApplication' {application} -> application) (\s@ListAttributeGroupsForApplication' {} a -> s {application = a} :: ListAttributeGroupsForApplication)
+
+instance
+  Core.AWSPager
+    ListAttributeGroupsForApplication
+  where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listAttributeGroupsForApplicationResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? listAttributeGroupsForApplicationResponse_attributeGroupsDetails
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listAttributeGroupsForApplication_nextToken
+          Lens..~ rs
+          Lens.^? listAttributeGroupsForApplicationResponse_nextToken
+          Prelude.. Lens._Just
+
+instance
+  Core.AWSRequest
+    ListAttributeGroupsForApplication
+  where
+  type
+    AWSResponse ListAttributeGroupsForApplication =
+      ListAttributeGroupsForApplicationResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListAttributeGroupsForApplicationResponse'
+            Prelude.<$> ( x
+                            Data..?> "attributeGroupsDetails"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (x Data..?> "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    ListAttributeGroupsForApplication
+  where
+  hashWithSalt
+    _salt
+    ListAttributeGroupsForApplication' {..} =
+      _salt
+        `Prelude.hashWithSalt` maxResults
+        `Prelude.hashWithSalt` nextToken
+        `Prelude.hashWithSalt` application
+
+instance
+  Prelude.NFData
+    ListAttributeGroupsForApplication
+  where
+  rnf ListAttributeGroupsForApplication' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf application
+
+instance
+  Data.ToHeaders
+    ListAttributeGroupsForApplication
+  where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance
+  Data.ToPath
+    ListAttributeGroupsForApplication
+  where
+  toPath ListAttributeGroupsForApplication' {..} =
+    Prelude.mconcat
+      [ "/applications/",
+        Data.toBS application,
+        "/attribute-group-details"
+      ]
+
+instance
+  Data.ToQuery
+    ListAttributeGroupsForApplication
+  where
+  toQuery ListAttributeGroupsForApplication' {..} =
+    Prelude.mconcat
+      [ "maxResults" Data.=: maxResults,
+        "nextToken" Data.=: nextToken
+      ]
+
+-- | /See:/ 'newListAttributeGroupsForApplicationResponse' smart constructor.
+data ListAttributeGroupsForApplicationResponse = ListAttributeGroupsForApplicationResponse'
+  { -- | The details related to a specific attribute group.
+    attributeGroupsDetails :: Prelude.Maybe [AttributeGroupDetails],
+    -- | The token to use to get the next page of results after a previous API
+    -- call.
+    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 'ListAttributeGroupsForApplicationResponse' 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:
+--
+-- 'attributeGroupsDetails', 'listAttributeGroupsForApplicationResponse_attributeGroupsDetails' - The details related to a specific attribute group.
+--
+-- 'nextToken', 'listAttributeGroupsForApplicationResponse_nextToken' - The token to use to get the next page of results after a previous API
+-- call.
+--
+-- 'httpStatus', 'listAttributeGroupsForApplicationResponse_httpStatus' - The response's http status code.
+newListAttributeGroupsForApplicationResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListAttributeGroupsForApplicationResponse
+newListAttributeGroupsForApplicationResponse
+  pHttpStatus_ =
+    ListAttributeGroupsForApplicationResponse'
+      { attributeGroupsDetails =
+          Prelude.Nothing,
+        nextToken = Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | The details related to a specific attribute group.
+listAttributeGroupsForApplicationResponse_attributeGroupsDetails :: Lens.Lens' ListAttributeGroupsForApplicationResponse (Prelude.Maybe [AttributeGroupDetails])
+listAttributeGroupsForApplicationResponse_attributeGroupsDetails = Lens.lens (\ListAttributeGroupsForApplicationResponse' {attributeGroupsDetails} -> attributeGroupsDetails) (\s@ListAttributeGroupsForApplicationResponse' {} a -> s {attributeGroupsDetails = a} :: ListAttributeGroupsForApplicationResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The token to use to get the next page of results after a previous API
+-- call.
+listAttributeGroupsForApplicationResponse_nextToken :: Lens.Lens' ListAttributeGroupsForApplicationResponse (Prelude.Maybe Prelude.Text)
+listAttributeGroupsForApplicationResponse_nextToken = Lens.lens (\ListAttributeGroupsForApplicationResponse' {nextToken} -> nextToken) (\s@ListAttributeGroupsForApplicationResponse' {} a -> s {nextToken = a} :: ListAttributeGroupsForApplicationResponse)
+
+-- | The response's http status code.
+listAttributeGroupsForApplicationResponse_httpStatus :: Lens.Lens' ListAttributeGroupsForApplicationResponse Prelude.Int
+listAttributeGroupsForApplicationResponse_httpStatus = Lens.lens (\ListAttributeGroupsForApplicationResponse' {httpStatus} -> httpStatus) (\s@ListAttributeGroupsForApplicationResponse' {} a -> s {httpStatus = a} :: ListAttributeGroupsForApplicationResponse)
+
+instance
+  Prelude.NFData
+    ListAttributeGroupsForApplicationResponse
+  where
+  rnf ListAttributeGroupsForApplicationResponse' {..} =
+    Prelude.rnf attributeGroupsDetails
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ServiceCatalogAppRegistry/ListTagsForResource.hs b/gen/Amazonka/ServiceCatalogAppRegistry/ListTagsForResource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ServiceCatalogAppRegistry/ListTagsForResource.hs
@@ -0,0 +1,159 @@
+{-# 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.ServiceCatalogAppRegistry.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 of the tags on the resource.
+module Amazonka.ServiceCatalogAppRegistry.ListTagsForResource
+  ( -- * Creating a Request
+    ListTagsForResource (..),
+    newListTagsForResource,
+
+    -- * Request Lenses
+    listTagsForResource_resourceArn,
+
+    -- * Destructuring the Response
+    ListTagsForResourceResponse (..),
+    newListTagsForResourceResponse,
+
+    -- * Response Lenses
+    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 qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.ServiceCatalogAppRegistry.Types
+
+-- | /See:/ 'newListTagsForResource' smart constructor.
+data ListTagsForResource = ListTagsForResource'
+  { -- | The Amazon resource name (ARN) that specifies the resource.
+    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' - The Amazon resource name (ARN) that specifies the resource.
+newListTagsForResource ::
+  -- | 'resourceArn'
+  Prelude.Text ->
+  ListTagsForResource
+newListTagsForResource pResourceArn_ =
+  ListTagsForResource' {resourceArn = pResourceArn_}
+
+-- | The Amazon resource name (ARN) that specifies the resource.
+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.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListTagsForResourceResponse'
+            Prelude.<$> (x Data..?> "tags" Core..!@ Prelude.mempty)
+            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.ToPath ListTagsForResource where
+  toPath ListTagsForResource' {..} =
+    Prelude.mconcat ["/tags/", Data.toBS resourceArn]
+
+instance Data.ToQuery ListTagsForResource where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListTagsForResourceResponse' smart constructor.
+data ListTagsForResourceResponse = ListTagsForResourceResponse'
+  { -- | The tags on the resource.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | 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:
+--
+-- 'tags', 'listTagsForResourceResponse_tags' - The tags on the resource.
+--
+-- 'httpStatus', 'listTagsForResourceResponse_httpStatus' - The response's http status code.
+newListTagsForResourceResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListTagsForResourceResponse
+newListTagsForResourceResponse pHttpStatus_ =
+  ListTagsForResourceResponse'
+    { tags =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The tags on the resource.
+listTagsForResourceResponse_tags :: Lens.Lens' ListTagsForResourceResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+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 tags
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ServiceCatalogAppRegistry/PutConfiguration.hs b/gen/Amazonka/ServiceCatalogAppRegistry/PutConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ServiceCatalogAppRegistry/PutConfiguration.hs
@@ -0,0 +1,131 @@
+{-# 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.ServiceCatalogAppRegistry.PutConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Associates a @TagKey@ configuration to an account.
+module Amazonka.ServiceCatalogAppRegistry.PutConfiguration
+  ( -- * Creating a Request
+    PutConfiguration (..),
+    newPutConfiguration,
+
+    -- * Request Lenses
+    putConfiguration_configuration,
+
+    -- * Destructuring the Response
+    PutConfigurationResponse (..),
+    newPutConfigurationResponse,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.ServiceCatalogAppRegistry.Types
+
+-- | /See:/ 'newPutConfiguration' smart constructor.
+data PutConfiguration = PutConfiguration'
+  { -- | Associates a @TagKey@ configuration to an account.
+    configuration :: AppRegistryConfiguration
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PutConfiguration' 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:
+--
+-- 'configuration', 'putConfiguration_configuration' - Associates a @TagKey@ configuration to an account.
+newPutConfiguration ::
+  -- | 'configuration'
+  AppRegistryConfiguration ->
+  PutConfiguration
+newPutConfiguration pConfiguration_ =
+  PutConfiguration' {configuration = pConfiguration_}
+
+-- | Associates a @TagKey@ configuration to an account.
+putConfiguration_configuration :: Lens.Lens' PutConfiguration AppRegistryConfiguration
+putConfiguration_configuration = Lens.lens (\PutConfiguration' {configuration} -> configuration) (\s@PutConfiguration' {} a -> s {configuration = a} :: PutConfiguration)
+
+instance Core.AWSRequest PutConfiguration where
+  type
+    AWSResponse PutConfiguration =
+      PutConfigurationResponse
+  request overrides =
+    Request.putJSON (overrides defaultService)
+  response =
+    Response.receiveNull PutConfigurationResponse'
+
+instance Prelude.Hashable PutConfiguration where
+  hashWithSalt _salt PutConfiguration' {..} =
+    _salt `Prelude.hashWithSalt` configuration
+
+instance Prelude.NFData PutConfiguration where
+  rnf PutConfiguration' {..} = Prelude.rnf configuration
+
+instance Data.ToHeaders PutConfiguration where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON PutConfiguration where
+  toJSON PutConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ("configuration" Data..= configuration)
+          ]
+      )
+
+instance Data.ToPath PutConfiguration where
+  toPath = Prelude.const "/configuration"
+
+instance Data.ToQuery PutConfiguration where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newPutConfigurationResponse' smart constructor.
+data PutConfigurationResponse = PutConfigurationResponse'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PutConfigurationResponse' 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.
+newPutConfigurationResponse ::
+  PutConfigurationResponse
+newPutConfigurationResponse =
+  PutConfigurationResponse'
+
+instance Prelude.NFData PutConfigurationResponse where
+  rnf _ = ()
diff --git a/gen/Amazonka/ServiceCatalogAppRegistry/SyncResource.hs b/gen/Amazonka/ServiceCatalogAppRegistry/SyncResource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ServiceCatalogAppRegistry/SyncResource.hs
@@ -0,0 +1,220 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ServiceCatalogAppRegistry.SyncResource
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Syncs the resource with current AppRegistry records.
+--
+-- Specifically, the resource’s AppRegistry system tags sync with its
+-- associated application. We remove the resource\'s AppRegistry system
+-- tags if it does not associate with the application. The caller must have
+-- permissions to read and update the resource.
+module Amazonka.ServiceCatalogAppRegistry.SyncResource
+  ( -- * Creating a Request
+    SyncResource (..),
+    newSyncResource,
+
+    -- * Request Lenses
+    syncResource_resourceType,
+    syncResource_resource,
+
+    -- * Destructuring the Response
+    SyncResourceResponse (..),
+    newSyncResourceResponse,
+
+    -- * Response Lenses
+    syncResourceResponse_actionTaken,
+    syncResourceResponse_applicationArn,
+    syncResourceResponse_resourceArn,
+    syncResourceResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.ServiceCatalogAppRegistry.Types
+
+-- | /See:/ 'newSyncResource' smart constructor.
+data SyncResource = SyncResource'
+  { -- | The type of resource of which the application will be associated.
+    resourceType :: ResourceType,
+    -- | An entity you can work with and specify with a name or ID. Examples
+    -- include an Amazon EC2 instance, an Amazon Web Services CloudFormation
+    -- stack, or an Amazon S3 bucket.
+    resource :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SyncResource' 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:
+--
+-- 'resourceType', 'syncResource_resourceType' - The type of resource of which the application will be associated.
+--
+-- 'resource', 'syncResource_resource' - An entity you can work with and specify with a name or ID. Examples
+-- include an Amazon EC2 instance, an Amazon Web Services CloudFormation
+-- stack, or an Amazon S3 bucket.
+newSyncResource ::
+  -- | 'resourceType'
+  ResourceType ->
+  -- | 'resource'
+  Prelude.Text ->
+  SyncResource
+newSyncResource pResourceType_ pResource_ =
+  SyncResource'
+    { resourceType = pResourceType_,
+      resource = pResource_
+    }
+
+-- | The type of resource of which the application will be associated.
+syncResource_resourceType :: Lens.Lens' SyncResource ResourceType
+syncResource_resourceType = Lens.lens (\SyncResource' {resourceType} -> resourceType) (\s@SyncResource' {} a -> s {resourceType = a} :: SyncResource)
+
+-- | An entity you can work with and specify with a name or ID. Examples
+-- include an Amazon EC2 instance, an Amazon Web Services CloudFormation
+-- stack, or an Amazon S3 bucket.
+syncResource_resource :: Lens.Lens' SyncResource Prelude.Text
+syncResource_resource = Lens.lens (\SyncResource' {resource} -> resource) (\s@SyncResource' {} a -> s {resource = a} :: SyncResource)
+
+instance Core.AWSRequest SyncResource where
+  type AWSResponse SyncResource = SyncResourceResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          SyncResourceResponse'
+            Prelude.<$> (x Data..?> "actionTaken")
+            Prelude.<*> (x Data..?> "applicationArn")
+            Prelude.<*> (x Data..?> "resourceArn")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable SyncResource where
+  hashWithSalt _salt SyncResource' {..} =
+    _salt
+      `Prelude.hashWithSalt` resourceType
+      `Prelude.hashWithSalt` resource
+
+instance Prelude.NFData SyncResource where
+  rnf SyncResource' {..} =
+    Prelude.rnf resourceType
+      `Prelude.seq` Prelude.rnf resource
+
+instance Data.ToHeaders SyncResource where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON SyncResource where
+  toJSON = Prelude.const (Data.Object Prelude.mempty)
+
+instance Data.ToPath SyncResource where
+  toPath SyncResource' {..} =
+    Prelude.mconcat
+      [ "/sync/",
+        Data.toBS resourceType,
+        "/",
+        Data.toBS resource
+      ]
+
+instance Data.ToQuery SyncResource where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newSyncResourceResponse' smart constructor.
+data SyncResourceResponse = SyncResourceResponse'
+  { -- | The results of the output if an application is associated with an ARN
+    -- value, which could be @syncStarted@ or None.
+    actionTaken :: Prelude.Maybe SyncAction,
+    -- | The Amazon resource name (ARN) that specifies the application.
+    applicationArn :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon resource name (ARN) that specifies the resource.
+    resourceArn :: 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 'SyncResourceResponse' 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:
+--
+-- 'actionTaken', 'syncResourceResponse_actionTaken' - The results of the output if an application is associated with an ARN
+-- value, which could be @syncStarted@ or None.
+--
+-- 'applicationArn', 'syncResourceResponse_applicationArn' - The Amazon resource name (ARN) that specifies the application.
+--
+-- 'resourceArn', 'syncResourceResponse_resourceArn' - The Amazon resource name (ARN) that specifies the resource.
+--
+-- 'httpStatus', 'syncResourceResponse_httpStatus' - The response's http status code.
+newSyncResourceResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  SyncResourceResponse
+newSyncResourceResponse pHttpStatus_ =
+  SyncResourceResponse'
+    { actionTaken =
+        Prelude.Nothing,
+      applicationArn = Prelude.Nothing,
+      resourceArn = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The results of the output if an application is associated with an ARN
+-- value, which could be @syncStarted@ or None.
+syncResourceResponse_actionTaken :: Lens.Lens' SyncResourceResponse (Prelude.Maybe SyncAction)
+syncResourceResponse_actionTaken = Lens.lens (\SyncResourceResponse' {actionTaken} -> actionTaken) (\s@SyncResourceResponse' {} a -> s {actionTaken = a} :: SyncResourceResponse)
+
+-- | The Amazon resource name (ARN) that specifies the application.
+syncResourceResponse_applicationArn :: Lens.Lens' SyncResourceResponse (Prelude.Maybe Prelude.Text)
+syncResourceResponse_applicationArn = Lens.lens (\SyncResourceResponse' {applicationArn} -> applicationArn) (\s@SyncResourceResponse' {} a -> s {applicationArn = a} :: SyncResourceResponse)
+
+-- | The Amazon resource name (ARN) that specifies the resource.
+syncResourceResponse_resourceArn :: Lens.Lens' SyncResourceResponse (Prelude.Maybe Prelude.Text)
+syncResourceResponse_resourceArn = Lens.lens (\SyncResourceResponse' {resourceArn} -> resourceArn) (\s@SyncResourceResponse' {} a -> s {resourceArn = a} :: SyncResourceResponse)
+
+-- | The response's http status code.
+syncResourceResponse_httpStatus :: Lens.Lens' SyncResourceResponse Prelude.Int
+syncResourceResponse_httpStatus = Lens.lens (\SyncResourceResponse' {httpStatus} -> httpStatus) (\s@SyncResourceResponse' {} a -> s {httpStatus = a} :: SyncResourceResponse)
+
+instance Prelude.NFData SyncResourceResponse where
+  rnf SyncResourceResponse' {..} =
+    Prelude.rnf actionTaken
+      `Prelude.seq` Prelude.rnf applicationArn
+      `Prelude.seq` Prelude.rnf resourceArn
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ServiceCatalogAppRegistry/TagResource.hs b/gen/Amazonka/ServiceCatalogAppRegistry/TagResource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ServiceCatalogAppRegistry/TagResource.hs
@@ -0,0 +1,169 @@
+{-# 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.ServiceCatalogAppRegistry.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)
+--
+-- Assigns one or more tags (key-value pairs) to the specified resource.
+--
+-- Each tag consists of a key and an optional value. If a tag with the same
+-- key is already associated with the resource, this action updates its
+-- value.
+--
+-- This operation returns an empty response if the call was successful.
+module Amazonka.ServiceCatalogAppRegistry.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 qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.ServiceCatalogAppRegistry.Types
+
+-- | /See:/ 'newTagResource' smart constructor.
+data TagResource = TagResource'
+  { -- | The Amazon resource name (ARN) that specifies the resource.
+    resourceArn :: Prelude.Text,
+    -- | The new or modified tags for the resource.
+    tags :: Prelude.HashMap Prelude.Text Prelude.Text
+  }
+  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' - The Amazon resource name (ARN) that specifies the resource.
+--
+-- 'tags', 'tagResource_tags' - The new or modified tags for the resource.
+newTagResource ::
+  -- | 'resourceArn'
+  Prelude.Text ->
+  TagResource
+newTagResource pResourceArn_ =
+  TagResource'
+    { resourceArn = pResourceArn_,
+      tags = Prelude.mempty
+    }
+
+-- | The Amazon resource name (ARN) that specifies the resource.
+tagResource_resourceArn :: Lens.Lens' TagResource Prelude.Text
+tagResource_resourceArn = Lens.lens (\TagResource' {resourceArn} -> resourceArn) (\s@TagResource' {} a -> s {resourceArn = a} :: TagResource)
+
+-- | The new or modified tags for the resource.
+tagResource_tags :: Lens.Lens' TagResource (Prelude.HashMap Prelude.Text Prelude.Text)
+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 ("tags" Data..= tags)]
+      )
+
+instance Data.ToPath TagResource where
+  toPath TagResource' {..} =
+    Prelude.mconcat ["/tags/", Data.toBS resourceArn]
+
+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/ServiceCatalogAppRegistry/Types.hs b/gen/Amazonka/ServiceCatalogAppRegistry/Types.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ServiceCatalogAppRegistry/Types.hs
@@ -0,0 +1,267 @@
+{-# 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.ServiceCatalogAppRegistry.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.ServiceCatalogAppRegistry.Types
+  ( -- * Service Configuration
+    defaultService,
+
+    -- * Errors
+    _ConflictException,
+    _InternalServerException,
+    _ResourceNotFoundException,
+    _ServiceQuotaExceededException,
+    _ValidationException,
+
+    -- * ResourceGroupState
+    ResourceGroupState (..),
+
+    -- * ResourceType
+    ResourceType (..),
+
+    -- * SyncAction
+    SyncAction (..),
+
+    -- * AppRegistryConfiguration
+    AppRegistryConfiguration (..),
+    newAppRegistryConfiguration,
+    appRegistryConfiguration_tagQueryConfiguration,
+
+    -- * Application
+    Application (..),
+    newApplication,
+    application_arn,
+    application_creationTime,
+    application_description,
+    application_id,
+    application_lastUpdateTime,
+    application_name,
+    application_tags,
+
+    -- * ApplicationSummary
+    ApplicationSummary (..),
+    newApplicationSummary,
+    applicationSummary_arn,
+    applicationSummary_creationTime,
+    applicationSummary_description,
+    applicationSummary_id,
+    applicationSummary_lastUpdateTime,
+    applicationSummary_name,
+
+    -- * AttributeGroup
+    AttributeGroup (..),
+    newAttributeGroup,
+    attributeGroup_arn,
+    attributeGroup_creationTime,
+    attributeGroup_description,
+    attributeGroup_id,
+    attributeGroup_lastUpdateTime,
+    attributeGroup_name,
+    attributeGroup_tags,
+
+    -- * AttributeGroupDetails
+    AttributeGroupDetails (..),
+    newAttributeGroupDetails,
+    attributeGroupDetails_arn,
+    attributeGroupDetails_id,
+    attributeGroupDetails_name,
+
+    -- * AttributeGroupSummary
+    AttributeGroupSummary (..),
+    newAttributeGroupSummary,
+    attributeGroupSummary_arn,
+    attributeGroupSummary_creationTime,
+    attributeGroupSummary_description,
+    attributeGroupSummary_id,
+    attributeGroupSummary_lastUpdateTime,
+    attributeGroupSummary_name,
+
+    -- * Integrations
+    Integrations (..),
+    newIntegrations,
+    integrations_resourceGroup,
+
+    -- * Resource
+    Resource (..),
+    newResource,
+    resource_arn,
+    resource_associationTime,
+    resource_integrations,
+    resource_name,
+
+    -- * ResourceDetails
+    ResourceDetails (..),
+    newResourceDetails,
+    resourceDetails_tagValue,
+
+    -- * ResourceGroup
+    ResourceGroup (..),
+    newResourceGroup,
+    resourceGroup_arn,
+    resourceGroup_errorMessage,
+    resourceGroup_state,
+
+    -- * ResourceInfo
+    ResourceInfo (..),
+    newResourceInfo,
+    resourceInfo_arn,
+    resourceInfo_name,
+    resourceInfo_resourceDetails,
+    resourceInfo_resourceType,
+
+    -- * ResourceIntegrations
+    ResourceIntegrations (..),
+    newResourceIntegrations,
+    resourceIntegrations_resourceGroup,
+
+    -- * TagQueryConfiguration
+    TagQueryConfiguration (..),
+    newTagQueryConfiguration,
+    tagQueryConfiguration_tagKey,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Prelude as Prelude
+import Amazonka.ServiceCatalogAppRegistry.Types.AppRegistryConfiguration
+import Amazonka.ServiceCatalogAppRegistry.Types.Application
+import Amazonka.ServiceCatalogAppRegistry.Types.ApplicationSummary
+import Amazonka.ServiceCatalogAppRegistry.Types.AttributeGroup
+import Amazonka.ServiceCatalogAppRegistry.Types.AttributeGroupDetails
+import Amazonka.ServiceCatalogAppRegistry.Types.AttributeGroupSummary
+import Amazonka.ServiceCatalogAppRegistry.Types.Integrations
+import Amazonka.ServiceCatalogAppRegistry.Types.Resource
+import Amazonka.ServiceCatalogAppRegistry.Types.ResourceDetails
+import Amazonka.ServiceCatalogAppRegistry.Types.ResourceGroup
+import Amazonka.ServiceCatalogAppRegistry.Types.ResourceGroupState
+import Amazonka.ServiceCatalogAppRegistry.Types.ResourceInfo
+import Amazonka.ServiceCatalogAppRegistry.Types.ResourceIntegrations
+import Amazonka.ServiceCatalogAppRegistry.Types.ResourceType
+import Amazonka.ServiceCatalogAppRegistry.Types.SyncAction
+import Amazonka.ServiceCatalogAppRegistry.Types.TagQueryConfiguration
+import qualified Amazonka.Sign.V4 as Sign
+
+-- | API version @2020-06-24@ of the Amazon Service Catalog App Registry SDK configuration.
+defaultService :: Core.Service
+defaultService =
+  Core.Service
+    { Core.abbrev =
+        "ServiceCatalogAppRegistry",
+      Core.signer = Sign.v4,
+      Core.endpointPrefix = "servicecatalog-appregistry",
+      Core.signingName = "servicecatalog",
+      Core.version = "2020-06-24",
+      Core.s3AddressingStyle = Core.S3AddressingStyleAuto,
+      Core.endpoint = Core.defaultEndpoint defaultService,
+      Core.timeout = Prelude.Just 70,
+      Core.check = Core.statusSuccess,
+      Core.error =
+        Core.parseJSONError "ServiceCatalogAppRegistry",
+      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
+
+-- | There was a conflict when processing the request (for example, a
+-- resource with the given name already exists within the account).
+_ConflictException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ConflictException =
+  Core._MatchServiceError
+    defaultService
+    "ConflictException"
+    Prelude.. Core.hasStatus 409
+
+-- | The service is experiencing internal problems.
+_InternalServerException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_InternalServerException =
+  Core._MatchServiceError
+    defaultService
+    "InternalServerException"
+    Prelude.. Core.hasStatus 500
+
+-- | The specified resource does not exist.
+_ResourceNotFoundException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ResourceNotFoundException =
+  Core._MatchServiceError
+    defaultService
+    "ResourceNotFoundException"
+    Prelude.. Core.hasStatus 404
+
+-- | The maximum number of resources per account has been reached.
+_ServiceQuotaExceededException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ServiceQuotaExceededException =
+  Core._MatchServiceError
+    defaultService
+    "ServiceQuotaExceededException"
+    Prelude.. Core.hasStatus 402
+
+-- | The request has invalid or missing parameters.
+_ValidationException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ValidationException =
+  Core._MatchServiceError
+    defaultService
+    "ValidationException"
+    Prelude.. Core.hasStatus 400
diff --git a/gen/Amazonka/ServiceCatalogAppRegistry/Types/AppRegistryConfiguration.hs b/gen/Amazonka/ServiceCatalogAppRegistry/Types/AppRegistryConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ServiceCatalogAppRegistry/Types/AppRegistryConfiguration.hs
@@ -0,0 +1,82 @@
+{-# 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.ServiceCatalogAppRegistry.Types.AppRegistryConfiguration
+-- 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.ServiceCatalogAppRegistry.Types.AppRegistryConfiguration where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import Amazonka.ServiceCatalogAppRegistry.Types.TagQueryConfiguration
+
+-- | Includes all of the Service Catalog AppRegistry settings.
+--
+-- /See:/ 'newAppRegistryConfiguration' smart constructor.
+data AppRegistryConfiguration = AppRegistryConfiguration'
+  { -- | Includes the definition of a @tagQuery@.
+    tagQueryConfiguration :: Prelude.Maybe TagQueryConfiguration
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AppRegistryConfiguration' 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:
+--
+-- 'tagQueryConfiguration', 'appRegistryConfiguration_tagQueryConfiguration' - Includes the definition of a @tagQuery@.
+newAppRegistryConfiguration ::
+  AppRegistryConfiguration
+newAppRegistryConfiguration =
+  AppRegistryConfiguration'
+    { tagQueryConfiguration =
+        Prelude.Nothing
+    }
+
+-- | Includes the definition of a @tagQuery@.
+appRegistryConfiguration_tagQueryConfiguration :: Lens.Lens' AppRegistryConfiguration (Prelude.Maybe TagQueryConfiguration)
+appRegistryConfiguration_tagQueryConfiguration = Lens.lens (\AppRegistryConfiguration' {tagQueryConfiguration} -> tagQueryConfiguration) (\s@AppRegistryConfiguration' {} a -> s {tagQueryConfiguration = a} :: AppRegistryConfiguration)
+
+instance Data.FromJSON AppRegistryConfiguration where
+  parseJSON =
+    Data.withObject
+      "AppRegistryConfiguration"
+      ( \x ->
+          AppRegistryConfiguration'
+            Prelude.<$> (x Data..:? "tagQueryConfiguration")
+      )
+
+instance Prelude.Hashable AppRegistryConfiguration where
+  hashWithSalt _salt AppRegistryConfiguration' {..} =
+    _salt `Prelude.hashWithSalt` tagQueryConfiguration
+
+instance Prelude.NFData AppRegistryConfiguration where
+  rnf AppRegistryConfiguration' {..} =
+    Prelude.rnf tagQueryConfiguration
+
+instance Data.ToJSON AppRegistryConfiguration where
+  toJSON AppRegistryConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("tagQueryConfiguration" Data..=)
+              Prelude.<$> tagQueryConfiguration
+          ]
+      )
diff --git a/gen/Amazonka/ServiceCatalogAppRegistry/Types/Application.hs b/gen/Amazonka/ServiceCatalogAppRegistry/Types/Application.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ServiceCatalogAppRegistry/Types/Application.hs
@@ -0,0 +1,158 @@
+{-# 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.ServiceCatalogAppRegistry.Types.Application
+-- 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.ServiceCatalogAppRegistry.Types.Application 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
+
+-- | Represents a Amazon Web Services Service Catalog AppRegistry application
+-- that is the top-level node in a hierarchy of related cloud resource
+-- abstractions.
+--
+-- /See:/ 'newApplication' smart constructor.
+data Application = Application'
+  { -- | The Amazon resource name (ARN) that specifies the application across
+    -- services.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | The ISO-8601 formatted timestamp of the moment when the application was
+    -- created.
+    creationTime :: Prelude.Maybe Data.ISO8601,
+    -- | The description of the application.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The identifier of the application.
+    id :: Prelude.Maybe Prelude.Text,
+    -- | The ISO-8601 formatted timestamp of the moment when the application was
+    -- last updated.
+    lastUpdateTime :: Prelude.Maybe Data.ISO8601,
+    -- | The name of the application. The name must be unique in the region in
+    -- which you are creating the application.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | Key-value pairs you can use to associate with the application.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text)
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Application' 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:
+--
+-- 'arn', 'application_arn' - The Amazon resource name (ARN) that specifies the application across
+-- services.
+--
+-- 'creationTime', 'application_creationTime' - The ISO-8601 formatted timestamp of the moment when the application was
+-- created.
+--
+-- 'description', 'application_description' - The description of the application.
+--
+-- 'id', 'application_id' - The identifier of the application.
+--
+-- 'lastUpdateTime', 'application_lastUpdateTime' - The ISO-8601 formatted timestamp of the moment when the application was
+-- last updated.
+--
+-- 'name', 'application_name' - The name of the application. The name must be unique in the region in
+-- which you are creating the application.
+--
+-- 'tags', 'application_tags' - Key-value pairs you can use to associate with the application.
+newApplication ::
+  Application
+newApplication =
+  Application'
+    { arn = Prelude.Nothing,
+      creationTime = Prelude.Nothing,
+      description = Prelude.Nothing,
+      id = Prelude.Nothing,
+      lastUpdateTime = Prelude.Nothing,
+      name = Prelude.Nothing,
+      tags = Prelude.Nothing
+    }
+
+-- | The Amazon resource name (ARN) that specifies the application across
+-- services.
+application_arn :: Lens.Lens' Application (Prelude.Maybe Prelude.Text)
+application_arn = Lens.lens (\Application' {arn} -> arn) (\s@Application' {} a -> s {arn = a} :: Application)
+
+-- | The ISO-8601 formatted timestamp of the moment when the application was
+-- created.
+application_creationTime :: Lens.Lens' Application (Prelude.Maybe Prelude.UTCTime)
+application_creationTime = Lens.lens (\Application' {creationTime} -> creationTime) (\s@Application' {} a -> s {creationTime = a} :: Application) Prelude.. Lens.mapping Data._Time
+
+-- | The description of the application.
+application_description :: Lens.Lens' Application (Prelude.Maybe Prelude.Text)
+application_description = Lens.lens (\Application' {description} -> description) (\s@Application' {} a -> s {description = a} :: Application)
+
+-- | The identifier of the application.
+application_id :: Lens.Lens' Application (Prelude.Maybe Prelude.Text)
+application_id = Lens.lens (\Application' {id} -> id) (\s@Application' {} a -> s {id = a} :: Application)
+
+-- | The ISO-8601 formatted timestamp of the moment when the application was
+-- last updated.
+application_lastUpdateTime :: Lens.Lens' Application (Prelude.Maybe Prelude.UTCTime)
+application_lastUpdateTime = Lens.lens (\Application' {lastUpdateTime} -> lastUpdateTime) (\s@Application' {} a -> s {lastUpdateTime = a} :: Application) Prelude.. Lens.mapping Data._Time
+
+-- | The name of the application. The name must be unique in the region in
+-- which you are creating the application.
+application_name :: Lens.Lens' Application (Prelude.Maybe Prelude.Text)
+application_name = Lens.lens (\Application' {name} -> name) (\s@Application' {} a -> s {name = a} :: Application)
+
+-- | Key-value pairs you can use to associate with the application.
+application_tags :: Lens.Lens' Application (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+application_tags = Lens.lens (\Application' {tags} -> tags) (\s@Application' {} a -> s {tags = a} :: Application) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromJSON Application where
+  parseJSON =
+    Data.withObject
+      "Application"
+      ( \x ->
+          Application'
+            Prelude.<$> (x Data..:? "arn")
+            Prelude.<*> (x Data..:? "creationTime")
+            Prelude.<*> (x Data..:? "description")
+            Prelude.<*> (x Data..:? "id")
+            Prelude.<*> (x Data..:? "lastUpdateTime")
+            Prelude.<*> (x Data..:? "name")
+            Prelude.<*> (x Data..:? "tags" Data..!= Prelude.mempty)
+      )
+
+instance Prelude.Hashable Application where
+  hashWithSalt _salt Application' {..} =
+    _salt
+      `Prelude.hashWithSalt` arn
+      `Prelude.hashWithSalt` creationTime
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` id
+      `Prelude.hashWithSalt` lastUpdateTime
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` tags
+
+instance Prelude.NFData Application where
+  rnf Application' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf creationTime
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf lastUpdateTime
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf tags
diff --git a/gen/Amazonka/ServiceCatalogAppRegistry/Types/ApplicationSummary.hs b/gen/Amazonka/ServiceCatalogAppRegistry/Types/ApplicationSummary.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ServiceCatalogAppRegistry/Types/ApplicationSummary.hs
@@ -0,0 +1,145 @@
+{-# 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.ServiceCatalogAppRegistry.Types.ApplicationSummary
+-- 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.ServiceCatalogAppRegistry.Types.ApplicationSummary 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
+
+-- | Summary of a Amazon Web Services Service Catalog AppRegistry
+-- application.
+--
+-- /See:/ 'newApplicationSummary' smart constructor.
+data ApplicationSummary = ApplicationSummary'
+  { -- | The Amazon resource name (ARN) that specifies the application across
+    -- services.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | The ISO-8601 formatted timestamp of the moment when the application was
+    -- created.
+    creationTime :: Prelude.Maybe Data.ISO8601,
+    -- | The description of the application.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The identifier of the application.
+    id :: Prelude.Maybe Prelude.Text,
+    -- | The ISO-8601 formatted timestamp of the moment when the application was
+    -- last updated.
+    lastUpdateTime :: Prelude.Maybe Data.ISO8601,
+    -- | The name of the application. The name must be unique in the region in
+    -- which you are creating the application.
+    name :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ApplicationSummary' 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:
+--
+-- 'arn', 'applicationSummary_arn' - The Amazon resource name (ARN) that specifies the application across
+-- services.
+--
+-- 'creationTime', 'applicationSummary_creationTime' - The ISO-8601 formatted timestamp of the moment when the application was
+-- created.
+--
+-- 'description', 'applicationSummary_description' - The description of the application.
+--
+-- 'id', 'applicationSummary_id' - The identifier of the application.
+--
+-- 'lastUpdateTime', 'applicationSummary_lastUpdateTime' - The ISO-8601 formatted timestamp of the moment when the application was
+-- last updated.
+--
+-- 'name', 'applicationSummary_name' - The name of the application. The name must be unique in the region in
+-- which you are creating the application.
+newApplicationSummary ::
+  ApplicationSummary
+newApplicationSummary =
+  ApplicationSummary'
+    { arn = Prelude.Nothing,
+      creationTime = Prelude.Nothing,
+      description = Prelude.Nothing,
+      id = Prelude.Nothing,
+      lastUpdateTime = Prelude.Nothing,
+      name = Prelude.Nothing
+    }
+
+-- | The Amazon resource name (ARN) that specifies the application across
+-- services.
+applicationSummary_arn :: Lens.Lens' ApplicationSummary (Prelude.Maybe Prelude.Text)
+applicationSummary_arn = Lens.lens (\ApplicationSummary' {arn} -> arn) (\s@ApplicationSummary' {} a -> s {arn = a} :: ApplicationSummary)
+
+-- | The ISO-8601 formatted timestamp of the moment when the application was
+-- created.
+applicationSummary_creationTime :: Lens.Lens' ApplicationSummary (Prelude.Maybe Prelude.UTCTime)
+applicationSummary_creationTime = Lens.lens (\ApplicationSummary' {creationTime} -> creationTime) (\s@ApplicationSummary' {} a -> s {creationTime = a} :: ApplicationSummary) Prelude.. Lens.mapping Data._Time
+
+-- | The description of the application.
+applicationSummary_description :: Lens.Lens' ApplicationSummary (Prelude.Maybe Prelude.Text)
+applicationSummary_description = Lens.lens (\ApplicationSummary' {description} -> description) (\s@ApplicationSummary' {} a -> s {description = a} :: ApplicationSummary)
+
+-- | The identifier of the application.
+applicationSummary_id :: Lens.Lens' ApplicationSummary (Prelude.Maybe Prelude.Text)
+applicationSummary_id = Lens.lens (\ApplicationSummary' {id} -> id) (\s@ApplicationSummary' {} a -> s {id = a} :: ApplicationSummary)
+
+-- | The ISO-8601 formatted timestamp of the moment when the application was
+-- last updated.
+applicationSummary_lastUpdateTime :: Lens.Lens' ApplicationSummary (Prelude.Maybe Prelude.UTCTime)
+applicationSummary_lastUpdateTime = Lens.lens (\ApplicationSummary' {lastUpdateTime} -> lastUpdateTime) (\s@ApplicationSummary' {} a -> s {lastUpdateTime = a} :: ApplicationSummary) Prelude.. Lens.mapping Data._Time
+
+-- | The name of the application. The name must be unique in the region in
+-- which you are creating the application.
+applicationSummary_name :: Lens.Lens' ApplicationSummary (Prelude.Maybe Prelude.Text)
+applicationSummary_name = Lens.lens (\ApplicationSummary' {name} -> name) (\s@ApplicationSummary' {} a -> s {name = a} :: ApplicationSummary)
+
+instance Data.FromJSON ApplicationSummary where
+  parseJSON =
+    Data.withObject
+      "ApplicationSummary"
+      ( \x ->
+          ApplicationSummary'
+            Prelude.<$> (x Data..:? "arn")
+            Prelude.<*> (x Data..:? "creationTime")
+            Prelude.<*> (x Data..:? "description")
+            Prelude.<*> (x Data..:? "id")
+            Prelude.<*> (x Data..:? "lastUpdateTime")
+            Prelude.<*> (x Data..:? "name")
+      )
+
+instance Prelude.Hashable ApplicationSummary where
+  hashWithSalt _salt ApplicationSummary' {..} =
+    _salt
+      `Prelude.hashWithSalt` arn
+      `Prelude.hashWithSalt` creationTime
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` id
+      `Prelude.hashWithSalt` lastUpdateTime
+      `Prelude.hashWithSalt` name
+
+instance Prelude.NFData ApplicationSummary where
+  rnf ApplicationSummary' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf creationTime
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf lastUpdateTime
+      `Prelude.seq` Prelude.rnf name
diff --git a/gen/Amazonka/ServiceCatalogAppRegistry/Types/AttributeGroup.hs b/gen/Amazonka/ServiceCatalogAppRegistry/Types/AttributeGroup.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ServiceCatalogAppRegistry/Types/AttributeGroup.hs
@@ -0,0 +1,158 @@
+{-# 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.ServiceCatalogAppRegistry.Types.AttributeGroup
+-- 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.ServiceCatalogAppRegistry.Types.AttributeGroup 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
+
+-- | Represents a Amazon Web Services Service Catalog AppRegistry attribute
+-- group that is rich metadata which describes an application and its
+-- components.
+--
+-- /See:/ 'newAttributeGroup' smart constructor.
+data AttributeGroup = AttributeGroup'
+  { -- | The Amazon resource name (ARN) that specifies the attribute group across
+    -- services.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | The ISO-8601 formatted timestamp of the moment the attribute group was
+    -- created.
+    creationTime :: Prelude.Maybe Data.ISO8601,
+    -- | The description of the attribute group that the user provides.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The globally unique attribute group identifier of the attribute group.
+    id :: Prelude.Maybe Prelude.Text,
+    -- | The ISO-8601 formatted timestamp of the moment the attribute group was
+    -- last updated. This time is the same as the creationTime for a newly
+    -- created attribute group.
+    lastUpdateTime :: Prelude.Maybe Data.ISO8601,
+    -- | The name of the attribute group.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | Key-value pairs you can use to associate with the attribute group.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text)
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AttributeGroup' 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:
+--
+-- 'arn', 'attributeGroup_arn' - The Amazon resource name (ARN) that specifies the attribute group across
+-- services.
+--
+-- 'creationTime', 'attributeGroup_creationTime' - The ISO-8601 formatted timestamp of the moment the attribute group was
+-- created.
+--
+-- 'description', 'attributeGroup_description' - The description of the attribute group that the user provides.
+--
+-- 'id', 'attributeGroup_id' - The globally unique attribute group identifier of the attribute group.
+--
+-- 'lastUpdateTime', 'attributeGroup_lastUpdateTime' - The ISO-8601 formatted timestamp of the moment the attribute group was
+-- last updated. This time is the same as the creationTime for a newly
+-- created attribute group.
+--
+-- 'name', 'attributeGroup_name' - The name of the attribute group.
+--
+-- 'tags', 'attributeGroup_tags' - Key-value pairs you can use to associate with the attribute group.
+newAttributeGroup ::
+  AttributeGroup
+newAttributeGroup =
+  AttributeGroup'
+    { arn = Prelude.Nothing,
+      creationTime = Prelude.Nothing,
+      description = Prelude.Nothing,
+      id = Prelude.Nothing,
+      lastUpdateTime = Prelude.Nothing,
+      name = Prelude.Nothing,
+      tags = Prelude.Nothing
+    }
+
+-- | The Amazon resource name (ARN) that specifies the attribute group across
+-- services.
+attributeGroup_arn :: Lens.Lens' AttributeGroup (Prelude.Maybe Prelude.Text)
+attributeGroup_arn = Lens.lens (\AttributeGroup' {arn} -> arn) (\s@AttributeGroup' {} a -> s {arn = a} :: AttributeGroup)
+
+-- | The ISO-8601 formatted timestamp of the moment the attribute group was
+-- created.
+attributeGroup_creationTime :: Lens.Lens' AttributeGroup (Prelude.Maybe Prelude.UTCTime)
+attributeGroup_creationTime = Lens.lens (\AttributeGroup' {creationTime} -> creationTime) (\s@AttributeGroup' {} a -> s {creationTime = a} :: AttributeGroup) Prelude.. Lens.mapping Data._Time
+
+-- | The description of the attribute group that the user provides.
+attributeGroup_description :: Lens.Lens' AttributeGroup (Prelude.Maybe Prelude.Text)
+attributeGroup_description = Lens.lens (\AttributeGroup' {description} -> description) (\s@AttributeGroup' {} a -> s {description = a} :: AttributeGroup)
+
+-- | The globally unique attribute group identifier of the attribute group.
+attributeGroup_id :: Lens.Lens' AttributeGroup (Prelude.Maybe Prelude.Text)
+attributeGroup_id = Lens.lens (\AttributeGroup' {id} -> id) (\s@AttributeGroup' {} a -> s {id = a} :: AttributeGroup)
+
+-- | The ISO-8601 formatted timestamp of the moment the attribute group was
+-- last updated. This time is the same as the creationTime for a newly
+-- created attribute group.
+attributeGroup_lastUpdateTime :: Lens.Lens' AttributeGroup (Prelude.Maybe Prelude.UTCTime)
+attributeGroup_lastUpdateTime = Lens.lens (\AttributeGroup' {lastUpdateTime} -> lastUpdateTime) (\s@AttributeGroup' {} a -> s {lastUpdateTime = a} :: AttributeGroup) Prelude.. Lens.mapping Data._Time
+
+-- | The name of the attribute group.
+attributeGroup_name :: Lens.Lens' AttributeGroup (Prelude.Maybe Prelude.Text)
+attributeGroup_name = Lens.lens (\AttributeGroup' {name} -> name) (\s@AttributeGroup' {} a -> s {name = a} :: AttributeGroup)
+
+-- | Key-value pairs you can use to associate with the attribute group.
+attributeGroup_tags :: Lens.Lens' AttributeGroup (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+attributeGroup_tags = Lens.lens (\AttributeGroup' {tags} -> tags) (\s@AttributeGroup' {} a -> s {tags = a} :: AttributeGroup) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromJSON AttributeGroup where
+  parseJSON =
+    Data.withObject
+      "AttributeGroup"
+      ( \x ->
+          AttributeGroup'
+            Prelude.<$> (x Data..:? "arn")
+            Prelude.<*> (x Data..:? "creationTime")
+            Prelude.<*> (x Data..:? "description")
+            Prelude.<*> (x Data..:? "id")
+            Prelude.<*> (x Data..:? "lastUpdateTime")
+            Prelude.<*> (x Data..:? "name")
+            Prelude.<*> (x Data..:? "tags" Data..!= Prelude.mempty)
+      )
+
+instance Prelude.Hashable AttributeGroup where
+  hashWithSalt _salt AttributeGroup' {..} =
+    _salt
+      `Prelude.hashWithSalt` arn
+      `Prelude.hashWithSalt` creationTime
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` id
+      `Prelude.hashWithSalt` lastUpdateTime
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` tags
+
+instance Prelude.NFData AttributeGroup where
+  rnf AttributeGroup' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf creationTime
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf lastUpdateTime
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf tags
diff --git a/gen/Amazonka/ServiceCatalogAppRegistry/Types/AttributeGroupDetails.hs b/gen/Amazonka/ServiceCatalogAppRegistry/Types/AttributeGroupDetails.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ServiceCatalogAppRegistry/Types/AttributeGroupDetails.hs
@@ -0,0 +1,105 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ServiceCatalogAppRegistry.Types.AttributeGroupDetails
+-- 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.ServiceCatalogAppRegistry.Types.AttributeGroupDetails where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | The details related to a specific AttributeGroup.
+--
+-- /See:/ 'newAttributeGroupDetails' smart constructor.
+data AttributeGroupDetails = AttributeGroupDetails'
+  { -- | The Amazon resource name (ARN) that specifies the attribute group.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | The unique identifier of the attribute group.
+    id :: Prelude.Maybe Prelude.Text,
+    -- | This field is no longer supported. We recommend you don\'t use the field
+    -- when using @ListAttributeGroupsForApplication@.
+    --
+    -- The name of the attribute group.
+    name :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AttributeGroupDetails' 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:
+--
+-- 'arn', 'attributeGroupDetails_arn' - The Amazon resource name (ARN) that specifies the attribute group.
+--
+-- 'id', 'attributeGroupDetails_id' - The unique identifier of the attribute group.
+--
+-- 'name', 'attributeGroupDetails_name' - This field is no longer supported. We recommend you don\'t use the field
+-- when using @ListAttributeGroupsForApplication@.
+--
+-- The name of the attribute group.
+newAttributeGroupDetails ::
+  AttributeGroupDetails
+newAttributeGroupDetails =
+  AttributeGroupDetails'
+    { arn = Prelude.Nothing,
+      id = Prelude.Nothing,
+      name = Prelude.Nothing
+    }
+
+-- | The Amazon resource name (ARN) that specifies the attribute group.
+attributeGroupDetails_arn :: Lens.Lens' AttributeGroupDetails (Prelude.Maybe Prelude.Text)
+attributeGroupDetails_arn = Lens.lens (\AttributeGroupDetails' {arn} -> arn) (\s@AttributeGroupDetails' {} a -> s {arn = a} :: AttributeGroupDetails)
+
+-- | The unique identifier of the attribute group.
+attributeGroupDetails_id :: Lens.Lens' AttributeGroupDetails (Prelude.Maybe Prelude.Text)
+attributeGroupDetails_id = Lens.lens (\AttributeGroupDetails' {id} -> id) (\s@AttributeGroupDetails' {} a -> s {id = a} :: AttributeGroupDetails)
+
+-- | This field is no longer supported. We recommend you don\'t use the field
+-- when using @ListAttributeGroupsForApplication@.
+--
+-- The name of the attribute group.
+attributeGroupDetails_name :: Lens.Lens' AttributeGroupDetails (Prelude.Maybe Prelude.Text)
+attributeGroupDetails_name = Lens.lens (\AttributeGroupDetails' {name} -> name) (\s@AttributeGroupDetails' {} a -> s {name = a} :: AttributeGroupDetails)
+
+instance Data.FromJSON AttributeGroupDetails where
+  parseJSON =
+    Data.withObject
+      "AttributeGroupDetails"
+      ( \x ->
+          AttributeGroupDetails'
+            Prelude.<$> (x Data..:? "arn")
+            Prelude.<*> (x Data..:? "id")
+            Prelude.<*> (x Data..:? "name")
+      )
+
+instance Prelude.Hashable AttributeGroupDetails where
+  hashWithSalt _salt AttributeGroupDetails' {..} =
+    _salt
+      `Prelude.hashWithSalt` arn
+      `Prelude.hashWithSalt` id
+      `Prelude.hashWithSalt` name
+
+instance Prelude.NFData AttributeGroupDetails where
+  rnf AttributeGroupDetails' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf name
diff --git a/gen/Amazonka/ServiceCatalogAppRegistry/Types/AttributeGroupSummary.hs b/gen/Amazonka/ServiceCatalogAppRegistry/Types/AttributeGroupSummary.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ServiceCatalogAppRegistry/Types/AttributeGroupSummary.hs
@@ -0,0 +1,145 @@
+{-# 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.ServiceCatalogAppRegistry.Types.AttributeGroupSummary
+-- 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.ServiceCatalogAppRegistry.Types.AttributeGroupSummary 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
+
+-- | Summary of a Amazon Web Services Service Catalog AppRegistry attribute
+-- group.
+--
+-- /See:/ 'newAttributeGroupSummary' smart constructor.
+data AttributeGroupSummary = AttributeGroupSummary'
+  { -- | The Amazon resource name (ARN) that specifies the attribute group across
+    -- services.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | The ISO-8601 formatted timestamp of the moment the attribute group was
+    -- created.
+    creationTime :: Prelude.Maybe Data.ISO8601,
+    -- | The description of the attribute group that the user provides.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The globally unique attribute group identifier of the attribute group.
+    id :: Prelude.Maybe Prelude.Text,
+    -- | The ISO-8601 formatted timestamp of the moment the attribute group was
+    -- last updated. This time is the same as the creationTime for a newly
+    -- created attribute group.
+    lastUpdateTime :: Prelude.Maybe Data.ISO8601,
+    -- | The name of the attribute group.
+    name :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AttributeGroupSummary' 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:
+--
+-- 'arn', 'attributeGroupSummary_arn' - The Amazon resource name (ARN) that specifies the attribute group across
+-- services.
+--
+-- 'creationTime', 'attributeGroupSummary_creationTime' - The ISO-8601 formatted timestamp of the moment the attribute group was
+-- created.
+--
+-- 'description', 'attributeGroupSummary_description' - The description of the attribute group that the user provides.
+--
+-- 'id', 'attributeGroupSummary_id' - The globally unique attribute group identifier of the attribute group.
+--
+-- 'lastUpdateTime', 'attributeGroupSummary_lastUpdateTime' - The ISO-8601 formatted timestamp of the moment the attribute group was
+-- last updated. This time is the same as the creationTime for a newly
+-- created attribute group.
+--
+-- 'name', 'attributeGroupSummary_name' - The name of the attribute group.
+newAttributeGroupSummary ::
+  AttributeGroupSummary
+newAttributeGroupSummary =
+  AttributeGroupSummary'
+    { arn = Prelude.Nothing,
+      creationTime = Prelude.Nothing,
+      description = Prelude.Nothing,
+      id = Prelude.Nothing,
+      lastUpdateTime = Prelude.Nothing,
+      name = Prelude.Nothing
+    }
+
+-- | The Amazon resource name (ARN) that specifies the attribute group across
+-- services.
+attributeGroupSummary_arn :: Lens.Lens' AttributeGroupSummary (Prelude.Maybe Prelude.Text)
+attributeGroupSummary_arn = Lens.lens (\AttributeGroupSummary' {arn} -> arn) (\s@AttributeGroupSummary' {} a -> s {arn = a} :: AttributeGroupSummary)
+
+-- | The ISO-8601 formatted timestamp of the moment the attribute group was
+-- created.
+attributeGroupSummary_creationTime :: Lens.Lens' AttributeGroupSummary (Prelude.Maybe Prelude.UTCTime)
+attributeGroupSummary_creationTime = Lens.lens (\AttributeGroupSummary' {creationTime} -> creationTime) (\s@AttributeGroupSummary' {} a -> s {creationTime = a} :: AttributeGroupSummary) Prelude.. Lens.mapping Data._Time
+
+-- | The description of the attribute group that the user provides.
+attributeGroupSummary_description :: Lens.Lens' AttributeGroupSummary (Prelude.Maybe Prelude.Text)
+attributeGroupSummary_description = Lens.lens (\AttributeGroupSummary' {description} -> description) (\s@AttributeGroupSummary' {} a -> s {description = a} :: AttributeGroupSummary)
+
+-- | The globally unique attribute group identifier of the attribute group.
+attributeGroupSummary_id :: Lens.Lens' AttributeGroupSummary (Prelude.Maybe Prelude.Text)
+attributeGroupSummary_id = Lens.lens (\AttributeGroupSummary' {id} -> id) (\s@AttributeGroupSummary' {} a -> s {id = a} :: AttributeGroupSummary)
+
+-- | The ISO-8601 formatted timestamp of the moment the attribute group was
+-- last updated. This time is the same as the creationTime for a newly
+-- created attribute group.
+attributeGroupSummary_lastUpdateTime :: Lens.Lens' AttributeGroupSummary (Prelude.Maybe Prelude.UTCTime)
+attributeGroupSummary_lastUpdateTime = Lens.lens (\AttributeGroupSummary' {lastUpdateTime} -> lastUpdateTime) (\s@AttributeGroupSummary' {} a -> s {lastUpdateTime = a} :: AttributeGroupSummary) Prelude.. Lens.mapping Data._Time
+
+-- | The name of the attribute group.
+attributeGroupSummary_name :: Lens.Lens' AttributeGroupSummary (Prelude.Maybe Prelude.Text)
+attributeGroupSummary_name = Lens.lens (\AttributeGroupSummary' {name} -> name) (\s@AttributeGroupSummary' {} a -> s {name = a} :: AttributeGroupSummary)
+
+instance Data.FromJSON AttributeGroupSummary where
+  parseJSON =
+    Data.withObject
+      "AttributeGroupSummary"
+      ( \x ->
+          AttributeGroupSummary'
+            Prelude.<$> (x Data..:? "arn")
+            Prelude.<*> (x Data..:? "creationTime")
+            Prelude.<*> (x Data..:? "description")
+            Prelude.<*> (x Data..:? "id")
+            Prelude.<*> (x Data..:? "lastUpdateTime")
+            Prelude.<*> (x Data..:? "name")
+      )
+
+instance Prelude.Hashable AttributeGroupSummary where
+  hashWithSalt _salt AttributeGroupSummary' {..} =
+    _salt
+      `Prelude.hashWithSalt` arn
+      `Prelude.hashWithSalt` creationTime
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` id
+      `Prelude.hashWithSalt` lastUpdateTime
+      `Prelude.hashWithSalt` name
+
+instance Prelude.NFData AttributeGroupSummary where
+  rnf AttributeGroupSummary' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf creationTime
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf lastUpdateTime
+      `Prelude.seq` Prelude.rnf name
diff --git a/gen/Amazonka/ServiceCatalogAppRegistry/Types/Integrations.hs b/gen/Amazonka/ServiceCatalogAppRegistry/Types/Integrations.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ServiceCatalogAppRegistry/Types/Integrations.hs
@@ -0,0 +1,69 @@
+{-# 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.ServiceCatalogAppRegistry.Types.Integrations
+-- 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.ServiceCatalogAppRegistry.Types.Integrations where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import Amazonka.ServiceCatalogAppRegistry.Types.ResourceGroup
+
+-- | The information about the service integration.
+--
+-- /See:/ 'newIntegrations' smart constructor.
+data Integrations = Integrations'
+  { -- | The information about the resource group integration.
+    resourceGroup :: Prelude.Maybe ResourceGroup
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Integrations' 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:
+--
+-- 'resourceGroup', 'integrations_resourceGroup' - The information about the resource group integration.
+newIntegrations ::
+  Integrations
+newIntegrations =
+  Integrations' {resourceGroup = Prelude.Nothing}
+
+-- | The information about the resource group integration.
+integrations_resourceGroup :: Lens.Lens' Integrations (Prelude.Maybe ResourceGroup)
+integrations_resourceGroup = Lens.lens (\Integrations' {resourceGroup} -> resourceGroup) (\s@Integrations' {} a -> s {resourceGroup = a} :: Integrations)
+
+instance Data.FromJSON Integrations where
+  parseJSON =
+    Data.withObject
+      "Integrations"
+      ( \x ->
+          Integrations'
+            Prelude.<$> (x Data..:? "resourceGroup")
+      )
+
+instance Prelude.Hashable Integrations where
+  hashWithSalt _salt Integrations' {..} =
+    _salt `Prelude.hashWithSalt` resourceGroup
+
+instance Prelude.NFData Integrations where
+  rnf Integrations' {..} = Prelude.rnf resourceGroup
diff --git a/gen/Amazonka/ServiceCatalogAppRegistry/Types/Resource.hs b/gen/Amazonka/ServiceCatalogAppRegistry/Types/Resource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ServiceCatalogAppRegistry/Types/Resource.hs
@@ -0,0 +1,109 @@
+{-# 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.ServiceCatalogAppRegistry.Types.Resource
+-- 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.ServiceCatalogAppRegistry.Types.Resource where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import Amazonka.ServiceCatalogAppRegistry.Types.ResourceIntegrations
+
+-- | The information about the resource.
+--
+-- /See:/ 'newResource' smart constructor.
+data Resource = Resource'
+  { -- | The Amazon resource name (ARN) of the resource.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | The time the resource was associated with the application.
+    associationTime :: Prelude.Maybe Data.ISO8601,
+    -- | The service integration information about the resource.
+    integrations :: Prelude.Maybe ResourceIntegrations,
+    -- | The name of the resource.
+    name :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Resource' 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:
+--
+-- 'arn', 'resource_arn' - The Amazon resource name (ARN) of the resource.
+--
+-- 'associationTime', 'resource_associationTime' - The time the resource was associated with the application.
+--
+-- 'integrations', 'resource_integrations' - The service integration information about the resource.
+--
+-- 'name', 'resource_name' - The name of the resource.
+newResource ::
+  Resource
+newResource =
+  Resource'
+    { arn = Prelude.Nothing,
+      associationTime = Prelude.Nothing,
+      integrations = Prelude.Nothing,
+      name = Prelude.Nothing
+    }
+
+-- | The Amazon resource name (ARN) of the resource.
+resource_arn :: Lens.Lens' Resource (Prelude.Maybe Prelude.Text)
+resource_arn = Lens.lens (\Resource' {arn} -> arn) (\s@Resource' {} a -> s {arn = a} :: Resource)
+
+-- | The time the resource was associated with the application.
+resource_associationTime :: Lens.Lens' Resource (Prelude.Maybe Prelude.UTCTime)
+resource_associationTime = Lens.lens (\Resource' {associationTime} -> associationTime) (\s@Resource' {} a -> s {associationTime = a} :: Resource) Prelude.. Lens.mapping Data._Time
+
+-- | The service integration information about the resource.
+resource_integrations :: Lens.Lens' Resource (Prelude.Maybe ResourceIntegrations)
+resource_integrations = Lens.lens (\Resource' {integrations} -> integrations) (\s@Resource' {} a -> s {integrations = a} :: Resource)
+
+-- | The name of the resource.
+resource_name :: Lens.Lens' Resource (Prelude.Maybe Prelude.Text)
+resource_name = Lens.lens (\Resource' {name} -> name) (\s@Resource' {} a -> s {name = a} :: Resource)
+
+instance Data.FromJSON Resource where
+  parseJSON =
+    Data.withObject
+      "Resource"
+      ( \x ->
+          Resource'
+            Prelude.<$> (x Data..:? "arn")
+            Prelude.<*> (x Data..:? "associationTime")
+            Prelude.<*> (x Data..:? "integrations")
+            Prelude.<*> (x Data..:? "name")
+      )
+
+instance Prelude.Hashable Resource where
+  hashWithSalt _salt Resource' {..} =
+    _salt
+      `Prelude.hashWithSalt` arn
+      `Prelude.hashWithSalt` associationTime
+      `Prelude.hashWithSalt` integrations
+      `Prelude.hashWithSalt` name
+
+instance Prelude.NFData Resource where
+  rnf Resource' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf associationTime
+      `Prelude.seq` Prelude.rnf integrations
+      `Prelude.seq` Prelude.rnf name
diff --git a/gen/Amazonka/ServiceCatalogAppRegistry/Types/ResourceDetails.hs b/gen/Amazonka/ServiceCatalogAppRegistry/Types/ResourceDetails.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ServiceCatalogAppRegistry/Types/ResourceDetails.hs
@@ -0,0 +1,67 @@
+{-# 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.ServiceCatalogAppRegistry.Types.ResourceDetails
+-- 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.ServiceCatalogAppRegistry.Types.ResourceDetails where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | The details related to the resource.
+--
+-- /See:/ 'newResourceDetails' smart constructor.
+data ResourceDetails = ResourceDetails'
+  { -- | The value of the tag.
+    tagValue :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ResourceDetails' 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:
+--
+-- 'tagValue', 'resourceDetails_tagValue' - The value of the tag.
+newResourceDetails ::
+  ResourceDetails
+newResourceDetails =
+  ResourceDetails' {tagValue = Prelude.Nothing}
+
+-- | The value of the tag.
+resourceDetails_tagValue :: Lens.Lens' ResourceDetails (Prelude.Maybe Prelude.Text)
+resourceDetails_tagValue = Lens.lens (\ResourceDetails' {tagValue} -> tagValue) (\s@ResourceDetails' {} a -> s {tagValue = a} :: ResourceDetails)
+
+instance Data.FromJSON ResourceDetails where
+  parseJSON =
+    Data.withObject
+      "ResourceDetails"
+      ( \x ->
+          ResourceDetails' Prelude.<$> (x Data..:? "tagValue")
+      )
+
+instance Prelude.Hashable ResourceDetails where
+  hashWithSalt _salt ResourceDetails' {..} =
+    _salt `Prelude.hashWithSalt` tagValue
+
+instance Prelude.NFData ResourceDetails where
+  rnf ResourceDetails' {..} = Prelude.rnf tagValue
diff --git a/gen/Amazonka/ServiceCatalogAppRegistry/Types/ResourceGroup.hs b/gen/Amazonka/ServiceCatalogAppRegistry/Types/ResourceGroup.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ServiceCatalogAppRegistry/Types/ResourceGroup.hs
@@ -0,0 +1,139 @@
+{-# 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.ServiceCatalogAppRegistry.Types.ResourceGroup
+-- 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.ServiceCatalogAppRegistry.Types.ResourceGroup where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import Amazonka.ServiceCatalogAppRegistry.Types.ResourceGroupState
+
+-- | The information about the resource group integration.
+--
+-- /See:/ 'newResourceGroup' smart constructor.
+data ResourceGroup = ResourceGroup'
+  { -- | The Amazon resource name (ARN) of the resource group.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | The error message that generates when the propagation process for the
+    -- resource group fails.
+    errorMessage :: Prelude.Maybe Prelude.Text,
+    -- | The state of the propagation process for the resource group. The states
+    -- includes:
+    --
+    -- @CREATING @if the resource group is in the process of being created.
+    --
+    -- @CREATE_COMPLETE@ if the resource group was created successfully.
+    --
+    -- @CREATE_FAILED@ if the resource group failed to be created.
+    --
+    -- @UPDATING@ if the resource group is in the process of being updated.
+    --
+    -- @UPDATE_COMPLETE@ if the resource group updated successfully.
+    --
+    -- @UPDATE_FAILED@ if the resource group could not update successfully.
+    state :: Prelude.Maybe ResourceGroupState
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ResourceGroup' 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:
+--
+-- 'arn', 'resourceGroup_arn' - The Amazon resource name (ARN) of the resource group.
+--
+-- 'errorMessage', 'resourceGroup_errorMessage' - The error message that generates when the propagation process for the
+-- resource group fails.
+--
+-- 'state', 'resourceGroup_state' - The state of the propagation process for the resource group. The states
+-- includes:
+--
+-- @CREATING @if the resource group is in the process of being created.
+--
+-- @CREATE_COMPLETE@ if the resource group was created successfully.
+--
+-- @CREATE_FAILED@ if the resource group failed to be created.
+--
+-- @UPDATING@ if the resource group is in the process of being updated.
+--
+-- @UPDATE_COMPLETE@ if the resource group updated successfully.
+--
+-- @UPDATE_FAILED@ if the resource group could not update successfully.
+newResourceGroup ::
+  ResourceGroup
+newResourceGroup =
+  ResourceGroup'
+    { arn = Prelude.Nothing,
+      errorMessage = Prelude.Nothing,
+      state = Prelude.Nothing
+    }
+
+-- | The Amazon resource name (ARN) of the resource group.
+resourceGroup_arn :: Lens.Lens' ResourceGroup (Prelude.Maybe Prelude.Text)
+resourceGroup_arn = Lens.lens (\ResourceGroup' {arn} -> arn) (\s@ResourceGroup' {} a -> s {arn = a} :: ResourceGroup)
+
+-- | The error message that generates when the propagation process for the
+-- resource group fails.
+resourceGroup_errorMessage :: Lens.Lens' ResourceGroup (Prelude.Maybe Prelude.Text)
+resourceGroup_errorMessage = Lens.lens (\ResourceGroup' {errorMessage} -> errorMessage) (\s@ResourceGroup' {} a -> s {errorMessage = a} :: ResourceGroup)
+
+-- | The state of the propagation process for the resource group. The states
+-- includes:
+--
+-- @CREATING @if the resource group is in the process of being created.
+--
+-- @CREATE_COMPLETE@ if the resource group was created successfully.
+--
+-- @CREATE_FAILED@ if the resource group failed to be created.
+--
+-- @UPDATING@ if the resource group is in the process of being updated.
+--
+-- @UPDATE_COMPLETE@ if the resource group updated successfully.
+--
+-- @UPDATE_FAILED@ if the resource group could not update successfully.
+resourceGroup_state :: Lens.Lens' ResourceGroup (Prelude.Maybe ResourceGroupState)
+resourceGroup_state = Lens.lens (\ResourceGroup' {state} -> state) (\s@ResourceGroup' {} a -> s {state = a} :: ResourceGroup)
+
+instance Data.FromJSON ResourceGroup where
+  parseJSON =
+    Data.withObject
+      "ResourceGroup"
+      ( \x ->
+          ResourceGroup'
+            Prelude.<$> (x Data..:? "arn")
+            Prelude.<*> (x Data..:? "errorMessage")
+            Prelude.<*> (x Data..:? "state")
+      )
+
+instance Prelude.Hashable ResourceGroup where
+  hashWithSalt _salt ResourceGroup' {..} =
+    _salt
+      `Prelude.hashWithSalt` arn
+      `Prelude.hashWithSalt` errorMessage
+      `Prelude.hashWithSalt` state
+
+instance Prelude.NFData ResourceGroup where
+  rnf ResourceGroup' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf errorMessage
+      `Prelude.seq` Prelude.rnf state
diff --git a/gen/Amazonka/ServiceCatalogAppRegistry/Types/ResourceGroupState.hs b/gen/Amazonka/ServiceCatalogAppRegistry/Types/ResourceGroupState.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ServiceCatalogAppRegistry/Types/ResourceGroupState.hs
@@ -0,0 +1,91 @@
+{-# 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.ServiceCatalogAppRegistry.Types.ResourceGroupState
+-- 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.ServiceCatalogAppRegistry.Types.ResourceGroupState
+  ( ResourceGroupState
+      ( ..,
+        ResourceGroupState_CREATE_COMPLETE,
+        ResourceGroupState_CREATE_FAILED,
+        ResourceGroupState_CREATING,
+        ResourceGroupState_UPDATE_COMPLETE,
+        ResourceGroupState_UPDATE_FAILED,
+        ResourceGroupState_UPDATING
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype ResourceGroupState = ResourceGroupState'
+  { fromResourceGroupState ::
+      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 ResourceGroupState_CREATE_COMPLETE :: ResourceGroupState
+pattern ResourceGroupState_CREATE_COMPLETE = ResourceGroupState' "CREATE_COMPLETE"
+
+pattern ResourceGroupState_CREATE_FAILED :: ResourceGroupState
+pattern ResourceGroupState_CREATE_FAILED = ResourceGroupState' "CREATE_FAILED"
+
+pattern ResourceGroupState_CREATING :: ResourceGroupState
+pattern ResourceGroupState_CREATING = ResourceGroupState' "CREATING"
+
+pattern ResourceGroupState_UPDATE_COMPLETE :: ResourceGroupState
+pattern ResourceGroupState_UPDATE_COMPLETE = ResourceGroupState' "UPDATE_COMPLETE"
+
+pattern ResourceGroupState_UPDATE_FAILED :: ResourceGroupState
+pattern ResourceGroupState_UPDATE_FAILED = ResourceGroupState' "UPDATE_FAILED"
+
+pattern ResourceGroupState_UPDATING :: ResourceGroupState
+pattern ResourceGroupState_UPDATING = ResourceGroupState' "UPDATING"
+
+{-# COMPLETE
+  ResourceGroupState_CREATE_COMPLETE,
+  ResourceGroupState_CREATE_FAILED,
+  ResourceGroupState_CREATING,
+  ResourceGroupState_UPDATE_COMPLETE,
+  ResourceGroupState_UPDATE_FAILED,
+  ResourceGroupState_UPDATING,
+  ResourceGroupState'
+  #-}
diff --git a/gen/Amazonka/ServiceCatalogAppRegistry/Types/ResourceInfo.hs b/gen/Amazonka/ServiceCatalogAppRegistry/Types/ResourceInfo.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ServiceCatalogAppRegistry/Types/ResourceInfo.hs
@@ -0,0 +1,116 @@
+{-# 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.ServiceCatalogAppRegistry.Types.ResourceInfo
+-- 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.ServiceCatalogAppRegistry.Types.ResourceInfo where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import Amazonka.ServiceCatalogAppRegistry.Types.ResourceDetails
+import Amazonka.ServiceCatalogAppRegistry.Types.ResourceType
+
+-- | The information about the resource.
+--
+-- /See:/ 'newResourceInfo' smart constructor.
+data ResourceInfo = ResourceInfo'
+  { -- | The Amazon resource name (ARN) that specifies the resource across
+    -- services.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | The name of the resource.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The details related to the resource.
+    resourceDetails :: Prelude.Maybe ResourceDetails,
+    -- | Provides information about the Service Catalog App Registry resource
+    -- type.
+    resourceType :: Prelude.Maybe ResourceType
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ResourceInfo' 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:
+--
+-- 'arn', 'resourceInfo_arn' - The Amazon resource name (ARN) that specifies the resource across
+-- services.
+--
+-- 'name', 'resourceInfo_name' - The name of the resource.
+--
+-- 'resourceDetails', 'resourceInfo_resourceDetails' - The details related to the resource.
+--
+-- 'resourceType', 'resourceInfo_resourceType' - Provides information about the Service Catalog App Registry resource
+-- type.
+newResourceInfo ::
+  ResourceInfo
+newResourceInfo =
+  ResourceInfo'
+    { arn = Prelude.Nothing,
+      name = Prelude.Nothing,
+      resourceDetails = Prelude.Nothing,
+      resourceType = Prelude.Nothing
+    }
+
+-- | The Amazon resource name (ARN) that specifies the resource across
+-- services.
+resourceInfo_arn :: Lens.Lens' ResourceInfo (Prelude.Maybe Prelude.Text)
+resourceInfo_arn = Lens.lens (\ResourceInfo' {arn} -> arn) (\s@ResourceInfo' {} a -> s {arn = a} :: ResourceInfo)
+
+-- | The name of the resource.
+resourceInfo_name :: Lens.Lens' ResourceInfo (Prelude.Maybe Prelude.Text)
+resourceInfo_name = Lens.lens (\ResourceInfo' {name} -> name) (\s@ResourceInfo' {} a -> s {name = a} :: ResourceInfo)
+
+-- | The details related to the resource.
+resourceInfo_resourceDetails :: Lens.Lens' ResourceInfo (Prelude.Maybe ResourceDetails)
+resourceInfo_resourceDetails = Lens.lens (\ResourceInfo' {resourceDetails} -> resourceDetails) (\s@ResourceInfo' {} a -> s {resourceDetails = a} :: ResourceInfo)
+
+-- | Provides information about the Service Catalog App Registry resource
+-- type.
+resourceInfo_resourceType :: Lens.Lens' ResourceInfo (Prelude.Maybe ResourceType)
+resourceInfo_resourceType = Lens.lens (\ResourceInfo' {resourceType} -> resourceType) (\s@ResourceInfo' {} a -> s {resourceType = a} :: ResourceInfo)
+
+instance Data.FromJSON ResourceInfo where
+  parseJSON =
+    Data.withObject
+      "ResourceInfo"
+      ( \x ->
+          ResourceInfo'
+            Prelude.<$> (x Data..:? "arn")
+            Prelude.<*> (x Data..:? "name")
+            Prelude.<*> (x Data..:? "resourceDetails")
+            Prelude.<*> (x Data..:? "resourceType")
+      )
+
+instance Prelude.Hashable ResourceInfo where
+  hashWithSalt _salt ResourceInfo' {..} =
+    _salt
+      `Prelude.hashWithSalt` arn
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` resourceDetails
+      `Prelude.hashWithSalt` resourceType
+
+instance Prelude.NFData ResourceInfo where
+  rnf ResourceInfo' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf resourceDetails
+      `Prelude.seq` Prelude.rnf resourceType
diff --git a/gen/Amazonka/ServiceCatalogAppRegistry/Types/ResourceIntegrations.hs b/gen/Amazonka/ServiceCatalogAppRegistry/Types/ResourceIntegrations.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ServiceCatalogAppRegistry/Types/ResourceIntegrations.hs
@@ -0,0 +1,73 @@
+{-# 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.ServiceCatalogAppRegistry.Types.ResourceIntegrations
+-- 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.ServiceCatalogAppRegistry.Types.ResourceIntegrations where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import Amazonka.ServiceCatalogAppRegistry.Types.ResourceGroup
+
+-- | The service integration information about the resource.
+--
+-- /See:/ 'newResourceIntegrations' smart constructor.
+data ResourceIntegrations = ResourceIntegrations'
+  { -- | The information about the integration of Resource Groups.
+    resourceGroup :: Prelude.Maybe ResourceGroup
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ResourceIntegrations' 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:
+--
+-- 'resourceGroup', 'resourceIntegrations_resourceGroup' - The information about the integration of Resource Groups.
+newResourceIntegrations ::
+  ResourceIntegrations
+newResourceIntegrations =
+  ResourceIntegrations'
+    { resourceGroup =
+        Prelude.Nothing
+    }
+
+-- | The information about the integration of Resource Groups.
+resourceIntegrations_resourceGroup :: Lens.Lens' ResourceIntegrations (Prelude.Maybe ResourceGroup)
+resourceIntegrations_resourceGroup = Lens.lens (\ResourceIntegrations' {resourceGroup} -> resourceGroup) (\s@ResourceIntegrations' {} a -> s {resourceGroup = a} :: ResourceIntegrations)
+
+instance Data.FromJSON ResourceIntegrations where
+  parseJSON =
+    Data.withObject
+      "ResourceIntegrations"
+      ( \x ->
+          ResourceIntegrations'
+            Prelude.<$> (x Data..:? "resourceGroup")
+      )
+
+instance Prelude.Hashable ResourceIntegrations where
+  hashWithSalt _salt ResourceIntegrations' {..} =
+    _salt `Prelude.hashWithSalt` resourceGroup
+
+instance Prelude.NFData ResourceIntegrations where
+  rnf ResourceIntegrations' {..} =
+    Prelude.rnf resourceGroup
diff --git a/gen/Amazonka/ServiceCatalogAppRegistry/Types/ResourceType.hs b/gen/Amazonka/ServiceCatalogAppRegistry/Types/ResourceType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ServiceCatalogAppRegistry/Types/ResourceType.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.ServiceCatalogAppRegistry.Types.ResourceType
+-- 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.ServiceCatalogAppRegistry.Types.ResourceType
+  ( ResourceType
+      ( ..,
+        ResourceType_CFN_STACK,
+        ResourceType_RESOURCE_TAG_VALUE
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype ResourceType = ResourceType'
+  { fromResourceType ::
+      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 ResourceType_CFN_STACK :: ResourceType
+pattern ResourceType_CFN_STACK = ResourceType' "CFN_STACK"
+
+pattern ResourceType_RESOURCE_TAG_VALUE :: ResourceType
+pattern ResourceType_RESOURCE_TAG_VALUE = ResourceType' "RESOURCE_TAG_VALUE"
+
+{-# COMPLETE
+  ResourceType_CFN_STACK,
+  ResourceType_RESOURCE_TAG_VALUE,
+  ResourceType'
+  #-}
diff --git a/gen/Amazonka/ServiceCatalogAppRegistry/Types/SyncAction.hs b/gen/Amazonka/ServiceCatalogAppRegistry/Types/SyncAction.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ServiceCatalogAppRegistry/Types/SyncAction.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.ServiceCatalogAppRegistry.Types.SyncAction
+-- 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.ServiceCatalogAppRegistry.Types.SyncAction
+  ( SyncAction
+      ( ..,
+        SyncAction_NO_ACTION,
+        SyncAction_START_SYNC
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype SyncAction = SyncAction'
+  { fromSyncAction ::
+      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 SyncAction_NO_ACTION :: SyncAction
+pattern SyncAction_NO_ACTION = SyncAction' "NO_ACTION"
+
+pattern SyncAction_START_SYNC :: SyncAction
+pattern SyncAction_START_SYNC = SyncAction' "START_SYNC"
+
+{-# COMPLETE
+  SyncAction_NO_ACTION,
+  SyncAction_START_SYNC,
+  SyncAction'
+  #-}
diff --git a/gen/Amazonka/ServiceCatalogAppRegistry/Types/TagQueryConfiguration.hs b/gen/Amazonka/ServiceCatalogAppRegistry/Types/TagQueryConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ServiceCatalogAppRegistry/Types/TagQueryConfiguration.hs
@@ -0,0 +1,76 @@
+{-# 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.ServiceCatalogAppRegistry.Types.TagQueryConfiguration
+-- 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.ServiceCatalogAppRegistry.Types.TagQueryConfiguration where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | The definition of @tagQuery@. Specifies which resources are associated
+-- with an application.
+--
+-- /See:/ 'newTagQueryConfiguration' smart constructor.
+data TagQueryConfiguration = TagQueryConfiguration'
+  { -- | Condition in the IAM policy that associates resources to an application.
+    tagKey :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TagQueryConfiguration' 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:
+--
+-- 'tagKey', 'tagQueryConfiguration_tagKey' - Condition in the IAM policy that associates resources to an application.
+newTagQueryConfiguration ::
+  TagQueryConfiguration
+newTagQueryConfiguration =
+  TagQueryConfiguration' {tagKey = Prelude.Nothing}
+
+-- | Condition in the IAM policy that associates resources to an application.
+tagQueryConfiguration_tagKey :: Lens.Lens' TagQueryConfiguration (Prelude.Maybe Prelude.Text)
+tagQueryConfiguration_tagKey = Lens.lens (\TagQueryConfiguration' {tagKey} -> tagKey) (\s@TagQueryConfiguration' {} a -> s {tagKey = a} :: TagQueryConfiguration)
+
+instance Data.FromJSON TagQueryConfiguration where
+  parseJSON =
+    Data.withObject
+      "TagQueryConfiguration"
+      ( \x ->
+          TagQueryConfiguration'
+            Prelude.<$> (x Data..:? "tagKey")
+      )
+
+instance Prelude.Hashable TagQueryConfiguration where
+  hashWithSalt _salt TagQueryConfiguration' {..} =
+    _salt `Prelude.hashWithSalt` tagKey
+
+instance Prelude.NFData TagQueryConfiguration where
+  rnf TagQueryConfiguration' {..} = Prelude.rnf tagKey
+
+instance Data.ToJSON TagQueryConfiguration where
+  toJSON TagQueryConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [("tagKey" Data..=) Prelude.<$> tagKey]
+      )
diff --git a/gen/Amazonka/ServiceCatalogAppRegistry/UntagResource.hs b/gen/Amazonka/ServiceCatalogAppRegistry/UntagResource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ServiceCatalogAppRegistry/UntagResource.hs
@@ -0,0 +1,163 @@
+{-# 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.ServiceCatalogAppRegistry.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 tags from a resource.
+--
+-- This operation returns an empty response if the call was successful.
+module Amazonka.ServiceCatalogAppRegistry.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 qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.ServiceCatalogAppRegistry.Types
+
+-- | /See:/ 'newUntagResource' smart constructor.
+data UntagResource = UntagResource'
+  { -- | The Amazon resource name (ARN) that specifies the resource.
+    resourceArn :: Prelude.Text,
+    -- | A list of the tag keys to remove from the specified resource.
+    tagKeys :: [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' - The Amazon resource name (ARN) that specifies the resource.
+--
+-- 'tagKeys', 'untagResource_tagKeys' - A list of the tag keys to remove from the specified resource.
+newUntagResource ::
+  -- | 'resourceArn'
+  Prelude.Text ->
+  UntagResource
+newUntagResource pResourceArn_ =
+  UntagResource'
+    { resourceArn = pResourceArn_,
+      tagKeys = Prelude.mempty
+    }
+
+-- | The Amazon resource name (ARN) that specifies the resource.
+untagResource_resourceArn :: Lens.Lens' UntagResource Prelude.Text
+untagResource_resourceArn = Lens.lens (\UntagResource' {resourceArn} -> resourceArn) (\s@UntagResource' {} a -> s {resourceArn = a} :: UntagResource)
+
+-- | A list of the tag keys to remove from the specified resource.
+untagResource_tagKeys :: Lens.Lens' UntagResource [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.delete (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.ToPath UntagResource where
+  toPath UntagResource' {..} =
+    Prelude.mconcat ["/tags/", Data.toBS resourceArn]
+
+instance Data.ToQuery UntagResource where
+  toQuery UntagResource' {..} =
+    Prelude.mconcat
+      ["tagKeys" Data.=: Data.toQueryList "member" tagKeys]
+
+-- | /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/ServiceCatalogAppRegistry/UpdateApplication.hs b/gen/Amazonka/ServiceCatalogAppRegistry/UpdateApplication.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ServiceCatalogAppRegistry/UpdateApplication.hs
@@ -0,0 +1,202 @@
+{-# 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.ServiceCatalogAppRegistry.UpdateApplication
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Updates an existing application with new attributes.
+module Amazonka.ServiceCatalogAppRegistry.UpdateApplication
+  ( -- * Creating a Request
+    UpdateApplication (..),
+    newUpdateApplication,
+
+    -- * Request Lenses
+    updateApplication_description,
+    updateApplication_name,
+    updateApplication_application,
+
+    -- * Destructuring the Response
+    UpdateApplicationResponse (..),
+    newUpdateApplicationResponse,
+
+    -- * Response Lenses
+    updateApplicationResponse_application,
+    updateApplicationResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.ServiceCatalogAppRegistry.Types
+
+-- | /See:/ 'newUpdateApplication' smart constructor.
+data UpdateApplication = UpdateApplication'
+  { -- | The new description of the application.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | Deprecated: The new name of the application. The name must be unique in
+    -- the region in which you are updating the application. Please do not use
+    -- this field as we have stopped supporting name updates.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The name or ID of the application that will be updated.
+    application :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateApplication' 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:
+--
+-- 'description', 'updateApplication_description' - The new description of the application.
+--
+-- 'name', 'updateApplication_name' - Deprecated: The new name of the application. The name must be unique in
+-- the region in which you are updating the application. Please do not use
+-- this field as we have stopped supporting name updates.
+--
+-- 'application', 'updateApplication_application' - The name or ID of the application that will be updated.
+newUpdateApplication ::
+  -- | 'application'
+  Prelude.Text ->
+  UpdateApplication
+newUpdateApplication pApplication_ =
+  UpdateApplication'
+    { description = Prelude.Nothing,
+      name = Prelude.Nothing,
+      application = pApplication_
+    }
+
+-- | The new description of the application.
+updateApplication_description :: Lens.Lens' UpdateApplication (Prelude.Maybe Prelude.Text)
+updateApplication_description = Lens.lens (\UpdateApplication' {description} -> description) (\s@UpdateApplication' {} a -> s {description = a} :: UpdateApplication)
+
+-- | Deprecated: The new name of the application. The name must be unique in
+-- the region in which you are updating the application. Please do not use
+-- this field as we have stopped supporting name updates.
+updateApplication_name :: Lens.Lens' UpdateApplication (Prelude.Maybe Prelude.Text)
+updateApplication_name = Lens.lens (\UpdateApplication' {name} -> name) (\s@UpdateApplication' {} a -> s {name = a} :: UpdateApplication)
+
+-- | The name or ID of the application that will be updated.
+updateApplication_application :: Lens.Lens' UpdateApplication Prelude.Text
+updateApplication_application = Lens.lens (\UpdateApplication' {application} -> application) (\s@UpdateApplication' {} a -> s {application = a} :: UpdateApplication)
+
+instance Core.AWSRequest UpdateApplication where
+  type
+    AWSResponse UpdateApplication =
+      UpdateApplicationResponse
+  request overrides =
+    Request.patchJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          UpdateApplicationResponse'
+            Prelude.<$> (x Data..?> "application")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UpdateApplication where
+  hashWithSalt _salt UpdateApplication' {..} =
+    _salt
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` application
+
+instance Prelude.NFData UpdateApplication where
+  rnf UpdateApplication' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf application
+
+instance Data.ToHeaders UpdateApplication where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateApplication where
+  toJSON UpdateApplication' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("description" Data..=) Prelude.<$> description,
+            ("name" Data..=) Prelude.<$> name
+          ]
+      )
+
+instance Data.ToPath UpdateApplication where
+  toPath UpdateApplication' {..} =
+    Prelude.mconcat
+      ["/applications/", Data.toBS application]
+
+instance Data.ToQuery UpdateApplication where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateApplicationResponse' smart constructor.
+data UpdateApplicationResponse = UpdateApplicationResponse'
+  { -- | The updated information of the application.
+    application :: Prelude.Maybe Application,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateApplicationResponse' 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:
+--
+-- 'application', 'updateApplicationResponse_application' - The updated information of the application.
+--
+-- 'httpStatus', 'updateApplicationResponse_httpStatus' - The response's http status code.
+newUpdateApplicationResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UpdateApplicationResponse
+newUpdateApplicationResponse pHttpStatus_ =
+  UpdateApplicationResponse'
+    { application =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The updated information of the application.
+updateApplicationResponse_application :: Lens.Lens' UpdateApplicationResponse (Prelude.Maybe Application)
+updateApplicationResponse_application = Lens.lens (\UpdateApplicationResponse' {application} -> application) (\s@UpdateApplicationResponse' {} a -> s {application = a} :: UpdateApplicationResponse)
+
+-- | The response's http status code.
+updateApplicationResponse_httpStatus :: Lens.Lens' UpdateApplicationResponse Prelude.Int
+updateApplicationResponse_httpStatus = Lens.lens (\UpdateApplicationResponse' {httpStatus} -> httpStatus) (\s@UpdateApplicationResponse' {} a -> s {httpStatus = a} :: UpdateApplicationResponse)
+
+instance Prelude.NFData UpdateApplicationResponse where
+  rnf UpdateApplicationResponse' {..} =
+    Prelude.rnf application
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ServiceCatalogAppRegistry/UpdateAttributeGroup.hs b/gen/Amazonka/ServiceCatalogAppRegistry/UpdateAttributeGroup.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ServiceCatalogAppRegistry/UpdateAttributeGroup.hs
@@ -0,0 +1,221 @@
+{-# 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.ServiceCatalogAppRegistry.UpdateAttributeGroup
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Updates an existing attribute group with new details.
+module Amazonka.ServiceCatalogAppRegistry.UpdateAttributeGroup
+  ( -- * Creating a Request
+    UpdateAttributeGroup (..),
+    newUpdateAttributeGroup,
+
+    -- * Request Lenses
+    updateAttributeGroup_attributes,
+    updateAttributeGroup_description,
+    updateAttributeGroup_name,
+    updateAttributeGroup_attributeGroup,
+
+    -- * Destructuring the Response
+    UpdateAttributeGroupResponse (..),
+    newUpdateAttributeGroupResponse,
+
+    -- * Response Lenses
+    updateAttributeGroupResponse_attributeGroup,
+    updateAttributeGroupResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.ServiceCatalogAppRegistry.Types
+
+-- | /See:/ 'newUpdateAttributeGroup' smart constructor.
+data UpdateAttributeGroup = UpdateAttributeGroup'
+  { -- | A JSON string in the form of nested key-value pairs that represent the
+    -- attributes in the group and describes an application and its components.
+    attributes :: Prelude.Maybe Prelude.Text,
+    -- | The description of the attribute group that the user provides.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | Deprecated: The new name of the attribute group. The name must be unique
+    -- in the region in which you are updating the attribute group. Please do
+    -- not use this field as we have stopped supporting name updates.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The name or ID of the attribute group that holds the attributes to
+    -- describe the application.
+    attributeGroup :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateAttributeGroup' 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:
+--
+-- 'attributes', 'updateAttributeGroup_attributes' - A JSON string in the form of nested key-value pairs that represent the
+-- attributes in the group and describes an application and its components.
+--
+-- 'description', 'updateAttributeGroup_description' - The description of the attribute group that the user provides.
+--
+-- 'name', 'updateAttributeGroup_name' - Deprecated: The new name of the attribute group. The name must be unique
+-- in the region in which you are updating the attribute group. Please do
+-- not use this field as we have stopped supporting name updates.
+--
+-- 'attributeGroup', 'updateAttributeGroup_attributeGroup' - The name or ID of the attribute group that holds the attributes to
+-- describe the application.
+newUpdateAttributeGroup ::
+  -- | 'attributeGroup'
+  Prelude.Text ->
+  UpdateAttributeGroup
+newUpdateAttributeGroup pAttributeGroup_ =
+  UpdateAttributeGroup'
+    { attributes = Prelude.Nothing,
+      description = Prelude.Nothing,
+      name = Prelude.Nothing,
+      attributeGroup = pAttributeGroup_
+    }
+
+-- | A JSON string in the form of nested key-value pairs that represent the
+-- attributes in the group and describes an application and its components.
+updateAttributeGroup_attributes :: Lens.Lens' UpdateAttributeGroup (Prelude.Maybe Prelude.Text)
+updateAttributeGroup_attributes = Lens.lens (\UpdateAttributeGroup' {attributes} -> attributes) (\s@UpdateAttributeGroup' {} a -> s {attributes = a} :: UpdateAttributeGroup)
+
+-- | The description of the attribute group that the user provides.
+updateAttributeGroup_description :: Lens.Lens' UpdateAttributeGroup (Prelude.Maybe Prelude.Text)
+updateAttributeGroup_description = Lens.lens (\UpdateAttributeGroup' {description} -> description) (\s@UpdateAttributeGroup' {} a -> s {description = a} :: UpdateAttributeGroup)
+
+-- | Deprecated: The new name of the attribute group. The name must be unique
+-- in the region in which you are updating the attribute group. Please do
+-- not use this field as we have stopped supporting name updates.
+updateAttributeGroup_name :: Lens.Lens' UpdateAttributeGroup (Prelude.Maybe Prelude.Text)
+updateAttributeGroup_name = Lens.lens (\UpdateAttributeGroup' {name} -> name) (\s@UpdateAttributeGroup' {} a -> s {name = a} :: UpdateAttributeGroup)
+
+-- | The name or ID of the attribute group that holds the attributes to
+-- describe the application.
+updateAttributeGroup_attributeGroup :: Lens.Lens' UpdateAttributeGroup Prelude.Text
+updateAttributeGroup_attributeGroup = Lens.lens (\UpdateAttributeGroup' {attributeGroup} -> attributeGroup) (\s@UpdateAttributeGroup' {} a -> s {attributeGroup = a} :: UpdateAttributeGroup)
+
+instance Core.AWSRequest UpdateAttributeGroup where
+  type
+    AWSResponse UpdateAttributeGroup =
+      UpdateAttributeGroupResponse
+  request overrides =
+    Request.patchJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          UpdateAttributeGroupResponse'
+            Prelude.<$> (x Data..?> "attributeGroup")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UpdateAttributeGroup where
+  hashWithSalt _salt UpdateAttributeGroup' {..} =
+    _salt
+      `Prelude.hashWithSalt` attributes
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` attributeGroup
+
+instance Prelude.NFData UpdateAttributeGroup where
+  rnf UpdateAttributeGroup' {..} =
+    Prelude.rnf attributes
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf attributeGroup
+
+instance Data.ToHeaders UpdateAttributeGroup where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateAttributeGroup where
+  toJSON UpdateAttributeGroup' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("attributes" Data..=) Prelude.<$> attributes,
+            ("description" Data..=) Prelude.<$> description,
+            ("name" Data..=) Prelude.<$> name
+          ]
+      )
+
+instance Data.ToPath UpdateAttributeGroup where
+  toPath UpdateAttributeGroup' {..} =
+    Prelude.mconcat
+      ["/attribute-groups/", Data.toBS attributeGroup]
+
+instance Data.ToQuery UpdateAttributeGroup where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateAttributeGroupResponse' smart constructor.
+data UpdateAttributeGroupResponse = UpdateAttributeGroupResponse'
+  { -- | The updated information of the attribute group.
+    attributeGroup :: Prelude.Maybe AttributeGroup,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateAttributeGroupResponse' 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:
+--
+-- 'attributeGroup', 'updateAttributeGroupResponse_attributeGroup' - The updated information of the attribute group.
+--
+-- 'httpStatus', 'updateAttributeGroupResponse_httpStatus' - The response's http status code.
+newUpdateAttributeGroupResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UpdateAttributeGroupResponse
+newUpdateAttributeGroupResponse pHttpStatus_ =
+  UpdateAttributeGroupResponse'
+    { attributeGroup =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The updated information of the attribute group.
+updateAttributeGroupResponse_attributeGroup :: Lens.Lens' UpdateAttributeGroupResponse (Prelude.Maybe AttributeGroup)
+updateAttributeGroupResponse_attributeGroup = Lens.lens (\UpdateAttributeGroupResponse' {attributeGroup} -> attributeGroup) (\s@UpdateAttributeGroupResponse' {} a -> s {attributeGroup = a} :: UpdateAttributeGroupResponse)
+
+-- | The response's http status code.
+updateAttributeGroupResponse_httpStatus :: Lens.Lens' UpdateAttributeGroupResponse Prelude.Int
+updateAttributeGroupResponse_httpStatus = Lens.lens (\UpdateAttributeGroupResponse' {httpStatus} -> httpStatus) (\s@UpdateAttributeGroupResponse' {} a -> s {httpStatus = a} :: UpdateAttributeGroupResponse)
+
+instance Prelude.NFData UpdateAttributeGroupResponse where
+  rnf UpdateAttributeGroupResponse' {..} =
+    Prelude.rnf attributeGroup
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ServiceCatalogAppRegistry/Waiters.hs b/gen/Amazonka/ServiceCatalogAppRegistry/Waiters.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ServiceCatalogAppRegistry/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.ServiceCatalogAppRegistry.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.ServiceCatalogAppRegistry.Waiters where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import Amazonka.ServiceCatalogAppRegistry.Lens
+import Amazonka.ServiceCatalogAppRegistry.Types
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.ServiceCatalogAppRegistry
+import Test.Amazonka.ServiceCatalogAppRegistry.Internal
+import Test.Tasty
+
+main :: IO ()
+main =
+  defaultMain $
+    testGroup
+      "ServiceCatalogAppRegistry"
+      [ testGroup "tests" tests,
+        testGroup "fixtures" fixtures
+      ]
diff --git a/test/Test/Amazonka/Gen/ServiceCatalogAppRegistry.hs b/test/Test/Amazonka/Gen/ServiceCatalogAppRegistry.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/Gen/ServiceCatalogAppRegistry.hs
@@ -0,0 +1,518 @@
+{-# 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.ServiceCatalogAppRegistry
+-- 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.ServiceCatalogAppRegistry where
+
+import Amazonka.ServiceCatalogAppRegistry
+import qualified Data.Proxy as Proxy
+import Test.Amazonka.Fixture
+import Test.Amazonka.Prelude
+import Test.Amazonka.ServiceCatalogAppRegistry.Internal
+import Test.Tasty
+
+-- Auto-generated: the actual test selection needs to be manually placed into
+-- the top-level so that real test data can be incrementally added.
+--
+-- This commented snippet is what the entire set should look like:
+
+-- fixtures :: TestTree
+-- fixtures =
+--     [ testGroup "request"
+--         [ requestAssociateAttributeGroup $
+--             newAssociateAttributeGroup
+--
+--         , requestAssociateResource $
+--             newAssociateResource
+--
+--         , requestCreateApplication $
+--             newCreateApplication
+--
+--         , requestCreateAttributeGroup $
+--             newCreateAttributeGroup
+--
+--         , requestDeleteApplication $
+--             newDeleteApplication
+--
+--         , requestDeleteAttributeGroup $
+--             newDeleteAttributeGroup
+--
+--         , requestDisassociateAttributeGroup $
+--             newDisassociateAttributeGroup
+--
+--         , requestDisassociateResource $
+--             newDisassociateResource
+--
+--         , requestGetApplication $
+--             newGetApplication
+--
+--         , requestGetAssociatedResource $
+--             newGetAssociatedResource
+--
+--         , requestGetAttributeGroup $
+--             newGetAttributeGroup
+--
+--         , requestGetConfiguration $
+--             newGetConfiguration
+--
+--         , requestListApplications $
+--             newListApplications
+--
+--         , requestListAssociatedAttributeGroups $
+--             newListAssociatedAttributeGroups
+--
+--         , requestListAssociatedResources $
+--             newListAssociatedResources
+--
+--         , requestListAttributeGroups $
+--             newListAttributeGroups
+--
+--         , requestListAttributeGroupsForApplication $
+--             newListAttributeGroupsForApplication
+--
+--         , requestListTagsForResource $
+--             newListTagsForResource
+--
+--         , requestPutConfiguration $
+--             newPutConfiguration
+--
+--         , requestSyncResource $
+--             newSyncResource
+--
+--         , requestTagResource $
+--             newTagResource
+--
+--         , requestUntagResource $
+--             newUntagResource
+--
+--         , requestUpdateApplication $
+--             newUpdateApplication
+--
+--         , requestUpdateAttributeGroup $
+--             newUpdateAttributeGroup
+--
+--           ]
+
+--     , testGroup "response"
+--         [ responseAssociateAttributeGroup $
+--             newAssociateAttributeGroupResponse
+--
+--         , responseAssociateResource $
+--             newAssociateResourceResponse
+--
+--         , responseCreateApplication $
+--             newCreateApplicationResponse
+--
+--         , responseCreateAttributeGroup $
+--             newCreateAttributeGroupResponse
+--
+--         , responseDeleteApplication $
+--             newDeleteApplicationResponse
+--
+--         , responseDeleteAttributeGroup $
+--             newDeleteAttributeGroupResponse
+--
+--         , responseDisassociateAttributeGroup $
+--             newDisassociateAttributeGroupResponse
+--
+--         , responseDisassociateResource $
+--             newDisassociateResourceResponse
+--
+--         , responseGetApplication $
+--             newGetApplicationResponse
+--
+--         , responseGetAssociatedResource $
+--             newGetAssociatedResourceResponse
+--
+--         , responseGetAttributeGroup $
+--             newGetAttributeGroupResponse
+--
+--         , responseGetConfiguration $
+--             newGetConfigurationResponse
+--
+--         , responseListApplications $
+--             newListApplicationsResponse
+--
+--         , responseListAssociatedAttributeGroups $
+--             newListAssociatedAttributeGroupsResponse
+--
+--         , responseListAssociatedResources $
+--             newListAssociatedResourcesResponse
+--
+--         , responseListAttributeGroups $
+--             newListAttributeGroupsResponse
+--
+--         , responseListAttributeGroupsForApplication $
+--             newListAttributeGroupsForApplicationResponse
+--
+--         , responseListTagsForResource $
+--             newListTagsForResourceResponse
+--
+--         , responsePutConfiguration $
+--             newPutConfigurationResponse
+--
+--         , responseSyncResource $
+--             newSyncResourceResponse
+--
+--         , responseTagResource $
+--             newTagResourceResponse
+--
+--         , responseUntagResource $
+--             newUntagResourceResponse
+--
+--         , responseUpdateApplication $
+--             newUpdateApplicationResponse
+--
+--         , responseUpdateAttributeGroup $
+--             newUpdateAttributeGroupResponse
+--
+--           ]
+--     ]
+
+-- Requests
+
+requestAssociateAttributeGroup :: AssociateAttributeGroup -> TestTree
+requestAssociateAttributeGroup =
+  req
+    "AssociateAttributeGroup"
+    "fixture/AssociateAttributeGroup.yaml"
+
+requestAssociateResource :: AssociateResource -> TestTree
+requestAssociateResource =
+  req
+    "AssociateResource"
+    "fixture/AssociateResource.yaml"
+
+requestCreateApplication :: CreateApplication -> TestTree
+requestCreateApplication =
+  req
+    "CreateApplication"
+    "fixture/CreateApplication.yaml"
+
+requestCreateAttributeGroup :: CreateAttributeGroup -> TestTree
+requestCreateAttributeGroup =
+  req
+    "CreateAttributeGroup"
+    "fixture/CreateAttributeGroup.yaml"
+
+requestDeleteApplication :: DeleteApplication -> TestTree
+requestDeleteApplication =
+  req
+    "DeleteApplication"
+    "fixture/DeleteApplication.yaml"
+
+requestDeleteAttributeGroup :: DeleteAttributeGroup -> TestTree
+requestDeleteAttributeGroup =
+  req
+    "DeleteAttributeGroup"
+    "fixture/DeleteAttributeGroup.yaml"
+
+requestDisassociateAttributeGroup :: DisassociateAttributeGroup -> TestTree
+requestDisassociateAttributeGroup =
+  req
+    "DisassociateAttributeGroup"
+    "fixture/DisassociateAttributeGroup.yaml"
+
+requestDisassociateResource :: DisassociateResource -> TestTree
+requestDisassociateResource =
+  req
+    "DisassociateResource"
+    "fixture/DisassociateResource.yaml"
+
+requestGetApplication :: GetApplication -> TestTree
+requestGetApplication =
+  req
+    "GetApplication"
+    "fixture/GetApplication.yaml"
+
+requestGetAssociatedResource :: GetAssociatedResource -> TestTree
+requestGetAssociatedResource =
+  req
+    "GetAssociatedResource"
+    "fixture/GetAssociatedResource.yaml"
+
+requestGetAttributeGroup :: GetAttributeGroup -> TestTree
+requestGetAttributeGroup =
+  req
+    "GetAttributeGroup"
+    "fixture/GetAttributeGroup.yaml"
+
+requestGetConfiguration :: GetConfiguration -> TestTree
+requestGetConfiguration =
+  req
+    "GetConfiguration"
+    "fixture/GetConfiguration.yaml"
+
+requestListApplications :: ListApplications -> TestTree
+requestListApplications =
+  req
+    "ListApplications"
+    "fixture/ListApplications.yaml"
+
+requestListAssociatedAttributeGroups :: ListAssociatedAttributeGroups -> TestTree
+requestListAssociatedAttributeGroups =
+  req
+    "ListAssociatedAttributeGroups"
+    "fixture/ListAssociatedAttributeGroups.yaml"
+
+requestListAssociatedResources :: ListAssociatedResources -> TestTree
+requestListAssociatedResources =
+  req
+    "ListAssociatedResources"
+    "fixture/ListAssociatedResources.yaml"
+
+requestListAttributeGroups :: ListAttributeGroups -> TestTree
+requestListAttributeGroups =
+  req
+    "ListAttributeGroups"
+    "fixture/ListAttributeGroups.yaml"
+
+requestListAttributeGroupsForApplication :: ListAttributeGroupsForApplication -> TestTree
+requestListAttributeGroupsForApplication =
+  req
+    "ListAttributeGroupsForApplication"
+    "fixture/ListAttributeGroupsForApplication.yaml"
+
+requestListTagsForResource :: ListTagsForResource -> TestTree
+requestListTagsForResource =
+  req
+    "ListTagsForResource"
+    "fixture/ListTagsForResource.yaml"
+
+requestPutConfiguration :: PutConfiguration -> TestTree
+requestPutConfiguration =
+  req
+    "PutConfiguration"
+    "fixture/PutConfiguration.yaml"
+
+requestSyncResource :: SyncResource -> TestTree
+requestSyncResource =
+  req
+    "SyncResource"
+    "fixture/SyncResource.yaml"
+
+requestTagResource :: TagResource -> TestTree
+requestTagResource =
+  req
+    "TagResource"
+    "fixture/TagResource.yaml"
+
+requestUntagResource :: UntagResource -> TestTree
+requestUntagResource =
+  req
+    "UntagResource"
+    "fixture/UntagResource.yaml"
+
+requestUpdateApplication :: UpdateApplication -> TestTree
+requestUpdateApplication =
+  req
+    "UpdateApplication"
+    "fixture/UpdateApplication.yaml"
+
+requestUpdateAttributeGroup :: UpdateAttributeGroup -> TestTree
+requestUpdateAttributeGroup =
+  req
+    "UpdateAttributeGroup"
+    "fixture/UpdateAttributeGroup.yaml"
+
+-- Responses
+
+responseAssociateAttributeGroup :: AssociateAttributeGroupResponse -> TestTree
+responseAssociateAttributeGroup =
+  res
+    "AssociateAttributeGroupResponse"
+    "fixture/AssociateAttributeGroupResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy AssociateAttributeGroup)
+
+responseAssociateResource :: AssociateResourceResponse -> TestTree
+responseAssociateResource =
+  res
+    "AssociateResourceResponse"
+    "fixture/AssociateResourceResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy AssociateResource)
+
+responseCreateApplication :: CreateApplicationResponse -> TestTree
+responseCreateApplication =
+  res
+    "CreateApplicationResponse"
+    "fixture/CreateApplicationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateApplication)
+
+responseCreateAttributeGroup :: CreateAttributeGroupResponse -> TestTree
+responseCreateAttributeGroup =
+  res
+    "CreateAttributeGroupResponse"
+    "fixture/CreateAttributeGroupResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateAttributeGroup)
+
+responseDeleteApplication :: DeleteApplicationResponse -> TestTree
+responseDeleteApplication =
+  res
+    "DeleteApplicationResponse"
+    "fixture/DeleteApplicationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteApplication)
+
+responseDeleteAttributeGroup :: DeleteAttributeGroupResponse -> TestTree
+responseDeleteAttributeGroup =
+  res
+    "DeleteAttributeGroupResponse"
+    "fixture/DeleteAttributeGroupResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteAttributeGroup)
+
+responseDisassociateAttributeGroup :: DisassociateAttributeGroupResponse -> TestTree
+responseDisassociateAttributeGroup =
+  res
+    "DisassociateAttributeGroupResponse"
+    "fixture/DisassociateAttributeGroupResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DisassociateAttributeGroup)
+
+responseDisassociateResource :: DisassociateResourceResponse -> TestTree
+responseDisassociateResource =
+  res
+    "DisassociateResourceResponse"
+    "fixture/DisassociateResourceResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DisassociateResource)
+
+responseGetApplication :: GetApplicationResponse -> TestTree
+responseGetApplication =
+  res
+    "GetApplicationResponse"
+    "fixture/GetApplicationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetApplication)
+
+responseGetAssociatedResource :: GetAssociatedResourceResponse -> TestTree
+responseGetAssociatedResource =
+  res
+    "GetAssociatedResourceResponse"
+    "fixture/GetAssociatedResourceResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetAssociatedResource)
+
+responseGetAttributeGroup :: GetAttributeGroupResponse -> TestTree
+responseGetAttributeGroup =
+  res
+    "GetAttributeGroupResponse"
+    "fixture/GetAttributeGroupResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetAttributeGroup)
+
+responseGetConfiguration :: GetConfigurationResponse -> TestTree
+responseGetConfiguration =
+  res
+    "GetConfigurationResponse"
+    "fixture/GetConfigurationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetConfiguration)
+
+responseListApplications :: ListApplicationsResponse -> TestTree
+responseListApplications =
+  res
+    "ListApplicationsResponse"
+    "fixture/ListApplicationsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListApplications)
+
+responseListAssociatedAttributeGroups :: ListAssociatedAttributeGroupsResponse -> TestTree
+responseListAssociatedAttributeGroups =
+  res
+    "ListAssociatedAttributeGroupsResponse"
+    "fixture/ListAssociatedAttributeGroupsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListAssociatedAttributeGroups)
+
+responseListAssociatedResources :: ListAssociatedResourcesResponse -> TestTree
+responseListAssociatedResources =
+  res
+    "ListAssociatedResourcesResponse"
+    "fixture/ListAssociatedResourcesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListAssociatedResources)
+
+responseListAttributeGroups :: ListAttributeGroupsResponse -> TestTree
+responseListAttributeGroups =
+  res
+    "ListAttributeGroupsResponse"
+    "fixture/ListAttributeGroupsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListAttributeGroups)
+
+responseListAttributeGroupsForApplication :: ListAttributeGroupsForApplicationResponse -> TestTree
+responseListAttributeGroupsForApplication =
+  res
+    "ListAttributeGroupsForApplicationResponse"
+    "fixture/ListAttributeGroupsForApplicationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListAttributeGroupsForApplication)
+
+responseListTagsForResource :: ListTagsForResourceResponse -> TestTree
+responseListTagsForResource =
+  res
+    "ListTagsForResourceResponse"
+    "fixture/ListTagsForResourceResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListTagsForResource)
+
+responsePutConfiguration :: PutConfigurationResponse -> TestTree
+responsePutConfiguration =
+  res
+    "PutConfigurationResponse"
+    "fixture/PutConfigurationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy PutConfiguration)
+
+responseSyncResource :: SyncResourceResponse -> TestTree
+responseSyncResource =
+  res
+    "SyncResourceResponse"
+    "fixture/SyncResourceResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy SyncResource)
+
+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)
+
+responseUpdateApplication :: UpdateApplicationResponse -> TestTree
+responseUpdateApplication =
+  res
+    "UpdateApplicationResponse"
+    "fixture/UpdateApplicationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateApplication)
+
+responseUpdateAttributeGroup :: UpdateAttributeGroupResponse -> TestTree
+responseUpdateAttributeGroup =
+  res
+    "UpdateAttributeGroupResponse"
+    "fixture/UpdateAttributeGroupResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateAttributeGroup)
diff --git a/test/Test/Amazonka/ServiceCatalogAppRegistry.hs b/test/Test/Amazonka/ServiceCatalogAppRegistry.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/ServiceCatalogAppRegistry.hs
@@ -0,0 +1,20 @@
+-- |
+-- Module      : Test.Amazonka.ServiceCatalogAppRegistry
+-- 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.ServiceCatalogAppRegistry
+  ( tests,
+    fixtures,
+  )
+where
+
+import Test.Tasty (TestTree)
+
+tests :: [TestTree]
+tests = []
+
+fixtures :: [TestTree]
+fixtures = []
diff --git a/test/Test/Amazonka/ServiceCatalogAppRegistry/Internal.hs b/test/Test/Amazonka/ServiceCatalogAppRegistry/Internal.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/ServiceCatalogAppRegistry/Internal.hs
@@ -0,0 +1,8 @@
+-- |
+-- Module      : Test.Amazonka.ServiceCatalogAppRegistry.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.ServiceCatalogAppRegistry.Internal where
