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 Chime SDK Identity SDK
+
+* [Version](#version)
+* [Description](#description)
+* [Contribute](#contribute)
+* [Licence](#licence)
+
+
+## Version
+ 
+`2.0` - Derived from API version @2021-04-20@ of the AWS service descriptions, licensed under Apache 2.0.
+
+## Description
+
+Documentation is available via [Hackage](http://hackage.haskell.org/package/amazonka-chime-sdk-identity)
+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.ChimeSDKIdentity](http://hackage.haskell.org/package/amazonka-chime-sdk-identity/docs/Amazonka-ChimeSDKIdentity.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-chime-sdk-identity` 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-chime-sdk-identity.cabal b/amazonka-chime-sdk-identity.cabal
new file mode 100644
--- /dev/null
+++ b/amazonka-chime-sdk-identity.cabal
@@ -0,0 +1,125 @@
+cabal-version:      2.2
+name:               amazonka-chime-sdk-identity
+version:            2.0
+synopsis:           Amazon Chime SDK Identity 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 @2021-04-20@ 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.ChimeSDKIdentity.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.ChimeSDKIdentity" 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-chime-sdk-identity
+
+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.ChimeSDKIdentity
+    Amazonka.ChimeSDKIdentity.CreateAppInstance
+    Amazonka.ChimeSDKIdentity.CreateAppInstanceAdmin
+    Amazonka.ChimeSDKIdentity.CreateAppInstanceUser
+    Amazonka.ChimeSDKIdentity.DeleteAppInstance
+    Amazonka.ChimeSDKIdentity.DeleteAppInstanceAdmin
+    Amazonka.ChimeSDKIdentity.DeleteAppInstanceUser
+    Amazonka.ChimeSDKIdentity.DeregisterAppInstanceUserEndpoint
+    Amazonka.ChimeSDKIdentity.DescribeAppInstance
+    Amazonka.ChimeSDKIdentity.DescribeAppInstanceAdmin
+    Amazonka.ChimeSDKIdentity.DescribeAppInstanceUser
+    Amazonka.ChimeSDKIdentity.DescribeAppInstanceUserEndpoint
+    Amazonka.ChimeSDKIdentity.GetAppInstanceRetentionSettings
+    Amazonka.ChimeSDKIdentity.Lens
+    Amazonka.ChimeSDKIdentity.ListAppInstanceAdmins
+    Amazonka.ChimeSDKIdentity.ListAppInstances
+    Amazonka.ChimeSDKIdentity.ListAppInstanceUserEndpoints
+    Amazonka.ChimeSDKIdentity.ListAppInstanceUsers
+    Amazonka.ChimeSDKIdentity.ListTagsForResource
+    Amazonka.ChimeSDKIdentity.PutAppInstanceRetentionSettings
+    Amazonka.ChimeSDKIdentity.RegisterAppInstanceUserEndpoint
+    Amazonka.ChimeSDKIdentity.TagResource
+    Amazonka.ChimeSDKIdentity.Types
+    Amazonka.ChimeSDKIdentity.Types.AllowMessages
+    Amazonka.ChimeSDKIdentity.Types.AppInstance
+    Amazonka.ChimeSDKIdentity.Types.AppInstanceAdmin
+    Amazonka.ChimeSDKIdentity.Types.AppInstanceAdminSummary
+    Amazonka.ChimeSDKIdentity.Types.AppInstanceRetentionSettings
+    Amazonka.ChimeSDKIdentity.Types.AppInstanceSummary
+    Amazonka.ChimeSDKIdentity.Types.AppInstanceUser
+    Amazonka.ChimeSDKIdentity.Types.AppInstanceUserEndpoint
+    Amazonka.ChimeSDKIdentity.Types.AppInstanceUserEndpointSummary
+    Amazonka.ChimeSDKIdentity.Types.AppInstanceUserEndpointType
+    Amazonka.ChimeSDKIdentity.Types.AppInstanceUserSummary
+    Amazonka.ChimeSDKIdentity.Types.ChannelRetentionSettings
+    Amazonka.ChimeSDKIdentity.Types.EndpointAttributes
+    Amazonka.ChimeSDKIdentity.Types.EndpointState
+    Amazonka.ChimeSDKIdentity.Types.EndpointStatus
+    Amazonka.ChimeSDKIdentity.Types.EndpointStatusReason
+    Amazonka.ChimeSDKIdentity.Types.Identity
+    Amazonka.ChimeSDKIdentity.Types.Tag
+    Amazonka.ChimeSDKIdentity.UntagResource
+    Amazonka.ChimeSDKIdentity.UpdateAppInstance
+    Amazonka.ChimeSDKIdentity.UpdateAppInstanceUser
+    Amazonka.ChimeSDKIdentity.UpdateAppInstanceUserEndpoint
+    Amazonka.ChimeSDKIdentity.Waiters
+
+  build-depends:
+    , amazonka-core  >=2.0  && <2.1
+    , base           >=4.12 && <5
+
+test-suite amazonka-chime-sdk-identity-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.ChimeSDKIdentity
+    Test.Amazonka.ChimeSDKIdentity.Internal
+    Test.Amazonka.Gen.ChimeSDKIdentity
+
+  build-depends:
+    , amazonka-chime-sdk-identity
+    , amazonka-core                >=2.0 && <2.1
+    , amazonka-test                >=2.0 && <2.1
+    , base
+    , bytestring
+    , case-insensitive
+    , tasty
+    , tasty-hunit
+    , text
+    , time
+    , unordered-containers
diff --git a/fixture/CreateAppInstance.yaml b/fixture/CreateAppInstance.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateAppInstance.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/identity-chime/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  identity-chime.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/CreateAppInstanceAdmin.yaml b/fixture/CreateAppInstanceAdmin.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateAppInstanceAdmin.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/identity-chime/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  identity-chime.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/CreateAppInstanceAdminResponse.proto b/fixture/CreateAppInstanceAdminResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateAppInstanceAdminResponse.proto
diff --git a/fixture/CreateAppInstanceResponse.proto b/fixture/CreateAppInstanceResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateAppInstanceResponse.proto
diff --git a/fixture/CreateAppInstanceUser.yaml b/fixture/CreateAppInstanceUser.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateAppInstanceUser.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/identity-chime/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  identity-chime.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/CreateAppInstanceUserResponse.proto b/fixture/CreateAppInstanceUserResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateAppInstanceUserResponse.proto
diff --git a/fixture/DeleteAppInstance.yaml b/fixture/DeleteAppInstance.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteAppInstance.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/identity-chime/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  identity-chime.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/DeleteAppInstanceAdmin.yaml b/fixture/DeleteAppInstanceAdmin.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteAppInstanceAdmin.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/identity-chime/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  identity-chime.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/DeleteAppInstanceAdminResponse.proto b/fixture/DeleteAppInstanceAdminResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteAppInstanceAdminResponse.proto
diff --git a/fixture/DeleteAppInstanceResponse.proto b/fixture/DeleteAppInstanceResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteAppInstanceResponse.proto
diff --git a/fixture/DeleteAppInstanceUser.yaml b/fixture/DeleteAppInstanceUser.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteAppInstanceUser.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/identity-chime/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  identity-chime.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/DeleteAppInstanceUserResponse.proto b/fixture/DeleteAppInstanceUserResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteAppInstanceUserResponse.proto
diff --git a/fixture/DeregisterAppInstanceUserEndpoint.yaml b/fixture/DeregisterAppInstanceUserEndpoint.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeregisterAppInstanceUserEndpoint.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/identity-chime/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  identity-chime.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/DeregisterAppInstanceUserEndpointResponse.proto b/fixture/DeregisterAppInstanceUserEndpointResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeregisterAppInstanceUserEndpointResponse.proto
diff --git a/fixture/DescribeAppInstance.yaml b/fixture/DescribeAppInstance.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeAppInstance.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/identity-chime/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  identity-chime.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/DescribeAppInstanceAdmin.yaml b/fixture/DescribeAppInstanceAdmin.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeAppInstanceAdmin.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/identity-chime/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  identity-chime.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/DescribeAppInstanceAdminResponse.proto b/fixture/DescribeAppInstanceAdminResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeAppInstanceAdminResponse.proto
diff --git a/fixture/DescribeAppInstanceResponse.proto b/fixture/DescribeAppInstanceResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeAppInstanceResponse.proto
diff --git a/fixture/DescribeAppInstanceUser.yaml b/fixture/DescribeAppInstanceUser.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeAppInstanceUser.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/identity-chime/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  identity-chime.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/DescribeAppInstanceUserEndpoint.yaml b/fixture/DescribeAppInstanceUserEndpoint.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeAppInstanceUserEndpoint.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/identity-chime/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  identity-chime.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/DescribeAppInstanceUserEndpointResponse.proto b/fixture/DescribeAppInstanceUserEndpointResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeAppInstanceUserEndpointResponse.proto
diff --git a/fixture/DescribeAppInstanceUserResponse.proto b/fixture/DescribeAppInstanceUserResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeAppInstanceUserResponse.proto
diff --git a/fixture/GetAppInstanceRetentionSettings.yaml b/fixture/GetAppInstanceRetentionSettings.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetAppInstanceRetentionSettings.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/identity-chime/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  identity-chime.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/GetAppInstanceRetentionSettingsResponse.proto b/fixture/GetAppInstanceRetentionSettingsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetAppInstanceRetentionSettingsResponse.proto
diff --git a/fixture/ListAppInstanceAdmins.yaml b/fixture/ListAppInstanceAdmins.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListAppInstanceAdmins.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/identity-chime/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  identity-chime.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/ListAppInstanceAdminsResponse.proto b/fixture/ListAppInstanceAdminsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListAppInstanceAdminsResponse.proto
diff --git a/fixture/ListAppInstanceUserEndpoints.yaml b/fixture/ListAppInstanceUserEndpoints.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListAppInstanceUserEndpoints.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/identity-chime/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  identity-chime.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/ListAppInstanceUserEndpointsResponse.proto b/fixture/ListAppInstanceUserEndpointsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListAppInstanceUserEndpointsResponse.proto
diff --git a/fixture/ListAppInstanceUsers.yaml b/fixture/ListAppInstanceUsers.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListAppInstanceUsers.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/identity-chime/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  identity-chime.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/ListAppInstanceUsersResponse.proto b/fixture/ListAppInstanceUsersResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListAppInstanceUsersResponse.proto
diff --git a/fixture/ListAppInstances.yaml b/fixture/ListAppInstances.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListAppInstances.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/identity-chime/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  identity-chime.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/ListAppInstancesResponse.proto b/fixture/ListAppInstancesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListAppInstancesResponse.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/identity-chime/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  identity-chime.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/PutAppInstanceRetentionSettings.yaml b/fixture/PutAppInstanceRetentionSettings.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/PutAppInstanceRetentionSettings.yaml
@@ -0,0 +1,10 @@
+---
+method: PUT
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/identity-chime/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  identity-chime.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/PutAppInstanceRetentionSettingsResponse.proto b/fixture/PutAppInstanceRetentionSettingsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/PutAppInstanceRetentionSettingsResponse.proto
diff --git a/fixture/RegisterAppInstanceUserEndpoint.yaml b/fixture/RegisterAppInstanceUserEndpoint.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/RegisterAppInstanceUserEndpoint.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/identity-chime/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  identity-chime.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/RegisterAppInstanceUserEndpointResponse.proto b/fixture/RegisterAppInstanceUserEndpointResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/RegisterAppInstanceUserEndpointResponse.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/identity-chime/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  identity-chime.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/TagResourceResponse.proto b/fixture/TagResourceResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/TagResourceResponse.proto
diff --git a/fixture/UntagResource.yaml b/fixture/UntagResource.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UntagResource.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/identity-chime/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  identity-chime.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/UpdateAppInstance.yaml b/fixture/UpdateAppInstance.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateAppInstance.yaml
@@ -0,0 +1,10 @@
+---
+method: PUT
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/identity-chime/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  identity-chime.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/UpdateAppInstanceResponse.proto b/fixture/UpdateAppInstanceResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateAppInstanceResponse.proto
diff --git a/fixture/UpdateAppInstanceUser.yaml b/fixture/UpdateAppInstanceUser.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateAppInstanceUser.yaml
@@ -0,0 +1,10 @@
+---
+method: PUT
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/identity-chime/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  identity-chime.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/UpdateAppInstanceUserEndpoint.yaml b/fixture/UpdateAppInstanceUserEndpoint.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateAppInstanceUserEndpoint.yaml
@@ -0,0 +1,10 @@
+---
+method: PUT
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/identity-chime/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  identity-chime.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/UpdateAppInstanceUserEndpointResponse.proto b/fixture/UpdateAppInstanceUserEndpointResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateAppInstanceUserEndpointResponse.proto
diff --git a/fixture/UpdateAppInstanceUserResponse.proto b/fixture/UpdateAppInstanceUserResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateAppInstanceUserResponse.proto
diff --git a/gen/Amazonka/ChimeSDKIdentity.hs b/gen/Amazonka/ChimeSDKIdentity.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ChimeSDKIdentity.hs
@@ -0,0 +1,326 @@
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- |
+-- Module      : Amazonka.ChimeSDKIdentity
+-- 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 @2021-04-20@ of the AWS service descriptions, licensed under Apache 2.0.
+--
+-- The Amazon Chime SDK Identity APIs in this section allow software
+-- developers to create and manage unique instances of their messaging
+-- applications. These APIs provide the overarching framework for creating
+-- and sending messages. For more information about the identity APIs,
+-- refer to
+-- <https://docs.aws.amazon.com/chime/latest/APIReference/API_Operations_Amazon_Chime_SDK_Identity.html Amazon Chime SDK identity>.
+module Amazonka.ChimeSDKIdentity
+  ( -- * Service Configuration
+    defaultService,
+
+    -- * Errors
+    -- $errors
+
+    -- ** BadRequestException
+    _BadRequestException,
+
+    -- ** ConflictException
+    _ConflictException,
+
+    -- ** ForbiddenException
+    _ForbiddenException,
+
+    -- ** ResourceLimitExceededException
+    _ResourceLimitExceededException,
+
+    -- ** ServiceFailureException
+    _ServiceFailureException,
+
+    -- ** ServiceUnavailableException
+    _ServiceUnavailableException,
+
+    -- ** ThrottledClientException
+    _ThrottledClientException,
+
+    -- ** UnauthorizedClientException
+    _UnauthorizedClientException,
+
+    -- * Waiters
+    -- $waiters
+
+    -- * Operations
+    -- $operations
+
+    -- ** CreateAppInstance
+    CreateAppInstance (CreateAppInstance'),
+    newCreateAppInstance,
+    CreateAppInstanceResponse (CreateAppInstanceResponse'),
+    newCreateAppInstanceResponse,
+
+    -- ** CreateAppInstanceAdmin
+    CreateAppInstanceAdmin (CreateAppInstanceAdmin'),
+    newCreateAppInstanceAdmin,
+    CreateAppInstanceAdminResponse (CreateAppInstanceAdminResponse'),
+    newCreateAppInstanceAdminResponse,
+
+    -- ** CreateAppInstanceUser
+    CreateAppInstanceUser (CreateAppInstanceUser'),
+    newCreateAppInstanceUser,
+    CreateAppInstanceUserResponse (CreateAppInstanceUserResponse'),
+    newCreateAppInstanceUserResponse,
+
+    -- ** DeleteAppInstance
+    DeleteAppInstance (DeleteAppInstance'),
+    newDeleteAppInstance,
+    DeleteAppInstanceResponse (DeleteAppInstanceResponse'),
+    newDeleteAppInstanceResponse,
+
+    -- ** DeleteAppInstanceAdmin
+    DeleteAppInstanceAdmin (DeleteAppInstanceAdmin'),
+    newDeleteAppInstanceAdmin,
+    DeleteAppInstanceAdminResponse (DeleteAppInstanceAdminResponse'),
+    newDeleteAppInstanceAdminResponse,
+
+    -- ** DeleteAppInstanceUser
+    DeleteAppInstanceUser (DeleteAppInstanceUser'),
+    newDeleteAppInstanceUser,
+    DeleteAppInstanceUserResponse (DeleteAppInstanceUserResponse'),
+    newDeleteAppInstanceUserResponse,
+
+    -- ** DeregisterAppInstanceUserEndpoint
+    DeregisterAppInstanceUserEndpoint (DeregisterAppInstanceUserEndpoint'),
+    newDeregisterAppInstanceUserEndpoint,
+    DeregisterAppInstanceUserEndpointResponse (DeregisterAppInstanceUserEndpointResponse'),
+    newDeregisterAppInstanceUserEndpointResponse,
+
+    -- ** DescribeAppInstance
+    DescribeAppInstance (DescribeAppInstance'),
+    newDescribeAppInstance,
+    DescribeAppInstanceResponse (DescribeAppInstanceResponse'),
+    newDescribeAppInstanceResponse,
+
+    -- ** DescribeAppInstanceAdmin
+    DescribeAppInstanceAdmin (DescribeAppInstanceAdmin'),
+    newDescribeAppInstanceAdmin,
+    DescribeAppInstanceAdminResponse (DescribeAppInstanceAdminResponse'),
+    newDescribeAppInstanceAdminResponse,
+
+    -- ** DescribeAppInstanceUser
+    DescribeAppInstanceUser (DescribeAppInstanceUser'),
+    newDescribeAppInstanceUser,
+    DescribeAppInstanceUserResponse (DescribeAppInstanceUserResponse'),
+    newDescribeAppInstanceUserResponse,
+
+    -- ** DescribeAppInstanceUserEndpoint
+    DescribeAppInstanceUserEndpoint (DescribeAppInstanceUserEndpoint'),
+    newDescribeAppInstanceUserEndpoint,
+    DescribeAppInstanceUserEndpointResponse (DescribeAppInstanceUserEndpointResponse'),
+    newDescribeAppInstanceUserEndpointResponse,
+
+    -- ** GetAppInstanceRetentionSettings
+    GetAppInstanceRetentionSettings (GetAppInstanceRetentionSettings'),
+    newGetAppInstanceRetentionSettings,
+    GetAppInstanceRetentionSettingsResponse (GetAppInstanceRetentionSettingsResponse'),
+    newGetAppInstanceRetentionSettingsResponse,
+
+    -- ** ListAppInstanceAdmins
+    ListAppInstanceAdmins (ListAppInstanceAdmins'),
+    newListAppInstanceAdmins,
+    ListAppInstanceAdminsResponse (ListAppInstanceAdminsResponse'),
+    newListAppInstanceAdminsResponse,
+
+    -- ** ListAppInstanceUserEndpoints
+    ListAppInstanceUserEndpoints (ListAppInstanceUserEndpoints'),
+    newListAppInstanceUserEndpoints,
+    ListAppInstanceUserEndpointsResponse (ListAppInstanceUserEndpointsResponse'),
+    newListAppInstanceUserEndpointsResponse,
+
+    -- ** ListAppInstanceUsers
+    ListAppInstanceUsers (ListAppInstanceUsers'),
+    newListAppInstanceUsers,
+    ListAppInstanceUsersResponse (ListAppInstanceUsersResponse'),
+    newListAppInstanceUsersResponse,
+
+    -- ** ListAppInstances
+    ListAppInstances (ListAppInstances'),
+    newListAppInstances,
+    ListAppInstancesResponse (ListAppInstancesResponse'),
+    newListAppInstancesResponse,
+
+    -- ** ListTagsForResource
+    ListTagsForResource (ListTagsForResource'),
+    newListTagsForResource,
+    ListTagsForResourceResponse (ListTagsForResourceResponse'),
+    newListTagsForResourceResponse,
+
+    -- ** PutAppInstanceRetentionSettings
+    PutAppInstanceRetentionSettings (PutAppInstanceRetentionSettings'),
+    newPutAppInstanceRetentionSettings,
+    PutAppInstanceRetentionSettingsResponse (PutAppInstanceRetentionSettingsResponse'),
+    newPutAppInstanceRetentionSettingsResponse,
+
+    -- ** RegisterAppInstanceUserEndpoint
+    RegisterAppInstanceUserEndpoint (RegisterAppInstanceUserEndpoint'),
+    newRegisterAppInstanceUserEndpoint,
+    RegisterAppInstanceUserEndpointResponse (RegisterAppInstanceUserEndpointResponse'),
+    newRegisterAppInstanceUserEndpointResponse,
+
+    -- ** TagResource
+    TagResource (TagResource'),
+    newTagResource,
+    TagResourceResponse (TagResourceResponse'),
+    newTagResourceResponse,
+
+    -- ** UntagResource
+    UntagResource (UntagResource'),
+    newUntagResource,
+    UntagResourceResponse (UntagResourceResponse'),
+    newUntagResourceResponse,
+
+    -- ** UpdateAppInstance
+    UpdateAppInstance (UpdateAppInstance'),
+    newUpdateAppInstance,
+    UpdateAppInstanceResponse (UpdateAppInstanceResponse'),
+    newUpdateAppInstanceResponse,
+
+    -- ** UpdateAppInstanceUser
+    UpdateAppInstanceUser (UpdateAppInstanceUser'),
+    newUpdateAppInstanceUser,
+    UpdateAppInstanceUserResponse (UpdateAppInstanceUserResponse'),
+    newUpdateAppInstanceUserResponse,
+
+    -- ** UpdateAppInstanceUserEndpoint
+    UpdateAppInstanceUserEndpoint (UpdateAppInstanceUserEndpoint'),
+    newUpdateAppInstanceUserEndpoint,
+    UpdateAppInstanceUserEndpointResponse (UpdateAppInstanceUserEndpointResponse'),
+    newUpdateAppInstanceUserEndpointResponse,
+
+    -- * Types
+
+    -- ** AllowMessages
+    AllowMessages (..),
+
+    -- ** AppInstanceUserEndpointType
+    AppInstanceUserEndpointType (..),
+
+    -- ** EndpointStatus
+    EndpointStatus (..),
+
+    -- ** EndpointStatusReason
+    EndpointStatusReason (..),
+
+    -- ** AppInstance
+    AppInstance (AppInstance'),
+    newAppInstance,
+
+    -- ** AppInstanceAdmin
+    AppInstanceAdmin (AppInstanceAdmin'),
+    newAppInstanceAdmin,
+
+    -- ** AppInstanceAdminSummary
+    AppInstanceAdminSummary (AppInstanceAdminSummary'),
+    newAppInstanceAdminSummary,
+
+    -- ** AppInstanceRetentionSettings
+    AppInstanceRetentionSettings (AppInstanceRetentionSettings'),
+    newAppInstanceRetentionSettings,
+
+    -- ** AppInstanceSummary
+    AppInstanceSummary (AppInstanceSummary'),
+    newAppInstanceSummary,
+
+    -- ** AppInstanceUser
+    AppInstanceUser (AppInstanceUser'),
+    newAppInstanceUser,
+
+    -- ** AppInstanceUserEndpoint
+    AppInstanceUserEndpoint (AppInstanceUserEndpoint'),
+    newAppInstanceUserEndpoint,
+
+    -- ** AppInstanceUserEndpointSummary
+    AppInstanceUserEndpointSummary (AppInstanceUserEndpointSummary'),
+    newAppInstanceUserEndpointSummary,
+
+    -- ** AppInstanceUserSummary
+    AppInstanceUserSummary (AppInstanceUserSummary'),
+    newAppInstanceUserSummary,
+
+    -- ** ChannelRetentionSettings
+    ChannelRetentionSettings (ChannelRetentionSettings'),
+    newChannelRetentionSettings,
+
+    -- ** EndpointAttributes
+    EndpointAttributes (EndpointAttributes'),
+    newEndpointAttributes,
+
+    -- ** EndpointState
+    EndpointState (EndpointState'),
+    newEndpointState,
+
+    -- ** Identity
+    Identity (Identity'),
+    newIdentity,
+
+    -- ** Tag
+    Tag (Tag'),
+    newTag,
+  )
+where
+
+import Amazonka.ChimeSDKIdentity.CreateAppInstance
+import Amazonka.ChimeSDKIdentity.CreateAppInstanceAdmin
+import Amazonka.ChimeSDKIdentity.CreateAppInstanceUser
+import Amazonka.ChimeSDKIdentity.DeleteAppInstance
+import Amazonka.ChimeSDKIdentity.DeleteAppInstanceAdmin
+import Amazonka.ChimeSDKIdentity.DeleteAppInstanceUser
+import Amazonka.ChimeSDKIdentity.DeregisterAppInstanceUserEndpoint
+import Amazonka.ChimeSDKIdentity.DescribeAppInstance
+import Amazonka.ChimeSDKIdentity.DescribeAppInstanceAdmin
+import Amazonka.ChimeSDKIdentity.DescribeAppInstanceUser
+import Amazonka.ChimeSDKIdentity.DescribeAppInstanceUserEndpoint
+import Amazonka.ChimeSDKIdentity.GetAppInstanceRetentionSettings
+import Amazonka.ChimeSDKIdentity.Lens
+import Amazonka.ChimeSDKIdentity.ListAppInstanceAdmins
+import Amazonka.ChimeSDKIdentity.ListAppInstanceUserEndpoints
+import Amazonka.ChimeSDKIdentity.ListAppInstanceUsers
+import Amazonka.ChimeSDKIdentity.ListAppInstances
+import Amazonka.ChimeSDKIdentity.ListTagsForResource
+import Amazonka.ChimeSDKIdentity.PutAppInstanceRetentionSettings
+import Amazonka.ChimeSDKIdentity.RegisterAppInstanceUserEndpoint
+import Amazonka.ChimeSDKIdentity.TagResource
+import Amazonka.ChimeSDKIdentity.Types
+import Amazonka.ChimeSDKIdentity.UntagResource
+import Amazonka.ChimeSDKIdentity.UpdateAppInstance
+import Amazonka.ChimeSDKIdentity.UpdateAppInstanceUser
+import Amazonka.ChimeSDKIdentity.UpdateAppInstanceUserEndpoint
+import Amazonka.ChimeSDKIdentity.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 'ChimeSDKIdentity'.
+
+-- $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/ChimeSDKIdentity/CreateAppInstance.hs b/gen/Amazonka/ChimeSDKIdentity/CreateAppInstance.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ChimeSDKIdentity/CreateAppInstance.hs
@@ -0,0 +1,208 @@
+{-# 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.ChimeSDKIdentity.CreateAppInstance
+-- 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 an Amazon Chime SDK messaging @AppInstance@ under an AWS
+-- account. Only SDK messaging customers use this API. @CreateAppInstance@
+-- supports idempotency behavior as described in the AWS API Standard.
+--
+-- identity
+module Amazonka.ChimeSDKIdentity.CreateAppInstance
+  ( -- * Creating a Request
+    CreateAppInstance (..),
+    newCreateAppInstance,
+
+    -- * Request Lenses
+    createAppInstance_metadata,
+    createAppInstance_tags,
+    createAppInstance_name,
+    createAppInstance_clientRequestToken,
+
+    -- * Destructuring the Response
+    CreateAppInstanceResponse (..),
+    newCreateAppInstanceResponse,
+
+    -- * Response Lenses
+    createAppInstanceResponse_appInstanceArn,
+    createAppInstanceResponse_httpStatus,
+  )
+where
+
+import Amazonka.ChimeSDKIdentity.Types
+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
+
+-- | /See:/ 'newCreateAppInstance' smart constructor.
+data CreateAppInstance = CreateAppInstance'
+  { -- | The metadata of the @AppInstance@. Limited to a 1KB string in UTF-8.
+    metadata :: Prelude.Maybe (Data.Sensitive Prelude.Text),
+    -- | Tags assigned to the @AppInstanceUser@.
+    tags :: Prelude.Maybe (Prelude.NonEmpty Tag),
+    -- | The name of the @AppInstance@.
+    name :: Data.Sensitive Prelude.Text,
+    -- | The @ClientRequestToken@ of the @AppInstance@.
+    clientRequestToken :: Data.Sensitive Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateAppInstance' 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:
+--
+-- 'metadata', 'createAppInstance_metadata' - The metadata of the @AppInstance@. Limited to a 1KB string in UTF-8.
+--
+-- 'tags', 'createAppInstance_tags' - Tags assigned to the @AppInstanceUser@.
+--
+-- 'name', 'createAppInstance_name' - The name of the @AppInstance@.
+--
+-- 'clientRequestToken', 'createAppInstance_clientRequestToken' - The @ClientRequestToken@ of the @AppInstance@.
+newCreateAppInstance ::
+  -- | 'name'
+  Prelude.Text ->
+  -- | 'clientRequestToken'
+  Prelude.Text ->
+  CreateAppInstance
+newCreateAppInstance pName_ pClientRequestToken_ =
+  CreateAppInstance'
+    { metadata = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      name = Data._Sensitive Lens.# pName_,
+      clientRequestToken =
+        Data._Sensitive Lens.# pClientRequestToken_
+    }
+
+-- | The metadata of the @AppInstance@. Limited to a 1KB string in UTF-8.
+createAppInstance_metadata :: Lens.Lens' CreateAppInstance (Prelude.Maybe Prelude.Text)
+createAppInstance_metadata = Lens.lens (\CreateAppInstance' {metadata} -> metadata) (\s@CreateAppInstance' {} a -> s {metadata = a} :: CreateAppInstance) Prelude.. Lens.mapping Data._Sensitive
+
+-- | Tags assigned to the @AppInstanceUser@.
+createAppInstance_tags :: Lens.Lens' CreateAppInstance (Prelude.Maybe (Prelude.NonEmpty Tag))
+createAppInstance_tags = Lens.lens (\CreateAppInstance' {tags} -> tags) (\s@CreateAppInstance' {} a -> s {tags = a} :: CreateAppInstance) Prelude.. Lens.mapping Lens.coerced
+
+-- | The name of the @AppInstance@.
+createAppInstance_name :: Lens.Lens' CreateAppInstance Prelude.Text
+createAppInstance_name = Lens.lens (\CreateAppInstance' {name} -> name) (\s@CreateAppInstance' {} a -> s {name = a} :: CreateAppInstance) Prelude.. Data._Sensitive
+
+-- | The @ClientRequestToken@ of the @AppInstance@.
+createAppInstance_clientRequestToken :: Lens.Lens' CreateAppInstance Prelude.Text
+createAppInstance_clientRequestToken = Lens.lens (\CreateAppInstance' {clientRequestToken} -> clientRequestToken) (\s@CreateAppInstance' {} a -> s {clientRequestToken = a} :: CreateAppInstance) Prelude.. Data._Sensitive
+
+instance Core.AWSRequest CreateAppInstance where
+  type
+    AWSResponse CreateAppInstance =
+      CreateAppInstanceResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateAppInstanceResponse'
+            Prelude.<$> (x Data..?> "AppInstanceArn")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateAppInstance where
+  hashWithSalt _salt CreateAppInstance' {..} =
+    _salt
+      `Prelude.hashWithSalt` metadata
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` clientRequestToken
+
+instance Prelude.NFData CreateAppInstance where
+  rnf CreateAppInstance' {..} =
+    Prelude.rnf metadata
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf clientRequestToken
+
+instance Data.ToHeaders CreateAppInstance where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToJSON CreateAppInstance where
+  toJSON CreateAppInstance' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Metadata" Data..=) Prelude.<$> metadata,
+            ("Tags" Data..=) Prelude.<$> tags,
+            Prelude.Just ("Name" Data..= name),
+            Prelude.Just
+              ("ClientRequestToken" Data..= clientRequestToken)
+          ]
+      )
+
+instance Data.ToPath CreateAppInstance where
+  toPath = Prelude.const "/app-instances"
+
+instance Data.ToQuery CreateAppInstance where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateAppInstanceResponse' smart constructor.
+data CreateAppInstanceResponse = CreateAppInstanceResponse'
+  { -- | The Amazon Resource Number (ARN) of the @AppInstance@.
+    appInstanceArn :: 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 'CreateAppInstanceResponse' 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:
+--
+-- 'appInstanceArn', 'createAppInstanceResponse_appInstanceArn' - The Amazon Resource Number (ARN) of the @AppInstance@.
+--
+-- 'httpStatus', 'createAppInstanceResponse_httpStatus' - The response's http status code.
+newCreateAppInstanceResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateAppInstanceResponse
+newCreateAppInstanceResponse pHttpStatus_ =
+  CreateAppInstanceResponse'
+    { appInstanceArn =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The Amazon Resource Number (ARN) of the @AppInstance@.
+createAppInstanceResponse_appInstanceArn :: Lens.Lens' CreateAppInstanceResponse (Prelude.Maybe Prelude.Text)
+createAppInstanceResponse_appInstanceArn = Lens.lens (\CreateAppInstanceResponse' {appInstanceArn} -> appInstanceArn) (\s@CreateAppInstanceResponse' {} a -> s {appInstanceArn = a} :: CreateAppInstanceResponse)
+
+-- | The response's http status code.
+createAppInstanceResponse_httpStatus :: Lens.Lens' CreateAppInstanceResponse Prelude.Int
+createAppInstanceResponse_httpStatus = Lens.lens (\CreateAppInstanceResponse' {httpStatus} -> httpStatus) (\s@CreateAppInstanceResponse' {} a -> s {httpStatus = a} :: CreateAppInstanceResponse)
+
+instance Prelude.NFData CreateAppInstanceResponse where
+  rnf CreateAppInstanceResponse' {..} =
+    Prelude.rnf appInstanceArn
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ChimeSDKIdentity/CreateAppInstanceAdmin.hs b/gen/Amazonka/ChimeSDKIdentity/CreateAppInstanceAdmin.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ChimeSDKIdentity/CreateAppInstanceAdmin.hs
@@ -0,0 +1,206 @@
+{-# 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.ChimeSDKIdentity.CreateAppInstanceAdmin
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Promotes an @AppInstanceUser@ to an @AppInstanceAdmin@. The promoted
+-- user can perform the following actions.
+--
+-- -   @ChannelModerator@ actions across all channels in the @AppInstance@.
+--
+-- -   @DeleteChannelMessage@ actions.
+--
+-- Only an @AppInstanceUser@ can be promoted to an @AppInstanceAdmin@ role.
+module Amazonka.ChimeSDKIdentity.CreateAppInstanceAdmin
+  ( -- * Creating a Request
+    CreateAppInstanceAdmin (..),
+    newCreateAppInstanceAdmin,
+
+    -- * Request Lenses
+    createAppInstanceAdmin_appInstanceAdminArn,
+    createAppInstanceAdmin_appInstanceArn,
+
+    -- * Destructuring the Response
+    CreateAppInstanceAdminResponse (..),
+    newCreateAppInstanceAdminResponse,
+
+    -- * Response Lenses
+    createAppInstanceAdminResponse_appInstanceAdmin,
+    createAppInstanceAdminResponse_appInstanceArn,
+    createAppInstanceAdminResponse_httpStatus,
+  )
+where
+
+import Amazonka.ChimeSDKIdentity.Types
+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
+
+-- | /See:/ 'newCreateAppInstanceAdmin' smart constructor.
+data CreateAppInstanceAdmin = CreateAppInstanceAdmin'
+  { -- | The ARN of the administrator of the current @AppInstance@.
+    appInstanceAdminArn :: Prelude.Text,
+    -- | The ARN of the @AppInstance@.
+    appInstanceArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateAppInstanceAdmin' 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:
+--
+-- 'appInstanceAdminArn', 'createAppInstanceAdmin_appInstanceAdminArn' - The ARN of the administrator of the current @AppInstance@.
+--
+-- 'appInstanceArn', 'createAppInstanceAdmin_appInstanceArn' - The ARN of the @AppInstance@.
+newCreateAppInstanceAdmin ::
+  -- | 'appInstanceAdminArn'
+  Prelude.Text ->
+  -- | 'appInstanceArn'
+  Prelude.Text ->
+  CreateAppInstanceAdmin
+newCreateAppInstanceAdmin
+  pAppInstanceAdminArn_
+  pAppInstanceArn_ =
+    CreateAppInstanceAdmin'
+      { appInstanceAdminArn =
+          pAppInstanceAdminArn_,
+        appInstanceArn = pAppInstanceArn_
+      }
+
+-- | The ARN of the administrator of the current @AppInstance@.
+createAppInstanceAdmin_appInstanceAdminArn :: Lens.Lens' CreateAppInstanceAdmin Prelude.Text
+createAppInstanceAdmin_appInstanceAdminArn = Lens.lens (\CreateAppInstanceAdmin' {appInstanceAdminArn} -> appInstanceAdminArn) (\s@CreateAppInstanceAdmin' {} a -> s {appInstanceAdminArn = a} :: CreateAppInstanceAdmin)
+
+-- | The ARN of the @AppInstance@.
+createAppInstanceAdmin_appInstanceArn :: Lens.Lens' CreateAppInstanceAdmin Prelude.Text
+createAppInstanceAdmin_appInstanceArn = Lens.lens (\CreateAppInstanceAdmin' {appInstanceArn} -> appInstanceArn) (\s@CreateAppInstanceAdmin' {} a -> s {appInstanceArn = a} :: CreateAppInstanceAdmin)
+
+instance Core.AWSRequest CreateAppInstanceAdmin where
+  type
+    AWSResponse CreateAppInstanceAdmin =
+      CreateAppInstanceAdminResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateAppInstanceAdminResponse'
+            Prelude.<$> (x Data..?> "AppInstanceAdmin")
+            Prelude.<*> (x Data..?> "AppInstanceArn")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateAppInstanceAdmin where
+  hashWithSalt _salt CreateAppInstanceAdmin' {..} =
+    _salt
+      `Prelude.hashWithSalt` appInstanceAdminArn
+      `Prelude.hashWithSalt` appInstanceArn
+
+instance Prelude.NFData CreateAppInstanceAdmin where
+  rnf CreateAppInstanceAdmin' {..} =
+    Prelude.rnf appInstanceAdminArn
+      `Prelude.seq` Prelude.rnf appInstanceArn
+
+instance Data.ToHeaders CreateAppInstanceAdmin where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToJSON CreateAppInstanceAdmin where
+  toJSON CreateAppInstanceAdmin' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ("AppInstanceAdminArn" Data..= appInstanceAdminArn)
+          ]
+      )
+
+instance Data.ToPath CreateAppInstanceAdmin where
+  toPath CreateAppInstanceAdmin' {..} =
+    Prelude.mconcat
+      [ "/app-instances/",
+        Data.toBS appInstanceArn,
+        "/admins"
+      ]
+
+instance Data.ToQuery CreateAppInstanceAdmin where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateAppInstanceAdminResponse' smart constructor.
+data CreateAppInstanceAdminResponse = CreateAppInstanceAdminResponse'
+  { -- | The name and ARN of the admin for the @AppInstance@.
+    appInstanceAdmin :: Prelude.Maybe Identity,
+    -- | The ARN of the of the admin for the @AppInstance@.
+    appInstanceArn :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateAppInstanceAdminResponse' 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:
+--
+-- 'appInstanceAdmin', 'createAppInstanceAdminResponse_appInstanceAdmin' - The name and ARN of the admin for the @AppInstance@.
+--
+-- 'appInstanceArn', 'createAppInstanceAdminResponse_appInstanceArn' - The ARN of the of the admin for the @AppInstance@.
+--
+-- 'httpStatus', 'createAppInstanceAdminResponse_httpStatus' - The response's http status code.
+newCreateAppInstanceAdminResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateAppInstanceAdminResponse
+newCreateAppInstanceAdminResponse pHttpStatus_ =
+  CreateAppInstanceAdminResponse'
+    { appInstanceAdmin =
+        Prelude.Nothing,
+      appInstanceArn = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The name and ARN of the admin for the @AppInstance@.
+createAppInstanceAdminResponse_appInstanceAdmin :: Lens.Lens' CreateAppInstanceAdminResponse (Prelude.Maybe Identity)
+createAppInstanceAdminResponse_appInstanceAdmin = Lens.lens (\CreateAppInstanceAdminResponse' {appInstanceAdmin} -> appInstanceAdmin) (\s@CreateAppInstanceAdminResponse' {} a -> s {appInstanceAdmin = a} :: CreateAppInstanceAdminResponse)
+
+-- | The ARN of the of the admin for the @AppInstance@.
+createAppInstanceAdminResponse_appInstanceArn :: Lens.Lens' CreateAppInstanceAdminResponse (Prelude.Maybe Prelude.Text)
+createAppInstanceAdminResponse_appInstanceArn = Lens.lens (\CreateAppInstanceAdminResponse' {appInstanceArn} -> appInstanceArn) (\s@CreateAppInstanceAdminResponse' {} a -> s {appInstanceArn = a} :: CreateAppInstanceAdminResponse)
+
+-- | The response's http status code.
+createAppInstanceAdminResponse_httpStatus :: Lens.Lens' CreateAppInstanceAdminResponse Prelude.Int
+createAppInstanceAdminResponse_httpStatus = Lens.lens (\CreateAppInstanceAdminResponse' {httpStatus} -> httpStatus) (\s@CreateAppInstanceAdminResponse' {} a -> s {httpStatus = a} :: CreateAppInstanceAdminResponse)
+
+instance
+  Prelude.NFData
+    CreateAppInstanceAdminResponse
+  where
+  rnf CreateAppInstanceAdminResponse' {..} =
+    Prelude.rnf appInstanceAdmin
+      `Prelude.seq` Prelude.rnf appInstanceArn
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ChimeSDKIdentity/CreateAppInstanceUser.hs b/gen/Amazonka/ChimeSDKIdentity/CreateAppInstanceUser.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ChimeSDKIdentity/CreateAppInstanceUser.hs
@@ -0,0 +1,242 @@
+{-# 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.ChimeSDKIdentity.CreateAppInstanceUser
+-- 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 user under an Amazon Chime @AppInstance@. The request consists
+-- of a unique @appInstanceUserId@ and @Name@ for that user.
+module Amazonka.ChimeSDKIdentity.CreateAppInstanceUser
+  ( -- * Creating a Request
+    CreateAppInstanceUser (..),
+    newCreateAppInstanceUser,
+
+    -- * Request Lenses
+    createAppInstanceUser_metadata,
+    createAppInstanceUser_tags,
+    createAppInstanceUser_appInstanceArn,
+    createAppInstanceUser_appInstanceUserId,
+    createAppInstanceUser_name,
+    createAppInstanceUser_clientRequestToken,
+
+    -- * Destructuring the Response
+    CreateAppInstanceUserResponse (..),
+    newCreateAppInstanceUserResponse,
+
+    -- * Response Lenses
+    createAppInstanceUserResponse_appInstanceUserArn,
+    createAppInstanceUserResponse_httpStatus,
+  )
+where
+
+import Amazonka.ChimeSDKIdentity.Types
+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
+
+-- | /See:/ 'newCreateAppInstanceUser' smart constructor.
+data CreateAppInstanceUser = CreateAppInstanceUser'
+  { -- | The request\'s metadata. Limited to a 1KB string in UTF-8.
+    metadata :: Prelude.Maybe (Data.Sensitive Prelude.Text),
+    -- | Tags assigned to the @AppInstanceUser@.
+    tags :: Prelude.Maybe (Prelude.NonEmpty Tag),
+    -- | The ARN of the @AppInstance@ request.
+    appInstanceArn :: Prelude.Text,
+    -- | The user ID of the @AppInstance@.
+    appInstanceUserId :: Data.Sensitive Prelude.Text,
+    -- | The user\'s name.
+    name :: Data.Sensitive Prelude.Text,
+    -- | The token assigned to the user requesting an @AppInstance@.
+    clientRequestToken :: Data.Sensitive Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateAppInstanceUser' 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:
+--
+-- 'metadata', 'createAppInstanceUser_metadata' - The request\'s metadata. Limited to a 1KB string in UTF-8.
+--
+-- 'tags', 'createAppInstanceUser_tags' - Tags assigned to the @AppInstanceUser@.
+--
+-- 'appInstanceArn', 'createAppInstanceUser_appInstanceArn' - The ARN of the @AppInstance@ request.
+--
+-- 'appInstanceUserId', 'createAppInstanceUser_appInstanceUserId' - The user ID of the @AppInstance@.
+--
+-- 'name', 'createAppInstanceUser_name' - The user\'s name.
+--
+-- 'clientRequestToken', 'createAppInstanceUser_clientRequestToken' - The token assigned to the user requesting an @AppInstance@.
+newCreateAppInstanceUser ::
+  -- | 'appInstanceArn'
+  Prelude.Text ->
+  -- | 'appInstanceUserId'
+  Prelude.Text ->
+  -- | 'name'
+  Prelude.Text ->
+  -- | 'clientRequestToken'
+  Prelude.Text ->
+  CreateAppInstanceUser
+newCreateAppInstanceUser
+  pAppInstanceArn_
+  pAppInstanceUserId_
+  pName_
+  pClientRequestToken_ =
+    CreateAppInstanceUser'
+      { metadata = Prelude.Nothing,
+        tags = Prelude.Nothing,
+        appInstanceArn = pAppInstanceArn_,
+        appInstanceUserId =
+          Data._Sensitive Lens.# pAppInstanceUserId_,
+        name = Data._Sensitive Lens.# pName_,
+        clientRequestToken =
+          Data._Sensitive Lens.# pClientRequestToken_
+      }
+
+-- | The request\'s metadata. Limited to a 1KB string in UTF-8.
+createAppInstanceUser_metadata :: Lens.Lens' CreateAppInstanceUser (Prelude.Maybe Prelude.Text)
+createAppInstanceUser_metadata = Lens.lens (\CreateAppInstanceUser' {metadata} -> metadata) (\s@CreateAppInstanceUser' {} a -> s {metadata = a} :: CreateAppInstanceUser) Prelude.. Lens.mapping Data._Sensitive
+
+-- | Tags assigned to the @AppInstanceUser@.
+createAppInstanceUser_tags :: Lens.Lens' CreateAppInstanceUser (Prelude.Maybe (Prelude.NonEmpty Tag))
+createAppInstanceUser_tags = Lens.lens (\CreateAppInstanceUser' {tags} -> tags) (\s@CreateAppInstanceUser' {} a -> s {tags = a} :: CreateAppInstanceUser) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ARN of the @AppInstance@ request.
+createAppInstanceUser_appInstanceArn :: Lens.Lens' CreateAppInstanceUser Prelude.Text
+createAppInstanceUser_appInstanceArn = Lens.lens (\CreateAppInstanceUser' {appInstanceArn} -> appInstanceArn) (\s@CreateAppInstanceUser' {} a -> s {appInstanceArn = a} :: CreateAppInstanceUser)
+
+-- | The user ID of the @AppInstance@.
+createAppInstanceUser_appInstanceUserId :: Lens.Lens' CreateAppInstanceUser Prelude.Text
+createAppInstanceUser_appInstanceUserId = Lens.lens (\CreateAppInstanceUser' {appInstanceUserId} -> appInstanceUserId) (\s@CreateAppInstanceUser' {} a -> s {appInstanceUserId = a} :: CreateAppInstanceUser) Prelude.. Data._Sensitive
+
+-- | The user\'s name.
+createAppInstanceUser_name :: Lens.Lens' CreateAppInstanceUser Prelude.Text
+createAppInstanceUser_name = Lens.lens (\CreateAppInstanceUser' {name} -> name) (\s@CreateAppInstanceUser' {} a -> s {name = a} :: CreateAppInstanceUser) Prelude.. Data._Sensitive
+
+-- | The token assigned to the user requesting an @AppInstance@.
+createAppInstanceUser_clientRequestToken :: Lens.Lens' CreateAppInstanceUser Prelude.Text
+createAppInstanceUser_clientRequestToken = Lens.lens (\CreateAppInstanceUser' {clientRequestToken} -> clientRequestToken) (\s@CreateAppInstanceUser' {} a -> s {clientRequestToken = a} :: CreateAppInstanceUser) Prelude.. Data._Sensitive
+
+instance Core.AWSRequest CreateAppInstanceUser where
+  type
+    AWSResponse CreateAppInstanceUser =
+      CreateAppInstanceUserResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateAppInstanceUserResponse'
+            Prelude.<$> (x Data..?> "AppInstanceUserArn")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateAppInstanceUser where
+  hashWithSalt _salt CreateAppInstanceUser' {..} =
+    _salt
+      `Prelude.hashWithSalt` metadata
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` appInstanceArn
+      `Prelude.hashWithSalt` appInstanceUserId
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` clientRequestToken
+
+instance Prelude.NFData CreateAppInstanceUser where
+  rnf CreateAppInstanceUser' {..} =
+    Prelude.rnf metadata
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf appInstanceArn
+      `Prelude.seq` Prelude.rnf appInstanceUserId
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf clientRequestToken
+
+instance Data.ToHeaders CreateAppInstanceUser where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToJSON CreateAppInstanceUser where
+  toJSON CreateAppInstanceUser' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Metadata" Data..=) Prelude.<$> metadata,
+            ("Tags" Data..=) Prelude.<$> tags,
+            Prelude.Just
+              ("AppInstanceArn" Data..= appInstanceArn),
+            Prelude.Just
+              ("AppInstanceUserId" Data..= appInstanceUserId),
+            Prelude.Just ("Name" Data..= name),
+            Prelude.Just
+              ("ClientRequestToken" Data..= clientRequestToken)
+          ]
+      )
+
+instance Data.ToPath CreateAppInstanceUser where
+  toPath = Prelude.const "/app-instance-users"
+
+instance Data.ToQuery CreateAppInstanceUser where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateAppInstanceUserResponse' smart constructor.
+data CreateAppInstanceUserResponse = CreateAppInstanceUserResponse'
+  { -- | The user\'s ARN.
+    appInstanceUserArn :: 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 'CreateAppInstanceUserResponse' 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:
+--
+-- 'appInstanceUserArn', 'createAppInstanceUserResponse_appInstanceUserArn' - The user\'s ARN.
+--
+-- 'httpStatus', 'createAppInstanceUserResponse_httpStatus' - The response's http status code.
+newCreateAppInstanceUserResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateAppInstanceUserResponse
+newCreateAppInstanceUserResponse pHttpStatus_ =
+  CreateAppInstanceUserResponse'
+    { appInstanceUserArn =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The user\'s ARN.
+createAppInstanceUserResponse_appInstanceUserArn :: Lens.Lens' CreateAppInstanceUserResponse (Prelude.Maybe Prelude.Text)
+createAppInstanceUserResponse_appInstanceUserArn = Lens.lens (\CreateAppInstanceUserResponse' {appInstanceUserArn} -> appInstanceUserArn) (\s@CreateAppInstanceUserResponse' {} a -> s {appInstanceUserArn = a} :: CreateAppInstanceUserResponse)
+
+-- | The response's http status code.
+createAppInstanceUserResponse_httpStatus :: Lens.Lens' CreateAppInstanceUserResponse Prelude.Int
+createAppInstanceUserResponse_httpStatus = Lens.lens (\CreateAppInstanceUserResponse' {httpStatus} -> httpStatus) (\s@CreateAppInstanceUserResponse' {} a -> s {httpStatus = a} :: CreateAppInstanceUserResponse)
+
+instance Prelude.NFData CreateAppInstanceUserResponse where
+  rnf CreateAppInstanceUserResponse' {..} =
+    Prelude.rnf appInstanceUserArn
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ChimeSDKIdentity/DeleteAppInstance.hs b/gen/Amazonka/ChimeSDKIdentity/DeleteAppInstance.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ChimeSDKIdentity/DeleteAppInstance.hs
@@ -0,0 +1,120 @@
+{-# 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.ChimeSDKIdentity.DeleteAppInstance
+-- 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 @AppInstance@ and all associated data asynchronously.
+module Amazonka.ChimeSDKIdentity.DeleteAppInstance
+  ( -- * Creating a Request
+    DeleteAppInstance (..),
+    newDeleteAppInstance,
+
+    -- * Request Lenses
+    deleteAppInstance_appInstanceArn,
+
+    -- * Destructuring the Response
+    DeleteAppInstanceResponse (..),
+    newDeleteAppInstanceResponse,
+  )
+where
+
+import Amazonka.ChimeSDKIdentity.Types
+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
+
+-- | /See:/ 'newDeleteAppInstance' smart constructor.
+data DeleteAppInstance = DeleteAppInstance'
+  { -- | The ARN of the @AppInstance@.
+    appInstanceArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteAppInstance' 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:
+--
+-- 'appInstanceArn', 'deleteAppInstance_appInstanceArn' - The ARN of the @AppInstance@.
+newDeleteAppInstance ::
+  -- | 'appInstanceArn'
+  Prelude.Text ->
+  DeleteAppInstance
+newDeleteAppInstance pAppInstanceArn_ =
+  DeleteAppInstance'
+    { appInstanceArn =
+        pAppInstanceArn_
+    }
+
+-- | The ARN of the @AppInstance@.
+deleteAppInstance_appInstanceArn :: Lens.Lens' DeleteAppInstance Prelude.Text
+deleteAppInstance_appInstanceArn = Lens.lens (\DeleteAppInstance' {appInstanceArn} -> appInstanceArn) (\s@DeleteAppInstance' {} a -> s {appInstanceArn = a} :: DeleteAppInstance)
+
+instance Core.AWSRequest DeleteAppInstance where
+  type
+    AWSResponse DeleteAppInstance =
+      DeleteAppInstanceResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveNull DeleteAppInstanceResponse'
+
+instance Prelude.Hashable DeleteAppInstance where
+  hashWithSalt _salt DeleteAppInstance' {..} =
+    _salt `Prelude.hashWithSalt` appInstanceArn
+
+instance Prelude.NFData DeleteAppInstance where
+  rnf DeleteAppInstance' {..} =
+    Prelude.rnf appInstanceArn
+
+instance Data.ToHeaders DeleteAppInstance where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DeleteAppInstance where
+  toPath DeleteAppInstance' {..} =
+    Prelude.mconcat
+      ["/app-instances/", Data.toBS appInstanceArn]
+
+instance Data.ToQuery DeleteAppInstance where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteAppInstanceResponse' smart constructor.
+data DeleteAppInstanceResponse = DeleteAppInstanceResponse'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteAppInstanceResponse' 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.
+newDeleteAppInstanceResponse ::
+  DeleteAppInstanceResponse
+newDeleteAppInstanceResponse =
+  DeleteAppInstanceResponse'
+
+instance Prelude.NFData DeleteAppInstanceResponse where
+  rnf _ = ()
diff --git a/gen/Amazonka/ChimeSDKIdentity/DeleteAppInstanceAdmin.hs b/gen/Amazonka/ChimeSDKIdentity/DeleteAppInstanceAdmin.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ChimeSDKIdentity/DeleteAppInstanceAdmin.hs
@@ -0,0 +1,146 @@
+{-# 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.ChimeSDKIdentity.DeleteAppInstanceAdmin
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Demotes an @AppInstanceAdmin@ to an @AppInstanceUser@. This action does
+-- not delete the user.
+module Amazonka.ChimeSDKIdentity.DeleteAppInstanceAdmin
+  ( -- * Creating a Request
+    DeleteAppInstanceAdmin (..),
+    newDeleteAppInstanceAdmin,
+
+    -- * Request Lenses
+    deleteAppInstanceAdmin_appInstanceAdminArn,
+    deleteAppInstanceAdmin_appInstanceArn,
+
+    -- * Destructuring the Response
+    DeleteAppInstanceAdminResponse (..),
+    newDeleteAppInstanceAdminResponse,
+  )
+where
+
+import Amazonka.ChimeSDKIdentity.Types
+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
+
+-- | /See:/ 'newDeleteAppInstanceAdmin' smart constructor.
+data DeleteAppInstanceAdmin = DeleteAppInstanceAdmin'
+  { -- | The ARN of the @AppInstance@\'s administrator.
+    appInstanceAdminArn :: Prelude.Text,
+    -- | The ARN of the @AppInstance@.
+    appInstanceArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteAppInstanceAdmin' 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:
+--
+-- 'appInstanceAdminArn', 'deleteAppInstanceAdmin_appInstanceAdminArn' - The ARN of the @AppInstance@\'s administrator.
+--
+-- 'appInstanceArn', 'deleteAppInstanceAdmin_appInstanceArn' - The ARN of the @AppInstance@.
+newDeleteAppInstanceAdmin ::
+  -- | 'appInstanceAdminArn'
+  Prelude.Text ->
+  -- | 'appInstanceArn'
+  Prelude.Text ->
+  DeleteAppInstanceAdmin
+newDeleteAppInstanceAdmin
+  pAppInstanceAdminArn_
+  pAppInstanceArn_ =
+    DeleteAppInstanceAdmin'
+      { appInstanceAdminArn =
+          pAppInstanceAdminArn_,
+        appInstanceArn = pAppInstanceArn_
+      }
+
+-- | The ARN of the @AppInstance@\'s administrator.
+deleteAppInstanceAdmin_appInstanceAdminArn :: Lens.Lens' DeleteAppInstanceAdmin Prelude.Text
+deleteAppInstanceAdmin_appInstanceAdminArn = Lens.lens (\DeleteAppInstanceAdmin' {appInstanceAdminArn} -> appInstanceAdminArn) (\s@DeleteAppInstanceAdmin' {} a -> s {appInstanceAdminArn = a} :: DeleteAppInstanceAdmin)
+
+-- | The ARN of the @AppInstance@.
+deleteAppInstanceAdmin_appInstanceArn :: Lens.Lens' DeleteAppInstanceAdmin Prelude.Text
+deleteAppInstanceAdmin_appInstanceArn = Lens.lens (\DeleteAppInstanceAdmin' {appInstanceArn} -> appInstanceArn) (\s@DeleteAppInstanceAdmin' {} a -> s {appInstanceArn = a} :: DeleteAppInstanceAdmin)
+
+instance Core.AWSRequest DeleteAppInstanceAdmin where
+  type
+    AWSResponse DeleteAppInstanceAdmin =
+      DeleteAppInstanceAdminResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveNull
+      DeleteAppInstanceAdminResponse'
+
+instance Prelude.Hashable DeleteAppInstanceAdmin where
+  hashWithSalt _salt DeleteAppInstanceAdmin' {..} =
+    _salt
+      `Prelude.hashWithSalt` appInstanceAdminArn
+      `Prelude.hashWithSalt` appInstanceArn
+
+instance Prelude.NFData DeleteAppInstanceAdmin where
+  rnf DeleteAppInstanceAdmin' {..} =
+    Prelude.rnf appInstanceAdminArn
+      `Prelude.seq` Prelude.rnf appInstanceArn
+
+instance Data.ToHeaders DeleteAppInstanceAdmin where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DeleteAppInstanceAdmin where
+  toPath DeleteAppInstanceAdmin' {..} =
+    Prelude.mconcat
+      [ "/app-instances/",
+        Data.toBS appInstanceArn,
+        "/admins/",
+        Data.toBS appInstanceAdminArn
+      ]
+
+instance Data.ToQuery DeleteAppInstanceAdmin where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteAppInstanceAdminResponse' smart constructor.
+data DeleteAppInstanceAdminResponse = DeleteAppInstanceAdminResponse'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteAppInstanceAdminResponse' 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.
+newDeleteAppInstanceAdminResponse ::
+  DeleteAppInstanceAdminResponse
+newDeleteAppInstanceAdminResponse =
+  DeleteAppInstanceAdminResponse'
+
+instance
+  Prelude.NFData
+    DeleteAppInstanceAdminResponse
+  where
+  rnf _ = ()
diff --git a/gen/Amazonka/ChimeSDKIdentity/DeleteAppInstanceUser.hs b/gen/Amazonka/ChimeSDKIdentity/DeleteAppInstanceUser.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ChimeSDKIdentity/DeleteAppInstanceUser.hs
@@ -0,0 +1,122 @@
+{-# 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.ChimeSDKIdentity.DeleteAppInstanceUser
+-- 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 @AppInstanceUser@.
+module Amazonka.ChimeSDKIdentity.DeleteAppInstanceUser
+  ( -- * Creating a Request
+    DeleteAppInstanceUser (..),
+    newDeleteAppInstanceUser,
+
+    -- * Request Lenses
+    deleteAppInstanceUser_appInstanceUserArn,
+
+    -- * Destructuring the Response
+    DeleteAppInstanceUserResponse (..),
+    newDeleteAppInstanceUserResponse,
+  )
+where
+
+import Amazonka.ChimeSDKIdentity.Types
+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
+
+-- | /See:/ 'newDeleteAppInstanceUser' smart constructor.
+data DeleteAppInstanceUser = DeleteAppInstanceUser'
+  { -- | The ARN of the user request being deleted.
+    appInstanceUserArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteAppInstanceUser' 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:
+--
+-- 'appInstanceUserArn', 'deleteAppInstanceUser_appInstanceUserArn' - The ARN of the user request being deleted.
+newDeleteAppInstanceUser ::
+  -- | 'appInstanceUserArn'
+  Prelude.Text ->
+  DeleteAppInstanceUser
+newDeleteAppInstanceUser pAppInstanceUserArn_ =
+  DeleteAppInstanceUser'
+    { appInstanceUserArn =
+        pAppInstanceUserArn_
+    }
+
+-- | The ARN of the user request being deleted.
+deleteAppInstanceUser_appInstanceUserArn :: Lens.Lens' DeleteAppInstanceUser Prelude.Text
+deleteAppInstanceUser_appInstanceUserArn = Lens.lens (\DeleteAppInstanceUser' {appInstanceUserArn} -> appInstanceUserArn) (\s@DeleteAppInstanceUser' {} a -> s {appInstanceUserArn = a} :: DeleteAppInstanceUser)
+
+instance Core.AWSRequest DeleteAppInstanceUser where
+  type
+    AWSResponse DeleteAppInstanceUser =
+      DeleteAppInstanceUserResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveNull DeleteAppInstanceUserResponse'
+
+instance Prelude.Hashable DeleteAppInstanceUser where
+  hashWithSalt _salt DeleteAppInstanceUser' {..} =
+    _salt `Prelude.hashWithSalt` appInstanceUserArn
+
+instance Prelude.NFData DeleteAppInstanceUser where
+  rnf DeleteAppInstanceUser' {..} =
+    Prelude.rnf appInstanceUserArn
+
+instance Data.ToHeaders DeleteAppInstanceUser where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DeleteAppInstanceUser where
+  toPath DeleteAppInstanceUser' {..} =
+    Prelude.mconcat
+      [ "/app-instance-users/",
+        Data.toBS appInstanceUserArn
+      ]
+
+instance Data.ToQuery DeleteAppInstanceUser where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteAppInstanceUserResponse' smart constructor.
+data DeleteAppInstanceUserResponse = DeleteAppInstanceUserResponse'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteAppInstanceUserResponse' 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.
+newDeleteAppInstanceUserResponse ::
+  DeleteAppInstanceUserResponse
+newDeleteAppInstanceUserResponse =
+  DeleteAppInstanceUserResponse'
+
+instance Prelude.NFData DeleteAppInstanceUserResponse where
+  rnf _ = ()
diff --git a/gen/Amazonka/ChimeSDKIdentity/DeregisterAppInstanceUserEndpoint.hs b/gen/Amazonka/ChimeSDKIdentity/DeregisterAppInstanceUserEndpoint.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ChimeSDKIdentity/DeregisterAppInstanceUserEndpoint.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.ChimeSDKIdentity.DeregisterAppInstanceUserEndpoint
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deregisters an @AppInstanceUserEndpoint@.
+module Amazonka.ChimeSDKIdentity.DeregisterAppInstanceUserEndpoint
+  ( -- * Creating a Request
+    DeregisterAppInstanceUserEndpoint (..),
+    newDeregisterAppInstanceUserEndpoint,
+
+    -- * Request Lenses
+    deregisterAppInstanceUserEndpoint_appInstanceUserArn,
+    deregisterAppInstanceUserEndpoint_endpointId,
+
+    -- * Destructuring the Response
+    DeregisterAppInstanceUserEndpointResponse (..),
+    newDeregisterAppInstanceUserEndpointResponse,
+  )
+where
+
+import Amazonka.ChimeSDKIdentity.Types
+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
+
+-- | /See:/ 'newDeregisterAppInstanceUserEndpoint' smart constructor.
+data DeregisterAppInstanceUserEndpoint = DeregisterAppInstanceUserEndpoint'
+  { -- | The ARN of the @AppInstanceUser@.
+    appInstanceUserArn :: Data.Sensitive Prelude.Text,
+    -- | The unique identifier of the @AppInstanceUserEndpoint@.
+    endpointId :: Data.Sensitive Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeregisterAppInstanceUserEndpoint' 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:
+--
+-- 'appInstanceUserArn', 'deregisterAppInstanceUserEndpoint_appInstanceUserArn' - The ARN of the @AppInstanceUser@.
+--
+-- 'endpointId', 'deregisterAppInstanceUserEndpoint_endpointId' - The unique identifier of the @AppInstanceUserEndpoint@.
+newDeregisterAppInstanceUserEndpoint ::
+  -- | 'appInstanceUserArn'
+  Prelude.Text ->
+  -- | 'endpointId'
+  Prelude.Text ->
+  DeregisterAppInstanceUserEndpoint
+newDeregisterAppInstanceUserEndpoint
+  pAppInstanceUserArn_
+  pEndpointId_ =
+    DeregisterAppInstanceUserEndpoint'
+      { appInstanceUserArn =
+          Data._Sensitive
+            Lens.# pAppInstanceUserArn_,
+        endpointId =
+          Data._Sensitive Lens.# pEndpointId_
+      }
+
+-- | The ARN of the @AppInstanceUser@.
+deregisterAppInstanceUserEndpoint_appInstanceUserArn :: Lens.Lens' DeregisterAppInstanceUserEndpoint Prelude.Text
+deregisterAppInstanceUserEndpoint_appInstanceUserArn = Lens.lens (\DeregisterAppInstanceUserEndpoint' {appInstanceUserArn} -> appInstanceUserArn) (\s@DeregisterAppInstanceUserEndpoint' {} a -> s {appInstanceUserArn = a} :: DeregisterAppInstanceUserEndpoint) Prelude.. Data._Sensitive
+
+-- | The unique identifier of the @AppInstanceUserEndpoint@.
+deregisterAppInstanceUserEndpoint_endpointId :: Lens.Lens' DeregisterAppInstanceUserEndpoint Prelude.Text
+deregisterAppInstanceUserEndpoint_endpointId = Lens.lens (\DeregisterAppInstanceUserEndpoint' {endpointId} -> endpointId) (\s@DeregisterAppInstanceUserEndpoint' {} a -> s {endpointId = a} :: DeregisterAppInstanceUserEndpoint) Prelude.. Data._Sensitive
+
+instance
+  Core.AWSRequest
+    DeregisterAppInstanceUserEndpoint
+  where
+  type
+    AWSResponse DeregisterAppInstanceUserEndpoint =
+      DeregisterAppInstanceUserEndpointResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveNull
+      DeregisterAppInstanceUserEndpointResponse'
+
+instance
+  Prelude.Hashable
+    DeregisterAppInstanceUserEndpoint
+  where
+  hashWithSalt
+    _salt
+    DeregisterAppInstanceUserEndpoint' {..} =
+      _salt
+        `Prelude.hashWithSalt` appInstanceUserArn
+        `Prelude.hashWithSalt` endpointId
+
+instance
+  Prelude.NFData
+    DeregisterAppInstanceUserEndpoint
+  where
+  rnf DeregisterAppInstanceUserEndpoint' {..} =
+    Prelude.rnf appInstanceUserArn
+      `Prelude.seq` Prelude.rnf endpointId
+
+instance
+  Data.ToHeaders
+    DeregisterAppInstanceUserEndpoint
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance
+  Data.ToPath
+    DeregisterAppInstanceUserEndpoint
+  where
+  toPath DeregisterAppInstanceUserEndpoint' {..} =
+    Prelude.mconcat
+      [ "/app-instance-users/",
+        Data.toBS appInstanceUserArn,
+        "/endpoints/",
+        Data.toBS endpointId
+      ]
+
+instance
+  Data.ToQuery
+    DeregisterAppInstanceUserEndpoint
+  where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeregisterAppInstanceUserEndpointResponse' smart constructor.
+data DeregisterAppInstanceUserEndpointResponse = DeregisterAppInstanceUserEndpointResponse'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeregisterAppInstanceUserEndpointResponse' 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.
+newDeregisterAppInstanceUserEndpointResponse ::
+  DeregisterAppInstanceUserEndpointResponse
+newDeregisterAppInstanceUserEndpointResponse =
+  DeregisterAppInstanceUserEndpointResponse'
+
+instance
+  Prelude.NFData
+    DeregisterAppInstanceUserEndpointResponse
+  where
+  rnf _ = ()
diff --git a/gen/Amazonka/ChimeSDKIdentity/DescribeAppInstance.hs b/gen/Amazonka/ChimeSDKIdentity/DescribeAppInstance.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ChimeSDKIdentity/DescribeAppInstance.hs
@@ -0,0 +1,158 @@
+{-# 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.ChimeSDKIdentity.DescribeAppInstance
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns the full details of an @AppInstance@.
+module Amazonka.ChimeSDKIdentity.DescribeAppInstance
+  ( -- * Creating a Request
+    DescribeAppInstance (..),
+    newDescribeAppInstance,
+
+    -- * Request Lenses
+    describeAppInstance_appInstanceArn,
+
+    -- * Destructuring the Response
+    DescribeAppInstanceResponse (..),
+    newDescribeAppInstanceResponse,
+
+    -- * Response Lenses
+    describeAppInstanceResponse_appInstance,
+    describeAppInstanceResponse_httpStatus,
+  )
+where
+
+import Amazonka.ChimeSDKIdentity.Types
+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
+
+-- | /See:/ 'newDescribeAppInstance' smart constructor.
+data DescribeAppInstance = DescribeAppInstance'
+  { -- | The ARN of the @AppInstance@.
+    appInstanceArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeAppInstance' 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:
+--
+-- 'appInstanceArn', 'describeAppInstance_appInstanceArn' - The ARN of the @AppInstance@.
+newDescribeAppInstance ::
+  -- | 'appInstanceArn'
+  Prelude.Text ->
+  DescribeAppInstance
+newDescribeAppInstance pAppInstanceArn_ =
+  DescribeAppInstance'
+    { appInstanceArn =
+        pAppInstanceArn_
+    }
+
+-- | The ARN of the @AppInstance@.
+describeAppInstance_appInstanceArn :: Lens.Lens' DescribeAppInstance Prelude.Text
+describeAppInstance_appInstanceArn = Lens.lens (\DescribeAppInstance' {appInstanceArn} -> appInstanceArn) (\s@DescribeAppInstance' {} a -> s {appInstanceArn = a} :: DescribeAppInstance)
+
+instance Core.AWSRequest DescribeAppInstance where
+  type
+    AWSResponse DescribeAppInstance =
+      DescribeAppInstanceResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeAppInstanceResponse'
+            Prelude.<$> (x Data..?> "AppInstance")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeAppInstance where
+  hashWithSalt _salt DescribeAppInstance' {..} =
+    _salt `Prelude.hashWithSalt` appInstanceArn
+
+instance Prelude.NFData DescribeAppInstance where
+  rnf DescribeAppInstance' {..} =
+    Prelude.rnf appInstanceArn
+
+instance Data.ToHeaders DescribeAppInstance where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DescribeAppInstance where
+  toPath DescribeAppInstance' {..} =
+    Prelude.mconcat
+      ["/app-instances/", Data.toBS appInstanceArn]
+
+instance Data.ToQuery DescribeAppInstance where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDescribeAppInstanceResponse' smart constructor.
+data DescribeAppInstanceResponse = DescribeAppInstanceResponse'
+  { -- | The ARN, metadata, created and last-updated timestamps, and the name of
+    -- the @AppInstance@. All timestamps use epoch milliseconds.
+    appInstance :: Prelude.Maybe AppInstance,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeAppInstanceResponse' 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:
+--
+-- 'appInstance', 'describeAppInstanceResponse_appInstance' - The ARN, metadata, created and last-updated timestamps, and the name of
+-- the @AppInstance@. All timestamps use epoch milliseconds.
+--
+-- 'httpStatus', 'describeAppInstanceResponse_httpStatus' - The response's http status code.
+newDescribeAppInstanceResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeAppInstanceResponse
+newDescribeAppInstanceResponse pHttpStatus_ =
+  DescribeAppInstanceResponse'
+    { appInstance =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The ARN, metadata, created and last-updated timestamps, and the name of
+-- the @AppInstance@. All timestamps use epoch milliseconds.
+describeAppInstanceResponse_appInstance :: Lens.Lens' DescribeAppInstanceResponse (Prelude.Maybe AppInstance)
+describeAppInstanceResponse_appInstance = Lens.lens (\DescribeAppInstanceResponse' {appInstance} -> appInstance) (\s@DescribeAppInstanceResponse' {} a -> s {appInstance = a} :: DescribeAppInstanceResponse)
+
+-- | The response's http status code.
+describeAppInstanceResponse_httpStatus :: Lens.Lens' DescribeAppInstanceResponse Prelude.Int
+describeAppInstanceResponse_httpStatus = Lens.lens (\DescribeAppInstanceResponse' {httpStatus} -> httpStatus) (\s@DescribeAppInstanceResponse' {} a -> s {httpStatus = a} :: DescribeAppInstanceResponse)
+
+instance Prelude.NFData DescribeAppInstanceResponse where
+  rnf DescribeAppInstanceResponse' {..} =
+    Prelude.rnf appInstance
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ChimeSDKIdentity/DescribeAppInstanceAdmin.hs b/gen/Amazonka/ChimeSDKIdentity/DescribeAppInstanceAdmin.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ChimeSDKIdentity/DescribeAppInstanceAdmin.hs
@@ -0,0 +1,185 @@
+{-# 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.ChimeSDKIdentity.DescribeAppInstanceAdmin
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns the full details of an @AppInstanceAdmin@.
+module Amazonka.ChimeSDKIdentity.DescribeAppInstanceAdmin
+  ( -- * Creating a Request
+    DescribeAppInstanceAdmin (..),
+    newDescribeAppInstanceAdmin,
+
+    -- * Request Lenses
+    describeAppInstanceAdmin_appInstanceAdminArn,
+    describeAppInstanceAdmin_appInstanceArn,
+
+    -- * Destructuring the Response
+    DescribeAppInstanceAdminResponse (..),
+    newDescribeAppInstanceAdminResponse,
+
+    -- * Response Lenses
+    describeAppInstanceAdminResponse_appInstanceAdmin,
+    describeAppInstanceAdminResponse_httpStatus,
+  )
+where
+
+import Amazonka.ChimeSDKIdentity.Types
+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
+
+-- | /See:/ 'newDescribeAppInstanceAdmin' smart constructor.
+data DescribeAppInstanceAdmin = DescribeAppInstanceAdmin'
+  { -- | The ARN of the @AppInstanceAdmin@.
+    appInstanceAdminArn :: Prelude.Text,
+    -- | The ARN of the @AppInstance@.
+    appInstanceArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeAppInstanceAdmin' 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:
+--
+-- 'appInstanceAdminArn', 'describeAppInstanceAdmin_appInstanceAdminArn' - The ARN of the @AppInstanceAdmin@.
+--
+-- 'appInstanceArn', 'describeAppInstanceAdmin_appInstanceArn' - The ARN of the @AppInstance@.
+newDescribeAppInstanceAdmin ::
+  -- | 'appInstanceAdminArn'
+  Prelude.Text ->
+  -- | 'appInstanceArn'
+  Prelude.Text ->
+  DescribeAppInstanceAdmin
+newDescribeAppInstanceAdmin
+  pAppInstanceAdminArn_
+  pAppInstanceArn_ =
+    DescribeAppInstanceAdmin'
+      { appInstanceAdminArn =
+          pAppInstanceAdminArn_,
+        appInstanceArn = pAppInstanceArn_
+      }
+
+-- | The ARN of the @AppInstanceAdmin@.
+describeAppInstanceAdmin_appInstanceAdminArn :: Lens.Lens' DescribeAppInstanceAdmin Prelude.Text
+describeAppInstanceAdmin_appInstanceAdminArn = Lens.lens (\DescribeAppInstanceAdmin' {appInstanceAdminArn} -> appInstanceAdminArn) (\s@DescribeAppInstanceAdmin' {} a -> s {appInstanceAdminArn = a} :: DescribeAppInstanceAdmin)
+
+-- | The ARN of the @AppInstance@.
+describeAppInstanceAdmin_appInstanceArn :: Lens.Lens' DescribeAppInstanceAdmin Prelude.Text
+describeAppInstanceAdmin_appInstanceArn = Lens.lens (\DescribeAppInstanceAdmin' {appInstanceArn} -> appInstanceArn) (\s@DescribeAppInstanceAdmin' {} a -> s {appInstanceArn = a} :: DescribeAppInstanceAdmin)
+
+instance Core.AWSRequest DescribeAppInstanceAdmin where
+  type
+    AWSResponse DescribeAppInstanceAdmin =
+      DescribeAppInstanceAdminResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeAppInstanceAdminResponse'
+            Prelude.<$> (x Data..?> "AppInstanceAdmin")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeAppInstanceAdmin where
+  hashWithSalt _salt DescribeAppInstanceAdmin' {..} =
+    _salt
+      `Prelude.hashWithSalt` appInstanceAdminArn
+      `Prelude.hashWithSalt` appInstanceArn
+
+instance Prelude.NFData DescribeAppInstanceAdmin where
+  rnf DescribeAppInstanceAdmin' {..} =
+    Prelude.rnf appInstanceAdminArn
+      `Prelude.seq` Prelude.rnf appInstanceArn
+
+instance Data.ToHeaders DescribeAppInstanceAdmin where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DescribeAppInstanceAdmin where
+  toPath DescribeAppInstanceAdmin' {..} =
+    Prelude.mconcat
+      [ "/app-instances/",
+        Data.toBS appInstanceArn,
+        "/admins/",
+        Data.toBS appInstanceAdminArn
+      ]
+
+instance Data.ToQuery DescribeAppInstanceAdmin where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDescribeAppInstanceAdminResponse' smart constructor.
+data DescribeAppInstanceAdminResponse = DescribeAppInstanceAdminResponse'
+  { -- | The ARN and name of the @AppInstanceUser@, the ARN of the @AppInstance@,
+    -- and the created and last-updated timestamps. All timestamps use epoch
+    -- milliseconds.
+    appInstanceAdmin :: Prelude.Maybe AppInstanceAdmin,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeAppInstanceAdminResponse' 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:
+--
+-- 'appInstanceAdmin', 'describeAppInstanceAdminResponse_appInstanceAdmin' - The ARN and name of the @AppInstanceUser@, the ARN of the @AppInstance@,
+-- and the created and last-updated timestamps. All timestamps use epoch
+-- milliseconds.
+--
+-- 'httpStatus', 'describeAppInstanceAdminResponse_httpStatus' - The response's http status code.
+newDescribeAppInstanceAdminResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeAppInstanceAdminResponse
+newDescribeAppInstanceAdminResponse pHttpStatus_ =
+  DescribeAppInstanceAdminResponse'
+    { appInstanceAdmin =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The ARN and name of the @AppInstanceUser@, the ARN of the @AppInstance@,
+-- and the created and last-updated timestamps. All timestamps use epoch
+-- milliseconds.
+describeAppInstanceAdminResponse_appInstanceAdmin :: Lens.Lens' DescribeAppInstanceAdminResponse (Prelude.Maybe AppInstanceAdmin)
+describeAppInstanceAdminResponse_appInstanceAdmin = Lens.lens (\DescribeAppInstanceAdminResponse' {appInstanceAdmin} -> appInstanceAdmin) (\s@DescribeAppInstanceAdminResponse' {} a -> s {appInstanceAdmin = a} :: DescribeAppInstanceAdminResponse)
+
+-- | The response's http status code.
+describeAppInstanceAdminResponse_httpStatus :: Lens.Lens' DescribeAppInstanceAdminResponse Prelude.Int
+describeAppInstanceAdminResponse_httpStatus = Lens.lens (\DescribeAppInstanceAdminResponse' {httpStatus} -> httpStatus) (\s@DescribeAppInstanceAdminResponse' {} a -> s {httpStatus = a} :: DescribeAppInstanceAdminResponse)
+
+instance
+  Prelude.NFData
+    DescribeAppInstanceAdminResponse
+  where
+  rnf DescribeAppInstanceAdminResponse' {..} =
+    Prelude.rnf appInstanceAdmin
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ChimeSDKIdentity/DescribeAppInstanceUser.hs b/gen/Amazonka/ChimeSDKIdentity/DescribeAppInstanceUser.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ChimeSDKIdentity/DescribeAppInstanceUser.hs
@@ -0,0 +1,160 @@
+{-# 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.ChimeSDKIdentity.DescribeAppInstanceUser
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns the full details of an @AppInstanceUser@.
+module Amazonka.ChimeSDKIdentity.DescribeAppInstanceUser
+  ( -- * Creating a Request
+    DescribeAppInstanceUser (..),
+    newDescribeAppInstanceUser,
+
+    -- * Request Lenses
+    describeAppInstanceUser_appInstanceUserArn,
+
+    -- * Destructuring the Response
+    DescribeAppInstanceUserResponse (..),
+    newDescribeAppInstanceUserResponse,
+
+    -- * Response Lenses
+    describeAppInstanceUserResponse_appInstanceUser,
+    describeAppInstanceUserResponse_httpStatus,
+  )
+where
+
+import Amazonka.ChimeSDKIdentity.Types
+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
+
+-- | /See:/ 'newDescribeAppInstanceUser' smart constructor.
+data DescribeAppInstanceUser = DescribeAppInstanceUser'
+  { -- | The ARN of the @AppInstanceUser@.
+    appInstanceUserArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeAppInstanceUser' 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:
+--
+-- 'appInstanceUserArn', 'describeAppInstanceUser_appInstanceUserArn' - The ARN of the @AppInstanceUser@.
+newDescribeAppInstanceUser ::
+  -- | 'appInstanceUserArn'
+  Prelude.Text ->
+  DescribeAppInstanceUser
+newDescribeAppInstanceUser pAppInstanceUserArn_ =
+  DescribeAppInstanceUser'
+    { appInstanceUserArn =
+        pAppInstanceUserArn_
+    }
+
+-- | The ARN of the @AppInstanceUser@.
+describeAppInstanceUser_appInstanceUserArn :: Lens.Lens' DescribeAppInstanceUser Prelude.Text
+describeAppInstanceUser_appInstanceUserArn = Lens.lens (\DescribeAppInstanceUser' {appInstanceUserArn} -> appInstanceUserArn) (\s@DescribeAppInstanceUser' {} a -> s {appInstanceUserArn = a} :: DescribeAppInstanceUser)
+
+instance Core.AWSRequest DescribeAppInstanceUser where
+  type
+    AWSResponse DescribeAppInstanceUser =
+      DescribeAppInstanceUserResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeAppInstanceUserResponse'
+            Prelude.<$> (x Data..?> "AppInstanceUser")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeAppInstanceUser where
+  hashWithSalt _salt DescribeAppInstanceUser' {..} =
+    _salt `Prelude.hashWithSalt` appInstanceUserArn
+
+instance Prelude.NFData DescribeAppInstanceUser where
+  rnf DescribeAppInstanceUser' {..} =
+    Prelude.rnf appInstanceUserArn
+
+instance Data.ToHeaders DescribeAppInstanceUser where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DescribeAppInstanceUser where
+  toPath DescribeAppInstanceUser' {..} =
+    Prelude.mconcat
+      [ "/app-instance-users/",
+        Data.toBS appInstanceUserArn
+      ]
+
+instance Data.ToQuery DescribeAppInstanceUser where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDescribeAppInstanceUserResponse' smart constructor.
+data DescribeAppInstanceUserResponse = DescribeAppInstanceUserResponse'
+  { -- | The name of the @AppInstanceUser@.
+    appInstanceUser :: Prelude.Maybe AppInstanceUser,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeAppInstanceUserResponse' 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:
+--
+-- 'appInstanceUser', 'describeAppInstanceUserResponse_appInstanceUser' - The name of the @AppInstanceUser@.
+--
+-- 'httpStatus', 'describeAppInstanceUserResponse_httpStatus' - The response's http status code.
+newDescribeAppInstanceUserResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeAppInstanceUserResponse
+newDescribeAppInstanceUserResponse pHttpStatus_ =
+  DescribeAppInstanceUserResponse'
+    { appInstanceUser =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The name of the @AppInstanceUser@.
+describeAppInstanceUserResponse_appInstanceUser :: Lens.Lens' DescribeAppInstanceUserResponse (Prelude.Maybe AppInstanceUser)
+describeAppInstanceUserResponse_appInstanceUser = Lens.lens (\DescribeAppInstanceUserResponse' {appInstanceUser} -> appInstanceUser) (\s@DescribeAppInstanceUserResponse' {} a -> s {appInstanceUser = a} :: DescribeAppInstanceUserResponse)
+
+-- | The response's http status code.
+describeAppInstanceUserResponse_httpStatus :: Lens.Lens' DescribeAppInstanceUserResponse Prelude.Int
+describeAppInstanceUserResponse_httpStatus = Lens.lens (\DescribeAppInstanceUserResponse' {httpStatus} -> httpStatus) (\s@DescribeAppInstanceUserResponse' {} a -> s {httpStatus = a} :: DescribeAppInstanceUserResponse)
+
+instance
+  Prelude.NFData
+    DescribeAppInstanceUserResponse
+  where
+  rnf DescribeAppInstanceUserResponse' {..} =
+    Prelude.rnf appInstanceUser
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ChimeSDKIdentity/DescribeAppInstanceUserEndpoint.hs b/gen/Amazonka/ChimeSDKIdentity/DescribeAppInstanceUserEndpoint.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ChimeSDKIdentity/DescribeAppInstanceUserEndpoint.hs
@@ -0,0 +1,205 @@
+{-# 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.ChimeSDKIdentity.DescribeAppInstanceUserEndpoint
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns the full details of an @AppInstanceUserEndpoint@.
+module Amazonka.ChimeSDKIdentity.DescribeAppInstanceUserEndpoint
+  ( -- * Creating a Request
+    DescribeAppInstanceUserEndpoint (..),
+    newDescribeAppInstanceUserEndpoint,
+
+    -- * Request Lenses
+    describeAppInstanceUserEndpoint_appInstanceUserArn,
+    describeAppInstanceUserEndpoint_endpointId,
+
+    -- * Destructuring the Response
+    DescribeAppInstanceUserEndpointResponse (..),
+    newDescribeAppInstanceUserEndpointResponse,
+
+    -- * Response Lenses
+    describeAppInstanceUserEndpointResponse_appInstanceUserEndpoint,
+    describeAppInstanceUserEndpointResponse_httpStatus,
+  )
+where
+
+import Amazonka.ChimeSDKIdentity.Types
+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
+
+-- | /See:/ 'newDescribeAppInstanceUserEndpoint' smart constructor.
+data DescribeAppInstanceUserEndpoint = DescribeAppInstanceUserEndpoint'
+  { -- | The ARN of the @AppInstanceUser@.
+    appInstanceUserArn :: Data.Sensitive Prelude.Text,
+    -- | The unique identifier of the @AppInstanceUserEndpoint@.
+    endpointId :: Data.Sensitive Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeAppInstanceUserEndpoint' 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:
+--
+-- 'appInstanceUserArn', 'describeAppInstanceUserEndpoint_appInstanceUserArn' - The ARN of the @AppInstanceUser@.
+--
+-- 'endpointId', 'describeAppInstanceUserEndpoint_endpointId' - The unique identifier of the @AppInstanceUserEndpoint@.
+newDescribeAppInstanceUserEndpoint ::
+  -- | 'appInstanceUserArn'
+  Prelude.Text ->
+  -- | 'endpointId'
+  Prelude.Text ->
+  DescribeAppInstanceUserEndpoint
+newDescribeAppInstanceUserEndpoint
+  pAppInstanceUserArn_
+  pEndpointId_ =
+    DescribeAppInstanceUserEndpoint'
+      { appInstanceUserArn =
+          Data._Sensitive
+            Lens.# pAppInstanceUserArn_,
+        endpointId =
+          Data._Sensitive Lens.# pEndpointId_
+      }
+
+-- | The ARN of the @AppInstanceUser@.
+describeAppInstanceUserEndpoint_appInstanceUserArn :: Lens.Lens' DescribeAppInstanceUserEndpoint Prelude.Text
+describeAppInstanceUserEndpoint_appInstanceUserArn = Lens.lens (\DescribeAppInstanceUserEndpoint' {appInstanceUserArn} -> appInstanceUserArn) (\s@DescribeAppInstanceUserEndpoint' {} a -> s {appInstanceUserArn = a} :: DescribeAppInstanceUserEndpoint) Prelude.. Data._Sensitive
+
+-- | The unique identifier of the @AppInstanceUserEndpoint@.
+describeAppInstanceUserEndpoint_endpointId :: Lens.Lens' DescribeAppInstanceUserEndpoint Prelude.Text
+describeAppInstanceUserEndpoint_endpointId = Lens.lens (\DescribeAppInstanceUserEndpoint' {endpointId} -> endpointId) (\s@DescribeAppInstanceUserEndpoint' {} a -> s {endpointId = a} :: DescribeAppInstanceUserEndpoint) Prelude.. Data._Sensitive
+
+instance
+  Core.AWSRequest
+    DescribeAppInstanceUserEndpoint
+  where
+  type
+    AWSResponse DescribeAppInstanceUserEndpoint =
+      DescribeAppInstanceUserEndpointResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeAppInstanceUserEndpointResponse'
+            Prelude.<$> (x Data..?> "AppInstanceUserEndpoint")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    DescribeAppInstanceUserEndpoint
+  where
+  hashWithSalt
+    _salt
+    DescribeAppInstanceUserEndpoint' {..} =
+      _salt
+        `Prelude.hashWithSalt` appInstanceUserArn
+        `Prelude.hashWithSalt` endpointId
+
+instance
+  Prelude.NFData
+    DescribeAppInstanceUserEndpoint
+  where
+  rnf DescribeAppInstanceUserEndpoint' {..} =
+    Prelude.rnf appInstanceUserArn
+      `Prelude.seq` Prelude.rnf endpointId
+
+instance
+  Data.ToHeaders
+    DescribeAppInstanceUserEndpoint
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DescribeAppInstanceUserEndpoint where
+  toPath DescribeAppInstanceUserEndpoint' {..} =
+    Prelude.mconcat
+      [ "/app-instance-users/",
+        Data.toBS appInstanceUserArn,
+        "/endpoints/",
+        Data.toBS endpointId
+      ]
+
+instance Data.ToQuery DescribeAppInstanceUserEndpoint where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDescribeAppInstanceUserEndpointResponse' smart constructor.
+data DescribeAppInstanceUserEndpointResponse = DescribeAppInstanceUserEndpointResponse'
+  { -- | The full details of an @AppInstanceUserEndpoint@: the
+    -- @AppInstanceUserArn@, ID, name, type, resource ARN, attributes, allow
+    -- messages, state, and created and last updated timestamps. All timestamps
+    -- use epoch milliseconds.
+    appInstanceUserEndpoint :: Prelude.Maybe AppInstanceUserEndpoint,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeAppInstanceUserEndpointResponse' 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:
+--
+-- 'appInstanceUserEndpoint', 'describeAppInstanceUserEndpointResponse_appInstanceUserEndpoint' - The full details of an @AppInstanceUserEndpoint@: the
+-- @AppInstanceUserArn@, ID, name, type, resource ARN, attributes, allow
+-- messages, state, and created and last updated timestamps. All timestamps
+-- use epoch milliseconds.
+--
+-- 'httpStatus', 'describeAppInstanceUserEndpointResponse_httpStatus' - The response's http status code.
+newDescribeAppInstanceUserEndpointResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeAppInstanceUserEndpointResponse
+newDescribeAppInstanceUserEndpointResponse
+  pHttpStatus_ =
+    DescribeAppInstanceUserEndpointResponse'
+      { appInstanceUserEndpoint =
+          Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | The full details of an @AppInstanceUserEndpoint@: the
+-- @AppInstanceUserArn@, ID, name, type, resource ARN, attributes, allow
+-- messages, state, and created and last updated timestamps. All timestamps
+-- use epoch milliseconds.
+describeAppInstanceUserEndpointResponse_appInstanceUserEndpoint :: Lens.Lens' DescribeAppInstanceUserEndpointResponse (Prelude.Maybe AppInstanceUserEndpoint)
+describeAppInstanceUserEndpointResponse_appInstanceUserEndpoint = Lens.lens (\DescribeAppInstanceUserEndpointResponse' {appInstanceUserEndpoint} -> appInstanceUserEndpoint) (\s@DescribeAppInstanceUserEndpointResponse' {} a -> s {appInstanceUserEndpoint = a} :: DescribeAppInstanceUserEndpointResponse)
+
+-- | The response's http status code.
+describeAppInstanceUserEndpointResponse_httpStatus :: Lens.Lens' DescribeAppInstanceUserEndpointResponse Prelude.Int
+describeAppInstanceUserEndpointResponse_httpStatus = Lens.lens (\DescribeAppInstanceUserEndpointResponse' {httpStatus} -> httpStatus) (\s@DescribeAppInstanceUserEndpointResponse' {} a -> s {httpStatus = a} :: DescribeAppInstanceUserEndpointResponse)
+
+instance
+  Prelude.NFData
+    DescribeAppInstanceUserEndpointResponse
+  where
+  rnf DescribeAppInstanceUserEndpointResponse' {..} =
+    Prelude.rnf appInstanceUserEndpoint
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ChimeSDKIdentity/GetAppInstanceRetentionSettings.hs b/gen/Amazonka/ChimeSDKIdentity/GetAppInstanceRetentionSettings.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ChimeSDKIdentity/GetAppInstanceRetentionSettings.hs
@@ -0,0 +1,192 @@
+{-# 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.ChimeSDKIdentity.GetAppInstanceRetentionSettings
+-- 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 retention settings for an @AppInstance@.
+module Amazonka.ChimeSDKIdentity.GetAppInstanceRetentionSettings
+  ( -- * Creating a Request
+    GetAppInstanceRetentionSettings (..),
+    newGetAppInstanceRetentionSettings,
+
+    -- * Request Lenses
+    getAppInstanceRetentionSettings_appInstanceArn,
+
+    -- * Destructuring the Response
+    GetAppInstanceRetentionSettingsResponse (..),
+    newGetAppInstanceRetentionSettingsResponse,
+
+    -- * Response Lenses
+    getAppInstanceRetentionSettingsResponse_appInstanceRetentionSettings,
+    getAppInstanceRetentionSettingsResponse_initiateDeletionTimestamp,
+    getAppInstanceRetentionSettingsResponse_httpStatus,
+  )
+where
+
+import Amazonka.ChimeSDKIdentity.Types
+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
+
+-- | /See:/ 'newGetAppInstanceRetentionSettings' smart constructor.
+data GetAppInstanceRetentionSettings = GetAppInstanceRetentionSettings'
+  { -- | The ARN of the @AppInstance@.
+    appInstanceArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetAppInstanceRetentionSettings' 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:
+--
+-- 'appInstanceArn', 'getAppInstanceRetentionSettings_appInstanceArn' - The ARN of the @AppInstance@.
+newGetAppInstanceRetentionSettings ::
+  -- | 'appInstanceArn'
+  Prelude.Text ->
+  GetAppInstanceRetentionSettings
+newGetAppInstanceRetentionSettings pAppInstanceArn_ =
+  GetAppInstanceRetentionSettings'
+    { appInstanceArn =
+        pAppInstanceArn_
+    }
+
+-- | The ARN of the @AppInstance@.
+getAppInstanceRetentionSettings_appInstanceArn :: Lens.Lens' GetAppInstanceRetentionSettings Prelude.Text
+getAppInstanceRetentionSettings_appInstanceArn = Lens.lens (\GetAppInstanceRetentionSettings' {appInstanceArn} -> appInstanceArn) (\s@GetAppInstanceRetentionSettings' {} a -> s {appInstanceArn = a} :: GetAppInstanceRetentionSettings)
+
+instance
+  Core.AWSRequest
+    GetAppInstanceRetentionSettings
+  where
+  type
+    AWSResponse GetAppInstanceRetentionSettings =
+      GetAppInstanceRetentionSettingsResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetAppInstanceRetentionSettingsResponse'
+            Prelude.<$> (x Data..?> "AppInstanceRetentionSettings")
+            Prelude.<*> (x Data..?> "InitiateDeletionTimestamp")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    GetAppInstanceRetentionSettings
+  where
+  hashWithSalt
+    _salt
+    GetAppInstanceRetentionSettings' {..} =
+      _salt `Prelude.hashWithSalt` appInstanceArn
+
+instance
+  Prelude.NFData
+    GetAppInstanceRetentionSettings
+  where
+  rnf GetAppInstanceRetentionSettings' {..} =
+    Prelude.rnf appInstanceArn
+
+instance
+  Data.ToHeaders
+    GetAppInstanceRetentionSettings
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath GetAppInstanceRetentionSettings where
+  toPath GetAppInstanceRetentionSettings' {..} =
+    Prelude.mconcat
+      [ "/app-instances/",
+        Data.toBS appInstanceArn,
+        "/retention-settings"
+      ]
+
+instance Data.ToQuery GetAppInstanceRetentionSettings where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetAppInstanceRetentionSettingsResponse' smart constructor.
+data GetAppInstanceRetentionSettingsResponse = GetAppInstanceRetentionSettingsResponse'
+  { -- | The retention settings for the @AppInstance@.
+    appInstanceRetentionSettings :: Prelude.Maybe AppInstanceRetentionSettings,
+    -- | The timestamp representing the time at which the specified items are
+    -- retained, in Epoch Seconds.
+    initiateDeletionTimestamp :: Prelude.Maybe Data.POSIX,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetAppInstanceRetentionSettingsResponse' 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:
+--
+-- 'appInstanceRetentionSettings', 'getAppInstanceRetentionSettingsResponse_appInstanceRetentionSettings' - The retention settings for the @AppInstance@.
+--
+-- 'initiateDeletionTimestamp', 'getAppInstanceRetentionSettingsResponse_initiateDeletionTimestamp' - The timestamp representing the time at which the specified items are
+-- retained, in Epoch Seconds.
+--
+-- 'httpStatus', 'getAppInstanceRetentionSettingsResponse_httpStatus' - The response's http status code.
+newGetAppInstanceRetentionSettingsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetAppInstanceRetentionSettingsResponse
+newGetAppInstanceRetentionSettingsResponse
+  pHttpStatus_ =
+    GetAppInstanceRetentionSettingsResponse'
+      { appInstanceRetentionSettings =
+          Prelude.Nothing,
+        initiateDeletionTimestamp =
+          Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | The retention settings for the @AppInstance@.
+getAppInstanceRetentionSettingsResponse_appInstanceRetentionSettings :: Lens.Lens' GetAppInstanceRetentionSettingsResponse (Prelude.Maybe AppInstanceRetentionSettings)
+getAppInstanceRetentionSettingsResponse_appInstanceRetentionSettings = Lens.lens (\GetAppInstanceRetentionSettingsResponse' {appInstanceRetentionSettings} -> appInstanceRetentionSettings) (\s@GetAppInstanceRetentionSettingsResponse' {} a -> s {appInstanceRetentionSettings = a} :: GetAppInstanceRetentionSettingsResponse)
+
+-- | The timestamp representing the time at which the specified items are
+-- retained, in Epoch Seconds.
+getAppInstanceRetentionSettingsResponse_initiateDeletionTimestamp :: Lens.Lens' GetAppInstanceRetentionSettingsResponse (Prelude.Maybe Prelude.UTCTime)
+getAppInstanceRetentionSettingsResponse_initiateDeletionTimestamp = Lens.lens (\GetAppInstanceRetentionSettingsResponse' {initiateDeletionTimestamp} -> initiateDeletionTimestamp) (\s@GetAppInstanceRetentionSettingsResponse' {} a -> s {initiateDeletionTimestamp = a} :: GetAppInstanceRetentionSettingsResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The response's http status code.
+getAppInstanceRetentionSettingsResponse_httpStatus :: Lens.Lens' GetAppInstanceRetentionSettingsResponse Prelude.Int
+getAppInstanceRetentionSettingsResponse_httpStatus = Lens.lens (\GetAppInstanceRetentionSettingsResponse' {httpStatus} -> httpStatus) (\s@GetAppInstanceRetentionSettingsResponse' {} a -> s {httpStatus = a} :: GetAppInstanceRetentionSettingsResponse)
+
+instance
+  Prelude.NFData
+    GetAppInstanceRetentionSettingsResponse
+  where
+  rnf GetAppInstanceRetentionSettingsResponse' {..} =
+    Prelude.rnf appInstanceRetentionSettings
+      `Prelude.seq` Prelude.rnf initiateDeletionTimestamp
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ChimeSDKIdentity/Lens.hs b/gen/Amazonka/ChimeSDKIdentity/Lens.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ChimeSDKIdentity/Lens.hs
@@ -0,0 +1,287 @@
+{-# 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.ChimeSDKIdentity.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.ChimeSDKIdentity.Lens
+  ( -- * Operations
+
+    -- ** CreateAppInstance
+    createAppInstance_metadata,
+    createAppInstance_tags,
+    createAppInstance_name,
+    createAppInstance_clientRequestToken,
+    createAppInstanceResponse_appInstanceArn,
+    createAppInstanceResponse_httpStatus,
+
+    -- ** CreateAppInstanceAdmin
+    createAppInstanceAdmin_appInstanceAdminArn,
+    createAppInstanceAdmin_appInstanceArn,
+    createAppInstanceAdminResponse_appInstanceAdmin,
+    createAppInstanceAdminResponse_appInstanceArn,
+    createAppInstanceAdminResponse_httpStatus,
+
+    -- ** CreateAppInstanceUser
+    createAppInstanceUser_metadata,
+    createAppInstanceUser_tags,
+    createAppInstanceUser_appInstanceArn,
+    createAppInstanceUser_appInstanceUserId,
+    createAppInstanceUser_name,
+    createAppInstanceUser_clientRequestToken,
+    createAppInstanceUserResponse_appInstanceUserArn,
+    createAppInstanceUserResponse_httpStatus,
+
+    -- ** DeleteAppInstance
+    deleteAppInstance_appInstanceArn,
+
+    -- ** DeleteAppInstanceAdmin
+    deleteAppInstanceAdmin_appInstanceAdminArn,
+    deleteAppInstanceAdmin_appInstanceArn,
+
+    -- ** DeleteAppInstanceUser
+    deleteAppInstanceUser_appInstanceUserArn,
+
+    -- ** DeregisterAppInstanceUserEndpoint
+    deregisterAppInstanceUserEndpoint_appInstanceUserArn,
+    deregisterAppInstanceUserEndpoint_endpointId,
+
+    -- ** DescribeAppInstance
+    describeAppInstance_appInstanceArn,
+    describeAppInstanceResponse_appInstance,
+    describeAppInstanceResponse_httpStatus,
+
+    -- ** DescribeAppInstanceAdmin
+    describeAppInstanceAdmin_appInstanceAdminArn,
+    describeAppInstanceAdmin_appInstanceArn,
+    describeAppInstanceAdminResponse_appInstanceAdmin,
+    describeAppInstanceAdminResponse_httpStatus,
+
+    -- ** DescribeAppInstanceUser
+    describeAppInstanceUser_appInstanceUserArn,
+    describeAppInstanceUserResponse_appInstanceUser,
+    describeAppInstanceUserResponse_httpStatus,
+
+    -- ** DescribeAppInstanceUserEndpoint
+    describeAppInstanceUserEndpoint_appInstanceUserArn,
+    describeAppInstanceUserEndpoint_endpointId,
+    describeAppInstanceUserEndpointResponse_appInstanceUserEndpoint,
+    describeAppInstanceUserEndpointResponse_httpStatus,
+
+    -- ** GetAppInstanceRetentionSettings
+    getAppInstanceRetentionSettings_appInstanceArn,
+    getAppInstanceRetentionSettingsResponse_appInstanceRetentionSettings,
+    getAppInstanceRetentionSettingsResponse_initiateDeletionTimestamp,
+    getAppInstanceRetentionSettingsResponse_httpStatus,
+
+    -- ** ListAppInstanceAdmins
+    listAppInstanceAdmins_maxResults,
+    listAppInstanceAdmins_nextToken,
+    listAppInstanceAdmins_appInstanceArn,
+    listAppInstanceAdminsResponse_appInstanceAdmins,
+    listAppInstanceAdminsResponse_appInstanceArn,
+    listAppInstanceAdminsResponse_nextToken,
+    listAppInstanceAdminsResponse_httpStatus,
+
+    -- ** ListAppInstanceUserEndpoints
+    listAppInstanceUserEndpoints_maxResults,
+    listAppInstanceUserEndpoints_nextToken,
+    listAppInstanceUserEndpoints_appInstanceUserArn,
+    listAppInstanceUserEndpointsResponse_appInstanceUserEndpoints,
+    listAppInstanceUserEndpointsResponse_nextToken,
+    listAppInstanceUserEndpointsResponse_httpStatus,
+
+    -- ** ListAppInstanceUsers
+    listAppInstanceUsers_maxResults,
+    listAppInstanceUsers_nextToken,
+    listAppInstanceUsers_appInstanceArn,
+    listAppInstanceUsersResponse_appInstanceArn,
+    listAppInstanceUsersResponse_appInstanceUsers,
+    listAppInstanceUsersResponse_nextToken,
+    listAppInstanceUsersResponse_httpStatus,
+
+    -- ** ListAppInstances
+    listAppInstances_maxResults,
+    listAppInstances_nextToken,
+    listAppInstancesResponse_appInstances,
+    listAppInstancesResponse_nextToken,
+    listAppInstancesResponse_httpStatus,
+
+    -- ** ListTagsForResource
+    listTagsForResource_resourceARN,
+    listTagsForResourceResponse_tags,
+    listTagsForResourceResponse_httpStatus,
+
+    -- ** PutAppInstanceRetentionSettings
+    putAppInstanceRetentionSettings_appInstanceArn,
+    putAppInstanceRetentionSettings_appInstanceRetentionSettings,
+    putAppInstanceRetentionSettingsResponse_appInstanceRetentionSettings,
+    putAppInstanceRetentionSettingsResponse_initiateDeletionTimestamp,
+    putAppInstanceRetentionSettingsResponse_httpStatus,
+
+    -- ** RegisterAppInstanceUserEndpoint
+    registerAppInstanceUserEndpoint_allowMessages,
+    registerAppInstanceUserEndpoint_name,
+    registerAppInstanceUserEndpoint_appInstanceUserArn,
+    registerAppInstanceUserEndpoint_type,
+    registerAppInstanceUserEndpoint_resourceArn,
+    registerAppInstanceUserEndpoint_endpointAttributes,
+    registerAppInstanceUserEndpoint_clientRequestToken,
+    registerAppInstanceUserEndpointResponse_appInstanceUserArn,
+    registerAppInstanceUserEndpointResponse_endpointId,
+    registerAppInstanceUserEndpointResponse_httpStatus,
+
+    -- ** TagResource
+    tagResource_resourceARN,
+    tagResource_tags,
+
+    -- ** UntagResource
+    untagResource_resourceARN,
+    untagResource_tagKeys,
+
+    -- ** UpdateAppInstance
+    updateAppInstance_appInstanceArn,
+    updateAppInstance_name,
+    updateAppInstance_metadata,
+    updateAppInstanceResponse_appInstanceArn,
+    updateAppInstanceResponse_httpStatus,
+
+    -- ** UpdateAppInstanceUser
+    updateAppInstanceUser_appInstanceUserArn,
+    updateAppInstanceUser_name,
+    updateAppInstanceUser_metadata,
+    updateAppInstanceUserResponse_appInstanceUserArn,
+    updateAppInstanceUserResponse_httpStatus,
+
+    -- ** UpdateAppInstanceUserEndpoint
+    updateAppInstanceUserEndpoint_allowMessages,
+    updateAppInstanceUserEndpoint_name,
+    updateAppInstanceUserEndpoint_appInstanceUserArn,
+    updateAppInstanceUserEndpoint_endpointId,
+    updateAppInstanceUserEndpointResponse_appInstanceUserArn,
+    updateAppInstanceUserEndpointResponse_endpointId,
+    updateAppInstanceUserEndpointResponse_httpStatus,
+
+    -- * Types
+
+    -- ** AppInstance
+    appInstance_appInstanceArn,
+    appInstance_createdTimestamp,
+    appInstance_lastUpdatedTimestamp,
+    appInstance_metadata,
+    appInstance_name,
+
+    -- ** AppInstanceAdmin
+    appInstanceAdmin_admin,
+    appInstanceAdmin_appInstanceArn,
+    appInstanceAdmin_createdTimestamp,
+
+    -- ** AppInstanceAdminSummary
+    appInstanceAdminSummary_admin,
+
+    -- ** AppInstanceRetentionSettings
+    appInstanceRetentionSettings_channelRetentionSettings,
+
+    -- ** AppInstanceSummary
+    appInstanceSummary_appInstanceArn,
+    appInstanceSummary_metadata,
+    appInstanceSummary_name,
+
+    -- ** AppInstanceUser
+    appInstanceUser_appInstanceUserArn,
+    appInstanceUser_createdTimestamp,
+    appInstanceUser_lastUpdatedTimestamp,
+    appInstanceUser_metadata,
+    appInstanceUser_name,
+
+    -- ** AppInstanceUserEndpoint
+    appInstanceUserEndpoint_allowMessages,
+    appInstanceUserEndpoint_appInstanceUserArn,
+    appInstanceUserEndpoint_createdTimestamp,
+    appInstanceUserEndpoint_endpointAttributes,
+    appInstanceUserEndpoint_endpointId,
+    appInstanceUserEndpoint_endpointState,
+    appInstanceUserEndpoint_lastUpdatedTimestamp,
+    appInstanceUserEndpoint_name,
+    appInstanceUserEndpoint_resourceArn,
+    appInstanceUserEndpoint_type,
+
+    -- ** AppInstanceUserEndpointSummary
+    appInstanceUserEndpointSummary_allowMessages,
+    appInstanceUserEndpointSummary_appInstanceUserArn,
+    appInstanceUserEndpointSummary_endpointId,
+    appInstanceUserEndpointSummary_endpointState,
+    appInstanceUserEndpointSummary_name,
+    appInstanceUserEndpointSummary_type,
+
+    -- ** AppInstanceUserSummary
+    appInstanceUserSummary_appInstanceUserArn,
+    appInstanceUserSummary_metadata,
+    appInstanceUserSummary_name,
+
+    -- ** ChannelRetentionSettings
+    channelRetentionSettings_retentionDays,
+
+    -- ** EndpointAttributes
+    endpointAttributes_voipDeviceToken,
+    endpointAttributes_deviceToken,
+
+    -- ** EndpointState
+    endpointState_statusReason,
+    endpointState_status,
+
+    -- ** Identity
+    identity_arn,
+    identity_name,
+
+    -- ** Tag
+    tag_key,
+    tag_value,
+  )
+where
+
+import Amazonka.ChimeSDKIdentity.CreateAppInstance
+import Amazonka.ChimeSDKIdentity.CreateAppInstanceAdmin
+import Amazonka.ChimeSDKIdentity.CreateAppInstanceUser
+import Amazonka.ChimeSDKIdentity.DeleteAppInstance
+import Amazonka.ChimeSDKIdentity.DeleteAppInstanceAdmin
+import Amazonka.ChimeSDKIdentity.DeleteAppInstanceUser
+import Amazonka.ChimeSDKIdentity.DeregisterAppInstanceUserEndpoint
+import Amazonka.ChimeSDKIdentity.DescribeAppInstance
+import Amazonka.ChimeSDKIdentity.DescribeAppInstanceAdmin
+import Amazonka.ChimeSDKIdentity.DescribeAppInstanceUser
+import Amazonka.ChimeSDKIdentity.DescribeAppInstanceUserEndpoint
+import Amazonka.ChimeSDKIdentity.GetAppInstanceRetentionSettings
+import Amazonka.ChimeSDKIdentity.ListAppInstanceAdmins
+import Amazonka.ChimeSDKIdentity.ListAppInstanceUserEndpoints
+import Amazonka.ChimeSDKIdentity.ListAppInstanceUsers
+import Amazonka.ChimeSDKIdentity.ListAppInstances
+import Amazonka.ChimeSDKIdentity.ListTagsForResource
+import Amazonka.ChimeSDKIdentity.PutAppInstanceRetentionSettings
+import Amazonka.ChimeSDKIdentity.RegisterAppInstanceUserEndpoint
+import Amazonka.ChimeSDKIdentity.TagResource
+import Amazonka.ChimeSDKIdentity.Types.AppInstance
+import Amazonka.ChimeSDKIdentity.Types.AppInstanceAdmin
+import Amazonka.ChimeSDKIdentity.Types.AppInstanceAdminSummary
+import Amazonka.ChimeSDKIdentity.Types.AppInstanceRetentionSettings
+import Amazonka.ChimeSDKIdentity.Types.AppInstanceSummary
+import Amazonka.ChimeSDKIdentity.Types.AppInstanceUser
+import Amazonka.ChimeSDKIdentity.Types.AppInstanceUserEndpoint
+import Amazonka.ChimeSDKIdentity.Types.AppInstanceUserEndpointSummary
+import Amazonka.ChimeSDKIdentity.Types.AppInstanceUserSummary
+import Amazonka.ChimeSDKIdentity.Types.ChannelRetentionSettings
+import Amazonka.ChimeSDKIdentity.Types.EndpointAttributes
+import Amazonka.ChimeSDKIdentity.Types.EndpointState
+import Amazonka.ChimeSDKIdentity.Types.Identity
+import Amazonka.ChimeSDKIdentity.Types.Tag
+import Amazonka.ChimeSDKIdentity.UntagResource
+import Amazonka.ChimeSDKIdentity.UpdateAppInstance
+import Amazonka.ChimeSDKIdentity.UpdateAppInstanceUser
+import Amazonka.ChimeSDKIdentity.UpdateAppInstanceUserEndpoint
diff --git a/gen/Amazonka/ChimeSDKIdentity/ListAppInstanceAdmins.hs b/gen/Amazonka/ChimeSDKIdentity/ListAppInstanceAdmins.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ChimeSDKIdentity/ListAppInstanceAdmins.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.ChimeSDKIdentity.ListAppInstanceAdmins
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns a list of the administrators in the @AppInstance@.
+module Amazonka.ChimeSDKIdentity.ListAppInstanceAdmins
+  ( -- * Creating a Request
+    ListAppInstanceAdmins (..),
+    newListAppInstanceAdmins,
+
+    -- * Request Lenses
+    listAppInstanceAdmins_maxResults,
+    listAppInstanceAdmins_nextToken,
+    listAppInstanceAdmins_appInstanceArn,
+
+    -- * Destructuring the Response
+    ListAppInstanceAdminsResponse (..),
+    newListAppInstanceAdminsResponse,
+
+    -- * Response Lenses
+    listAppInstanceAdminsResponse_appInstanceAdmins,
+    listAppInstanceAdminsResponse_appInstanceArn,
+    listAppInstanceAdminsResponse_nextToken,
+    listAppInstanceAdminsResponse_httpStatus,
+  )
+where
+
+import Amazonka.ChimeSDKIdentity.Types
+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
+
+-- | /See:/ 'newListAppInstanceAdmins' smart constructor.
+data ListAppInstanceAdmins = ListAppInstanceAdmins'
+  { -- | The maximum number of administrators that you want to return.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The token returned from previous API requests until the number of
+    -- administrators is reached.
+    nextToken :: Prelude.Maybe (Data.Sensitive Prelude.Text),
+    -- | The ARN of the @AppInstance@.
+    appInstanceArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListAppInstanceAdmins' 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', 'listAppInstanceAdmins_maxResults' - The maximum number of administrators that you want to return.
+--
+-- 'nextToken', 'listAppInstanceAdmins_nextToken' - The token returned from previous API requests until the number of
+-- administrators is reached.
+--
+-- 'appInstanceArn', 'listAppInstanceAdmins_appInstanceArn' - The ARN of the @AppInstance@.
+newListAppInstanceAdmins ::
+  -- | 'appInstanceArn'
+  Prelude.Text ->
+  ListAppInstanceAdmins
+newListAppInstanceAdmins pAppInstanceArn_ =
+  ListAppInstanceAdmins'
+    { maxResults =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      appInstanceArn = pAppInstanceArn_
+    }
+
+-- | The maximum number of administrators that you want to return.
+listAppInstanceAdmins_maxResults :: Lens.Lens' ListAppInstanceAdmins (Prelude.Maybe Prelude.Natural)
+listAppInstanceAdmins_maxResults = Lens.lens (\ListAppInstanceAdmins' {maxResults} -> maxResults) (\s@ListAppInstanceAdmins' {} a -> s {maxResults = a} :: ListAppInstanceAdmins)
+
+-- | The token returned from previous API requests until the number of
+-- administrators is reached.
+listAppInstanceAdmins_nextToken :: Lens.Lens' ListAppInstanceAdmins (Prelude.Maybe Prelude.Text)
+listAppInstanceAdmins_nextToken = Lens.lens (\ListAppInstanceAdmins' {nextToken} -> nextToken) (\s@ListAppInstanceAdmins' {} a -> s {nextToken = a} :: ListAppInstanceAdmins) Prelude.. Lens.mapping Data._Sensitive
+
+-- | The ARN of the @AppInstance@.
+listAppInstanceAdmins_appInstanceArn :: Lens.Lens' ListAppInstanceAdmins Prelude.Text
+listAppInstanceAdmins_appInstanceArn = Lens.lens (\ListAppInstanceAdmins' {appInstanceArn} -> appInstanceArn) (\s@ListAppInstanceAdmins' {} a -> s {appInstanceArn = a} :: ListAppInstanceAdmins)
+
+instance Core.AWSRequest ListAppInstanceAdmins where
+  type
+    AWSResponse ListAppInstanceAdmins =
+      ListAppInstanceAdminsResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListAppInstanceAdminsResponse'
+            Prelude.<$> ( x
+                            Data..?> "AppInstanceAdmins"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (x Data..?> "AppInstanceArn")
+            Prelude.<*> (x Data..?> "NextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListAppInstanceAdmins where
+  hashWithSalt _salt ListAppInstanceAdmins' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` appInstanceArn
+
+instance Prelude.NFData ListAppInstanceAdmins where
+  rnf ListAppInstanceAdmins' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf appInstanceArn
+
+instance Data.ToHeaders ListAppInstanceAdmins where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath ListAppInstanceAdmins where
+  toPath ListAppInstanceAdmins' {..} =
+    Prelude.mconcat
+      [ "/app-instances/",
+        Data.toBS appInstanceArn,
+        "/admins"
+      ]
+
+instance Data.ToQuery ListAppInstanceAdmins where
+  toQuery ListAppInstanceAdmins' {..} =
+    Prelude.mconcat
+      [ "max-results" Data.=: maxResults,
+        "next-token" Data.=: nextToken
+      ]
+
+-- | /See:/ 'newListAppInstanceAdminsResponse' smart constructor.
+data ListAppInstanceAdminsResponse = ListAppInstanceAdminsResponse'
+  { -- | The information for each administrator.
+    appInstanceAdmins :: Prelude.Maybe [AppInstanceAdminSummary],
+    -- | The ARN of the @AppInstance@.
+    appInstanceArn :: Prelude.Maybe Prelude.Text,
+    -- | The token returned from previous API requests until the number of
+    -- administrators is reached.
+    nextToken :: Prelude.Maybe (Data.Sensitive Prelude.Text),
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListAppInstanceAdminsResponse' 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:
+--
+-- 'appInstanceAdmins', 'listAppInstanceAdminsResponse_appInstanceAdmins' - The information for each administrator.
+--
+-- 'appInstanceArn', 'listAppInstanceAdminsResponse_appInstanceArn' - The ARN of the @AppInstance@.
+--
+-- 'nextToken', 'listAppInstanceAdminsResponse_nextToken' - The token returned from previous API requests until the number of
+-- administrators is reached.
+--
+-- 'httpStatus', 'listAppInstanceAdminsResponse_httpStatus' - The response's http status code.
+newListAppInstanceAdminsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListAppInstanceAdminsResponse
+newListAppInstanceAdminsResponse pHttpStatus_ =
+  ListAppInstanceAdminsResponse'
+    { appInstanceAdmins =
+        Prelude.Nothing,
+      appInstanceArn = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The information for each administrator.
+listAppInstanceAdminsResponse_appInstanceAdmins :: Lens.Lens' ListAppInstanceAdminsResponse (Prelude.Maybe [AppInstanceAdminSummary])
+listAppInstanceAdminsResponse_appInstanceAdmins = Lens.lens (\ListAppInstanceAdminsResponse' {appInstanceAdmins} -> appInstanceAdmins) (\s@ListAppInstanceAdminsResponse' {} a -> s {appInstanceAdmins = a} :: ListAppInstanceAdminsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ARN of the @AppInstance@.
+listAppInstanceAdminsResponse_appInstanceArn :: Lens.Lens' ListAppInstanceAdminsResponse (Prelude.Maybe Prelude.Text)
+listAppInstanceAdminsResponse_appInstanceArn = Lens.lens (\ListAppInstanceAdminsResponse' {appInstanceArn} -> appInstanceArn) (\s@ListAppInstanceAdminsResponse' {} a -> s {appInstanceArn = a} :: ListAppInstanceAdminsResponse)
+
+-- | The token returned from previous API requests until the number of
+-- administrators is reached.
+listAppInstanceAdminsResponse_nextToken :: Lens.Lens' ListAppInstanceAdminsResponse (Prelude.Maybe Prelude.Text)
+listAppInstanceAdminsResponse_nextToken = Lens.lens (\ListAppInstanceAdminsResponse' {nextToken} -> nextToken) (\s@ListAppInstanceAdminsResponse' {} a -> s {nextToken = a} :: ListAppInstanceAdminsResponse) Prelude.. Lens.mapping Data._Sensitive
+
+-- | The response's http status code.
+listAppInstanceAdminsResponse_httpStatus :: Lens.Lens' ListAppInstanceAdminsResponse Prelude.Int
+listAppInstanceAdminsResponse_httpStatus = Lens.lens (\ListAppInstanceAdminsResponse' {httpStatus} -> httpStatus) (\s@ListAppInstanceAdminsResponse' {} a -> s {httpStatus = a} :: ListAppInstanceAdminsResponse)
+
+instance Prelude.NFData ListAppInstanceAdminsResponse where
+  rnf ListAppInstanceAdminsResponse' {..} =
+    Prelude.rnf appInstanceAdmins
+      `Prelude.seq` Prelude.rnf appInstanceArn
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ChimeSDKIdentity/ListAppInstanceUserEndpoints.hs b/gen/Amazonka/ChimeSDKIdentity/ListAppInstanceUserEndpoints.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ChimeSDKIdentity/ListAppInstanceUserEndpoints.hs
@@ -0,0 +1,216 @@
+{-# 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.ChimeSDKIdentity.ListAppInstanceUserEndpoints
+-- 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 the @AppInstanceUserEndpoints@ created under a single
+-- @AppInstanceUser@.
+module Amazonka.ChimeSDKIdentity.ListAppInstanceUserEndpoints
+  ( -- * Creating a Request
+    ListAppInstanceUserEndpoints (..),
+    newListAppInstanceUserEndpoints,
+
+    -- * Request Lenses
+    listAppInstanceUserEndpoints_maxResults,
+    listAppInstanceUserEndpoints_nextToken,
+    listAppInstanceUserEndpoints_appInstanceUserArn,
+
+    -- * Destructuring the Response
+    ListAppInstanceUserEndpointsResponse (..),
+    newListAppInstanceUserEndpointsResponse,
+
+    -- * Response Lenses
+    listAppInstanceUserEndpointsResponse_appInstanceUserEndpoints,
+    listAppInstanceUserEndpointsResponse_nextToken,
+    listAppInstanceUserEndpointsResponse_httpStatus,
+  )
+where
+
+import Amazonka.ChimeSDKIdentity.Types
+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
+
+-- | /See:/ 'newListAppInstanceUserEndpoints' smart constructor.
+data ListAppInstanceUserEndpoints = ListAppInstanceUserEndpoints'
+  { -- | The maximum number of endpoints that you want to return.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The token passed by previous API calls until all requested endpoints are
+    -- returned.
+    nextToken :: Prelude.Maybe (Data.Sensitive Prelude.Text),
+    -- | The ARN of the @AppInstanceUser@.
+    appInstanceUserArn :: Data.Sensitive Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListAppInstanceUserEndpoints' 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', 'listAppInstanceUserEndpoints_maxResults' - The maximum number of endpoints that you want to return.
+--
+-- 'nextToken', 'listAppInstanceUserEndpoints_nextToken' - The token passed by previous API calls until all requested endpoints are
+-- returned.
+--
+-- 'appInstanceUserArn', 'listAppInstanceUserEndpoints_appInstanceUserArn' - The ARN of the @AppInstanceUser@.
+newListAppInstanceUserEndpoints ::
+  -- | 'appInstanceUserArn'
+  Prelude.Text ->
+  ListAppInstanceUserEndpoints
+newListAppInstanceUserEndpoints pAppInstanceUserArn_ =
+  ListAppInstanceUserEndpoints'
+    { maxResults =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      appInstanceUserArn =
+        Data._Sensitive Lens.# pAppInstanceUserArn_
+    }
+
+-- | The maximum number of endpoints that you want to return.
+listAppInstanceUserEndpoints_maxResults :: Lens.Lens' ListAppInstanceUserEndpoints (Prelude.Maybe Prelude.Natural)
+listAppInstanceUserEndpoints_maxResults = Lens.lens (\ListAppInstanceUserEndpoints' {maxResults} -> maxResults) (\s@ListAppInstanceUserEndpoints' {} a -> s {maxResults = a} :: ListAppInstanceUserEndpoints)
+
+-- | The token passed by previous API calls until all requested endpoints are
+-- returned.
+listAppInstanceUserEndpoints_nextToken :: Lens.Lens' ListAppInstanceUserEndpoints (Prelude.Maybe Prelude.Text)
+listAppInstanceUserEndpoints_nextToken = Lens.lens (\ListAppInstanceUserEndpoints' {nextToken} -> nextToken) (\s@ListAppInstanceUserEndpoints' {} a -> s {nextToken = a} :: ListAppInstanceUserEndpoints) Prelude.. Lens.mapping Data._Sensitive
+
+-- | The ARN of the @AppInstanceUser@.
+listAppInstanceUserEndpoints_appInstanceUserArn :: Lens.Lens' ListAppInstanceUserEndpoints Prelude.Text
+listAppInstanceUserEndpoints_appInstanceUserArn = Lens.lens (\ListAppInstanceUserEndpoints' {appInstanceUserArn} -> appInstanceUserArn) (\s@ListAppInstanceUserEndpoints' {} a -> s {appInstanceUserArn = a} :: ListAppInstanceUserEndpoints) Prelude.. Data._Sensitive
+
+instance Core.AWSRequest ListAppInstanceUserEndpoints where
+  type
+    AWSResponse ListAppInstanceUserEndpoints =
+      ListAppInstanceUserEndpointsResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListAppInstanceUserEndpointsResponse'
+            Prelude.<$> ( x
+                            Data..?> "AppInstanceUserEndpoints"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (x Data..?> "NextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    ListAppInstanceUserEndpoints
+  where
+  hashWithSalt _salt ListAppInstanceUserEndpoints' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` appInstanceUserArn
+
+instance Prelude.NFData ListAppInstanceUserEndpoints where
+  rnf ListAppInstanceUserEndpoints' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf appInstanceUserArn
+
+instance Data.ToHeaders ListAppInstanceUserEndpoints where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath ListAppInstanceUserEndpoints where
+  toPath ListAppInstanceUserEndpoints' {..} =
+    Prelude.mconcat
+      [ "/app-instance-users/",
+        Data.toBS appInstanceUserArn,
+        "/endpoints"
+      ]
+
+instance Data.ToQuery ListAppInstanceUserEndpoints where
+  toQuery ListAppInstanceUserEndpoints' {..} =
+    Prelude.mconcat
+      [ "max-results" Data.=: maxResults,
+        "next-token" Data.=: nextToken
+      ]
+
+-- | /See:/ 'newListAppInstanceUserEndpointsResponse' smart constructor.
+data ListAppInstanceUserEndpointsResponse = ListAppInstanceUserEndpointsResponse'
+  { -- | The information for each requested @AppInstanceUserEndpoint@.
+    appInstanceUserEndpoints :: Prelude.Maybe [AppInstanceUserEndpointSummary],
+    -- | The token passed by previous API calls until all requested endpoints are
+    -- returned.
+    nextToken :: Prelude.Maybe (Data.Sensitive Prelude.Text),
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListAppInstanceUserEndpointsResponse' 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:
+--
+-- 'appInstanceUserEndpoints', 'listAppInstanceUserEndpointsResponse_appInstanceUserEndpoints' - The information for each requested @AppInstanceUserEndpoint@.
+--
+-- 'nextToken', 'listAppInstanceUserEndpointsResponse_nextToken' - The token passed by previous API calls until all requested endpoints are
+-- returned.
+--
+-- 'httpStatus', 'listAppInstanceUserEndpointsResponse_httpStatus' - The response's http status code.
+newListAppInstanceUserEndpointsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListAppInstanceUserEndpointsResponse
+newListAppInstanceUserEndpointsResponse pHttpStatus_ =
+  ListAppInstanceUserEndpointsResponse'
+    { appInstanceUserEndpoints =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The information for each requested @AppInstanceUserEndpoint@.
+listAppInstanceUserEndpointsResponse_appInstanceUserEndpoints :: Lens.Lens' ListAppInstanceUserEndpointsResponse (Prelude.Maybe [AppInstanceUserEndpointSummary])
+listAppInstanceUserEndpointsResponse_appInstanceUserEndpoints = Lens.lens (\ListAppInstanceUserEndpointsResponse' {appInstanceUserEndpoints} -> appInstanceUserEndpoints) (\s@ListAppInstanceUserEndpointsResponse' {} a -> s {appInstanceUserEndpoints = a} :: ListAppInstanceUserEndpointsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The token passed by previous API calls until all requested endpoints are
+-- returned.
+listAppInstanceUserEndpointsResponse_nextToken :: Lens.Lens' ListAppInstanceUserEndpointsResponse (Prelude.Maybe Prelude.Text)
+listAppInstanceUserEndpointsResponse_nextToken = Lens.lens (\ListAppInstanceUserEndpointsResponse' {nextToken} -> nextToken) (\s@ListAppInstanceUserEndpointsResponse' {} a -> s {nextToken = a} :: ListAppInstanceUserEndpointsResponse) Prelude.. Lens.mapping Data._Sensitive
+
+-- | The response's http status code.
+listAppInstanceUserEndpointsResponse_httpStatus :: Lens.Lens' ListAppInstanceUserEndpointsResponse Prelude.Int
+listAppInstanceUserEndpointsResponse_httpStatus = Lens.lens (\ListAppInstanceUserEndpointsResponse' {httpStatus} -> httpStatus) (\s@ListAppInstanceUserEndpointsResponse' {} a -> s {httpStatus = a} :: ListAppInstanceUserEndpointsResponse)
+
+instance
+  Prelude.NFData
+    ListAppInstanceUserEndpointsResponse
+  where
+  rnf ListAppInstanceUserEndpointsResponse' {..} =
+    Prelude.rnf appInstanceUserEndpoints
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ChimeSDKIdentity/ListAppInstanceUsers.hs b/gen/Amazonka/ChimeSDKIdentity/ListAppInstanceUsers.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ChimeSDKIdentity/ListAppInstanceUsers.hs
@@ -0,0 +1,215 @@
+{-# 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.ChimeSDKIdentity.ListAppInstanceUsers
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- List all @AppInstanceUsers@ created under a single @AppInstance@.
+module Amazonka.ChimeSDKIdentity.ListAppInstanceUsers
+  ( -- * Creating a Request
+    ListAppInstanceUsers (..),
+    newListAppInstanceUsers,
+
+    -- * Request Lenses
+    listAppInstanceUsers_maxResults,
+    listAppInstanceUsers_nextToken,
+    listAppInstanceUsers_appInstanceArn,
+
+    -- * Destructuring the Response
+    ListAppInstanceUsersResponse (..),
+    newListAppInstanceUsersResponse,
+
+    -- * Response Lenses
+    listAppInstanceUsersResponse_appInstanceArn,
+    listAppInstanceUsersResponse_appInstanceUsers,
+    listAppInstanceUsersResponse_nextToken,
+    listAppInstanceUsersResponse_httpStatus,
+  )
+where
+
+import Amazonka.ChimeSDKIdentity.Types
+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
+
+-- | /See:/ 'newListAppInstanceUsers' smart constructor.
+data ListAppInstanceUsers = ListAppInstanceUsers'
+  { -- | The maximum number of requests that you want returned.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The token passed by previous API calls until all requested users are
+    -- returned.
+    nextToken :: Prelude.Maybe (Data.Sensitive Prelude.Text),
+    -- | The ARN of the @AppInstance@.
+    appInstanceArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListAppInstanceUsers' 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', 'listAppInstanceUsers_maxResults' - The maximum number of requests that you want returned.
+--
+-- 'nextToken', 'listAppInstanceUsers_nextToken' - The token passed by previous API calls until all requested users are
+-- returned.
+--
+-- 'appInstanceArn', 'listAppInstanceUsers_appInstanceArn' - The ARN of the @AppInstance@.
+newListAppInstanceUsers ::
+  -- | 'appInstanceArn'
+  Prelude.Text ->
+  ListAppInstanceUsers
+newListAppInstanceUsers pAppInstanceArn_ =
+  ListAppInstanceUsers'
+    { maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      appInstanceArn = pAppInstanceArn_
+    }
+
+-- | The maximum number of requests that you want returned.
+listAppInstanceUsers_maxResults :: Lens.Lens' ListAppInstanceUsers (Prelude.Maybe Prelude.Natural)
+listAppInstanceUsers_maxResults = Lens.lens (\ListAppInstanceUsers' {maxResults} -> maxResults) (\s@ListAppInstanceUsers' {} a -> s {maxResults = a} :: ListAppInstanceUsers)
+
+-- | The token passed by previous API calls until all requested users are
+-- returned.
+listAppInstanceUsers_nextToken :: Lens.Lens' ListAppInstanceUsers (Prelude.Maybe Prelude.Text)
+listAppInstanceUsers_nextToken = Lens.lens (\ListAppInstanceUsers' {nextToken} -> nextToken) (\s@ListAppInstanceUsers' {} a -> s {nextToken = a} :: ListAppInstanceUsers) Prelude.. Lens.mapping Data._Sensitive
+
+-- | The ARN of the @AppInstance@.
+listAppInstanceUsers_appInstanceArn :: Lens.Lens' ListAppInstanceUsers Prelude.Text
+listAppInstanceUsers_appInstanceArn = Lens.lens (\ListAppInstanceUsers' {appInstanceArn} -> appInstanceArn) (\s@ListAppInstanceUsers' {} a -> s {appInstanceArn = a} :: ListAppInstanceUsers)
+
+instance Core.AWSRequest ListAppInstanceUsers where
+  type
+    AWSResponse ListAppInstanceUsers =
+      ListAppInstanceUsersResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListAppInstanceUsersResponse'
+            Prelude.<$> (x Data..?> "AppInstanceArn")
+            Prelude.<*> ( x
+                            Data..?> "AppInstanceUsers"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (x Data..?> "NextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListAppInstanceUsers where
+  hashWithSalt _salt ListAppInstanceUsers' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` appInstanceArn
+
+instance Prelude.NFData ListAppInstanceUsers where
+  rnf ListAppInstanceUsers' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf appInstanceArn
+
+instance Data.ToHeaders ListAppInstanceUsers where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath ListAppInstanceUsers where
+  toPath = Prelude.const "/app-instance-users"
+
+instance Data.ToQuery ListAppInstanceUsers where
+  toQuery ListAppInstanceUsers' {..} =
+    Prelude.mconcat
+      [ "max-results" Data.=: maxResults,
+        "next-token" Data.=: nextToken,
+        "app-instance-arn" Data.=: appInstanceArn
+      ]
+
+-- | /See:/ 'newListAppInstanceUsersResponse' smart constructor.
+data ListAppInstanceUsersResponse = ListAppInstanceUsersResponse'
+  { -- | The ARN of the @AppInstance@.
+    appInstanceArn :: Prelude.Maybe Prelude.Text,
+    -- | The information for each requested @AppInstanceUser@.
+    appInstanceUsers :: Prelude.Maybe [AppInstanceUserSummary],
+    -- | The token passed by previous API calls until all requested users are
+    -- returned.
+    nextToken :: Prelude.Maybe (Data.Sensitive Prelude.Text),
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListAppInstanceUsersResponse' 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:
+--
+-- 'appInstanceArn', 'listAppInstanceUsersResponse_appInstanceArn' - The ARN of the @AppInstance@.
+--
+-- 'appInstanceUsers', 'listAppInstanceUsersResponse_appInstanceUsers' - The information for each requested @AppInstanceUser@.
+--
+-- 'nextToken', 'listAppInstanceUsersResponse_nextToken' - The token passed by previous API calls until all requested users are
+-- returned.
+--
+-- 'httpStatus', 'listAppInstanceUsersResponse_httpStatus' - The response's http status code.
+newListAppInstanceUsersResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListAppInstanceUsersResponse
+newListAppInstanceUsersResponse pHttpStatus_ =
+  ListAppInstanceUsersResponse'
+    { appInstanceArn =
+        Prelude.Nothing,
+      appInstanceUsers = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The ARN of the @AppInstance@.
+listAppInstanceUsersResponse_appInstanceArn :: Lens.Lens' ListAppInstanceUsersResponse (Prelude.Maybe Prelude.Text)
+listAppInstanceUsersResponse_appInstanceArn = Lens.lens (\ListAppInstanceUsersResponse' {appInstanceArn} -> appInstanceArn) (\s@ListAppInstanceUsersResponse' {} a -> s {appInstanceArn = a} :: ListAppInstanceUsersResponse)
+
+-- | The information for each requested @AppInstanceUser@.
+listAppInstanceUsersResponse_appInstanceUsers :: Lens.Lens' ListAppInstanceUsersResponse (Prelude.Maybe [AppInstanceUserSummary])
+listAppInstanceUsersResponse_appInstanceUsers = Lens.lens (\ListAppInstanceUsersResponse' {appInstanceUsers} -> appInstanceUsers) (\s@ListAppInstanceUsersResponse' {} a -> s {appInstanceUsers = a} :: ListAppInstanceUsersResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The token passed by previous API calls until all requested users are
+-- returned.
+listAppInstanceUsersResponse_nextToken :: Lens.Lens' ListAppInstanceUsersResponse (Prelude.Maybe Prelude.Text)
+listAppInstanceUsersResponse_nextToken = Lens.lens (\ListAppInstanceUsersResponse' {nextToken} -> nextToken) (\s@ListAppInstanceUsersResponse' {} a -> s {nextToken = a} :: ListAppInstanceUsersResponse) Prelude.. Lens.mapping Data._Sensitive
+
+-- | The response's http status code.
+listAppInstanceUsersResponse_httpStatus :: Lens.Lens' ListAppInstanceUsersResponse Prelude.Int
+listAppInstanceUsersResponse_httpStatus = Lens.lens (\ListAppInstanceUsersResponse' {httpStatus} -> httpStatus) (\s@ListAppInstanceUsersResponse' {} a -> s {httpStatus = a} :: ListAppInstanceUsersResponse)
+
+instance Prelude.NFData ListAppInstanceUsersResponse where
+  rnf ListAppInstanceUsersResponse' {..} =
+    Prelude.rnf appInstanceArn
+      `Prelude.seq` Prelude.rnf appInstanceUsers
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ChimeSDKIdentity/ListAppInstances.hs b/gen/Amazonka/ChimeSDKIdentity/ListAppInstances.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ChimeSDKIdentity/ListAppInstances.hs
@@ -0,0 +1,186 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ChimeSDKIdentity.ListAppInstances
+-- 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 Amazon Chime @AppInstance@s created under a single AWS
+-- account.
+module Amazonka.ChimeSDKIdentity.ListAppInstances
+  ( -- * Creating a Request
+    ListAppInstances (..),
+    newListAppInstances,
+
+    -- * Request Lenses
+    listAppInstances_maxResults,
+    listAppInstances_nextToken,
+
+    -- * Destructuring the Response
+    ListAppInstancesResponse (..),
+    newListAppInstancesResponse,
+
+    -- * Response Lenses
+    listAppInstancesResponse_appInstances,
+    listAppInstancesResponse_nextToken,
+    listAppInstancesResponse_httpStatus,
+  )
+where
+
+import Amazonka.ChimeSDKIdentity.Types
+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
+
+-- | /See:/ 'newListAppInstances' smart constructor.
+data ListAppInstances = ListAppInstances'
+  { -- | The maximum number of @AppInstance@s that you want to return.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The token passed by previous API requests until you reach the maximum
+    -- number of @AppInstances@.
+    nextToken :: Prelude.Maybe (Data.Sensitive Prelude.Text)
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListAppInstances' 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', 'listAppInstances_maxResults' - The maximum number of @AppInstance@s that you want to return.
+--
+-- 'nextToken', 'listAppInstances_nextToken' - The token passed by previous API requests until you reach the maximum
+-- number of @AppInstances@.
+newListAppInstances ::
+  ListAppInstances
+newListAppInstances =
+  ListAppInstances'
+    { maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | The maximum number of @AppInstance@s that you want to return.
+listAppInstances_maxResults :: Lens.Lens' ListAppInstances (Prelude.Maybe Prelude.Natural)
+listAppInstances_maxResults = Lens.lens (\ListAppInstances' {maxResults} -> maxResults) (\s@ListAppInstances' {} a -> s {maxResults = a} :: ListAppInstances)
+
+-- | The token passed by previous API requests until you reach the maximum
+-- number of @AppInstances@.
+listAppInstances_nextToken :: Lens.Lens' ListAppInstances (Prelude.Maybe Prelude.Text)
+listAppInstances_nextToken = Lens.lens (\ListAppInstances' {nextToken} -> nextToken) (\s@ListAppInstances' {} a -> s {nextToken = a} :: ListAppInstances) Prelude.. Lens.mapping Data._Sensitive
+
+instance Core.AWSRequest ListAppInstances where
+  type
+    AWSResponse ListAppInstances =
+      ListAppInstancesResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListAppInstancesResponse'
+            Prelude.<$> (x Data..?> "AppInstances" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "NextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListAppInstances where
+  hashWithSalt _salt ListAppInstances' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData ListAppInstances where
+  rnf ListAppInstances' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance Data.ToHeaders ListAppInstances where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath ListAppInstances where
+  toPath = Prelude.const "/app-instances"
+
+instance Data.ToQuery ListAppInstances where
+  toQuery ListAppInstances' {..} =
+    Prelude.mconcat
+      [ "max-results" Data.=: maxResults,
+        "next-token" Data.=: nextToken
+      ]
+
+-- | /See:/ 'newListAppInstancesResponse' smart constructor.
+data ListAppInstancesResponse = ListAppInstancesResponse'
+  { -- | The information for each @AppInstance@.
+    appInstances :: Prelude.Maybe [AppInstanceSummary],
+    -- | The token passed by previous API requests until the maximum number of
+    -- @AppInstance@s is reached.
+    nextToken :: Prelude.Maybe (Data.Sensitive Prelude.Text),
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListAppInstancesResponse' 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:
+--
+-- 'appInstances', 'listAppInstancesResponse_appInstances' - The information for each @AppInstance@.
+--
+-- 'nextToken', 'listAppInstancesResponse_nextToken' - The token passed by previous API requests until the maximum number of
+-- @AppInstance@s is reached.
+--
+-- 'httpStatus', 'listAppInstancesResponse_httpStatus' - The response's http status code.
+newListAppInstancesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListAppInstancesResponse
+newListAppInstancesResponse pHttpStatus_ =
+  ListAppInstancesResponse'
+    { appInstances =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The information for each @AppInstance@.
+listAppInstancesResponse_appInstances :: Lens.Lens' ListAppInstancesResponse (Prelude.Maybe [AppInstanceSummary])
+listAppInstancesResponse_appInstances = Lens.lens (\ListAppInstancesResponse' {appInstances} -> appInstances) (\s@ListAppInstancesResponse' {} a -> s {appInstances = a} :: ListAppInstancesResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The token passed by previous API requests until the maximum number of
+-- @AppInstance@s is reached.
+listAppInstancesResponse_nextToken :: Lens.Lens' ListAppInstancesResponse (Prelude.Maybe Prelude.Text)
+listAppInstancesResponse_nextToken = Lens.lens (\ListAppInstancesResponse' {nextToken} -> nextToken) (\s@ListAppInstancesResponse' {} a -> s {nextToken = a} :: ListAppInstancesResponse) Prelude.. Lens.mapping Data._Sensitive
+
+-- | The response's http status code.
+listAppInstancesResponse_httpStatus :: Lens.Lens' ListAppInstancesResponse Prelude.Int
+listAppInstancesResponse_httpStatus = Lens.lens (\ListAppInstancesResponse' {httpStatus} -> httpStatus) (\s@ListAppInstancesResponse' {} a -> s {httpStatus = a} :: ListAppInstancesResponse)
+
+instance Prelude.NFData ListAppInstancesResponse where
+  rnf ListAppInstancesResponse' {..} =
+    Prelude.rnf appInstances
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ChimeSDKIdentity/ListTagsForResource.hs b/gen/Amazonka/ChimeSDKIdentity/ListTagsForResource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ChimeSDKIdentity/ListTagsForResource.hs
@@ -0,0 +1,151 @@
+{-# 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.ChimeSDKIdentity.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 the tags applied to an Amazon Chime SDK identity resource.
+module Amazonka.ChimeSDKIdentity.ListTagsForResource
+  ( -- * Creating a Request
+    ListTagsForResource (..),
+    newListTagsForResource,
+
+    -- * Request Lenses
+    listTagsForResource_resourceARN,
+
+    -- * Destructuring the Response
+    ListTagsForResourceResponse (..),
+    newListTagsForResourceResponse,
+
+    -- * Response Lenses
+    listTagsForResourceResponse_tags,
+    listTagsForResourceResponse_httpStatus,
+  )
+where
+
+import Amazonka.ChimeSDKIdentity.Types
+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
+
+-- | /See:/ 'newListTagsForResource' smart constructor.
+data ListTagsForResource = ListTagsForResource'
+  { -- | The ARN of 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 ARN of the resource.
+newListTagsForResource ::
+  -- | 'resourceARN'
+  Prelude.Text ->
+  ListTagsForResource
+newListTagsForResource pResourceARN_ =
+  ListTagsForResource' {resourceARN = pResourceARN_}
+
+-- | The ARN of 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")
+            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.mempty
+
+instance Data.ToPath ListTagsForResource where
+  toPath = Prelude.const "/tags"
+
+instance Data.ToQuery ListTagsForResource where
+  toQuery ListTagsForResource' {..} =
+    Prelude.mconcat ["arn" Data.=: resourceARN]
+
+-- | /See:/ 'newListTagsForResourceResponse' smart constructor.
+data ListTagsForResourceResponse = ListTagsForResourceResponse'
+  { -- | The tag key-value pairs.
+    tags :: Prelude.Maybe (Prelude.NonEmpty Tag),
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, 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 tag key-value pairs.
+--
+-- 'httpStatus', 'listTagsForResourceResponse_httpStatus' - The response's http status code.
+newListTagsForResourceResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListTagsForResourceResponse
+newListTagsForResourceResponse pHttpStatus_ =
+  ListTagsForResourceResponse'
+    { tags =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The tag key-value pairs.
+listTagsForResourceResponse_tags :: Lens.Lens' ListTagsForResourceResponse (Prelude.Maybe (Prelude.NonEmpty Tag))
+listTagsForResourceResponse_tags = Lens.lens (\ListTagsForResourceResponse' {tags} -> tags) (\s@ListTagsForResourceResponse' {} a -> s {tags = a} :: ListTagsForResourceResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+listTagsForResourceResponse_httpStatus :: Lens.Lens' ListTagsForResourceResponse Prelude.Int
+listTagsForResourceResponse_httpStatus = Lens.lens (\ListTagsForResourceResponse' {httpStatus} -> httpStatus) (\s@ListTagsForResourceResponse' {} a -> s {httpStatus = a} :: ListTagsForResourceResponse)
+
+instance Prelude.NFData ListTagsForResourceResponse where
+  rnf ListTagsForResourceResponse' {..} =
+    Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ChimeSDKIdentity/PutAppInstanceRetentionSettings.hs b/gen/Amazonka/ChimeSDKIdentity/PutAppInstanceRetentionSettings.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ChimeSDKIdentity/PutAppInstanceRetentionSettings.hs
@@ -0,0 +1,218 @@
+{-# 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.ChimeSDKIdentity.PutAppInstanceRetentionSettings
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Sets the amount of time in days that a given @AppInstance@ retains data.
+module Amazonka.ChimeSDKIdentity.PutAppInstanceRetentionSettings
+  ( -- * Creating a Request
+    PutAppInstanceRetentionSettings (..),
+    newPutAppInstanceRetentionSettings,
+
+    -- * Request Lenses
+    putAppInstanceRetentionSettings_appInstanceArn,
+    putAppInstanceRetentionSettings_appInstanceRetentionSettings,
+
+    -- * Destructuring the Response
+    PutAppInstanceRetentionSettingsResponse (..),
+    newPutAppInstanceRetentionSettingsResponse,
+
+    -- * Response Lenses
+    putAppInstanceRetentionSettingsResponse_appInstanceRetentionSettings,
+    putAppInstanceRetentionSettingsResponse_initiateDeletionTimestamp,
+    putAppInstanceRetentionSettingsResponse_httpStatus,
+  )
+where
+
+import Amazonka.ChimeSDKIdentity.Types
+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
+
+-- | /See:/ 'newPutAppInstanceRetentionSettings' smart constructor.
+data PutAppInstanceRetentionSettings = PutAppInstanceRetentionSettings'
+  { -- | The ARN of the @AppInstance@.
+    appInstanceArn :: Prelude.Text,
+    -- | The time in days to retain data. Data type: number.
+    appInstanceRetentionSettings :: AppInstanceRetentionSettings
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PutAppInstanceRetentionSettings' 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:
+--
+-- 'appInstanceArn', 'putAppInstanceRetentionSettings_appInstanceArn' - The ARN of the @AppInstance@.
+--
+-- 'appInstanceRetentionSettings', 'putAppInstanceRetentionSettings_appInstanceRetentionSettings' - The time in days to retain data. Data type: number.
+newPutAppInstanceRetentionSettings ::
+  -- | 'appInstanceArn'
+  Prelude.Text ->
+  -- | 'appInstanceRetentionSettings'
+  AppInstanceRetentionSettings ->
+  PutAppInstanceRetentionSettings
+newPutAppInstanceRetentionSettings
+  pAppInstanceArn_
+  pAppInstanceRetentionSettings_ =
+    PutAppInstanceRetentionSettings'
+      { appInstanceArn =
+          pAppInstanceArn_,
+        appInstanceRetentionSettings =
+          pAppInstanceRetentionSettings_
+      }
+
+-- | The ARN of the @AppInstance@.
+putAppInstanceRetentionSettings_appInstanceArn :: Lens.Lens' PutAppInstanceRetentionSettings Prelude.Text
+putAppInstanceRetentionSettings_appInstanceArn = Lens.lens (\PutAppInstanceRetentionSettings' {appInstanceArn} -> appInstanceArn) (\s@PutAppInstanceRetentionSettings' {} a -> s {appInstanceArn = a} :: PutAppInstanceRetentionSettings)
+
+-- | The time in days to retain data. Data type: number.
+putAppInstanceRetentionSettings_appInstanceRetentionSettings :: Lens.Lens' PutAppInstanceRetentionSettings AppInstanceRetentionSettings
+putAppInstanceRetentionSettings_appInstanceRetentionSettings = Lens.lens (\PutAppInstanceRetentionSettings' {appInstanceRetentionSettings} -> appInstanceRetentionSettings) (\s@PutAppInstanceRetentionSettings' {} a -> s {appInstanceRetentionSettings = a} :: PutAppInstanceRetentionSettings)
+
+instance
+  Core.AWSRequest
+    PutAppInstanceRetentionSettings
+  where
+  type
+    AWSResponse PutAppInstanceRetentionSettings =
+      PutAppInstanceRetentionSettingsResponse
+  request overrides =
+    Request.putJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          PutAppInstanceRetentionSettingsResponse'
+            Prelude.<$> (x Data..?> "AppInstanceRetentionSettings")
+            Prelude.<*> (x Data..?> "InitiateDeletionTimestamp")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    PutAppInstanceRetentionSettings
+  where
+  hashWithSalt
+    _salt
+    PutAppInstanceRetentionSettings' {..} =
+      _salt
+        `Prelude.hashWithSalt` appInstanceArn
+        `Prelude.hashWithSalt` appInstanceRetentionSettings
+
+instance
+  Prelude.NFData
+    PutAppInstanceRetentionSettings
+  where
+  rnf PutAppInstanceRetentionSettings' {..} =
+    Prelude.rnf appInstanceArn
+      `Prelude.seq` Prelude.rnf appInstanceRetentionSettings
+
+instance
+  Data.ToHeaders
+    PutAppInstanceRetentionSettings
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToJSON PutAppInstanceRetentionSettings where
+  toJSON PutAppInstanceRetentionSettings' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ( "AppInstanceRetentionSettings"
+                  Data..= appInstanceRetentionSettings
+              )
+          ]
+      )
+
+instance Data.ToPath PutAppInstanceRetentionSettings where
+  toPath PutAppInstanceRetentionSettings' {..} =
+    Prelude.mconcat
+      [ "/app-instances/",
+        Data.toBS appInstanceArn,
+        "/retention-settings"
+      ]
+
+instance Data.ToQuery PutAppInstanceRetentionSettings where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newPutAppInstanceRetentionSettingsResponse' smart constructor.
+data PutAppInstanceRetentionSettingsResponse = PutAppInstanceRetentionSettingsResponse'
+  { -- | The time in days to retain data. Data type: number.
+    appInstanceRetentionSettings :: Prelude.Maybe AppInstanceRetentionSettings,
+    -- | The time at which the API deletes data.
+    initiateDeletionTimestamp :: Prelude.Maybe Data.POSIX,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PutAppInstanceRetentionSettingsResponse' 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:
+--
+-- 'appInstanceRetentionSettings', 'putAppInstanceRetentionSettingsResponse_appInstanceRetentionSettings' - The time in days to retain data. Data type: number.
+--
+-- 'initiateDeletionTimestamp', 'putAppInstanceRetentionSettingsResponse_initiateDeletionTimestamp' - The time at which the API deletes data.
+--
+-- 'httpStatus', 'putAppInstanceRetentionSettingsResponse_httpStatus' - The response's http status code.
+newPutAppInstanceRetentionSettingsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  PutAppInstanceRetentionSettingsResponse
+newPutAppInstanceRetentionSettingsResponse
+  pHttpStatus_ =
+    PutAppInstanceRetentionSettingsResponse'
+      { appInstanceRetentionSettings =
+          Prelude.Nothing,
+        initiateDeletionTimestamp =
+          Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | The time in days to retain data. Data type: number.
+putAppInstanceRetentionSettingsResponse_appInstanceRetentionSettings :: Lens.Lens' PutAppInstanceRetentionSettingsResponse (Prelude.Maybe AppInstanceRetentionSettings)
+putAppInstanceRetentionSettingsResponse_appInstanceRetentionSettings = Lens.lens (\PutAppInstanceRetentionSettingsResponse' {appInstanceRetentionSettings} -> appInstanceRetentionSettings) (\s@PutAppInstanceRetentionSettingsResponse' {} a -> s {appInstanceRetentionSettings = a} :: PutAppInstanceRetentionSettingsResponse)
+
+-- | The time at which the API deletes data.
+putAppInstanceRetentionSettingsResponse_initiateDeletionTimestamp :: Lens.Lens' PutAppInstanceRetentionSettingsResponse (Prelude.Maybe Prelude.UTCTime)
+putAppInstanceRetentionSettingsResponse_initiateDeletionTimestamp = Lens.lens (\PutAppInstanceRetentionSettingsResponse' {initiateDeletionTimestamp} -> initiateDeletionTimestamp) (\s@PutAppInstanceRetentionSettingsResponse' {} a -> s {initiateDeletionTimestamp = a} :: PutAppInstanceRetentionSettingsResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The response's http status code.
+putAppInstanceRetentionSettingsResponse_httpStatus :: Lens.Lens' PutAppInstanceRetentionSettingsResponse Prelude.Int
+putAppInstanceRetentionSettingsResponse_httpStatus = Lens.lens (\PutAppInstanceRetentionSettingsResponse' {httpStatus} -> httpStatus) (\s@PutAppInstanceRetentionSettingsResponse' {} a -> s {httpStatus = a} :: PutAppInstanceRetentionSettingsResponse)
+
+instance
+  Prelude.NFData
+    PutAppInstanceRetentionSettingsResponse
+  where
+  rnf PutAppInstanceRetentionSettingsResponse' {..} =
+    Prelude.rnf appInstanceRetentionSettings
+      `Prelude.seq` Prelude.rnf initiateDeletionTimestamp
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ChimeSDKIdentity/RegisterAppInstanceUserEndpoint.hs b/gen/Amazonka/ChimeSDKIdentity/RegisterAppInstanceUserEndpoint.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ChimeSDKIdentity/RegisterAppInstanceUserEndpoint.hs
@@ -0,0 +1,330 @@
+{-# 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.ChimeSDKIdentity.RegisterAppInstanceUserEndpoint
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Registers an endpoint under an Amazon Chime @AppInstanceUser@. The
+-- endpoint receives messages for a user. For push notifications, the
+-- endpoint is a mobile device used to receive mobile push notifications
+-- for a user.
+module Amazonka.ChimeSDKIdentity.RegisterAppInstanceUserEndpoint
+  ( -- * Creating a Request
+    RegisterAppInstanceUserEndpoint (..),
+    newRegisterAppInstanceUserEndpoint,
+
+    -- * Request Lenses
+    registerAppInstanceUserEndpoint_allowMessages,
+    registerAppInstanceUserEndpoint_name,
+    registerAppInstanceUserEndpoint_appInstanceUserArn,
+    registerAppInstanceUserEndpoint_type,
+    registerAppInstanceUserEndpoint_resourceArn,
+    registerAppInstanceUserEndpoint_endpointAttributes,
+    registerAppInstanceUserEndpoint_clientRequestToken,
+
+    -- * Destructuring the Response
+    RegisterAppInstanceUserEndpointResponse (..),
+    newRegisterAppInstanceUserEndpointResponse,
+
+    -- * Response Lenses
+    registerAppInstanceUserEndpointResponse_appInstanceUserArn,
+    registerAppInstanceUserEndpointResponse_endpointId,
+    registerAppInstanceUserEndpointResponse_httpStatus,
+  )
+where
+
+import Amazonka.ChimeSDKIdentity.Types
+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
+
+-- | /See:/ 'newRegisterAppInstanceUserEndpoint' smart constructor.
+data RegisterAppInstanceUserEndpoint = RegisterAppInstanceUserEndpoint'
+  { -- | Boolean that controls whether the AppInstanceUserEndpoint is opted in to
+    -- receive messages. @ALL@ indicates the endpoint receives all messages.
+    -- @NONE@ indicates the endpoint receives no messages.
+    allowMessages :: Prelude.Maybe AllowMessages,
+    -- | The name of the @AppInstanceUserEndpoint@.
+    name :: Prelude.Maybe (Data.Sensitive Prelude.Text),
+    -- | The ARN of the @AppInstanceUser@.
+    appInstanceUserArn :: Data.Sensitive Prelude.Text,
+    -- | The type of the @AppInstanceUserEndpoint@. Supported types:
+    --
+    -- -   @APNS@: The mobile notification service for an Apple device.
+    --
+    -- -   @APNS_SANDBOX@: The sandbox environment of the mobile notification
+    --     service for an Apple device.
+    --
+    -- -   @GCM@: The mobile notification service for an Android device.
+    --
+    -- Populate the @ResourceArn@ value of each type as @PinpointAppArn@.
+    type' :: AppInstanceUserEndpointType,
+    -- | The ARN of the resource to which the endpoint belongs.
+    resourceArn :: Data.Sensitive Prelude.Text,
+    -- | The attributes of an @Endpoint@.
+    endpointAttributes :: EndpointAttributes,
+    -- | The idempotency token for each client request.
+    clientRequestToken :: Data.Sensitive Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'RegisterAppInstanceUserEndpoint' 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:
+--
+-- 'allowMessages', 'registerAppInstanceUserEndpoint_allowMessages' - Boolean that controls whether the AppInstanceUserEndpoint is opted in to
+-- receive messages. @ALL@ indicates the endpoint receives all messages.
+-- @NONE@ indicates the endpoint receives no messages.
+--
+-- 'name', 'registerAppInstanceUserEndpoint_name' - The name of the @AppInstanceUserEndpoint@.
+--
+-- 'appInstanceUserArn', 'registerAppInstanceUserEndpoint_appInstanceUserArn' - The ARN of the @AppInstanceUser@.
+--
+-- 'type'', 'registerAppInstanceUserEndpoint_type' - The type of the @AppInstanceUserEndpoint@. Supported types:
+--
+-- -   @APNS@: The mobile notification service for an Apple device.
+--
+-- -   @APNS_SANDBOX@: The sandbox environment of the mobile notification
+--     service for an Apple device.
+--
+-- -   @GCM@: The mobile notification service for an Android device.
+--
+-- Populate the @ResourceArn@ value of each type as @PinpointAppArn@.
+--
+-- 'resourceArn', 'registerAppInstanceUserEndpoint_resourceArn' - The ARN of the resource to which the endpoint belongs.
+--
+-- 'endpointAttributes', 'registerAppInstanceUserEndpoint_endpointAttributes' - The attributes of an @Endpoint@.
+--
+-- 'clientRequestToken', 'registerAppInstanceUserEndpoint_clientRequestToken' - The idempotency token for each client request.
+newRegisterAppInstanceUserEndpoint ::
+  -- | 'appInstanceUserArn'
+  Prelude.Text ->
+  -- | 'type''
+  AppInstanceUserEndpointType ->
+  -- | 'resourceArn'
+  Prelude.Text ->
+  -- | 'endpointAttributes'
+  EndpointAttributes ->
+  -- | 'clientRequestToken'
+  Prelude.Text ->
+  RegisterAppInstanceUserEndpoint
+newRegisterAppInstanceUserEndpoint
+  pAppInstanceUserArn_
+  pType_
+  pResourceArn_
+  pEndpointAttributes_
+  pClientRequestToken_ =
+    RegisterAppInstanceUserEndpoint'
+      { allowMessages =
+          Prelude.Nothing,
+        name = Prelude.Nothing,
+        appInstanceUserArn =
+          Data._Sensitive
+            Lens.# pAppInstanceUserArn_,
+        type' = pType_,
+        resourceArn =
+          Data._Sensitive Lens.# pResourceArn_,
+        endpointAttributes = pEndpointAttributes_,
+        clientRequestToken =
+          Data._Sensitive
+            Lens.# pClientRequestToken_
+      }
+
+-- | Boolean that controls whether the AppInstanceUserEndpoint is opted in to
+-- receive messages. @ALL@ indicates the endpoint receives all messages.
+-- @NONE@ indicates the endpoint receives no messages.
+registerAppInstanceUserEndpoint_allowMessages :: Lens.Lens' RegisterAppInstanceUserEndpoint (Prelude.Maybe AllowMessages)
+registerAppInstanceUserEndpoint_allowMessages = Lens.lens (\RegisterAppInstanceUserEndpoint' {allowMessages} -> allowMessages) (\s@RegisterAppInstanceUserEndpoint' {} a -> s {allowMessages = a} :: RegisterAppInstanceUserEndpoint)
+
+-- | The name of the @AppInstanceUserEndpoint@.
+registerAppInstanceUserEndpoint_name :: Lens.Lens' RegisterAppInstanceUserEndpoint (Prelude.Maybe Prelude.Text)
+registerAppInstanceUserEndpoint_name = Lens.lens (\RegisterAppInstanceUserEndpoint' {name} -> name) (\s@RegisterAppInstanceUserEndpoint' {} a -> s {name = a} :: RegisterAppInstanceUserEndpoint) Prelude.. Lens.mapping Data._Sensitive
+
+-- | The ARN of the @AppInstanceUser@.
+registerAppInstanceUserEndpoint_appInstanceUserArn :: Lens.Lens' RegisterAppInstanceUserEndpoint Prelude.Text
+registerAppInstanceUserEndpoint_appInstanceUserArn = Lens.lens (\RegisterAppInstanceUserEndpoint' {appInstanceUserArn} -> appInstanceUserArn) (\s@RegisterAppInstanceUserEndpoint' {} a -> s {appInstanceUserArn = a} :: RegisterAppInstanceUserEndpoint) Prelude.. Data._Sensitive
+
+-- | The type of the @AppInstanceUserEndpoint@. Supported types:
+--
+-- -   @APNS@: The mobile notification service for an Apple device.
+--
+-- -   @APNS_SANDBOX@: The sandbox environment of the mobile notification
+--     service for an Apple device.
+--
+-- -   @GCM@: The mobile notification service for an Android device.
+--
+-- Populate the @ResourceArn@ value of each type as @PinpointAppArn@.
+registerAppInstanceUserEndpoint_type :: Lens.Lens' RegisterAppInstanceUserEndpoint AppInstanceUserEndpointType
+registerAppInstanceUserEndpoint_type = Lens.lens (\RegisterAppInstanceUserEndpoint' {type'} -> type') (\s@RegisterAppInstanceUserEndpoint' {} a -> s {type' = a} :: RegisterAppInstanceUserEndpoint)
+
+-- | The ARN of the resource to which the endpoint belongs.
+registerAppInstanceUserEndpoint_resourceArn :: Lens.Lens' RegisterAppInstanceUserEndpoint Prelude.Text
+registerAppInstanceUserEndpoint_resourceArn = Lens.lens (\RegisterAppInstanceUserEndpoint' {resourceArn} -> resourceArn) (\s@RegisterAppInstanceUserEndpoint' {} a -> s {resourceArn = a} :: RegisterAppInstanceUserEndpoint) Prelude.. Data._Sensitive
+
+-- | The attributes of an @Endpoint@.
+registerAppInstanceUserEndpoint_endpointAttributes :: Lens.Lens' RegisterAppInstanceUserEndpoint EndpointAttributes
+registerAppInstanceUserEndpoint_endpointAttributes = Lens.lens (\RegisterAppInstanceUserEndpoint' {endpointAttributes} -> endpointAttributes) (\s@RegisterAppInstanceUserEndpoint' {} a -> s {endpointAttributes = a} :: RegisterAppInstanceUserEndpoint)
+
+-- | The idempotency token for each client request.
+registerAppInstanceUserEndpoint_clientRequestToken :: Lens.Lens' RegisterAppInstanceUserEndpoint Prelude.Text
+registerAppInstanceUserEndpoint_clientRequestToken = Lens.lens (\RegisterAppInstanceUserEndpoint' {clientRequestToken} -> clientRequestToken) (\s@RegisterAppInstanceUserEndpoint' {} a -> s {clientRequestToken = a} :: RegisterAppInstanceUserEndpoint) Prelude.. Data._Sensitive
+
+instance
+  Core.AWSRequest
+    RegisterAppInstanceUserEndpoint
+  where
+  type
+    AWSResponse RegisterAppInstanceUserEndpoint =
+      RegisterAppInstanceUserEndpointResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          RegisterAppInstanceUserEndpointResponse'
+            Prelude.<$> (x Data..?> "AppInstanceUserArn")
+            Prelude.<*> (x Data..?> "EndpointId")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    RegisterAppInstanceUserEndpoint
+  where
+  hashWithSalt
+    _salt
+    RegisterAppInstanceUserEndpoint' {..} =
+      _salt
+        `Prelude.hashWithSalt` allowMessages
+        `Prelude.hashWithSalt` name
+        `Prelude.hashWithSalt` appInstanceUserArn
+        `Prelude.hashWithSalt` type'
+        `Prelude.hashWithSalt` resourceArn
+        `Prelude.hashWithSalt` endpointAttributes
+        `Prelude.hashWithSalt` clientRequestToken
+
+instance
+  Prelude.NFData
+    RegisterAppInstanceUserEndpoint
+  where
+  rnf RegisterAppInstanceUserEndpoint' {..} =
+    Prelude.rnf allowMessages
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf appInstanceUserArn
+      `Prelude.seq` Prelude.rnf type'
+      `Prelude.seq` Prelude.rnf resourceArn
+      `Prelude.seq` Prelude.rnf endpointAttributes
+      `Prelude.seq` Prelude.rnf clientRequestToken
+
+instance
+  Data.ToHeaders
+    RegisterAppInstanceUserEndpoint
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToJSON RegisterAppInstanceUserEndpoint where
+  toJSON RegisterAppInstanceUserEndpoint' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("AllowMessages" Data..=) Prelude.<$> allowMessages,
+            ("Name" Data..=) Prelude.<$> name,
+            Prelude.Just ("Type" Data..= type'),
+            Prelude.Just ("ResourceArn" Data..= resourceArn),
+            Prelude.Just
+              ("EndpointAttributes" Data..= endpointAttributes),
+            Prelude.Just
+              ("ClientRequestToken" Data..= clientRequestToken)
+          ]
+      )
+
+instance Data.ToPath RegisterAppInstanceUserEndpoint where
+  toPath RegisterAppInstanceUserEndpoint' {..} =
+    Prelude.mconcat
+      [ "/app-instance-users/",
+        Data.toBS appInstanceUserArn,
+        "/endpoints"
+      ]
+
+instance Data.ToQuery RegisterAppInstanceUserEndpoint where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newRegisterAppInstanceUserEndpointResponse' smart constructor.
+data RegisterAppInstanceUserEndpointResponse = RegisterAppInstanceUserEndpointResponse'
+  { -- | The ARN of the @AppInstanceUser@.
+    appInstanceUserArn :: Prelude.Maybe (Data.Sensitive Prelude.Text),
+    -- | The unique identifier of the @AppInstanceUserEndpoint@.
+    endpointId :: Prelude.Maybe (Data.Sensitive Prelude.Text),
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'RegisterAppInstanceUserEndpointResponse' 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:
+--
+-- 'appInstanceUserArn', 'registerAppInstanceUserEndpointResponse_appInstanceUserArn' - The ARN of the @AppInstanceUser@.
+--
+-- 'endpointId', 'registerAppInstanceUserEndpointResponse_endpointId' - The unique identifier of the @AppInstanceUserEndpoint@.
+--
+-- 'httpStatus', 'registerAppInstanceUserEndpointResponse_httpStatus' - The response's http status code.
+newRegisterAppInstanceUserEndpointResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  RegisterAppInstanceUserEndpointResponse
+newRegisterAppInstanceUserEndpointResponse
+  pHttpStatus_ =
+    RegisterAppInstanceUserEndpointResponse'
+      { appInstanceUserArn =
+          Prelude.Nothing,
+        endpointId = Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | The ARN of the @AppInstanceUser@.
+registerAppInstanceUserEndpointResponse_appInstanceUserArn :: Lens.Lens' RegisterAppInstanceUserEndpointResponse (Prelude.Maybe Prelude.Text)
+registerAppInstanceUserEndpointResponse_appInstanceUserArn = Lens.lens (\RegisterAppInstanceUserEndpointResponse' {appInstanceUserArn} -> appInstanceUserArn) (\s@RegisterAppInstanceUserEndpointResponse' {} a -> s {appInstanceUserArn = a} :: RegisterAppInstanceUserEndpointResponse) Prelude.. Lens.mapping Data._Sensitive
+
+-- | The unique identifier of the @AppInstanceUserEndpoint@.
+registerAppInstanceUserEndpointResponse_endpointId :: Lens.Lens' RegisterAppInstanceUserEndpointResponse (Prelude.Maybe Prelude.Text)
+registerAppInstanceUserEndpointResponse_endpointId = Lens.lens (\RegisterAppInstanceUserEndpointResponse' {endpointId} -> endpointId) (\s@RegisterAppInstanceUserEndpointResponse' {} a -> s {endpointId = a} :: RegisterAppInstanceUserEndpointResponse) Prelude.. Lens.mapping Data._Sensitive
+
+-- | The response's http status code.
+registerAppInstanceUserEndpointResponse_httpStatus :: Lens.Lens' RegisterAppInstanceUserEndpointResponse Prelude.Int
+registerAppInstanceUserEndpointResponse_httpStatus = Lens.lens (\RegisterAppInstanceUserEndpointResponse' {httpStatus} -> httpStatus) (\s@RegisterAppInstanceUserEndpointResponse' {} a -> s {httpStatus = a} :: RegisterAppInstanceUserEndpointResponse)
+
+instance
+  Prelude.NFData
+    RegisterAppInstanceUserEndpointResponse
+  where
+  rnf RegisterAppInstanceUserEndpointResponse' {..} =
+    Prelude.rnf appInstanceUserArn
+      `Prelude.seq` Prelude.rnf endpointId
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ChimeSDKIdentity/TagResource.hs b/gen/Amazonka/ChimeSDKIdentity/TagResource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ChimeSDKIdentity/TagResource.hs
@@ -0,0 +1,140 @@
+{-# 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.ChimeSDKIdentity.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)
+--
+-- Applies the specified tags to the specified Amazon Chime SDK identity
+-- resource.
+module Amazonka.ChimeSDKIdentity.TagResource
+  ( -- * Creating a Request
+    TagResource (..),
+    newTagResource,
+
+    -- * Request Lenses
+    tagResource_resourceARN,
+    tagResource_tags,
+
+    -- * Destructuring the Response
+    TagResourceResponse (..),
+    newTagResourceResponse,
+  )
+where
+
+import Amazonka.ChimeSDKIdentity.Types
+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
+
+-- | /See:/ 'newTagResource' smart constructor.
+data TagResource = TagResource'
+  { -- | The resource ARN.
+    resourceARN :: Prelude.Text,
+    -- | The tag key-value pairs.
+    tags :: Prelude.NonEmpty Tag
+  }
+  deriving (Prelude.Eq, 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 resource ARN.
+--
+-- 'tags', 'tagResource_tags' - The tag key-value pairs.
+newTagResource ::
+  -- | 'resourceARN'
+  Prelude.Text ->
+  -- | 'tags'
+  Prelude.NonEmpty Tag ->
+  TagResource
+newTagResource pResourceARN_ pTags_ =
+  TagResource'
+    { resourceARN = pResourceARN_,
+      tags = Lens.coerced Lens.# pTags_
+    }
+
+-- | The resource ARN.
+tagResource_resourceARN :: Lens.Lens' TagResource Prelude.Text
+tagResource_resourceARN = Lens.lens (\TagResource' {resourceARN} -> resourceARN) (\s@TagResource' {} a -> s {resourceARN = a} :: TagResource)
+
+-- | The tag key-value pairs.
+tagResource_tags :: Lens.Lens' TagResource (Prelude.NonEmpty Tag)
+tagResource_tags = Lens.lens (\TagResource' {tags} -> tags) (\s@TagResource' {} a -> s {tags = a} :: TagResource) Prelude.. Lens.coerced
+
+instance Core.AWSRequest TagResource where
+  type AWSResponse TagResource = TagResourceResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response = Response.receiveNull TagResourceResponse'
+
+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.mempty
+
+instance Data.ToJSON TagResource where
+  toJSON TagResource' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("ResourceARN" Data..= resourceARN),
+            Prelude.Just ("Tags" Data..= tags)
+          ]
+      )
+
+instance Data.ToPath TagResource where
+  toPath = Prelude.const "/tags"
+
+instance Data.ToQuery TagResource where
+  toQuery =
+    Prelude.const
+      (Prelude.mconcat ["operation=tag-resource"])
+
+-- | /See:/ 'newTagResourceResponse' smart constructor.
+data TagResourceResponse = TagResourceResponse'
+  {
+  }
+  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.
+newTagResourceResponse ::
+  TagResourceResponse
+newTagResourceResponse = TagResourceResponse'
+
+instance Prelude.NFData TagResourceResponse where
+  rnf _ = ()
diff --git a/gen/Amazonka/ChimeSDKIdentity/Types.hs b/gen/Amazonka/ChimeSDKIdentity/Types.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ChimeSDKIdentity/Types.hs
@@ -0,0 +1,302 @@
+{-# 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.ChimeSDKIdentity.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.ChimeSDKIdentity.Types
+  ( -- * Service Configuration
+    defaultService,
+
+    -- * Errors
+    _BadRequestException,
+    _ConflictException,
+    _ForbiddenException,
+    _ResourceLimitExceededException,
+    _ServiceFailureException,
+    _ServiceUnavailableException,
+    _ThrottledClientException,
+    _UnauthorizedClientException,
+
+    -- * AllowMessages
+    AllowMessages (..),
+
+    -- * AppInstanceUserEndpointType
+    AppInstanceUserEndpointType (..),
+
+    -- * EndpointStatus
+    EndpointStatus (..),
+
+    -- * EndpointStatusReason
+    EndpointStatusReason (..),
+
+    -- * AppInstance
+    AppInstance (..),
+    newAppInstance,
+    appInstance_appInstanceArn,
+    appInstance_createdTimestamp,
+    appInstance_lastUpdatedTimestamp,
+    appInstance_metadata,
+    appInstance_name,
+
+    -- * AppInstanceAdmin
+    AppInstanceAdmin (..),
+    newAppInstanceAdmin,
+    appInstanceAdmin_admin,
+    appInstanceAdmin_appInstanceArn,
+    appInstanceAdmin_createdTimestamp,
+
+    -- * AppInstanceAdminSummary
+    AppInstanceAdminSummary (..),
+    newAppInstanceAdminSummary,
+    appInstanceAdminSummary_admin,
+
+    -- * AppInstanceRetentionSettings
+    AppInstanceRetentionSettings (..),
+    newAppInstanceRetentionSettings,
+    appInstanceRetentionSettings_channelRetentionSettings,
+
+    -- * AppInstanceSummary
+    AppInstanceSummary (..),
+    newAppInstanceSummary,
+    appInstanceSummary_appInstanceArn,
+    appInstanceSummary_metadata,
+    appInstanceSummary_name,
+
+    -- * AppInstanceUser
+    AppInstanceUser (..),
+    newAppInstanceUser,
+    appInstanceUser_appInstanceUserArn,
+    appInstanceUser_createdTimestamp,
+    appInstanceUser_lastUpdatedTimestamp,
+    appInstanceUser_metadata,
+    appInstanceUser_name,
+
+    -- * AppInstanceUserEndpoint
+    AppInstanceUserEndpoint (..),
+    newAppInstanceUserEndpoint,
+    appInstanceUserEndpoint_allowMessages,
+    appInstanceUserEndpoint_appInstanceUserArn,
+    appInstanceUserEndpoint_createdTimestamp,
+    appInstanceUserEndpoint_endpointAttributes,
+    appInstanceUserEndpoint_endpointId,
+    appInstanceUserEndpoint_endpointState,
+    appInstanceUserEndpoint_lastUpdatedTimestamp,
+    appInstanceUserEndpoint_name,
+    appInstanceUserEndpoint_resourceArn,
+    appInstanceUserEndpoint_type,
+
+    -- * AppInstanceUserEndpointSummary
+    AppInstanceUserEndpointSummary (..),
+    newAppInstanceUserEndpointSummary,
+    appInstanceUserEndpointSummary_allowMessages,
+    appInstanceUserEndpointSummary_appInstanceUserArn,
+    appInstanceUserEndpointSummary_endpointId,
+    appInstanceUserEndpointSummary_endpointState,
+    appInstanceUserEndpointSummary_name,
+    appInstanceUserEndpointSummary_type,
+
+    -- * AppInstanceUserSummary
+    AppInstanceUserSummary (..),
+    newAppInstanceUserSummary,
+    appInstanceUserSummary_appInstanceUserArn,
+    appInstanceUserSummary_metadata,
+    appInstanceUserSummary_name,
+
+    -- * ChannelRetentionSettings
+    ChannelRetentionSettings (..),
+    newChannelRetentionSettings,
+    channelRetentionSettings_retentionDays,
+
+    -- * EndpointAttributes
+    EndpointAttributes (..),
+    newEndpointAttributes,
+    endpointAttributes_voipDeviceToken,
+    endpointAttributes_deviceToken,
+
+    -- * EndpointState
+    EndpointState (..),
+    newEndpointState,
+    endpointState_statusReason,
+    endpointState_status,
+
+    -- * Identity
+    Identity (..),
+    newIdentity,
+    identity_arn,
+    identity_name,
+
+    -- * Tag
+    Tag (..),
+    newTag,
+    tag_key,
+    tag_value,
+  )
+where
+
+import Amazonka.ChimeSDKIdentity.Types.AllowMessages
+import Amazonka.ChimeSDKIdentity.Types.AppInstance
+import Amazonka.ChimeSDKIdentity.Types.AppInstanceAdmin
+import Amazonka.ChimeSDKIdentity.Types.AppInstanceAdminSummary
+import Amazonka.ChimeSDKIdentity.Types.AppInstanceRetentionSettings
+import Amazonka.ChimeSDKIdentity.Types.AppInstanceSummary
+import Amazonka.ChimeSDKIdentity.Types.AppInstanceUser
+import Amazonka.ChimeSDKIdentity.Types.AppInstanceUserEndpoint
+import Amazonka.ChimeSDKIdentity.Types.AppInstanceUserEndpointSummary
+import Amazonka.ChimeSDKIdentity.Types.AppInstanceUserEndpointType
+import Amazonka.ChimeSDKIdentity.Types.AppInstanceUserSummary
+import Amazonka.ChimeSDKIdentity.Types.ChannelRetentionSettings
+import Amazonka.ChimeSDKIdentity.Types.EndpointAttributes
+import Amazonka.ChimeSDKIdentity.Types.EndpointState
+import Amazonka.ChimeSDKIdentity.Types.EndpointStatus
+import Amazonka.ChimeSDKIdentity.Types.EndpointStatusReason
+import Amazonka.ChimeSDKIdentity.Types.Identity
+import Amazonka.ChimeSDKIdentity.Types.Tag
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Sign.V4 as Sign
+
+-- | API version @2021-04-20@ of the Amazon Chime SDK Identity SDK configuration.
+defaultService :: Core.Service
+defaultService =
+  Core.Service
+    { Core.abbrev = "ChimeSDKIdentity",
+      Core.signer = Sign.v4,
+      Core.endpointPrefix = "identity-chime",
+      Core.signingName = "chime",
+      Core.version = "2021-04-20",
+      Core.s3AddressingStyle = Core.S3AddressingStyleAuto,
+      Core.endpoint = Core.defaultEndpoint defaultService,
+      Core.timeout = Prelude.Just 70,
+      Core.check = Core.statusSuccess,
+      Core.error = Core.parseJSONError "ChimeSDKIdentity",
+      Core.retry = retry
+    }
+  where
+    retry =
+      Core.Exponential
+        { Core.base = 5.0e-2,
+          Core.growth = 2,
+          Core.attempts = 5,
+          Core.check = check
+        }
+    check e
+      | Lens.has (Core.hasStatus 502) e =
+          Prelude.Just "bad_gateway"
+      | Lens.has (Core.hasStatus 504) e =
+          Prelude.Just "gateway_timeout"
+      | Lens.has (Core.hasStatus 500) e =
+          Prelude.Just "general_server_error"
+      | Lens.has (Core.hasStatus 509) e =
+          Prelude.Just "limit_exceeded"
+      | Lens.has
+          ( Core.hasCode "RequestThrottledException"
+              Prelude.. Core.hasStatus 400
+          )
+          e =
+          Prelude.Just "request_throttled_exception"
+      | Lens.has (Core.hasStatus 503) e =
+          Prelude.Just "service_unavailable"
+      | Lens.has
+          ( Core.hasCode "ThrottledException"
+              Prelude.. Core.hasStatus 400
+          )
+          e =
+          Prelude.Just "throttled_exception"
+      | Lens.has
+          ( Core.hasCode "Throttling"
+              Prelude.. Core.hasStatus 400
+          )
+          e =
+          Prelude.Just "throttling"
+      | Lens.has
+          ( Core.hasCode "ThrottlingException"
+              Prelude.. Core.hasStatus 400
+          )
+          e =
+          Prelude.Just "throttling_exception"
+      | Lens.has
+          ( Core.hasCode
+              "ProvisionedThroughputExceededException"
+              Prelude.. Core.hasStatus 400
+          )
+          e =
+          Prelude.Just "throughput_exceeded"
+      | Lens.has (Core.hasStatus 429) e =
+          Prelude.Just "too_many_requests"
+      | Prelude.otherwise = Prelude.Nothing
+
+-- | The input parameters don\'t match the service\'s restrictions.
+_BadRequestException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_BadRequestException =
+  Core._MatchServiceError
+    defaultService
+    "BadRequestException"
+    Prelude.. Core.hasStatus 400
+
+-- | The request could not be processed because of conflict in the current
+-- state of the resource.
+_ConflictException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ConflictException =
+  Core._MatchServiceError
+    defaultService
+    "ConflictException"
+    Prelude.. Core.hasStatus 409
+
+-- | The client is permanently forbidden from making the request.
+_ForbiddenException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ForbiddenException =
+  Core._MatchServiceError
+    defaultService
+    "ForbiddenException"
+    Prelude.. Core.hasStatus 403
+
+-- | The request exceeds the resource limit.
+_ResourceLimitExceededException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ResourceLimitExceededException =
+  Core._MatchServiceError
+    defaultService
+    "ResourceLimitExceededException"
+    Prelude.. Core.hasStatus 400
+
+-- | The service encountered an unexpected error.
+_ServiceFailureException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ServiceFailureException =
+  Core._MatchServiceError
+    defaultService
+    "ServiceFailureException"
+    Prelude.. Core.hasStatus 500
+
+-- | The service is currently unavailable.
+_ServiceUnavailableException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ServiceUnavailableException =
+  Core._MatchServiceError
+    defaultService
+    "ServiceUnavailableException"
+    Prelude.. Core.hasStatus 503
+
+-- | The client exceeded its request rate limit.
+_ThrottledClientException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ThrottledClientException =
+  Core._MatchServiceError
+    defaultService
+    "ThrottledClientException"
+    Prelude.. Core.hasStatus 429
+
+-- | The client is not currently authorized to make the request.
+_UnauthorizedClientException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_UnauthorizedClientException =
+  Core._MatchServiceError
+    defaultService
+    "UnauthorizedClientException"
+    Prelude.. Core.hasStatus 401
diff --git a/gen/Amazonka/ChimeSDKIdentity/Types/AllowMessages.hs b/gen/Amazonka/ChimeSDKIdentity/Types/AllowMessages.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ChimeSDKIdentity/Types/AllowMessages.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.ChimeSDKIdentity.Types.AllowMessages
+-- 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.ChimeSDKIdentity.Types.AllowMessages
+  ( AllowMessages
+      ( ..,
+        AllowMessages_ALL,
+        AllowMessages_NONE
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype AllowMessages = AllowMessages'
+  { fromAllowMessages ::
+      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 AllowMessages_ALL :: AllowMessages
+pattern AllowMessages_ALL = AllowMessages' "ALL"
+
+pattern AllowMessages_NONE :: AllowMessages
+pattern AllowMessages_NONE = AllowMessages' "NONE"
+
+{-# COMPLETE
+  AllowMessages_ALL,
+  AllowMessages_NONE,
+  AllowMessages'
+  #-}
diff --git a/gen/Amazonka/ChimeSDKIdentity/Types/AppInstance.hs b/gen/Amazonka/ChimeSDKIdentity/Types/AppInstance.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ChimeSDKIdentity/Types/AppInstance.hs
@@ -0,0 +1,121 @@
+{-# 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.ChimeSDKIdentity.Types.AppInstance
+-- 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.ChimeSDKIdentity.Types.AppInstance 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 of an @AppInstance@, an instance of an Amazon Chime SDK
+-- messaging application.
+--
+-- /See:/ 'newAppInstance' smart constructor.
+data AppInstance = AppInstance'
+  { -- | The ARN of the messaging instance.
+    appInstanceArn :: Prelude.Maybe Prelude.Text,
+    -- | The time at which an @AppInstance@ was created. In epoch milliseconds.
+    createdTimestamp :: Prelude.Maybe Data.POSIX,
+    -- | The time an @AppInstance@ was last updated. In epoch milliseconds.
+    lastUpdatedTimestamp :: Prelude.Maybe Data.POSIX,
+    -- | The metadata of an @AppInstance@.
+    metadata :: Prelude.Maybe (Data.Sensitive Prelude.Text),
+    -- | The name of an @AppInstance@.
+    name :: Prelude.Maybe (Data.Sensitive Prelude.Text)
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AppInstance' 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:
+--
+-- 'appInstanceArn', 'appInstance_appInstanceArn' - The ARN of the messaging instance.
+--
+-- 'createdTimestamp', 'appInstance_createdTimestamp' - The time at which an @AppInstance@ was created. In epoch milliseconds.
+--
+-- 'lastUpdatedTimestamp', 'appInstance_lastUpdatedTimestamp' - The time an @AppInstance@ was last updated. In epoch milliseconds.
+--
+-- 'metadata', 'appInstance_metadata' - The metadata of an @AppInstance@.
+--
+-- 'name', 'appInstance_name' - The name of an @AppInstance@.
+newAppInstance ::
+  AppInstance
+newAppInstance =
+  AppInstance'
+    { appInstanceArn = Prelude.Nothing,
+      createdTimestamp = Prelude.Nothing,
+      lastUpdatedTimestamp = Prelude.Nothing,
+      metadata = Prelude.Nothing,
+      name = Prelude.Nothing
+    }
+
+-- | The ARN of the messaging instance.
+appInstance_appInstanceArn :: Lens.Lens' AppInstance (Prelude.Maybe Prelude.Text)
+appInstance_appInstanceArn = Lens.lens (\AppInstance' {appInstanceArn} -> appInstanceArn) (\s@AppInstance' {} a -> s {appInstanceArn = a} :: AppInstance)
+
+-- | The time at which an @AppInstance@ was created. In epoch milliseconds.
+appInstance_createdTimestamp :: Lens.Lens' AppInstance (Prelude.Maybe Prelude.UTCTime)
+appInstance_createdTimestamp = Lens.lens (\AppInstance' {createdTimestamp} -> createdTimestamp) (\s@AppInstance' {} a -> s {createdTimestamp = a} :: AppInstance) Prelude.. Lens.mapping Data._Time
+
+-- | The time an @AppInstance@ was last updated. In epoch milliseconds.
+appInstance_lastUpdatedTimestamp :: Lens.Lens' AppInstance (Prelude.Maybe Prelude.UTCTime)
+appInstance_lastUpdatedTimestamp = Lens.lens (\AppInstance' {lastUpdatedTimestamp} -> lastUpdatedTimestamp) (\s@AppInstance' {} a -> s {lastUpdatedTimestamp = a} :: AppInstance) Prelude.. Lens.mapping Data._Time
+
+-- | The metadata of an @AppInstance@.
+appInstance_metadata :: Lens.Lens' AppInstance (Prelude.Maybe Prelude.Text)
+appInstance_metadata = Lens.lens (\AppInstance' {metadata} -> metadata) (\s@AppInstance' {} a -> s {metadata = a} :: AppInstance) Prelude.. Lens.mapping Data._Sensitive
+
+-- | The name of an @AppInstance@.
+appInstance_name :: Lens.Lens' AppInstance (Prelude.Maybe Prelude.Text)
+appInstance_name = Lens.lens (\AppInstance' {name} -> name) (\s@AppInstance' {} a -> s {name = a} :: AppInstance) Prelude.. Lens.mapping Data._Sensitive
+
+instance Data.FromJSON AppInstance where
+  parseJSON =
+    Data.withObject
+      "AppInstance"
+      ( \x ->
+          AppInstance'
+            Prelude.<$> (x Data..:? "AppInstanceArn")
+            Prelude.<*> (x Data..:? "CreatedTimestamp")
+            Prelude.<*> (x Data..:? "LastUpdatedTimestamp")
+            Prelude.<*> (x Data..:? "Metadata")
+            Prelude.<*> (x Data..:? "Name")
+      )
+
+instance Prelude.Hashable AppInstance where
+  hashWithSalt _salt AppInstance' {..} =
+    _salt
+      `Prelude.hashWithSalt` appInstanceArn
+      `Prelude.hashWithSalt` createdTimestamp
+      `Prelude.hashWithSalt` lastUpdatedTimestamp
+      `Prelude.hashWithSalt` metadata
+      `Prelude.hashWithSalt` name
+
+instance Prelude.NFData AppInstance where
+  rnf AppInstance' {..} =
+    Prelude.rnf appInstanceArn
+      `Prelude.seq` Prelude.rnf createdTimestamp
+      `Prelude.seq` Prelude.rnf lastUpdatedTimestamp
+      `Prelude.seq` Prelude.rnf metadata
+      `Prelude.seq` Prelude.rnf name
diff --git a/gen/Amazonka/ChimeSDKIdentity/Types/AppInstanceAdmin.hs b/gen/Amazonka/ChimeSDKIdentity/Types/AppInstanceAdmin.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ChimeSDKIdentity/Types/AppInstanceAdmin.hs
@@ -0,0 +1,97 @@
+{-# 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.ChimeSDKIdentity.Types.AppInstanceAdmin
+-- 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.ChimeSDKIdentity.Types.AppInstanceAdmin where
+
+import Amazonka.ChimeSDKIdentity.Types.Identity
+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 of an @AppInstanceAdmin@.
+--
+-- /See:/ 'newAppInstanceAdmin' smart constructor.
+data AppInstanceAdmin = AppInstanceAdmin'
+  { -- | The @AppInstanceAdmin@ data.
+    admin :: Prelude.Maybe Identity,
+    -- | The ARN of the @AppInstance@ for which the user is an administrator.
+    appInstanceArn :: Prelude.Maybe Prelude.Text,
+    -- | The time at which an administrator was created.
+    createdTimestamp :: Prelude.Maybe Data.POSIX
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AppInstanceAdmin' 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:
+--
+-- 'admin', 'appInstanceAdmin_admin' - The @AppInstanceAdmin@ data.
+--
+-- 'appInstanceArn', 'appInstanceAdmin_appInstanceArn' - The ARN of the @AppInstance@ for which the user is an administrator.
+--
+-- 'createdTimestamp', 'appInstanceAdmin_createdTimestamp' - The time at which an administrator was created.
+newAppInstanceAdmin ::
+  AppInstanceAdmin
+newAppInstanceAdmin =
+  AppInstanceAdmin'
+    { admin = Prelude.Nothing,
+      appInstanceArn = Prelude.Nothing,
+      createdTimestamp = Prelude.Nothing
+    }
+
+-- | The @AppInstanceAdmin@ data.
+appInstanceAdmin_admin :: Lens.Lens' AppInstanceAdmin (Prelude.Maybe Identity)
+appInstanceAdmin_admin = Lens.lens (\AppInstanceAdmin' {admin} -> admin) (\s@AppInstanceAdmin' {} a -> s {admin = a} :: AppInstanceAdmin)
+
+-- | The ARN of the @AppInstance@ for which the user is an administrator.
+appInstanceAdmin_appInstanceArn :: Lens.Lens' AppInstanceAdmin (Prelude.Maybe Prelude.Text)
+appInstanceAdmin_appInstanceArn = Lens.lens (\AppInstanceAdmin' {appInstanceArn} -> appInstanceArn) (\s@AppInstanceAdmin' {} a -> s {appInstanceArn = a} :: AppInstanceAdmin)
+
+-- | The time at which an administrator was created.
+appInstanceAdmin_createdTimestamp :: Lens.Lens' AppInstanceAdmin (Prelude.Maybe Prelude.UTCTime)
+appInstanceAdmin_createdTimestamp = Lens.lens (\AppInstanceAdmin' {createdTimestamp} -> createdTimestamp) (\s@AppInstanceAdmin' {} a -> s {createdTimestamp = a} :: AppInstanceAdmin) Prelude.. Lens.mapping Data._Time
+
+instance Data.FromJSON AppInstanceAdmin where
+  parseJSON =
+    Data.withObject
+      "AppInstanceAdmin"
+      ( \x ->
+          AppInstanceAdmin'
+            Prelude.<$> (x Data..:? "Admin")
+            Prelude.<*> (x Data..:? "AppInstanceArn")
+            Prelude.<*> (x Data..:? "CreatedTimestamp")
+      )
+
+instance Prelude.Hashable AppInstanceAdmin where
+  hashWithSalt _salt AppInstanceAdmin' {..} =
+    _salt
+      `Prelude.hashWithSalt` admin
+      `Prelude.hashWithSalt` appInstanceArn
+      `Prelude.hashWithSalt` createdTimestamp
+
+instance Prelude.NFData AppInstanceAdmin where
+  rnf AppInstanceAdmin' {..} =
+    Prelude.rnf admin
+      `Prelude.seq` Prelude.rnf appInstanceArn
+      `Prelude.seq` Prelude.rnf createdTimestamp
diff --git a/gen/Amazonka/ChimeSDKIdentity/Types/AppInstanceAdminSummary.hs b/gen/Amazonka/ChimeSDKIdentity/Types/AppInstanceAdminSummary.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ChimeSDKIdentity/Types/AppInstanceAdminSummary.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.ChimeSDKIdentity.Types.AppInstanceAdminSummary
+-- 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.ChimeSDKIdentity.Types.AppInstanceAdminSummary where
+
+import Amazonka.ChimeSDKIdentity.Types.Identity
+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 the details of an @AppInstanceAdmin@.
+--
+-- /See:/ 'newAppInstanceAdminSummary' smart constructor.
+data AppInstanceAdminSummary = AppInstanceAdminSummary'
+  { -- | The details of the @AppInstanceAdmin@.
+    admin :: Prelude.Maybe Identity
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AppInstanceAdminSummary' 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:
+--
+-- 'admin', 'appInstanceAdminSummary_admin' - The details of the @AppInstanceAdmin@.
+newAppInstanceAdminSummary ::
+  AppInstanceAdminSummary
+newAppInstanceAdminSummary =
+  AppInstanceAdminSummary' {admin = Prelude.Nothing}
+
+-- | The details of the @AppInstanceAdmin@.
+appInstanceAdminSummary_admin :: Lens.Lens' AppInstanceAdminSummary (Prelude.Maybe Identity)
+appInstanceAdminSummary_admin = Lens.lens (\AppInstanceAdminSummary' {admin} -> admin) (\s@AppInstanceAdminSummary' {} a -> s {admin = a} :: AppInstanceAdminSummary)
+
+instance Data.FromJSON AppInstanceAdminSummary where
+  parseJSON =
+    Data.withObject
+      "AppInstanceAdminSummary"
+      ( \x ->
+          AppInstanceAdminSummary'
+            Prelude.<$> (x Data..:? "Admin")
+      )
+
+instance Prelude.Hashable AppInstanceAdminSummary where
+  hashWithSalt _salt AppInstanceAdminSummary' {..} =
+    _salt `Prelude.hashWithSalt` admin
+
+instance Prelude.NFData AppInstanceAdminSummary where
+  rnf AppInstanceAdminSummary' {..} = Prelude.rnf admin
diff --git a/gen/Amazonka/ChimeSDKIdentity/Types/AppInstanceRetentionSettings.hs b/gen/Amazonka/ChimeSDKIdentity/Types/AppInstanceRetentionSettings.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ChimeSDKIdentity/Types/AppInstanceRetentionSettings.hs
@@ -0,0 +1,86 @@
+{-# 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.ChimeSDKIdentity.Types.AppInstanceRetentionSettings
+-- 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.ChimeSDKIdentity.Types.AppInstanceRetentionSettings where
+
+import Amazonka.ChimeSDKIdentity.Types.ChannelRetentionSettings
+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 of the data-retention settings for an @AppInstance@.
+--
+-- /See:/ 'newAppInstanceRetentionSettings' smart constructor.
+data AppInstanceRetentionSettings = AppInstanceRetentionSettings'
+  { -- | The length of time in days to retain the messages in a channel.
+    channelRetentionSettings :: Prelude.Maybe ChannelRetentionSettings
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AppInstanceRetentionSettings' 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:
+--
+-- 'channelRetentionSettings', 'appInstanceRetentionSettings_channelRetentionSettings' - The length of time in days to retain the messages in a channel.
+newAppInstanceRetentionSettings ::
+  AppInstanceRetentionSettings
+newAppInstanceRetentionSettings =
+  AppInstanceRetentionSettings'
+    { channelRetentionSettings =
+        Prelude.Nothing
+    }
+
+-- | The length of time in days to retain the messages in a channel.
+appInstanceRetentionSettings_channelRetentionSettings :: Lens.Lens' AppInstanceRetentionSettings (Prelude.Maybe ChannelRetentionSettings)
+appInstanceRetentionSettings_channelRetentionSettings = Lens.lens (\AppInstanceRetentionSettings' {channelRetentionSettings} -> channelRetentionSettings) (\s@AppInstanceRetentionSettings' {} a -> s {channelRetentionSettings = a} :: AppInstanceRetentionSettings)
+
+instance Data.FromJSON AppInstanceRetentionSettings where
+  parseJSON =
+    Data.withObject
+      "AppInstanceRetentionSettings"
+      ( \x ->
+          AppInstanceRetentionSettings'
+            Prelude.<$> (x Data..:? "ChannelRetentionSettings")
+      )
+
+instance
+  Prelude.Hashable
+    AppInstanceRetentionSettings
+  where
+  hashWithSalt _salt AppInstanceRetentionSettings' {..} =
+    _salt
+      `Prelude.hashWithSalt` channelRetentionSettings
+
+instance Prelude.NFData AppInstanceRetentionSettings where
+  rnf AppInstanceRetentionSettings' {..} =
+    Prelude.rnf channelRetentionSettings
+
+instance Data.ToJSON AppInstanceRetentionSettings where
+  toJSON AppInstanceRetentionSettings' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("ChannelRetentionSettings" Data..=)
+              Prelude.<$> channelRetentionSettings
+          ]
+      )
diff --git a/gen/Amazonka/ChimeSDKIdentity/Types/AppInstanceSummary.hs b/gen/Amazonka/ChimeSDKIdentity/Types/AppInstanceSummary.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ChimeSDKIdentity/Types/AppInstanceSummary.hs
@@ -0,0 +1,97 @@
+{-# 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.ChimeSDKIdentity.Types.AppInstanceSummary
+-- 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.ChimeSDKIdentity.Types.AppInstanceSummary 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 the data for an @AppInstance@.
+--
+-- /See:/ 'newAppInstanceSummary' smart constructor.
+data AppInstanceSummary = AppInstanceSummary'
+  { -- | The @AppInstance@ ARN.
+    appInstanceArn :: Prelude.Maybe Prelude.Text,
+    -- | The metadata of the @AppInstance@.
+    metadata :: Prelude.Maybe (Data.Sensitive Prelude.Text),
+    -- | The name of the @AppInstance@.
+    name :: Prelude.Maybe (Data.Sensitive Prelude.Text)
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AppInstanceSummary' 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:
+--
+-- 'appInstanceArn', 'appInstanceSummary_appInstanceArn' - The @AppInstance@ ARN.
+--
+-- 'metadata', 'appInstanceSummary_metadata' - The metadata of the @AppInstance@.
+--
+-- 'name', 'appInstanceSummary_name' - The name of the @AppInstance@.
+newAppInstanceSummary ::
+  AppInstanceSummary
+newAppInstanceSummary =
+  AppInstanceSummary'
+    { appInstanceArn =
+        Prelude.Nothing,
+      metadata = Prelude.Nothing,
+      name = Prelude.Nothing
+    }
+
+-- | The @AppInstance@ ARN.
+appInstanceSummary_appInstanceArn :: Lens.Lens' AppInstanceSummary (Prelude.Maybe Prelude.Text)
+appInstanceSummary_appInstanceArn = Lens.lens (\AppInstanceSummary' {appInstanceArn} -> appInstanceArn) (\s@AppInstanceSummary' {} a -> s {appInstanceArn = a} :: AppInstanceSummary)
+
+-- | The metadata of the @AppInstance@.
+appInstanceSummary_metadata :: Lens.Lens' AppInstanceSummary (Prelude.Maybe Prelude.Text)
+appInstanceSummary_metadata = Lens.lens (\AppInstanceSummary' {metadata} -> metadata) (\s@AppInstanceSummary' {} a -> s {metadata = a} :: AppInstanceSummary) Prelude.. Lens.mapping Data._Sensitive
+
+-- | The name of the @AppInstance@.
+appInstanceSummary_name :: Lens.Lens' AppInstanceSummary (Prelude.Maybe Prelude.Text)
+appInstanceSummary_name = Lens.lens (\AppInstanceSummary' {name} -> name) (\s@AppInstanceSummary' {} a -> s {name = a} :: AppInstanceSummary) Prelude.. Lens.mapping Data._Sensitive
+
+instance Data.FromJSON AppInstanceSummary where
+  parseJSON =
+    Data.withObject
+      "AppInstanceSummary"
+      ( \x ->
+          AppInstanceSummary'
+            Prelude.<$> (x Data..:? "AppInstanceArn")
+            Prelude.<*> (x Data..:? "Metadata")
+            Prelude.<*> (x Data..:? "Name")
+      )
+
+instance Prelude.Hashable AppInstanceSummary where
+  hashWithSalt _salt AppInstanceSummary' {..} =
+    _salt
+      `Prelude.hashWithSalt` appInstanceArn
+      `Prelude.hashWithSalt` metadata
+      `Prelude.hashWithSalt` name
+
+instance Prelude.NFData AppInstanceSummary where
+  rnf AppInstanceSummary' {..} =
+    Prelude.rnf appInstanceArn
+      `Prelude.seq` Prelude.rnf metadata
+      `Prelude.seq` Prelude.rnf name
diff --git a/gen/Amazonka/ChimeSDKIdentity/Types/AppInstanceUser.hs b/gen/Amazonka/ChimeSDKIdentity/Types/AppInstanceUser.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ChimeSDKIdentity/Types/AppInstanceUser.hs
@@ -0,0 +1,121 @@
+{-# 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.ChimeSDKIdentity.Types.AppInstanceUser
+-- 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.ChimeSDKIdentity.Types.AppInstanceUser 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 of an @AppInstanceUser@.
+--
+-- /See:/ 'newAppInstanceUser' smart constructor.
+data AppInstanceUser = AppInstanceUser'
+  { -- | The ARN of the @AppInstanceUser@.
+    appInstanceUserArn :: Prelude.Maybe Prelude.Text,
+    -- | The time at which the @AppInstanceUser@ was created.
+    createdTimestamp :: Prelude.Maybe Data.POSIX,
+    -- | The time at which the @AppInstanceUser@ was last updated.
+    lastUpdatedTimestamp :: Prelude.Maybe Data.POSIX,
+    -- | The metadata of the @AppInstanceUser@.
+    metadata :: Prelude.Maybe (Data.Sensitive Prelude.Text),
+    -- | The name of the @AppInstanceUser@.
+    name :: Prelude.Maybe (Data.Sensitive Prelude.Text)
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AppInstanceUser' 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:
+--
+-- 'appInstanceUserArn', 'appInstanceUser_appInstanceUserArn' - The ARN of the @AppInstanceUser@.
+--
+-- 'createdTimestamp', 'appInstanceUser_createdTimestamp' - The time at which the @AppInstanceUser@ was created.
+--
+-- 'lastUpdatedTimestamp', 'appInstanceUser_lastUpdatedTimestamp' - The time at which the @AppInstanceUser@ was last updated.
+--
+-- 'metadata', 'appInstanceUser_metadata' - The metadata of the @AppInstanceUser@.
+--
+-- 'name', 'appInstanceUser_name' - The name of the @AppInstanceUser@.
+newAppInstanceUser ::
+  AppInstanceUser
+newAppInstanceUser =
+  AppInstanceUser'
+    { appInstanceUserArn =
+        Prelude.Nothing,
+      createdTimestamp = Prelude.Nothing,
+      lastUpdatedTimestamp = Prelude.Nothing,
+      metadata = Prelude.Nothing,
+      name = Prelude.Nothing
+    }
+
+-- | The ARN of the @AppInstanceUser@.
+appInstanceUser_appInstanceUserArn :: Lens.Lens' AppInstanceUser (Prelude.Maybe Prelude.Text)
+appInstanceUser_appInstanceUserArn = Lens.lens (\AppInstanceUser' {appInstanceUserArn} -> appInstanceUserArn) (\s@AppInstanceUser' {} a -> s {appInstanceUserArn = a} :: AppInstanceUser)
+
+-- | The time at which the @AppInstanceUser@ was created.
+appInstanceUser_createdTimestamp :: Lens.Lens' AppInstanceUser (Prelude.Maybe Prelude.UTCTime)
+appInstanceUser_createdTimestamp = Lens.lens (\AppInstanceUser' {createdTimestamp} -> createdTimestamp) (\s@AppInstanceUser' {} a -> s {createdTimestamp = a} :: AppInstanceUser) Prelude.. Lens.mapping Data._Time
+
+-- | The time at which the @AppInstanceUser@ was last updated.
+appInstanceUser_lastUpdatedTimestamp :: Lens.Lens' AppInstanceUser (Prelude.Maybe Prelude.UTCTime)
+appInstanceUser_lastUpdatedTimestamp = Lens.lens (\AppInstanceUser' {lastUpdatedTimestamp} -> lastUpdatedTimestamp) (\s@AppInstanceUser' {} a -> s {lastUpdatedTimestamp = a} :: AppInstanceUser) Prelude.. Lens.mapping Data._Time
+
+-- | The metadata of the @AppInstanceUser@.
+appInstanceUser_metadata :: Lens.Lens' AppInstanceUser (Prelude.Maybe Prelude.Text)
+appInstanceUser_metadata = Lens.lens (\AppInstanceUser' {metadata} -> metadata) (\s@AppInstanceUser' {} a -> s {metadata = a} :: AppInstanceUser) Prelude.. Lens.mapping Data._Sensitive
+
+-- | The name of the @AppInstanceUser@.
+appInstanceUser_name :: Lens.Lens' AppInstanceUser (Prelude.Maybe Prelude.Text)
+appInstanceUser_name = Lens.lens (\AppInstanceUser' {name} -> name) (\s@AppInstanceUser' {} a -> s {name = a} :: AppInstanceUser) Prelude.. Lens.mapping Data._Sensitive
+
+instance Data.FromJSON AppInstanceUser where
+  parseJSON =
+    Data.withObject
+      "AppInstanceUser"
+      ( \x ->
+          AppInstanceUser'
+            Prelude.<$> (x Data..:? "AppInstanceUserArn")
+            Prelude.<*> (x Data..:? "CreatedTimestamp")
+            Prelude.<*> (x Data..:? "LastUpdatedTimestamp")
+            Prelude.<*> (x Data..:? "Metadata")
+            Prelude.<*> (x Data..:? "Name")
+      )
+
+instance Prelude.Hashable AppInstanceUser where
+  hashWithSalt _salt AppInstanceUser' {..} =
+    _salt
+      `Prelude.hashWithSalt` appInstanceUserArn
+      `Prelude.hashWithSalt` createdTimestamp
+      `Prelude.hashWithSalt` lastUpdatedTimestamp
+      `Prelude.hashWithSalt` metadata
+      `Prelude.hashWithSalt` name
+
+instance Prelude.NFData AppInstanceUser where
+  rnf AppInstanceUser' {..} =
+    Prelude.rnf appInstanceUserArn
+      `Prelude.seq` Prelude.rnf createdTimestamp
+      `Prelude.seq` Prelude.rnf lastUpdatedTimestamp
+      `Prelude.seq` Prelude.rnf metadata
+      `Prelude.seq` Prelude.rnf name
diff --git a/gen/Amazonka/ChimeSDKIdentity/Types/AppInstanceUserEndpoint.hs b/gen/Amazonka/ChimeSDKIdentity/Types/AppInstanceUserEndpoint.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ChimeSDKIdentity/Types/AppInstanceUserEndpoint.hs
@@ -0,0 +1,241 @@
+{-# 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.ChimeSDKIdentity.Types.AppInstanceUserEndpoint
+-- 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.ChimeSDKIdentity.Types.AppInstanceUserEndpoint where
+
+import Amazonka.ChimeSDKIdentity.Types.AllowMessages
+import Amazonka.ChimeSDKIdentity.Types.AppInstanceUserEndpointType
+import Amazonka.ChimeSDKIdentity.Types.EndpointAttributes
+import Amazonka.ChimeSDKIdentity.Types.EndpointState
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | An endpoint under an Amazon Chime @AppInstanceUser@ that receives
+-- messages for a user. For push notifications, the endpoint is a mobile
+-- device used to receive mobile push notifications for a user.
+--
+-- /See:/ 'newAppInstanceUserEndpoint' smart constructor.
+data AppInstanceUserEndpoint = AppInstanceUserEndpoint'
+  { -- | Boolean that controls whether the @AppInstanceUserEndpoint@ is opted in
+    -- to receive messages. @ALL@ indicates the endpoint will receive all
+    -- messages. @NONE@ indicates the endpoint will receive no messages.
+    allowMessages :: Prelude.Maybe AllowMessages,
+    -- | The ARN of the @AppInstanceUser@.
+    appInstanceUserArn :: Prelude.Maybe (Data.Sensitive Prelude.Text),
+    -- | The time at which an @AppInstanceUserEndpoint@ was created.
+    createdTimestamp :: Prelude.Maybe Data.POSIX,
+    -- | The attributes of an @Endpoint@.
+    endpointAttributes :: Prelude.Maybe EndpointAttributes,
+    -- | The unique identifier of the @AppInstanceUserEndpoint@.
+    endpointId :: Prelude.Maybe (Data.Sensitive Prelude.Text),
+    -- | A read-only field that represents the state of an
+    -- @AppInstanceUserEndpoint@. Supported values:
+    --
+    -- -   @ACTIVE@: The @AppInstanceUserEndpoint@ is active and able to
+    --     receive messages. When @ACTIVE@, the @EndpointStatusReason@ remains
+    --     empty.
+    --
+    -- -   @INACTIVE@: The @AppInstanceUserEndpoint@ is inactive and can\'t
+    --     receive message. When @INACTIVE@, the corresponding reason will be
+    --     conveyed through @EndpointStatusReason@.
+    --
+    -- -   @INVALID_DEVICE_TOKEN@ indicates that an @AppInstanceUserEndpoint@
+    --     is @INACTIVE@ due to invalid device token
+    --
+    -- -   @INVALID_PINPOINT_ARN@ indicates that an @AppInstanceUserEndpoint@
+    --     is @INACTIVE@ due to an invalid pinpoint ARN that was input through
+    --     the @ResourceArn@ field.
+    endpointState :: Prelude.Maybe EndpointState,
+    -- | The time at which an @AppInstanceUserEndpoint@ was last updated.
+    lastUpdatedTimestamp :: Prelude.Maybe Data.POSIX,
+    -- | The name of the @AppInstanceUserEndpoint@.
+    name :: Prelude.Maybe (Data.Sensitive Prelude.Text),
+    -- | The ARN of the resource to which the endpoint belongs.
+    resourceArn :: Prelude.Maybe (Data.Sensitive Prelude.Text),
+    -- | The type of the @AppInstanceUserEndpoint@.
+    type' :: Prelude.Maybe AppInstanceUserEndpointType
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AppInstanceUserEndpoint' 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:
+--
+-- 'allowMessages', 'appInstanceUserEndpoint_allowMessages' - Boolean that controls whether the @AppInstanceUserEndpoint@ is opted in
+-- to receive messages. @ALL@ indicates the endpoint will receive all
+-- messages. @NONE@ indicates the endpoint will receive no messages.
+--
+-- 'appInstanceUserArn', 'appInstanceUserEndpoint_appInstanceUserArn' - The ARN of the @AppInstanceUser@.
+--
+-- 'createdTimestamp', 'appInstanceUserEndpoint_createdTimestamp' - The time at which an @AppInstanceUserEndpoint@ was created.
+--
+-- 'endpointAttributes', 'appInstanceUserEndpoint_endpointAttributes' - The attributes of an @Endpoint@.
+--
+-- 'endpointId', 'appInstanceUserEndpoint_endpointId' - The unique identifier of the @AppInstanceUserEndpoint@.
+--
+-- 'endpointState', 'appInstanceUserEndpoint_endpointState' - A read-only field that represents the state of an
+-- @AppInstanceUserEndpoint@. Supported values:
+--
+-- -   @ACTIVE@: The @AppInstanceUserEndpoint@ is active and able to
+--     receive messages. When @ACTIVE@, the @EndpointStatusReason@ remains
+--     empty.
+--
+-- -   @INACTIVE@: The @AppInstanceUserEndpoint@ is inactive and can\'t
+--     receive message. When @INACTIVE@, the corresponding reason will be
+--     conveyed through @EndpointStatusReason@.
+--
+-- -   @INVALID_DEVICE_TOKEN@ indicates that an @AppInstanceUserEndpoint@
+--     is @INACTIVE@ due to invalid device token
+--
+-- -   @INVALID_PINPOINT_ARN@ indicates that an @AppInstanceUserEndpoint@
+--     is @INACTIVE@ due to an invalid pinpoint ARN that was input through
+--     the @ResourceArn@ field.
+--
+-- 'lastUpdatedTimestamp', 'appInstanceUserEndpoint_lastUpdatedTimestamp' - The time at which an @AppInstanceUserEndpoint@ was last updated.
+--
+-- 'name', 'appInstanceUserEndpoint_name' - The name of the @AppInstanceUserEndpoint@.
+--
+-- 'resourceArn', 'appInstanceUserEndpoint_resourceArn' - The ARN of the resource to which the endpoint belongs.
+--
+-- 'type'', 'appInstanceUserEndpoint_type' - The type of the @AppInstanceUserEndpoint@.
+newAppInstanceUserEndpoint ::
+  AppInstanceUserEndpoint
+newAppInstanceUserEndpoint =
+  AppInstanceUserEndpoint'
+    { allowMessages =
+        Prelude.Nothing,
+      appInstanceUserArn = Prelude.Nothing,
+      createdTimestamp = Prelude.Nothing,
+      endpointAttributes = Prelude.Nothing,
+      endpointId = Prelude.Nothing,
+      endpointState = Prelude.Nothing,
+      lastUpdatedTimestamp = Prelude.Nothing,
+      name = Prelude.Nothing,
+      resourceArn = Prelude.Nothing,
+      type' = Prelude.Nothing
+    }
+
+-- | Boolean that controls whether the @AppInstanceUserEndpoint@ is opted in
+-- to receive messages. @ALL@ indicates the endpoint will receive all
+-- messages. @NONE@ indicates the endpoint will receive no messages.
+appInstanceUserEndpoint_allowMessages :: Lens.Lens' AppInstanceUserEndpoint (Prelude.Maybe AllowMessages)
+appInstanceUserEndpoint_allowMessages = Lens.lens (\AppInstanceUserEndpoint' {allowMessages} -> allowMessages) (\s@AppInstanceUserEndpoint' {} a -> s {allowMessages = a} :: AppInstanceUserEndpoint)
+
+-- | The ARN of the @AppInstanceUser@.
+appInstanceUserEndpoint_appInstanceUserArn :: Lens.Lens' AppInstanceUserEndpoint (Prelude.Maybe Prelude.Text)
+appInstanceUserEndpoint_appInstanceUserArn = Lens.lens (\AppInstanceUserEndpoint' {appInstanceUserArn} -> appInstanceUserArn) (\s@AppInstanceUserEndpoint' {} a -> s {appInstanceUserArn = a} :: AppInstanceUserEndpoint) Prelude.. Lens.mapping Data._Sensitive
+
+-- | The time at which an @AppInstanceUserEndpoint@ was created.
+appInstanceUserEndpoint_createdTimestamp :: Lens.Lens' AppInstanceUserEndpoint (Prelude.Maybe Prelude.UTCTime)
+appInstanceUserEndpoint_createdTimestamp = Lens.lens (\AppInstanceUserEndpoint' {createdTimestamp} -> createdTimestamp) (\s@AppInstanceUserEndpoint' {} a -> s {createdTimestamp = a} :: AppInstanceUserEndpoint) Prelude.. Lens.mapping Data._Time
+
+-- | The attributes of an @Endpoint@.
+appInstanceUserEndpoint_endpointAttributes :: Lens.Lens' AppInstanceUserEndpoint (Prelude.Maybe EndpointAttributes)
+appInstanceUserEndpoint_endpointAttributes = Lens.lens (\AppInstanceUserEndpoint' {endpointAttributes} -> endpointAttributes) (\s@AppInstanceUserEndpoint' {} a -> s {endpointAttributes = a} :: AppInstanceUserEndpoint)
+
+-- | The unique identifier of the @AppInstanceUserEndpoint@.
+appInstanceUserEndpoint_endpointId :: Lens.Lens' AppInstanceUserEndpoint (Prelude.Maybe Prelude.Text)
+appInstanceUserEndpoint_endpointId = Lens.lens (\AppInstanceUserEndpoint' {endpointId} -> endpointId) (\s@AppInstanceUserEndpoint' {} a -> s {endpointId = a} :: AppInstanceUserEndpoint) Prelude.. Lens.mapping Data._Sensitive
+
+-- | A read-only field that represents the state of an
+-- @AppInstanceUserEndpoint@. Supported values:
+--
+-- -   @ACTIVE@: The @AppInstanceUserEndpoint@ is active and able to
+--     receive messages. When @ACTIVE@, the @EndpointStatusReason@ remains
+--     empty.
+--
+-- -   @INACTIVE@: The @AppInstanceUserEndpoint@ is inactive and can\'t
+--     receive message. When @INACTIVE@, the corresponding reason will be
+--     conveyed through @EndpointStatusReason@.
+--
+-- -   @INVALID_DEVICE_TOKEN@ indicates that an @AppInstanceUserEndpoint@
+--     is @INACTIVE@ due to invalid device token
+--
+-- -   @INVALID_PINPOINT_ARN@ indicates that an @AppInstanceUserEndpoint@
+--     is @INACTIVE@ due to an invalid pinpoint ARN that was input through
+--     the @ResourceArn@ field.
+appInstanceUserEndpoint_endpointState :: Lens.Lens' AppInstanceUserEndpoint (Prelude.Maybe EndpointState)
+appInstanceUserEndpoint_endpointState = Lens.lens (\AppInstanceUserEndpoint' {endpointState} -> endpointState) (\s@AppInstanceUserEndpoint' {} a -> s {endpointState = a} :: AppInstanceUserEndpoint)
+
+-- | The time at which an @AppInstanceUserEndpoint@ was last updated.
+appInstanceUserEndpoint_lastUpdatedTimestamp :: Lens.Lens' AppInstanceUserEndpoint (Prelude.Maybe Prelude.UTCTime)
+appInstanceUserEndpoint_lastUpdatedTimestamp = Lens.lens (\AppInstanceUserEndpoint' {lastUpdatedTimestamp} -> lastUpdatedTimestamp) (\s@AppInstanceUserEndpoint' {} a -> s {lastUpdatedTimestamp = a} :: AppInstanceUserEndpoint) Prelude.. Lens.mapping Data._Time
+
+-- | The name of the @AppInstanceUserEndpoint@.
+appInstanceUserEndpoint_name :: Lens.Lens' AppInstanceUserEndpoint (Prelude.Maybe Prelude.Text)
+appInstanceUserEndpoint_name = Lens.lens (\AppInstanceUserEndpoint' {name} -> name) (\s@AppInstanceUserEndpoint' {} a -> s {name = a} :: AppInstanceUserEndpoint) Prelude.. Lens.mapping Data._Sensitive
+
+-- | The ARN of the resource to which the endpoint belongs.
+appInstanceUserEndpoint_resourceArn :: Lens.Lens' AppInstanceUserEndpoint (Prelude.Maybe Prelude.Text)
+appInstanceUserEndpoint_resourceArn = Lens.lens (\AppInstanceUserEndpoint' {resourceArn} -> resourceArn) (\s@AppInstanceUserEndpoint' {} a -> s {resourceArn = a} :: AppInstanceUserEndpoint) Prelude.. Lens.mapping Data._Sensitive
+
+-- | The type of the @AppInstanceUserEndpoint@.
+appInstanceUserEndpoint_type :: Lens.Lens' AppInstanceUserEndpoint (Prelude.Maybe AppInstanceUserEndpointType)
+appInstanceUserEndpoint_type = Lens.lens (\AppInstanceUserEndpoint' {type'} -> type') (\s@AppInstanceUserEndpoint' {} a -> s {type' = a} :: AppInstanceUserEndpoint)
+
+instance Data.FromJSON AppInstanceUserEndpoint where
+  parseJSON =
+    Data.withObject
+      "AppInstanceUserEndpoint"
+      ( \x ->
+          AppInstanceUserEndpoint'
+            Prelude.<$> (x Data..:? "AllowMessages")
+            Prelude.<*> (x Data..:? "AppInstanceUserArn")
+            Prelude.<*> (x Data..:? "CreatedTimestamp")
+            Prelude.<*> (x Data..:? "EndpointAttributes")
+            Prelude.<*> (x Data..:? "EndpointId")
+            Prelude.<*> (x Data..:? "EndpointState")
+            Prelude.<*> (x Data..:? "LastUpdatedTimestamp")
+            Prelude.<*> (x Data..:? "Name")
+            Prelude.<*> (x Data..:? "ResourceArn")
+            Prelude.<*> (x Data..:? "Type")
+      )
+
+instance Prelude.Hashable AppInstanceUserEndpoint where
+  hashWithSalt _salt AppInstanceUserEndpoint' {..} =
+    _salt
+      `Prelude.hashWithSalt` allowMessages
+      `Prelude.hashWithSalt` appInstanceUserArn
+      `Prelude.hashWithSalt` createdTimestamp
+      `Prelude.hashWithSalt` endpointAttributes
+      `Prelude.hashWithSalt` endpointId
+      `Prelude.hashWithSalt` endpointState
+      `Prelude.hashWithSalt` lastUpdatedTimestamp
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` resourceArn
+      `Prelude.hashWithSalt` type'
+
+instance Prelude.NFData AppInstanceUserEndpoint where
+  rnf AppInstanceUserEndpoint' {..} =
+    Prelude.rnf allowMessages
+      `Prelude.seq` Prelude.rnf appInstanceUserArn
+      `Prelude.seq` Prelude.rnf createdTimestamp
+      `Prelude.seq` Prelude.rnf endpointAttributes
+      `Prelude.seq` Prelude.rnf endpointId
+      `Prelude.seq` Prelude.rnf endpointState
+      `Prelude.seq` Prelude.rnf lastUpdatedTimestamp
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf resourceArn
+      `Prelude.seq` Prelude.rnf type'
diff --git a/gen/Amazonka/ChimeSDKIdentity/Types/AppInstanceUserEndpointSummary.hs b/gen/Amazonka/ChimeSDKIdentity/Types/AppInstanceUserEndpointSummary.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ChimeSDKIdentity/Types/AppInstanceUserEndpointSummary.hs
@@ -0,0 +1,153 @@
+{-# 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.ChimeSDKIdentity.Types.AppInstanceUserEndpointSummary
+-- 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.ChimeSDKIdentity.Types.AppInstanceUserEndpointSummary where
+
+import Amazonka.ChimeSDKIdentity.Types.AllowMessages
+import Amazonka.ChimeSDKIdentity.Types.AppInstanceUserEndpointType
+import Amazonka.ChimeSDKIdentity.Types.EndpointState
+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 the details of an @AppInstanceUserEndpoint@.
+--
+-- /See:/ 'newAppInstanceUserEndpointSummary' smart constructor.
+data AppInstanceUserEndpointSummary = AppInstanceUserEndpointSummary'
+  { -- | BBoolean that controls whether the @AppInstanceUserEndpoint@ is opted in
+    -- to receive messages. @ALL@ indicates the endpoint will receive all
+    -- messages. @NONE@ indicates the endpoint will receive no messages.
+    allowMessages :: Prelude.Maybe AllowMessages,
+    -- | The ARN of the @AppInstanceUser@.
+    appInstanceUserArn :: Prelude.Maybe (Data.Sensitive Prelude.Text),
+    -- | The unique identifier of the @AppInstanceUserEndpoint@.
+    endpointId :: Prelude.Maybe (Data.Sensitive Prelude.Text),
+    -- | A read-only field that represent the state of an
+    -- @AppInstanceUserEndpoint@.
+    endpointState :: Prelude.Maybe EndpointState,
+    -- | The name of the @AppInstanceUserEndpoint@.
+    name :: Prelude.Maybe (Data.Sensitive Prelude.Text),
+    -- | The type of the @AppInstanceUserEndpoint@.
+    type' :: Prelude.Maybe AppInstanceUserEndpointType
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AppInstanceUserEndpointSummary' 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:
+--
+-- 'allowMessages', 'appInstanceUserEndpointSummary_allowMessages' - BBoolean that controls whether the @AppInstanceUserEndpoint@ is opted in
+-- to receive messages. @ALL@ indicates the endpoint will receive all
+-- messages. @NONE@ indicates the endpoint will receive no messages.
+--
+-- 'appInstanceUserArn', 'appInstanceUserEndpointSummary_appInstanceUserArn' - The ARN of the @AppInstanceUser@.
+--
+-- 'endpointId', 'appInstanceUserEndpointSummary_endpointId' - The unique identifier of the @AppInstanceUserEndpoint@.
+--
+-- 'endpointState', 'appInstanceUserEndpointSummary_endpointState' - A read-only field that represent the state of an
+-- @AppInstanceUserEndpoint@.
+--
+-- 'name', 'appInstanceUserEndpointSummary_name' - The name of the @AppInstanceUserEndpoint@.
+--
+-- 'type'', 'appInstanceUserEndpointSummary_type' - The type of the @AppInstanceUserEndpoint@.
+newAppInstanceUserEndpointSummary ::
+  AppInstanceUserEndpointSummary
+newAppInstanceUserEndpointSummary =
+  AppInstanceUserEndpointSummary'
+    { allowMessages =
+        Prelude.Nothing,
+      appInstanceUserArn = Prelude.Nothing,
+      endpointId = Prelude.Nothing,
+      endpointState = Prelude.Nothing,
+      name = Prelude.Nothing,
+      type' = Prelude.Nothing
+    }
+
+-- | BBoolean that controls whether the @AppInstanceUserEndpoint@ is opted in
+-- to receive messages. @ALL@ indicates the endpoint will receive all
+-- messages. @NONE@ indicates the endpoint will receive no messages.
+appInstanceUserEndpointSummary_allowMessages :: Lens.Lens' AppInstanceUserEndpointSummary (Prelude.Maybe AllowMessages)
+appInstanceUserEndpointSummary_allowMessages = Lens.lens (\AppInstanceUserEndpointSummary' {allowMessages} -> allowMessages) (\s@AppInstanceUserEndpointSummary' {} a -> s {allowMessages = a} :: AppInstanceUserEndpointSummary)
+
+-- | The ARN of the @AppInstanceUser@.
+appInstanceUserEndpointSummary_appInstanceUserArn :: Lens.Lens' AppInstanceUserEndpointSummary (Prelude.Maybe Prelude.Text)
+appInstanceUserEndpointSummary_appInstanceUserArn = Lens.lens (\AppInstanceUserEndpointSummary' {appInstanceUserArn} -> appInstanceUserArn) (\s@AppInstanceUserEndpointSummary' {} a -> s {appInstanceUserArn = a} :: AppInstanceUserEndpointSummary) Prelude.. Lens.mapping Data._Sensitive
+
+-- | The unique identifier of the @AppInstanceUserEndpoint@.
+appInstanceUserEndpointSummary_endpointId :: Lens.Lens' AppInstanceUserEndpointSummary (Prelude.Maybe Prelude.Text)
+appInstanceUserEndpointSummary_endpointId = Lens.lens (\AppInstanceUserEndpointSummary' {endpointId} -> endpointId) (\s@AppInstanceUserEndpointSummary' {} a -> s {endpointId = a} :: AppInstanceUserEndpointSummary) Prelude.. Lens.mapping Data._Sensitive
+
+-- | A read-only field that represent the state of an
+-- @AppInstanceUserEndpoint@.
+appInstanceUserEndpointSummary_endpointState :: Lens.Lens' AppInstanceUserEndpointSummary (Prelude.Maybe EndpointState)
+appInstanceUserEndpointSummary_endpointState = Lens.lens (\AppInstanceUserEndpointSummary' {endpointState} -> endpointState) (\s@AppInstanceUserEndpointSummary' {} a -> s {endpointState = a} :: AppInstanceUserEndpointSummary)
+
+-- | The name of the @AppInstanceUserEndpoint@.
+appInstanceUserEndpointSummary_name :: Lens.Lens' AppInstanceUserEndpointSummary (Prelude.Maybe Prelude.Text)
+appInstanceUserEndpointSummary_name = Lens.lens (\AppInstanceUserEndpointSummary' {name} -> name) (\s@AppInstanceUserEndpointSummary' {} a -> s {name = a} :: AppInstanceUserEndpointSummary) Prelude.. Lens.mapping Data._Sensitive
+
+-- | The type of the @AppInstanceUserEndpoint@.
+appInstanceUserEndpointSummary_type :: Lens.Lens' AppInstanceUserEndpointSummary (Prelude.Maybe AppInstanceUserEndpointType)
+appInstanceUserEndpointSummary_type = Lens.lens (\AppInstanceUserEndpointSummary' {type'} -> type') (\s@AppInstanceUserEndpointSummary' {} a -> s {type' = a} :: AppInstanceUserEndpointSummary)
+
+instance Data.FromJSON AppInstanceUserEndpointSummary where
+  parseJSON =
+    Data.withObject
+      "AppInstanceUserEndpointSummary"
+      ( \x ->
+          AppInstanceUserEndpointSummary'
+            Prelude.<$> (x Data..:? "AllowMessages")
+            Prelude.<*> (x Data..:? "AppInstanceUserArn")
+            Prelude.<*> (x Data..:? "EndpointId")
+            Prelude.<*> (x Data..:? "EndpointState")
+            Prelude.<*> (x Data..:? "Name")
+            Prelude.<*> (x Data..:? "Type")
+      )
+
+instance
+  Prelude.Hashable
+    AppInstanceUserEndpointSummary
+  where
+  hashWithSalt
+    _salt
+    AppInstanceUserEndpointSummary' {..} =
+      _salt
+        `Prelude.hashWithSalt` allowMessages
+        `Prelude.hashWithSalt` appInstanceUserArn
+        `Prelude.hashWithSalt` endpointId
+        `Prelude.hashWithSalt` endpointState
+        `Prelude.hashWithSalt` name
+        `Prelude.hashWithSalt` type'
+
+instance
+  Prelude.NFData
+    AppInstanceUserEndpointSummary
+  where
+  rnf AppInstanceUserEndpointSummary' {..} =
+    Prelude.rnf allowMessages
+      `Prelude.seq` Prelude.rnf appInstanceUserArn
+      `Prelude.seq` Prelude.rnf endpointId
+      `Prelude.seq` Prelude.rnf endpointState
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf type'
diff --git a/gen/Amazonka/ChimeSDKIdentity/Types/AppInstanceUserEndpointType.hs b/gen/Amazonka/ChimeSDKIdentity/Types/AppInstanceUserEndpointType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ChimeSDKIdentity/Types/AppInstanceUserEndpointType.hs
@@ -0,0 +1,76 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ChimeSDKIdentity.Types.AppInstanceUserEndpointType
+-- 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.ChimeSDKIdentity.Types.AppInstanceUserEndpointType
+  ( AppInstanceUserEndpointType
+      ( ..,
+        AppInstanceUserEndpointType_APNS,
+        AppInstanceUserEndpointType_APNS_SANDBOX,
+        AppInstanceUserEndpointType_GCM
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype AppInstanceUserEndpointType = AppInstanceUserEndpointType'
+  { fromAppInstanceUserEndpointType ::
+      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 AppInstanceUserEndpointType_APNS :: AppInstanceUserEndpointType
+pattern AppInstanceUserEndpointType_APNS = AppInstanceUserEndpointType' "APNS"
+
+pattern AppInstanceUserEndpointType_APNS_SANDBOX :: AppInstanceUserEndpointType
+pattern AppInstanceUserEndpointType_APNS_SANDBOX = AppInstanceUserEndpointType' "APNS_SANDBOX"
+
+pattern AppInstanceUserEndpointType_GCM :: AppInstanceUserEndpointType
+pattern AppInstanceUserEndpointType_GCM = AppInstanceUserEndpointType' "GCM"
+
+{-# COMPLETE
+  AppInstanceUserEndpointType_APNS,
+  AppInstanceUserEndpointType_APNS_SANDBOX,
+  AppInstanceUserEndpointType_GCM,
+  AppInstanceUserEndpointType'
+  #-}
diff --git a/gen/Amazonka/ChimeSDKIdentity/Types/AppInstanceUserSummary.hs b/gen/Amazonka/ChimeSDKIdentity/Types/AppInstanceUserSummary.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ChimeSDKIdentity/Types/AppInstanceUserSummary.hs
@@ -0,0 +1,97 @@
+{-# 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.ChimeSDKIdentity.Types.AppInstanceUserSummary
+-- 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.ChimeSDKIdentity.Types.AppInstanceUserSummary 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 the details of an @AppInstanceUser@.
+--
+-- /See:/ 'newAppInstanceUserSummary' smart constructor.
+data AppInstanceUserSummary = AppInstanceUserSummary'
+  { -- | The ARN of the @AppInstanceUser@.
+    appInstanceUserArn :: Prelude.Maybe Prelude.Text,
+    -- | The metadata of the @AppInstanceUser@.
+    metadata :: Prelude.Maybe (Data.Sensitive Prelude.Text),
+    -- | The name of an @AppInstanceUser@.
+    name :: Prelude.Maybe (Data.Sensitive Prelude.Text)
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AppInstanceUserSummary' 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:
+--
+-- 'appInstanceUserArn', 'appInstanceUserSummary_appInstanceUserArn' - The ARN of the @AppInstanceUser@.
+--
+-- 'metadata', 'appInstanceUserSummary_metadata' - The metadata of the @AppInstanceUser@.
+--
+-- 'name', 'appInstanceUserSummary_name' - The name of an @AppInstanceUser@.
+newAppInstanceUserSummary ::
+  AppInstanceUserSummary
+newAppInstanceUserSummary =
+  AppInstanceUserSummary'
+    { appInstanceUserArn =
+        Prelude.Nothing,
+      metadata = Prelude.Nothing,
+      name = Prelude.Nothing
+    }
+
+-- | The ARN of the @AppInstanceUser@.
+appInstanceUserSummary_appInstanceUserArn :: Lens.Lens' AppInstanceUserSummary (Prelude.Maybe Prelude.Text)
+appInstanceUserSummary_appInstanceUserArn = Lens.lens (\AppInstanceUserSummary' {appInstanceUserArn} -> appInstanceUserArn) (\s@AppInstanceUserSummary' {} a -> s {appInstanceUserArn = a} :: AppInstanceUserSummary)
+
+-- | The metadata of the @AppInstanceUser@.
+appInstanceUserSummary_metadata :: Lens.Lens' AppInstanceUserSummary (Prelude.Maybe Prelude.Text)
+appInstanceUserSummary_metadata = Lens.lens (\AppInstanceUserSummary' {metadata} -> metadata) (\s@AppInstanceUserSummary' {} a -> s {metadata = a} :: AppInstanceUserSummary) Prelude.. Lens.mapping Data._Sensitive
+
+-- | The name of an @AppInstanceUser@.
+appInstanceUserSummary_name :: Lens.Lens' AppInstanceUserSummary (Prelude.Maybe Prelude.Text)
+appInstanceUserSummary_name = Lens.lens (\AppInstanceUserSummary' {name} -> name) (\s@AppInstanceUserSummary' {} a -> s {name = a} :: AppInstanceUserSummary) Prelude.. Lens.mapping Data._Sensitive
+
+instance Data.FromJSON AppInstanceUserSummary where
+  parseJSON =
+    Data.withObject
+      "AppInstanceUserSummary"
+      ( \x ->
+          AppInstanceUserSummary'
+            Prelude.<$> (x Data..:? "AppInstanceUserArn")
+            Prelude.<*> (x Data..:? "Metadata")
+            Prelude.<*> (x Data..:? "Name")
+      )
+
+instance Prelude.Hashable AppInstanceUserSummary where
+  hashWithSalt _salt AppInstanceUserSummary' {..} =
+    _salt
+      `Prelude.hashWithSalt` appInstanceUserArn
+      `Prelude.hashWithSalt` metadata
+      `Prelude.hashWithSalt` name
+
+instance Prelude.NFData AppInstanceUserSummary where
+  rnf AppInstanceUserSummary' {..} =
+    Prelude.rnf appInstanceUserArn
+      `Prelude.seq` Prelude.rnf metadata
+      `Prelude.seq` Prelude.rnf name
diff --git a/gen/Amazonka/ChimeSDKIdentity/Types/ChannelRetentionSettings.hs b/gen/Amazonka/ChimeSDKIdentity/Types/ChannelRetentionSettings.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ChimeSDKIdentity/Types/ChannelRetentionSettings.hs
@@ -0,0 +1,81 @@
+{-# 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.ChimeSDKIdentity.Types.ChannelRetentionSettings
+-- 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.ChimeSDKIdentity.Types.ChannelRetentionSettings 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 of the retention settings for a channel.
+--
+-- /See:/ 'newChannelRetentionSettings' smart constructor.
+data ChannelRetentionSettings = ChannelRetentionSettings'
+  { -- | The time in days to retain the messages in a channel.
+    retentionDays :: Prelude.Maybe Prelude.Natural
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ChannelRetentionSettings' 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:
+--
+-- 'retentionDays', 'channelRetentionSettings_retentionDays' - The time in days to retain the messages in a channel.
+newChannelRetentionSettings ::
+  ChannelRetentionSettings
+newChannelRetentionSettings =
+  ChannelRetentionSettings'
+    { retentionDays =
+        Prelude.Nothing
+    }
+
+-- | The time in days to retain the messages in a channel.
+channelRetentionSettings_retentionDays :: Lens.Lens' ChannelRetentionSettings (Prelude.Maybe Prelude.Natural)
+channelRetentionSettings_retentionDays = Lens.lens (\ChannelRetentionSettings' {retentionDays} -> retentionDays) (\s@ChannelRetentionSettings' {} a -> s {retentionDays = a} :: ChannelRetentionSettings)
+
+instance Data.FromJSON ChannelRetentionSettings where
+  parseJSON =
+    Data.withObject
+      "ChannelRetentionSettings"
+      ( \x ->
+          ChannelRetentionSettings'
+            Prelude.<$> (x Data..:? "RetentionDays")
+      )
+
+instance Prelude.Hashable ChannelRetentionSettings where
+  hashWithSalt _salt ChannelRetentionSettings' {..} =
+    _salt `Prelude.hashWithSalt` retentionDays
+
+instance Prelude.NFData ChannelRetentionSettings where
+  rnf ChannelRetentionSettings' {..} =
+    Prelude.rnf retentionDays
+
+instance Data.ToJSON ChannelRetentionSettings where
+  toJSON ChannelRetentionSettings' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("RetentionDays" Data..=)
+              Prelude.<$> retentionDays
+          ]
+      )
diff --git a/gen/Amazonka/ChimeSDKIdentity/Types/EndpointAttributes.hs b/gen/Amazonka/ChimeSDKIdentity/Types/EndpointAttributes.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ChimeSDKIdentity/Types/EndpointAttributes.hs
@@ -0,0 +1,97 @@
+{-# 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.ChimeSDKIdentity.Types.EndpointAttributes
+-- 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.ChimeSDKIdentity.Types.EndpointAttributes 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 attributes of an @Endpoint@.
+--
+-- /See:/ 'newEndpointAttributes' smart constructor.
+data EndpointAttributes = EndpointAttributes'
+  { -- | The VOIP device token for the APNS and APNS_SANDBOX endpoint types.
+    voipDeviceToken :: Prelude.Maybe (Data.Sensitive Prelude.Text),
+    -- | The device token for the GCM, APNS, and APNS_SANDBOX endpoint types.
+    deviceToken :: Data.Sensitive Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'EndpointAttributes' 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:
+--
+-- 'voipDeviceToken', 'endpointAttributes_voipDeviceToken' - The VOIP device token for the APNS and APNS_SANDBOX endpoint types.
+--
+-- 'deviceToken', 'endpointAttributes_deviceToken' - The device token for the GCM, APNS, and APNS_SANDBOX endpoint types.
+newEndpointAttributes ::
+  -- | 'deviceToken'
+  Prelude.Text ->
+  EndpointAttributes
+newEndpointAttributes pDeviceToken_ =
+  EndpointAttributes'
+    { voipDeviceToken =
+        Prelude.Nothing,
+      deviceToken = Data._Sensitive Lens.# pDeviceToken_
+    }
+
+-- | The VOIP device token for the APNS and APNS_SANDBOX endpoint types.
+endpointAttributes_voipDeviceToken :: Lens.Lens' EndpointAttributes (Prelude.Maybe Prelude.Text)
+endpointAttributes_voipDeviceToken = Lens.lens (\EndpointAttributes' {voipDeviceToken} -> voipDeviceToken) (\s@EndpointAttributes' {} a -> s {voipDeviceToken = a} :: EndpointAttributes) Prelude.. Lens.mapping Data._Sensitive
+
+-- | The device token for the GCM, APNS, and APNS_SANDBOX endpoint types.
+endpointAttributes_deviceToken :: Lens.Lens' EndpointAttributes Prelude.Text
+endpointAttributes_deviceToken = Lens.lens (\EndpointAttributes' {deviceToken} -> deviceToken) (\s@EndpointAttributes' {} a -> s {deviceToken = a} :: EndpointAttributes) Prelude.. Data._Sensitive
+
+instance Data.FromJSON EndpointAttributes where
+  parseJSON =
+    Data.withObject
+      "EndpointAttributes"
+      ( \x ->
+          EndpointAttributes'
+            Prelude.<$> (x Data..:? "VoipDeviceToken")
+            Prelude.<*> (x Data..: "DeviceToken")
+      )
+
+instance Prelude.Hashable EndpointAttributes where
+  hashWithSalt _salt EndpointAttributes' {..} =
+    _salt
+      `Prelude.hashWithSalt` voipDeviceToken
+      `Prelude.hashWithSalt` deviceToken
+
+instance Prelude.NFData EndpointAttributes where
+  rnf EndpointAttributes' {..} =
+    Prelude.rnf voipDeviceToken
+      `Prelude.seq` Prelude.rnf deviceToken
+
+instance Data.ToJSON EndpointAttributes where
+  toJSON EndpointAttributes' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("VoipDeviceToken" Data..=)
+              Prelude.<$> voipDeviceToken,
+            Prelude.Just ("DeviceToken" Data..= deviceToken)
+          ]
+      )
diff --git a/gen/Amazonka/ChimeSDKIdentity/Types/EndpointState.hs b/gen/Amazonka/ChimeSDKIdentity/Types/EndpointState.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ChimeSDKIdentity/Types/EndpointState.hs
@@ -0,0 +1,104 @@
+{-# 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.ChimeSDKIdentity.Types.EndpointState
+-- 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.ChimeSDKIdentity.Types.EndpointState where
+
+import Amazonka.ChimeSDKIdentity.Types.EndpointStatus
+import Amazonka.ChimeSDKIdentity.Types.EndpointStatusReason
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | A read-only field that represents the state of an
+-- @AppInstanceUserEndpoint@. Supported values:
+--
+-- -   @ACTIVE@: The @AppInstanceUserEndpoint@ is active and able to
+--     receive messages. When @ACTIVE@, the @EndpointStatusReason@ remains
+--     empty.
+--
+-- -   @INACTIVE@: The @AppInstanceUserEndpoint@ is inactive and can\'t
+--     receive message. When INACTIVE, the corresponding reason will be
+--     conveyed through EndpointStatusReason.
+--
+-- -   @INVALID_DEVICE_TOKEN@ indicates that an @AppInstanceUserEndpoint@
+--     is @INACTIVE@ due to invalid device token
+--
+-- -   @INVALID_PINPOINT_ARN@ indicates that an @AppInstanceUserEndpoint@
+--     is @INACTIVE@ due to an invalid pinpoint ARN that was input through
+--     the @ResourceArn@ field.
+--
+-- /See:/ 'newEndpointState' smart constructor.
+data EndpointState = EndpointState'
+  { -- | The reason for the @EndpointStatus@.
+    statusReason :: Prelude.Maybe EndpointStatusReason,
+    -- | Enum that indicates the Status of an @AppInstanceUserEndpoint@.
+    status :: EndpointStatus
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'EndpointState' 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:
+--
+-- 'statusReason', 'endpointState_statusReason' - The reason for the @EndpointStatus@.
+--
+-- 'status', 'endpointState_status' - Enum that indicates the Status of an @AppInstanceUserEndpoint@.
+newEndpointState ::
+  -- | 'status'
+  EndpointStatus ->
+  EndpointState
+newEndpointState pStatus_ =
+  EndpointState'
+    { statusReason = Prelude.Nothing,
+      status = pStatus_
+    }
+
+-- | The reason for the @EndpointStatus@.
+endpointState_statusReason :: Lens.Lens' EndpointState (Prelude.Maybe EndpointStatusReason)
+endpointState_statusReason = Lens.lens (\EndpointState' {statusReason} -> statusReason) (\s@EndpointState' {} a -> s {statusReason = a} :: EndpointState)
+
+-- | Enum that indicates the Status of an @AppInstanceUserEndpoint@.
+endpointState_status :: Lens.Lens' EndpointState EndpointStatus
+endpointState_status = Lens.lens (\EndpointState' {status} -> status) (\s@EndpointState' {} a -> s {status = a} :: EndpointState)
+
+instance Data.FromJSON EndpointState where
+  parseJSON =
+    Data.withObject
+      "EndpointState"
+      ( \x ->
+          EndpointState'
+            Prelude.<$> (x Data..:? "StatusReason")
+            Prelude.<*> (x Data..: "Status")
+      )
+
+instance Prelude.Hashable EndpointState where
+  hashWithSalt _salt EndpointState' {..} =
+    _salt
+      `Prelude.hashWithSalt` statusReason
+      `Prelude.hashWithSalt` status
+
+instance Prelude.NFData EndpointState where
+  rnf EndpointState' {..} =
+    Prelude.rnf statusReason
+      `Prelude.seq` Prelude.rnf status
diff --git a/gen/Amazonka/ChimeSDKIdentity/Types/EndpointStatus.hs b/gen/Amazonka/ChimeSDKIdentity/Types/EndpointStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ChimeSDKIdentity/Types/EndpointStatus.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.ChimeSDKIdentity.Types.EndpointStatus
+-- 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.ChimeSDKIdentity.Types.EndpointStatus
+  ( EndpointStatus
+      ( ..,
+        EndpointStatus_ACTIVE,
+        EndpointStatus_INACTIVE
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype EndpointStatus = EndpointStatus'
+  { fromEndpointStatus ::
+      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 EndpointStatus_ACTIVE :: EndpointStatus
+pattern EndpointStatus_ACTIVE = EndpointStatus' "ACTIVE"
+
+pattern EndpointStatus_INACTIVE :: EndpointStatus
+pattern EndpointStatus_INACTIVE = EndpointStatus' "INACTIVE"
+
+{-# COMPLETE
+  EndpointStatus_ACTIVE,
+  EndpointStatus_INACTIVE,
+  EndpointStatus'
+  #-}
diff --git a/gen/Amazonka/ChimeSDKIdentity/Types/EndpointStatusReason.hs b/gen/Amazonka/ChimeSDKIdentity/Types/EndpointStatusReason.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ChimeSDKIdentity/Types/EndpointStatusReason.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.ChimeSDKIdentity.Types.EndpointStatusReason
+-- 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.ChimeSDKIdentity.Types.EndpointStatusReason
+  ( EndpointStatusReason
+      ( ..,
+        EndpointStatusReason_INVALID_DEVICE_TOKEN,
+        EndpointStatusReason_INVALID_PINPOINT_ARN
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype EndpointStatusReason = EndpointStatusReason'
+  { fromEndpointStatusReason ::
+      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 EndpointStatusReason_INVALID_DEVICE_TOKEN :: EndpointStatusReason
+pattern EndpointStatusReason_INVALID_DEVICE_TOKEN = EndpointStatusReason' "INVALID_DEVICE_TOKEN"
+
+pattern EndpointStatusReason_INVALID_PINPOINT_ARN :: EndpointStatusReason
+pattern EndpointStatusReason_INVALID_PINPOINT_ARN = EndpointStatusReason' "INVALID_PINPOINT_ARN"
+
+{-# COMPLETE
+  EndpointStatusReason_INVALID_DEVICE_TOKEN,
+  EndpointStatusReason_INVALID_PINPOINT_ARN,
+  EndpointStatusReason'
+  #-}
diff --git a/gen/Amazonka/ChimeSDKIdentity/Types/Identity.hs b/gen/Amazonka/ChimeSDKIdentity/Types/Identity.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ChimeSDKIdentity/Types/Identity.hs
@@ -0,0 +1,83 @@
+{-# 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.ChimeSDKIdentity.Types.Identity
+-- 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.ChimeSDKIdentity.Types.Identity 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 of a user.
+--
+-- /See:/ 'newIdentity' smart constructor.
+data Identity = Identity'
+  { -- | The ARN in an Identity.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | The name in an Identity.
+    name :: Prelude.Maybe (Data.Sensitive Prelude.Text)
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Identity' 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', 'identity_arn' - The ARN in an Identity.
+--
+-- 'name', 'identity_name' - The name in an Identity.
+newIdentity ::
+  Identity
+newIdentity =
+  Identity'
+    { arn = Prelude.Nothing,
+      name = Prelude.Nothing
+    }
+
+-- | The ARN in an Identity.
+identity_arn :: Lens.Lens' Identity (Prelude.Maybe Prelude.Text)
+identity_arn = Lens.lens (\Identity' {arn} -> arn) (\s@Identity' {} a -> s {arn = a} :: Identity)
+
+-- | The name in an Identity.
+identity_name :: Lens.Lens' Identity (Prelude.Maybe Prelude.Text)
+identity_name = Lens.lens (\Identity' {name} -> name) (\s@Identity' {} a -> s {name = a} :: Identity) Prelude.. Lens.mapping Data._Sensitive
+
+instance Data.FromJSON Identity where
+  parseJSON =
+    Data.withObject
+      "Identity"
+      ( \x ->
+          Identity'
+            Prelude.<$> (x Data..:? "Arn")
+            Prelude.<*> (x Data..:? "Name")
+      )
+
+instance Prelude.Hashable Identity where
+  hashWithSalt _salt Identity' {..} =
+    _salt
+      `Prelude.hashWithSalt` arn
+      `Prelude.hashWithSalt` name
+
+instance Prelude.NFData Identity where
+  rnf Identity' {..} =
+    Prelude.rnf arn `Prelude.seq` Prelude.rnf name
diff --git a/gen/Amazonka/ChimeSDKIdentity/Types/Tag.hs b/gen/Amazonka/ChimeSDKIdentity/Types/Tag.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ChimeSDKIdentity/Types/Tag.hs
@@ -0,0 +1,96 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ChimeSDKIdentity.Types.Tag
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.ChimeSDKIdentity.Types.Tag where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | A tag object containing a key-value pair.
+--
+-- /See:/ 'newTag' smart constructor.
+data Tag = Tag'
+  { -- | The key in a tag.
+    key :: Data.Sensitive Prelude.Text,
+    -- | The value in a tag.
+    value :: Data.Sensitive Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Tag' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'key', 'tag_key' - The key in a tag.
+--
+-- 'value', 'tag_value' - The value in a tag.
+newTag ::
+  -- | 'key'
+  Prelude.Text ->
+  -- | 'value'
+  Prelude.Text ->
+  Tag
+newTag pKey_ pValue_ =
+  Tag'
+    { key = Data._Sensitive Lens.# pKey_,
+      value = Data._Sensitive Lens.# pValue_
+    }
+
+-- | The key in a tag.
+tag_key :: Lens.Lens' Tag Prelude.Text
+tag_key = Lens.lens (\Tag' {key} -> key) (\s@Tag' {} a -> s {key = a} :: Tag) Prelude.. Data._Sensitive
+
+-- | The value in a tag.
+tag_value :: Lens.Lens' Tag Prelude.Text
+tag_value = Lens.lens (\Tag' {value} -> value) (\s@Tag' {} a -> s {value = a} :: Tag) Prelude.. Data._Sensitive
+
+instance Data.FromJSON Tag where
+  parseJSON =
+    Data.withObject
+      "Tag"
+      ( \x ->
+          Tag'
+            Prelude.<$> (x Data..: "Key")
+            Prelude.<*> (x Data..: "Value")
+      )
+
+instance Prelude.Hashable Tag where
+  hashWithSalt _salt Tag' {..} =
+    _salt
+      `Prelude.hashWithSalt` key
+      `Prelude.hashWithSalt` value
+
+instance Prelude.NFData Tag where
+  rnf Tag' {..} =
+    Prelude.rnf key `Prelude.seq` Prelude.rnf value
+
+instance Data.ToJSON Tag where
+  toJSON Tag' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("Key" Data..= key),
+            Prelude.Just ("Value" Data..= value)
+          ]
+      )
diff --git a/gen/Amazonka/ChimeSDKIdentity/UntagResource.hs b/gen/Amazonka/ChimeSDKIdentity/UntagResource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ChimeSDKIdentity/UntagResource.hs
@@ -0,0 +1,143 @@
+{-# 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.ChimeSDKIdentity.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 the specified tags from the specified Amazon Chime SDK identity
+-- resource.
+module Amazonka.ChimeSDKIdentity.UntagResource
+  ( -- * Creating a Request
+    UntagResource (..),
+    newUntagResource,
+
+    -- * Request Lenses
+    untagResource_resourceARN,
+    untagResource_tagKeys,
+
+    -- * Destructuring the Response
+    UntagResourceResponse (..),
+    newUntagResourceResponse,
+  )
+where
+
+import Amazonka.ChimeSDKIdentity.Types
+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
+
+-- | /See:/ 'newUntagResource' smart constructor.
+data UntagResource = UntagResource'
+  { -- | The resource ARN.
+    resourceARN :: Prelude.Text,
+    -- | The tag keys.
+    tagKeys :: Prelude.NonEmpty (Data.Sensitive Prelude.Text)
+  }
+  deriving (Prelude.Eq, 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 resource ARN.
+--
+-- 'tagKeys', 'untagResource_tagKeys' - The tag keys.
+newUntagResource ::
+  -- | 'resourceARN'
+  Prelude.Text ->
+  -- | 'tagKeys'
+  Prelude.NonEmpty Prelude.Text ->
+  UntagResource
+newUntagResource pResourceARN_ pTagKeys_ =
+  UntagResource'
+    { resourceARN = pResourceARN_,
+      tagKeys = Lens.coerced Lens.# pTagKeys_
+    }
+
+-- | The resource ARN.
+untagResource_resourceARN :: Lens.Lens' UntagResource Prelude.Text
+untagResource_resourceARN = Lens.lens (\UntagResource' {resourceARN} -> resourceARN) (\s@UntagResource' {} a -> s {resourceARN = a} :: UntagResource)
+
+-- | The tag keys.
+untagResource_tagKeys :: Lens.Lens' UntagResource (Prelude.NonEmpty Prelude.Text)
+untagResource_tagKeys = Lens.lens (\UntagResource' {tagKeys} -> tagKeys) (\s@UntagResource' {} a -> s {tagKeys = a} :: UntagResource) Prelude.. Lens.coerced
+
+instance Core.AWSRequest UntagResource where
+  type
+    AWSResponse UntagResource =
+      UntagResourceResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveNull UntagResourceResponse'
+
+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.mempty
+
+instance Data.ToJSON UntagResource where
+  toJSON UntagResource' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("ResourceARN" Data..= resourceARN),
+            Prelude.Just ("TagKeys" Data..= tagKeys)
+          ]
+      )
+
+instance Data.ToPath UntagResource where
+  toPath = Prelude.const "/tags"
+
+instance Data.ToQuery UntagResource where
+  toQuery =
+    Prelude.const
+      (Prelude.mconcat ["operation=untag-resource"])
+
+-- | /See:/ 'newUntagResourceResponse' smart constructor.
+data UntagResourceResponse = UntagResourceResponse'
+  {
+  }
+  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.
+newUntagResourceResponse ::
+  UntagResourceResponse
+newUntagResourceResponse = UntagResourceResponse'
+
+instance Prelude.NFData UntagResourceResponse where
+  rnf _ = ()
diff --git a/gen/Amazonka/ChimeSDKIdentity/UpdateAppInstance.hs b/gen/Amazonka/ChimeSDKIdentity/UpdateAppInstance.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ChimeSDKIdentity/UpdateAppInstance.hs
@@ -0,0 +1,196 @@
+{-# 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.ChimeSDKIdentity.UpdateAppInstance
+-- 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 @AppInstance@ metadata.
+module Amazonka.ChimeSDKIdentity.UpdateAppInstance
+  ( -- * Creating a Request
+    UpdateAppInstance (..),
+    newUpdateAppInstance,
+
+    -- * Request Lenses
+    updateAppInstance_appInstanceArn,
+    updateAppInstance_name,
+    updateAppInstance_metadata,
+
+    -- * Destructuring the Response
+    UpdateAppInstanceResponse (..),
+    newUpdateAppInstanceResponse,
+
+    -- * Response Lenses
+    updateAppInstanceResponse_appInstanceArn,
+    updateAppInstanceResponse_httpStatus,
+  )
+where
+
+import Amazonka.ChimeSDKIdentity.Types
+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
+
+-- | /See:/ 'newUpdateAppInstance' smart constructor.
+data UpdateAppInstance = UpdateAppInstance'
+  { -- | The ARN of the @AppInstance@.
+    appInstanceArn :: Prelude.Text,
+    -- | The name that you want to change.
+    name :: Data.Sensitive Prelude.Text,
+    -- | The metadata that you want to change.
+    metadata :: Data.Sensitive Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateAppInstance' 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:
+--
+-- 'appInstanceArn', 'updateAppInstance_appInstanceArn' - The ARN of the @AppInstance@.
+--
+-- 'name', 'updateAppInstance_name' - The name that you want to change.
+--
+-- 'metadata', 'updateAppInstance_metadata' - The metadata that you want to change.
+newUpdateAppInstance ::
+  -- | 'appInstanceArn'
+  Prelude.Text ->
+  -- | 'name'
+  Prelude.Text ->
+  -- | 'metadata'
+  Prelude.Text ->
+  UpdateAppInstance
+newUpdateAppInstance
+  pAppInstanceArn_
+  pName_
+  pMetadata_ =
+    UpdateAppInstance'
+      { appInstanceArn =
+          pAppInstanceArn_,
+        name = Data._Sensitive Lens.# pName_,
+        metadata = Data._Sensitive Lens.# pMetadata_
+      }
+
+-- | The ARN of the @AppInstance@.
+updateAppInstance_appInstanceArn :: Lens.Lens' UpdateAppInstance Prelude.Text
+updateAppInstance_appInstanceArn = Lens.lens (\UpdateAppInstance' {appInstanceArn} -> appInstanceArn) (\s@UpdateAppInstance' {} a -> s {appInstanceArn = a} :: UpdateAppInstance)
+
+-- | The name that you want to change.
+updateAppInstance_name :: Lens.Lens' UpdateAppInstance Prelude.Text
+updateAppInstance_name = Lens.lens (\UpdateAppInstance' {name} -> name) (\s@UpdateAppInstance' {} a -> s {name = a} :: UpdateAppInstance) Prelude.. Data._Sensitive
+
+-- | The metadata that you want to change.
+updateAppInstance_metadata :: Lens.Lens' UpdateAppInstance Prelude.Text
+updateAppInstance_metadata = Lens.lens (\UpdateAppInstance' {metadata} -> metadata) (\s@UpdateAppInstance' {} a -> s {metadata = a} :: UpdateAppInstance) Prelude.. Data._Sensitive
+
+instance Core.AWSRequest UpdateAppInstance where
+  type
+    AWSResponse UpdateAppInstance =
+      UpdateAppInstanceResponse
+  request overrides =
+    Request.putJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          UpdateAppInstanceResponse'
+            Prelude.<$> (x Data..?> "AppInstanceArn")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UpdateAppInstance where
+  hashWithSalt _salt UpdateAppInstance' {..} =
+    _salt
+      `Prelude.hashWithSalt` appInstanceArn
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` metadata
+
+instance Prelude.NFData UpdateAppInstance where
+  rnf UpdateAppInstance' {..} =
+    Prelude.rnf appInstanceArn
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf metadata
+
+instance Data.ToHeaders UpdateAppInstance where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToJSON UpdateAppInstance where
+  toJSON UpdateAppInstance' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("Name" Data..= name),
+            Prelude.Just ("Metadata" Data..= metadata)
+          ]
+      )
+
+instance Data.ToPath UpdateAppInstance where
+  toPath UpdateAppInstance' {..} =
+    Prelude.mconcat
+      ["/app-instances/", Data.toBS appInstanceArn]
+
+instance Data.ToQuery UpdateAppInstance where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateAppInstanceResponse' smart constructor.
+data UpdateAppInstanceResponse = UpdateAppInstanceResponse'
+  { -- | The ARN of the @AppInstance@.
+    appInstanceArn :: 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 'UpdateAppInstanceResponse' 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:
+--
+-- 'appInstanceArn', 'updateAppInstanceResponse_appInstanceArn' - The ARN of the @AppInstance@.
+--
+-- 'httpStatus', 'updateAppInstanceResponse_httpStatus' - The response's http status code.
+newUpdateAppInstanceResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UpdateAppInstanceResponse
+newUpdateAppInstanceResponse pHttpStatus_ =
+  UpdateAppInstanceResponse'
+    { appInstanceArn =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The ARN of the @AppInstance@.
+updateAppInstanceResponse_appInstanceArn :: Lens.Lens' UpdateAppInstanceResponse (Prelude.Maybe Prelude.Text)
+updateAppInstanceResponse_appInstanceArn = Lens.lens (\UpdateAppInstanceResponse' {appInstanceArn} -> appInstanceArn) (\s@UpdateAppInstanceResponse' {} a -> s {appInstanceArn = a} :: UpdateAppInstanceResponse)
+
+-- | The response's http status code.
+updateAppInstanceResponse_httpStatus :: Lens.Lens' UpdateAppInstanceResponse Prelude.Int
+updateAppInstanceResponse_httpStatus = Lens.lens (\UpdateAppInstanceResponse' {httpStatus} -> httpStatus) (\s@UpdateAppInstanceResponse' {} a -> s {httpStatus = a} :: UpdateAppInstanceResponse)
+
+instance Prelude.NFData UpdateAppInstanceResponse where
+  rnf UpdateAppInstanceResponse' {..} =
+    Prelude.rnf appInstanceArn
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ChimeSDKIdentity/UpdateAppInstanceUser.hs b/gen/Amazonka/ChimeSDKIdentity/UpdateAppInstanceUser.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ChimeSDKIdentity/UpdateAppInstanceUser.hs
@@ -0,0 +1,199 @@
+{-# 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.ChimeSDKIdentity.UpdateAppInstanceUser
+-- 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 the details of an @AppInstanceUser@. You can update names and
+-- metadata.
+module Amazonka.ChimeSDKIdentity.UpdateAppInstanceUser
+  ( -- * Creating a Request
+    UpdateAppInstanceUser (..),
+    newUpdateAppInstanceUser,
+
+    -- * Request Lenses
+    updateAppInstanceUser_appInstanceUserArn,
+    updateAppInstanceUser_name,
+    updateAppInstanceUser_metadata,
+
+    -- * Destructuring the Response
+    UpdateAppInstanceUserResponse (..),
+    newUpdateAppInstanceUserResponse,
+
+    -- * Response Lenses
+    updateAppInstanceUserResponse_appInstanceUserArn,
+    updateAppInstanceUserResponse_httpStatus,
+  )
+where
+
+import Amazonka.ChimeSDKIdentity.Types
+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
+
+-- | /See:/ 'newUpdateAppInstanceUser' smart constructor.
+data UpdateAppInstanceUser = UpdateAppInstanceUser'
+  { -- | The ARN of the @AppInstanceUser@.
+    appInstanceUserArn :: Prelude.Text,
+    -- | The name of the @AppInstanceUser@.
+    name :: Data.Sensitive Prelude.Text,
+    -- | The metadata of the @AppInstanceUser@.
+    metadata :: Data.Sensitive Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateAppInstanceUser' 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:
+--
+-- 'appInstanceUserArn', 'updateAppInstanceUser_appInstanceUserArn' - The ARN of the @AppInstanceUser@.
+--
+-- 'name', 'updateAppInstanceUser_name' - The name of the @AppInstanceUser@.
+--
+-- 'metadata', 'updateAppInstanceUser_metadata' - The metadata of the @AppInstanceUser@.
+newUpdateAppInstanceUser ::
+  -- | 'appInstanceUserArn'
+  Prelude.Text ->
+  -- | 'name'
+  Prelude.Text ->
+  -- | 'metadata'
+  Prelude.Text ->
+  UpdateAppInstanceUser
+newUpdateAppInstanceUser
+  pAppInstanceUserArn_
+  pName_
+  pMetadata_ =
+    UpdateAppInstanceUser'
+      { appInstanceUserArn =
+          pAppInstanceUserArn_,
+        name = Data._Sensitive Lens.# pName_,
+        metadata = Data._Sensitive Lens.# pMetadata_
+      }
+
+-- | The ARN of the @AppInstanceUser@.
+updateAppInstanceUser_appInstanceUserArn :: Lens.Lens' UpdateAppInstanceUser Prelude.Text
+updateAppInstanceUser_appInstanceUserArn = Lens.lens (\UpdateAppInstanceUser' {appInstanceUserArn} -> appInstanceUserArn) (\s@UpdateAppInstanceUser' {} a -> s {appInstanceUserArn = a} :: UpdateAppInstanceUser)
+
+-- | The name of the @AppInstanceUser@.
+updateAppInstanceUser_name :: Lens.Lens' UpdateAppInstanceUser Prelude.Text
+updateAppInstanceUser_name = Lens.lens (\UpdateAppInstanceUser' {name} -> name) (\s@UpdateAppInstanceUser' {} a -> s {name = a} :: UpdateAppInstanceUser) Prelude.. Data._Sensitive
+
+-- | The metadata of the @AppInstanceUser@.
+updateAppInstanceUser_metadata :: Lens.Lens' UpdateAppInstanceUser Prelude.Text
+updateAppInstanceUser_metadata = Lens.lens (\UpdateAppInstanceUser' {metadata} -> metadata) (\s@UpdateAppInstanceUser' {} a -> s {metadata = a} :: UpdateAppInstanceUser) Prelude.. Data._Sensitive
+
+instance Core.AWSRequest UpdateAppInstanceUser where
+  type
+    AWSResponse UpdateAppInstanceUser =
+      UpdateAppInstanceUserResponse
+  request overrides =
+    Request.putJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          UpdateAppInstanceUserResponse'
+            Prelude.<$> (x Data..?> "AppInstanceUserArn")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UpdateAppInstanceUser where
+  hashWithSalt _salt UpdateAppInstanceUser' {..} =
+    _salt
+      `Prelude.hashWithSalt` appInstanceUserArn
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` metadata
+
+instance Prelude.NFData UpdateAppInstanceUser where
+  rnf UpdateAppInstanceUser' {..} =
+    Prelude.rnf appInstanceUserArn
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf metadata
+
+instance Data.ToHeaders UpdateAppInstanceUser where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToJSON UpdateAppInstanceUser where
+  toJSON UpdateAppInstanceUser' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("Name" Data..= name),
+            Prelude.Just ("Metadata" Data..= metadata)
+          ]
+      )
+
+instance Data.ToPath UpdateAppInstanceUser where
+  toPath UpdateAppInstanceUser' {..} =
+    Prelude.mconcat
+      [ "/app-instance-users/",
+        Data.toBS appInstanceUserArn
+      ]
+
+instance Data.ToQuery UpdateAppInstanceUser where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateAppInstanceUserResponse' smart constructor.
+data UpdateAppInstanceUserResponse = UpdateAppInstanceUserResponse'
+  { -- | The ARN of the @AppInstanceUser@.
+    appInstanceUserArn :: 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 'UpdateAppInstanceUserResponse' 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:
+--
+-- 'appInstanceUserArn', 'updateAppInstanceUserResponse_appInstanceUserArn' - The ARN of the @AppInstanceUser@.
+--
+-- 'httpStatus', 'updateAppInstanceUserResponse_httpStatus' - The response's http status code.
+newUpdateAppInstanceUserResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UpdateAppInstanceUserResponse
+newUpdateAppInstanceUserResponse pHttpStatus_ =
+  UpdateAppInstanceUserResponse'
+    { appInstanceUserArn =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The ARN of the @AppInstanceUser@.
+updateAppInstanceUserResponse_appInstanceUserArn :: Lens.Lens' UpdateAppInstanceUserResponse (Prelude.Maybe Prelude.Text)
+updateAppInstanceUserResponse_appInstanceUserArn = Lens.lens (\UpdateAppInstanceUserResponse' {appInstanceUserArn} -> appInstanceUserArn) (\s@UpdateAppInstanceUserResponse' {} a -> s {appInstanceUserArn = a} :: UpdateAppInstanceUserResponse)
+
+-- | The response's http status code.
+updateAppInstanceUserResponse_httpStatus :: Lens.Lens' UpdateAppInstanceUserResponse Prelude.Int
+updateAppInstanceUserResponse_httpStatus = Lens.lens (\UpdateAppInstanceUserResponse' {httpStatus} -> httpStatus) (\s@UpdateAppInstanceUserResponse' {} a -> s {httpStatus = a} :: UpdateAppInstanceUserResponse)
+
+instance Prelude.NFData UpdateAppInstanceUserResponse where
+  rnf UpdateAppInstanceUserResponse' {..} =
+    Prelude.rnf appInstanceUserArn
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ChimeSDKIdentity/UpdateAppInstanceUserEndpoint.hs b/gen/Amazonka/ChimeSDKIdentity/UpdateAppInstanceUserEndpoint.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ChimeSDKIdentity/UpdateAppInstanceUserEndpoint.hs
@@ -0,0 +1,240 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ChimeSDKIdentity.UpdateAppInstanceUserEndpoint
+-- 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 the details of an @AppInstanceUserEndpoint@. You can update the
+-- name and @AllowMessage@ values.
+module Amazonka.ChimeSDKIdentity.UpdateAppInstanceUserEndpoint
+  ( -- * Creating a Request
+    UpdateAppInstanceUserEndpoint (..),
+    newUpdateAppInstanceUserEndpoint,
+
+    -- * Request Lenses
+    updateAppInstanceUserEndpoint_allowMessages,
+    updateAppInstanceUserEndpoint_name,
+    updateAppInstanceUserEndpoint_appInstanceUserArn,
+    updateAppInstanceUserEndpoint_endpointId,
+
+    -- * Destructuring the Response
+    UpdateAppInstanceUserEndpointResponse (..),
+    newUpdateAppInstanceUserEndpointResponse,
+
+    -- * Response Lenses
+    updateAppInstanceUserEndpointResponse_appInstanceUserArn,
+    updateAppInstanceUserEndpointResponse_endpointId,
+    updateAppInstanceUserEndpointResponse_httpStatus,
+  )
+where
+
+import Amazonka.ChimeSDKIdentity.Types
+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
+
+-- | /See:/ 'newUpdateAppInstanceUserEndpoint' smart constructor.
+data UpdateAppInstanceUserEndpoint = UpdateAppInstanceUserEndpoint'
+  { -- | Boolean that controls whether the @AppInstanceUserEndpoint@ is opted in
+    -- to receive messages. @ALL@ indicates the endpoint will receive all
+    -- messages. @NONE@ indicates the endpoint will receive no messages.
+    allowMessages :: Prelude.Maybe AllowMessages,
+    -- | The name of the @AppInstanceUserEndpoint@.
+    name :: Prelude.Maybe (Data.Sensitive Prelude.Text),
+    -- | The ARN of the @AppInstanceUser@.
+    appInstanceUserArn :: Data.Sensitive Prelude.Text,
+    -- | The unique identifier of the @AppInstanceUserEndpoint@.
+    endpointId :: Data.Sensitive Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateAppInstanceUserEndpoint' 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:
+--
+-- 'allowMessages', 'updateAppInstanceUserEndpoint_allowMessages' - Boolean that controls whether the @AppInstanceUserEndpoint@ is opted in
+-- to receive messages. @ALL@ indicates the endpoint will receive all
+-- messages. @NONE@ indicates the endpoint will receive no messages.
+--
+-- 'name', 'updateAppInstanceUserEndpoint_name' - The name of the @AppInstanceUserEndpoint@.
+--
+-- 'appInstanceUserArn', 'updateAppInstanceUserEndpoint_appInstanceUserArn' - The ARN of the @AppInstanceUser@.
+--
+-- 'endpointId', 'updateAppInstanceUserEndpoint_endpointId' - The unique identifier of the @AppInstanceUserEndpoint@.
+newUpdateAppInstanceUserEndpoint ::
+  -- | 'appInstanceUserArn'
+  Prelude.Text ->
+  -- | 'endpointId'
+  Prelude.Text ->
+  UpdateAppInstanceUserEndpoint
+newUpdateAppInstanceUserEndpoint
+  pAppInstanceUserArn_
+  pEndpointId_ =
+    UpdateAppInstanceUserEndpoint'
+      { allowMessages =
+          Prelude.Nothing,
+        name = Prelude.Nothing,
+        appInstanceUserArn =
+          Data._Sensitive
+            Lens.# pAppInstanceUserArn_,
+        endpointId =
+          Data._Sensitive Lens.# pEndpointId_
+      }
+
+-- | Boolean that controls whether the @AppInstanceUserEndpoint@ is opted in
+-- to receive messages. @ALL@ indicates the endpoint will receive all
+-- messages. @NONE@ indicates the endpoint will receive no messages.
+updateAppInstanceUserEndpoint_allowMessages :: Lens.Lens' UpdateAppInstanceUserEndpoint (Prelude.Maybe AllowMessages)
+updateAppInstanceUserEndpoint_allowMessages = Lens.lens (\UpdateAppInstanceUserEndpoint' {allowMessages} -> allowMessages) (\s@UpdateAppInstanceUserEndpoint' {} a -> s {allowMessages = a} :: UpdateAppInstanceUserEndpoint)
+
+-- | The name of the @AppInstanceUserEndpoint@.
+updateAppInstanceUserEndpoint_name :: Lens.Lens' UpdateAppInstanceUserEndpoint (Prelude.Maybe Prelude.Text)
+updateAppInstanceUserEndpoint_name = Lens.lens (\UpdateAppInstanceUserEndpoint' {name} -> name) (\s@UpdateAppInstanceUserEndpoint' {} a -> s {name = a} :: UpdateAppInstanceUserEndpoint) Prelude.. Lens.mapping Data._Sensitive
+
+-- | The ARN of the @AppInstanceUser@.
+updateAppInstanceUserEndpoint_appInstanceUserArn :: Lens.Lens' UpdateAppInstanceUserEndpoint Prelude.Text
+updateAppInstanceUserEndpoint_appInstanceUserArn = Lens.lens (\UpdateAppInstanceUserEndpoint' {appInstanceUserArn} -> appInstanceUserArn) (\s@UpdateAppInstanceUserEndpoint' {} a -> s {appInstanceUserArn = a} :: UpdateAppInstanceUserEndpoint) Prelude.. Data._Sensitive
+
+-- | The unique identifier of the @AppInstanceUserEndpoint@.
+updateAppInstanceUserEndpoint_endpointId :: Lens.Lens' UpdateAppInstanceUserEndpoint Prelude.Text
+updateAppInstanceUserEndpoint_endpointId = Lens.lens (\UpdateAppInstanceUserEndpoint' {endpointId} -> endpointId) (\s@UpdateAppInstanceUserEndpoint' {} a -> s {endpointId = a} :: UpdateAppInstanceUserEndpoint) Prelude.. Data._Sensitive
+
+instance
+  Core.AWSRequest
+    UpdateAppInstanceUserEndpoint
+  where
+  type
+    AWSResponse UpdateAppInstanceUserEndpoint =
+      UpdateAppInstanceUserEndpointResponse
+  request overrides =
+    Request.putJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          UpdateAppInstanceUserEndpointResponse'
+            Prelude.<$> (x Data..?> "AppInstanceUserArn")
+            Prelude.<*> (x Data..?> "EndpointId")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    UpdateAppInstanceUserEndpoint
+  where
+  hashWithSalt _salt UpdateAppInstanceUserEndpoint' {..} =
+    _salt
+      `Prelude.hashWithSalt` allowMessages
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` appInstanceUserArn
+      `Prelude.hashWithSalt` endpointId
+
+instance Prelude.NFData UpdateAppInstanceUserEndpoint where
+  rnf UpdateAppInstanceUserEndpoint' {..} =
+    Prelude.rnf allowMessages
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf appInstanceUserArn
+      `Prelude.seq` Prelude.rnf endpointId
+
+instance Data.ToHeaders UpdateAppInstanceUserEndpoint where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToJSON UpdateAppInstanceUserEndpoint where
+  toJSON UpdateAppInstanceUserEndpoint' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("AllowMessages" Data..=) Prelude.<$> allowMessages,
+            ("Name" Data..=) Prelude.<$> name
+          ]
+      )
+
+instance Data.ToPath UpdateAppInstanceUserEndpoint where
+  toPath UpdateAppInstanceUserEndpoint' {..} =
+    Prelude.mconcat
+      [ "/app-instance-users/",
+        Data.toBS appInstanceUserArn,
+        "/endpoints/",
+        Data.toBS endpointId
+      ]
+
+instance Data.ToQuery UpdateAppInstanceUserEndpoint where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateAppInstanceUserEndpointResponse' smart constructor.
+data UpdateAppInstanceUserEndpointResponse = UpdateAppInstanceUserEndpointResponse'
+  { -- | The ARN of the @AppInstanceUser@.
+    appInstanceUserArn :: Prelude.Maybe (Data.Sensitive Prelude.Text),
+    -- | The unique identifier of the @AppInstanceUserEndpoint@.
+    endpointId :: Prelude.Maybe (Data.Sensitive Prelude.Text),
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateAppInstanceUserEndpointResponse' 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:
+--
+-- 'appInstanceUserArn', 'updateAppInstanceUserEndpointResponse_appInstanceUserArn' - The ARN of the @AppInstanceUser@.
+--
+-- 'endpointId', 'updateAppInstanceUserEndpointResponse_endpointId' - The unique identifier of the @AppInstanceUserEndpoint@.
+--
+-- 'httpStatus', 'updateAppInstanceUserEndpointResponse_httpStatus' - The response's http status code.
+newUpdateAppInstanceUserEndpointResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UpdateAppInstanceUserEndpointResponse
+newUpdateAppInstanceUserEndpointResponse pHttpStatus_ =
+  UpdateAppInstanceUserEndpointResponse'
+    { appInstanceUserArn =
+        Prelude.Nothing,
+      endpointId = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The ARN of the @AppInstanceUser@.
+updateAppInstanceUserEndpointResponse_appInstanceUserArn :: Lens.Lens' UpdateAppInstanceUserEndpointResponse (Prelude.Maybe Prelude.Text)
+updateAppInstanceUserEndpointResponse_appInstanceUserArn = Lens.lens (\UpdateAppInstanceUserEndpointResponse' {appInstanceUserArn} -> appInstanceUserArn) (\s@UpdateAppInstanceUserEndpointResponse' {} a -> s {appInstanceUserArn = a} :: UpdateAppInstanceUserEndpointResponse) Prelude.. Lens.mapping Data._Sensitive
+
+-- | The unique identifier of the @AppInstanceUserEndpoint@.
+updateAppInstanceUserEndpointResponse_endpointId :: Lens.Lens' UpdateAppInstanceUserEndpointResponse (Prelude.Maybe Prelude.Text)
+updateAppInstanceUserEndpointResponse_endpointId = Lens.lens (\UpdateAppInstanceUserEndpointResponse' {endpointId} -> endpointId) (\s@UpdateAppInstanceUserEndpointResponse' {} a -> s {endpointId = a} :: UpdateAppInstanceUserEndpointResponse) Prelude.. Lens.mapping Data._Sensitive
+
+-- | The response's http status code.
+updateAppInstanceUserEndpointResponse_httpStatus :: Lens.Lens' UpdateAppInstanceUserEndpointResponse Prelude.Int
+updateAppInstanceUserEndpointResponse_httpStatus = Lens.lens (\UpdateAppInstanceUserEndpointResponse' {httpStatus} -> httpStatus) (\s@UpdateAppInstanceUserEndpointResponse' {} a -> s {httpStatus = a} :: UpdateAppInstanceUserEndpointResponse)
+
+instance
+  Prelude.NFData
+    UpdateAppInstanceUserEndpointResponse
+  where
+  rnf UpdateAppInstanceUserEndpointResponse' {..} =
+    Prelude.rnf appInstanceUserArn
+      `Prelude.seq` Prelude.rnf endpointId
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ChimeSDKIdentity/Waiters.hs b/gen/Amazonka/ChimeSDKIdentity/Waiters.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ChimeSDKIdentity/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.ChimeSDKIdentity.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.ChimeSDKIdentity.Waiters where
+
+import Amazonka.ChimeSDKIdentity.Lens
+import Amazonka.ChimeSDKIdentity.Types
+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
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.ChimeSDKIdentity
+import Test.Amazonka.ChimeSDKIdentity.Internal
+import Test.Tasty
+
+main :: IO ()
+main =
+  defaultMain $
+    testGroup
+      "ChimeSDKIdentity"
+      [ testGroup "tests" tests,
+        testGroup "fixtures" fixtures
+      ]
diff --git a/test/Test/Amazonka/ChimeSDKIdentity.hs b/test/Test/Amazonka/ChimeSDKIdentity.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/ChimeSDKIdentity.hs
@@ -0,0 +1,20 @@
+-- |
+-- Module      : Test.Amazonka.ChimeSDKIdentity
+-- 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.ChimeSDKIdentity
+  ( tests,
+    fixtures,
+  )
+where
+
+import Test.Tasty (TestTree)
+
+tests :: [TestTree]
+tests = []
+
+fixtures :: [TestTree]
+fixtures = []
diff --git a/test/Test/Amazonka/ChimeSDKIdentity/Internal.hs b/test/Test/Amazonka/ChimeSDKIdentity/Internal.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/ChimeSDKIdentity/Internal.hs
@@ -0,0 +1,8 @@
+-- |
+-- Module      : Test.Amazonka.ChimeSDKIdentity.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.ChimeSDKIdentity.Internal where
diff --git a/test/Test/Amazonka/Gen/ChimeSDKIdentity.hs b/test/Test/Amazonka/Gen/ChimeSDKIdentity.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/Gen/ChimeSDKIdentity.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.ChimeSDKIdentity
+-- 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.ChimeSDKIdentity where
+
+import Amazonka.ChimeSDKIdentity
+import qualified Data.Proxy as Proxy
+import Test.Amazonka.ChimeSDKIdentity.Internal
+import Test.Amazonka.Fixture
+import Test.Amazonka.Prelude
+import Test.Tasty
+
+-- Auto-generated: the actual test selection needs to be manually placed into
+-- the top-level so that real test data can be incrementally added.
+--
+-- This commented snippet is what the entire set should look like:
+
+-- fixtures :: TestTree
+-- fixtures =
+--     [ testGroup "request"
+--         [ requestCreateAppInstance $
+--             newCreateAppInstance
+--
+--         , requestCreateAppInstanceAdmin $
+--             newCreateAppInstanceAdmin
+--
+--         , requestCreateAppInstanceUser $
+--             newCreateAppInstanceUser
+--
+--         , requestDeleteAppInstance $
+--             newDeleteAppInstance
+--
+--         , requestDeleteAppInstanceAdmin $
+--             newDeleteAppInstanceAdmin
+--
+--         , requestDeleteAppInstanceUser $
+--             newDeleteAppInstanceUser
+--
+--         , requestDeregisterAppInstanceUserEndpoint $
+--             newDeregisterAppInstanceUserEndpoint
+--
+--         , requestDescribeAppInstance $
+--             newDescribeAppInstance
+--
+--         , requestDescribeAppInstanceAdmin $
+--             newDescribeAppInstanceAdmin
+--
+--         , requestDescribeAppInstanceUser $
+--             newDescribeAppInstanceUser
+--
+--         , requestDescribeAppInstanceUserEndpoint $
+--             newDescribeAppInstanceUserEndpoint
+--
+--         , requestGetAppInstanceRetentionSettings $
+--             newGetAppInstanceRetentionSettings
+--
+--         , requestListAppInstanceAdmins $
+--             newListAppInstanceAdmins
+--
+--         , requestListAppInstanceUserEndpoints $
+--             newListAppInstanceUserEndpoints
+--
+--         , requestListAppInstanceUsers $
+--             newListAppInstanceUsers
+--
+--         , requestListAppInstances $
+--             newListAppInstances
+--
+--         , requestListTagsForResource $
+--             newListTagsForResource
+--
+--         , requestPutAppInstanceRetentionSettings $
+--             newPutAppInstanceRetentionSettings
+--
+--         , requestRegisterAppInstanceUserEndpoint $
+--             newRegisterAppInstanceUserEndpoint
+--
+--         , requestTagResource $
+--             newTagResource
+--
+--         , requestUntagResource $
+--             newUntagResource
+--
+--         , requestUpdateAppInstance $
+--             newUpdateAppInstance
+--
+--         , requestUpdateAppInstanceUser $
+--             newUpdateAppInstanceUser
+--
+--         , requestUpdateAppInstanceUserEndpoint $
+--             newUpdateAppInstanceUserEndpoint
+--
+--           ]
+
+--     , testGroup "response"
+--         [ responseCreateAppInstance $
+--             newCreateAppInstanceResponse
+--
+--         , responseCreateAppInstanceAdmin $
+--             newCreateAppInstanceAdminResponse
+--
+--         , responseCreateAppInstanceUser $
+--             newCreateAppInstanceUserResponse
+--
+--         , responseDeleteAppInstance $
+--             newDeleteAppInstanceResponse
+--
+--         , responseDeleteAppInstanceAdmin $
+--             newDeleteAppInstanceAdminResponse
+--
+--         , responseDeleteAppInstanceUser $
+--             newDeleteAppInstanceUserResponse
+--
+--         , responseDeregisterAppInstanceUserEndpoint $
+--             newDeregisterAppInstanceUserEndpointResponse
+--
+--         , responseDescribeAppInstance $
+--             newDescribeAppInstanceResponse
+--
+--         , responseDescribeAppInstanceAdmin $
+--             newDescribeAppInstanceAdminResponse
+--
+--         , responseDescribeAppInstanceUser $
+--             newDescribeAppInstanceUserResponse
+--
+--         , responseDescribeAppInstanceUserEndpoint $
+--             newDescribeAppInstanceUserEndpointResponse
+--
+--         , responseGetAppInstanceRetentionSettings $
+--             newGetAppInstanceRetentionSettingsResponse
+--
+--         , responseListAppInstanceAdmins $
+--             newListAppInstanceAdminsResponse
+--
+--         , responseListAppInstanceUserEndpoints $
+--             newListAppInstanceUserEndpointsResponse
+--
+--         , responseListAppInstanceUsers $
+--             newListAppInstanceUsersResponse
+--
+--         , responseListAppInstances $
+--             newListAppInstancesResponse
+--
+--         , responseListTagsForResource $
+--             newListTagsForResourceResponse
+--
+--         , responsePutAppInstanceRetentionSettings $
+--             newPutAppInstanceRetentionSettingsResponse
+--
+--         , responseRegisterAppInstanceUserEndpoint $
+--             newRegisterAppInstanceUserEndpointResponse
+--
+--         , responseTagResource $
+--             newTagResourceResponse
+--
+--         , responseUntagResource $
+--             newUntagResourceResponse
+--
+--         , responseUpdateAppInstance $
+--             newUpdateAppInstanceResponse
+--
+--         , responseUpdateAppInstanceUser $
+--             newUpdateAppInstanceUserResponse
+--
+--         , responseUpdateAppInstanceUserEndpoint $
+--             newUpdateAppInstanceUserEndpointResponse
+--
+--           ]
+--     ]
+
+-- Requests
+
+requestCreateAppInstance :: CreateAppInstance -> TestTree
+requestCreateAppInstance =
+  req
+    "CreateAppInstance"
+    "fixture/CreateAppInstance.yaml"
+
+requestCreateAppInstanceAdmin :: CreateAppInstanceAdmin -> TestTree
+requestCreateAppInstanceAdmin =
+  req
+    "CreateAppInstanceAdmin"
+    "fixture/CreateAppInstanceAdmin.yaml"
+
+requestCreateAppInstanceUser :: CreateAppInstanceUser -> TestTree
+requestCreateAppInstanceUser =
+  req
+    "CreateAppInstanceUser"
+    "fixture/CreateAppInstanceUser.yaml"
+
+requestDeleteAppInstance :: DeleteAppInstance -> TestTree
+requestDeleteAppInstance =
+  req
+    "DeleteAppInstance"
+    "fixture/DeleteAppInstance.yaml"
+
+requestDeleteAppInstanceAdmin :: DeleteAppInstanceAdmin -> TestTree
+requestDeleteAppInstanceAdmin =
+  req
+    "DeleteAppInstanceAdmin"
+    "fixture/DeleteAppInstanceAdmin.yaml"
+
+requestDeleteAppInstanceUser :: DeleteAppInstanceUser -> TestTree
+requestDeleteAppInstanceUser =
+  req
+    "DeleteAppInstanceUser"
+    "fixture/DeleteAppInstanceUser.yaml"
+
+requestDeregisterAppInstanceUserEndpoint :: DeregisterAppInstanceUserEndpoint -> TestTree
+requestDeregisterAppInstanceUserEndpoint =
+  req
+    "DeregisterAppInstanceUserEndpoint"
+    "fixture/DeregisterAppInstanceUserEndpoint.yaml"
+
+requestDescribeAppInstance :: DescribeAppInstance -> TestTree
+requestDescribeAppInstance =
+  req
+    "DescribeAppInstance"
+    "fixture/DescribeAppInstance.yaml"
+
+requestDescribeAppInstanceAdmin :: DescribeAppInstanceAdmin -> TestTree
+requestDescribeAppInstanceAdmin =
+  req
+    "DescribeAppInstanceAdmin"
+    "fixture/DescribeAppInstanceAdmin.yaml"
+
+requestDescribeAppInstanceUser :: DescribeAppInstanceUser -> TestTree
+requestDescribeAppInstanceUser =
+  req
+    "DescribeAppInstanceUser"
+    "fixture/DescribeAppInstanceUser.yaml"
+
+requestDescribeAppInstanceUserEndpoint :: DescribeAppInstanceUserEndpoint -> TestTree
+requestDescribeAppInstanceUserEndpoint =
+  req
+    "DescribeAppInstanceUserEndpoint"
+    "fixture/DescribeAppInstanceUserEndpoint.yaml"
+
+requestGetAppInstanceRetentionSettings :: GetAppInstanceRetentionSettings -> TestTree
+requestGetAppInstanceRetentionSettings =
+  req
+    "GetAppInstanceRetentionSettings"
+    "fixture/GetAppInstanceRetentionSettings.yaml"
+
+requestListAppInstanceAdmins :: ListAppInstanceAdmins -> TestTree
+requestListAppInstanceAdmins =
+  req
+    "ListAppInstanceAdmins"
+    "fixture/ListAppInstanceAdmins.yaml"
+
+requestListAppInstanceUserEndpoints :: ListAppInstanceUserEndpoints -> TestTree
+requestListAppInstanceUserEndpoints =
+  req
+    "ListAppInstanceUserEndpoints"
+    "fixture/ListAppInstanceUserEndpoints.yaml"
+
+requestListAppInstanceUsers :: ListAppInstanceUsers -> TestTree
+requestListAppInstanceUsers =
+  req
+    "ListAppInstanceUsers"
+    "fixture/ListAppInstanceUsers.yaml"
+
+requestListAppInstances :: ListAppInstances -> TestTree
+requestListAppInstances =
+  req
+    "ListAppInstances"
+    "fixture/ListAppInstances.yaml"
+
+requestListTagsForResource :: ListTagsForResource -> TestTree
+requestListTagsForResource =
+  req
+    "ListTagsForResource"
+    "fixture/ListTagsForResource.yaml"
+
+requestPutAppInstanceRetentionSettings :: PutAppInstanceRetentionSettings -> TestTree
+requestPutAppInstanceRetentionSettings =
+  req
+    "PutAppInstanceRetentionSettings"
+    "fixture/PutAppInstanceRetentionSettings.yaml"
+
+requestRegisterAppInstanceUserEndpoint :: RegisterAppInstanceUserEndpoint -> TestTree
+requestRegisterAppInstanceUserEndpoint =
+  req
+    "RegisterAppInstanceUserEndpoint"
+    "fixture/RegisterAppInstanceUserEndpoint.yaml"
+
+requestTagResource :: TagResource -> TestTree
+requestTagResource =
+  req
+    "TagResource"
+    "fixture/TagResource.yaml"
+
+requestUntagResource :: UntagResource -> TestTree
+requestUntagResource =
+  req
+    "UntagResource"
+    "fixture/UntagResource.yaml"
+
+requestUpdateAppInstance :: UpdateAppInstance -> TestTree
+requestUpdateAppInstance =
+  req
+    "UpdateAppInstance"
+    "fixture/UpdateAppInstance.yaml"
+
+requestUpdateAppInstanceUser :: UpdateAppInstanceUser -> TestTree
+requestUpdateAppInstanceUser =
+  req
+    "UpdateAppInstanceUser"
+    "fixture/UpdateAppInstanceUser.yaml"
+
+requestUpdateAppInstanceUserEndpoint :: UpdateAppInstanceUserEndpoint -> TestTree
+requestUpdateAppInstanceUserEndpoint =
+  req
+    "UpdateAppInstanceUserEndpoint"
+    "fixture/UpdateAppInstanceUserEndpoint.yaml"
+
+-- Responses
+
+responseCreateAppInstance :: CreateAppInstanceResponse -> TestTree
+responseCreateAppInstance =
+  res
+    "CreateAppInstanceResponse"
+    "fixture/CreateAppInstanceResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateAppInstance)
+
+responseCreateAppInstanceAdmin :: CreateAppInstanceAdminResponse -> TestTree
+responseCreateAppInstanceAdmin =
+  res
+    "CreateAppInstanceAdminResponse"
+    "fixture/CreateAppInstanceAdminResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateAppInstanceAdmin)
+
+responseCreateAppInstanceUser :: CreateAppInstanceUserResponse -> TestTree
+responseCreateAppInstanceUser =
+  res
+    "CreateAppInstanceUserResponse"
+    "fixture/CreateAppInstanceUserResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateAppInstanceUser)
+
+responseDeleteAppInstance :: DeleteAppInstanceResponse -> TestTree
+responseDeleteAppInstance =
+  res
+    "DeleteAppInstanceResponse"
+    "fixture/DeleteAppInstanceResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteAppInstance)
+
+responseDeleteAppInstanceAdmin :: DeleteAppInstanceAdminResponse -> TestTree
+responseDeleteAppInstanceAdmin =
+  res
+    "DeleteAppInstanceAdminResponse"
+    "fixture/DeleteAppInstanceAdminResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteAppInstanceAdmin)
+
+responseDeleteAppInstanceUser :: DeleteAppInstanceUserResponse -> TestTree
+responseDeleteAppInstanceUser =
+  res
+    "DeleteAppInstanceUserResponse"
+    "fixture/DeleteAppInstanceUserResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteAppInstanceUser)
+
+responseDeregisterAppInstanceUserEndpoint :: DeregisterAppInstanceUserEndpointResponse -> TestTree
+responseDeregisterAppInstanceUserEndpoint =
+  res
+    "DeregisterAppInstanceUserEndpointResponse"
+    "fixture/DeregisterAppInstanceUserEndpointResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeregisterAppInstanceUserEndpoint)
+
+responseDescribeAppInstance :: DescribeAppInstanceResponse -> TestTree
+responseDescribeAppInstance =
+  res
+    "DescribeAppInstanceResponse"
+    "fixture/DescribeAppInstanceResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeAppInstance)
+
+responseDescribeAppInstanceAdmin :: DescribeAppInstanceAdminResponse -> TestTree
+responseDescribeAppInstanceAdmin =
+  res
+    "DescribeAppInstanceAdminResponse"
+    "fixture/DescribeAppInstanceAdminResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeAppInstanceAdmin)
+
+responseDescribeAppInstanceUser :: DescribeAppInstanceUserResponse -> TestTree
+responseDescribeAppInstanceUser =
+  res
+    "DescribeAppInstanceUserResponse"
+    "fixture/DescribeAppInstanceUserResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeAppInstanceUser)
+
+responseDescribeAppInstanceUserEndpoint :: DescribeAppInstanceUserEndpointResponse -> TestTree
+responseDescribeAppInstanceUserEndpoint =
+  res
+    "DescribeAppInstanceUserEndpointResponse"
+    "fixture/DescribeAppInstanceUserEndpointResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeAppInstanceUserEndpoint)
+
+responseGetAppInstanceRetentionSettings :: GetAppInstanceRetentionSettingsResponse -> TestTree
+responseGetAppInstanceRetentionSettings =
+  res
+    "GetAppInstanceRetentionSettingsResponse"
+    "fixture/GetAppInstanceRetentionSettingsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetAppInstanceRetentionSettings)
+
+responseListAppInstanceAdmins :: ListAppInstanceAdminsResponse -> TestTree
+responseListAppInstanceAdmins =
+  res
+    "ListAppInstanceAdminsResponse"
+    "fixture/ListAppInstanceAdminsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListAppInstanceAdmins)
+
+responseListAppInstanceUserEndpoints :: ListAppInstanceUserEndpointsResponse -> TestTree
+responseListAppInstanceUserEndpoints =
+  res
+    "ListAppInstanceUserEndpointsResponse"
+    "fixture/ListAppInstanceUserEndpointsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListAppInstanceUserEndpoints)
+
+responseListAppInstanceUsers :: ListAppInstanceUsersResponse -> TestTree
+responseListAppInstanceUsers =
+  res
+    "ListAppInstanceUsersResponse"
+    "fixture/ListAppInstanceUsersResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListAppInstanceUsers)
+
+responseListAppInstances :: ListAppInstancesResponse -> TestTree
+responseListAppInstances =
+  res
+    "ListAppInstancesResponse"
+    "fixture/ListAppInstancesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListAppInstances)
+
+responseListTagsForResource :: ListTagsForResourceResponse -> TestTree
+responseListTagsForResource =
+  res
+    "ListTagsForResourceResponse"
+    "fixture/ListTagsForResourceResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListTagsForResource)
+
+responsePutAppInstanceRetentionSettings :: PutAppInstanceRetentionSettingsResponse -> TestTree
+responsePutAppInstanceRetentionSettings =
+  res
+    "PutAppInstanceRetentionSettingsResponse"
+    "fixture/PutAppInstanceRetentionSettingsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy PutAppInstanceRetentionSettings)
+
+responseRegisterAppInstanceUserEndpoint :: RegisterAppInstanceUserEndpointResponse -> TestTree
+responseRegisterAppInstanceUserEndpoint =
+  res
+    "RegisterAppInstanceUserEndpointResponse"
+    "fixture/RegisterAppInstanceUserEndpointResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy RegisterAppInstanceUserEndpoint)
+
+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)
+
+responseUpdateAppInstance :: UpdateAppInstanceResponse -> TestTree
+responseUpdateAppInstance =
+  res
+    "UpdateAppInstanceResponse"
+    "fixture/UpdateAppInstanceResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateAppInstance)
+
+responseUpdateAppInstanceUser :: UpdateAppInstanceUserResponse -> TestTree
+responseUpdateAppInstanceUser =
+  res
+    "UpdateAppInstanceUserResponse"
+    "fixture/UpdateAppInstanceUserResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateAppInstanceUser)
+
+responseUpdateAppInstanceUserEndpoint :: UpdateAppInstanceUserEndpointResponse -> TestTree
+responseUpdateAppInstanceUserEndpoint =
+  res
+    "UpdateAppInstanceUserEndpointResponse"
+    "fixture/UpdateAppInstanceUserEndpointResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateAppInstanceUserEndpoint)
