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 Meetings SDK
+
+* [Version](#version)
+* [Description](#description)
+* [Contribute](#contribute)
+* [Licence](#licence)
+
+
+## Version
+ 
+`2.0` - Derived from API version @2021-07-15@ of the AWS service descriptions, licensed under Apache 2.0.
+
+## Description
+
+Documentation is available via [Hackage](http://hackage.haskell.org/package/amazonka-chime-sdk-meetings)
+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.ChimeSdkMeetings](http://hackage.haskell.org/package/amazonka-chime-sdk-meetings/docs/Amazonka-ChimeSdkMeetings.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-meetings` 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-meetings.cabal b/amazonka-chime-sdk-meetings.cabal
new file mode 100644
--- /dev/null
+++ b/amazonka-chime-sdk-meetings.cabal
@@ -0,0 +1,126 @@
+cabal-version:      2.2
+name:               amazonka-chime-sdk-meetings
+version:            2.0
+synopsis:           Amazon Chime SDK Meetings 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-07-15@ 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.ChimeSdkMeetings.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.ChimeSdkMeetings" 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-meetings
+
+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.ChimeSdkMeetings
+    Amazonka.ChimeSdkMeetings.BatchCreateAttendee
+    Amazonka.ChimeSdkMeetings.BatchUpdateAttendeeCapabilitiesExcept
+    Amazonka.ChimeSdkMeetings.CreateAttendee
+    Amazonka.ChimeSdkMeetings.CreateMeeting
+    Amazonka.ChimeSdkMeetings.CreateMeetingWithAttendees
+    Amazonka.ChimeSdkMeetings.DeleteAttendee
+    Amazonka.ChimeSdkMeetings.DeleteMeeting
+    Amazonka.ChimeSdkMeetings.GetAttendee
+    Amazonka.ChimeSdkMeetings.GetMeeting
+    Amazonka.ChimeSdkMeetings.Lens
+    Amazonka.ChimeSdkMeetings.ListAttendees
+    Amazonka.ChimeSdkMeetings.ListTagsForResource
+    Amazonka.ChimeSdkMeetings.StartMeetingTranscription
+    Amazonka.ChimeSdkMeetings.StopMeetingTranscription
+    Amazonka.ChimeSdkMeetings.TagResource
+    Amazonka.ChimeSdkMeetings.Types
+    Amazonka.ChimeSdkMeetings.Types.Attendee
+    Amazonka.ChimeSdkMeetings.Types.AttendeeCapabilities
+    Amazonka.ChimeSdkMeetings.Types.AttendeeIdItem
+    Amazonka.ChimeSdkMeetings.Types.AudioFeatures
+    Amazonka.ChimeSdkMeetings.Types.CreateAttendeeError
+    Amazonka.ChimeSdkMeetings.Types.CreateAttendeeRequestItem
+    Amazonka.ChimeSdkMeetings.Types.EngineTranscribeMedicalSettings
+    Amazonka.ChimeSdkMeetings.Types.EngineTranscribeSettings
+    Amazonka.ChimeSdkMeetings.Types.MediaCapabilities
+    Amazonka.ChimeSdkMeetings.Types.MediaPlacement
+    Amazonka.ChimeSdkMeetings.Types.Meeting
+    Amazonka.ChimeSdkMeetings.Types.MeetingFeaturesConfiguration
+    Amazonka.ChimeSdkMeetings.Types.MeetingFeatureStatus
+    Amazonka.ChimeSdkMeetings.Types.NotificationsConfiguration
+    Amazonka.ChimeSdkMeetings.Types.Tag
+    Amazonka.ChimeSdkMeetings.Types.TranscribeContentIdentificationType
+    Amazonka.ChimeSdkMeetings.Types.TranscribeContentRedactionType
+    Amazonka.ChimeSdkMeetings.Types.TranscribeLanguageCode
+    Amazonka.ChimeSdkMeetings.Types.TranscribeMedicalContentIdentificationType
+    Amazonka.ChimeSdkMeetings.Types.TranscribeMedicalLanguageCode
+    Amazonka.ChimeSdkMeetings.Types.TranscribeMedicalRegion
+    Amazonka.ChimeSdkMeetings.Types.TranscribeMedicalSpecialty
+    Amazonka.ChimeSdkMeetings.Types.TranscribeMedicalType
+    Amazonka.ChimeSdkMeetings.Types.TranscribePartialResultsStability
+    Amazonka.ChimeSdkMeetings.Types.TranscribeRegion
+    Amazonka.ChimeSdkMeetings.Types.TranscribeVocabularyFilterMethod
+    Amazonka.ChimeSdkMeetings.Types.TranscriptionConfiguration
+    Amazonka.ChimeSdkMeetings.UntagResource
+    Amazonka.ChimeSdkMeetings.UpdateAttendeeCapabilities
+    Amazonka.ChimeSdkMeetings.Waiters
+
+  build-depends:
+    , amazonka-core  >=2.0  && <2.1
+    , base           >=4.12 && <5
+
+test-suite amazonka-chime-sdk-meetings-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.ChimeSdkMeetings
+    Test.Amazonka.ChimeSdkMeetings.Internal
+    Test.Amazonka.Gen.ChimeSdkMeetings
+
+  build-depends:
+    , amazonka-chime-sdk-meetings
+    , 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/BatchCreateAttendee.yaml b/fixture/BatchCreateAttendee.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/BatchCreateAttendee.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/meetings-chime/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  meetings-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/BatchCreateAttendeeResponse.proto b/fixture/BatchCreateAttendeeResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/BatchCreateAttendeeResponse.proto
diff --git a/fixture/BatchUpdateAttendeeCapabilitiesExcept.yaml b/fixture/BatchUpdateAttendeeCapabilitiesExcept.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/BatchUpdateAttendeeCapabilitiesExcept.yaml
@@ -0,0 +1,10 @@
+---
+method: PUT
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/meetings-chime/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  meetings-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/BatchUpdateAttendeeCapabilitiesExceptResponse.proto b/fixture/BatchUpdateAttendeeCapabilitiesExceptResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/BatchUpdateAttendeeCapabilitiesExceptResponse.proto
diff --git a/fixture/CreateAttendee.yaml b/fixture/CreateAttendee.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateAttendee.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/meetings-chime/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  meetings-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/CreateAttendeeResponse.proto b/fixture/CreateAttendeeResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateAttendeeResponse.proto
diff --git a/fixture/CreateMeeting.yaml b/fixture/CreateMeeting.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateMeeting.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/meetings-chime/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  meetings-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/CreateMeetingResponse.proto b/fixture/CreateMeetingResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateMeetingResponse.proto
diff --git a/fixture/CreateMeetingWithAttendees.yaml b/fixture/CreateMeetingWithAttendees.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateMeetingWithAttendees.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/meetings-chime/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  meetings-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/CreateMeetingWithAttendeesResponse.proto b/fixture/CreateMeetingWithAttendeesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateMeetingWithAttendeesResponse.proto
diff --git a/fixture/DeleteAttendee.yaml b/fixture/DeleteAttendee.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteAttendee.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/meetings-chime/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  meetings-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/DeleteAttendeeResponse.proto b/fixture/DeleteAttendeeResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteAttendeeResponse.proto
diff --git a/fixture/DeleteMeeting.yaml b/fixture/DeleteMeeting.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteMeeting.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/meetings-chime/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  meetings-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/DeleteMeetingResponse.proto b/fixture/DeleteMeetingResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteMeetingResponse.proto
diff --git a/fixture/GetAttendee.yaml b/fixture/GetAttendee.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetAttendee.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/meetings-chime/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  meetings-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/GetAttendeeResponse.proto b/fixture/GetAttendeeResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetAttendeeResponse.proto
diff --git a/fixture/GetMeeting.yaml b/fixture/GetMeeting.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetMeeting.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/meetings-chime/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  meetings-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/GetMeetingResponse.proto b/fixture/GetMeetingResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetMeetingResponse.proto
diff --git a/fixture/ListAttendees.yaml b/fixture/ListAttendees.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListAttendees.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/meetings-chime/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  meetings-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/ListAttendeesResponse.proto b/fixture/ListAttendeesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListAttendeesResponse.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/meetings-chime/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  meetings-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/StartMeetingTranscription.yaml b/fixture/StartMeetingTranscription.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/StartMeetingTranscription.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/meetings-chime/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  meetings-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/StartMeetingTranscriptionResponse.proto b/fixture/StartMeetingTranscriptionResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/StartMeetingTranscriptionResponse.proto
diff --git a/fixture/StopMeetingTranscription.yaml b/fixture/StopMeetingTranscription.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/StopMeetingTranscription.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/meetings-chime/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  meetings-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/StopMeetingTranscriptionResponse.proto b/fixture/StopMeetingTranscriptionResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/StopMeetingTranscriptionResponse.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/meetings-chime/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  meetings-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/meetings-chime/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  meetings-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/UpdateAttendeeCapabilities.yaml b/fixture/UpdateAttendeeCapabilities.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateAttendeeCapabilities.yaml
@@ -0,0 +1,10 @@
+---
+method: PUT
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/meetings-chime/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  meetings-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/UpdateAttendeeCapabilitiesResponse.proto b/fixture/UpdateAttendeeCapabilitiesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateAttendeeCapabilitiesResponse.proto
diff --git a/gen/Amazonka/ChimeSdkMeetings.hs b/gen/Amazonka/ChimeSdkMeetings.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ChimeSdkMeetings.hs
@@ -0,0 +1,308 @@
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- |
+-- Module      : Amazonka.ChimeSdkMeetings
+-- 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-07-15@ of the AWS service descriptions, licensed under Apache 2.0.
+--
+-- The Amazon Chime SDK meetings APIs in this section allow software
+-- developers to create Amazon Chime SDK meetings, set the AWS Regions for
+-- meetings, create and manage users, and send and receive meeting
+-- notifications. For more information about the meeting APIs, see
+-- <https://docs.aws.amazon.com/chime/latest/APIReference/API_Operations_Amazon_Chime_SDK_Meetings.html Amazon Chime SDK meetings>.
+module Amazonka.ChimeSdkMeetings
+  ( -- * Service Configuration
+    defaultService,
+
+    -- * Errors
+    -- $errors
+
+    -- ** BadRequestException
+    _BadRequestException,
+
+    -- ** ConflictException
+    _ConflictException,
+
+    -- ** ForbiddenException
+    _ForbiddenException,
+
+    -- ** LimitExceededException
+    _LimitExceededException,
+
+    -- ** NotFoundException
+    _NotFoundException,
+
+    -- ** ResourceNotFoundException
+    _ResourceNotFoundException,
+
+    -- ** ServiceFailureException
+    _ServiceFailureException,
+
+    -- ** ServiceUnavailableException
+    _ServiceUnavailableException,
+
+    -- ** ThrottlingException
+    _ThrottlingException,
+
+    -- ** TooManyTagsException
+    _TooManyTagsException,
+
+    -- ** UnauthorizedException
+    _UnauthorizedException,
+
+    -- ** UnprocessableEntityException
+    _UnprocessableEntityException,
+
+    -- * Waiters
+    -- $waiters
+
+    -- * Operations
+    -- $operations
+
+    -- ** BatchCreateAttendee
+    BatchCreateAttendee (BatchCreateAttendee'),
+    newBatchCreateAttendee,
+    BatchCreateAttendeeResponse (BatchCreateAttendeeResponse'),
+    newBatchCreateAttendeeResponse,
+
+    -- ** BatchUpdateAttendeeCapabilitiesExcept
+    BatchUpdateAttendeeCapabilitiesExcept (BatchUpdateAttendeeCapabilitiesExcept'),
+    newBatchUpdateAttendeeCapabilitiesExcept,
+    BatchUpdateAttendeeCapabilitiesExceptResponse (BatchUpdateAttendeeCapabilitiesExceptResponse'),
+    newBatchUpdateAttendeeCapabilitiesExceptResponse,
+
+    -- ** CreateAttendee
+    CreateAttendee (CreateAttendee'),
+    newCreateAttendee,
+    CreateAttendeeResponse (CreateAttendeeResponse'),
+    newCreateAttendeeResponse,
+
+    -- ** CreateMeeting
+    CreateMeeting (CreateMeeting'),
+    newCreateMeeting,
+    CreateMeetingResponse (CreateMeetingResponse'),
+    newCreateMeetingResponse,
+
+    -- ** CreateMeetingWithAttendees
+    CreateMeetingWithAttendees (CreateMeetingWithAttendees'),
+    newCreateMeetingWithAttendees,
+    CreateMeetingWithAttendeesResponse (CreateMeetingWithAttendeesResponse'),
+    newCreateMeetingWithAttendeesResponse,
+
+    -- ** DeleteAttendee
+    DeleteAttendee (DeleteAttendee'),
+    newDeleteAttendee,
+    DeleteAttendeeResponse (DeleteAttendeeResponse'),
+    newDeleteAttendeeResponse,
+
+    -- ** DeleteMeeting
+    DeleteMeeting (DeleteMeeting'),
+    newDeleteMeeting,
+    DeleteMeetingResponse (DeleteMeetingResponse'),
+    newDeleteMeetingResponse,
+
+    -- ** GetAttendee
+    GetAttendee (GetAttendee'),
+    newGetAttendee,
+    GetAttendeeResponse (GetAttendeeResponse'),
+    newGetAttendeeResponse,
+
+    -- ** GetMeeting
+    GetMeeting (GetMeeting'),
+    newGetMeeting,
+    GetMeetingResponse (GetMeetingResponse'),
+    newGetMeetingResponse,
+
+    -- ** ListAttendees
+    ListAttendees (ListAttendees'),
+    newListAttendees,
+    ListAttendeesResponse (ListAttendeesResponse'),
+    newListAttendeesResponse,
+
+    -- ** ListTagsForResource
+    ListTagsForResource (ListTagsForResource'),
+    newListTagsForResource,
+    ListTagsForResourceResponse (ListTagsForResourceResponse'),
+    newListTagsForResourceResponse,
+
+    -- ** StartMeetingTranscription
+    StartMeetingTranscription (StartMeetingTranscription'),
+    newStartMeetingTranscription,
+    StartMeetingTranscriptionResponse (StartMeetingTranscriptionResponse'),
+    newStartMeetingTranscriptionResponse,
+
+    -- ** StopMeetingTranscription
+    StopMeetingTranscription (StopMeetingTranscription'),
+    newStopMeetingTranscription,
+    StopMeetingTranscriptionResponse (StopMeetingTranscriptionResponse'),
+    newStopMeetingTranscriptionResponse,
+
+    -- ** TagResource
+    TagResource (TagResource'),
+    newTagResource,
+    TagResourceResponse (TagResourceResponse'),
+    newTagResourceResponse,
+
+    -- ** UntagResource
+    UntagResource (UntagResource'),
+    newUntagResource,
+    UntagResourceResponse (UntagResourceResponse'),
+    newUntagResourceResponse,
+
+    -- ** UpdateAttendeeCapabilities
+    UpdateAttendeeCapabilities (UpdateAttendeeCapabilities'),
+    newUpdateAttendeeCapabilities,
+    UpdateAttendeeCapabilitiesResponse (UpdateAttendeeCapabilitiesResponse'),
+    newUpdateAttendeeCapabilitiesResponse,
+
+    -- * Types
+
+    -- ** MediaCapabilities
+    MediaCapabilities (..),
+
+    -- ** MeetingFeatureStatus
+    MeetingFeatureStatus (..),
+
+    -- ** TranscribeContentIdentificationType
+    TranscribeContentIdentificationType (..),
+
+    -- ** TranscribeContentRedactionType
+    TranscribeContentRedactionType (..),
+
+    -- ** TranscribeLanguageCode
+    TranscribeLanguageCode (..),
+
+    -- ** TranscribeMedicalContentIdentificationType
+    TranscribeMedicalContentIdentificationType (..),
+
+    -- ** TranscribeMedicalLanguageCode
+    TranscribeMedicalLanguageCode (..),
+
+    -- ** TranscribeMedicalRegion
+    TranscribeMedicalRegion (..),
+
+    -- ** TranscribeMedicalSpecialty
+    TranscribeMedicalSpecialty (..),
+
+    -- ** TranscribeMedicalType
+    TranscribeMedicalType (..),
+
+    -- ** TranscribePartialResultsStability
+    TranscribePartialResultsStability (..),
+
+    -- ** TranscribeRegion
+    TranscribeRegion (..),
+
+    -- ** TranscribeVocabularyFilterMethod
+    TranscribeVocabularyFilterMethod (..),
+
+    -- ** Attendee
+    Attendee (Attendee'),
+    newAttendee,
+
+    -- ** AttendeeCapabilities
+    AttendeeCapabilities (AttendeeCapabilities'),
+    newAttendeeCapabilities,
+
+    -- ** AttendeeIdItem
+    AttendeeIdItem (AttendeeIdItem'),
+    newAttendeeIdItem,
+
+    -- ** AudioFeatures
+    AudioFeatures (AudioFeatures'),
+    newAudioFeatures,
+
+    -- ** CreateAttendeeError
+    CreateAttendeeError (CreateAttendeeError'),
+    newCreateAttendeeError,
+
+    -- ** CreateAttendeeRequestItem
+    CreateAttendeeRequestItem (CreateAttendeeRequestItem'),
+    newCreateAttendeeRequestItem,
+
+    -- ** EngineTranscribeMedicalSettings
+    EngineTranscribeMedicalSettings (EngineTranscribeMedicalSettings'),
+    newEngineTranscribeMedicalSettings,
+
+    -- ** EngineTranscribeSettings
+    EngineTranscribeSettings (EngineTranscribeSettings'),
+    newEngineTranscribeSettings,
+
+    -- ** MediaPlacement
+    MediaPlacement (MediaPlacement'),
+    newMediaPlacement,
+
+    -- ** Meeting
+    Meeting (Meeting'),
+    newMeeting,
+
+    -- ** MeetingFeaturesConfiguration
+    MeetingFeaturesConfiguration (MeetingFeaturesConfiguration'),
+    newMeetingFeaturesConfiguration,
+
+    -- ** NotificationsConfiguration
+    NotificationsConfiguration (NotificationsConfiguration'),
+    newNotificationsConfiguration,
+
+    -- ** Tag
+    Tag (Tag'),
+    newTag,
+
+    -- ** TranscriptionConfiguration
+    TranscriptionConfiguration (TranscriptionConfiguration'),
+    newTranscriptionConfiguration,
+  )
+where
+
+import Amazonka.ChimeSdkMeetings.BatchCreateAttendee
+import Amazonka.ChimeSdkMeetings.BatchUpdateAttendeeCapabilitiesExcept
+import Amazonka.ChimeSdkMeetings.CreateAttendee
+import Amazonka.ChimeSdkMeetings.CreateMeeting
+import Amazonka.ChimeSdkMeetings.CreateMeetingWithAttendees
+import Amazonka.ChimeSdkMeetings.DeleteAttendee
+import Amazonka.ChimeSdkMeetings.DeleteMeeting
+import Amazonka.ChimeSdkMeetings.GetAttendee
+import Amazonka.ChimeSdkMeetings.GetMeeting
+import Amazonka.ChimeSdkMeetings.Lens
+import Amazonka.ChimeSdkMeetings.ListAttendees
+import Amazonka.ChimeSdkMeetings.ListTagsForResource
+import Amazonka.ChimeSdkMeetings.StartMeetingTranscription
+import Amazonka.ChimeSdkMeetings.StopMeetingTranscription
+import Amazonka.ChimeSdkMeetings.TagResource
+import Amazonka.ChimeSdkMeetings.Types
+import Amazonka.ChimeSdkMeetings.UntagResource
+import Amazonka.ChimeSdkMeetings.UpdateAttendeeCapabilities
+import Amazonka.ChimeSdkMeetings.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 'ChimeSdkMeetings'.
+
+-- $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/ChimeSdkMeetings/BatchCreateAttendee.hs b/gen/Amazonka/ChimeSdkMeetings/BatchCreateAttendee.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ChimeSdkMeetings/BatchCreateAttendee.hs
@@ -0,0 +1,202 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ChimeSdkMeetings.BatchCreateAttendee
+-- 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 up to 100 attendees for an active Amazon Chime SDK meeting. For
+-- more information about the Amazon Chime SDK, see
+-- <https://docs.aws.amazon.com/chime/latest/dg/meetings-sdk.html Using the Amazon Chime SDK>
+-- in the /Amazon Chime Developer Guide/.
+module Amazonka.ChimeSdkMeetings.BatchCreateAttendee
+  ( -- * Creating a Request
+    BatchCreateAttendee (..),
+    newBatchCreateAttendee,
+
+    -- * Request Lenses
+    batchCreateAttendee_meetingId,
+    batchCreateAttendee_attendees,
+
+    -- * Destructuring the Response
+    BatchCreateAttendeeResponse (..),
+    newBatchCreateAttendeeResponse,
+
+    -- * Response Lenses
+    batchCreateAttendeeResponse_attendees,
+    batchCreateAttendeeResponse_errors,
+    batchCreateAttendeeResponse_httpStatus,
+  )
+where
+
+import Amazonka.ChimeSdkMeetings.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:/ 'newBatchCreateAttendee' smart constructor.
+data BatchCreateAttendee = BatchCreateAttendee'
+  { -- | The Amazon Chime SDK ID of the meeting to which you\'re adding
+    -- attendees.
+    meetingId :: Prelude.Text,
+    -- | The attendee information, including attendees\' IDs and join tokens.
+    attendees :: Prelude.NonEmpty CreateAttendeeRequestItem
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'BatchCreateAttendee' 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:
+--
+-- 'meetingId', 'batchCreateAttendee_meetingId' - The Amazon Chime SDK ID of the meeting to which you\'re adding
+-- attendees.
+--
+-- 'attendees', 'batchCreateAttendee_attendees' - The attendee information, including attendees\' IDs and join tokens.
+newBatchCreateAttendee ::
+  -- | 'meetingId'
+  Prelude.Text ->
+  -- | 'attendees'
+  Prelude.NonEmpty CreateAttendeeRequestItem ->
+  BatchCreateAttendee
+newBatchCreateAttendee pMeetingId_ pAttendees_ =
+  BatchCreateAttendee'
+    { meetingId = pMeetingId_,
+      attendees = Lens.coerced Lens.# pAttendees_
+    }
+
+-- | The Amazon Chime SDK ID of the meeting to which you\'re adding
+-- attendees.
+batchCreateAttendee_meetingId :: Lens.Lens' BatchCreateAttendee Prelude.Text
+batchCreateAttendee_meetingId = Lens.lens (\BatchCreateAttendee' {meetingId} -> meetingId) (\s@BatchCreateAttendee' {} a -> s {meetingId = a} :: BatchCreateAttendee)
+
+-- | The attendee information, including attendees\' IDs and join tokens.
+batchCreateAttendee_attendees :: Lens.Lens' BatchCreateAttendee (Prelude.NonEmpty CreateAttendeeRequestItem)
+batchCreateAttendee_attendees = Lens.lens (\BatchCreateAttendee' {attendees} -> attendees) (\s@BatchCreateAttendee' {} a -> s {attendees = a} :: BatchCreateAttendee) Prelude.. Lens.coerced
+
+instance Core.AWSRequest BatchCreateAttendee where
+  type
+    AWSResponse BatchCreateAttendee =
+      BatchCreateAttendeeResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          BatchCreateAttendeeResponse'
+            Prelude.<$> (x Data..?> "Attendees" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "Errors" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable BatchCreateAttendee where
+  hashWithSalt _salt BatchCreateAttendee' {..} =
+    _salt
+      `Prelude.hashWithSalt` meetingId
+      `Prelude.hashWithSalt` attendees
+
+instance Prelude.NFData BatchCreateAttendee where
+  rnf BatchCreateAttendee' {..} =
+    Prelude.rnf meetingId
+      `Prelude.seq` Prelude.rnf attendees
+
+instance Data.ToHeaders BatchCreateAttendee where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToJSON BatchCreateAttendee where
+  toJSON BatchCreateAttendee' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("Attendees" Data..= attendees)]
+      )
+
+instance Data.ToPath BatchCreateAttendee where
+  toPath BatchCreateAttendee' {..} =
+    Prelude.mconcat
+      ["/meetings/", Data.toBS meetingId, "/attendees"]
+
+instance Data.ToQuery BatchCreateAttendee where
+  toQuery =
+    Prelude.const
+      (Prelude.mconcat ["operation=batch-create"])
+
+-- | /See:/ 'newBatchCreateAttendeeResponse' smart constructor.
+data BatchCreateAttendeeResponse = BatchCreateAttendeeResponse'
+  { -- | The attendee information, including attendees\' IDs and join tokens.
+    attendees :: Prelude.Maybe [Attendee],
+    -- | If the action fails for one or more of the attendees in the request, a
+    -- list of the attendees is returned, along with error codes and error
+    -- messages.
+    errors :: Prelude.Maybe [CreateAttendeeError],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'BatchCreateAttendeeResponse' 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:
+--
+-- 'attendees', 'batchCreateAttendeeResponse_attendees' - The attendee information, including attendees\' IDs and join tokens.
+--
+-- 'errors', 'batchCreateAttendeeResponse_errors' - If the action fails for one or more of the attendees in the request, a
+-- list of the attendees is returned, along with error codes and error
+-- messages.
+--
+-- 'httpStatus', 'batchCreateAttendeeResponse_httpStatus' - The response's http status code.
+newBatchCreateAttendeeResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  BatchCreateAttendeeResponse
+newBatchCreateAttendeeResponse pHttpStatus_ =
+  BatchCreateAttendeeResponse'
+    { attendees =
+        Prelude.Nothing,
+      errors = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The attendee information, including attendees\' IDs and join tokens.
+batchCreateAttendeeResponse_attendees :: Lens.Lens' BatchCreateAttendeeResponse (Prelude.Maybe [Attendee])
+batchCreateAttendeeResponse_attendees = Lens.lens (\BatchCreateAttendeeResponse' {attendees} -> attendees) (\s@BatchCreateAttendeeResponse' {} a -> s {attendees = a} :: BatchCreateAttendeeResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | If the action fails for one or more of the attendees in the request, a
+-- list of the attendees is returned, along with error codes and error
+-- messages.
+batchCreateAttendeeResponse_errors :: Lens.Lens' BatchCreateAttendeeResponse (Prelude.Maybe [CreateAttendeeError])
+batchCreateAttendeeResponse_errors = Lens.lens (\BatchCreateAttendeeResponse' {errors} -> errors) (\s@BatchCreateAttendeeResponse' {} a -> s {errors = a} :: BatchCreateAttendeeResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+batchCreateAttendeeResponse_httpStatus :: Lens.Lens' BatchCreateAttendeeResponse Prelude.Int
+batchCreateAttendeeResponse_httpStatus = Lens.lens (\BatchCreateAttendeeResponse' {httpStatus} -> httpStatus) (\s@BatchCreateAttendeeResponse' {} a -> s {httpStatus = a} :: BatchCreateAttendeeResponse)
+
+instance Prelude.NFData BatchCreateAttendeeResponse where
+  rnf BatchCreateAttendeeResponse' {..} =
+    Prelude.rnf attendees
+      `Prelude.seq` Prelude.rnf errors
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ChimeSdkMeetings/BatchUpdateAttendeeCapabilitiesExcept.hs b/gen/Amazonka/ChimeSdkMeetings/BatchUpdateAttendeeCapabilitiesExcept.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ChimeSdkMeetings/BatchUpdateAttendeeCapabilitiesExcept.hs
@@ -0,0 +1,228 @@
+{-# 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.ChimeSdkMeetings.BatchUpdateAttendeeCapabilitiesExcept
+-- 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 @AttendeeCapabilities@ except the capabilities listed in an
+-- @ExcludedAttendeeIds@ table.
+--
+-- You use the capabilities with a set of values that control what the
+-- capabilities can do, such as @SendReceive@ data. For more information
+-- about those values, see .
+--
+-- When using capabilities, be aware of these corner cases:
+--
+-- -   You can\'t set @content@ capabilities to @SendReceive@ or @Receive@
+--     unless you also set @video@ capabilities to @SendReceive@ or
+--     @Receive@. If you don\'t set the @video@ capability to receive, the
+--     response will contain an HTTP 400 Bad Request status code. However,
+--     you can set your @video@ capability to receive and you set your
+--     @content@ capability to not receive.
+--
+-- -   When you change an @audio@ capability from @None@ or @Receive@ to
+--     @Send@ or @SendReceive@ , and if the attendee left their microphone
+--     unmuted, audio will flow from the attendee to the other meeting
+--     participants.
+--
+-- -   When you change a @video@ or @content@ capability from @None@ or
+--     @Receive@ to @Send@ or @SendReceive@ , and if the attendee turned on
+--     their video or content streams, remote attendess can receive those
+--     streams, but only after media renegotiation between the client and
+--     the Amazon Chime back-end server.
+module Amazonka.ChimeSdkMeetings.BatchUpdateAttendeeCapabilitiesExcept
+  ( -- * Creating a Request
+    BatchUpdateAttendeeCapabilitiesExcept (..),
+    newBatchUpdateAttendeeCapabilitiesExcept,
+
+    -- * Request Lenses
+    batchUpdateAttendeeCapabilitiesExcept_meetingId,
+    batchUpdateAttendeeCapabilitiesExcept_excludedAttendeeIds,
+    batchUpdateAttendeeCapabilitiesExcept_capabilities,
+
+    -- * Destructuring the Response
+    BatchUpdateAttendeeCapabilitiesExceptResponse (..),
+    newBatchUpdateAttendeeCapabilitiesExceptResponse,
+  )
+where
+
+import Amazonka.ChimeSdkMeetings.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:/ 'newBatchUpdateAttendeeCapabilitiesExcept' smart constructor.
+data BatchUpdateAttendeeCapabilitiesExcept = BatchUpdateAttendeeCapabilitiesExcept'
+  { -- | The ID of the meeting associated with the update request.
+    meetingId :: Prelude.Text,
+    -- | The @AttendeeIDs@ that you want to exclude from one or more
+    -- capabilities.
+    excludedAttendeeIds :: Prelude.NonEmpty AttendeeIdItem,
+    -- | The capabilities (@audio@, @video@, or @content@) that you want to
+    -- update.
+    capabilities :: AttendeeCapabilities
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'BatchUpdateAttendeeCapabilitiesExcept' 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:
+--
+-- 'meetingId', 'batchUpdateAttendeeCapabilitiesExcept_meetingId' - The ID of the meeting associated with the update request.
+--
+-- 'excludedAttendeeIds', 'batchUpdateAttendeeCapabilitiesExcept_excludedAttendeeIds' - The @AttendeeIDs@ that you want to exclude from one or more
+-- capabilities.
+--
+-- 'capabilities', 'batchUpdateAttendeeCapabilitiesExcept_capabilities' - The capabilities (@audio@, @video@, or @content@) that you want to
+-- update.
+newBatchUpdateAttendeeCapabilitiesExcept ::
+  -- | 'meetingId'
+  Prelude.Text ->
+  -- | 'excludedAttendeeIds'
+  Prelude.NonEmpty AttendeeIdItem ->
+  -- | 'capabilities'
+  AttendeeCapabilities ->
+  BatchUpdateAttendeeCapabilitiesExcept
+newBatchUpdateAttendeeCapabilitiesExcept
+  pMeetingId_
+  pExcludedAttendeeIds_
+  pCapabilities_ =
+    BatchUpdateAttendeeCapabilitiesExcept'
+      { meetingId =
+          pMeetingId_,
+        excludedAttendeeIds =
+          Lens.coerced
+            Lens.# pExcludedAttendeeIds_,
+        capabilities = pCapabilities_
+      }
+
+-- | The ID of the meeting associated with the update request.
+batchUpdateAttendeeCapabilitiesExcept_meetingId :: Lens.Lens' BatchUpdateAttendeeCapabilitiesExcept Prelude.Text
+batchUpdateAttendeeCapabilitiesExcept_meetingId = Lens.lens (\BatchUpdateAttendeeCapabilitiesExcept' {meetingId} -> meetingId) (\s@BatchUpdateAttendeeCapabilitiesExcept' {} a -> s {meetingId = a} :: BatchUpdateAttendeeCapabilitiesExcept)
+
+-- | The @AttendeeIDs@ that you want to exclude from one or more
+-- capabilities.
+batchUpdateAttendeeCapabilitiesExcept_excludedAttendeeIds :: Lens.Lens' BatchUpdateAttendeeCapabilitiesExcept (Prelude.NonEmpty AttendeeIdItem)
+batchUpdateAttendeeCapabilitiesExcept_excludedAttendeeIds = Lens.lens (\BatchUpdateAttendeeCapabilitiesExcept' {excludedAttendeeIds} -> excludedAttendeeIds) (\s@BatchUpdateAttendeeCapabilitiesExcept' {} a -> s {excludedAttendeeIds = a} :: BatchUpdateAttendeeCapabilitiesExcept) Prelude.. Lens.coerced
+
+-- | The capabilities (@audio@, @video@, or @content@) that you want to
+-- update.
+batchUpdateAttendeeCapabilitiesExcept_capabilities :: Lens.Lens' BatchUpdateAttendeeCapabilitiesExcept AttendeeCapabilities
+batchUpdateAttendeeCapabilitiesExcept_capabilities = Lens.lens (\BatchUpdateAttendeeCapabilitiesExcept' {capabilities} -> capabilities) (\s@BatchUpdateAttendeeCapabilitiesExcept' {} a -> s {capabilities = a} :: BatchUpdateAttendeeCapabilitiesExcept)
+
+instance
+  Core.AWSRequest
+    BatchUpdateAttendeeCapabilitiesExcept
+  where
+  type
+    AWSResponse
+      BatchUpdateAttendeeCapabilitiesExcept =
+      BatchUpdateAttendeeCapabilitiesExceptResponse
+  request overrides =
+    Request.putJSON (overrides defaultService)
+  response =
+    Response.receiveNull
+      BatchUpdateAttendeeCapabilitiesExceptResponse'
+
+instance
+  Prelude.Hashable
+    BatchUpdateAttendeeCapabilitiesExcept
+  where
+  hashWithSalt
+    _salt
+    BatchUpdateAttendeeCapabilitiesExcept' {..} =
+      _salt
+        `Prelude.hashWithSalt` meetingId
+        `Prelude.hashWithSalt` excludedAttendeeIds
+        `Prelude.hashWithSalt` capabilities
+
+instance
+  Prelude.NFData
+    BatchUpdateAttendeeCapabilitiesExcept
+  where
+  rnf BatchUpdateAttendeeCapabilitiesExcept' {..} =
+    Prelude.rnf meetingId
+      `Prelude.seq` Prelude.rnf excludedAttendeeIds
+      `Prelude.seq` Prelude.rnf capabilities
+
+instance
+  Data.ToHeaders
+    BatchUpdateAttendeeCapabilitiesExcept
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance
+  Data.ToJSON
+    BatchUpdateAttendeeCapabilitiesExcept
+  where
+  toJSON BatchUpdateAttendeeCapabilitiesExcept' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ("ExcludedAttendeeIds" Data..= excludedAttendeeIds),
+            Prelude.Just ("Capabilities" Data..= capabilities)
+          ]
+      )
+
+instance
+  Data.ToPath
+    BatchUpdateAttendeeCapabilitiesExcept
+  where
+  toPath BatchUpdateAttendeeCapabilitiesExcept' {..} =
+    Prelude.mconcat
+      [ "/meetings/",
+        Data.toBS meetingId,
+        "/attendees/capabilities"
+      ]
+
+instance
+  Data.ToQuery
+    BatchUpdateAttendeeCapabilitiesExcept
+  where
+  toQuery =
+    Prelude.const
+      (Prelude.mconcat ["operation=batch-update-except"])
+
+-- | /See:/ 'newBatchUpdateAttendeeCapabilitiesExceptResponse' smart constructor.
+data BatchUpdateAttendeeCapabilitiesExceptResponse = BatchUpdateAttendeeCapabilitiesExceptResponse'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'BatchUpdateAttendeeCapabilitiesExceptResponse' 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.
+newBatchUpdateAttendeeCapabilitiesExceptResponse ::
+  BatchUpdateAttendeeCapabilitiesExceptResponse
+newBatchUpdateAttendeeCapabilitiesExceptResponse =
+  BatchUpdateAttendeeCapabilitiesExceptResponse'
+
+instance
+  Prelude.NFData
+    BatchUpdateAttendeeCapabilitiesExceptResponse
+  where
+  rnf _ = ()
diff --git a/gen/Amazonka/ChimeSdkMeetings/CreateAttendee.hs b/gen/Amazonka/ChimeSdkMeetings/CreateAttendee.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ChimeSdkMeetings/CreateAttendee.hs
@@ -0,0 +1,275 @@
+{-# 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.ChimeSdkMeetings.CreateAttendee
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates a new attendee for an active Amazon Chime SDK meeting. For more
+-- information about the Amazon Chime SDK, see
+-- <https://docs.aws.amazon.com/chime/latest/dg/meetings-sdk.html Using the Amazon Chime SDK>
+-- in the /Amazon Chime Developer Guide/.
+module Amazonka.ChimeSdkMeetings.CreateAttendee
+  ( -- * Creating a Request
+    CreateAttendee (..),
+    newCreateAttendee,
+
+    -- * Request Lenses
+    createAttendee_capabilities,
+    createAttendee_meetingId,
+    createAttendee_externalUserId,
+
+    -- * Destructuring the Response
+    CreateAttendeeResponse (..),
+    newCreateAttendeeResponse,
+
+    -- * Response Lenses
+    createAttendeeResponse_attendee,
+    createAttendeeResponse_httpStatus,
+  )
+where
+
+import Amazonka.ChimeSdkMeetings.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:/ 'newCreateAttendee' smart constructor.
+data CreateAttendee = CreateAttendee'
+  { -- | The capabilities (@audio@, @video@, or @content@) that you want to grant
+    -- an attendee. If you don\'t specify capabilities, all users have send and
+    -- receive capabilities on all media channels by default.
+    --
+    -- You use the capabilities with a set of values that control what the
+    -- capabilities can do, such as @SendReceive@ data. For more information
+    -- about those values, see .
+    --
+    -- When using capabilities, be aware of these corner cases:
+    --
+    -- -   You can\'t set @content@ capabilities to @SendReceive@ or @Receive@
+    --     unless you also set @video@ capabilities to @SendReceive@ or
+    --     @Receive@. If you don\'t set the @video@ capability to receive, the
+    --     response will contain an HTTP 400 Bad Request status code. However,
+    --     you can set your @video@ capability to receive and you set your
+    --     @content@ capability to not receive.
+    --
+    -- -   When you change an @audio@ capability from @None@ or @Receive@ to
+    --     @Send@ or @SendReceive@ , and if the attendee left their microphone
+    --     unmuted, audio will flow from the attendee to the other meeting
+    --     participants.
+    --
+    -- -   When you change a @video@ or @content@ capability from @None@ or
+    --     @Receive@ to @Send@ or @SendReceive@ , and if the attendee turned on
+    --     their video or content streams, remote attendess can receive those
+    --     streams, but only after media renegotiation between the client and
+    --     the Amazon Chime back-end server.
+    capabilities :: Prelude.Maybe AttendeeCapabilities,
+    -- | The unique ID of the meeting.
+    meetingId :: Prelude.Text,
+    -- | The Amazon Chime SDK external user ID. An idempotency token. Links the
+    -- attendee to an identity managed by a builder application.
+    externalUserId :: Data.Sensitive Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateAttendee' 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:
+--
+-- 'capabilities', 'createAttendee_capabilities' - The capabilities (@audio@, @video@, or @content@) that you want to grant
+-- an attendee. If you don\'t specify capabilities, all users have send and
+-- receive capabilities on all media channels by default.
+--
+-- You use the capabilities with a set of values that control what the
+-- capabilities can do, such as @SendReceive@ data. For more information
+-- about those values, see .
+--
+-- When using capabilities, be aware of these corner cases:
+--
+-- -   You can\'t set @content@ capabilities to @SendReceive@ or @Receive@
+--     unless you also set @video@ capabilities to @SendReceive@ or
+--     @Receive@. If you don\'t set the @video@ capability to receive, the
+--     response will contain an HTTP 400 Bad Request status code. However,
+--     you can set your @video@ capability to receive and you set your
+--     @content@ capability to not receive.
+--
+-- -   When you change an @audio@ capability from @None@ or @Receive@ to
+--     @Send@ or @SendReceive@ , and if the attendee left their microphone
+--     unmuted, audio will flow from the attendee to the other meeting
+--     participants.
+--
+-- -   When you change a @video@ or @content@ capability from @None@ or
+--     @Receive@ to @Send@ or @SendReceive@ , and if the attendee turned on
+--     their video or content streams, remote attendess can receive those
+--     streams, but only after media renegotiation between the client and
+--     the Amazon Chime back-end server.
+--
+-- 'meetingId', 'createAttendee_meetingId' - The unique ID of the meeting.
+--
+-- 'externalUserId', 'createAttendee_externalUserId' - The Amazon Chime SDK external user ID. An idempotency token. Links the
+-- attendee to an identity managed by a builder application.
+newCreateAttendee ::
+  -- | 'meetingId'
+  Prelude.Text ->
+  -- | 'externalUserId'
+  Prelude.Text ->
+  CreateAttendee
+newCreateAttendee pMeetingId_ pExternalUserId_ =
+  CreateAttendee'
+    { capabilities = Prelude.Nothing,
+      meetingId = pMeetingId_,
+      externalUserId =
+        Data._Sensitive Lens.# pExternalUserId_
+    }
+
+-- | The capabilities (@audio@, @video@, or @content@) that you want to grant
+-- an attendee. If you don\'t specify capabilities, all users have send and
+-- receive capabilities on all media channels by default.
+--
+-- You use the capabilities with a set of values that control what the
+-- capabilities can do, such as @SendReceive@ data. For more information
+-- about those values, see .
+--
+-- When using capabilities, be aware of these corner cases:
+--
+-- -   You can\'t set @content@ capabilities to @SendReceive@ or @Receive@
+--     unless you also set @video@ capabilities to @SendReceive@ or
+--     @Receive@. If you don\'t set the @video@ capability to receive, the
+--     response will contain an HTTP 400 Bad Request status code. However,
+--     you can set your @video@ capability to receive and you set your
+--     @content@ capability to not receive.
+--
+-- -   When you change an @audio@ capability from @None@ or @Receive@ to
+--     @Send@ or @SendReceive@ , and if the attendee left their microphone
+--     unmuted, audio will flow from the attendee to the other meeting
+--     participants.
+--
+-- -   When you change a @video@ or @content@ capability from @None@ or
+--     @Receive@ to @Send@ or @SendReceive@ , and if the attendee turned on
+--     their video or content streams, remote attendess can receive those
+--     streams, but only after media renegotiation between the client and
+--     the Amazon Chime back-end server.
+createAttendee_capabilities :: Lens.Lens' CreateAttendee (Prelude.Maybe AttendeeCapabilities)
+createAttendee_capabilities = Lens.lens (\CreateAttendee' {capabilities} -> capabilities) (\s@CreateAttendee' {} a -> s {capabilities = a} :: CreateAttendee)
+
+-- | The unique ID of the meeting.
+createAttendee_meetingId :: Lens.Lens' CreateAttendee Prelude.Text
+createAttendee_meetingId = Lens.lens (\CreateAttendee' {meetingId} -> meetingId) (\s@CreateAttendee' {} a -> s {meetingId = a} :: CreateAttendee)
+
+-- | The Amazon Chime SDK external user ID. An idempotency token. Links the
+-- attendee to an identity managed by a builder application.
+createAttendee_externalUserId :: Lens.Lens' CreateAttendee Prelude.Text
+createAttendee_externalUserId = Lens.lens (\CreateAttendee' {externalUserId} -> externalUserId) (\s@CreateAttendee' {} a -> s {externalUserId = a} :: CreateAttendee) Prelude.. Data._Sensitive
+
+instance Core.AWSRequest CreateAttendee where
+  type
+    AWSResponse CreateAttendee =
+      CreateAttendeeResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateAttendeeResponse'
+            Prelude.<$> (x Data..?> "Attendee")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateAttendee where
+  hashWithSalt _salt CreateAttendee' {..} =
+    _salt
+      `Prelude.hashWithSalt` capabilities
+      `Prelude.hashWithSalt` meetingId
+      `Prelude.hashWithSalt` externalUserId
+
+instance Prelude.NFData CreateAttendee where
+  rnf CreateAttendee' {..} =
+    Prelude.rnf capabilities
+      `Prelude.seq` Prelude.rnf meetingId
+      `Prelude.seq` Prelude.rnf externalUserId
+
+instance Data.ToHeaders CreateAttendee where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToJSON CreateAttendee where
+  toJSON CreateAttendee' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Capabilities" Data..=) Prelude.<$> capabilities,
+            Prelude.Just
+              ("ExternalUserId" Data..= externalUserId)
+          ]
+      )
+
+instance Data.ToPath CreateAttendee where
+  toPath CreateAttendee' {..} =
+    Prelude.mconcat
+      ["/meetings/", Data.toBS meetingId, "/attendees"]
+
+instance Data.ToQuery CreateAttendee where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateAttendeeResponse' smart constructor.
+data CreateAttendeeResponse = CreateAttendeeResponse'
+  { -- | The attendee information, including attendee ID and join token.
+    attendee :: Prelude.Maybe Attendee,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateAttendeeResponse' 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:
+--
+-- 'attendee', 'createAttendeeResponse_attendee' - The attendee information, including attendee ID and join token.
+--
+-- 'httpStatus', 'createAttendeeResponse_httpStatus' - The response's http status code.
+newCreateAttendeeResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateAttendeeResponse
+newCreateAttendeeResponse pHttpStatus_ =
+  CreateAttendeeResponse'
+    { attendee = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The attendee information, including attendee ID and join token.
+createAttendeeResponse_attendee :: Lens.Lens' CreateAttendeeResponse (Prelude.Maybe Attendee)
+createAttendeeResponse_attendee = Lens.lens (\CreateAttendeeResponse' {attendee} -> attendee) (\s@CreateAttendeeResponse' {} a -> s {attendee = a} :: CreateAttendeeResponse)
+
+-- | The response's http status code.
+createAttendeeResponse_httpStatus :: Lens.Lens' CreateAttendeeResponse Prelude.Int
+createAttendeeResponse_httpStatus = Lens.lens (\CreateAttendeeResponse' {httpStatus} -> httpStatus) (\s@CreateAttendeeResponse' {} a -> s {httpStatus = a} :: CreateAttendeeResponse)
+
+instance Prelude.NFData CreateAttendeeResponse where
+  rnf CreateAttendeeResponse' {..} =
+    Prelude.rnf attendee
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ChimeSdkMeetings/CreateMeeting.hs b/gen/Amazonka/ChimeSdkMeetings/CreateMeeting.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ChimeSdkMeetings/CreateMeeting.hs
@@ -0,0 +1,456 @@
+{-# 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.ChimeSdkMeetings.CreateMeeting
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates a new Amazon Chime SDK meeting in the specified media Region
+-- with no initial attendees. For more information about specifying media
+-- Regions, see
+-- <https://docs.aws.amazon.com/chime/latest/dg/chime-sdk-meetings-regions.html Amazon Chime SDK Media Regions>
+-- in the /Amazon Chime Developer Guide/. For more information about the
+-- Amazon Chime SDK, see
+-- <https://docs.aws.amazon.com/chime/latest/dg/meetings-sdk.html Using the Amazon Chime SDK>
+-- in the /Amazon Chime Developer Guide/.
+module Amazonka.ChimeSdkMeetings.CreateMeeting
+  ( -- * Creating a Request
+    CreateMeeting (..),
+    newCreateMeeting,
+
+    -- * Request Lenses
+    createMeeting_meetingFeatures,
+    createMeeting_meetingHostId,
+    createMeeting_notificationsConfiguration,
+    createMeeting_primaryMeetingId,
+    createMeeting_tags,
+    createMeeting_tenantIds,
+    createMeeting_clientRequestToken,
+    createMeeting_mediaRegion,
+    createMeeting_externalMeetingId,
+
+    -- * Destructuring the Response
+    CreateMeetingResponse (..),
+    newCreateMeetingResponse,
+
+    -- * Response Lenses
+    createMeetingResponse_meeting,
+    createMeetingResponse_httpStatus,
+  )
+where
+
+import Amazonka.ChimeSdkMeetings.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:/ 'newCreateMeeting' smart constructor.
+data CreateMeeting = CreateMeeting'
+  { -- | Lists the audio and video features enabled for a meeting, such as echo
+    -- reduction.
+    meetingFeatures :: Prelude.Maybe MeetingFeaturesConfiguration,
+    -- | Reserved.
+    meetingHostId :: Prelude.Maybe (Data.Sensitive Prelude.Text),
+    -- | The configuration for resource targets to receive notifications when
+    -- meeting and attendee events occur.
+    notificationsConfiguration :: Prelude.Maybe NotificationsConfiguration,
+    -- | When specified, replicates the media from the primary meeting to the new
+    -- meeting.
+    primaryMeetingId :: Prelude.Maybe Prelude.Text,
+    -- | Applies one or more tags to an Amazon Chime SDK meeting. Note the
+    -- following:
+    --
+    -- -   Not all resources have tags. For a list of services with resources
+    --     that support tagging using this operation, see
+    --     <https://docs.aws.amazon.com/resourcegroupstagging/latest/APIReference/supported-services.html Services that support the Resource Groups Tagging API>.
+    --     If the resource doesn\'t yet support this operation, the resource\'s
+    --     service might support tagging using its own API operations. For more
+    --     information, refer to the documentation for that service.
+    --
+    -- -   Each resource can have up to 50 tags. For other limits, see
+    --     <https://docs.aws.amazon.com/general/latest/gr/aws_tagging.html#tag-conventions Tag Naming and Usage Conventions>
+    --     in the /AWS General Reference/.
+    --
+    -- -   You can only tag resources that are located in the specified AWS
+    --     Region for the AWS account.
+    --
+    -- -   To add tags to a resource, you need the necessary permissions for
+    --     the service that the resource belongs to as well as permissions for
+    --     adding tags. For more information, see the documentation for each
+    --     service.
+    --
+    -- Do not store personally identifiable information (PII) or other
+    -- confidential or sensitive information in tags. We use tags to provide
+    -- you with billing and administration services. Tags are not intended to
+    -- be used for private or sensitive data.
+    --
+    -- __Minimum permissions__
+    --
+    -- In addition to the @tag:TagResources @permission required by this
+    -- operation, you must also have the tagging permission defined by the
+    -- service that created the resource. For example, to tag a
+    -- @ChimeSDKMeetings@ instance using the @TagResources@ operation, you must
+    -- have both of the following permissions:
+    --
+    -- @tag:TagResources@
+    --
+    -- @ChimeSDKMeetings:CreateTags@
+    --
+    -- Some services might have specific requirements for tagging some
+    -- resources. For example, to tag an Amazon S3 bucket, you must also have
+    -- the @s3:GetBucketTagging@ permission. If the expected minimum
+    -- permissions don\'t work, check the documentation for that service\'s
+    -- tagging APIs for more information.
+    tags :: Prelude.Maybe [Tag],
+    -- | A consistent and opaque identifier, created and maintained by the
+    -- builder to represent a segment of their users.
+    tenantIds :: Prelude.Maybe (Prelude.NonEmpty Prelude.Text),
+    -- | The unique identifier for the client request. Use a different token for
+    -- different meetings.
+    clientRequestToken :: Data.Sensitive Prelude.Text,
+    -- | The Region in which to create the meeting.
+    --
+    -- Available values: @af-south-1@, @ap-northeast-1@, @ap-northeast-2@,
+    -- @ap-south-1@, @ap-southeast-1@, @ap-southeast-2@, @ca-central-1@,
+    -- @eu-central-1@, @eu-north-1@, @eu-south-1@, @eu-west-1@, @eu-west-2@,
+    -- @eu-west-3@, @sa-east-1@, @us-east-1@, @us-east-2@, @us-west-1@,
+    -- @us-west-2@.
+    --
+    -- Available values in AWS GovCloud (US) Regions: @us-gov-east-1@,
+    -- @us-gov-west-1@.
+    mediaRegion :: Prelude.Text,
+    -- | The external meeting ID.
+    externalMeetingId :: Data.Sensitive Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateMeeting' 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:
+--
+-- 'meetingFeatures', 'createMeeting_meetingFeatures' - Lists the audio and video features enabled for a meeting, such as echo
+-- reduction.
+--
+-- 'meetingHostId', 'createMeeting_meetingHostId' - Reserved.
+--
+-- 'notificationsConfiguration', 'createMeeting_notificationsConfiguration' - The configuration for resource targets to receive notifications when
+-- meeting and attendee events occur.
+--
+-- 'primaryMeetingId', 'createMeeting_primaryMeetingId' - When specified, replicates the media from the primary meeting to the new
+-- meeting.
+--
+-- 'tags', 'createMeeting_tags' - Applies one or more tags to an Amazon Chime SDK meeting. Note the
+-- following:
+--
+-- -   Not all resources have tags. For a list of services with resources
+--     that support tagging using this operation, see
+--     <https://docs.aws.amazon.com/resourcegroupstagging/latest/APIReference/supported-services.html Services that support the Resource Groups Tagging API>.
+--     If the resource doesn\'t yet support this operation, the resource\'s
+--     service might support tagging using its own API operations. For more
+--     information, refer to the documentation for that service.
+--
+-- -   Each resource can have up to 50 tags. For other limits, see
+--     <https://docs.aws.amazon.com/general/latest/gr/aws_tagging.html#tag-conventions Tag Naming and Usage Conventions>
+--     in the /AWS General Reference/.
+--
+-- -   You can only tag resources that are located in the specified AWS
+--     Region for the AWS account.
+--
+-- -   To add tags to a resource, you need the necessary permissions for
+--     the service that the resource belongs to as well as permissions for
+--     adding tags. For more information, see the documentation for each
+--     service.
+--
+-- Do not store personally identifiable information (PII) or other
+-- confidential or sensitive information in tags. We use tags to provide
+-- you with billing and administration services. Tags are not intended to
+-- be used for private or sensitive data.
+--
+-- __Minimum permissions__
+--
+-- In addition to the @tag:TagResources @permission required by this
+-- operation, you must also have the tagging permission defined by the
+-- service that created the resource. For example, to tag a
+-- @ChimeSDKMeetings@ instance using the @TagResources@ operation, you must
+-- have both of the following permissions:
+--
+-- @tag:TagResources@
+--
+-- @ChimeSDKMeetings:CreateTags@
+--
+-- Some services might have specific requirements for tagging some
+-- resources. For example, to tag an Amazon S3 bucket, you must also have
+-- the @s3:GetBucketTagging@ permission. If the expected minimum
+-- permissions don\'t work, check the documentation for that service\'s
+-- tagging APIs for more information.
+--
+-- 'tenantIds', 'createMeeting_tenantIds' - A consistent and opaque identifier, created and maintained by the
+-- builder to represent a segment of their users.
+--
+-- 'clientRequestToken', 'createMeeting_clientRequestToken' - The unique identifier for the client request. Use a different token for
+-- different meetings.
+--
+-- 'mediaRegion', 'createMeeting_mediaRegion' - The Region in which to create the meeting.
+--
+-- Available values: @af-south-1@, @ap-northeast-1@, @ap-northeast-2@,
+-- @ap-south-1@, @ap-southeast-1@, @ap-southeast-2@, @ca-central-1@,
+-- @eu-central-1@, @eu-north-1@, @eu-south-1@, @eu-west-1@, @eu-west-2@,
+-- @eu-west-3@, @sa-east-1@, @us-east-1@, @us-east-2@, @us-west-1@,
+-- @us-west-2@.
+--
+-- Available values in AWS GovCloud (US) Regions: @us-gov-east-1@,
+-- @us-gov-west-1@.
+--
+-- 'externalMeetingId', 'createMeeting_externalMeetingId' - The external meeting ID.
+newCreateMeeting ::
+  -- | 'clientRequestToken'
+  Prelude.Text ->
+  -- | 'mediaRegion'
+  Prelude.Text ->
+  -- | 'externalMeetingId'
+  Prelude.Text ->
+  CreateMeeting
+newCreateMeeting
+  pClientRequestToken_
+  pMediaRegion_
+  pExternalMeetingId_ =
+    CreateMeeting'
+      { meetingFeatures = Prelude.Nothing,
+        meetingHostId = Prelude.Nothing,
+        notificationsConfiguration = Prelude.Nothing,
+        primaryMeetingId = Prelude.Nothing,
+        tags = Prelude.Nothing,
+        tenantIds = Prelude.Nothing,
+        clientRequestToken =
+          Data._Sensitive Lens.# pClientRequestToken_,
+        mediaRegion = pMediaRegion_,
+        externalMeetingId =
+          Data._Sensitive Lens.# pExternalMeetingId_
+      }
+
+-- | Lists the audio and video features enabled for a meeting, such as echo
+-- reduction.
+createMeeting_meetingFeatures :: Lens.Lens' CreateMeeting (Prelude.Maybe MeetingFeaturesConfiguration)
+createMeeting_meetingFeatures = Lens.lens (\CreateMeeting' {meetingFeatures} -> meetingFeatures) (\s@CreateMeeting' {} a -> s {meetingFeatures = a} :: CreateMeeting)
+
+-- | Reserved.
+createMeeting_meetingHostId :: Lens.Lens' CreateMeeting (Prelude.Maybe Prelude.Text)
+createMeeting_meetingHostId = Lens.lens (\CreateMeeting' {meetingHostId} -> meetingHostId) (\s@CreateMeeting' {} a -> s {meetingHostId = a} :: CreateMeeting) Prelude.. Lens.mapping Data._Sensitive
+
+-- | The configuration for resource targets to receive notifications when
+-- meeting and attendee events occur.
+createMeeting_notificationsConfiguration :: Lens.Lens' CreateMeeting (Prelude.Maybe NotificationsConfiguration)
+createMeeting_notificationsConfiguration = Lens.lens (\CreateMeeting' {notificationsConfiguration} -> notificationsConfiguration) (\s@CreateMeeting' {} a -> s {notificationsConfiguration = a} :: CreateMeeting)
+
+-- | When specified, replicates the media from the primary meeting to the new
+-- meeting.
+createMeeting_primaryMeetingId :: Lens.Lens' CreateMeeting (Prelude.Maybe Prelude.Text)
+createMeeting_primaryMeetingId = Lens.lens (\CreateMeeting' {primaryMeetingId} -> primaryMeetingId) (\s@CreateMeeting' {} a -> s {primaryMeetingId = a} :: CreateMeeting)
+
+-- | Applies one or more tags to an Amazon Chime SDK meeting. Note the
+-- following:
+--
+-- -   Not all resources have tags. For a list of services with resources
+--     that support tagging using this operation, see
+--     <https://docs.aws.amazon.com/resourcegroupstagging/latest/APIReference/supported-services.html Services that support the Resource Groups Tagging API>.
+--     If the resource doesn\'t yet support this operation, the resource\'s
+--     service might support tagging using its own API operations. For more
+--     information, refer to the documentation for that service.
+--
+-- -   Each resource can have up to 50 tags. For other limits, see
+--     <https://docs.aws.amazon.com/general/latest/gr/aws_tagging.html#tag-conventions Tag Naming and Usage Conventions>
+--     in the /AWS General Reference/.
+--
+-- -   You can only tag resources that are located in the specified AWS
+--     Region for the AWS account.
+--
+-- -   To add tags to a resource, you need the necessary permissions for
+--     the service that the resource belongs to as well as permissions for
+--     adding tags. For more information, see the documentation for each
+--     service.
+--
+-- Do not store personally identifiable information (PII) or other
+-- confidential or sensitive information in tags. We use tags to provide
+-- you with billing and administration services. Tags are not intended to
+-- be used for private or sensitive data.
+--
+-- __Minimum permissions__
+--
+-- In addition to the @tag:TagResources @permission required by this
+-- operation, you must also have the tagging permission defined by the
+-- service that created the resource. For example, to tag a
+-- @ChimeSDKMeetings@ instance using the @TagResources@ operation, you must
+-- have both of the following permissions:
+--
+-- @tag:TagResources@
+--
+-- @ChimeSDKMeetings:CreateTags@
+--
+-- Some services might have specific requirements for tagging some
+-- resources. For example, to tag an Amazon S3 bucket, you must also have
+-- the @s3:GetBucketTagging@ permission. If the expected minimum
+-- permissions don\'t work, check the documentation for that service\'s
+-- tagging APIs for more information.
+createMeeting_tags :: Lens.Lens' CreateMeeting (Prelude.Maybe [Tag])
+createMeeting_tags = Lens.lens (\CreateMeeting' {tags} -> tags) (\s@CreateMeeting' {} a -> s {tags = a} :: CreateMeeting) Prelude.. Lens.mapping Lens.coerced
+
+-- | A consistent and opaque identifier, created and maintained by the
+-- builder to represent a segment of their users.
+createMeeting_tenantIds :: Lens.Lens' CreateMeeting (Prelude.Maybe (Prelude.NonEmpty Prelude.Text))
+createMeeting_tenantIds = Lens.lens (\CreateMeeting' {tenantIds} -> tenantIds) (\s@CreateMeeting' {} a -> s {tenantIds = a} :: CreateMeeting) Prelude.. Lens.mapping Lens.coerced
+
+-- | The unique identifier for the client request. Use a different token for
+-- different meetings.
+createMeeting_clientRequestToken :: Lens.Lens' CreateMeeting Prelude.Text
+createMeeting_clientRequestToken = Lens.lens (\CreateMeeting' {clientRequestToken} -> clientRequestToken) (\s@CreateMeeting' {} a -> s {clientRequestToken = a} :: CreateMeeting) Prelude.. Data._Sensitive
+
+-- | The Region in which to create the meeting.
+--
+-- Available values: @af-south-1@, @ap-northeast-1@, @ap-northeast-2@,
+-- @ap-south-1@, @ap-southeast-1@, @ap-southeast-2@, @ca-central-1@,
+-- @eu-central-1@, @eu-north-1@, @eu-south-1@, @eu-west-1@, @eu-west-2@,
+-- @eu-west-3@, @sa-east-1@, @us-east-1@, @us-east-2@, @us-west-1@,
+-- @us-west-2@.
+--
+-- Available values in AWS GovCloud (US) Regions: @us-gov-east-1@,
+-- @us-gov-west-1@.
+createMeeting_mediaRegion :: Lens.Lens' CreateMeeting Prelude.Text
+createMeeting_mediaRegion = Lens.lens (\CreateMeeting' {mediaRegion} -> mediaRegion) (\s@CreateMeeting' {} a -> s {mediaRegion = a} :: CreateMeeting)
+
+-- | The external meeting ID.
+createMeeting_externalMeetingId :: Lens.Lens' CreateMeeting Prelude.Text
+createMeeting_externalMeetingId = Lens.lens (\CreateMeeting' {externalMeetingId} -> externalMeetingId) (\s@CreateMeeting' {} a -> s {externalMeetingId = a} :: CreateMeeting) Prelude.. Data._Sensitive
+
+instance Core.AWSRequest CreateMeeting where
+  type
+    AWSResponse CreateMeeting =
+      CreateMeetingResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateMeetingResponse'
+            Prelude.<$> (x Data..?> "Meeting")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateMeeting where
+  hashWithSalt _salt CreateMeeting' {..} =
+    _salt
+      `Prelude.hashWithSalt` meetingFeatures
+      `Prelude.hashWithSalt` meetingHostId
+      `Prelude.hashWithSalt` notificationsConfiguration
+      `Prelude.hashWithSalt` primaryMeetingId
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` tenantIds
+      `Prelude.hashWithSalt` clientRequestToken
+      `Prelude.hashWithSalt` mediaRegion
+      `Prelude.hashWithSalt` externalMeetingId
+
+instance Prelude.NFData CreateMeeting where
+  rnf CreateMeeting' {..} =
+    Prelude.rnf meetingFeatures
+      `Prelude.seq` Prelude.rnf meetingHostId
+      `Prelude.seq` Prelude.rnf notificationsConfiguration
+      `Prelude.seq` Prelude.rnf primaryMeetingId
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf tenantIds
+      `Prelude.seq` Prelude.rnf clientRequestToken
+      `Prelude.seq` Prelude.rnf mediaRegion
+      `Prelude.seq` Prelude.rnf externalMeetingId
+
+instance Data.ToHeaders CreateMeeting where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToJSON CreateMeeting where
+  toJSON CreateMeeting' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("MeetingFeatures" Data..=)
+              Prelude.<$> meetingFeatures,
+            ("MeetingHostId" Data..=) Prelude.<$> meetingHostId,
+            ("NotificationsConfiguration" Data..=)
+              Prelude.<$> notificationsConfiguration,
+            ("PrimaryMeetingId" Data..=)
+              Prelude.<$> primaryMeetingId,
+            ("Tags" Data..=) Prelude.<$> tags,
+            ("TenantIds" Data..=) Prelude.<$> tenantIds,
+            Prelude.Just
+              ("ClientRequestToken" Data..= clientRequestToken),
+            Prelude.Just ("MediaRegion" Data..= mediaRegion),
+            Prelude.Just
+              ("ExternalMeetingId" Data..= externalMeetingId)
+          ]
+      )
+
+instance Data.ToPath CreateMeeting where
+  toPath = Prelude.const "/meetings"
+
+instance Data.ToQuery CreateMeeting where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateMeetingResponse' smart constructor.
+data CreateMeetingResponse = CreateMeetingResponse'
+  { -- | The meeting information, including the meeting ID and @MediaPlacement@.
+    meeting :: Prelude.Maybe Meeting,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateMeetingResponse' 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:
+--
+-- 'meeting', 'createMeetingResponse_meeting' - The meeting information, including the meeting ID and @MediaPlacement@.
+--
+-- 'httpStatus', 'createMeetingResponse_httpStatus' - The response's http status code.
+newCreateMeetingResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateMeetingResponse
+newCreateMeetingResponse pHttpStatus_ =
+  CreateMeetingResponse'
+    { meeting = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The meeting information, including the meeting ID and @MediaPlacement@.
+createMeetingResponse_meeting :: Lens.Lens' CreateMeetingResponse (Prelude.Maybe Meeting)
+createMeetingResponse_meeting = Lens.lens (\CreateMeetingResponse' {meeting} -> meeting) (\s@CreateMeetingResponse' {} a -> s {meeting = a} :: CreateMeetingResponse)
+
+-- | The response's http status code.
+createMeetingResponse_httpStatus :: Lens.Lens' CreateMeetingResponse Prelude.Int
+createMeetingResponse_httpStatus = Lens.lens (\CreateMeetingResponse' {httpStatus} -> httpStatus) (\s@CreateMeetingResponse' {} a -> s {httpStatus = a} :: CreateMeetingResponse)
+
+instance Prelude.NFData CreateMeetingResponse where
+  rnf CreateMeetingResponse' {..} =
+    Prelude.rnf meeting
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ChimeSdkMeetings/CreateMeetingWithAttendees.hs b/gen/Amazonka/ChimeSdkMeetings/CreateMeetingWithAttendees.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ChimeSdkMeetings/CreateMeetingWithAttendees.hs
@@ -0,0 +1,379 @@
+{-# 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.ChimeSdkMeetings.CreateMeetingWithAttendees
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates a new Amazon Chime SDK meeting in the specified media Region,
+-- with attendees. For more information about specifying media Regions, see
+-- <https://docs.aws.amazon.com/chime/latest/dg/chime-sdk-meetings-regions.html Amazon Chime SDK Media Regions>
+-- in the /Amazon Chime Developer Guide/. For more information about the
+-- Amazon Chime SDK, see
+-- <https://docs.aws.amazon.com/chime/latest/dg/meetings-sdk.html Using the Amazon Chime SDK>
+-- in the /Amazon Chime Developer Guide/.
+module Amazonka.ChimeSdkMeetings.CreateMeetingWithAttendees
+  ( -- * Creating a Request
+    CreateMeetingWithAttendees (..),
+    newCreateMeetingWithAttendees,
+
+    -- * Request Lenses
+    createMeetingWithAttendees_meetingFeatures,
+    createMeetingWithAttendees_meetingHostId,
+    createMeetingWithAttendees_notificationsConfiguration,
+    createMeetingWithAttendees_primaryMeetingId,
+    createMeetingWithAttendees_tags,
+    createMeetingWithAttendees_tenantIds,
+    createMeetingWithAttendees_clientRequestToken,
+    createMeetingWithAttendees_mediaRegion,
+    createMeetingWithAttendees_externalMeetingId,
+    createMeetingWithAttendees_attendees,
+
+    -- * Destructuring the Response
+    CreateMeetingWithAttendeesResponse (..),
+    newCreateMeetingWithAttendeesResponse,
+
+    -- * Response Lenses
+    createMeetingWithAttendeesResponse_attendees,
+    createMeetingWithAttendeesResponse_errors,
+    createMeetingWithAttendeesResponse_meeting,
+    createMeetingWithAttendeesResponse_httpStatus,
+  )
+where
+
+import Amazonka.ChimeSdkMeetings.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:/ 'newCreateMeetingWithAttendees' smart constructor.
+data CreateMeetingWithAttendees = CreateMeetingWithAttendees'
+  { -- | Lists the audio and video features enabled for a meeting, such as echo
+    -- reduction.
+    meetingFeatures :: Prelude.Maybe MeetingFeaturesConfiguration,
+    -- | Reserved.
+    meetingHostId :: Prelude.Maybe (Data.Sensitive Prelude.Text),
+    -- | The configuration for resource targets to receive notifications when
+    -- meeting and attendee events occur.
+    notificationsConfiguration :: Prelude.Maybe NotificationsConfiguration,
+    -- | When specified, replicates the media from the primary meeting to the new
+    -- meeting.
+    primaryMeetingId :: Prelude.Maybe Prelude.Text,
+    -- | The tags in the request.
+    tags :: Prelude.Maybe [Tag],
+    -- | A consistent and opaque identifier, created and maintained by the
+    -- builder to represent a segment of their users.
+    tenantIds :: Prelude.Maybe (Prelude.NonEmpty Prelude.Text),
+    -- | The unique identifier for the client request. Use a different token for
+    -- different meetings.
+    clientRequestToken :: Data.Sensitive Prelude.Text,
+    -- | The Region in which to create the meeting.
+    --
+    -- Available values: @af-south-1@, @ap-northeast-1@, @ap-northeast-2@,
+    -- @ap-south-1@, @ap-southeast-1@, @ap-southeast-2@, @ca-central-1@,
+    -- @eu-central-1@, @eu-north-1@, @eu-south-1@, @eu-west-1@, @eu-west-2@,
+    -- @eu-west-3@, @sa-east-1@, @us-east-1@, @us-east-2@, @us-west-1@,
+    -- @us-west-2@.
+    --
+    -- Available values in AWS GovCloud (US) Regions: @us-gov-east-1@,
+    -- @us-gov-west-1@.
+    mediaRegion :: Prelude.Text,
+    -- | The external meeting ID.
+    externalMeetingId :: Data.Sensitive Prelude.Text,
+    -- | The attendee information, including attendees\' IDs and join tokens.
+    attendees :: Prelude.NonEmpty CreateAttendeeRequestItem
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateMeetingWithAttendees' 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:
+--
+-- 'meetingFeatures', 'createMeetingWithAttendees_meetingFeatures' - Lists the audio and video features enabled for a meeting, such as echo
+-- reduction.
+--
+-- 'meetingHostId', 'createMeetingWithAttendees_meetingHostId' - Reserved.
+--
+-- 'notificationsConfiguration', 'createMeetingWithAttendees_notificationsConfiguration' - The configuration for resource targets to receive notifications when
+-- meeting and attendee events occur.
+--
+-- 'primaryMeetingId', 'createMeetingWithAttendees_primaryMeetingId' - When specified, replicates the media from the primary meeting to the new
+-- meeting.
+--
+-- 'tags', 'createMeetingWithAttendees_tags' - The tags in the request.
+--
+-- 'tenantIds', 'createMeetingWithAttendees_tenantIds' - A consistent and opaque identifier, created and maintained by the
+-- builder to represent a segment of their users.
+--
+-- 'clientRequestToken', 'createMeetingWithAttendees_clientRequestToken' - The unique identifier for the client request. Use a different token for
+-- different meetings.
+--
+-- 'mediaRegion', 'createMeetingWithAttendees_mediaRegion' - The Region in which to create the meeting.
+--
+-- Available values: @af-south-1@, @ap-northeast-1@, @ap-northeast-2@,
+-- @ap-south-1@, @ap-southeast-1@, @ap-southeast-2@, @ca-central-1@,
+-- @eu-central-1@, @eu-north-1@, @eu-south-1@, @eu-west-1@, @eu-west-2@,
+-- @eu-west-3@, @sa-east-1@, @us-east-1@, @us-east-2@, @us-west-1@,
+-- @us-west-2@.
+--
+-- Available values in AWS GovCloud (US) Regions: @us-gov-east-1@,
+-- @us-gov-west-1@.
+--
+-- 'externalMeetingId', 'createMeetingWithAttendees_externalMeetingId' - The external meeting ID.
+--
+-- 'attendees', 'createMeetingWithAttendees_attendees' - The attendee information, including attendees\' IDs and join tokens.
+newCreateMeetingWithAttendees ::
+  -- | 'clientRequestToken'
+  Prelude.Text ->
+  -- | 'mediaRegion'
+  Prelude.Text ->
+  -- | 'externalMeetingId'
+  Prelude.Text ->
+  -- | 'attendees'
+  Prelude.NonEmpty CreateAttendeeRequestItem ->
+  CreateMeetingWithAttendees
+newCreateMeetingWithAttendees
+  pClientRequestToken_
+  pMediaRegion_
+  pExternalMeetingId_
+  pAttendees_ =
+    CreateMeetingWithAttendees'
+      { meetingFeatures =
+          Prelude.Nothing,
+        meetingHostId = Prelude.Nothing,
+        notificationsConfiguration = Prelude.Nothing,
+        primaryMeetingId = Prelude.Nothing,
+        tags = Prelude.Nothing,
+        tenantIds = Prelude.Nothing,
+        clientRequestToken =
+          Data._Sensitive Lens.# pClientRequestToken_,
+        mediaRegion = pMediaRegion_,
+        externalMeetingId =
+          Data._Sensitive Lens.# pExternalMeetingId_,
+        attendees = Lens.coerced Lens.# pAttendees_
+      }
+
+-- | Lists the audio and video features enabled for a meeting, such as echo
+-- reduction.
+createMeetingWithAttendees_meetingFeatures :: Lens.Lens' CreateMeetingWithAttendees (Prelude.Maybe MeetingFeaturesConfiguration)
+createMeetingWithAttendees_meetingFeatures = Lens.lens (\CreateMeetingWithAttendees' {meetingFeatures} -> meetingFeatures) (\s@CreateMeetingWithAttendees' {} a -> s {meetingFeatures = a} :: CreateMeetingWithAttendees)
+
+-- | Reserved.
+createMeetingWithAttendees_meetingHostId :: Lens.Lens' CreateMeetingWithAttendees (Prelude.Maybe Prelude.Text)
+createMeetingWithAttendees_meetingHostId = Lens.lens (\CreateMeetingWithAttendees' {meetingHostId} -> meetingHostId) (\s@CreateMeetingWithAttendees' {} a -> s {meetingHostId = a} :: CreateMeetingWithAttendees) Prelude.. Lens.mapping Data._Sensitive
+
+-- | The configuration for resource targets to receive notifications when
+-- meeting and attendee events occur.
+createMeetingWithAttendees_notificationsConfiguration :: Lens.Lens' CreateMeetingWithAttendees (Prelude.Maybe NotificationsConfiguration)
+createMeetingWithAttendees_notificationsConfiguration = Lens.lens (\CreateMeetingWithAttendees' {notificationsConfiguration} -> notificationsConfiguration) (\s@CreateMeetingWithAttendees' {} a -> s {notificationsConfiguration = a} :: CreateMeetingWithAttendees)
+
+-- | When specified, replicates the media from the primary meeting to the new
+-- meeting.
+createMeetingWithAttendees_primaryMeetingId :: Lens.Lens' CreateMeetingWithAttendees (Prelude.Maybe Prelude.Text)
+createMeetingWithAttendees_primaryMeetingId = Lens.lens (\CreateMeetingWithAttendees' {primaryMeetingId} -> primaryMeetingId) (\s@CreateMeetingWithAttendees' {} a -> s {primaryMeetingId = a} :: CreateMeetingWithAttendees)
+
+-- | The tags in the request.
+createMeetingWithAttendees_tags :: Lens.Lens' CreateMeetingWithAttendees (Prelude.Maybe [Tag])
+createMeetingWithAttendees_tags = Lens.lens (\CreateMeetingWithAttendees' {tags} -> tags) (\s@CreateMeetingWithAttendees' {} a -> s {tags = a} :: CreateMeetingWithAttendees) Prelude.. Lens.mapping Lens.coerced
+
+-- | A consistent and opaque identifier, created and maintained by the
+-- builder to represent a segment of their users.
+createMeetingWithAttendees_tenantIds :: Lens.Lens' CreateMeetingWithAttendees (Prelude.Maybe (Prelude.NonEmpty Prelude.Text))
+createMeetingWithAttendees_tenantIds = Lens.lens (\CreateMeetingWithAttendees' {tenantIds} -> tenantIds) (\s@CreateMeetingWithAttendees' {} a -> s {tenantIds = a} :: CreateMeetingWithAttendees) Prelude.. Lens.mapping Lens.coerced
+
+-- | The unique identifier for the client request. Use a different token for
+-- different meetings.
+createMeetingWithAttendees_clientRequestToken :: Lens.Lens' CreateMeetingWithAttendees Prelude.Text
+createMeetingWithAttendees_clientRequestToken = Lens.lens (\CreateMeetingWithAttendees' {clientRequestToken} -> clientRequestToken) (\s@CreateMeetingWithAttendees' {} a -> s {clientRequestToken = a} :: CreateMeetingWithAttendees) Prelude.. Data._Sensitive
+
+-- | The Region in which to create the meeting.
+--
+-- Available values: @af-south-1@, @ap-northeast-1@, @ap-northeast-2@,
+-- @ap-south-1@, @ap-southeast-1@, @ap-southeast-2@, @ca-central-1@,
+-- @eu-central-1@, @eu-north-1@, @eu-south-1@, @eu-west-1@, @eu-west-2@,
+-- @eu-west-3@, @sa-east-1@, @us-east-1@, @us-east-2@, @us-west-1@,
+-- @us-west-2@.
+--
+-- Available values in AWS GovCloud (US) Regions: @us-gov-east-1@,
+-- @us-gov-west-1@.
+createMeetingWithAttendees_mediaRegion :: Lens.Lens' CreateMeetingWithAttendees Prelude.Text
+createMeetingWithAttendees_mediaRegion = Lens.lens (\CreateMeetingWithAttendees' {mediaRegion} -> mediaRegion) (\s@CreateMeetingWithAttendees' {} a -> s {mediaRegion = a} :: CreateMeetingWithAttendees)
+
+-- | The external meeting ID.
+createMeetingWithAttendees_externalMeetingId :: Lens.Lens' CreateMeetingWithAttendees Prelude.Text
+createMeetingWithAttendees_externalMeetingId = Lens.lens (\CreateMeetingWithAttendees' {externalMeetingId} -> externalMeetingId) (\s@CreateMeetingWithAttendees' {} a -> s {externalMeetingId = a} :: CreateMeetingWithAttendees) Prelude.. Data._Sensitive
+
+-- | The attendee information, including attendees\' IDs and join tokens.
+createMeetingWithAttendees_attendees :: Lens.Lens' CreateMeetingWithAttendees (Prelude.NonEmpty CreateAttendeeRequestItem)
+createMeetingWithAttendees_attendees = Lens.lens (\CreateMeetingWithAttendees' {attendees} -> attendees) (\s@CreateMeetingWithAttendees' {} a -> s {attendees = a} :: CreateMeetingWithAttendees) Prelude.. Lens.coerced
+
+instance Core.AWSRequest CreateMeetingWithAttendees where
+  type
+    AWSResponse CreateMeetingWithAttendees =
+      CreateMeetingWithAttendeesResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateMeetingWithAttendeesResponse'
+            Prelude.<$> (x Data..?> "Attendees" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "Errors" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "Meeting")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateMeetingWithAttendees where
+  hashWithSalt _salt CreateMeetingWithAttendees' {..} =
+    _salt
+      `Prelude.hashWithSalt` meetingFeatures
+      `Prelude.hashWithSalt` meetingHostId
+      `Prelude.hashWithSalt` notificationsConfiguration
+      `Prelude.hashWithSalt` primaryMeetingId
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` tenantIds
+      `Prelude.hashWithSalt` clientRequestToken
+      `Prelude.hashWithSalt` mediaRegion
+      `Prelude.hashWithSalt` externalMeetingId
+      `Prelude.hashWithSalt` attendees
+
+instance Prelude.NFData CreateMeetingWithAttendees where
+  rnf CreateMeetingWithAttendees' {..} =
+    Prelude.rnf meetingFeatures
+      `Prelude.seq` Prelude.rnf meetingHostId
+      `Prelude.seq` Prelude.rnf notificationsConfiguration
+      `Prelude.seq` Prelude.rnf primaryMeetingId
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf tenantIds
+      `Prelude.seq` Prelude.rnf clientRequestToken
+      `Prelude.seq` Prelude.rnf mediaRegion
+      `Prelude.seq` Prelude.rnf externalMeetingId
+      `Prelude.seq` Prelude.rnf attendees
+
+instance Data.ToHeaders CreateMeetingWithAttendees where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToJSON CreateMeetingWithAttendees where
+  toJSON CreateMeetingWithAttendees' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("MeetingFeatures" Data..=)
+              Prelude.<$> meetingFeatures,
+            ("MeetingHostId" Data..=) Prelude.<$> meetingHostId,
+            ("NotificationsConfiguration" Data..=)
+              Prelude.<$> notificationsConfiguration,
+            ("PrimaryMeetingId" Data..=)
+              Prelude.<$> primaryMeetingId,
+            ("Tags" Data..=) Prelude.<$> tags,
+            ("TenantIds" Data..=) Prelude.<$> tenantIds,
+            Prelude.Just
+              ("ClientRequestToken" Data..= clientRequestToken),
+            Prelude.Just ("MediaRegion" Data..= mediaRegion),
+            Prelude.Just
+              ("ExternalMeetingId" Data..= externalMeetingId),
+            Prelude.Just ("Attendees" Data..= attendees)
+          ]
+      )
+
+instance Data.ToPath CreateMeetingWithAttendees where
+  toPath = Prelude.const "/meetings"
+
+instance Data.ToQuery CreateMeetingWithAttendees where
+  toQuery =
+    Prelude.const
+      (Prelude.mconcat ["operation=create-attendees"])
+
+-- | /See:/ 'newCreateMeetingWithAttendeesResponse' smart constructor.
+data CreateMeetingWithAttendeesResponse = CreateMeetingWithAttendeesResponse'
+  { -- | The attendee information, including attendees\' IDs and join tokens.
+    attendees :: Prelude.Maybe [Attendee],
+    -- | If the action fails for one or more of the attendees in the request, a
+    -- list of the attendees is returned, along with error codes and error
+    -- messages.
+    errors :: Prelude.Maybe [CreateAttendeeError],
+    -- | The meeting information, including the meeting ID and @MediaPlacement@.
+    meeting :: Prelude.Maybe Meeting,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateMeetingWithAttendeesResponse' 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:
+--
+-- 'attendees', 'createMeetingWithAttendeesResponse_attendees' - The attendee information, including attendees\' IDs and join tokens.
+--
+-- 'errors', 'createMeetingWithAttendeesResponse_errors' - If the action fails for one or more of the attendees in the request, a
+-- list of the attendees is returned, along with error codes and error
+-- messages.
+--
+-- 'meeting', 'createMeetingWithAttendeesResponse_meeting' - The meeting information, including the meeting ID and @MediaPlacement@.
+--
+-- 'httpStatus', 'createMeetingWithAttendeesResponse_httpStatus' - The response's http status code.
+newCreateMeetingWithAttendeesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateMeetingWithAttendeesResponse
+newCreateMeetingWithAttendeesResponse pHttpStatus_ =
+  CreateMeetingWithAttendeesResponse'
+    { attendees =
+        Prelude.Nothing,
+      errors = Prelude.Nothing,
+      meeting = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The attendee information, including attendees\' IDs and join tokens.
+createMeetingWithAttendeesResponse_attendees :: Lens.Lens' CreateMeetingWithAttendeesResponse (Prelude.Maybe [Attendee])
+createMeetingWithAttendeesResponse_attendees = Lens.lens (\CreateMeetingWithAttendeesResponse' {attendees} -> attendees) (\s@CreateMeetingWithAttendeesResponse' {} a -> s {attendees = a} :: CreateMeetingWithAttendeesResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | If the action fails for one or more of the attendees in the request, a
+-- list of the attendees is returned, along with error codes and error
+-- messages.
+createMeetingWithAttendeesResponse_errors :: Lens.Lens' CreateMeetingWithAttendeesResponse (Prelude.Maybe [CreateAttendeeError])
+createMeetingWithAttendeesResponse_errors = Lens.lens (\CreateMeetingWithAttendeesResponse' {errors} -> errors) (\s@CreateMeetingWithAttendeesResponse' {} a -> s {errors = a} :: CreateMeetingWithAttendeesResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The meeting information, including the meeting ID and @MediaPlacement@.
+createMeetingWithAttendeesResponse_meeting :: Lens.Lens' CreateMeetingWithAttendeesResponse (Prelude.Maybe Meeting)
+createMeetingWithAttendeesResponse_meeting = Lens.lens (\CreateMeetingWithAttendeesResponse' {meeting} -> meeting) (\s@CreateMeetingWithAttendeesResponse' {} a -> s {meeting = a} :: CreateMeetingWithAttendeesResponse)
+
+-- | The response's http status code.
+createMeetingWithAttendeesResponse_httpStatus :: Lens.Lens' CreateMeetingWithAttendeesResponse Prelude.Int
+createMeetingWithAttendeesResponse_httpStatus = Lens.lens (\CreateMeetingWithAttendeesResponse' {httpStatus} -> httpStatus) (\s@CreateMeetingWithAttendeesResponse' {} a -> s {httpStatus = a} :: CreateMeetingWithAttendeesResponse)
+
+instance
+  Prelude.NFData
+    CreateMeetingWithAttendeesResponse
+  where
+  rnf CreateMeetingWithAttendeesResponse' {..} =
+    Prelude.rnf attendees
+      `Prelude.seq` Prelude.rnf errors
+      `Prelude.seq` Prelude.rnf meeting
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ChimeSdkMeetings/DeleteAttendee.hs b/gen/Amazonka/ChimeSdkMeetings/DeleteAttendee.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ChimeSdkMeetings/DeleteAttendee.hs
@@ -0,0 +1,142 @@
+{-# 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.ChimeSdkMeetings.DeleteAttendee
+-- 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 attendee from the specified Amazon Chime SDK meeting and
+-- deletes their @JoinToken@. Attendees are automatically deleted when a
+-- Amazon Chime SDK meeting is deleted. For more information about the
+-- Amazon Chime SDK, see
+-- <https://docs.aws.amazon.com/chime/latest/dg/meetings-sdk.html Using the Amazon Chime SDK>
+-- in the /Amazon Chime Developer Guide/.
+module Amazonka.ChimeSdkMeetings.DeleteAttendee
+  ( -- * Creating a Request
+    DeleteAttendee (..),
+    newDeleteAttendee,
+
+    -- * Request Lenses
+    deleteAttendee_meetingId,
+    deleteAttendee_attendeeId,
+
+    -- * Destructuring the Response
+    DeleteAttendeeResponse (..),
+    newDeleteAttendeeResponse,
+  )
+where
+
+import Amazonka.ChimeSdkMeetings.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:/ 'newDeleteAttendee' smart constructor.
+data DeleteAttendee = DeleteAttendee'
+  { -- | The Amazon Chime SDK meeting ID.
+    meetingId :: Prelude.Text,
+    -- | The Amazon Chime SDK attendee ID.
+    attendeeId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteAttendee' 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:
+--
+-- 'meetingId', 'deleteAttendee_meetingId' - The Amazon Chime SDK meeting ID.
+--
+-- 'attendeeId', 'deleteAttendee_attendeeId' - The Amazon Chime SDK attendee ID.
+newDeleteAttendee ::
+  -- | 'meetingId'
+  Prelude.Text ->
+  -- | 'attendeeId'
+  Prelude.Text ->
+  DeleteAttendee
+newDeleteAttendee pMeetingId_ pAttendeeId_ =
+  DeleteAttendee'
+    { meetingId = pMeetingId_,
+      attendeeId = pAttendeeId_
+    }
+
+-- | The Amazon Chime SDK meeting ID.
+deleteAttendee_meetingId :: Lens.Lens' DeleteAttendee Prelude.Text
+deleteAttendee_meetingId = Lens.lens (\DeleteAttendee' {meetingId} -> meetingId) (\s@DeleteAttendee' {} a -> s {meetingId = a} :: DeleteAttendee)
+
+-- | The Amazon Chime SDK attendee ID.
+deleteAttendee_attendeeId :: Lens.Lens' DeleteAttendee Prelude.Text
+deleteAttendee_attendeeId = Lens.lens (\DeleteAttendee' {attendeeId} -> attendeeId) (\s@DeleteAttendee' {} a -> s {attendeeId = a} :: DeleteAttendee)
+
+instance Core.AWSRequest DeleteAttendee where
+  type
+    AWSResponse DeleteAttendee =
+      DeleteAttendeeResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveNull DeleteAttendeeResponse'
+
+instance Prelude.Hashable DeleteAttendee where
+  hashWithSalt _salt DeleteAttendee' {..} =
+    _salt
+      `Prelude.hashWithSalt` meetingId
+      `Prelude.hashWithSalt` attendeeId
+
+instance Prelude.NFData DeleteAttendee where
+  rnf DeleteAttendee' {..} =
+    Prelude.rnf meetingId
+      `Prelude.seq` Prelude.rnf attendeeId
+
+instance Data.ToHeaders DeleteAttendee where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DeleteAttendee where
+  toPath DeleteAttendee' {..} =
+    Prelude.mconcat
+      [ "/meetings/",
+        Data.toBS meetingId,
+        "/attendees/",
+        Data.toBS attendeeId
+      ]
+
+instance Data.ToQuery DeleteAttendee where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteAttendeeResponse' smart constructor.
+data DeleteAttendeeResponse = DeleteAttendeeResponse'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteAttendeeResponse' 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.
+newDeleteAttendeeResponse ::
+  DeleteAttendeeResponse
+newDeleteAttendeeResponse = DeleteAttendeeResponse'
+
+instance Prelude.NFData DeleteAttendeeResponse where
+  rnf _ = ()
diff --git a/gen/Amazonka/ChimeSdkMeetings/DeleteMeeting.hs b/gen/Amazonka/ChimeSdkMeetings/DeleteMeeting.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ChimeSdkMeetings/DeleteMeeting.hs
@@ -0,0 +1,119 @@
+{-# 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.ChimeSdkMeetings.DeleteMeeting
+-- 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 the specified Amazon Chime SDK meeting. The operation deletes
+-- all attendees, disconnects all clients, and prevents new clients from
+-- joining the meeting. For more information about the Amazon Chime SDK,
+-- see
+-- <https://docs.aws.amazon.com/chime/latest/dg/meetings-sdk.html Using the Amazon Chime SDK>
+-- in the /Amazon Chime Developer Guide/.
+module Amazonka.ChimeSdkMeetings.DeleteMeeting
+  ( -- * Creating a Request
+    DeleteMeeting (..),
+    newDeleteMeeting,
+
+    -- * Request Lenses
+    deleteMeeting_meetingId,
+
+    -- * Destructuring the Response
+    DeleteMeetingResponse (..),
+    newDeleteMeetingResponse,
+  )
+where
+
+import Amazonka.ChimeSdkMeetings.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:/ 'newDeleteMeeting' smart constructor.
+data DeleteMeeting = DeleteMeeting'
+  { -- | The Amazon Chime SDK meeting ID.
+    meetingId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteMeeting' 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:
+--
+-- 'meetingId', 'deleteMeeting_meetingId' - The Amazon Chime SDK meeting ID.
+newDeleteMeeting ::
+  -- | 'meetingId'
+  Prelude.Text ->
+  DeleteMeeting
+newDeleteMeeting pMeetingId_ =
+  DeleteMeeting' {meetingId = pMeetingId_}
+
+-- | The Amazon Chime SDK meeting ID.
+deleteMeeting_meetingId :: Lens.Lens' DeleteMeeting Prelude.Text
+deleteMeeting_meetingId = Lens.lens (\DeleteMeeting' {meetingId} -> meetingId) (\s@DeleteMeeting' {} a -> s {meetingId = a} :: DeleteMeeting)
+
+instance Core.AWSRequest DeleteMeeting where
+  type
+    AWSResponse DeleteMeeting =
+      DeleteMeetingResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveNull DeleteMeetingResponse'
+
+instance Prelude.Hashable DeleteMeeting where
+  hashWithSalt _salt DeleteMeeting' {..} =
+    _salt `Prelude.hashWithSalt` meetingId
+
+instance Prelude.NFData DeleteMeeting where
+  rnf DeleteMeeting' {..} = Prelude.rnf meetingId
+
+instance Data.ToHeaders DeleteMeeting where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DeleteMeeting where
+  toPath DeleteMeeting' {..} =
+    Prelude.mconcat ["/meetings/", Data.toBS meetingId]
+
+instance Data.ToQuery DeleteMeeting where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteMeetingResponse' smart constructor.
+data DeleteMeetingResponse = DeleteMeetingResponse'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteMeetingResponse' 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.
+newDeleteMeetingResponse ::
+  DeleteMeetingResponse
+newDeleteMeetingResponse = DeleteMeetingResponse'
+
+instance Prelude.NFData DeleteMeetingResponse where
+  rnf _ = ()
diff --git a/gen/Amazonka/ChimeSdkMeetings/GetAttendee.hs b/gen/Amazonka/ChimeSdkMeetings/GetAttendee.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ChimeSdkMeetings/GetAttendee.hs
@@ -0,0 +1,173 @@
+{-# 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.ChimeSdkMeetings.GetAttendee
+-- 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 Amazon Chime SDK attendee details for a specified meeting ID
+-- and attendee ID. For more information about the Amazon Chime SDK, see
+-- <https://docs.aws.amazon.com/chime/latest/dg/meetings-sdk.html Using the Amazon Chime SDK>
+-- in the /Amazon Chime Developer Guide/.
+module Amazonka.ChimeSdkMeetings.GetAttendee
+  ( -- * Creating a Request
+    GetAttendee (..),
+    newGetAttendee,
+
+    -- * Request Lenses
+    getAttendee_meetingId,
+    getAttendee_attendeeId,
+
+    -- * Destructuring the Response
+    GetAttendeeResponse (..),
+    newGetAttendeeResponse,
+
+    -- * Response Lenses
+    getAttendeeResponse_attendee,
+    getAttendeeResponse_httpStatus,
+  )
+where
+
+import Amazonka.ChimeSdkMeetings.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:/ 'newGetAttendee' smart constructor.
+data GetAttendee = GetAttendee'
+  { -- | The Amazon Chime SDK meeting ID.
+    meetingId :: Prelude.Text,
+    -- | The Amazon Chime SDK attendee ID.
+    attendeeId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetAttendee' 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:
+--
+-- 'meetingId', 'getAttendee_meetingId' - The Amazon Chime SDK meeting ID.
+--
+-- 'attendeeId', 'getAttendee_attendeeId' - The Amazon Chime SDK attendee ID.
+newGetAttendee ::
+  -- | 'meetingId'
+  Prelude.Text ->
+  -- | 'attendeeId'
+  Prelude.Text ->
+  GetAttendee
+newGetAttendee pMeetingId_ pAttendeeId_ =
+  GetAttendee'
+    { meetingId = pMeetingId_,
+      attendeeId = pAttendeeId_
+    }
+
+-- | The Amazon Chime SDK meeting ID.
+getAttendee_meetingId :: Lens.Lens' GetAttendee Prelude.Text
+getAttendee_meetingId = Lens.lens (\GetAttendee' {meetingId} -> meetingId) (\s@GetAttendee' {} a -> s {meetingId = a} :: GetAttendee)
+
+-- | The Amazon Chime SDK attendee ID.
+getAttendee_attendeeId :: Lens.Lens' GetAttendee Prelude.Text
+getAttendee_attendeeId = Lens.lens (\GetAttendee' {attendeeId} -> attendeeId) (\s@GetAttendee' {} a -> s {attendeeId = a} :: GetAttendee)
+
+instance Core.AWSRequest GetAttendee where
+  type AWSResponse GetAttendee = GetAttendeeResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetAttendeeResponse'
+            Prelude.<$> (x Data..?> "Attendee")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetAttendee where
+  hashWithSalt _salt GetAttendee' {..} =
+    _salt
+      `Prelude.hashWithSalt` meetingId
+      `Prelude.hashWithSalt` attendeeId
+
+instance Prelude.NFData GetAttendee where
+  rnf GetAttendee' {..} =
+    Prelude.rnf meetingId
+      `Prelude.seq` Prelude.rnf attendeeId
+
+instance Data.ToHeaders GetAttendee where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath GetAttendee where
+  toPath GetAttendee' {..} =
+    Prelude.mconcat
+      [ "/meetings/",
+        Data.toBS meetingId,
+        "/attendees/",
+        Data.toBS attendeeId
+      ]
+
+instance Data.ToQuery GetAttendee where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetAttendeeResponse' smart constructor.
+data GetAttendeeResponse = GetAttendeeResponse'
+  { -- | The Amazon Chime SDK attendee information.
+    attendee :: Prelude.Maybe Attendee,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetAttendeeResponse' 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:
+--
+-- 'attendee', 'getAttendeeResponse_attendee' - The Amazon Chime SDK attendee information.
+--
+-- 'httpStatus', 'getAttendeeResponse_httpStatus' - The response's http status code.
+newGetAttendeeResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetAttendeeResponse
+newGetAttendeeResponse pHttpStatus_ =
+  GetAttendeeResponse'
+    { attendee = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The Amazon Chime SDK attendee information.
+getAttendeeResponse_attendee :: Lens.Lens' GetAttendeeResponse (Prelude.Maybe Attendee)
+getAttendeeResponse_attendee = Lens.lens (\GetAttendeeResponse' {attendee} -> attendee) (\s@GetAttendeeResponse' {} a -> s {attendee = a} :: GetAttendeeResponse)
+
+-- | The response's http status code.
+getAttendeeResponse_httpStatus :: Lens.Lens' GetAttendeeResponse Prelude.Int
+getAttendeeResponse_httpStatus = Lens.lens (\GetAttendeeResponse' {httpStatus} -> httpStatus) (\s@GetAttendeeResponse' {} a -> s {httpStatus = a} :: GetAttendeeResponse)
+
+instance Prelude.NFData GetAttendeeResponse where
+  rnf GetAttendeeResponse' {..} =
+    Prelude.rnf attendee
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ChimeSdkMeetings/GetMeeting.hs b/gen/Amazonka/ChimeSdkMeetings/GetMeeting.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ChimeSdkMeetings/GetMeeting.hs
@@ -0,0 +1,150 @@
+{-# 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.ChimeSdkMeetings.GetMeeting
+-- 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 Amazon Chime SDK meeting details for the specified meeting ID.
+-- For more information about the Amazon Chime SDK, see
+-- <https://docs.aws.amazon.com/chime/latest/dg/meetings-sdk.html Using the Amazon Chime SDK>
+-- in the /Amazon Chime Developer Guide/.
+module Amazonka.ChimeSdkMeetings.GetMeeting
+  ( -- * Creating a Request
+    GetMeeting (..),
+    newGetMeeting,
+
+    -- * Request Lenses
+    getMeeting_meetingId,
+
+    -- * Destructuring the Response
+    GetMeetingResponse (..),
+    newGetMeetingResponse,
+
+    -- * Response Lenses
+    getMeetingResponse_meeting,
+    getMeetingResponse_httpStatus,
+  )
+where
+
+import Amazonka.ChimeSdkMeetings.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:/ 'newGetMeeting' smart constructor.
+data GetMeeting = GetMeeting'
+  { -- | The Amazon Chime SDK meeting ID.
+    meetingId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetMeeting' 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:
+--
+-- 'meetingId', 'getMeeting_meetingId' - The Amazon Chime SDK meeting ID.
+newGetMeeting ::
+  -- | 'meetingId'
+  Prelude.Text ->
+  GetMeeting
+newGetMeeting pMeetingId_ =
+  GetMeeting' {meetingId = pMeetingId_}
+
+-- | The Amazon Chime SDK meeting ID.
+getMeeting_meetingId :: Lens.Lens' GetMeeting Prelude.Text
+getMeeting_meetingId = Lens.lens (\GetMeeting' {meetingId} -> meetingId) (\s@GetMeeting' {} a -> s {meetingId = a} :: GetMeeting)
+
+instance Core.AWSRequest GetMeeting where
+  type AWSResponse GetMeeting = GetMeetingResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetMeetingResponse'
+            Prelude.<$> (x Data..?> "Meeting")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetMeeting where
+  hashWithSalt _salt GetMeeting' {..} =
+    _salt `Prelude.hashWithSalt` meetingId
+
+instance Prelude.NFData GetMeeting where
+  rnf GetMeeting' {..} = Prelude.rnf meetingId
+
+instance Data.ToHeaders GetMeeting where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath GetMeeting where
+  toPath GetMeeting' {..} =
+    Prelude.mconcat ["/meetings/", Data.toBS meetingId]
+
+instance Data.ToQuery GetMeeting where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetMeetingResponse' smart constructor.
+data GetMeetingResponse = GetMeetingResponse'
+  { -- | The Amazon Chime SDK meeting information.
+    meeting :: Prelude.Maybe Meeting,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetMeetingResponse' 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:
+--
+-- 'meeting', 'getMeetingResponse_meeting' - The Amazon Chime SDK meeting information.
+--
+-- 'httpStatus', 'getMeetingResponse_httpStatus' - The response's http status code.
+newGetMeetingResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetMeetingResponse
+newGetMeetingResponse pHttpStatus_ =
+  GetMeetingResponse'
+    { meeting = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The Amazon Chime SDK meeting information.
+getMeetingResponse_meeting :: Lens.Lens' GetMeetingResponse (Prelude.Maybe Meeting)
+getMeetingResponse_meeting = Lens.lens (\GetMeetingResponse' {meeting} -> meeting) (\s@GetMeetingResponse' {} a -> s {meeting = a} :: GetMeetingResponse)
+
+-- | The response's http status code.
+getMeetingResponse_httpStatus :: Lens.Lens' GetMeetingResponse Prelude.Int
+getMeetingResponse_httpStatus = Lens.lens (\GetMeetingResponse' {httpStatus} -> httpStatus) (\s@GetMeetingResponse' {} a -> s {httpStatus = a} :: GetMeetingResponse)
+
+instance Prelude.NFData GetMeetingResponse where
+  rnf GetMeetingResponse' {..} =
+    Prelude.rnf meeting
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ChimeSdkMeetings/Lens.hs b/gen/Amazonka/ChimeSdkMeetings/Lens.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ChimeSdkMeetings/Lens.hs
@@ -0,0 +1,240 @@
+{-# 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.ChimeSdkMeetings.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.ChimeSdkMeetings.Lens
+  ( -- * Operations
+
+    -- ** BatchCreateAttendee
+    batchCreateAttendee_meetingId,
+    batchCreateAttendee_attendees,
+    batchCreateAttendeeResponse_attendees,
+    batchCreateAttendeeResponse_errors,
+    batchCreateAttendeeResponse_httpStatus,
+
+    -- ** BatchUpdateAttendeeCapabilitiesExcept
+    batchUpdateAttendeeCapabilitiesExcept_meetingId,
+    batchUpdateAttendeeCapabilitiesExcept_excludedAttendeeIds,
+    batchUpdateAttendeeCapabilitiesExcept_capabilities,
+
+    -- ** CreateAttendee
+    createAttendee_capabilities,
+    createAttendee_meetingId,
+    createAttendee_externalUserId,
+    createAttendeeResponse_attendee,
+    createAttendeeResponse_httpStatus,
+
+    -- ** CreateMeeting
+    createMeeting_meetingFeatures,
+    createMeeting_meetingHostId,
+    createMeeting_notificationsConfiguration,
+    createMeeting_primaryMeetingId,
+    createMeeting_tags,
+    createMeeting_tenantIds,
+    createMeeting_clientRequestToken,
+    createMeeting_mediaRegion,
+    createMeeting_externalMeetingId,
+    createMeetingResponse_meeting,
+    createMeetingResponse_httpStatus,
+
+    -- ** CreateMeetingWithAttendees
+    createMeetingWithAttendees_meetingFeatures,
+    createMeetingWithAttendees_meetingHostId,
+    createMeetingWithAttendees_notificationsConfiguration,
+    createMeetingWithAttendees_primaryMeetingId,
+    createMeetingWithAttendees_tags,
+    createMeetingWithAttendees_tenantIds,
+    createMeetingWithAttendees_clientRequestToken,
+    createMeetingWithAttendees_mediaRegion,
+    createMeetingWithAttendees_externalMeetingId,
+    createMeetingWithAttendees_attendees,
+    createMeetingWithAttendeesResponse_attendees,
+    createMeetingWithAttendeesResponse_errors,
+    createMeetingWithAttendeesResponse_meeting,
+    createMeetingWithAttendeesResponse_httpStatus,
+
+    -- ** DeleteAttendee
+    deleteAttendee_meetingId,
+    deleteAttendee_attendeeId,
+
+    -- ** DeleteMeeting
+    deleteMeeting_meetingId,
+
+    -- ** GetAttendee
+    getAttendee_meetingId,
+    getAttendee_attendeeId,
+    getAttendeeResponse_attendee,
+    getAttendeeResponse_httpStatus,
+
+    -- ** GetMeeting
+    getMeeting_meetingId,
+    getMeetingResponse_meeting,
+    getMeetingResponse_httpStatus,
+
+    -- ** ListAttendees
+    listAttendees_maxResults,
+    listAttendees_nextToken,
+    listAttendees_meetingId,
+    listAttendeesResponse_attendees,
+    listAttendeesResponse_nextToken,
+    listAttendeesResponse_httpStatus,
+
+    -- ** ListTagsForResource
+    listTagsForResource_resourceARN,
+    listTagsForResourceResponse_tags,
+    listTagsForResourceResponse_httpStatus,
+
+    -- ** StartMeetingTranscription
+    startMeetingTranscription_meetingId,
+    startMeetingTranscription_transcriptionConfiguration,
+
+    -- ** StopMeetingTranscription
+    stopMeetingTranscription_meetingId,
+
+    -- ** TagResource
+    tagResource_resourceARN,
+    tagResource_tags,
+    tagResourceResponse_httpStatus,
+
+    -- ** UntagResource
+    untagResource_resourceARN,
+    untagResource_tagKeys,
+    untagResourceResponse_httpStatus,
+
+    -- ** UpdateAttendeeCapabilities
+    updateAttendeeCapabilities_meetingId,
+    updateAttendeeCapabilities_attendeeId,
+    updateAttendeeCapabilities_capabilities,
+    updateAttendeeCapabilitiesResponse_attendee,
+    updateAttendeeCapabilitiesResponse_httpStatus,
+
+    -- * Types
+
+    -- ** Attendee
+    attendee_attendeeId,
+    attendee_capabilities,
+    attendee_externalUserId,
+    attendee_joinToken,
+
+    -- ** AttendeeCapabilities
+    attendeeCapabilities_audio,
+    attendeeCapabilities_video,
+    attendeeCapabilities_content,
+
+    -- ** AttendeeIdItem
+    attendeeIdItem_attendeeId,
+
+    -- ** AudioFeatures
+    audioFeatures_echoReduction,
+
+    -- ** CreateAttendeeError
+    createAttendeeError_errorCode,
+    createAttendeeError_errorMessage,
+    createAttendeeError_externalUserId,
+
+    -- ** CreateAttendeeRequestItem
+    createAttendeeRequestItem_capabilities,
+    createAttendeeRequestItem_externalUserId,
+
+    -- ** EngineTranscribeMedicalSettings
+    engineTranscribeMedicalSettings_contentIdentificationType,
+    engineTranscribeMedicalSettings_region,
+    engineTranscribeMedicalSettings_vocabularyName,
+    engineTranscribeMedicalSettings_languageCode,
+    engineTranscribeMedicalSettings_specialty,
+    engineTranscribeMedicalSettings_type,
+
+    -- ** EngineTranscribeSettings
+    engineTranscribeSettings_contentIdentificationType,
+    engineTranscribeSettings_contentRedactionType,
+    engineTranscribeSettings_enablePartialResultsStabilization,
+    engineTranscribeSettings_identifyLanguage,
+    engineTranscribeSettings_languageCode,
+    engineTranscribeSettings_languageModelName,
+    engineTranscribeSettings_languageOptions,
+    engineTranscribeSettings_partialResultsStability,
+    engineTranscribeSettings_piiEntityTypes,
+    engineTranscribeSettings_preferredLanguage,
+    engineTranscribeSettings_region,
+    engineTranscribeSettings_vocabularyFilterMethod,
+    engineTranscribeSettings_vocabularyFilterName,
+    engineTranscribeSettings_vocabularyName,
+
+    -- ** MediaPlacement
+    mediaPlacement_audioFallbackUrl,
+    mediaPlacement_audioHostUrl,
+    mediaPlacement_eventIngestionUrl,
+    mediaPlacement_screenDataUrl,
+    mediaPlacement_screenSharingUrl,
+    mediaPlacement_screenViewingUrl,
+    mediaPlacement_signalingUrl,
+    mediaPlacement_turnControlUrl,
+
+    -- ** Meeting
+    meeting_externalMeetingId,
+    meeting_mediaPlacement,
+    meeting_mediaRegion,
+    meeting_meetingArn,
+    meeting_meetingFeatures,
+    meeting_meetingHostId,
+    meeting_meetingId,
+    meeting_primaryMeetingId,
+    meeting_tenantIds,
+
+    -- ** MeetingFeaturesConfiguration
+    meetingFeaturesConfiguration_audio,
+
+    -- ** NotificationsConfiguration
+    notificationsConfiguration_lambdaFunctionArn,
+    notificationsConfiguration_snsTopicArn,
+    notificationsConfiguration_sqsQueueArn,
+
+    -- ** Tag
+    tag_key,
+    tag_value,
+
+    -- ** TranscriptionConfiguration
+    transcriptionConfiguration_engineTranscribeMedicalSettings,
+    transcriptionConfiguration_engineTranscribeSettings,
+  )
+where
+
+import Amazonka.ChimeSdkMeetings.BatchCreateAttendee
+import Amazonka.ChimeSdkMeetings.BatchUpdateAttendeeCapabilitiesExcept
+import Amazonka.ChimeSdkMeetings.CreateAttendee
+import Amazonka.ChimeSdkMeetings.CreateMeeting
+import Amazonka.ChimeSdkMeetings.CreateMeetingWithAttendees
+import Amazonka.ChimeSdkMeetings.DeleteAttendee
+import Amazonka.ChimeSdkMeetings.DeleteMeeting
+import Amazonka.ChimeSdkMeetings.GetAttendee
+import Amazonka.ChimeSdkMeetings.GetMeeting
+import Amazonka.ChimeSdkMeetings.ListAttendees
+import Amazonka.ChimeSdkMeetings.ListTagsForResource
+import Amazonka.ChimeSdkMeetings.StartMeetingTranscription
+import Amazonka.ChimeSdkMeetings.StopMeetingTranscription
+import Amazonka.ChimeSdkMeetings.TagResource
+import Amazonka.ChimeSdkMeetings.Types.Attendee
+import Amazonka.ChimeSdkMeetings.Types.AttendeeCapabilities
+import Amazonka.ChimeSdkMeetings.Types.AttendeeIdItem
+import Amazonka.ChimeSdkMeetings.Types.AudioFeatures
+import Amazonka.ChimeSdkMeetings.Types.CreateAttendeeError
+import Amazonka.ChimeSdkMeetings.Types.CreateAttendeeRequestItem
+import Amazonka.ChimeSdkMeetings.Types.EngineTranscribeMedicalSettings
+import Amazonka.ChimeSdkMeetings.Types.EngineTranscribeSettings
+import Amazonka.ChimeSdkMeetings.Types.MediaPlacement
+import Amazonka.ChimeSdkMeetings.Types.Meeting
+import Amazonka.ChimeSdkMeetings.Types.MeetingFeaturesConfiguration
+import Amazonka.ChimeSdkMeetings.Types.NotificationsConfiguration
+import Amazonka.ChimeSdkMeetings.Types.Tag
+import Amazonka.ChimeSdkMeetings.Types.TranscriptionConfiguration
+import Amazonka.ChimeSdkMeetings.UntagResource
+import Amazonka.ChimeSdkMeetings.UpdateAttendeeCapabilities
diff --git a/gen/Amazonka/ChimeSdkMeetings/ListAttendees.hs b/gen/Amazonka/ChimeSdkMeetings/ListAttendees.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ChimeSdkMeetings/ListAttendees.hs
@@ -0,0 +1,197 @@
+{-# 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.ChimeSdkMeetings.ListAttendees
+-- 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 attendees for the specified Amazon Chime SDK meeting. For more
+-- information about the Amazon Chime SDK, see
+-- <https://docs.aws.amazon.com/chime/latest/dg/meetings-sdk.html Using the Amazon Chime SDK>
+-- in the /Amazon Chime Developer Guide/.
+module Amazonka.ChimeSdkMeetings.ListAttendees
+  ( -- * Creating a Request
+    ListAttendees (..),
+    newListAttendees,
+
+    -- * Request Lenses
+    listAttendees_maxResults,
+    listAttendees_nextToken,
+    listAttendees_meetingId,
+
+    -- * Destructuring the Response
+    ListAttendeesResponse (..),
+    newListAttendeesResponse,
+
+    -- * Response Lenses
+    listAttendeesResponse_attendees,
+    listAttendeesResponse_nextToken,
+    listAttendeesResponse_httpStatus,
+  )
+where
+
+import Amazonka.ChimeSdkMeetings.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:/ 'newListAttendees' smart constructor.
+data ListAttendees = ListAttendees'
+  { -- | The maximum number of results to return in a single call.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The token to use to retrieve the next page of results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Chime SDK meeting ID.
+    meetingId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListAttendees' 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', 'listAttendees_maxResults' - The maximum number of results to return in a single call.
+--
+-- 'nextToken', 'listAttendees_nextToken' - The token to use to retrieve the next page of results.
+--
+-- 'meetingId', 'listAttendees_meetingId' - The Amazon Chime SDK meeting ID.
+newListAttendees ::
+  -- | 'meetingId'
+  Prelude.Text ->
+  ListAttendees
+newListAttendees pMeetingId_ =
+  ListAttendees'
+    { maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      meetingId = pMeetingId_
+    }
+
+-- | The maximum number of results to return in a single call.
+listAttendees_maxResults :: Lens.Lens' ListAttendees (Prelude.Maybe Prelude.Natural)
+listAttendees_maxResults = Lens.lens (\ListAttendees' {maxResults} -> maxResults) (\s@ListAttendees' {} a -> s {maxResults = a} :: ListAttendees)
+
+-- | The token to use to retrieve the next page of results.
+listAttendees_nextToken :: Lens.Lens' ListAttendees (Prelude.Maybe Prelude.Text)
+listAttendees_nextToken = Lens.lens (\ListAttendees' {nextToken} -> nextToken) (\s@ListAttendees' {} a -> s {nextToken = a} :: ListAttendees)
+
+-- | The Amazon Chime SDK meeting ID.
+listAttendees_meetingId :: Lens.Lens' ListAttendees Prelude.Text
+listAttendees_meetingId = Lens.lens (\ListAttendees' {meetingId} -> meetingId) (\s@ListAttendees' {} a -> s {meetingId = a} :: ListAttendees)
+
+instance Core.AWSRequest ListAttendees where
+  type
+    AWSResponse ListAttendees =
+      ListAttendeesResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListAttendeesResponse'
+            Prelude.<$> (x Data..?> "Attendees" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "NextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListAttendees where
+  hashWithSalt _salt ListAttendees' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` meetingId
+
+instance Prelude.NFData ListAttendees where
+  rnf ListAttendees' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf meetingId
+
+instance Data.ToHeaders ListAttendees where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath ListAttendees where
+  toPath ListAttendees' {..} =
+    Prelude.mconcat
+      ["/meetings/", Data.toBS meetingId, "/attendees"]
+
+instance Data.ToQuery ListAttendees where
+  toQuery ListAttendees' {..} =
+    Prelude.mconcat
+      [ "max-results" Data.=: maxResults,
+        "next-token" Data.=: nextToken
+      ]
+
+-- | /See:/ 'newListAttendeesResponse' smart constructor.
+data ListAttendeesResponse = ListAttendeesResponse'
+  { -- | The Amazon Chime SDK attendee information.
+    attendees :: Prelude.Maybe [Attendee],
+    -- | The token to use to retrieve the next page of results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListAttendeesResponse' 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:
+--
+-- 'attendees', 'listAttendeesResponse_attendees' - The Amazon Chime SDK attendee information.
+--
+-- 'nextToken', 'listAttendeesResponse_nextToken' - The token to use to retrieve the next page of results.
+--
+-- 'httpStatus', 'listAttendeesResponse_httpStatus' - The response's http status code.
+newListAttendeesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListAttendeesResponse
+newListAttendeesResponse pHttpStatus_ =
+  ListAttendeesResponse'
+    { attendees = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The Amazon Chime SDK attendee information.
+listAttendeesResponse_attendees :: Lens.Lens' ListAttendeesResponse (Prelude.Maybe [Attendee])
+listAttendeesResponse_attendees = Lens.lens (\ListAttendeesResponse' {attendees} -> attendees) (\s@ListAttendeesResponse' {} a -> s {attendees = a} :: ListAttendeesResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The token to use to retrieve the next page of results.
+listAttendeesResponse_nextToken :: Lens.Lens' ListAttendeesResponse (Prelude.Maybe Prelude.Text)
+listAttendeesResponse_nextToken = Lens.lens (\ListAttendeesResponse' {nextToken} -> nextToken) (\s@ListAttendeesResponse' {} a -> s {nextToken = a} :: ListAttendeesResponse)
+
+-- | The response's http status code.
+listAttendeesResponse_httpStatus :: Lens.Lens' ListAttendeesResponse Prelude.Int
+listAttendeesResponse_httpStatus = Lens.lens (\ListAttendeesResponse' {httpStatus} -> httpStatus) (\s@ListAttendeesResponse' {} a -> s {httpStatus = a} :: ListAttendeesResponse)
+
+instance Prelude.NFData ListAttendeesResponse where
+  rnf ListAttendeesResponse' {..} =
+    Prelude.rnf attendees
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ChimeSdkMeetings/ListTagsForResource.hs b/gen/Amazonka/ChimeSdkMeetings/ListTagsForResource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ChimeSdkMeetings/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.ChimeSdkMeetings.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)
+--
+-- Returns a list of the tags available for the specified resource.
+module Amazonka.ChimeSdkMeetings.ListTagsForResource
+  ( -- * Creating a Request
+    ListTagsForResource (..),
+    newListTagsForResource,
+
+    -- * Request Lenses
+    listTagsForResource_resourceARN,
+
+    -- * Destructuring the Response
+    ListTagsForResourceResponse (..),
+    newListTagsForResourceResponse,
+
+    -- * Response Lenses
+    listTagsForResourceResponse_tags,
+    listTagsForResourceResponse_httpStatus,
+  )
+where
+
+import Amazonka.ChimeSdkMeetings.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" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListTagsForResource where
+  hashWithSalt _salt ListTagsForResource' {..} =
+    _salt `Prelude.hashWithSalt` resourceARN
+
+instance Prelude.NFData ListTagsForResource where
+  rnf ListTagsForResource' {..} =
+    Prelude.rnf resourceARN
+
+instance Data.ToHeaders ListTagsForResource where
+  toHeaders = Prelude.const Prelude.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 tags requested for the specified resource.
+    tags :: Prelude.Maybe [Tag],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListTagsForResourceResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'tags', 'listTagsForResourceResponse_tags' - The tags requested for the specified resource.
+--
+-- 'httpStatus', 'listTagsForResourceResponse_httpStatus' - The response's http status code.
+newListTagsForResourceResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListTagsForResourceResponse
+newListTagsForResourceResponse pHttpStatus_ =
+  ListTagsForResourceResponse'
+    { tags =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The tags requested for the specified resource.
+listTagsForResourceResponse_tags :: Lens.Lens' ListTagsForResourceResponse (Prelude.Maybe [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/ChimeSdkMeetings/StartMeetingTranscription.hs b/gen/Amazonka/ChimeSdkMeetings/StartMeetingTranscription.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ChimeSdkMeetings/StartMeetingTranscription.hs
@@ -0,0 +1,156 @@
+{-# 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.ChimeSdkMeetings.StartMeetingTranscription
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Starts transcription for the specified @meetingId@.
+module Amazonka.ChimeSdkMeetings.StartMeetingTranscription
+  ( -- * Creating a Request
+    StartMeetingTranscription (..),
+    newStartMeetingTranscription,
+
+    -- * Request Lenses
+    startMeetingTranscription_meetingId,
+    startMeetingTranscription_transcriptionConfiguration,
+
+    -- * Destructuring the Response
+    StartMeetingTranscriptionResponse (..),
+    newStartMeetingTranscriptionResponse,
+  )
+where
+
+import Amazonka.ChimeSdkMeetings.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:/ 'newStartMeetingTranscription' smart constructor.
+data StartMeetingTranscription = StartMeetingTranscription'
+  { -- | The unique ID of the meeting being transcribed.
+    meetingId :: Prelude.Text,
+    -- | The configuration for the current transcription operation. Must contain
+    -- @EngineTranscribeSettings@ or @EngineTranscribeMedicalSettings@.
+    transcriptionConfiguration :: TranscriptionConfiguration
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StartMeetingTranscription' 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:
+--
+-- 'meetingId', 'startMeetingTranscription_meetingId' - The unique ID of the meeting being transcribed.
+--
+-- 'transcriptionConfiguration', 'startMeetingTranscription_transcriptionConfiguration' - The configuration for the current transcription operation. Must contain
+-- @EngineTranscribeSettings@ or @EngineTranscribeMedicalSettings@.
+newStartMeetingTranscription ::
+  -- | 'meetingId'
+  Prelude.Text ->
+  -- | 'transcriptionConfiguration'
+  TranscriptionConfiguration ->
+  StartMeetingTranscription
+newStartMeetingTranscription
+  pMeetingId_
+  pTranscriptionConfiguration_ =
+    StartMeetingTranscription'
+      { meetingId = pMeetingId_,
+        transcriptionConfiguration =
+          pTranscriptionConfiguration_
+      }
+
+-- | The unique ID of the meeting being transcribed.
+startMeetingTranscription_meetingId :: Lens.Lens' StartMeetingTranscription Prelude.Text
+startMeetingTranscription_meetingId = Lens.lens (\StartMeetingTranscription' {meetingId} -> meetingId) (\s@StartMeetingTranscription' {} a -> s {meetingId = a} :: StartMeetingTranscription)
+
+-- | The configuration for the current transcription operation. Must contain
+-- @EngineTranscribeSettings@ or @EngineTranscribeMedicalSettings@.
+startMeetingTranscription_transcriptionConfiguration :: Lens.Lens' StartMeetingTranscription TranscriptionConfiguration
+startMeetingTranscription_transcriptionConfiguration = Lens.lens (\StartMeetingTranscription' {transcriptionConfiguration} -> transcriptionConfiguration) (\s@StartMeetingTranscription' {} a -> s {transcriptionConfiguration = a} :: StartMeetingTranscription)
+
+instance Core.AWSRequest StartMeetingTranscription where
+  type
+    AWSResponse StartMeetingTranscription =
+      StartMeetingTranscriptionResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveNull
+      StartMeetingTranscriptionResponse'
+
+instance Prelude.Hashable StartMeetingTranscription where
+  hashWithSalt _salt StartMeetingTranscription' {..} =
+    _salt
+      `Prelude.hashWithSalt` meetingId
+      `Prelude.hashWithSalt` transcriptionConfiguration
+
+instance Prelude.NFData StartMeetingTranscription where
+  rnf StartMeetingTranscription' {..} =
+    Prelude.rnf meetingId
+      `Prelude.seq` Prelude.rnf transcriptionConfiguration
+
+instance Data.ToHeaders StartMeetingTranscription where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToJSON StartMeetingTranscription where
+  toJSON StartMeetingTranscription' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ( "TranscriptionConfiguration"
+                  Data..= transcriptionConfiguration
+              )
+          ]
+      )
+
+instance Data.ToPath StartMeetingTranscription where
+  toPath StartMeetingTranscription' {..} =
+    Prelude.mconcat
+      ["/meetings/", Data.toBS meetingId, "/transcription"]
+
+instance Data.ToQuery StartMeetingTranscription where
+  toQuery =
+    Prelude.const (Prelude.mconcat ["operation=start"])
+
+-- | /See:/ 'newStartMeetingTranscriptionResponse' smart constructor.
+data StartMeetingTranscriptionResponse = StartMeetingTranscriptionResponse'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StartMeetingTranscriptionResponse' 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.
+newStartMeetingTranscriptionResponse ::
+  StartMeetingTranscriptionResponse
+newStartMeetingTranscriptionResponse =
+  StartMeetingTranscriptionResponse'
+
+instance
+  Prelude.NFData
+    StartMeetingTranscriptionResponse
+  where
+  rnf _ = ()
diff --git a/gen/Amazonka/ChimeSdkMeetings/StopMeetingTranscription.hs b/gen/Amazonka/ChimeSdkMeetings/StopMeetingTranscription.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ChimeSdkMeetings/StopMeetingTranscription.hs
@@ -0,0 +1,125 @@
+{-# 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.ChimeSdkMeetings.StopMeetingTranscription
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Stops transcription for the specified @meetingId@.
+module Amazonka.ChimeSdkMeetings.StopMeetingTranscription
+  ( -- * Creating a Request
+    StopMeetingTranscription (..),
+    newStopMeetingTranscription,
+
+    -- * Request Lenses
+    stopMeetingTranscription_meetingId,
+
+    -- * Destructuring the Response
+    StopMeetingTranscriptionResponse (..),
+    newStopMeetingTranscriptionResponse,
+  )
+where
+
+import Amazonka.ChimeSdkMeetings.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:/ 'newStopMeetingTranscription' smart constructor.
+data StopMeetingTranscription = StopMeetingTranscription'
+  { -- | The unique ID of the meeting for which you stop transcription.
+    meetingId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StopMeetingTranscription' 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:
+--
+-- 'meetingId', 'stopMeetingTranscription_meetingId' - The unique ID of the meeting for which you stop transcription.
+newStopMeetingTranscription ::
+  -- | 'meetingId'
+  Prelude.Text ->
+  StopMeetingTranscription
+newStopMeetingTranscription pMeetingId_ =
+  StopMeetingTranscription' {meetingId = pMeetingId_}
+
+-- | The unique ID of the meeting for which you stop transcription.
+stopMeetingTranscription_meetingId :: Lens.Lens' StopMeetingTranscription Prelude.Text
+stopMeetingTranscription_meetingId = Lens.lens (\StopMeetingTranscription' {meetingId} -> meetingId) (\s@StopMeetingTranscription' {} a -> s {meetingId = a} :: StopMeetingTranscription)
+
+instance Core.AWSRequest StopMeetingTranscription where
+  type
+    AWSResponse StopMeetingTranscription =
+      StopMeetingTranscriptionResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveNull
+      StopMeetingTranscriptionResponse'
+
+instance Prelude.Hashable StopMeetingTranscription where
+  hashWithSalt _salt StopMeetingTranscription' {..} =
+    _salt `Prelude.hashWithSalt` meetingId
+
+instance Prelude.NFData StopMeetingTranscription where
+  rnf StopMeetingTranscription' {..} =
+    Prelude.rnf meetingId
+
+instance Data.ToHeaders StopMeetingTranscription where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToJSON StopMeetingTranscription where
+  toJSON = Prelude.const (Data.Object Prelude.mempty)
+
+instance Data.ToPath StopMeetingTranscription where
+  toPath StopMeetingTranscription' {..} =
+    Prelude.mconcat
+      ["/meetings/", Data.toBS meetingId, "/transcription"]
+
+instance Data.ToQuery StopMeetingTranscription where
+  toQuery =
+    Prelude.const (Prelude.mconcat ["operation=stop"])
+
+-- | /See:/ 'newStopMeetingTranscriptionResponse' smart constructor.
+data StopMeetingTranscriptionResponse = StopMeetingTranscriptionResponse'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StopMeetingTranscriptionResponse' 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.
+newStopMeetingTranscriptionResponse ::
+  StopMeetingTranscriptionResponse
+newStopMeetingTranscriptionResponse =
+  StopMeetingTranscriptionResponse'
+
+instance
+  Prelude.NFData
+    StopMeetingTranscriptionResponse
+  where
+  rnf _ = ()
diff --git a/gen/Amazonka/ChimeSdkMeetings/TagResource.hs b/gen/Amazonka/ChimeSdkMeetings/TagResource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ChimeSdkMeetings/TagResource.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.ChimeSdkMeetings.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)
+--
+-- The resource that supports tags.
+module Amazonka.ChimeSdkMeetings.TagResource
+  ( -- * Creating a Request
+    TagResource (..),
+    newTagResource,
+
+    -- * Request Lenses
+    tagResource_resourceARN,
+    tagResource_tags,
+
+    -- * Destructuring the Response
+    TagResourceResponse (..),
+    newTagResourceResponse,
+
+    -- * Response Lenses
+    tagResourceResponse_httpStatus,
+  )
+where
+
+import Amazonka.ChimeSdkMeetings.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 ARN of the resource.
+    resourceARN :: Prelude.Text,
+    -- | Lists the requested tags.
+    tags :: [Tag]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TagResource' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'resourceARN', 'tagResource_resourceARN' - The ARN of the resource.
+--
+-- 'tags', 'tagResource_tags' - Lists the requested tags.
+newTagResource ::
+  -- | 'resourceARN'
+  Prelude.Text ->
+  TagResource
+newTagResource pResourceARN_ =
+  TagResource'
+    { resourceARN = pResourceARN_,
+      tags = Prelude.mempty
+    }
+
+-- | The ARN of the resource.
+tagResource_resourceARN :: Lens.Lens' TagResource Prelude.Text
+tagResource_resourceARN = Lens.lens (\TagResource' {resourceARN} -> resourceARN) (\s@TagResource' {} a -> s {resourceARN = a} :: TagResource)
+
+-- | Lists the requested tags.
+tagResource_tags :: Lens.Lens' TagResource [Tag]
+tagResource_tags = Lens.lens (\TagResource' {tags} -> tags) (\s@TagResource' {} a -> s {tags = a} :: TagResource) Prelude.. Lens.coerced
+
+instance Core.AWSRequest TagResource where
+  type AWSResponse TagResource = TagResourceResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          TagResourceResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable TagResource where
+  hashWithSalt _salt TagResource' {..} =
+    _salt
+      `Prelude.hashWithSalt` resourceARN
+      `Prelude.hashWithSalt` tags
+
+instance Prelude.NFData TagResource where
+  rnf TagResource' {..} =
+    Prelude.rnf resourceARN
+      `Prelude.seq` Prelude.rnf tags
+
+instance Data.ToHeaders TagResource where
+  toHeaders = Prelude.const Prelude.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'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TagResourceResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'tagResourceResponse_httpStatus' - The response's http status code.
+newTagResourceResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  TagResourceResponse
+newTagResourceResponse pHttpStatus_ =
+  TagResourceResponse' {httpStatus = pHttpStatus_}
+
+-- | The response's http status code.
+tagResourceResponse_httpStatus :: Lens.Lens' TagResourceResponse Prelude.Int
+tagResourceResponse_httpStatus = Lens.lens (\TagResourceResponse' {httpStatus} -> httpStatus) (\s@TagResourceResponse' {} a -> s {httpStatus = a} :: TagResourceResponse)
+
+instance Prelude.NFData TagResourceResponse where
+  rnf TagResourceResponse' {..} = Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ChimeSdkMeetings/Types.hs b/gen/Amazonka/ChimeSdkMeetings/Types.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ChimeSdkMeetings/Types.hs
@@ -0,0 +1,388 @@
+{-# 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.ChimeSdkMeetings.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.ChimeSdkMeetings.Types
+  ( -- * Service Configuration
+    defaultService,
+
+    -- * Errors
+    _BadRequestException,
+    _ConflictException,
+    _ForbiddenException,
+    _LimitExceededException,
+    _NotFoundException,
+    _ResourceNotFoundException,
+    _ServiceFailureException,
+    _ServiceUnavailableException,
+    _ThrottlingException,
+    _TooManyTagsException,
+    _UnauthorizedException,
+    _UnprocessableEntityException,
+
+    -- * MediaCapabilities
+    MediaCapabilities (..),
+
+    -- * MeetingFeatureStatus
+    MeetingFeatureStatus (..),
+
+    -- * TranscribeContentIdentificationType
+    TranscribeContentIdentificationType (..),
+
+    -- * TranscribeContentRedactionType
+    TranscribeContentRedactionType (..),
+
+    -- * TranscribeLanguageCode
+    TranscribeLanguageCode (..),
+
+    -- * TranscribeMedicalContentIdentificationType
+    TranscribeMedicalContentIdentificationType (..),
+
+    -- * TranscribeMedicalLanguageCode
+    TranscribeMedicalLanguageCode (..),
+
+    -- * TranscribeMedicalRegion
+    TranscribeMedicalRegion (..),
+
+    -- * TranscribeMedicalSpecialty
+    TranscribeMedicalSpecialty (..),
+
+    -- * TranscribeMedicalType
+    TranscribeMedicalType (..),
+
+    -- * TranscribePartialResultsStability
+    TranscribePartialResultsStability (..),
+
+    -- * TranscribeRegion
+    TranscribeRegion (..),
+
+    -- * TranscribeVocabularyFilterMethod
+    TranscribeVocabularyFilterMethod (..),
+
+    -- * Attendee
+    Attendee (..),
+    newAttendee,
+    attendee_attendeeId,
+    attendee_capabilities,
+    attendee_externalUserId,
+    attendee_joinToken,
+
+    -- * AttendeeCapabilities
+    AttendeeCapabilities (..),
+    newAttendeeCapabilities,
+    attendeeCapabilities_audio,
+    attendeeCapabilities_video,
+    attendeeCapabilities_content,
+
+    -- * AttendeeIdItem
+    AttendeeIdItem (..),
+    newAttendeeIdItem,
+    attendeeIdItem_attendeeId,
+
+    -- * AudioFeatures
+    AudioFeatures (..),
+    newAudioFeatures,
+    audioFeatures_echoReduction,
+
+    -- * CreateAttendeeError
+    CreateAttendeeError (..),
+    newCreateAttendeeError,
+    createAttendeeError_errorCode,
+    createAttendeeError_errorMessage,
+    createAttendeeError_externalUserId,
+
+    -- * CreateAttendeeRequestItem
+    CreateAttendeeRequestItem (..),
+    newCreateAttendeeRequestItem,
+    createAttendeeRequestItem_capabilities,
+    createAttendeeRequestItem_externalUserId,
+
+    -- * EngineTranscribeMedicalSettings
+    EngineTranscribeMedicalSettings (..),
+    newEngineTranscribeMedicalSettings,
+    engineTranscribeMedicalSettings_contentIdentificationType,
+    engineTranscribeMedicalSettings_region,
+    engineTranscribeMedicalSettings_vocabularyName,
+    engineTranscribeMedicalSettings_languageCode,
+    engineTranscribeMedicalSettings_specialty,
+    engineTranscribeMedicalSettings_type,
+
+    -- * EngineTranscribeSettings
+    EngineTranscribeSettings (..),
+    newEngineTranscribeSettings,
+    engineTranscribeSettings_contentIdentificationType,
+    engineTranscribeSettings_contentRedactionType,
+    engineTranscribeSettings_enablePartialResultsStabilization,
+    engineTranscribeSettings_identifyLanguage,
+    engineTranscribeSettings_languageCode,
+    engineTranscribeSettings_languageModelName,
+    engineTranscribeSettings_languageOptions,
+    engineTranscribeSettings_partialResultsStability,
+    engineTranscribeSettings_piiEntityTypes,
+    engineTranscribeSettings_preferredLanguage,
+    engineTranscribeSettings_region,
+    engineTranscribeSettings_vocabularyFilterMethod,
+    engineTranscribeSettings_vocabularyFilterName,
+    engineTranscribeSettings_vocabularyName,
+
+    -- * MediaPlacement
+    MediaPlacement (..),
+    newMediaPlacement,
+    mediaPlacement_audioFallbackUrl,
+    mediaPlacement_audioHostUrl,
+    mediaPlacement_eventIngestionUrl,
+    mediaPlacement_screenDataUrl,
+    mediaPlacement_screenSharingUrl,
+    mediaPlacement_screenViewingUrl,
+    mediaPlacement_signalingUrl,
+    mediaPlacement_turnControlUrl,
+
+    -- * Meeting
+    Meeting (..),
+    newMeeting,
+    meeting_externalMeetingId,
+    meeting_mediaPlacement,
+    meeting_mediaRegion,
+    meeting_meetingArn,
+    meeting_meetingFeatures,
+    meeting_meetingHostId,
+    meeting_meetingId,
+    meeting_primaryMeetingId,
+    meeting_tenantIds,
+
+    -- * MeetingFeaturesConfiguration
+    MeetingFeaturesConfiguration (..),
+    newMeetingFeaturesConfiguration,
+    meetingFeaturesConfiguration_audio,
+
+    -- * NotificationsConfiguration
+    NotificationsConfiguration (..),
+    newNotificationsConfiguration,
+    notificationsConfiguration_lambdaFunctionArn,
+    notificationsConfiguration_snsTopicArn,
+    notificationsConfiguration_sqsQueueArn,
+
+    -- * Tag
+    Tag (..),
+    newTag,
+    tag_key,
+    tag_value,
+
+    -- * TranscriptionConfiguration
+    TranscriptionConfiguration (..),
+    newTranscriptionConfiguration,
+    transcriptionConfiguration_engineTranscribeMedicalSettings,
+    transcriptionConfiguration_engineTranscribeSettings,
+  )
+where
+
+import Amazonka.ChimeSdkMeetings.Types.Attendee
+import Amazonka.ChimeSdkMeetings.Types.AttendeeCapabilities
+import Amazonka.ChimeSdkMeetings.Types.AttendeeIdItem
+import Amazonka.ChimeSdkMeetings.Types.AudioFeatures
+import Amazonka.ChimeSdkMeetings.Types.CreateAttendeeError
+import Amazonka.ChimeSdkMeetings.Types.CreateAttendeeRequestItem
+import Amazonka.ChimeSdkMeetings.Types.EngineTranscribeMedicalSettings
+import Amazonka.ChimeSdkMeetings.Types.EngineTranscribeSettings
+import Amazonka.ChimeSdkMeetings.Types.MediaCapabilities
+import Amazonka.ChimeSdkMeetings.Types.MediaPlacement
+import Amazonka.ChimeSdkMeetings.Types.Meeting
+import Amazonka.ChimeSdkMeetings.Types.MeetingFeatureStatus
+import Amazonka.ChimeSdkMeetings.Types.MeetingFeaturesConfiguration
+import Amazonka.ChimeSdkMeetings.Types.NotificationsConfiguration
+import Amazonka.ChimeSdkMeetings.Types.Tag
+import Amazonka.ChimeSdkMeetings.Types.TranscribeContentIdentificationType
+import Amazonka.ChimeSdkMeetings.Types.TranscribeContentRedactionType
+import Amazonka.ChimeSdkMeetings.Types.TranscribeLanguageCode
+import Amazonka.ChimeSdkMeetings.Types.TranscribeMedicalContentIdentificationType
+import Amazonka.ChimeSdkMeetings.Types.TranscribeMedicalLanguageCode
+import Amazonka.ChimeSdkMeetings.Types.TranscribeMedicalRegion
+import Amazonka.ChimeSdkMeetings.Types.TranscribeMedicalSpecialty
+import Amazonka.ChimeSdkMeetings.Types.TranscribeMedicalType
+import Amazonka.ChimeSdkMeetings.Types.TranscribePartialResultsStability
+import Amazonka.ChimeSdkMeetings.Types.TranscribeRegion
+import Amazonka.ChimeSdkMeetings.Types.TranscribeVocabularyFilterMethod
+import Amazonka.ChimeSdkMeetings.Types.TranscriptionConfiguration
+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-07-15@ of the Amazon Chime SDK Meetings SDK configuration.
+defaultService :: Core.Service
+defaultService =
+  Core.Service
+    { Core.abbrev = "ChimeSdkMeetings",
+      Core.signer = Sign.v4,
+      Core.endpointPrefix = "meetings-chime",
+      Core.signingName = "chime",
+      Core.version = "2021-07-15",
+      Core.s3AddressingStyle = Core.S3AddressingStyleAuto,
+      Core.endpoint = Core.defaultEndpoint defaultService,
+      Core.timeout = Prelude.Just 70,
+      Core.check = Core.statusSuccess,
+      Core.error = Core.parseJSONError "ChimeSdkMeetings",
+      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
+
+-- | Multiple instances of the same request have been made simultaneously.
+_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.
+_LimitExceededException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_LimitExceededException =
+  Core._MatchServiceError
+    defaultService
+    "LimitExceededException"
+    Prelude.. Core.hasStatus 400
+
+-- | One or more of the resources in the request does not exist in the
+-- system.
+_NotFoundException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_NotFoundException =
+  Core._MatchServiceError
+    defaultService
+    "NotFoundException"
+    Prelude.. Core.hasStatus 404
+
+-- | The resource that you want to tag couldn\'t be found.
+_ResourceNotFoundException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ResourceNotFoundException =
+  Core._MatchServiceError
+    defaultService
+    "ResourceNotFoundException"
+    Prelude.. Core.hasStatus 404
+
+-- | 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 number of customer requests exceeds the request rate limit.
+_ThrottlingException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ThrottlingException =
+  Core._MatchServiceError
+    defaultService
+    "ThrottlingException"
+    Prelude.. Core.hasStatus 429
+
+-- | Too many tags were added to the specified resource.
+_TooManyTagsException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_TooManyTagsException =
+  Core._MatchServiceError
+    defaultService
+    "TooManyTagsException"
+    Prelude.. Core.hasStatus 400
+
+-- | The user isn\'t authorized to request a resource.
+_UnauthorizedException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_UnauthorizedException =
+  Core._MatchServiceError
+    defaultService
+    "UnauthorizedException"
+    Prelude.. Core.hasStatus 401
+
+-- | The request was well-formed but was unable to be followed due to
+-- semantic errors.
+_UnprocessableEntityException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_UnprocessableEntityException =
+  Core._MatchServiceError
+    defaultService
+    "UnprocessableEntityException"
+    Prelude.. Core.hasStatus 422
diff --git a/gen/Amazonka/ChimeSdkMeetings/Types/Attendee.hs b/gen/Amazonka/ChimeSdkMeetings/Types/Attendee.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ChimeSdkMeetings/Types/Attendee.hs
@@ -0,0 +1,192 @@
+{-# 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.ChimeSdkMeetings.Types.Attendee
+-- 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.ChimeSdkMeetings.Types.Attendee where
+
+import Amazonka.ChimeSdkMeetings.Types.AttendeeCapabilities
+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 Amazon Chime SDK meeting attendee. Includes a unique @AttendeeId@ and
+-- @JoinToken@. The @JoinToken@ allows a client to authenticate and join as
+-- the specified attendee. The @JoinToken@ expires when the meeting ends,
+-- or when DeleteAttendee is called. After that, the attendee is unable to
+-- join the meeting.
+--
+-- We recommend securely transferring each @JoinToken@ from your server
+-- application to the client so that no other client has access to the
+-- token except for the one authorized to represent the attendee.
+--
+-- /See:/ 'newAttendee' smart constructor.
+data Attendee = Attendee'
+  { -- | The Amazon Chime SDK attendee ID.
+    attendeeId :: Prelude.Maybe Prelude.Text,
+    -- | The capabilities assigned to an attendee: audio, video, or content.
+    --
+    -- You use the capabilities with a set of values that control what the
+    -- capabilities can do, such as @SendReceive@ data. For more information
+    -- about those values, see .
+    --
+    -- When using capabilities, be aware of these corner cases:
+    --
+    -- -   You can\'t set @content@ capabilities to @SendReceive@ or @Receive@
+    --     unless you also set @video@ capabilities to @SendReceive@ or
+    --     @Receive@. If you don\'t set the @video@ capability to receive, the
+    --     response will contain an HTTP 400 Bad Request status code. However,
+    --     you can set your @video@ capability to receive and you set your
+    --     @content@ capability to not receive.
+    --
+    -- -   When you change an @audio@ capability from @None@ or @Receive@ to
+    --     @Send@ or @SendReceive@ , and if the attendee left their microphone
+    --     unmuted, audio will flow from the attendee to the other meeting
+    --     participants.
+    --
+    -- -   When you change a @video@ or @content@ capability from @None@ or
+    --     @Receive@ to @Send@ or @SendReceive@ , and if the attendee turned on
+    --     their video or content streams, remote attendess can receive those
+    --     streams, but only after media renegotiation between the client and
+    --     the Amazon Chime back-end server.
+    capabilities :: Prelude.Maybe AttendeeCapabilities,
+    -- | The Amazon Chime SDK external user ID. An idempotency token. Links the
+    -- attendee to an identity managed by a builder application.
+    externalUserId :: Prelude.Maybe (Data.Sensitive Prelude.Text),
+    -- | The join token used by the Amazon Chime SDK attendee.
+    joinToken :: Prelude.Maybe (Data.Sensitive Prelude.Text)
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Attendee' 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:
+--
+-- 'attendeeId', 'attendee_attendeeId' - The Amazon Chime SDK attendee ID.
+--
+-- 'capabilities', 'attendee_capabilities' - The capabilities assigned to an attendee: audio, video, or content.
+--
+-- You use the capabilities with a set of values that control what the
+-- capabilities can do, such as @SendReceive@ data. For more information
+-- about those values, see .
+--
+-- When using capabilities, be aware of these corner cases:
+--
+-- -   You can\'t set @content@ capabilities to @SendReceive@ or @Receive@
+--     unless you also set @video@ capabilities to @SendReceive@ or
+--     @Receive@. If you don\'t set the @video@ capability to receive, the
+--     response will contain an HTTP 400 Bad Request status code. However,
+--     you can set your @video@ capability to receive and you set your
+--     @content@ capability to not receive.
+--
+-- -   When you change an @audio@ capability from @None@ or @Receive@ to
+--     @Send@ or @SendReceive@ , and if the attendee left their microphone
+--     unmuted, audio will flow from the attendee to the other meeting
+--     participants.
+--
+-- -   When you change a @video@ or @content@ capability from @None@ or
+--     @Receive@ to @Send@ or @SendReceive@ , and if the attendee turned on
+--     their video or content streams, remote attendess can receive those
+--     streams, but only after media renegotiation between the client and
+--     the Amazon Chime back-end server.
+--
+-- 'externalUserId', 'attendee_externalUserId' - The Amazon Chime SDK external user ID. An idempotency token. Links the
+-- attendee to an identity managed by a builder application.
+--
+-- 'joinToken', 'attendee_joinToken' - The join token used by the Amazon Chime SDK attendee.
+newAttendee ::
+  Attendee
+newAttendee =
+  Attendee'
+    { attendeeId = Prelude.Nothing,
+      capabilities = Prelude.Nothing,
+      externalUserId = Prelude.Nothing,
+      joinToken = Prelude.Nothing
+    }
+
+-- | The Amazon Chime SDK attendee ID.
+attendee_attendeeId :: Lens.Lens' Attendee (Prelude.Maybe Prelude.Text)
+attendee_attendeeId = Lens.lens (\Attendee' {attendeeId} -> attendeeId) (\s@Attendee' {} a -> s {attendeeId = a} :: Attendee)
+
+-- | The capabilities assigned to an attendee: audio, video, or content.
+--
+-- You use the capabilities with a set of values that control what the
+-- capabilities can do, such as @SendReceive@ data. For more information
+-- about those values, see .
+--
+-- When using capabilities, be aware of these corner cases:
+--
+-- -   You can\'t set @content@ capabilities to @SendReceive@ or @Receive@
+--     unless you also set @video@ capabilities to @SendReceive@ or
+--     @Receive@. If you don\'t set the @video@ capability to receive, the
+--     response will contain an HTTP 400 Bad Request status code. However,
+--     you can set your @video@ capability to receive and you set your
+--     @content@ capability to not receive.
+--
+-- -   When you change an @audio@ capability from @None@ or @Receive@ to
+--     @Send@ or @SendReceive@ , and if the attendee left their microphone
+--     unmuted, audio will flow from the attendee to the other meeting
+--     participants.
+--
+-- -   When you change a @video@ or @content@ capability from @None@ or
+--     @Receive@ to @Send@ or @SendReceive@ , and if the attendee turned on
+--     their video or content streams, remote attendess can receive those
+--     streams, but only after media renegotiation between the client and
+--     the Amazon Chime back-end server.
+attendee_capabilities :: Lens.Lens' Attendee (Prelude.Maybe AttendeeCapabilities)
+attendee_capabilities = Lens.lens (\Attendee' {capabilities} -> capabilities) (\s@Attendee' {} a -> s {capabilities = a} :: Attendee)
+
+-- | The Amazon Chime SDK external user ID. An idempotency token. Links the
+-- attendee to an identity managed by a builder application.
+attendee_externalUserId :: Lens.Lens' Attendee (Prelude.Maybe Prelude.Text)
+attendee_externalUserId = Lens.lens (\Attendee' {externalUserId} -> externalUserId) (\s@Attendee' {} a -> s {externalUserId = a} :: Attendee) Prelude.. Lens.mapping Data._Sensitive
+
+-- | The join token used by the Amazon Chime SDK attendee.
+attendee_joinToken :: Lens.Lens' Attendee (Prelude.Maybe Prelude.Text)
+attendee_joinToken = Lens.lens (\Attendee' {joinToken} -> joinToken) (\s@Attendee' {} a -> s {joinToken = a} :: Attendee) Prelude.. Lens.mapping Data._Sensitive
+
+instance Data.FromJSON Attendee where
+  parseJSON =
+    Data.withObject
+      "Attendee"
+      ( \x ->
+          Attendee'
+            Prelude.<$> (x Data..:? "AttendeeId")
+            Prelude.<*> (x Data..:? "Capabilities")
+            Prelude.<*> (x Data..:? "ExternalUserId")
+            Prelude.<*> (x Data..:? "JoinToken")
+      )
+
+instance Prelude.Hashable Attendee where
+  hashWithSalt _salt Attendee' {..} =
+    _salt
+      `Prelude.hashWithSalt` attendeeId
+      `Prelude.hashWithSalt` capabilities
+      `Prelude.hashWithSalt` externalUserId
+      `Prelude.hashWithSalt` joinToken
+
+instance Prelude.NFData Attendee where
+  rnf Attendee' {..} =
+    Prelude.rnf attendeeId
+      `Prelude.seq` Prelude.rnf capabilities
+      `Prelude.seq` Prelude.rnf externalUserId
+      `Prelude.seq` Prelude.rnf joinToken
diff --git a/gen/Amazonka/ChimeSdkMeetings/Types/AttendeeCapabilities.hs b/gen/Amazonka/ChimeSdkMeetings/Types/AttendeeCapabilities.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ChimeSdkMeetings/Types/AttendeeCapabilities.hs
@@ -0,0 +1,137 @@
+{-# 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.ChimeSdkMeetings.Types.AttendeeCapabilities
+-- 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.ChimeSdkMeetings.Types.AttendeeCapabilities where
+
+import Amazonka.ChimeSdkMeetings.Types.MediaCapabilities
+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 media capabilities of an attendee: audio, video, or content.
+--
+-- You use the capabilities with a set of values that control what the
+-- capabilities can do, such as @SendReceive@ data. For more information
+-- about those values, see .
+--
+-- When using capabilities, be aware of these corner cases:
+--
+-- -   You can\'t set @content@ capabilities to @SendReceive@ or @Receive@
+--     unless you also set @video@ capabilities to @SendReceive@ or
+--     @Receive@. If you don\'t set the @video@ capability to receive, the
+--     response will contain an HTTP 400 Bad Request status code. However,
+--     you can set your @video@ capability to receive and you set your
+--     @content@ capability to not receive.
+--
+-- -   When you change an @audio@ capability from @None@ or @Receive@ to
+--     @Send@ or @SendReceive@ , and if the attendee left their microphone
+--     unmuted, audio will flow from the attendee to the other meeting
+--     participants.
+--
+-- -   When you change a @video@ or @content@ capability from @None@ or
+--     @Receive@ to @Send@ or @SendReceive@ , and if the attendee turned on
+--     their video or content streams, remote attendess can receive those
+--     streams, but only after media renegotiation between the client and
+--     the Amazon Chime back-end server.
+--
+-- /See:/ 'newAttendeeCapabilities' smart constructor.
+data AttendeeCapabilities = AttendeeCapabilities'
+  { -- | The audio capability assigned to an attendee.
+    audio :: MediaCapabilities,
+    -- | The video capability assigned to an attendee.
+    video :: MediaCapabilities,
+    -- | The content capability assigned to an attendee.
+    content :: MediaCapabilities
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AttendeeCapabilities' 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:
+--
+-- 'audio', 'attendeeCapabilities_audio' - The audio capability assigned to an attendee.
+--
+-- 'video', 'attendeeCapabilities_video' - The video capability assigned to an attendee.
+--
+-- 'content', 'attendeeCapabilities_content' - The content capability assigned to an attendee.
+newAttendeeCapabilities ::
+  -- | 'audio'
+  MediaCapabilities ->
+  -- | 'video'
+  MediaCapabilities ->
+  -- | 'content'
+  MediaCapabilities ->
+  AttendeeCapabilities
+newAttendeeCapabilities pAudio_ pVideo_ pContent_ =
+  AttendeeCapabilities'
+    { audio = pAudio_,
+      video = pVideo_,
+      content = pContent_
+    }
+
+-- | The audio capability assigned to an attendee.
+attendeeCapabilities_audio :: Lens.Lens' AttendeeCapabilities MediaCapabilities
+attendeeCapabilities_audio = Lens.lens (\AttendeeCapabilities' {audio} -> audio) (\s@AttendeeCapabilities' {} a -> s {audio = a} :: AttendeeCapabilities)
+
+-- | The video capability assigned to an attendee.
+attendeeCapabilities_video :: Lens.Lens' AttendeeCapabilities MediaCapabilities
+attendeeCapabilities_video = Lens.lens (\AttendeeCapabilities' {video} -> video) (\s@AttendeeCapabilities' {} a -> s {video = a} :: AttendeeCapabilities)
+
+-- | The content capability assigned to an attendee.
+attendeeCapabilities_content :: Lens.Lens' AttendeeCapabilities MediaCapabilities
+attendeeCapabilities_content = Lens.lens (\AttendeeCapabilities' {content} -> content) (\s@AttendeeCapabilities' {} a -> s {content = a} :: AttendeeCapabilities)
+
+instance Data.FromJSON AttendeeCapabilities where
+  parseJSON =
+    Data.withObject
+      "AttendeeCapabilities"
+      ( \x ->
+          AttendeeCapabilities'
+            Prelude.<$> (x Data..: "Audio")
+            Prelude.<*> (x Data..: "Video")
+            Prelude.<*> (x Data..: "Content")
+      )
+
+instance Prelude.Hashable AttendeeCapabilities where
+  hashWithSalt _salt AttendeeCapabilities' {..} =
+    _salt
+      `Prelude.hashWithSalt` audio
+      `Prelude.hashWithSalt` video
+      `Prelude.hashWithSalt` content
+
+instance Prelude.NFData AttendeeCapabilities where
+  rnf AttendeeCapabilities' {..} =
+    Prelude.rnf audio
+      `Prelude.seq` Prelude.rnf video
+      `Prelude.seq` Prelude.rnf content
+
+instance Data.ToJSON AttendeeCapabilities where
+  toJSON AttendeeCapabilities' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("Audio" Data..= audio),
+            Prelude.Just ("Video" Data..= video),
+            Prelude.Just ("Content" Data..= content)
+          ]
+      )
diff --git a/gen/Amazonka/ChimeSdkMeetings/Types/AttendeeIdItem.hs b/gen/Amazonka/ChimeSdkMeetings/Types/AttendeeIdItem.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ChimeSdkMeetings/Types/AttendeeIdItem.hs
@@ -0,0 +1,68 @@
+{-# 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.ChimeSdkMeetings.Types.AttendeeIdItem
+-- 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.ChimeSdkMeetings.Types.AttendeeIdItem 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 structure that contains one or more attendee IDs.
+--
+-- /See:/ 'newAttendeeIdItem' smart constructor.
+data AttendeeIdItem = AttendeeIdItem'
+  { -- | A list of one or more attendee IDs.
+    attendeeId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AttendeeIdItem' 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:
+--
+-- 'attendeeId', 'attendeeIdItem_attendeeId' - A list of one or more attendee IDs.
+newAttendeeIdItem ::
+  -- | 'attendeeId'
+  Prelude.Text ->
+  AttendeeIdItem
+newAttendeeIdItem pAttendeeId_ =
+  AttendeeIdItem' {attendeeId = pAttendeeId_}
+
+-- | A list of one or more attendee IDs.
+attendeeIdItem_attendeeId :: Lens.Lens' AttendeeIdItem Prelude.Text
+attendeeIdItem_attendeeId = Lens.lens (\AttendeeIdItem' {attendeeId} -> attendeeId) (\s@AttendeeIdItem' {} a -> s {attendeeId = a} :: AttendeeIdItem)
+
+instance Prelude.Hashable AttendeeIdItem where
+  hashWithSalt _salt AttendeeIdItem' {..} =
+    _salt `Prelude.hashWithSalt` attendeeId
+
+instance Prelude.NFData AttendeeIdItem where
+  rnf AttendeeIdItem' {..} = Prelude.rnf attendeeId
+
+instance Data.ToJSON AttendeeIdItem where
+  toJSON AttendeeIdItem' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("AttendeeId" Data..= attendeeId)]
+      )
diff --git a/gen/Amazonka/ChimeSdkMeetings/Types/AudioFeatures.hs b/gen/Amazonka/ChimeSdkMeetings/Types/AudioFeatures.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ChimeSdkMeetings/Types/AudioFeatures.hs
@@ -0,0 +1,79 @@
+{-# 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.ChimeSdkMeetings.Types.AudioFeatures
+-- 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.ChimeSdkMeetings.Types.AudioFeatures where
+
+import Amazonka.ChimeSdkMeetings.Types.MeetingFeatureStatus
+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 optional category of meeting features that contains audio-specific
+-- configurations, such as operating parameters for Amazon Voice Focus.
+--
+-- /See:/ 'newAudioFeatures' smart constructor.
+data AudioFeatures = AudioFeatures'
+  { -- | Makes echo reduction available to clients who connect to the meeting.
+    echoReduction :: Prelude.Maybe MeetingFeatureStatus
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AudioFeatures' 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:
+--
+-- 'echoReduction', 'audioFeatures_echoReduction' - Makes echo reduction available to clients who connect to the meeting.
+newAudioFeatures ::
+  AudioFeatures
+newAudioFeatures =
+  AudioFeatures' {echoReduction = Prelude.Nothing}
+
+-- | Makes echo reduction available to clients who connect to the meeting.
+audioFeatures_echoReduction :: Lens.Lens' AudioFeatures (Prelude.Maybe MeetingFeatureStatus)
+audioFeatures_echoReduction = Lens.lens (\AudioFeatures' {echoReduction} -> echoReduction) (\s@AudioFeatures' {} a -> s {echoReduction = a} :: AudioFeatures)
+
+instance Data.FromJSON AudioFeatures where
+  parseJSON =
+    Data.withObject
+      "AudioFeatures"
+      ( \x ->
+          AudioFeatures'
+            Prelude.<$> (x Data..:? "EchoReduction")
+      )
+
+instance Prelude.Hashable AudioFeatures where
+  hashWithSalt _salt AudioFeatures' {..} =
+    _salt `Prelude.hashWithSalt` echoReduction
+
+instance Prelude.NFData AudioFeatures where
+  rnf AudioFeatures' {..} = Prelude.rnf echoReduction
+
+instance Data.ToJSON AudioFeatures where
+  toJSON AudioFeatures' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("EchoReduction" Data..=)
+              Prelude.<$> echoReduction
+          ]
+      )
diff --git a/gen/Amazonka/ChimeSdkMeetings/Types/CreateAttendeeError.hs b/gen/Amazonka/ChimeSdkMeetings/Types/CreateAttendeeError.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ChimeSdkMeetings/Types/CreateAttendeeError.hs
@@ -0,0 +1,101 @@
+{-# 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.ChimeSdkMeetings.Types.CreateAttendeeError
+-- 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.ChimeSdkMeetings.Types.CreateAttendeeError 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 list of errors returned when errors are encountered during the
+-- BatchCreateAttendee and CreateAttendee actions. This includes external
+-- user IDs, error codes, and error messages.
+--
+-- /See:/ 'newCreateAttendeeError' smart constructor.
+data CreateAttendeeError = CreateAttendeeError'
+  { -- | The error code.
+    errorCode :: Prelude.Maybe Prelude.Text,
+    -- | The error message.
+    errorMessage :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Chime SDK external user ID. An idempotency token. Links the
+    -- attendee to an identity managed by a builder application.
+    externalUserId :: Prelude.Maybe (Data.Sensitive Prelude.Text)
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateAttendeeError' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'errorCode', 'createAttendeeError_errorCode' - The error code.
+--
+-- 'errorMessage', 'createAttendeeError_errorMessage' - The error message.
+--
+-- 'externalUserId', 'createAttendeeError_externalUserId' - The Amazon Chime SDK external user ID. An idempotency token. Links the
+-- attendee to an identity managed by a builder application.
+newCreateAttendeeError ::
+  CreateAttendeeError
+newCreateAttendeeError =
+  CreateAttendeeError'
+    { errorCode = Prelude.Nothing,
+      errorMessage = Prelude.Nothing,
+      externalUserId = Prelude.Nothing
+    }
+
+-- | The error code.
+createAttendeeError_errorCode :: Lens.Lens' CreateAttendeeError (Prelude.Maybe Prelude.Text)
+createAttendeeError_errorCode = Lens.lens (\CreateAttendeeError' {errorCode} -> errorCode) (\s@CreateAttendeeError' {} a -> s {errorCode = a} :: CreateAttendeeError)
+
+-- | The error message.
+createAttendeeError_errorMessage :: Lens.Lens' CreateAttendeeError (Prelude.Maybe Prelude.Text)
+createAttendeeError_errorMessage = Lens.lens (\CreateAttendeeError' {errorMessage} -> errorMessage) (\s@CreateAttendeeError' {} a -> s {errorMessage = a} :: CreateAttendeeError)
+
+-- | The Amazon Chime SDK external user ID. An idempotency token. Links the
+-- attendee to an identity managed by a builder application.
+createAttendeeError_externalUserId :: Lens.Lens' CreateAttendeeError (Prelude.Maybe Prelude.Text)
+createAttendeeError_externalUserId = Lens.lens (\CreateAttendeeError' {externalUserId} -> externalUserId) (\s@CreateAttendeeError' {} a -> s {externalUserId = a} :: CreateAttendeeError) Prelude.. Lens.mapping Data._Sensitive
+
+instance Data.FromJSON CreateAttendeeError where
+  parseJSON =
+    Data.withObject
+      "CreateAttendeeError"
+      ( \x ->
+          CreateAttendeeError'
+            Prelude.<$> (x Data..:? "ErrorCode")
+            Prelude.<*> (x Data..:? "ErrorMessage")
+            Prelude.<*> (x Data..:? "ExternalUserId")
+      )
+
+instance Prelude.Hashable CreateAttendeeError where
+  hashWithSalt _salt CreateAttendeeError' {..} =
+    _salt
+      `Prelude.hashWithSalt` errorCode
+      `Prelude.hashWithSalt` errorMessage
+      `Prelude.hashWithSalt` externalUserId
+
+instance Prelude.NFData CreateAttendeeError where
+  rnf CreateAttendeeError' {..} =
+    Prelude.rnf errorCode
+      `Prelude.seq` Prelude.rnf errorMessage
+      `Prelude.seq` Prelude.rnf externalUserId
diff --git a/gen/Amazonka/ChimeSdkMeetings/Types/CreateAttendeeRequestItem.hs b/gen/Amazonka/ChimeSdkMeetings/Types/CreateAttendeeRequestItem.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ChimeSdkMeetings/Types/CreateAttendeeRequestItem.hs
@@ -0,0 +1,93 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ChimeSdkMeetings.Types.CreateAttendeeRequestItem
+-- 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.ChimeSdkMeetings.Types.CreateAttendeeRequestItem where
+
+import Amazonka.ChimeSdkMeetings.Types.AttendeeCapabilities
+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 Amazon Chime SDK attendee fields to create, used with the
+-- BatchCreateAttendee action.
+--
+-- /See:/ 'newCreateAttendeeRequestItem' smart constructor.
+data CreateAttendeeRequestItem = CreateAttendeeRequestItem'
+  { -- | A list of one or more capabilities.
+    capabilities :: Prelude.Maybe AttendeeCapabilities,
+    -- | The Amazon Chime SDK external user ID. An idempotency token. Links the
+    -- attendee to an identity managed by a builder application.
+    externalUserId :: Data.Sensitive Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateAttendeeRequestItem' 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:
+--
+-- 'capabilities', 'createAttendeeRequestItem_capabilities' - A list of one or more capabilities.
+--
+-- 'externalUserId', 'createAttendeeRequestItem_externalUserId' - The Amazon Chime SDK external user ID. An idempotency token. Links the
+-- attendee to an identity managed by a builder application.
+newCreateAttendeeRequestItem ::
+  -- | 'externalUserId'
+  Prelude.Text ->
+  CreateAttendeeRequestItem
+newCreateAttendeeRequestItem pExternalUserId_ =
+  CreateAttendeeRequestItem'
+    { capabilities =
+        Prelude.Nothing,
+      externalUserId =
+        Data._Sensitive Lens.# pExternalUserId_
+    }
+
+-- | A list of one or more capabilities.
+createAttendeeRequestItem_capabilities :: Lens.Lens' CreateAttendeeRequestItem (Prelude.Maybe AttendeeCapabilities)
+createAttendeeRequestItem_capabilities = Lens.lens (\CreateAttendeeRequestItem' {capabilities} -> capabilities) (\s@CreateAttendeeRequestItem' {} a -> s {capabilities = a} :: CreateAttendeeRequestItem)
+
+-- | The Amazon Chime SDK external user ID. An idempotency token. Links the
+-- attendee to an identity managed by a builder application.
+createAttendeeRequestItem_externalUserId :: Lens.Lens' CreateAttendeeRequestItem Prelude.Text
+createAttendeeRequestItem_externalUserId = Lens.lens (\CreateAttendeeRequestItem' {externalUserId} -> externalUserId) (\s@CreateAttendeeRequestItem' {} a -> s {externalUserId = a} :: CreateAttendeeRequestItem) Prelude.. Data._Sensitive
+
+instance Prelude.Hashable CreateAttendeeRequestItem where
+  hashWithSalt _salt CreateAttendeeRequestItem' {..} =
+    _salt
+      `Prelude.hashWithSalt` capabilities
+      `Prelude.hashWithSalt` externalUserId
+
+instance Prelude.NFData CreateAttendeeRequestItem where
+  rnf CreateAttendeeRequestItem' {..} =
+    Prelude.rnf capabilities
+      `Prelude.seq` Prelude.rnf externalUserId
+
+instance Data.ToJSON CreateAttendeeRequestItem where
+  toJSON CreateAttendeeRequestItem' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Capabilities" Data..=) Prelude.<$> capabilities,
+            Prelude.Just
+              ("ExternalUserId" Data..= externalUserId)
+          ]
+      )
diff --git a/gen/Amazonka/ChimeSdkMeetings/Types/EngineTranscribeMedicalSettings.hs b/gen/Amazonka/ChimeSdkMeetings/Types/EngineTranscribeMedicalSettings.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ChimeSdkMeetings/Types/EngineTranscribeMedicalSettings.hs
@@ -0,0 +1,162 @@
+{-# 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.ChimeSdkMeetings.Types.EngineTranscribeMedicalSettings
+-- 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.ChimeSdkMeetings.Types.EngineTranscribeMedicalSettings where
+
+import Amazonka.ChimeSdkMeetings.Types.TranscribeMedicalContentIdentificationType
+import Amazonka.ChimeSdkMeetings.Types.TranscribeMedicalLanguageCode
+import Amazonka.ChimeSdkMeetings.Types.TranscribeMedicalRegion
+import Amazonka.ChimeSdkMeetings.Types.TranscribeMedicalSpecialty
+import Amazonka.ChimeSdkMeetings.Types.TranscribeMedicalType
+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
+
+-- | Settings specific to the Amazon Transcribe Medical engine.
+--
+-- /See:/ 'newEngineTranscribeMedicalSettings' smart constructor.
+data EngineTranscribeMedicalSettings = EngineTranscribeMedicalSettings'
+  { -- | Set this field to @PHI@ to identify personal health information in the
+    -- transcription output.
+    contentIdentificationType :: Prelude.Maybe TranscribeMedicalContentIdentificationType,
+    -- | The AWS Region passed to Amazon Transcribe Medical. If you don\'t
+    -- specify a Region, Amazon Chime uses the meeting\'s Region.
+    region :: Prelude.Maybe TranscribeMedicalRegion,
+    -- | The name of the vocabulary passed to Amazon Transcribe Medical.
+    vocabularyName :: Prelude.Maybe Prelude.Text,
+    -- | The language code specified for the Amazon Transcribe Medical engine.
+    languageCode :: TranscribeMedicalLanguageCode,
+    -- | The specialty specified for the Amazon Transcribe Medical engine.
+    specialty :: TranscribeMedicalSpecialty,
+    -- | The type of transcription.
+    type' :: TranscribeMedicalType
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'EngineTranscribeMedicalSettings' 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:
+--
+-- 'contentIdentificationType', 'engineTranscribeMedicalSettings_contentIdentificationType' - Set this field to @PHI@ to identify personal health information in the
+-- transcription output.
+--
+-- 'region', 'engineTranscribeMedicalSettings_region' - The AWS Region passed to Amazon Transcribe Medical. If you don\'t
+-- specify a Region, Amazon Chime uses the meeting\'s Region.
+--
+-- 'vocabularyName', 'engineTranscribeMedicalSettings_vocabularyName' - The name of the vocabulary passed to Amazon Transcribe Medical.
+--
+-- 'languageCode', 'engineTranscribeMedicalSettings_languageCode' - The language code specified for the Amazon Transcribe Medical engine.
+--
+-- 'specialty', 'engineTranscribeMedicalSettings_specialty' - The specialty specified for the Amazon Transcribe Medical engine.
+--
+-- 'type'', 'engineTranscribeMedicalSettings_type' - The type of transcription.
+newEngineTranscribeMedicalSettings ::
+  -- | 'languageCode'
+  TranscribeMedicalLanguageCode ->
+  -- | 'specialty'
+  TranscribeMedicalSpecialty ->
+  -- | 'type''
+  TranscribeMedicalType ->
+  EngineTranscribeMedicalSettings
+newEngineTranscribeMedicalSettings
+  pLanguageCode_
+  pSpecialty_
+  pType_ =
+    EngineTranscribeMedicalSettings'
+      { contentIdentificationType =
+          Prelude.Nothing,
+        region = Prelude.Nothing,
+        vocabularyName = Prelude.Nothing,
+        languageCode = pLanguageCode_,
+        specialty = pSpecialty_,
+        type' = pType_
+      }
+
+-- | Set this field to @PHI@ to identify personal health information in the
+-- transcription output.
+engineTranscribeMedicalSettings_contentIdentificationType :: Lens.Lens' EngineTranscribeMedicalSettings (Prelude.Maybe TranscribeMedicalContentIdentificationType)
+engineTranscribeMedicalSettings_contentIdentificationType = Lens.lens (\EngineTranscribeMedicalSettings' {contentIdentificationType} -> contentIdentificationType) (\s@EngineTranscribeMedicalSettings' {} a -> s {contentIdentificationType = a} :: EngineTranscribeMedicalSettings)
+
+-- | The AWS Region passed to Amazon Transcribe Medical. If you don\'t
+-- specify a Region, Amazon Chime uses the meeting\'s Region.
+engineTranscribeMedicalSettings_region :: Lens.Lens' EngineTranscribeMedicalSettings (Prelude.Maybe TranscribeMedicalRegion)
+engineTranscribeMedicalSettings_region = Lens.lens (\EngineTranscribeMedicalSettings' {region} -> region) (\s@EngineTranscribeMedicalSettings' {} a -> s {region = a} :: EngineTranscribeMedicalSettings)
+
+-- | The name of the vocabulary passed to Amazon Transcribe Medical.
+engineTranscribeMedicalSettings_vocabularyName :: Lens.Lens' EngineTranscribeMedicalSettings (Prelude.Maybe Prelude.Text)
+engineTranscribeMedicalSettings_vocabularyName = Lens.lens (\EngineTranscribeMedicalSettings' {vocabularyName} -> vocabularyName) (\s@EngineTranscribeMedicalSettings' {} a -> s {vocabularyName = a} :: EngineTranscribeMedicalSettings)
+
+-- | The language code specified for the Amazon Transcribe Medical engine.
+engineTranscribeMedicalSettings_languageCode :: Lens.Lens' EngineTranscribeMedicalSettings TranscribeMedicalLanguageCode
+engineTranscribeMedicalSettings_languageCode = Lens.lens (\EngineTranscribeMedicalSettings' {languageCode} -> languageCode) (\s@EngineTranscribeMedicalSettings' {} a -> s {languageCode = a} :: EngineTranscribeMedicalSettings)
+
+-- | The specialty specified for the Amazon Transcribe Medical engine.
+engineTranscribeMedicalSettings_specialty :: Lens.Lens' EngineTranscribeMedicalSettings TranscribeMedicalSpecialty
+engineTranscribeMedicalSettings_specialty = Lens.lens (\EngineTranscribeMedicalSettings' {specialty} -> specialty) (\s@EngineTranscribeMedicalSettings' {} a -> s {specialty = a} :: EngineTranscribeMedicalSettings)
+
+-- | The type of transcription.
+engineTranscribeMedicalSettings_type :: Lens.Lens' EngineTranscribeMedicalSettings TranscribeMedicalType
+engineTranscribeMedicalSettings_type = Lens.lens (\EngineTranscribeMedicalSettings' {type'} -> type') (\s@EngineTranscribeMedicalSettings' {} a -> s {type' = a} :: EngineTranscribeMedicalSettings)
+
+instance
+  Prelude.Hashable
+    EngineTranscribeMedicalSettings
+  where
+  hashWithSalt
+    _salt
+    EngineTranscribeMedicalSettings' {..} =
+      _salt
+        `Prelude.hashWithSalt` contentIdentificationType
+        `Prelude.hashWithSalt` region
+        `Prelude.hashWithSalt` vocabularyName
+        `Prelude.hashWithSalt` languageCode
+        `Prelude.hashWithSalt` specialty
+        `Prelude.hashWithSalt` type'
+
+instance
+  Prelude.NFData
+    EngineTranscribeMedicalSettings
+  where
+  rnf EngineTranscribeMedicalSettings' {..} =
+    Prelude.rnf contentIdentificationType
+      `Prelude.seq` Prelude.rnf region
+      `Prelude.seq` Prelude.rnf vocabularyName
+      `Prelude.seq` Prelude.rnf languageCode
+      `Prelude.seq` Prelude.rnf specialty
+      `Prelude.seq` Prelude.rnf type'
+
+instance Data.ToJSON EngineTranscribeMedicalSettings where
+  toJSON EngineTranscribeMedicalSettings' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("ContentIdentificationType" Data..=)
+              Prelude.<$> contentIdentificationType,
+            ("Region" Data..=) Prelude.<$> region,
+            ("VocabularyName" Data..=)
+              Prelude.<$> vocabularyName,
+            Prelude.Just ("LanguageCode" Data..= languageCode),
+            Prelude.Just ("Specialty" Data..= specialty),
+            Prelude.Just ("Type" Data..= type')
+          ]
+      )
diff --git a/gen/Amazonka/ChimeSdkMeetings/Types/EngineTranscribeSettings.hs b/gen/Amazonka/ChimeSdkMeetings/Types/EngineTranscribeSettings.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ChimeSdkMeetings/Types/EngineTranscribeSettings.hs
@@ -0,0 +1,313 @@
+{-# 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.ChimeSdkMeetings.Types.EngineTranscribeSettings
+-- 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.ChimeSdkMeetings.Types.EngineTranscribeSettings where
+
+import Amazonka.ChimeSdkMeetings.Types.TranscribeContentIdentificationType
+import Amazonka.ChimeSdkMeetings.Types.TranscribeContentRedactionType
+import Amazonka.ChimeSdkMeetings.Types.TranscribeLanguageCode
+import Amazonka.ChimeSdkMeetings.Types.TranscribePartialResultsStability
+import Amazonka.ChimeSdkMeetings.Types.TranscribeRegion
+import Amazonka.ChimeSdkMeetings.Types.TranscribeVocabularyFilterMethod
+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
+
+-- | Settings specific to the Amazon Transcribe engine.
+--
+-- /See:/ 'newEngineTranscribeSettings' smart constructor.
+data EngineTranscribeSettings = EngineTranscribeSettings'
+  { -- | Set this field to @PII@ to identify personally identifiable information
+    -- in the transcription output.
+    contentIdentificationType :: Prelude.Maybe TranscribeContentIdentificationType,
+    -- | Set this field to @PII@ to redact personally identifiable information in
+    -- the transcription output. Content redaction is performed only upon
+    -- complete transcription of the audio segments.
+    --
+    -- You can’t set @ContentRedactionType@ and @ContentIdentificationType@ in
+    -- the same request. If you set both, your request returns a
+    -- @BadRequestException@.
+    contentRedactionType :: Prelude.Maybe TranscribeContentRedactionType,
+    -- | Generates partial transcription results that are less likely to change
+    -- as meeting attendees speak. It does so by only allowing the last few
+    -- words from the partial results to change.
+    enablePartialResultsStabilization :: Prelude.Maybe Prelude.Bool,
+    -- | Automatically identifies the language spoken in media files.
+    identifyLanguage :: Prelude.Maybe Prelude.Bool,
+    -- | The language code specified for the Amazon Transcribe engine.
+    languageCode :: Prelude.Maybe TranscribeLanguageCode,
+    -- | The name of the language model used during transcription.
+    languageModelName :: Prelude.Maybe Prelude.Text,
+    -- | Language codes for the languages that you want to identify. You must
+    -- provide at least 2 codes.
+    languageOptions :: Prelude.Maybe Prelude.Text,
+    -- | The stabity level of a partial results transcription. Determines how
+    -- stable you want the transcription results to be. A higher level means
+    -- the transcription results are less likely to change.
+    partialResultsStability :: Prelude.Maybe TranscribePartialResultsStability,
+    -- | Lists the PII entity types you want to identify or redact. To specify
+    -- entity types, you must enable @ContentIdentificationType@ or
+    -- @ContentRedactionType@.
+    --
+    -- @PIIEntityTypes@ must be comma-separated. The available values are:
+    -- @BANK_ACCOUNT_NUMBER@, @BANK_ROUTING, CREDIT_DEBIT_NUMBER@,
+    -- @CREDIT_DEBIT_CVV@, @CREDIT_DEBIT_EXPIRY@, @PIN@, @EMAIL@, @ADDRESS@,
+    -- @NAME@, @PHONE@, @SSN@, and @ALL@.
+    --
+    -- @PiiEntityTypes@ is an optional parameter with a default value of @ALL@.
+    piiEntityTypes :: Prelude.Maybe Prelude.Text,
+    -- | Language code for the preferred language.
+    preferredLanguage :: Prelude.Maybe TranscribeLanguageCode,
+    -- | The AWS Region passed to Amazon Transcribe. If you don\'t specify a
+    -- Region, Amazon Chime uses the meeting\'s Region.
+    region :: Prelude.Maybe TranscribeRegion,
+    -- | The filtering method passed to Amazon Transcribe.
+    vocabularyFilterMethod :: Prelude.Maybe TranscribeVocabularyFilterMethod,
+    -- | The name of the vocabulary filter passed to Amazon Transcribe.
+    vocabularyFilterName :: Prelude.Maybe Prelude.Text,
+    -- | The name of the vocabulary passed to Amazon Transcribe.
+    vocabularyName :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'EngineTranscribeSettings' 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:
+--
+-- 'contentIdentificationType', 'engineTranscribeSettings_contentIdentificationType' - Set this field to @PII@ to identify personally identifiable information
+-- in the transcription output.
+--
+-- 'contentRedactionType', 'engineTranscribeSettings_contentRedactionType' - Set this field to @PII@ to redact personally identifiable information in
+-- the transcription output. Content redaction is performed only upon
+-- complete transcription of the audio segments.
+--
+-- You can’t set @ContentRedactionType@ and @ContentIdentificationType@ in
+-- the same request. If you set both, your request returns a
+-- @BadRequestException@.
+--
+-- 'enablePartialResultsStabilization', 'engineTranscribeSettings_enablePartialResultsStabilization' - Generates partial transcription results that are less likely to change
+-- as meeting attendees speak. It does so by only allowing the last few
+-- words from the partial results to change.
+--
+-- 'identifyLanguage', 'engineTranscribeSettings_identifyLanguage' - Automatically identifies the language spoken in media files.
+--
+-- 'languageCode', 'engineTranscribeSettings_languageCode' - The language code specified for the Amazon Transcribe engine.
+--
+-- 'languageModelName', 'engineTranscribeSettings_languageModelName' - The name of the language model used during transcription.
+--
+-- 'languageOptions', 'engineTranscribeSettings_languageOptions' - Language codes for the languages that you want to identify. You must
+-- provide at least 2 codes.
+--
+-- 'partialResultsStability', 'engineTranscribeSettings_partialResultsStability' - The stabity level of a partial results transcription. Determines how
+-- stable you want the transcription results to be. A higher level means
+-- the transcription results are less likely to change.
+--
+-- 'piiEntityTypes', 'engineTranscribeSettings_piiEntityTypes' - Lists the PII entity types you want to identify or redact. To specify
+-- entity types, you must enable @ContentIdentificationType@ or
+-- @ContentRedactionType@.
+--
+-- @PIIEntityTypes@ must be comma-separated. The available values are:
+-- @BANK_ACCOUNT_NUMBER@, @BANK_ROUTING, CREDIT_DEBIT_NUMBER@,
+-- @CREDIT_DEBIT_CVV@, @CREDIT_DEBIT_EXPIRY@, @PIN@, @EMAIL@, @ADDRESS@,
+-- @NAME@, @PHONE@, @SSN@, and @ALL@.
+--
+-- @PiiEntityTypes@ is an optional parameter with a default value of @ALL@.
+--
+-- 'preferredLanguage', 'engineTranscribeSettings_preferredLanguage' - Language code for the preferred language.
+--
+-- 'region', 'engineTranscribeSettings_region' - The AWS Region passed to Amazon Transcribe. If you don\'t specify a
+-- Region, Amazon Chime uses the meeting\'s Region.
+--
+-- 'vocabularyFilterMethod', 'engineTranscribeSettings_vocabularyFilterMethod' - The filtering method passed to Amazon Transcribe.
+--
+-- 'vocabularyFilterName', 'engineTranscribeSettings_vocabularyFilterName' - The name of the vocabulary filter passed to Amazon Transcribe.
+--
+-- 'vocabularyName', 'engineTranscribeSettings_vocabularyName' - The name of the vocabulary passed to Amazon Transcribe.
+newEngineTranscribeSettings ::
+  EngineTranscribeSettings
+newEngineTranscribeSettings =
+  EngineTranscribeSettings'
+    { contentIdentificationType =
+        Prelude.Nothing,
+      contentRedactionType = Prelude.Nothing,
+      enablePartialResultsStabilization =
+        Prelude.Nothing,
+      identifyLanguage = Prelude.Nothing,
+      languageCode = Prelude.Nothing,
+      languageModelName = Prelude.Nothing,
+      languageOptions = Prelude.Nothing,
+      partialResultsStability = Prelude.Nothing,
+      piiEntityTypes = Prelude.Nothing,
+      preferredLanguage = Prelude.Nothing,
+      region = Prelude.Nothing,
+      vocabularyFilterMethod = Prelude.Nothing,
+      vocabularyFilterName = Prelude.Nothing,
+      vocabularyName = Prelude.Nothing
+    }
+
+-- | Set this field to @PII@ to identify personally identifiable information
+-- in the transcription output.
+engineTranscribeSettings_contentIdentificationType :: Lens.Lens' EngineTranscribeSettings (Prelude.Maybe TranscribeContentIdentificationType)
+engineTranscribeSettings_contentIdentificationType = Lens.lens (\EngineTranscribeSettings' {contentIdentificationType} -> contentIdentificationType) (\s@EngineTranscribeSettings' {} a -> s {contentIdentificationType = a} :: EngineTranscribeSettings)
+
+-- | Set this field to @PII@ to redact personally identifiable information in
+-- the transcription output. Content redaction is performed only upon
+-- complete transcription of the audio segments.
+--
+-- You can’t set @ContentRedactionType@ and @ContentIdentificationType@ in
+-- the same request. If you set both, your request returns a
+-- @BadRequestException@.
+engineTranscribeSettings_contentRedactionType :: Lens.Lens' EngineTranscribeSettings (Prelude.Maybe TranscribeContentRedactionType)
+engineTranscribeSettings_contentRedactionType = Lens.lens (\EngineTranscribeSettings' {contentRedactionType} -> contentRedactionType) (\s@EngineTranscribeSettings' {} a -> s {contentRedactionType = a} :: EngineTranscribeSettings)
+
+-- | Generates partial transcription results that are less likely to change
+-- as meeting attendees speak. It does so by only allowing the last few
+-- words from the partial results to change.
+engineTranscribeSettings_enablePartialResultsStabilization :: Lens.Lens' EngineTranscribeSettings (Prelude.Maybe Prelude.Bool)
+engineTranscribeSettings_enablePartialResultsStabilization = Lens.lens (\EngineTranscribeSettings' {enablePartialResultsStabilization} -> enablePartialResultsStabilization) (\s@EngineTranscribeSettings' {} a -> s {enablePartialResultsStabilization = a} :: EngineTranscribeSettings)
+
+-- | Automatically identifies the language spoken in media files.
+engineTranscribeSettings_identifyLanguage :: Lens.Lens' EngineTranscribeSettings (Prelude.Maybe Prelude.Bool)
+engineTranscribeSettings_identifyLanguage = Lens.lens (\EngineTranscribeSettings' {identifyLanguage} -> identifyLanguage) (\s@EngineTranscribeSettings' {} a -> s {identifyLanguage = a} :: EngineTranscribeSettings)
+
+-- | The language code specified for the Amazon Transcribe engine.
+engineTranscribeSettings_languageCode :: Lens.Lens' EngineTranscribeSettings (Prelude.Maybe TranscribeLanguageCode)
+engineTranscribeSettings_languageCode = Lens.lens (\EngineTranscribeSettings' {languageCode} -> languageCode) (\s@EngineTranscribeSettings' {} a -> s {languageCode = a} :: EngineTranscribeSettings)
+
+-- | The name of the language model used during transcription.
+engineTranscribeSettings_languageModelName :: Lens.Lens' EngineTranscribeSettings (Prelude.Maybe Prelude.Text)
+engineTranscribeSettings_languageModelName = Lens.lens (\EngineTranscribeSettings' {languageModelName} -> languageModelName) (\s@EngineTranscribeSettings' {} a -> s {languageModelName = a} :: EngineTranscribeSettings)
+
+-- | Language codes for the languages that you want to identify. You must
+-- provide at least 2 codes.
+engineTranscribeSettings_languageOptions :: Lens.Lens' EngineTranscribeSettings (Prelude.Maybe Prelude.Text)
+engineTranscribeSettings_languageOptions = Lens.lens (\EngineTranscribeSettings' {languageOptions} -> languageOptions) (\s@EngineTranscribeSettings' {} a -> s {languageOptions = a} :: EngineTranscribeSettings)
+
+-- | The stabity level of a partial results transcription. Determines how
+-- stable you want the transcription results to be. A higher level means
+-- the transcription results are less likely to change.
+engineTranscribeSettings_partialResultsStability :: Lens.Lens' EngineTranscribeSettings (Prelude.Maybe TranscribePartialResultsStability)
+engineTranscribeSettings_partialResultsStability = Lens.lens (\EngineTranscribeSettings' {partialResultsStability} -> partialResultsStability) (\s@EngineTranscribeSettings' {} a -> s {partialResultsStability = a} :: EngineTranscribeSettings)
+
+-- | Lists the PII entity types you want to identify or redact. To specify
+-- entity types, you must enable @ContentIdentificationType@ or
+-- @ContentRedactionType@.
+--
+-- @PIIEntityTypes@ must be comma-separated. The available values are:
+-- @BANK_ACCOUNT_NUMBER@, @BANK_ROUTING, CREDIT_DEBIT_NUMBER@,
+-- @CREDIT_DEBIT_CVV@, @CREDIT_DEBIT_EXPIRY@, @PIN@, @EMAIL@, @ADDRESS@,
+-- @NAME@, @PHONE@, @SSN@, and @ALL@.
+--
+-- @PiiEntityTypes@ is an optional parameter with a default value of @ALL@.
+engineTranscribeSettings_piiEntityTypes :: Lens.Lens' EngineTranscribeSettings (Prelude.Maybe Prelude.Text)
+engineTranscribeSettings_piiEntityTypes = Lens.lens (\EngineTranscribeSettings' {piiEntityTypes} -> piiEntityTypes) (\s@EngineTranscribeSettings' {} a -> s {piiEntityTypes = a} :: EngineTranscribeSettings)
+
+-- | Language code for the preferred language.
+engineTranscribeSettings_preferredLanguage :: Lens.Lens' EngineTranscribeSettings (Prelude.Maybe TranscribeLanguageCode)
+engineTranscribeSettings_preferredLanguage = Lens.lens (\EngineTranscribeSettings' {preferredLanguage} -> preferredLanguage) (\s@EngineTranscribeSettings' {} a -> s {preferredLanguage = a} :: EngineTranscribeSettings)
+
+-- | The AWS Region passed to Amazon Transcribe. If you don\'t specify a
+-- Region, Amazon Chime uses the meeting\'s Region.
+engineTranscribeSettings_region :: Lens.Lens' EngineTranscribeSettings (Prelude.Maybe TranscribeRegion)
+engineTranscribeSettings_region = Lens.lens (\EngineTranscribeSettings' {region} -> region) (\s@EngineTranscribeSettings' {} a -> s {region = a} :: EngineTranscribeSettings)
+
+-- | The filtering method passed to Amazon Transcribe.
+engineTranscribeSettings_vocabularyFilterMethod :: Lens.Lens' EngineTranscribeSettings (Prelude.Maybe TranscribeVocabularyFilterMethod)
+engineTranscribeSettings_vocabularyFilterMethod = Lens.lens (\EngineTranscribeSettings' {vocabularyFilterMethod} -> vocabularyFilterMethod) (\s@EngineTranscribeSettings' {} a -> s {vocabularyFilterMethod = a} :: EngineTranscribeSettings)
+
+-- | The name of the vocabulary filter passed to Amazon Transcribe.
+engineTranscribeSettings_vocabularyFilterName :: Lens.Lens' EngineTranscribeSettings (Prelude.Maybe Prelude.Text)
+engineTranscribeSettings_vocabularyFilterName = Lens.lens (\EngineTranscribeSettings' {vocabularyFilterName} -> vocabularyFilterName) (\s@EngineTranscribeSettings' {} a -> s {vocabularyFilterName = a} :: EngineTranscribeSettings)
+
+-- | The name of the vocabulary passed to Amazon Transcribe.
+engineTranscribeSettings_vocabularyName :: Lens.Lens' EngineTranscribeSettings (Prelude.Maybe Prelude.Text)
+engineTranscribeSettings_vocabularyName = Lens.lens (\EngineTranscribeSettings' {vocabularyName} -> vocabularyName) (\s@EngineTranscribeSettings' {} a -> s {vocabularyName = a} :: EngineTranscribeSettings)
+
+instance Prelude.Hashable EngineTranscribeSettings where
+  hashWithSalt _salt EngineTranscribeSettings' {..} =
+    _salt
+      `Prelude.hashWithSalt` contentIdentificationType
+      `Prelude.hashWithSalt` contentRedactionType
+      `Prelude.hashWithSalt` enablePartialResultsStabilization
+      `Prelude.hashWithSalt` identifyLanguage
+      `Prelude.hashWithSalt` languageCode
+      `Prelude.hashWithSalt` languageModelName
+      `Prelude.hashWithSalt` languageOptions
+      `Prelude.hashWithSalt` partialResultsStability
+      `Prelude.hashWithSalt` piiEntityTypes
+      `Prelude.hashWithSalt` preferredLanguage
+      `Prelude.hashWithSalt` region
+      `Prelude.hashWithSalt` vocabularyFilterMethod
+      `Prelude.hashWithSalt` vocabularyFilterName
+      `Prelude.hashWithSalt` vocabularyName
+
+instance Prelude.NFData EngineTranscribeSettings where
+  rnf EngineTranscribeSettings' {..} =
+    Prelude.rnf contentIdentificationType
+      `Prelude.seq` Prelude.rnf contentRedactionType
+      `Prelude.seq` Prelude.rnf enablePartialResultsStabilization
+      `Prelude.seq` Prelude.rnf identifyLanguage
+      `Prelude.seq` Prelude.rnf languageCode
+      `Prelude.seq` Prelude.rnf languageModelName
+      `Prelude.seq` Prelude.rnf languageOptions
+      `Prelude.seq` Prelude.rnf partialResultsStability
+      `Prelude.seq` Prelude.rnf piiEntityTypes
+      `Prelude.seq` Prelude.rnf preferredLanguage
+      `Prelude.seq` Prelude.rnf region
+      `Prelude.seq` Prelude.rnf vocabularyFilterMethod
+      `Prelude.seq` Prelude.rnf vocabularyFilterName
+      `Prelude.seq` Prelude.rnf vocabularyName
+
+instance Data.ToJSON EngineTranscribeSettings where
+  toJSON EngineTranscribeSettings' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("ContentIdentificationType" Data..=)
+              Prelude.<$> contentIdentificationType,
+            ("ContentRedactionType" Data..=)
+              Prelude.<$> contentRedactionType,
+            ("EnablePartialResultsStabilization" Data..=)
+              Prelude.<$> enablePartialResultsStabilization,
+            ("IdentifyLanguage" Data..=)
+              Prelude.<$> identifyLanguage,
+            ("LanguageCode" Data..=) Prelude.<$> languageCode,
+            ("LanguageModelName" Data..=)
+              Prelude.<$> languageModelName,
+            ("LanguageOptions" Data..=)
+              Prelude.<$> languageOptions,
+            ("PartialResultsStability" Data..=)
+              Prelude.<$> partialResultsStability,
+            ("PiiEntityTypes" Data..=)
+              Prelude.<$> piiEntityTypes,
+            ("PreferredLanguage" Data..=)
+              Prelude.<$> preferredLanguage,
+            ("Region" Data..=) Prelude.<$> region,
+            ("VocabularyFilterMethod" Data..=)
+              Prelude.<$> vocabularyFilterMethod,
+            ("VocabularyFilterName" Data..=)
+              Prelude.<$> vocabularyFilterName,
+            ("VocabularyName" Data..=)
+              Prelude.<$> vocabularyName
+          ]
+      )
diff --git a/gen/Amazonka/ChimeSdkMeetings/Types/MediaCapabilities.hs b/gen/Amazonka/ChimeSdkMeetings/Types/MediaCapabilities.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ChimeSdkMeetings/Types/MediaCapabilities.hs
@@ -0,0 +1,81 @@
+{-# 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.ChimeSdkMeetings.Types.MediaCapabilities
+-- 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.ChimeSdkMeetings.Types.MediaCapabilities
+  ( MediaCapabilities
+      ( ..,
+        MediaCapabilities_None,
+        MediaCapabilities_Receive,
+        MediaCapabilities_Send,
+        MediaCapabilities_SendReceive
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype MediaCapabilities = MediaCapabilities'
+  { fromMediaCapabilities ::
+      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 MediaCapabilities_None :: MediaCapabilities
+pattern MediaCapabilities_None = MediaCapabilities' "None"
+
+pattern MediaCapabilities_Receive :: MediaCapabilities
+pattern MediaCapabilities_Receive = MediaCapabilities' "Receive"
+
+pattern MediaCapabilities_Send :: MediaCapabilities
+pattern MediaCapabilities_Send = MediaCapabilities' "Send"
+
+pattern MediaCapabilities_SendReceive :: MediaCapabilities
+pattern MediaCapabilities_SendReceive = MediaCapabilities' "SendReceive"
+
+{-# COMPLETE
+  MediaCapabilities_None,
+  MediaCapabilities_Receive,
+  MediaCapabilities_Send,
+  MediaCapabilities_SendReceive,
+  MediaCapabilities'
+  #-}
diff --git a/gen/Amazonka/ChimeSdkMeetings/Types/MediaPlacement.hs b/gen/Amazonka/ChimeSdkMeetings/Types/MediaPlacement.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ChimeSdkMeetings/Types/MediaPlacement.hs
@@ -0,0 +1,157 @@
+{-# 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.ChimeSdkMeetings.Types.MediaPlacement
+-- 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.ChimeSdkMeetings.Types.MediaPlacement 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 set of endpoints used by clients to connect to the media service group
+-- for an Amazon Chime SDK meeting.
+--
+-- /See:/ 'newMediaPlacement' smart constructor.
+data MediaPlacement = MediaPlacement'
+  { -- | The audio fallback URL.
+    audioFallbackUrl :: Prelude.Maybe Prelude.Text,
+    -- | The audio host URL.
+    audioHostUrl :: Prelude.Maybe Prelude.Text,
+    -- | The event ingestion URL.
+    eventIngestionUrl :: Prelude.Maybe Prelude.Text,
+    -- | The screen data URL.
+    screenDataUrl :: Prelude.Maybe Prelude.Text,
+    -- | The screen sharing URL.
+    screenSharingUrl :: Prelude.Maybe Prelude.Text,
+    -- | The screen viewing URL.
+    screenViewingUrl :: Prelude.Maybe Prelude.Text,
+    -- | The signaling URL.
+    signalingUrl :: Prelude.Maybe Prelude.Text,
+    -- | The turn control URL.
+    turnControlUrl :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'MediaPlacement' 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:
+--
+-- 'audioFallbackUrl', 'mediaPlacement_audioFallbackUrl' - The audio fallback URL.
+--
+-- 'audioHostUrl', 'mediaPlacement_audioHostUrl' - The audio host URL.
+--
+-- 'eventIngestionUrl', 'mediaPlacement_eventIngestionUrl' - The event ingestion URL.
+--
+-- 'screenDataUrl', 'mediaPlacement_screenDataUrl' - The screen data URL.
+--
+-- 'screenSharingUrl', 'mediaPlacement_screenSharingUrl' - The screen sharing URL.
+--
+-- 'screenViewingUrl', 'mediaPlacement_screenViewingUrl' - The screen viewing URL.
+--
+-- 'signalingUrl', 'mediaPlacement_signalingUrl' - The signaling URL.
+--
+-- 'turnControlUrl', 'mediaPlacement_turnControlUrl' - The turn control URL.
+newMediaPlacement ::
+  MediaPlacement
+newMediaPlacement =
+  MediaPlacement'
+    { audioFallbackUrl = Prelude.Nothing,
+      audioHostUrl = Prelude.Nothing,
+      eventIngestionUrl = Prelude.Nothing,
+      screenDataUrl = Prelude.Nothing,
+      screenSharingUrl = Prelude.Nothing,
+      screenViewingUrl = Prelude.Nothing,
+      signalingUrl = Prelude.Nothing,
+      turnControlUrl = Prelude.Nothing
+    }
+
+-- | The audio fallback URL.
+mediaPlacement_audioFallbackUrl :: Lens.Lens' MediaPlacement (Prelude.Maybe Prelude.Text)
+mediaPlacement_audioFallbackUrl = Lens.lens (\MediaPlacement' {audioFallbackUrl} -> audioFallbackUrl) (\s@MediaPlacement' {} a -> s {audioFallbackUrl = a} :: MediaPlacement)
+
+-- | The audio host URL.
+mediaPlacement_audioHostUrl :: Lens.Lens' MediaPlacement (Prelude.Maybe Prelude.Text)
+mediaPlacement_audioHostUrl = Lens.lens (\MediaPlacement' {audioHostUrl} -> audioHostUrl) (\s@MediaPlacement' {} a -> s {audioHostUrl = a} :: MediaPlacement)
+
+-- | The event ingestion URL.
+mediaPlacement_eventIngestionUrl :: Lens.Lens' MediaPlacement (Prelude.Maybe Prelude.Text)
+mediaPlacement_eventIngestionUrl = Lens.lens (\MediaPlacement' {eventIngestionUrl} -> eventIngestionUrl) (\s@MediaPlacement' {} a -> s {eventIngestionUrl = a} :: MediaPlacement)
+
+-- | The screen data URL.
+mediaPlacement_screenDataUrl :: Lens.Lens' MediaPlacement (Prelude.Maybe Prelude.Text)
+mediaPlacement_screenDataUrl = Lens.lens (\MediaPlacement' {screenDataUrl} -> screenDataUrl) (\s@MediaPlacement' {} a -> s {screenDataUrl = a} :: MediaPlacement)
+
+-- | The screen sharing URL.
+mediaPlacement_screenSharingUrl :: Lens.Lens' MediaPlacement (Prelude.Maybe Prelude.Text)
+mediaPlacement_screenSharingUrl = Lens.lens (\MediaPlacement' {screenSharingUrl} -> screenSharingUrl) (\s@MediaPlacement' {} a -> s {screenSharingUrl = a} :: MediaPlacement)
+
+-- | The screen viewing URL.
+mediaPlacement_screenViewingUrl :: Lens.Lens' MediaPlacement (Prelude.Maybe Prelude.Text)
+mediaPlacement_screenViewingUrl = Lens.lens (\MediaPlacement' {screenViewingUrl} -> screenViewingUrl) (\s@MediaPlacement' {} a -> s {screenViewingUrl = a} :: MediaPlacement)
+
+-- | The signaling URL.
+mediaPlacement_signalingUrl :: Lens.Lens' MediaPlacement (Prelude.Maybe Prelude.Text)
+mediaPlacement_signalingUrl = Lens.lens (\MediaPlacement' {signalingUrl} -> signalingUrl) (\s@MediaPlacement' {} a -> s {signalingUrl = a} :: MediaPlacement)
+
+-- | The turn control URL.
+mediaPlacement_turnControlUrl :: Lens.Lens' MediaPlacement (Prelude.Maybe Prelude.Text)
+mediaPlacement_turnControlUrl = Lens.lens (\MediaPlacement' {turnControlUrl} -> turnControlUrl) (\s@MediaPlacement' {} a -> s {turnControlUrl = a} :: MediaPlacement)
+
+instance Data.FromJSON MediaPlacement where
+  parseJSON =
+    Data.withObject
+      "MediaPlacement"
+      ( \x ->
+          MediaPlacement'
+            Prelude.<$> (x Data..:? "AudioFallbackUrl")
+            Prelude.<*> (x Data..:? "AudioHostUrl")
+            Prelude.<*> (x Data..:? "EventIngestionUrl")
+            Prelude.<*> (x Data..:? "ScreenDataUrl")
+            Prelude.<*> (x Data..:? "ScreenSharingUrl")
+            Prelude.<*> (x Data..:? "ScreenViewingUrl")
+            Prelude.<*> (x Data..:? "SignalingUrl")
+            Prelude.<*> (x Data..:? "TurnControlUrl")
+      )
+
+instance Prelude.Hashable MediaPlacement where
+  hashWithSalt _salt MediaPlacement' {..} =
+    _salt
+      `Prelude.hashWithSalt` audioFallbackUrl
+      `Prelude.hashWithSalt` audioHostUrl
+      `Prelude.hashWithSalt` eventIngestionUrl
+      `Prelude.hashWithSalt` screenDataUrl
+      `Prelude.hashWithSalt` screenSharingUrl
+      `Prelude.hashWithSalt` screenViewingUrl
+      `Prelude.hashWithSalt` signalingUrl
+      `Prelude.hashWithSalt` turnControlUrl
+
+instance Prelude.NFData MediaPlacement where
+  rnf MediaPlacement' {..} =
+    Prelude.rnf audioFallbackUrl
+      `Prelude.seq` Prelude.rnf audioHostUrl
+      `Prelude.seq` Prelude.rnf eventIngestionUrl
+      `Prelude.seq` Prelude.rnf screenDataUrl
+      `Prelude.seq` Prelude.rnf screenSharingUrl
+      `Prelude.seq` Prelude.rnf screenViewingUrl
+      `Prelude.seq` Prelude.rnf signalingUrl
+      `Prelude.seq` Prelude.rnf turnControlUrl
diff --git a/gen/Amazonka/ChimeSdkMeetings/Types/Meeting.hs b/gen/Amazonka/ChimeSdkMeetings/Types/Meeting.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ChimeSdkMeetings/Types/Meeting.hs
@@ -0,0 +1,194 @@
+{-# 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.ChimeSdkMeetings.Types.Meeting
+-- 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.ChimeSdkMeetings.Types.Meeting where
+
+import Amazonka.ChimeSdkMeetings.Types.MediaPlacement
+import Amazonka.ChimeSdkMeetings.Types.MeetingFeaturesConfiguration
+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 meeting created using the Amazon Chime SDK.
+--
+-- /See:/ 'newMeeting' smart constructor.
+data Meeting = Meeting'
+  { -- | The external meeting ID.
+    externalMeetingId :: Prelude.Maybe (Data.Sensitive Prelude.Text),
+    -- | The media placement for the meeting.
+    mediaPlacement :: Prelude.Maybe MediaPlacement,
+    -- | The Region in which you create the meeting. Available values:
+    -- @af-south-1@, @ap-northeast-1@, @ap-northeast-2@, @ap-south-1@,
+    -- @ap-southeast-1@, @ap-southeast-2@, @ca-central-1@, @eu-central-1@,
+    -- @eu-north-1@, @eu-south-1@, @eu-west-1@, @eu-west-2@, @eu-west-3@,
+    -- @sa-east-1@, @us-east-1@, @us-east-2@, @us-west-1@, @us-west-2@.
+    --
+    -- Available values in AWS GovCloud (US) Regions: @us-gov-east-1@,
+    -- @us-gov-west-1@.
+    mediaRegion :: Prelude.Maybe Prelude.Text,
+    -- | The ARN of the meeting.
+    meetingArn :: Prelude.Maybe Prelude.Text,
+    -- | The features available to a meeting, such as Amazon Voice Focus.
+    meetingFeatures :: Prelude.Maybe MeetingFeaturesConfiguration,
+    -- | Reserved.
+    meetingHostId :: Prelude.Maybe (Data.Sensitive Prelude.Text),
+    -- | The Amazon Chime SDK meeting ID.
+    meetingId :: Prelude.Maybe Prelude.Text,
+    -- | When specified, replicates the media from the primary meeting to this
+    -- meeting.
+    primaryMeetingId :: Prelude.Maybe Prelude.Text,
+    -- | Array of strings.
+    tenantIds :: Prelude.Maybe (Prelude.NonEmpty Prelude.Text)
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Meeting' 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:
+--
+-- 'externalMeetingId', 'meeting_externalMeetingId' - The external meeting ID.
+--
+-- 'mediaPlacement', 'meeting_mediaPlacement' - The media placement for the meeting.
+--
+-- 'mediaRegion', 'meeting_mediaRegion' - The Region in which you create the meeting. Available values:
+-- @af-south-1@, @ap-northeast-1@, @ap-northeast-2@, @ap-south-1@,
+-- @ap-southeast-1@, @ap-southeast-2@, @ca-central-1@, @eu-central-1@,
+-- @eu-north-1@, @eu-south-1@, @eu-west-1@, @eu-west-2@, @eu-west-3@,
+-- @sa-east-1@, @us-east-1@, @us-east-2@, @us-west-1@, @us-west-2@.
+--
+-- Available values in AWS GovCloud (US) Regions: @us-gov-east-1@,
+-- @us-gov-west-1@.
+--
+-- 'meetingArn', 'meeting_meetingArn' - The ARN of the meeting.
+--
+-- 'meetingFeatures', 'meeting_meetingFeatures' - The features available to a meeting, such as Amazon Voice Focus.
+--
+-- 'meetingHostId', 'meeting_meetingHostId' - Reserved.
+--
+-- 'meetingId', 'meeting_meetingId' - The Amazon Chime SDK meeting ID.
+--
+-- 'primaryMeetingId', 'meeting_primaryMeetingId' - When specified, replicates the media from the primary meeting to this
+-- meeting.
+--
+-- 'tenantIds', 'meeting_tenantIds' - Array of strings.
+newMeeting ::
+  Meeting
+newMeeting =
+  Meeting'
+    { externalMeetingId = Prelude.Nothing,
+      mediaPlacement = Prelude.Nothing,
+      mediaRegion = Prelude.Nothing,
+      meetingArn = Prelude.Nothing,
+      meetingFeatures = Prelude.Nothing,
+      meetingHostId = Prelude.Nothing,
+      meetingId = Prelude.Nothing,
+      primaryMeetingId = Prelude.Nothing,
+      tenantIds = Prelude.Nothing
+    }
+
+-- | The external meeting ID.
+meeting_externalMeetingId :: Lens.Lens' Meeting (Prelude.Maybe Prelude.Text)
+meeting_externalMeetingId = Lens.lens (\Meeting' {externalMeetingId} -> externalMeetingId) (\s@Meeting' {} a -> s {externalMeetingId = a} :: Meeting) Prelude.. Lens.mapping Data._Sensitive
+
+-- | The media placement for the meeting.
+meeting_mediaPlacement :: Lens.Lens' Meeting (Prelude.Maybe MediaPlacement)
+meeting_mediaPlacement = Lens.lens (\Meeting' {mediaPlacement} -> mediaPlacement) (\s@Meeting' {} a -> s {mediaPlacement = a} :: Meeting)
+
+-- | The Region in which you create the meeting. Available values:
+-- @af-south-1@, @ap-northeast-1@, @ap-northeast-2@, @ap-south-1@,
+-- @ap-southeast-1@, @ap-southeast-2@, @ca-central-1@, @eu-central-1@,
+-- @eu-north-1@, @eu-south-1@, @eu-west-1@, @eu-west-2@, @eu-west-3@,
+-- @sa-east-1@, @us-east-1@, @us-east-2@, @us-west-1@, @us-west-2@.
+--
+-- Available values in AWS GovCloud (US) Regions: @us-gov-east-1@,
+-- @us-gov-west-1@.
+meeting_mediaRegion :: Lens.Lens' Meeting (Prelude.Maybe Prelude.Text)
+meeting_mediaRegion = Lens.lens (\Meeting' {mediaRegion} -> mediaRegion) (\s@Meeting' {} a -> s {mediaRegion = a} :: Meeting)
+
+-- | The ARN of the meeting.
+meeting_meetingArn :: Lens.Lens' Meeting (Prelude.Maybe Prelude.Text)
+meeting_meetingArn = Lens.lens (\Meeting' {meetingArn} -> meetingArn) (\s@Meeting' {} a -> s {meetingArn = a} :: Meeting)
+
+-- | The features available to a meeting, such as Amazon Voice Focus.
+meeting_meetingFeatures :: Lens.Lens' Meeting (Prelude.Maybe MeetingFeaturesConfiguration)
+meeting_meetingFeatures = Lens.lens (\Meeting' {meetingFeatures} -> meetingFeatures) (\s@Meeting' {} a -> s {meetingFeatures = a} :: Meeting)
+
+-- | Reserved.
+meeting_meetingHostId :: Lens.Lens' Meeting (Prelude.Maybe Prelude.Text)
+meeting_meetingHostId = Lens.lens (\Meeting' {meetingHostId} -> meetingHostId) (\s@Meeting' {} a -> s {meetingHostId = a} :: Meeting) Prelude.. Lens.mapping Data._Sensitive
+
+-- | The Amazon Chime SDK meeting ID.
+meeting_meetingId :: Lens.Lens' Meeting (Prelude.Maybe Prelude.Text)
+meeting_meetingId = Lens.lens (\Meeting' {meetingId} -> meetingId) (\s@Meeting' {} a -> s {meetingId = a} :: Meeting)
+
+-- | When specified, replicates the media from the primary meeting to this
+-- meeting.
+meeting_primaryMeetingId :: Lens.Lens' Meeting (Prelude.Maybe Prelude.Text)
+meeting_primaryMeetingId = Lens.lens (\Meeting' {primaryMeetingId} -> primaryMeetingId) (\s@Meeting' {} a -> s {primaryMeetingId = a} :: Meeting)
+
+-- | Array of strings.
+meeting_tenantIds :: Lens.Lens' Meeting (Prelude.Maybe (Prelude.NonEmpty Prelude.Text))
+meeting_tenantIds = Lens.lens (\Meeting' {tenantIds} -> tenantIds) (\s@Meeting' {} a -> s {tenantIds = a} :: Meeting) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromJSON Meeting where
+  parseJSON =
+    Data.withObject
+      "Meeting"
+      ( \x ->
+          Meeting'
+            Prelude.<$> (x Data..:? "ExternalMeetingId")
+            Prelude.<*> (x Data..:? "MediaPlacement")
+            Prelude.<*> (x Data..:? "MediaRegion")
+            Prelude.<*> (x Data..:? "MeetingArn")
+            Prelude.<*> (x Data..:? "MeetingFeatures")
+            Prelude.<*> (x Data..:? "MeetingHostId")
+            Prelude.<*> (x Data..:? "MeetingId")
+            Prelude.<*> (x Data..:? "PrimaryMeetingId")
+            Prelude.<*> (x Data..:? "TenantIds")
+      )
+
+instance Prelude.Hashable Meeting where
+  hashWithSalt _salt Meeting' {..} =
+    _salt
+      `Prelude.hashWithSalt` externalMeetingId
+      `Prelude.hashWithSalt` mediaPlacement
+      `Prelude.hashWithSalt` mediaRegion
+      `Prelude.hashWithSalt` meetingArn
+      `Prelude.hashWithSalt` meetingFeatures
+      `Prelude.hashWithSalt` meetingHostId
+      `Prelude.hashWithSalt` meetingId
+      `Prelude.hashWithSalt` primaryMeetingId
+      `Prelude.hashWithSalt` tenantIds
+
+instance Prelude.NFData Meeting where
+  rnf Meeting' {..} =
+    Prelude.rnf externalMeetingId
+      `Prelude.seq` Prelude.rnf mediaPlacement
+      `Prelude.seq` Prelude.rnf mediaRegion
+      `Prelude.seq` Prelude.rnf meetingArn
+      `Prelude.seq` Prelude.rnf meetingFeatures
+      `Prelude.seq` Prelude.rnf meetingHostId
+      `Prelude.seq` Prelude.rnf meetingId
+      `Prelude.seq` Prelude.rnf primaryMeetingId
+      `Prelude.seq` Prelude.rnf tenantIds
diff --git a/gen/Amazonka/ChimeSdkMeetings/Types/MeetingFeatureStatus.hs b/gen/Amazonka/ChimeSdkMeetings/Types/MeetingFeatureStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ChimeSdkMeetings/Types/MeetingFeatureStatus.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.ChimeSdkMeetings.Types.MeetingFeatureStatus
+-- 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.ChimeSdkMeetings.Types.MeetingFeatureStatus
+  ( MeetingFeatureStatus
+      ( ..,
+        MeetingFeatureStatus_AVAILABLE,
+        MeetingFeatureStatus_UNAVAILABLE
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype MeetingFeatureStatus = MeetingFeatureStatus'
+  { fromMeetingFeatureStatus ::
+      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 MeetingFeatureStatus_AVAILABLE :: MeetingFeatureStatus
+pattern MeetingFeatureStatus_AVAILABLE = MeetingFeatureStatus' "AVAILABLE"
+
+pattern MeetingFeatureStatus_UNAVAILABLE :: MeetingFeatureStatus
+pattern MeetingFeatureStatus_UNAVAILABLE = MeetingFeatureStatus' "UNAVAILABLE"
+
+{-# COMPLETE
+  MeetingFeatureStatus_AVAILABLE,
+  MeetingFeatureStatus_UNAVAILABLE,
+  MeetingFeatureStatus'
+  #-}
diff --git a/gen/Amazonka/ChimeSdkMeetings/Types/MeetingFeaturesConfiguration.hs b/gen/Amazonka/ChimeSdkMeetings/Types/MeetingFeaturesConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ChimeSdkMeetings/Types/MeetingFeaturesConfiguration.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.ChimeSdkMeetings.Types.MeetingFeaturesConfiguration
+-- 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.ChimeSdkMeetings.Types.MeetingFeaturesConfiguration where
+
+import Amazonka.ChimeSdkMeetings.Types.AudioFeatures
+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 configuration settings of the features available to a meeting.>
+--
+-- /See:/ 'newMeetingFeaturesConfiguration' smart constructor.
+data MeetingFeaturesConfiguration = MeetingFeaturesConfiguration'
+  { -- | The configuration settings for the audio features available to a
+    -- meeting.
+    audio :: Prelude.Maybe AudioFeatures
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'MeetingFeaturesConfiguration' 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:
+--
+-- 'audio', 'meetingFeaturesConfiguration_audio' - The configuration settings for the audio features available to a
+-- meeting.
+newMeetingFeaturesConfiguration ::
+  MeetingFeaturesConfiguration
+newMeetingFeaturesConfiguration =
+  MeetingFeaturesConfiguration'
+    { audio =
+        Prelude.Nothing
+    }
+
+-- | The configuration settings for the audio features available to a
+-- meeting.
+meetingFeaturesConfiguration_audio :: Lens.Lens' MeetingFeaturesConfiguration (Prelude.Maybe AudioFeatures)
+meetingFeaturesConfiguration_audio = Lens.lens (\MeetingFeaturesConfiguration' {audio} -> audio) (\s@MeetingFeaturesConfiguration' {} a -> s {audio = a} :: MeetingFeaturesConfiguration)
+
+instance Data.FromJSON MeetingFeaturesConfiguration where
+  parseJSON =
+    Data.withObject
+      "MeetingFeaturesConfiguration"
+      ( \x ->
+          MeetingFeaturesConfiguration'
+            Prelude.<$> (x Data..:? "Audio")
+      )
+
+instance
+  Prelude.Hashable
+    MeetingFeaturesConfiguration
+  where
+  hashWithSalt _salt MeetingFeaturesConfiguration' {..} =
+    _salt `Prelude.hashWithSalt` audio
+
+instance Prelude.NFData MeetingFeaturesConfiguration where
+  rnf MeetingFeaturesConfiguration' {..} =
+    Prelude.rnf audio
+
+instance Data.ToJSON MeetingFeaturesConfiguration where
+  toJSON MeetingFeaturesConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [("Audio" Data..=) Prelude.<$> audio]
+      )
diff --git a/gen/Amazonka/ChimeSdkMeetings/Types/NotificationsConfiguration.hs b/gen/Amazonka/ChimeSdkMeetings/Types/NotificationsConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ChimeSdkMeetings/Types/NotificationsConfiguration.hs
@@ -0,0 +1,98 @@
+{-# 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.ChimeSdkMeetings.Types.NotificationsConfiguration
+-- 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.ChimeSdkMeetings.Types.NotificationsConfiguration 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 configuration for resource targets to receive notifications when
+-- meeting and attendee events occur.
+--
+-- /See:/ 'newNotificationsConfiguration' smart constructor.
+data NotificationsConfiguration = NotificationsConfiguration'
+  { -- | The ARN of the AWS Lambda function in the notifications configuration.
+    lambdaFunctionArn :: Prelude.Maybe (Data.Sensitive Prelude.Text),
+    -- | The ARN of the SNS topic.
+    snsTopicArn :: Prelude.Maybe (Data.Sensitive Prelude.Text),
+    -- | The ARN of the SQS queue.
+    sqsQueueArn :: Prelude.Maybe (Data.Sensitive Prelude.Text)
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'NotificationsConfiguration' 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:
+--
+-- 'lambdaFunctionArn', 'notificationsConfiguration_lambdaFunctionArn' - The ARN of the AWS Lambda function in the notifications configuration.
+--
+-- 'snsTopicArn', 'notificationsConfiguration_snsTopicArn' - The ARN of the SNS topic.
+--
+-- 'sqsQueueArn', 'notificationsConfiguration_sqsQueueArn' - The ARN of the SQS queue.
+newNotificationsConfiguration ::
+  NotificationsConfiguration
+newNotificationsConfiguration =
+  NotificationsConfiguration'
+    { lambdaFunctionArn =
+        Prelude.Nothing,
+      snsTopicArn = Prelude.Nothing,
+      sqsQueueArn = Prelude.Nothing
+    }
+
+-- | The ARN of the AWS Lambda function in the notifications configuration.
+notificationsConfiguration_lambdaFunctionArn :: Lens.Lens' NotificationsConfiguration (Prelude.Maybe Prelude.Text)
+notificationsConfiguration_lambdaFunctionArn = Lens.lens (\NotificationsConfiguration' {lambdaFunctionArn} -> lambdaFunctionArn) (\s@NotificationsConfiguration' {} a -> s {lambdaFunctionArn = a} :: NotificationsConfiguration) Prelude.. Lens.mapping Data._Sensitive
+
+-- | The ARN of the SNS topic.
+notificationsConfiguration_snsTopicArn :: Lens.Lens' NotificationsConfiguration (Prelude.Maybe Prelude.Text)
+notificationsConfiguration_snsTopicArn = Lens.lens (\NotificationsConfiguration' {snsTopicArn} -> snsTopicArn) (\s@NotificationsConfiguration' {} a -> s {snsTopicArn = a} :: NotificationsConfiguration) Prelude.. Lens.mapping Data._Sensitive
+
+-- | The ARN of the SQS queue.
+notificationsConfiguration_sqsQueueArn :: Lens.Lens' NotificationsConfiguration (Prelude.Maybe Prelude.Text)
+notificationsConfiguration_sqsQueueArn = Lens.lens (\NotificationsConfiguration' {sqsQueueArn} -> sqsQueueArn) (\s@NotificationsConfiguration' {} a -> s {sqsQueueArn = a} :: NotificationsConfiguration) Prelude.. Lens.mapping Data._Sensitive
+
+instance Prelude.Hashable NotificationsConfiguration where
+  hashWithSalt _salt NotificationsConfiguration' {..} =
+    _salt
+      `Prelude.hashWithSalt` lambdaFunctionArn
+      `Prelude.hashWithSalt` snsTopicArn
+      `Prelude.hashWithSalt` sqsQueueArn
+
+instance Prelude.NFData NotificationsConfiguration where
+  rnf NotificationsConfiguration' {..} =
+    Prelude.rnf lambdaFunctionArn
+      `Prelude.seq` Prelude.rnf snsTopicArn
+      `Prelude.seq` Prelude.rnf sqsQueueArn
+
+instance Data.ToJSON NotificationsConfiguration where
+  toJSON NotificationsConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("LambdaFunctionArn" Data..=)
+              Prelude.<$> lambdaFunctionArn,
+            ("SnsTopicArn" Data..=) Prelude.<$> snsTopicArn,
+            ("SqsQueueArn" Data..=) Prelude.<$> sqsQueueArn
+          ]
+      )
diff --git a/gen/Amazonka/ChimeSdkMeetings/Types/Tag.hs b/gen/Amazonka/ChimeSdkMeetings/Types/Tag.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ChimeSdkMeetings/Types/Tag.hs
@@ -0,0 +1,93 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ChimeSdkMeetings.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.ChimeSdkMeetings.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 key-value pair that you define.
+--
+-- /See:/ 'newTag' smart constructor.
+data Tag = Tag'
+  { -- | The tag\'s key.
+    key :: Prelude.Text,
+    -- | The tag\'s value.
+    value :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Tag' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'key', 'tag_key' - The tag\'s key.
+--
+-- 'value', 'tag_value' - The tag\'s value.
+newTag ::
+  -- | 'key'
+  Prelude.Text ->
+  -- | 'value'
+  Prelude.Text ->
+  Tag
+newTag pKey_ pValue_ =
+  Tag' {key = pKey_, value = pValue_}
+
+-- | The tag\'s key.
+tag_key :: Lens.Lens' Tag Prelude.Text
+tag_key = Lens.lens (\Tag' {key} -> key) (\s@Tag' {} a -> s {key = a} :: Tag)
+
+-- | The tag\'s value.
+tag_value :: Lens.Lens' Tag Prelude.Text
+tag_value = Lens.lens (\Tag' {value} -> value) (\s@Tag' {} a -> s {value = a} :: Tag)
+
+instance Data.FromJSON Tag where
+  parseJSON =
+    Data.withObject
+      "Tag"
+      ( \x ->
+          Tag'
+            Prelude.<$> (x Data..: "Key")
+            Prelude.<*> (x Data..: "Value")
+      )
+
+instance Prelude.Hashable Tag where
+  hashWithSalt _salt Tag' {..} =
+    _salt
+      `Prelude.hashWithSalt` key
+      `Prelude.hashWithSalt` value
+
+instance Prelude.NFData Tag where
+  rnf Tag' {..} =
+    Prelude.rnf key `Prelude.seq` Prelude.rnf value
+
+instance Data.ToJSON Tag where
+  toJSON Tag' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("Key" Data..= key),
+            Prelude.Just ("Value" Data..= value)
+          ]
+      )
diff --git a/gen/Amazonka/ChimeSdkMeetings/Types/TranscribeContentIdentificationType.hs b/gen/Amazonka/ChimeSdkMeetings/Types/TranscribeContentIdentificationType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ChimeSdkMeetings/Types/TranscribeContentIdentificationType.hs
@@ -0,0 +1,66 @@
+{-# 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.ChimeSdkMeetings.Types.TranscribeContentIdentificationType
+-- 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.ChimeSdkMeetings.Types.TranscribeContentIdentificationType
+  ( TranscribeContentIdentificationType
+      ( ..,
+        TranscribeContentIdentificationType_PII
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype TranscribeContentIdentificationType = TranscribeContentIdentificationType'
+  { fromTranscribeContentIdentificationType ::
+      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 TranscribeContentIdentificationType_PII :: TranscribeContentIdentificationType
+pattern TranscribeContentIdentificationType_PII = TranscribeContentIdentificationType' "PII"
+
+{-# COMPLETE
+  TranscribeContentIdentificationType_PII,
+  TranscribeContentIdentificationType'
+  #-}
diff --git a/gen/Amazonka/ChimeSdkMeetings/Types/TranscribeContentRedactionType.hs b/gen/Amazonka/ChimeSdkMeetings/Types/TranscribeContentRedactionType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ChimeSdkMeetings/Types/TranscribeContentRedactionType.hs
@@ -0,0 +1,66 @@
+{-# 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.ChimeSdkMeetings.Types.TranscribeContentRedactionType
+-- 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.ChimeSdkMeetings.Types.TranscribeContentRedactionType
+  ( TranscribeContentRedactionType
+      ( ..,
+        TranscribeContentRedactionType_PII
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype TranscribeContentRedactionType = TranscribeContentRedactionType'
+  { fromTranscribeContentRedactionType ::
+      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 TranscribeContentRedactionType_PII :: TranscribeContentRedactionType
+pattern TranscribeContentRedactionType_PII = TranscribeContentRedactionType' "PII"
+
+{-# COMPLETE
+  TranscribeContentRedactionType_PII,
+  TranscribeContentRedactionType'
+  #-}
diff --git a/gen/Amazonka/ChimeSdkMeetings/Types/TranscribeLanguageCode.hs b/gen/Amazonka/ChimeSdkMeetings/Types/TranscribeLanguageCode.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ChimeSdkMeetings/Types/TranscribeLanguageCode.hs
@@ -0,0 +1,121 @@
+{-# 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.ChimeSdkMeetings.Types.TranscribeLanguageCode
+-- 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.ChimeSdkMeetings.Types.TranscribeLanguageCode
+  ( TranscribeLanguageCode
+      ( ..,
+        TranscribeLanguageCode_De_DE,
+        TranscribeLanguageCode_En_AU,
+        TranscribeLanguageCode_En_GB,
+        TranscribeLanguageCode_En_US,
+        TranscribeLanguageCode_Es_US,
+        TranscribeLanguageCode_Fr_CA,
+        TranscribeLanguageCode_Fr_FR,
+        TranscribeLanguageCode_It_IT,
+        TranscribeLanguageCode_Ja_JP,
+        TranscribeLanguageCode_Ko_KR,
+        TranscribeLanguageCode_Pt_BR,
+        TranscribeLanguageCode_Zh_CN
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype TranscribeLanguageCode = TranscribeLanguageCode'
+  { fromTranscribeLanguageCode ::
+      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 TranscribeLanguageCode_De_DE :: TranscribeLanguageCode
+pattern TranscribeLanguageCode_De_DE = TranscribeLanguageCode' "de-DE"
+
+pattern TranscribeLanguageCode_En_AU :: TranscribeLanguageCode
+pattern TranscribeLanguageCode_En_AU = TranscribeLanguageCode' "en-AU"
+
+pattern TranscribeLanguageCode_En_GB :: TranscribeLanguageCode
+pattern TranscribeLanguageCode_En_GB = TranscribeLanguageCode' "en-GB"
+
+pattern TranscribeLanguageCode_En_US :: TranscribeLanguageCode
+pattern TranscribeLanguageCode_En_US = TranscribeLanguageCode' "en-US"
+
+pattern TranscribeLanguageCode_Es_US :: TranscribeLanguageCode
+pattern TranscribeLanguageCode_Es_US = TranscribeLanguageCode' "es-US"
+
+pattern TranscribeLanguageCode_Fr_CA :: TranscribeLanguageCode
+pattern TranscribeLanguageCode_Fr_CA = TranscribeLanguageCode' "fr-CA"
+
+pattern TranscribeLanguageCode_Fr_FR :: TranscribeLanguageCode
+pattern TranscribeLanguageCode_Fr_FR = TranscribeLanguageCode' "fr-FR"
+
+pattern TranscribeLanguageCode_It_IT :: TranscribeLanguageCode
+pattern TranscribeLanguageCode_It_IT = TranscribeLanguageCode' "it-IT"
+
+pattern TranscribeLanguageCode_Ja_JP :: TranscribeLanguageCode
+pattern TranscribeLanguageCode_Ja_JP = TranscribeLanguageCode' "ja-JP"
+
+pattern TranscribeLanguageCode_Ko_KR :: TranscribeLanguageCode
+pattern TranscribeLanguageCode_Ko_KR = TranscribeLanguageCode' "ko-KR"
+
+pattern TranscribeLanguageCode_Pt_BR :: TranscribeLanguageCode
+pattern TranscribeLanguageCode_Pt_BR = TranscribeLanguageCode' "pt-BR"
+
+pattern TranscribeLanguageCode_Zh_CN :: TranscribeLanguageCode
+pattern TranscribeLanguageCode_Zh_CN = TranscribeLanguageCode' "zh-CN"
+
+{-# COMPLETE
+  TranscribeLanguageCode_De_DE,
+  TranscribeLanguageCode_En_AU,
+  TranscribeLanguageCode_En_GB,
+  TranscribeLanguageCode_En_US,
+  TranscribeLanguageCode_Es_US,
+  TranscribeLanguageCode_Fr_CA,
+  TranscribeLanguageCode_Fr_FR,
+  TranscribeLanguageCode_It_IT,
+  TranscribeLanguageCode_Ja_JP,
+  TranscribeLanguageCode_Ko_KR,
+  TranscribeLanguageCode_Pt_BR,
+  TranscribeLanguageCode_Zh_CN,
+  TranscribeLanguageCode'
+  #-}
diff --git a/gen/Amazonka/ChimeSdkMeetings/Types/TranscribeMedicalContentIdentificationType.hs b/gen/Amazonka/ChimeSdkMeetings/Types/TranscribeMedicalContentIdentificationType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ChimeSdkMeetings/Types/TranscribeMedicalContentIdentificationType.hs
@@ -0,0 +1,66 @@
+{-# 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.ChimeSdkMeetings.Types.TranscribeMedicalContentIdentificationType
+-- 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.ChimeSdkMeetings.Types.TranscribeMedicalContentIdentificationType
+  ( TranscribeMedicalContentIdentificationType
+      ( ..,
+        TranscribeMedicalContentIdentificationType_PHI
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype TranscribeMedicalContentIdentificationType = TranscribeMedicalContentIdentificationType'
+  { fromTranscribeMedicalContentIdentificationType ::
+      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 TranscribeMedicalContentIdentificationType_PHI :: TranscribeMedicalContentIdentificationType
+pattern TranscribeMedicalContentIdentificationType_PHI = TranscribeMedicalContentIdentificationType' "PHI"
+
+{-# COMPLETE
+  TranscribeMedicalContentIdentificationType_PHI,
+  TranscribeMedicalContentIdentificationType'
+  #-}
diff --git a/gen/Amazonka/ChimeSdkMeetings/Types/TranscribeMedicalLanguageCode.hs b/gen/Amazonka/ChimeSdkMeetings/Types/TranscribeMedicalLanguageCode.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ChimeSdkMeetings/Types/TranscribeMedicalLanguageCode.hs
@@ -0,0 +1,66 @@
+{-# 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.ChimeSdkMeetings.Types.TranscribeMedicalLanguageCode
+-- 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.ChimeSdkMeetings.Types.TranscribeMedicalLanguageCode
+  ( TranscribeMedicalLanguageCode
+      ( ..,
+        TranscribeMedicalLanguageCode_En_US
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype TranscribeMedicalLanguageCode = TranscribeMedicalLanguageCode'
+  { fromTranscribeMedicalLanguageCode ::
+      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 TranscribeMedicalLanguageCode_En_US :: TranscribeMedicalLanguageCode
+pattern TranscribeMedicalLanguageCode_En_US = TranscribeMedicalLanguageCode' "en-US"
+
+{-# COMPLETE
+  TranscribeMedicalLanguageCode_En_US,
+  TranscribeMedicalLanguageCode'
+  #-}
diff --git a/gen/Amazonka/ChimeSdkMeetings/Types/TranscribeMedicalRegion.hs b/gen/Amazonka/ChimeSdkMeetings/Types/TranscribeMedicalRegion.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ChimeSdkMeetings/Types/TranscribeMedicalRegion.hs
@@ -0,0 +1,96 @@
+{-# 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.ChimeSdkMeetings.Types.TranscribeMedicalRegion
+-- 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.ChimeSdkMeetings.Types.TranscribeMedicalRegion
+  ( TranscribeMedicalRegion
+      ( ..,
+        TranscribeMedicalRegion_Ap_southeast_2,
+        TranscribeMedicalRegion_Auto,
+        TranscribeMedicalRegion_Ca_central_1,
+        TranscribeMedicalRegion_Eu_west_1,
+        TranscribeMedicalRegion_Us_east_1,
+        TranscribeMedicalRegion_Us_east_2,
+        TranscribeMedicalRegion_Us_west_2
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype TranscribeMedicalRegion = TranscribeMedicalRegion'
+  { fromTranscribeMedicalRegion ::
+      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 TranscribeMedicalRegion_Ap_southeast_2 :: TranscribeMedicalRegion
+pattern TranscribeMedicalRegion_Ap_southeast_2 = TranscribeMedicalRegion' "ap-southeast-2"
+
+pattern TranscribeMedicalRegion_Auto :: TranscribeMedicalRegion
+pattern TranscribeMedicalRegion_Auto = TranscribeMedicalRegion' "auto"
+
+pattern TranscribeMedicalRegion_Ca_central_1 :: TranscribeMedicalRegion
+pattern TranscribeMedicalRegion_Ca_central_1 = TranscribeMedicalRegion' "ca-central-1"
+
+pattern TranscribeMedicalRegion_Eu_west_1 :: TranscribeMedicalRegion
+pattern TranscribeMedicalRegion_Eu_west_1 = TranscribeMedicalRegion' "eu-west-1"
+
+pattern TranscribeMedicalRegion_Us_east_1 :: TranscribeMedicalRegion
+pattern TranscribeMedicalRegion_Us_east_1 = TranscribeMedicalRegion' "us-east-1"
+
+pattern TranscribeMedicalRegion_Us_east_2 :: TranscribeMedicalRegion
+pattern TranscribeMedicalRegion_Us_east_2 = TranscribeMedicalRegion' "us-east-2"
+
+pattern TranscribeMedicalRegion_Us_west_2 :: TranscribeMedicalRegion
+pattern TranscribeMedicalRegion_Us_west_2 = TranscribeMedicalRegion' "us-west-2"
+
+{-# COMPLETE
+  TranscribeMedicalRegion_Ap_southeast_2,
+  TranscribeMedicalRegion_Auto,
+  TranscribeMedicalRegion_Ca_central_1,
+  TranscribeMedicalRegion_Eu_west_1,
+  TranscribeMedicalRegion_Us_east_1,
+  TranscribeMedicalRegion_Us_east_2,
+  TranscribeMedicalRegion_Us_west_2,
+  TranscribeMedicalRegion'
+  #-}
diff --git a/gen/Amazonka/ChimeSdkMeetings/Types/TranscribeMedicalSpecialty.hs b/gen/Amazonka/ChimeSdkMeetings/Types/TranscribeMedicalSpecialty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ChimeSdkMeetings/Types/TranscribeMedicalSpecialty.hs
@@ -0,0 +1,91 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ChimeSdkMeetings.Types.TranscribeMedicalSpecialty
+-- 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.ChimeSdkMeetings.Types.TranscribeMedicalSpecialty
+  ( TranscribeMedicalSpecialty
+      ( ..,
+        TranscribeMedicalSpecialty_CARDIOLOGY,
+        TranscribeMedicalSpecialty_NEUROLOGY,
+        TranscribeMedicalSpecialty_ONCOLOGY,
+        TranscribeMedicalSpecialty_PRIMARYCARE,
+        TranscribeMedicalSpecialty_RADIOLOGY,
+        TranscribeMedicalSpecialty_UROLOGY
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype TranscribeMedicalSpecialty = TranscribeMedicalSpecialty'
+  { fromTranscribeMedicalSpecialty ::
+      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 TranscribeMedicalSpecialty_CARDIOLOGY :: TranscribeMedicalSpecialty
+pattern TranscribeMedicalSpecialty_CARDIOLOGY = TranscribeMedicalSpecialty' "CARDIOLOGY"
+
+pattern TranscribeMedicalSpecialty_NEUROLOGY :: TranscribeMedicalSpecialty
+pattern TranscribeMedicalSpecialty_NEUROLOGY = TranscribeMedicalSpecialty' "NEUROLOGY"
+
+pattern TranscribeMedicalSpecialty_ONCOLOGY :: TranscribeMedicalSpecialty
+pattern TranscribeMedicalSpecialty_ONCOLOGY = TranscribeMedicalSpecialty' "ONCOLOGY"
+
+pattern TranscribeMedicalSpecialty_PRIMARYCARE :: TranscribeMedicalSpecialty
+pattern TranscribeMedicalSpecialty_PRIMARYCARE = TranscribeMedicalSpecialty' "PRIMARYCARE"
+
+pattern TranscribeMedicalSpecialty_RADIOLOGY :: TranscribeMedicalSpecialty
+pattern TranscribeMedicalSpecialty_RADIOLOGY = TranscribeMedicalSpecialty' "RADIOLOGY"
+
+pattern TranscribeMedicalSpecialty_UROLOGY :: TranscribeMedicalSpecialty
+pattern TranscribeMedicalSpecialty_UROLOGY = TranscribeMedicalSpecialty' "UROLOGY"
+
+{-# COMPLETE
+  TranscribeMedicalSpecialty_CARDIOLOGY,
+  TranscribeMedicalSpecialty_NEUROLOGY,
+  TranscribeMedicalSpecialty_ONCOLOGY,
+  TranscribeMedicalSpecialty_PRIMARYCARE,
+  TranscribeMedicalSpecialty_RADIOLOGY,
+  TranscribeMedicalSpecialty_UROLOGY,
+  TranscribeMedicalSpecialty'
+  #-}
diff --git a/gen/Amazonka/ChimeSdkMeetings/Types/TranscribeMedicalType.hs b/gen/Amazonka/ChimeSdkMeetings/Types/TranscribeMedicalType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ChimeSdkMeetings/Types/TranscribeMedicalType.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.ChimeSdkMeetings.Types.TranscribeMedicalType
+-- 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.ChimeSdkMeetings.Types.TranscribeMedicalType
+  ( TranscribeMedicalType
+      ( ..,
+        TranscribeMedicalType_CONVERSATION,
+        TranscribeMedicalType_DICTATION
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype TranscribeMedicalType = TranscribeMedicalType'
+  { fromTranscribeMedicalType ::
+      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 TranscribeMedicalType_CONVERSATION :: TranscribeMedicalType
+pattern TranscribeMedicalType_CONVERSATION = TranscribeMedicalType' "CONVERSATION"
+
+pattern TranscribeMedicalType_DICTATION :: TranscribeMedicalType
+pattern TranscribeMedicalType_DICTATION = TranscribeMedicalType' "DICTATION"
+
+{-# COMPLETE
+  TranscribeMedicalType_CONVERSATION,
+  TranscribeMedicalType_DICTATION,
+  TranscribeMedicalType'
+  #-}
diff --git a/gen/Amazonka/ChimeSdkMeetings/Types/TranscribePartialResultsStability.hs b/gen/Amazonka/ChimeSdkMeetings/Types/TranscribePartialResultsStability.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ChimeSdkMeetings/Types/TranscribePartialResultsStability.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.ChimeSdkMeetings.Types.TranscribePartialResultsStability
+-- 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.ChimeSdkMeetings.Types.TranscribePartialResultsStability
+  ( TranscribePartialResultsStability
+      ( ..,
+        TranscribePartialResultsStability_High,
+        TranscribePartialResultsStability_Low,
+        TranscribePartialResultsStability_Medium
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype TranscribePartialResultsStability = TranscribePartialResultsStability'
+  { fromTranscribePartialResultsStability ::
+      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 TranscribePartialResultsStability_High :: TranscribePartialResultsStability
+pattern TranscribePartialResultsStability_High = TranscribePartialResultsStability' "high"
+
+pattern TranscribePartialResultsStability_Low :: TranscribePartialResultsStability
+pattern TranscribePartialResultsStability_Low = TranscribePartialResultsStability' "low"
+
+pattern TranscribePartialResultsStability_Medium :: TranscribePartialResultsStability
+pattern TranscribePartialResultsStability_Medium = TranscribePartialResultsStability' "medium"
+
+{-# COMPLETE
+  TranscribePartialResultsStability_High,
+  TranscribePartialResultsStability_Low,
+  TranscribePartialResultsStability_Medium,
+  TranscribePartialResultsStability'
+  #-}
diff --git a/gen/Amazonka/ChimeSdkMeetings/Types/TranscribeRegion.hs b/gen/Amazonka/ChimeSdkMeetings/Types/TranscribeRegion.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ChimeSdkMeetings/Types/TranscribeRegion.hs
@@ -0,0 +1,126 @@
+{-# 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.ChimeSdkMeetings.Types.TranscribeRegion
+-- 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.ChimeSdkMeetings.Types.TranscribeRegion
+  ( TranscribeRegion
+      ( ..,
+        TranscribeRegion_Ap_northeast_1,
+        TranscribeRegion_Ap_northeast_2,
+        TranscribeRegion_Ap_southeast_2,
+        TranscribeRegion_Auto,
+        TranscribeRegion_Ca_central_1,
+        TranscribeRegion_Eu_central_1,
+        TranscribeRegion_Eu_west_1,
+        TranscribeRegion_Eu_west_2,
+        TranscribeRegion_Sa_east_1,
+        TranscribeRegion_Us_east_1,
+        TranscribeRegion_Us_east_2,
+        TranscribeRegion_Us_gov_west_1,
+        TranscribeRegion_Us_west_2
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype TranscribeRegion = TranscribeRegion'
+  { fromTranscribeRegion ::
+      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 TranscribeRegion_Ap_northeast_1 :: TranscribeRegion
+pattern TranscribeRegion_Ap_northeast_1 = TranscribeRegion' "ap-northeast-1"
+
+pattern TranscribeRegion_Ap_northeast_2 :: TranscribeRegion
+pattern TranscribeRegion_Ap_northeast_2 = TranscribeRegion' "ap-northeast-2"
+
+pattern TranscribeRegion_Ap_southeast_2 :: TranscribeRegion
+pattern TranscribeRegion_Ap_southeast_2 = TranscribeRegion' "ap-southeast-2"
+
+pattern TranscribeRegion_Auto :: TranscribeRegion
+pattern TranscribeRegion_Auto = TranscribeRegion' "auto"
+
+pattern TranscribeRegion_Ca_central_1 :: TranscribeRegion
+pattern TranscribeRegion_Ca_central_1 = TranscribeRegion' "ca-central-1"
+
+pattern TranscribeRegion_Eu_central_1 :: TranscribeRegion
+pattern TranscribeRegion_Eu_central_1 = TranscribeRegion' "eu-central-1"
+
+pattern TranscribeRegion_Eu_west_1 :: TranscribeRegion
+pattern TranscribeRegion_Eu_west_1 = TranscribeRegion' "eu-west-1"
+
+pattern TranscribeRegion_Eu_west_2 :: TranscribeRegion
+pattern TranscribeRegion_Eu_west_2 = TranscribeRegion' "eu-west-2"
+
+pattern TranscribeRegion_Sa_east_1 :: TranscribeRegion
+pattern TranscribeRegion_Sa_east_1 = TranscribeRegion' "sa-east-1"
+
+pattern TranscribeRegion_Us_east_1 :: TranscribeRegion
+pattern TranscribeRegion_Us_east_1 = TranscribeRegion' "us-east-1"
+
+pattern TranscribeRegion_Us_east_2 :: TranscribeRegion
+pattern TranscribeRegion_Us_east_2 = TranscribeRegion' "us-east-2"
+
+pattern TranscribeRegion_Us_gov_west_1 :: TranscribeRegion
+pattern TranscribeRegion_Us_gov_west_1 = TranscribeRegion' "us-gov-west-1"
+
+pattern TranscribeRegion_Us_west_2 :: TranscribeRegion
+pattern TranscribeRegion_Us_west_2 = TranscribeRegion' "us-west-2"
+
+{-# COMPLETE
+  TranscribeRegion_Ap_northeast_1,
+  TranscribeRegion_Ap_northeast_2,
+  TranscribeRegion_Ap_southeast_2,
+  TranscribeRegion_Auto,
+  TranscribeRegion_Ca_central_1,
+  TranscribeRegion_Eu_central_1,
+  TranscribeRegion_Eu_west_1,
+  TranscribeRegion_Eu_west_2,
+  TranscribeRegion_Sa_east_1,
+  TranscribeRegion_Us_east_1,
+  TranscribeRegion_Us_east_2,
+  TranscribeRegion_Us_gov_west_1,
+  TranscribeRegion_Us_west_2,
+  TranscribeRegion'
+  #-}
diff --git a/gen/Amazonka/ChimeSdkMeetings/Types/TranscribeVocabularyFilterMethod.hs b/gen/Amazonka/ChimeSdkMeetings/Types/TranscribeVocabularyFilterMethod.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ChimeSdkMeetings/Types/TranscribeVocabularyFilterMethod.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.ChimeSdkMeetings.Types.TranscribeVocabularyFilterMethod
+-- 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.ChimeSdkMeetings.Types.TranscribeVocabularyFilterMethod
+  ( TranscribeVocabularyFilterMethod
+      ( ..,
+        TranscribeVocabularyFilterMethod_Mask,
+        TranscribeVocabularyFilterMethod_Remove,
+        TranscribeVocabularyFilterMethod_Tag
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype TranscribeVocabularyFilterMethod = TranscribeVocabularyFilterMethod'
+  { fromTranscribeVocabularyFilterMethod ::
+      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 TranscribeVocabularyFilterMethod_Mask :: TranscribeVocabularyFilterMethod
+pattern TranscribeVocabularyFilterMethod_Mask = TranscribeVocabularyFilterMethod' "mask"
+
+pattern TranscribeVocabularyFilterMethod_Remove :: TranscribeVocabularyFilterMethod
+pattern TranscribeVocabularyFilterMethod_Remove = TranscribeVocabularyFilterMethod' "remove"
+
+pattern TranscribeVocabularyFilterMethod_Tag :: TranscribeVocabularyFilterMethod
+pattern TranscribeVocabularyFilterMethod_Tag = TranscribeVocabularyFilterMethod' "tag"
+
+{-# COMPLETE
+  TranscribeVocabularyFilterMethod_Mask,
+  TranscribeVocabularyFilterMethod_Remove,
+  TranscribeVocabularyFilterMethod_Tag,
+  TranscribeVocabularyFilterMethod'
+  #-}
diff --git a/gen/Amazonka/ChimeSdkMeetings/Types/TranscriptionConfiguration.hs b/gen/Amazonka/ChimeSdkMeetings/Types/TranscriptionConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ChimeSdkMeetings/Types/TranscriptionConfiguration.hs
@@ -0,0 +1,92 @@
+{-# 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.ChimeSdkMeetings.Types.TranscriptionConfiguration
+-- 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.ChimeSdkMeetings.Types.TranscriptionConfiguration where
+
+import Amazonka.ChimeSdkMeetings.Types.EngineTranscribeMedicalSettings
+import Amazonka.ChimeSdkMeetings.Types.EngineTranscribeSettings
+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 configuration for the current transcription operation. Must contain
+-- @EngineTranscribeSettings@ or @EngineTranscribeMedicalSettings@.
+--
+-- /See:/ 'newTranscriptionConfiguration' smart constructor.
+data TranscriptionConfiguration = TranscriptionConfiguration'
+  { -- | The transcription configuration settings passed to Amazon Transcribe
+    -- Medical.
+    engineTranscribeMedicalSettings :: Prelude.Maybe EngineTranscribeMedicalSettings,
+    -- | The transcription configuration settings passed to Amazon Transcribe.
+    engineTranscribeSettings :: Prelude.Maybe EngineTranscribeSettings
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TranscriptionConfiguration' 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:
+--
+-- 'engineTranscribeMedicalSettings', 'transcriptionConfiguration_engineTranscribeMedicalSettings' - The transcription configuration settings passed to Amazon Transcribe
+-- Medical.
+--
+-- 'engineTranscribeSettings', 'transcriptionConfiguration_engineTranscribeSettings' - The transcription configuration settings passed to Amazon Transcribe.
+newTranscriptionConfiguration ::
+  TranscriptionConfiguration
+newTranscriptionConfiguration =
+  TranscriptionConfiguration'
+    { engineTranscribeMedicalSettings =
+        Prelude.Nothing,
+      engineTranscribeSettings = Prelude.Nothing
+    }
+
+-- | The transcription configuration settings passed to Amazon Transcribe
+-- Medical.
+transcriptionConfiguration_engineTranscribeMedicalSettings :: Lens.Lens' TranscriptionConfiguration (Prelude.Maybe EngineTranscribeMedicalSettings)
+transcriptionConfiguration_engineTranscribeMedicalSettings = Lens.lens (\TranscriptionConfiguration' {engineTranscribeMedicalSettings} -> engineTranscribeMedicalSettings) (\s@TranscriptionConfiguration' {} a -> s {engineTranscribeMedicalSettings = a} :: TranscriptionConfiguration)
+
+-- | The transcription configuration settings passed to Amazon Transcribe.
+transcriptionConfiguration_engineTranscribeSettings :: Lens.Lens' TranscriptionConfiguration (Prelude.Maybe EngineTranscribeSettings)
+transcriptionConfiguration_engineTranscribeSettings = Lens.lens (\TranscriptionConfiguration' {engineTranscribeSettings} -> engineTranscribeSettings) (\s@TranscriptionConfiguration' {} a -> s {engineTranscribeSettings = a} :: TranscriptionConfiguration)
+
+instance Prelude.Hashable TranscriptionConfiguration where
+  hashWithSalt _salt TranscriptionConfiguration' {..} =
+    _salt
+      `Prelude.hashWithSalt` engineTranscribeMedicalSettings
+      `Prelude.hashWithSalt` engineTranscribeSettings
+
+instance Prelude.NFData TranscriptionConfiguration where
+  rnf TranscriptionConfiguration' {..} =
+    Prelude.rnf engineTranscribeMedicalSettings
+      `Prelude.seq` Prelude.rnf engineTranscribeSettings
+
+instance Data.ToJSON TranscriptionConfiguration where
+  toJSON TranscriptionConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("EngineTranscribeMedicalSettings" Data..=)
+              Prelude.<$> engineTranscribeMedicalSettings,
+            ("EngineTranscribeSettings" Data..=)
+              Prelude.<$> engineTranscribeSettings
+          ]
+      )
diff --git a/gen/Amazonka/ChimeSdkMeetings/UntagResource.hs b/gen/Amazonka/ChimeSdkMeetings/UntagResource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ChimeSdkMeetings/UntagResource.hs
@@ -0,0 +1,184 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ChimeSdkMeetings.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 resources. When you
+-- specify a tag key, the action removes both that key and its associated
+-- value. The operation succeeds even if you attempt to remove tags from a
+-- resource that were already removed. Note the following:
+--
+-- -   To remove tags from a resource, you need the necessary permissions
+--     for the service that the resource belongs to as well as permissions
+--     for removing tags. For more information, see the documentation for
+--     the service whose resource you want to untag.
+--
+-- -   You can only tag resources that are located in the specified AWS
+--     Region for the calling AWS account.
+--
+-- __Minimum permissions__
+--
+-- In addition to the @tag:UntagResources@ permission required by this
+-- operation, you must also have the remove tags permission defined by the
+-- service that created the resource. For example, to remove the tags from
+-- an Amazon EC2 instance using the @UntagResources@ operation, you must
+-- have both of the following permissions:
+--
+-- @tag:UntagResource@
+--
+-- @ChimeSDKMeetings:DeleteTags@
+module Amazonka.ChimeSdkMeetings.UntagResource
+  ( -- * Creating a Request
+    UntagResource (..),
+    newUntagResource,
+
+    -- * Request Lenses
+    untagResource_resourceARN,
+    untagResource_tagKeys,
+
+    -- * Destructuring the Response
+    UntagResourceResponse (..),
+    newUntagResourceResponse,
+
+    -- * Response Lenses
+    untagResourceResponse_httpStatus,
+  )
+where
+
+import Amazonka.ChimeSdkMeetings.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 ARN of the resource that you\'re removing tags from.
+    resourceARN :: Prelude.Text,
+    -- | The tag keys being removed from the resources.
+    tagKeys :: [Prelude.Text]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UntagResource' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'resourceARN', 'untagResource_resourceARN' - The ARN of the resource that you\'re removing tags from.
+--
+-- 'tagKeys', 'untagResource_tagKeys' - The tag keys being removed from the resources.
+newUntagResource ::
+  -- | 'resourceARN'
+  Prelude.Text ->
+  UntagResource
+newUntagResource pResourceARN_ =
+  UntagResource'
+    { resourceARN = pResourceARN_,
+      tagKeys = Prelude.mempty
+    }
+
+-- | The ARN of the resource that you\'re removing tags from.
+untagResource_resourceARN :: Lens.Lens' UntagResource Prelude.Text
+untagResource_resourceARN = Lens.lens (\UntagResource' {resourceARN} -> resourceARN) (\s@UntagResource' {} a -> s {resourceARN = a} :: UntagResource)
+
+-- | The tag keys being removed from the resources.
+untagResource_tagKeys :: Lens.Lens' UntagResource [Prelude.Text]
+untagResource_tagKeys = Lens.lens (\UntagResource' {tagKeys} -> tagKeys) (\s@UntagResource' {} a -> s {tagKeys = a} :: UntagResource) Prelude.. Lens.coerced
+
+instance Core.AWSRequest UntagResource where
+  type
+    AWSResponse UntagResource =
+      UntagResourceResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          UntagResourceResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UntagResource where
+  hashWithSalt _salt UntagResource' {..} =
+    _salt
+      `Prelude.hashWithSalt` resourceARN
+      `Prelude.hashWithSalt` tagKeys
+
+instance Prelude.NFData UntagResource where
+  rnf UntagResource' {..} =
+    Prelude.rnf resourceARN
+      `Prelude.seq` Prelude.rnf tagKeys
+
+instance Data.ToHeaders UntagResource where
+  toHeaders = Prelude.const Prelude.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'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UntagResourceResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'untagResourceResponse_httpStatus' - The response's http status code.
+newUntagResourceResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UntagResourceResponse
+newUntagResourceResponse pHttpStatus_ =
+  UntagResourceResponse' {httpStatus = pHttpStatus_}
+
+-- | The response's http status code.
+untagResourceResponse_httpStatus :: Lens.Lens' UntagResourceResponse Prelude.Int
+untagResourceResponse_httpStatus = Lens.lens (\UntagResourceResponse' {httpStatus} -> httpStatus) (\s@UntagResourceResponse' {} a -> s {httpStatus = a} :: UntagResourceResponse)
+
+instance Prelude.NFData UntagResourceResponse where
+  rnf UntagResourceResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ChimeSdkMeetings/UpdateAttendeeCapabilities.hs b/gen/Amazonka/ChimeSdkMeetings/UpdateAttendeeCapabilities.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ChimeSdkMeetings/UpdateAttendeeCapabilities.hs
@@ -0,0 +1,226 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.ChimeSdkMeetings.UpdateAttendeeCapabilities
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- The capabilties that you want to update.
+--
+-- You use the capabilities with a set of values that control what the
+-- capabilities can do, such as @SendReceive@ data. For more information
+-- about those values, see .
+--
+-- When using capabilities, be aware of these corner cases:
+--
+-- -   You can\'t set @content@ capabilities to @SendReceive@ or @Receive@
+--     unless you also set @video@ capabilities to @SendReceive@ or
+--     @Receive@. If you don\'t set the @video@ capability to receive, the
+--     response will contain an HTTP 400 Bad Request status code. However,
+--     you can set your @video@ capability to receive and you set your
+--     @content@ capability to not receive.
+--
+-- -   When you change an @audio@ capability from @None@ or @Receive@ to
+--     @Send@ or @SendReceive@ , and if the attendee left their microphone
+--     unmuted, audio will flow from the attendee to the other meeting
+--     participants.
+--
+-- -   When you change a @video@ or @content@ capability from @None@ or
+--     @Receive@ to @Send@ or @SendReceive@ , and if the attendee turned on
+--     their video or content streams, remote attendess can receive those
+--     streams, but only after media renegotiation between the client and
+--     the Amazon Chime back-end server.
+module Amazonka.ChimeSdkMeetings.UpdateAttendeeCapabilities
+  ( -- * Creating a Request
+    UpdateAttendeeCapabilities (..),
+    newUpdateAttendeeCapabilities,
+
+    -- * Request Lenses
+    updateAttendeeCapabilities_meetingId,
+    updateAttendeeCapabilities_attendeeId,
+    updateAttendeeCapabilities_capabilities,
+
+    -- * Destructuring the Response
+    UpdateAttendeeCapabilitiesResponse (..),
+    newUpdateAttendeeCapabilitiesResponse,
+
+    -- * Response Lenses
+    updateAttendeeCapabilitiesResponse_attendee,
+    updateAttendeeCapabilitiesResponse_httpStatus,
+  )
+where
+
+import Amazonka.ChimeSdkMeetings.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:/ 'newUpdateAttendeeCapabilities' smart constructor.
+data UpdateAttendeeCapabilities = UpdateAttendeeCapabilities'
+  { -- | The ID of the meeting associated with the update request.
+    meetingId :: Prelude.Text,
+    -- | The ID of the attendee associated with the update request.
+    attendeeId :: Prelude.Text,
+    -- | The capabilties that you want to update.
+    capabilities :: AttendeeCapabilities
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateAttendeeCapabilities' 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:
+--
+-- 'meetingId', 'updateAttendeeCapabilities_meetingId' - The ID of the meeting associated with the update request.
+--
+-- 'attendeeId', 'updateAttendeeCapabilities_attendeeId' - The ID of the attendee associated with the update request.
+--
+-- 'capabilities', 'updateAttendeeCapabilities_capabilities' - The capabilties that you want to update.
+newUpdateAttendeeCapabilities ::
+  -- | 'meetingId'
+  Prelude.Text ->
+  -- | 'attendeeId'
+  Prelude.Text ->
+  -- | 'capabilities'
+  AttendeeCapabilities ->
+  UpdateAttendeeCapabilities
+newUpdateAttendeeCapabilities
+  pMeetingId_
+  pAttendeeId_
+  pCapabilities_ =
+    UpdateAttendeeCapabilities'
+      { meetingId =
+          pMeetingId_,
+        attendeeId = pAttendeeId_,
+        capabilities = pCapabilities_
+      }
+
+-- | The ID of the meeting associated with the update request.
+updateAttendeeCapabilities_meetingId :: Lens.Lens' UpdateAttendeeCapabilities Prelude.Text
+updateAttendeeCapabilities_meetingId = Lens.lens (\UpdateAttendeeCapabilities' {meetingId} -> meetingId) (\s@UpdateAttendeeCapabilities' {} a -> s {meetingId = a} :: UpdateAttendeeCapabilities)
+
+-- | The ID of the attendee associated with the update request.
+updateAttendeeCapabilities_attendeeId :: Lens.Lens' UpdateAttendeeCapabilities Prelude.Text
+updateAttendeeCapabilities_attendeeId = Lens.lens (\UpdateAttendeeCapabilities' {attendeeId} -> attendeeId) (\s@UpdateAttendeeCapabilities' {} a -> s {attendeeId = a} :: UpdateAttendeeCapabilities)
+
+-- | The capabilties that you want to update.
+updateAttendeeCapabilities_capabilities :: Lens.Lens' UpdateAttendeeCapabilities AttendeeCapabilities
+updateAttendeeCapabilities_capabilities = Lens.lens (\UpdateAttendeeCapabilities' {capabilities} -> capabilities) (\s@UpdateAttendeeCapabilities' {} a -> s {capabilities = a} :: UpdateAttendeeCapabilities)
+
+instance Core.AWSRequest UpdateAttendeeCapabilities where
+  type
+    AWSResponse UpdateAttendeeCapabilities =
+      UpdateAttendeeCapabilitiesResponse
+  request overrides =
+    Request.putJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          UpdateAttendeeCapabilitiesResponse'
+            Prelude.<$> (x Data..?> "Attendee")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UpdateAttendeeCapabilities where
+  hashWithSalt _salt UpdateAttendeeCapabilities' {..} =
+    _salt
+      `Prelude.hashWithSalt` meetingId
+      `Prelude.hashWithSalt` attendeeId
+      `Prelude.hashWithSalt` capabilities
+
+instance Prelude.NFData UpdateAttendeeCapabilities where
+  rnf UpdateAttendeeCapabilities' {..} =
+    Prelude.rnf meetingId
+      `Prelude.seq` Prelude.rnf attendeeId
+      `Prelude.seq` Prelude.rnf capabilities
+
+instance Data.ToHeaders UpdateAttendeeCapabilities where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToJSON UpdateAttendeeCapabilities where
+  toJSON UpdateAttendeeCapabilities' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("Capabilities" Data..= capabilities)]
+      )
+
+instance Data.ToPath UpdateAttendeeCapabilities where
+  toPath UpdateAttendeeCapabilities' {..} =
+    Prelude.mconcat
+      [ "/meetings/",
+        Data.toBS meetingId,
+        "/attendees/",
+        Data.toBS attendeeId,
+        "/capabilities"
+      ]
+
+instance Data.ToQuery UpdateAttendeeCapabilities where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateAttendeeCapabilitiesResponse' smart constructor.
+data UpdateAttendeeCapabilitiesResponse = UpdateAttendeeCapabilitiesResponse'
+  { -- | The updated attendee data.
+    attendee :: Prelude.Maybe Attendee,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateAttendeeCapabilitiesResponse' 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:
+--
+-- 'attendee', 'updateAttendeeCapabilitiesResponse_attendee' - The updated attendee data.
+--
+-- 'httpStatus', 'updateAttendeeCapabilitiesResponse_httpStatus' - The response's http status code.
+newUpdateAttendeeCapabilitiesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UpdateAttendeeCapabilitiesResponse
+newUpdateAttendeeCapabilitiesResponse pHttpStatus_ =
+  UpdateAttendeeCapabilitiesResponse'
+    { attendee =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The updated attendee data.
+updateAttendeeCapabilitiesResponse_attendee :: Lens.Lens' UpdateAttendeeCapabilitiesResponse (Prelude.Maybe Attendee)
+updateAttendeeCapabilitiesResponse_attendee = Lens.lens (\UpdateAttendeeCapabilitiesResponse' {attendee} -> attendee) (\s@UpdateAttendeeCapabilitiesResponse' {} a -> s {attendee = a} :: UpdateAttendeeCapabilitiesResponse)
+
+-- | The response's http status code.
+updateAttendeeCapabilitiesResponse_httpStatus :: Lens.Lens' UpdateAttendeeCapabilitiesResponse Prelude.Int
+updateAttendeeCapabilitiesResponse_httpStatus = Lens.lens (\UpdateAttendeeCapabilitiesResponse' {httpStatus} -> httpStatus) (\s@UpdateAttendeeCapabilitiesResponse' {} a -> s {httpStatus = a} :: UpdateAttendeeCapabilitiesResponse)
+
+instance
+  Prelude.NFData
+    UpdateAttendeeCapabilitiesResponse
+  where
+  rnf UpdateAttendeeCapabilitiesResponse' {..} =
+    Prelude.rnf attendee
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/ChimeSdkMeetings/Waiters.hs b/gen/Amazonka/ChimeSdkMeetings/Waiters.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/ChimeSdkMeetings/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.ChimeSdkMeetings.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.ChimeSdkMeetings.Waiters where
+
+import Amazonka.ChimeSdkMeetings.Lens
+import Amazonka.ChimeSdkMeetings.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.ChimeSdkMeetings
+import Test.Amazonka.ChimeSdkMeetings.Internal
+import Test.Tasty
+
+main :: IO ()
+main =
+  defaultMain $
+    testGroup
+      "ChimeSdkMeetings"
+      [ testGroup "tests" tests,
+        testGroup "fixtures" fixtures
+      ]
diff --git a/test/Test/Amazonka/ChimeSdkMeetings.hs b/test/Test/Amazonka/ChimeSdkMeetings.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/ChimeSdkMeetings.hs
@@ -0,0 +1,20 @@
+-- |
+-- Module      : Test.Amazonka.ChimeSdkMeetings
+-- 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.ChimeSdkMeetings
+  ( tests,
+    fixtures,
+  )
+where
+
+import Test.Tasty (TestTree)
+
+tests :: [TestTree]
+tests = []
+
+fixtures :: [TestTree]
+fixtures = []
diff --git a/test/Test/Amazonka/ChimeSdkMeetings/Internal.hs b/test/Test/Amazonka/ChimeSdkMeetings/Internal.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/ChimeSdkMeetings/Internal.hs
@@ -0,0 +1,8 @@
+-- |
+-- Module      : Test.Amazonka.ChimeSdkMeetings.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.ChimeSdkMeetings.Internal where
diff --git a/test/Test/Amazonka/Gen/ChimeSdkMeetings.hs b/test/Test/Amazonka/Gen/ChimeSdkMeetings.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/Gen/ChimeSdkMeetings.hs
@@ -0,0 +1,358 @@
+{-# 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.ChimeSdkMeetings
+-- 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.ChimeSdkMeetings where
+
+import Amazonka.ChimeSdkMeetings
+import qualified Data.Proxy as Proxy
+import Test.Amazonka.ChimeSdkMeetings.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"
+--         [ requestBatchCreateAttendee $
+--             newBatchCreateAttendee
+--
+--         , requestBatchUpdateAttendeeCapabilitiesExcept $
+--             newBatchUpdateAttendeeCapabilitiesExcept
+--
+--         , requestCreateAttendee $
+--             newCreateAttendee
+--
+--         , requestCreateMeeting $
+--             newCreateMeeting
+--
+--         , requestCreateMeetingWithAttendees $
+--             newCreateMeetingWithAttendees
+--
+--         , requestDeleteAttendee $
+--             newDeleteAttendee
+--
+--         , requestDeleteMeeting $
+--             newDeleteMeeting
+--
+--         , requestGetAttendee $
+--             newGetAttendee
+--
+--         , requestGetMeeting $
+--             newGetMeeting
+--
+--         , requestListAttendees $
+--             newListAttendees
+--
+--         , requestListTagsForResource $
+--             newListTagsForResource
+--
+--         , requestStartMeetingTranscription $
+--             newStartMeetingTranscription
+--
+--         , requestStopMeetingTranscription $
+--             newStopMeetingTranscription
+--
+--         , requestTagResource $
+--             newTagResource
+--
+--         , requestUntagResource $
+--             newUntagResource
+--
+--         , requestUpdateAttendeeCapabilities $
+--             newUpdateAttendeeCapabilities
+--
+--           ]
+
+--     , testGroup "response"
+--         [ responseBatchCreateAttendee $
+--             newBatchCreateAttendeeResponse
+--
+--         , responseBatchUpdateAttendeeCapabilitiesExcept $
+--             newBatchUpdateAttendeeCapabilitiesExceptResponse
+--
+--         , responseCreateAttendee $
+--             newCreateAttendeeResponse
+--
+--         , responseCreateMeeting $
+--             newCreateMeetingResponse
+--
+--         , responseCreateMeetingWithAttendees $
+--             newCreateMeetingWithAttendeesResponse
+--
+--         , responseDeleteAttendee $
+--             newDeleteAttendeeResponse
+--
+--         , responseDeleteMeeting $
+--             newDeleteMeetingResponse
+--
+--         , responseGetAttendee $
+--             newGetAttendeeResponse
+--
+--         , responseGetMeeting $
+--             newGetMeetingResponse
+--
+--         , responseListAttendees $
+--             newListAttendeesResponse
+--
+--         , responseListTagsForResource $
+--             newListTagsForResourceResponse
+--
+--         , responseStartMeetingTranscription $
+--             newStartMeetingTranscriptionResponse
+--
+--         , responseStopMeetingTranscription $
+--             newStopMeetingTranscriptionResponse
+--
+--         , responseTagResource $
+--             newTagResourceResponse
+--
+--         , responseUntagResource $
+--             newUntagResourceResponse
+--
+--         , responseUpdateAttendeeCapabilities $
+--             newUpdateAttendeeCapabilitiesResponse
+--
+--           ]
+--     ]
+
+-- Requests
+
+requestBatchCreateAttendee :: BatchCreateAttendee -> TestTree
+requestBatchCreateAttendee =
+  req
+    "BatchCreateAttendee"
+    "fixture/BatchCreateAttendee.yaml"
+
+requestBatchUpdateAttendeeCapabilitiesExcept :: BatchUpdateAttendeeCapabilitiesExcept -> TestTree
+requestBatchUpdateAttendeeCapabilitiesExcept =
+  req
+    "BatchUpdateAttendeeCapabilitiesExcept"
+    "fixture/BatchUpdateAttendeeCapabilitiesExcept.yaml"
+
+requestCreateAttendee :: CreateAttendee -> TestTree
+requestCreateAttendee =
+  req
+    "CreateAttendee"
+    "fixture/CreateAttendee.yaml"
+
+requestCreateMeeting :: CreateMeeting -> TestTree
+requestCreateMeeting =
+  req
+    "CreateMeeting"
+    "fixture/CreateMeeting.yaml"
+
+requestCreateMeetingWithAttendees :: CreateMeetingWithAttendees -> TestTree
+requestCreateMeetingWithAttendees =
+  req
+    "CreateMeetingWithAttendees"
+    "fixture/CreateMeetingWithAttendees.yaml"
+
+requestDeleteAttendee :: DeleteAttendee -> TestTree
+requestDeleteAttendee =
+  req
+    "DeleteAttendee"
+    "fixture/DeleteAttendee.yaml"
+
+requestDeleteMeeting :: DeleteMeeting -> TestTree
+requestDeleteMeeting =
+  req
+    "DeleteMeeting"
+    "fixture/DeleteMeeting.yaml"
+
+requestGetAttendee :: GetAttendee -> TestTree
+requestGetAttendee =
+  req
+    "GetAttendee"
+    "fixture/GetAttendee.yaml"
+
+requestGetMeeting :: GetMeeting -> TestTree
+requestGetMeeting =
+  req
+    "GetMeeting"
+    "fixture/GetMeeting.yaml"
+
+requestListAttendees :: ListAttendees -> TestTree
+requestListAttendees =
+  req
+    "ListAttendees"
+    "fixture/ListAttendees.yaml"
+
+requestListTagsForResource :: ListTagsForResource -> TestTree
+requestListTagsForResource =
+  req
+    "ListTagsForResource"
+    "fixture/ListTagsForResource.yaml"
+
+requestStartMeetingTranscription :: StartMeetingTranscription -> TestTree
+requestStartMeetingTranscription =
+  req
+    "StartMeetingTranscription"
+    "fixture/StartMeetingTranscription.yaml"
+
+requestStopMeetingTranscription :: StopMeetingTranscription -> TestTree
+requestStopMeetingTranscription =
+  req
+    "StopMeetingTranscription"
+    "fixture/StopMeetingTranscription.yaml"
+
+requestTagResource :: TagResource -> TestTree
+requestTagResource =
+  req
+    "TagResource"
+    "fixture/TagResource.yaml"
+
+requestUntagResource :: UntagResource -> TestTree
+requestUntagResource =
+  req
+    "UntagResource"
+    "fixture/UntagResource.yaml"
+
+requestUpdateAttendeeCapabilities :: UpdateAttendeeCapabilities -> TestTree
+requestUpdateAttendeeCapabilities =
+  req
+    "UpdateAttendeeCapabilities"
+    "fixture/UpdateAttendeeCapabilities.yaml"
+
+-- Responses
+
+responseBatchCreateAttendee :: BatchCreateAttendeeResponse -> TestTree
+responseBatchCreateAttendee =
+  res
+    "BatchCreateAttendeeResponse"
+    "fixture/BatchCreateAttendeeResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy BatchCreateAttendee)
+
+responseBatchUpdateAttendeeCapabilitiesExcept :: BatchUpdateAttendeeCapabilitiesExceptResponse -> TestTree
+responseBatchUpdateAttendeeCapabilitiesExcept =
+  res
+    "BatchUpdateAttendeeCapabilitiesExceptResponse"
+    "fixture/BatchUpdateAttendeeCapabilitiesExceptResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy BatchUpdateAttendeeCapabilitiesExcept)
+
+responseCreateAttendee :: CreateAttendeeResponse -> TestTree
+responseCreateAttendee =
+  res
+    "CreateAttendeeResponse"
+    "fixture/CreateAttendeeResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateAttendee)
+
+responseCreateMeeting :: CreateMeetingResponse -> TestTree
+responseCreateMeeting =
+  res
+    "CreateMeetingResponse"
+    "fixture/CreateMeetingResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateMeeting)
+
+responseCreateMeetingWithAttendees :: CreateMeetingWithAttendeesResponse -> TestTree
+responseCreateMeetingWithAttendees =
+  res
+    "CreateMeetingWithAttendeesResponse"
+    "fixture/CreateMeetingWithAttendeesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateMeetingWithAttendees)
+
+responseDeleteAttendee :: DeleteAttendeeResponse -> TestTree
+responseDeleteAttendee =
+  res
+    "DeleteAttendeeResponse"
+    "fixture/DeleteAttendeeResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteAttendee)
+
+responseDeleteMeeting :: DeleteMeetingResponse -> TestTree
+responseDeleteMeeting =
+  res
+    "DeleteMeetingResponse"
+    "fixture/DeleteMeetingResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteMeeting)
+
+responseGetAttendee :: GetAttendeeResponse -> TestTree
+responseGetAttendee =
+  res
+    "GetAttendeeResponse"
+    "fixture/GetAttendeeResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetAttendee)
+
+responseGetMeeting :: GetMeetingResponse -> TestTree
+responseGetMeeting =
+  res
+    "GetMeetingResponse"
+    "fixture/GetMeetingResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetMeeting)
+
+responseListAttendees :: ListAttendeesResponse -> TestTree
+responseListAttendees =
+  res
+    "ListAttendeesResponse"
+    "fixture/ListAttendeesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListAttendees)
+
+responseListTagsForResource :: ListTagsForResourceResponse -> TestTree
+responseListTagsForResource =
+  res
+    "ListTagsForResourceResponse"
+    "fixture/ListTagsForResourceResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListTagsForResource)
+
+responseStartMeetingTranscription :: StartMeetingTranscriptionResponse -> TestTree
+responseStartMeetingTranscription =
+  res
+    "StartMeetingTranscriptionResponse"
+    "fixture/StartMeetingTranscriptionResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy StartMeetingTranscription)
+
+responseStopMeetingTranscription :: StopMeetingTranscriptionResponse -> TestTree
+responseStopMeetingTranscription =
+  res
+    "StopMeetingTranscriptionResponse"
+    "fixture/StopMeetingTranscriptionResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy StopMeetingTranscription)
+
+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)
+
+responseUpdateAttendeeCapabilities :: UpdateAttendeeCapabilitiesResponse -> TestTree
+responseUpdateAttendeeCapabilities =
+  res
+    "UpdateAttendeeCapabilitiesResponse"
+    "fixture/UpdateAttendeeCapabilitiesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateAttendeeCapabilities)
