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 Lex Model Building V2 SDK
+
+* [Version](#version)
+* [Description](#description)
+* [Contribute](#contribute)
+* [Licence](#licence)
+
+
+## Version
+ 
+`2.0` - Derived from API version @2020-08-07@ of the AWS service descriptions, licensed under Apache 2.0.
+
+## Description
+
+Documentation is available via [Hackage](http://hackage.haskell.org/package/amazonka-lexv2-models)
+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.LexV2Models](http://hackage.haskell.org/package/amazonka-lexv2-models/docs/Amazonka-LexV2Models.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-lexv2-models` 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-lexv2-models.cabal b/amazonka-lexv2-models.cabal
new file mode 100644
--- /dev/null
+++ b/amazonka-lexv2-models.cabal
@@ -0,0 +1,347 @@
+cabal-version:      2.2
+name:               amazonka-lexv2-models
+version:            2.0
+synopsis:           Amazon Lex Model Building V2 SDK.
+homepage:           https://github.com/brendanhay/amazonka
+bug-reports:        https://github.com/brendanhay/amazonka/issues
+license:            MPL-2.0
+license-file:       LICENSE
+author:             Brendan Hay
+maintainer:
+  Brendan Hay <brendan.g.hay+amazonka@gmail.com>, Jack Kelly <jack@jackkelly.name>
+
+copyright:          Copyright (c) 2013-2023 Brendan Hay
+category:           AWS
+build-type:         Simple
+extra-source-files:
+  fixture/*.proto
+  fixture/*.yaml
+  README.md
+  src/.gitkeep
+
+description:
+  Derived from API version @2020-08-07@ 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.LexV2Models.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.LexV2Models" 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-lexv2-models
+
+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.LexV2Models
+    Amazonka.LexV2Models.BatchCreateCustomVocabularyItem
+    Amazonka.LexV2Models.BatchDeleteCustomVocabularyItem
+    Amazonka.LexV2Models.BatchUpdateCustomVocabularyItem
+    Amazonka.LexV2Models.BuildBotLocale
+    Amazonka.LexV2Models.CreateBot
+    Amazonka.LexV2Models.CreateBotAlias
+    Amazonka.LexV2Models.CreateBotLocale
+    Amazonka.LexV2Models.CreateBotVersion
+    Amazonka.LexV2Models.CreateExport
+    Amazonka.LexV2Models.CreateIntent
+    Amazonka.LexV2Models.CreateResourcePolicy
+    Amazonka.LexV2Models.CreateResourcePolicyStatement
+    Amazonka.LexV2Models.CreateSlot
+    Amazonka.LexV2Models.CreateSlotType
+    Amazonka.LexV2Models.CreateUploadUrl
+    Amazonka.LexV2Models.DeleteBot
+    Amazonka.LexV2Models.DeleteBotAlias
+    Amazonka.LexV2Models.DeleteBotLocale
+    Amazonka.LexV2Models.DeleteBotVersion
+    Amazonka.LexV2Models.DeleteCustomVocabulary
+    Amazonka.LexV2Models.DeleteExport
+    Amazonka.LexV2Models.DeleteImport
+    Amazonka.LexV2Models.DeleteIntent
+    Amazonka.LexV2Models.DeleteResourcePolicy
+    Amazonka.LexV2Models.DeleteResourcePolicyStatement
+    Amazonka.LexV2Models.DeleteSlot
+    Amazonka.LexV2Models.DeleteSlotType
+    Amazonka.LexV2Models.DeleteUtterances
+    Amazonka.LexV2Models.DescribeBot
+    Amazonka.LexV2Models.DescribeBotAlias
+    Amazonka.LexV2Models.DescribeBotLocale
+    Amazonka.LexV2Models.DescribeBotRecommendation
+    Amazonka.LexV2Models.DescribeBotVersion
+    Amazonka.LexV2Models.DescribeCustomVocabularyMetadata
+    Amazonka.LexV2Models.DescribeExport
+    Amazonka.LexV2Models.DescribeImport
+    Amazonka.LexV2Models.DescribeIntent
+    Amazonka.LexV2Models.DescribeResourcePolicy
+    Amazonka.LexV2Models.DescribeSlot
+    Amazonka.LexV2Models.DescribeSlotType
+    Amazonka.LexV2Models.Lens
+    Amazonka.LexV2Models.ListAggregatedUtterances
+    Amazonka.LexV2Models.ListBotAliases
+    Amazonka.LexV2Models.ListBotLocales
+    Amazonka.LexV2Models.ListBotRecommendations
+    Amazonka.LexV2Models.ListBots
+    Amazonka.LexV2Models.ListBotVersions
+    Amazonka.LexV2Models.ListBuiltInIntents
+    Amazonka.LexV2Models.ListBuiltInSlotTypes
+    Amazonka.LexV2Models.ListCustomVocabularyItems
+    Amazonka.LexV2Models.ListExports
+    Amazonka.LexV2Models.ListImports
+    Amazonka.LexV2Models.ListIntents
+    Amazonka.LexV2Models.ListRecommendedIntents
+    Amazonka.LexV2Models.ListSlots
+    Amazonka.LexV2Models.ListSlotTypes
+    Amazonka.LexV2Models.ListTagsForResource
+    Amazonka.LexV2Models.SearchAssociatedTranscripts
+    Amazonka.LexV2Models.StartBotRecommendation
+    Amazonka.LexV2Models.StartImport
+    Amazonka.LexV2Models.StopBotRecommendation
+    Amazonka.LexV2Models.TagResource
+    Amazonka.LexV2Models.Types
+    Amazonka.LexV2Models.Types.AdvancedRecognitionSetting
+    Amazonka.LexV2Models.Types.AggregatedUtterancesFilter
+    Amazonka.LexV2Models.Types.AggregatedUtterancesFilterName
+    Amazonka.LexV2Models.Types.AggregatedUtterancesFilterOperator
+    Amazonka.LexV2Models.Types.AggregatedUtterancesSortAttribute
+    Amazonka.LexV2Models.Types.AggregatedUtterancesSortBy
+    Amazonka.LexV2Models.Types.AggregatedUtterancesSummary
+    Amazonka.LexV2Models.Types.AllowedInputTypes
+    Amazonka.LexV2Models.Types.AssociatedTranscript
+    Amazonka.LexV2Models.Types.AssociatedTranscriptFilter
+    Amazonka.LexV2Models.Types.AssociatedTranscriptFilterName
+    Amazonka.LexV2Models.Types.AudioAndDTMFInputSpecification
+    Amazonka.LexV2Models.Types.AudioLogDestination
+    Amazonka.LexV2Models.Types.AudioLogSetting
+    Amazonka.LexV2Models.Types.AudioRecognitionStrategy
+    Amazonka.LexV2Models.Types.AudioSpecification
+    Amazonka.LexV2Models.Types.BotAliasHistoryEvent
+    Amazonka.LexV2Models.Types.BotAliasLocaleSettings
+    Amazonka.LexV2Models.Types.BotAliasStatus
+    Amazonka.LexV2Models.Types.BotAliasSummary
+    Amazonka.LexV2Models.Types.BotExportSpecification
+    Amazonka.LexV2Models.Types.BotFilter
+    Amazonka.LexV2Models.Types.BotFilterName
+    Amazonka.LexV2Models.Types.BotFilterOperator
+    Amazonka.LexV2Models.Types.BotImportSpecification
+    Amazonka.LexV2Models.Types.BotLocaleExportSpecification
+    Amazonka.LexV2Models.Types.BotLocaleFilter
+    Amazonka.LexV2Models.Types.BotLocaleFilterName
+    Amazonka.LexV2Models.Types.BotLocaleFilterOperator
+    Amazonka.LexV2Models.Types.BotLocaleHistoryEvent
+    Amazonka.LexV2Models.Types.BotLocaleImportSpecification
+    Amazonka.LexV2Models.Types.BotLocaleSortAttribute
+    Amazonka.LexV2Models.Types.BotLocaleSortBy
+    Amazonka.LexV2Models.Types.BotLocaleStatus
+    Amazonka.LexV2Models.Types.BotLocaleSummary
+    Amazonka.LexV2Models.Types.BotRecommendationResults
+    Amazonka.LexV2Models.Types.BotRecommendationResultStatistics
+    Amazonka.LexV2Models.Types.BotRecommendationStatus
+    Amazonka.LexV2Models.Types.BotRecommendationSummary
+    Amazonka.LexV2Models.Types.BotSortAttribute
+    Amazonka.LexV2Models.Types.BotSortBy
+    Amazonka.LexV2Models.Types.BotStatus
+    Amazonka.LexV2Models.Types.BotSummary
+    Amazonka.LexV2Models.Types.BotVersionLocaleDetails
+    Amazonka.LexV2Models.Types.BotVersionSortAttribute
+    Amazonka.LexV2Models.Types.BotVersionSortBy
+    Amazonka.LexV2Models.Types.BotVersionSummary
+    Amazonka.LexV2Models.Types.BuiltInIntentSortAttribute
+    Amazonka.LexV2Models.Types.BuiltInIntentSortBy
+    Amazonka.LexV2Models.Types.BuiltInIntentSummary
+    Amazonka.LexV2Models.Types.BuiltInSlotTypeSortAttribute
+    Amazonka.LexV2Models.Types.BuiltInSlotTypeSortBy
+    Amazonka.LexV2Models.Types.BuiltInSlotTypeSummary
+    Amazonka.LexV2Models.Types.Button
+    Amazonka.LexV2Models.Types.CloudWatchLogGroupLogDestination
+    Amazonka.LexV2Models.Types.CodeHookSpecification
+    Amazonka.LexV2Models.Types.CompositeSlotTypeSetting
+    Amazonka.LexV2Models.Types.Condition
+    Amazonka.LexV2Models.Types.ConditionalBranch
+    Amazonka.LexV2Models.Types.ConditionalSpecification
+    Amazonka.LexV2Models.Types.ConversationLogSettings
+    Amazonka.LexV2Models.Types.CustomPayload
+    Amazonka.LexV2Models.Types.CustomVocabularyEntryId
+    Amazonka.LexV2Models.Types.CustomVocabularyExportSpecification
+    Amazonka.LexV2Models.Types.CustomVocabularyImportSpecification
+    Amazonka.LexV2Models.Types.CustomVocabularyItem
+    Amazonka.LexV2Models.Types.CustomVocabularyStatus
+    Amazonka.LexV2Models.Types.DataPrivacy
+    Amazonka.LexV2Models.Types.DateRangeFilter
+    Amazonka.LexV2Models.Types.DefaultConditionalBranch
+    Amazonka.LexV2Models.Types.DialogAction
+    Amazonka.LexV2Models.Types.DialogActionType
+    Amazonka.LexV2Models.Types.DialogCodeHookInvocationSetting
+    Amazonka.LexV2Models.Types.DialogCodeHookSettings
+    Amazonka.LexV2Models.Types.DialogState
+    Amazonka.LexV2Models.Types.DTMFSpecification
+    Amazonka.LexV2Models.Types.Effect
+    Amazonka.LexV2Models.Types.ElicitationCodeHookInvocationSetting
+    Amazonka.LexV2Models.Types.EncryptionSetting
+    Amazonka.LexV2Models.Types.ErrorCode
+    Amazonka.LexV2Models.Types.ExportFilter
+    Amazonka.LexV2Models.Types.ExportFilterName
+    Amazonka.LexV2Models.Types.ExportFilterOperator
+    Amazonka.LexV2Models.Types.ExportResourceSpecification
+    Amazonka.LexV2Models.Types.ExportSortAttribute
+    Amazonka.LexV2Models.Types.ExportSortBy
+    Amazonka.LexV2Models.Types.ExportStatus
+    Amazonka.LexV2Models.Types.ExportSummary
+    Amazonka.LexV2Models.Types.ExternalSourceSetting
+    Amazonka.LexV2Models.Types.FailedCustomVocabularyItem
+    Amazonka.LexV2Models.Types.FulfillmentCodeHookSettings
+    Amazonka.LexV2Models.Types.FulfillmentStartResponseSpecification
+    Amazonka.LexV2Models.Types.FulfillmentUpdateResponseSpecification
+    Amazonka.LexV2Models.Types.FulfillmentUpdatesSpecification
+    Amazonka.LexV2Models.Types.GrammarSlotTypeSetting
+    Amazonka.LexV2Models.Types.GrammarSlotTypeSource
+    Amazonka.LexV2Models.Types.ImageResponseCard
+    Amazonka.LexV2Models.Types.ImportExportFileFormat
+    Amazonka.LexV2Models.Types.ImportFilter
+    Amazonka.LexV2Models.Types.ImportFilterName
+    Amazonka.LexV2Models.Types.ImportFilterOperator
+    Amazonka.LexV2Models.Types.ImportResourceSpecification
+    Amazonka.LexV2Models.Types.ImportResourceType
+    Amazonka.LexV2Models.Types.ImportSortAttribute
+    Amazonka.LexV2Models.Types.ImportSortBy
+    Amazonka.LexV2Models.Types.ImportStatus
+    Amazonka.LexV2Models.Types.ImportSummary
+    Amazonka.LexV2Models.Types.InitialResponseSetting
+    Amazonka.LexV2Models.Types.InputContext
+    Amazonka.LexV2Models.Types.IntentClosingSetting
+    Amazonka.LexV2Models.Types.IntentConfirmationSetting
+    Amazonka.LexV2Models.Types.IntentFilter
+    Amazonka.LexV2Models.Types.IntentFilterName
+    Amazonka.LexV2Models.Types.IntentFilterOperator
+    Amazonka.LexV2Models.Types.IntentOverride
+    Amazonka.LexV2Models.Types.IntentSortAttribute
+    Amazonka.LexV2Models.Types.IntentSortBy
+    Amazonka.LexV2Models.Types.IntentStatistics
+    Amazonka.LexV2Models.Types.IntentSummary
+    Amazonka.LexV2Models.Types.KendraConfiguration
+    Amazonka.LexV2Models.Types.LambdaCodeHook
+    Amazonka.LexV2Models.Types.LexTranscriptFilter
+    Amazonka.LexV2Models.Types.MergeStrategy
+    Amazonka.LexV2Models.Types.Message
+    Amazonka.LexV2Models.Types.MessageGroup
+    Amazonka.LexV2Models.Types.MessageSelectionStrategy
+    Amazonka.LexV2Models.Types.MultipleValuesSetting
+    Amazonka.LexV2Models.Types.NewCustomVocabularyItem
+    Amazonka.LexV2Models.Types.ObfuscationSetting
+    Amazonka.LexV2Models.Types.ObfuscationSettingType
+    Amazonka.LexV2Models.Types.OutputContext
+    Amazonka.LexV2Models.Types.PathFormat
+    Amazonka.LexV2Models.Types.PlainTextMessage
+    Amazonka.LexV2Models.Types.PostDialogCodeHookInvocationSpecification
+    Amazonka.LexV2Models.Types.PostFulfillmentStatusSpecification
+    Amazonka.LexV2Models.Types.Principal
+    Amazonka.LexV2Models.Types.PromptAttempt
+    Amazonka.LexV2Models.Types.PromptAttemptSpecification
+    Amazonka.LexV2Models.Types.PromptSpecification
+    Amazonka.LexV2Models.Types.RecommendedIntentSummary
+    Amazonka.LexV2Models.Types.RelativeAggregationDuration
+    Amazonka.LexV2Models.Types.ResponseSpecification
+    Amazonka.LexV2Models.Types.S3BucketLogDestination
+    Amazonka.LexV2Models.Types.S3BucketTranscriptSource
+    Amazonka.LexV2Models.Types.SampleUtterance
+    Amazonka.LexV2Models.Types.SampleValue
+    Amazonka.LexV2Models.Types.SearchOrder
+    Amazonka.LexV2Models.Types.SentimentAnalysisSettings
+    Amazonka.LexV2Models.Types.SlotCaptureSetting
+    Amazonka.LexV2Models.Types.SlotConstraint
+    Amazonka.LexV2Models.Types.SlotDefaultValue
+    Amazonka.LexV2Models.Types.SlotDefaultValueSpecification
+    Amazonka.LexV2Models.Types.SlotFilter
+    Amazonka.LexV2Models.Types.SlotFilterName
+    Amazonka.LexV2Models.Types.SlotFilterOperator
+    Amazonka.LexV2Models.Types.SlotPriority
+    Amazonka.LexV2Models.Types.SlotShape
+    Amazonka.LexV2Models.Types.SlotSortAttribute
+    Amazonka.LexV2Models.Types.SlotSortBy
+    Amazonka.LexV2Models.Types.SlotSummary
+    Amazonka.LexV2Models.Types.SlotTypeCategory
+    Amazonka.LexV2Models.Types.SlotTypeFilter
+    Amazonka.LexV2Models.Types.SlotTypeFilterName
+    Amazonka.LexV2Models.Types.SlotTypeFilterOperator
+    Amazonka.LexV2Models.Types.SlotTypeSortAttribute
+    Amazonka.LexV2Models.Types.SlotTypeSortBy
+    Amazonka.LexV2Models.Types.SlotTypeStatistics
+    Amazonka.LexV2Models.Types.SlotTypeSummary
+    Amazonka.LexV2Models.Types.SlotTypeValue
+    Amazonka.LexV2Models.Types.SlotValue
+    Amazonka.LexV2Models.Types.SlotValueElicitationSetting
+    Amazonka.LexV2Models.Types.SlotValueOverride
+    Amazonka.LexV2Models.Types.SlotValueRegexFilter
+    Amazonka.LexV2Models.Types.SlotValueResolutionStrategy
+    Amazonka.LexV2Models.Types.SlotValueSelectionSetting
+    Amazonka.LexV2Models.Types.SortOrder
+    Amazonka.LexV2Models.Types.Specifications
+    Amazonka.LexV2Models.Types.SSMLMessage
+    Amazonka.LexV2Models.Types.StillWaitingResponseSpecification
+    Amazonka.LexV2Models.Types.SubSlotSetting
+    Amazonka.LexV2Models.Types.SubSlotTypeComposition
+    Amazonka.LexV2Models.Types.SubSlotValueElicitationSetting
+    Amazonka.LexV2Models.Types.TextInputSpecification
+    Amazonka.LexV2Models.Types.TextLogDestination
+    Amazonka.LexV2Models.Types.TextLogSetting
+    Amazonka.LexV2Models.Types.TimeDimension
+    Amazonka.LexV2Models.Types.TranscriptFilter
+    Amazonka.LexV2Models.Types.TranscriptFormat
+    Amazonka.LexV2Models.Types.TranscriptSourceSetting
+    Amazonka.LexV2Models.Types.UtteranceAggregationDuration
+    Amazonka.LexV2Models.Types.VoiceEngine
+    Amazonka.LexV2Models.Types.VoiceSettings
+    Amazonka.LexV2Models.Types.WaitAndContinueSpecification
+    Amazonka.LexV2Models.UntagResource
+    Amazonka.LexV2Models.UpdateBot
+    Amazonka.LexV2Models.UpdateBotAlias
+    Amazonka.LexV2Models.UpdateBotLocale
+    Amazonka.LexV2Models.UpdateBotRecommendation
+    Amazonka.LexV2Models.UpdateExport
+    Amazonka.LexV2Models.UpdateIntent
+    Amazonka.LexV2Models.UpdateResourcePolicy
+    Amazonka.LexV2Models.UpdateSlot
+    Amazonka.LexV2Models.UpdateSlotType
+    Amazonka.LexV2Models.Waiters
+
+  build-depends:
+    , amazonka-core  >=2.0  && <2.1
+    , base           >=4.12 && <5
+
+test-suite amazonka-lexv2-models-test
+  type:             exitcode-stdio-1.0
+  default-language: Haskell2010
+  hs-source-dirs:   test
+  main-is:          Main.hs
+  ghc-options:      -Wall -threaded
+
+  -- This section is encoded by the template and any modules added by
+  -- hand outside these namespaces will not correctly be added to the
+  -- distribution package.
+  other-modules:
+    Test.Amazonka.Gen.LexV2Models
+    Test.Amazonka.LexV2Models
+    Test.Amazonka.LexV2Models.Internal
+
+  build-depends:
+    , amazonka-core          >=2.0 && <2.1
+    , amazonka-lexv2-models
+    , amazonka-test          >=2.0 && <2.1
+    , base
+    , bytestring
+    , case-insensitive
+    , tasty
+    , tasty-hunit
+    , text
+    , time
+    , unordered-containers
diff --git a/fixture/BatchCreateCustomVocabularyItem.yaml b/fixture/BatchCreateCustomVocabularyItem.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/BatchCreateCustomVocabularyItem.yaml
@@ -0,0 +1,10 @@
+---
+method: PUT
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/models-v2-lex/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  models-v2-lex.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/BatchCreateCustomVocabularyItemResponse.proto b/fixture/BatchCreateCustomVocabularyItemResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/BatchCreateCustomVocabularyItemResponse.proto
diff --git a/fixture/BatchDeleteCustomVocabularyItem.yaml b/fixture/BatchDeleteCustomVocabularyItem.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/BatchDeleteCustomVocabularyItem.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/models-v2-lex/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  models-v2-lex.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/BatchDeleteCustomVocabularyItemResponse.proto b/fixture/BatchDeleteCustomVocabularyItemResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/BatchDeleteCustomVocabularyItemResponse.proto
diff --git a/fixture/BatchUpdateCustomVocabularyItem.yaml b/fixture/BatchUpdateCustomVocabularyItem.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/BatchUpdateCustomVocabularyItem.yaml
@@ -0,0 +1,10 @@
+---
+method: PUT
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/models-v2-lex/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  models-v2-lex.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/BatchUpdateCustomVocabularyItemResponse.proto b/fixture/BatchUpdateCustomVocabularyItemResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/BatchUpdateCustomVocabularyItemResponse.proto
diff --git a/fixture/BuildBotLocale.yaml b/fixture/BuildBotLocale.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/BuildBotLocale.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/models-v2-lex/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  models-v2-lex.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/BuildBotLocaleResponse.proto b/fixture/BuildBotLocaleResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/BuildBotLocaleResponse.proto
diff --git a/fixture/CreateBot.yaml b/fixture/CreateBot.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateBot.yaml
@@ -0,0 +1,10 @@
+---
+method: PUT
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/models-v2-lex/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  models-v2-lex.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/CreateBotAlias.yaml b/fixture/CreateBotAlias.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateBotAlias.yaml
@@ -0,0 +1,10 @@
+---
+method: PUT
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/models-v2-lex/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  models-v2-lex.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/CreateBotAliasResponse.proto b/fixture/CreateBotAliasResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateBotAliasResponse.proto
diff --git a/fixture/CreateBotLocale.yaml b/fixture/CreateBotLocale.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateBotLocale.yaml
@@ -0,0 +1,10 @@
+---
+method: PUT
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/models-v2-lex/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  models-v2-lex.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/CreateBotLocaleResponse.proto b/fixture/CreateBotLocaleResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateBotLocaleResponse.proto
diff --git a/fixture/CreateBotResponse.proto b/fixture/CreateBotResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateBotResponse.proto
diff --git a/fixture/CreateBotVersion.yaml b/fixture/CreateBotVersion.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateBotVersion.yaml
@@ -0,0 +1,10 @@
+---
+method: PUT
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/models-v2-lex/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  models-v2-lex.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/CreateBotVersionResponse.proto b/fixture/CreateBotVersionResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateBotVersionResponse.proto
diff --git a/fixture/CreateExport.yaml b/fixture/CreateExport.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateExport.yaml
@@ -0,0 +1,10 @@
+---
+method: PUT
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/models-v2-lex/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  models-v2-lex.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/CreateExportResponse.proto b/fixture/CreateExportResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateExportResponse.proto
diff --git a/fixture/CreateIntent.yaml b/fixture/CreateIntent.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateIntent.yaml
@@ -0,0 +1,10 @@
+---
+method: PUT
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/models-v2-lex/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  models-v2-lex.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/CreateIntentResponse.proto b/fixture/CreateIntentResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateIntentResponse.proto
diff --git a/fixture/CreateResourcePolicy.yaml b/fixture/CreateResourcePolicy.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateResourcePolicy.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/models-v2-lex/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  models-v2-lex.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/CreateResourcePolicyResponse.proto b/fixture/CreateResourcePolicyResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateResourcePolicyResponse.proto
diff --git a/fixture/CreateResourcePolicyStatement.yaml b/fixture/CreateResourcePolicyStatement.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateResourcePolicyStatement.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/models-v2-lex/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  models-v2-lex.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/CreateResourcePolicyStatementResponse.proto b/fixture/CreateResourcePolicyStatementResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateResourcePolicyStatementResponse.proto
diff --git a/fixture/CreateSlot.yaml b/fixture/CreateSlot.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateSlot.yaml
@@ -0,0 +1,10 @@
+---
+method: PUT
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/models-v2-lex/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  models-v2-lex.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/CreateSlotResponse.proto b/fixture/CreateSlotResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateSlotResponse.proto
diff --git a/fixture/CreateSlotType.yaml b/fixture/CreateSlotType.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateSlotType.yaml
@@ -0,0 +1,10 @@
+---
+method: PUT
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/models-v2-lex/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  models-v2-lex.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/CreateSlotTypeResponse.proto b/fixture/CreateSlotTypeResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateSlotTypeResponse.proto
diff --git a/fixture/CreateUploadUrl.yaml b/fixture/CreateUploadUrl.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateUploadUrl.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/models-v2-lex/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  models-v2-lex.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/CreateUploadUrlResponse.proto b/fixture/CreateUploadUrlResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateUploadUrlResponse.proto
diff --git a/fixture/DeleteBot.yaml b/fixture/DeleteBot.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteBot.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/models-v2-lex/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  models-v2-lex.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/DeleteBotAlias.yaml b/fixture/DeleteBotAlias.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteBotAlias.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/models-v2-lex/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  models-v2-lex.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/DeleteBotAliasResponse.proto b/fixture/DeleteBotAliasResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteBotAliasResponse.proto
diff --git a/fixture/DeleteBotLocale.yaml b/fixture/DeleteBotLocale.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteBotLocale.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/models-v2-lex/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  models-v2-lex.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/DeleteBotLocaleResponse.proto b/fixture/DeleteBotLocaleResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteBotLocaleResponse.proto
diff --git a/fixture/DeleteBotResponse.proto b/fixture/DeleteBotResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteBotResponse.proto
diff --git a/fixture/DeleteBotVersion.yaml b/fixture/DeleteBotVersion.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteBotVersion.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/models-v2-lex/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  models-v2-lex.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/DeleteBotVersionResponse.proto b/fixture/DeleteBotVersionResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteBotVersionResponse.proto
diff --git a/fixture/DeleteCustomVocabulary.yaml b/fixture/DeleteCustomVocabulary.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteCustomVocabulary.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/models-v2-lex/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  models-v2-lex.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/DeleteCustomVocabularyResponse.proto b/fixture/DeleteCustomVocabularyResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteCustomVocabularyResponse.proto
diff --git a/fixture/DeleteExport.yaml b/fixture/DeleteExport.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteExport.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/models-v2-lex/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  models-v2-lex.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/DeleteExportResponse.proto b/fixture/DeleteExportResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteExportResponse.proto
diff --git a/fixture/DeleteImport.yaml b/fixture/DeleteImport.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteImport.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/models-v2-lex/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  models-v2-lex.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/DeleteImportResponse.proto b/fixture/DeleteImportResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteImportResponse.proto
diff --git a/fixture/DeleteIntent.yaml b/fixture/DeleteIntent.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteIntent.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/models-v2-lex/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  models-v2-lex.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/DeleteIntentResponse.proto b/fixture/DeleteIntentResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteIntentResponse.proto
diff --git a/fixture/DeleteResourcePolicy.yaml b/fixture/DeleteResourcePolicy.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteResourcePolicy.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/models-v2-lex/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  models-v2-lex.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/DeleteResourcePolicyResponse.proto b/fixture/DeleteResourcePolicyResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteResourcePolicyResponse.proto
diff --git a/fixture/DeleteResourcePolicyStatement.yaml b/fixture/DeleteResourcePolicyStatement.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteResourcePolicyStatement.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/models-v2-lex/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  models-v2-lex.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/DeleteResourcePolicyStatementResponse.proto b/fixture/DeleteResourcePolicyStatementResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteResourcePolicyStatementResponse.proto
diff --git a/fixture/DeleteSlot.yaml b/fixture/DeleteSlot.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteSlot.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/models-v2-lex/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  models-v2-lex.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/DeleteSlotResponse.proto b/fixture/DeleteSlotResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteSlotResponse.proto
diff --git a/fixture/DeleteSlotType.yaml b/fixture/DeleteSlotType.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteSlotType.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/models-v2-lex/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  models-v2-lex.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/DeleteSlotTypeResponse.proto b/fixture/DeleteSlotTypeResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteSlotTypeResponse.proto
diff --git a/fixture/DeleteUtterances.yaml b/fixture/DeleteUtterances.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteUtterances.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/models-v2-lex/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  models-v2-lex.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/DeleteUtterancesResponse.proto b/fixture/DeleteUtterancesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteUtterancesResponse.proto
diff --git a/fixture/DescribeBot.yaml b/fixture/DescribeBot.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeBot.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/models-v2-lex/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  models-v2-lex.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/DescribeBotAlias.yaml b/fixture/DescribeBotAlias.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeBotAlias.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/models-v2-lex/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  models-v2-lex.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/DescribeBotAliasResponse.proto b/fixture/DescribeBotAliasResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeBotAliasResponse.proto
diff --git a/fixture/DescribeBotLocale.yaml b/fixture/DescribeBotLocale.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeBotLocale.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/models-v2-lex/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  models-v2-lex.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/DescribeBotLocaleResponse.proto b/fixture/DescribeBotLocaleResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeBotLocaleResponse.proto
diff --git a/fixture/DescribeBotRecommendation.yaml b/fixture/DescribeBotRecommendation.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeBotRecommendation.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/models-v2-lex/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  models-v2-lex.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/DescribeBotRecommendationResponse.proto b/fixture/DescribeBotRecommendationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeBotRecommendationResponse.proto
diff --git a/fixture/DescribeBotResponse.proto b/fixture/DescribeBotResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeBotResponse.proto
diff --git a/fixture/DescribeBotVersion.yaml b/fixture/DescribeBotVersion.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeBotVersion.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/models-v2-lex/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  models-v2-lex.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/DescribeBotVersionResponse.proto b/fixture/DescribeBotVersionResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeBotVersionResponse.proto
diff --git a/fixture/DescribeCustomVocabularyMetadata.yaml b/fixture/DescribeCustomVocabularyMetadata.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeCustomVocabularyMetadata.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/models-v2-lex/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  models-v2-lex.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/DescribeCustomVocabularyMetadataResponse.proto b/fixture/DescribeCustomVocabularyMetadataResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeCustomVocabularyMetadataResponse.proto
diff --git a/fixture/DescribeExport.yaml b/fixture/DescribeExport.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeExport.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/models-v2-lex/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  models-v2-lex.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/DescribeExportResponse.proto b/fixture/DescribeExportResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeExportResponse.proto
diff --git a/fixture/DescribeImport.yaml b/fixture/DescribeImport.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeImport.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/models-v2-lex/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  models-v2-lex.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/DescribeImportResponse.proto b/fixture/DescribeImportResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeImportResponse.proto
diff --git a/fixture/DescribeIntent.yaml b/fixture/DescribeIntent.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeIntent.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/models-v2-lex/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  models-v2-lex.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/DescribeIntentResponse.proto b/fixture/DescribeIntentResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeIntentResponse.proto
diff --git a/fixture/DescribeResourcePolicy.yaml b/fixture/DescribeResourcePolicy.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeResourcePolicy.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/models-v2-lex/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  models-v2-lex.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/DescribeResourcePolicyResponse.proto b/fixture/DescribeResourcePolicyResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeResourcePolicyResponse.proto
diff --git a/fixture/DescribeSlot.yaml b/fixture/DescribeSlot.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeSlot.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/models-v2-lex/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  models-v2-lex.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/DescribeSlotResponse.proto b/fixture/DescribeSlotResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeSlotResponse.proto
diff --git a/fixture/DescribeSlotType.yaml b/fixture/DescribeSlotType.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeSlotType.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/models-v2-lex/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  models-v2-lex.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/DescribeSlotTypeResponse.proto b/fixture/DescribeSlotTypeResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeSlotTypeResponse.proto
diff --git a/fixture/ListAggregatedUtterances.yaml b/fixture/ListAggregatedUtterances.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListAggregatedUtterances.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/models-v2-lex/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  models-v2-lex.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/ListAggregatedUtterancesResponse.proto b/fixture/ListAggregatedUtterancesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListAggregatedUtterancesResponse.proto
diff --git a/fixture/ListBotAliases.yaml b/fixture/ListBotAliases.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListBotAliases.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/models-v2-lex/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  models-v2-lex.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/ListBotAliasesResponse.proto b/fixture/ListBotAliasesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListBotAliasesResponse.proto
diff --git a/fixture/ListBotLocales.yaml b/fixture/ListBotLocales.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListBotLocales.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/models-v2-lex/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  models-v2-lex.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/ListBotLocalesResponse.proto b/fixture/ListBotLocalesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListBotLocalesResponse.proto
diff --git a/fixture/ListBotRecommendations.yaml b/fixture/ListBotRecommendations.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListBotRecommendations.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/models-v2-lex/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  models-v2-lex.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/ListBotRecommendationsResponse.proto b/fixture/ListBotRecommendationsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListBotRecommendationsResponse.proto
diff --git a/fixture/ListBotVersions.yaml b/fixture/ListBotVersions.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListBotVersions.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/models-v2-lex/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  models-v2-lex.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/ListBotVersionsResponse.proto b/fixture/ListBotVersionsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListBotVersionsResponse.proto
diff --git a/fixture/ListBots.yaml b/fixture/ListBots.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListBots.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/models-v2-lex/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  models-v2-lex.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/ListBotsResponse.proto b/fixture/ListBotsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListBotsResponse.proto
diff --git a/fixture/ListBuiltInIntents.yaml b/fixture/ListBuiltInIntents.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListBuiltInIntents.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/models-v2-lex/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  models-v2-lex.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/ListBuiltInIntentsResponse.proto b/fixture/ListBuiltInIntentsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListBuiltInIntentsResponse.proto
diff --git a/fixture/ListBuiltInSlotTypes.yaml b/fixture/ListBuiltInSlotTypes.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListBuiltInSlotTypes.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/models-v2-lex/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  models-v2-lex.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/ListBuiltInSlotTypesResponse.proto b/fixture/ListBuiltInSlotTypesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListBuiltInSlotTypesResponse.proto
diff --git a/fixture/ListCustomVocabularyItems.yaml b/fixture/ListCustomVocabularyItems.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListCustomVocabularyItems.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/models-v2-lex/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  models-v2-lex.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/ListCustomVocabularyItemsResponse.proto b/fixture/ListCustomVocabularyItemsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListCustomVocabularyItemsResponse.proto
diff --git a/fixture/ListExports.yaml b/fixture/ListExports.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListExports.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/models-v2-lex/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  models-v2-lex.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/ListExportsResponse.proto b/fixture/ListExportsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListExportsResponse.proto
diff --git a/fixture/ListImports.yaml b/fixture/ListImports.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListImports.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/models-v2-lex/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  models-v2-lex.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/ListImportsResponse.proto b/fixture/ListImportsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListImportsResponse.proto
diff --git a/fixture/ListIntents.yaml b/fixture/ListIntents.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListIntents.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/models-v2-lex/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  models-v2-lex.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/ListIntentsResponse.proto b/fixture/ListIntentsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListIntentsResponse.proto
diff --git a/fixture/ListRecommendedIntents.yaml b/fixture/ListRecommendedIntents.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListRecommendedIntents.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/models-v2-lex/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  models-v2-lex.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/ListRecommendedIntentsResponse.proto b/fixture/ListRecommendedIntentsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListRecommendedIntentsResponse.proto
diff --git a/fixture/ListSlotTypes.yaml b/fixture/ListSlotTypes.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListSlotTypes.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/models-v2-lex/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  models-v2-lex.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/ListSlotTypesResponse.proto b/fixture/ListSlotTypesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListSlotTypesResponse.proto
diff --git a/fixture/ListSlots.yaml b/fixture/ListSlots.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListSlots.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/models-v2-lex/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  models-v2-lex.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/ListSlotsResponse.proto b/fixture/ListSlotsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListSlotsResponse.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/models-v2-lex/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  models-v2-lex.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/SearchAssociatedTranscripts.yaml b/fixture/SearchAssociatedTranscripts.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/SearchAssociatedTranscripts.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/models-v2-lex/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  models-v2-lex.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/SearchAssociatedTranscriptsResponse.proto b/fixture/SearchAssociatedTranscriptsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/SearchAssociatedTranscriptsResponse.proto
diff --git a/fixture/StartBotRecommendation.yaml b/fixture/StartBotRecommendation.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/StartBotRecommendation.yaml
@@ -0,0 +1,10 @@
+---
+method: PUT
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/models-v2-lex/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  models-v2-lex.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/StartBotRecommendationResponse.proto b/fixture/StartBotRecommendationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/StartBotRecommendationResponse.proto
diff --git a/fixture/StartImport.yaml b/fixture/StartImport.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/StartImport.yaml
@@ -0,0 +1,10 @@
+---
+method: PUT
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/models-v2-lex/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  models-v2-lex.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/StartImportResponse.proto b/fixture/StartImportResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/StartImportResponse.proto
diff --git a/fixture/StopBotRecommendation.yaml b/fixture/StopBotRecommendation.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/StopBotRecommendation.yaml
@@ -0,0 +1,10 @@
+---
+method: PUT
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/models-v2-lex/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  models-v2-lex.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/StopBotRecommendationResponse.proto b/fixture/StopBotRecommendationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/StopBotRecommendationResponse.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/models-v2-lex/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  models-v2-lex.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/TagResourceResponse.proto b/fixture/TagResourceResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/TagResourceResponse.proto
diff --git a/fixture/UntagResource.yaml b/fixture/UntagResource.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UntagResource.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/models-v2-lex/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  models-v2-lex.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/UpdateBot.yaml b/fixture/UpdateBot.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateBot.yaml
@@ -0,0 +1,10 @@
+---
+method: PUT
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/models-v2-lex/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  models-v2-lex.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/UpdateBotAlias.yaml b/fixture/UpdateBotAlias.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateBotAlias.yaml
@@ -0,0 +1,10 @@
+---
+method: PUT
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/models-v2-lex/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  models-v2-lex.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/UpdateBotAliasResponse.proto b/fixture/UpdateBotAliasResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateBotAliasResponse.proto
diff --git a/fixture/UpdateBotLocale.yaml b/fixture/UpdateBotLocale.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateBotLocale.yaml
@@ -0,0 +1,10 @@
+---
+method: PUT
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/models-v2-lex/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  models-v2-lex.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/UpdateBotLocaleResponse.proto b/fixture/UpdateBotLocaleResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateBotLocaleResponse.proto
diff --git a/fixture/UpdateBotRecommendation.yaml b/fixture/UpdateBotRecommendation.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateBotRecommendation.yaml
@@ -0,0 +1,10 @@
+---
+method: PUT
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/models-v2-lex/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  models-v2-lex.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/UpdateBotRecommendationResponse.proto b/fixture/UpdateBotRecommendationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateBotRecommendationResponse.proto
diff --git a/fixture/UpdateBotResponse.proto b/fixture/UpdateBotResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateBotResponse.proto
diff --git a/fixture/UpdateExport.yaml b/fixture/UpdateExport.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateExport.yaml
@@ -0,0 +1,10 @@
+---
+method: PUT
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/models-v2-lex/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  models-v2-lex.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/UpdateExportResponse.proto b/fixture/UpdateExportResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateExportResponse.proto
diff --git a/fixture/UpdateIntent.yaml b/fixture/UpdateIntent.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateIntent.yaml
@@ -0,0 +1,10 @@
+---
+method: PUT
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/models-v2-lex/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  models-v2-lex.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/UpdateIntentResponse.proto b/fixture/UpdateIntentResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateIntentResponse.proto
diff --git a/fixture/UpdateResourcePolicy.yaml b/fixture/UpdateResourcePolicy.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateResourcePolicy.yaml
@@ -0,0 +1,10 @@
+---
+method: PUT
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/models-v2-lex/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  models-v2-lex.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/UpdateResourcePolicyResponse.proto b/fixture/UpdateResourcePolicyResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateResourcePolicyResponse.proto
diff --git a/fixture/UpdateSlot.yaml b/fixture/UpdateSlot.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateSlot.yaml
@@ -0,0 +1,10 @@
+---
+method: PUT
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/models-v2-lex/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  models-v2-lex.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/UpdateSlotResponse.proto b/fixture/UpdateSlotResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateSlotResponse.proto
diff --git a/fixture/UpdateSlotType.yaml b/fixture/UpdateSlotType.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateSlotType.yaml
@@ -0,0 +1,10 @@
+---
+method: PUT
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/models-v2-lex/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  models-v2-lex.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/UpdateSlotTypeResponse.proto b/fixture/UpdateSlotTypeResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateSlotTypeResponse.proto
diff --git a/gen/Amazonka/LexV2Models.hs b/gen/Amazonka/LexV2Models.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models.hs
@@ -0,0 +1,1319 @@
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- |
+-- Module      : Amazonka.LexV2Models
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Derived from API version @2020-08-07@ of the AWS service descriptions, licensed under Apache 2.0.
+module Amazonka.LexV2Models
+  ( -- * Service Configuration
+    defaultService,
+
+    -- * Errors
+    -- $errors
+
+    -- ** ConflictException
+    _ConflictException,
+
+    -- ** InternalServerException
+    _InternalServerException,
+
+    -- ** PreconditionFailedException
+    _PreconditionFailedException,
+
+    -- ** ResourceNotFoundException
+    _ResourceNotFoundException,
+
+    -- ** ServiceQuotaExceededException
+    _ServiceQuotaExceededException,
+
+    -- ** ThrottlingException
+    _ThrottlingException,
+
+    -- ** ValidationException
+    _ValidationException,
+
+    -- * Waiters
+    -- $waiters
+
+    -- ** BotAliasAvailable
+    newBotAliasAvailable,
+
+    -- ** BotAvailable
+    newBotAvailable,
+
+    -- ** BotExportCompleted
+    newBotExportCompleted,
+
+    -- ** BotImportCompleted
+    newBotImportCompleted,
+
+    -- ** BotLocaleBuilt
+    newBotLocaleBuilt,
+
+    -- ** BotLocaleCreated
+    newBotLocaleCreated,
+
+    -- ** BotLocaleExpressTestingAvailable
+    newBotLocaleExpressTestingAvailable,
+
+    -- ** BotVersionAvailable
+    newBotVersionAvailable,
+
+    -- * Operations
+    -- $operations
+
+    -- ** BatchCreateCustomVocabularyItem
+    BatchCreateCustomVocabularyItem (BatchCreateCustomVocabularyItem'),
+    newBatchCreateCustomVocabularyItem,
+    BatchCreateCustomVocabularyItemResponse (BatchCreateCustomVocabularyItemResponse'),
+    newBatchCreateCustomVocabularyItemResponse,
+
+    -- ** BatchDeleteCustomVocabularyItem
+    BatchDeleteCustomVocabularyItem (BatchDeleteCustomVocabularyItem'),
+    newBatchDeleteCustomVocabularyItem,
+    BatchDeleteCustomVocabularyItemResponse (BatchDeleteCustomVocabularyItemResponse'),
+    newBatchDeleteCustomVocabularyItemResponse,
+
+    -- ** BatchUpdateCustomVocabularyItem
+    BatchUpdateCustomVocabularyItem (BatchUpdateCustomVocabularyItem'),
+    newBatchUpdateCustomVocabularyItem,
+    BatchUpdateCustomVocabularyItemResponse (BatchUpdateCustomVocabularyItemResponse'),
+    newBatchUpdateCustomVocabularyItemResponse,
+
+    -- ** BuildBotLocale
+    BuildBotLocale (BuildBotLocale'),
+    newBuildBotLocale,
+    BuildBotLocaleResponse (BuildBotLocaleResponse'),
+    newBuildBotLocaleResponse,
+
+    -- ** CreateBot
+    CreateBot (CreateBot'),
+    newCreateBot,
+    CreateBotResponse (CreateBotResponse'),
+    newCreateBotResponse,
+
+    -- ** CreateBotAlias
+    CreateBotAlias (CreateBotAlias'),
+    newCreateBotAlias,
+    CreateBotAliasResponse (CreateBotAliasResponse'),
+    newCreateBotAliasResponse,
+
+    -- ** CreateBotLocale
+    CreateBotLocale (CreateBotLocale'),
+    newCreateBotLocale,
+    CreateBotLocaleResponse (CreateBotLocaleResponse'),
+    newCreateBotLocaleResponse,
+
+    -- ** CreateBotVersion
+    CreateBotVersion (CreateBotVersion'),
+    newCreateBotVersion,
+    CreateBotVersionResponse (CreateBotVersionResponse'),
+    newCreateBotVersionResponse,
+
+    -- ** CreateExport
+    CreateExport (CreateExport'),
+    newCreateExport,
+    CreateExportResponse (CreateExportResponse'),
+    newCreateExportResponse,
+
+    -- ** CreateIntent
+    CreateIntent (CreateIntent'),
+    newCreateIntent,
+    CreateIntentResponse (CreateIntentResponse'),
+    newCreateIntentResponse,
+
+    -- ** CreateResourcePolicy
+    CreateResourcePolicy (CreateResourcePolicy'),
+    newCreateResourcePolicy,
+    CreateResourcePolicyResponse (CreateResourcePolicyResponse'),
+    newCreateResourcePolicyResponse,
+
+    -- ** CreateResourcePolicyStatement
+    CreateResourcePolicyStatement (CreateResourcePolicyStatement'),
+    newCreateResourcePolicyStatement,
+    CreateResourcePolicyStatementResponse (CreateResourcePolicyStatementResponse'),
+    newCreateResourcePolicyStatementResponse,
+
+    -- ** CreateSlot
+    CreateSlot (CreateSlot'),
+    newCreateSlot,
+    CreateSlotResponse (CreateSlotResponse'),
+    newCreateSlotResponse,
+
+    -- ** CreateSlotType
+    CreateSlotType (CreateSlotType'),
+    newCreateSlotType,
+    CreateSlotTypeResponse (CreateSlotTypeResponse'),
+    newCreateSlotTypeResponse,
+
+    -- ** CreateUploadUrl
+    CreateUploadUrl (CreateUploadUrl'),
+    newCreateUploadUrl,
+    CreateUploadUrlResponse (CreateUploadUrlResponse'),
+    newCreateUploadUrlResponse,
+
+    -- ** DeleteBot
+    DeleteBot (DeleteBot'),
+    newDeleteBot,
+    DeleteBotResponse (DeleteBotResponse'),
+    newDeleteBotResponse,
+
+    -- ** DeleteBotAlias
+    DeleteBotAlias (DeleteBotAlias'),
+    newDeleteBotAlias,
+    DeleteBotAliasResponse (DeleteBotAliasResponse'),
+    newDeleteBotAliasResponse,
+
+    -- ** DeleteBotLocale
+    DeleteBotLocale (DeleteBotLocale'),
+    newDeleteBotLocale,
+    DeleteBotLocaleResponse (DeleteBotLocaleResponse'),
+    newDeleteBotLocaleResponse,
+
+    -- ** DeleteBotVersion
+    DeleteBotVersion (DeleteBotVersion'),
+    newDeleteBotVersion,
+    DeleteBotVersionResponse (DeleteBotVersionResponse'),
+    newDeleteBotVersionResponse,
+
+    -- ** DeleteCustomVocabulary
+    DeleteCustomVocabulary (DeleteCustomVocabulary'),
+    newDeleteCustomVocabulary,
+    DeleteCustomVocabularyResponse (DeleteCustomVocabularyResponse'),
+    newDeleteCustomVocabularyResponse,
+
+    -- ** DeleteExport
+    DeleteExport (DeleteExport'),
+    newDeleteExport,
+    DeleteExportResponse (DeleteExportResponse'),
+    newDeleteExportResponse,
+
+    -- ** DeleteImport
+    DeleteImport (DeleteImport'),
+    newDeleteImport,
+    DeleteImportResponse (DeleteImportResponse'),
+    newDeleteImportResponse,
+
+    -- ** DeleteIntent
+    DeleteIntent (DeleteIntent'),
+    newDeleteIntent,
+    DeleteIntentResponse (DeleteIntentResponse'),
+    newDeleteIntentResponse,
+
+    -- ** DeleteResourcePolicy
+    DeleteResourcePolicy (DeleteResourcePolicy'),
+    newDeleteResourcePolicy,
+    DeleteResourcePolicyResponse (DeleteResourcePolicyResponse'),
+    newDeleteResourcePolicyResponse,
+
+    -- ** DeleteResourcePolicyStatement
+    DeleteResourcePolicyStatement (DeleteResourcePolicyStatement'),
+    newDeleteResourcePolicyStatement,
+    DeleteResourcePolicyStatementResponse (DeleteResourcePolicyStatementResponse'),
+    newDeleteResourcePolicyStatementResponse,
+
+    -- ** DeleteSlot
+    DeleteSlot (DeleteSlot'),
+    newDeleteSlot,
+    DeleteSlotResponse (DeleteSlotResponse'),
+    newDeleteSlotResponse,
+
+    -- ** DeleteSlotType
+    DeleteSlotType (DeleteSlotType'),
+    newDeleteSlotType,
+    DeleteSlotTypeResponse (DeleteSlotTypeResponse'),
+    newDeleteSlotTypeResponse,
+
+    -- ** DeleteUtterances
+    DeleteUtterances (DeleteUtterances'),
+    newDeleteUtterances,
+    DeleteUtterancesResponse (DeleteUtterancesResponse'),
+    newDeleteUtterancesResponse,
+
+    -- ** DescribeBot
+    DescribeBot (DescribeBot'),
+    newDescribeBot,
+    DescribeBotResponse (DescribeBotResponse'),
+    newDescribeBotResponse,
+
+    -- ** DescribeBotAlias
+    DescribeBotAlias (DescribeBotAlias'),
+    newDescribeBotAlias,
+    DescribeBotAliasResponse (DescribeBotAliasResponse'),
+    newDescribeBotAliasResponse,
+
+    -- ** DescribeBotLocale
+    DescribeBotLocale (DescribeBotLocale'),
+    newDescribeBotLocale,
+    DescribeBotLocaleResponse (DescribeBotLocaleResponse'),
+    newDescribeBotLocaleResponse,
+
+    -- ** DescribeBotRecommendation
+    DescribeBotRecommendation (DescribeBotRecommendation'),
+    newDescribeBotRecommendation,
+    DescribeBotRecommendationResponse (DescribeBotRecommendationResponse'),
+    newDescribeBotRecommendationResponse,
+
+    -- ** DescribeBotVersion
+    DescribeBotVersion (DescribeBotVersion'),
+    newDescribeBotVersion,
+    DescribeBotVersionResponse (DescribeBotVersionResponse'),
+    newDescribeBotVersionResponse,
+
+    -- ** DescribeCustomVocabularyMetadata
+    DescribeCustomVocabularyMetadata (DescribeCustomVocabularyMetadata'),
+    newDescribeCustomVocabularyMetadata,
+    DescribeCustomVocabularyMetadataResponse (DescribeCustomVocabularyMetadataResponse'),
+    newDescribeCustomVocabularyMetadataResponse,
+
+    -- ** DescribeExport
+    DescribeExport (DescribeExport'),
+    newDescribeExport,
+    DescribeExportResponse (DescribeExportResponse'),
+    newDescribeExportResponse,
+
+    -- ** DescribeImport
+    DescribeImport (DescribeImport'),
+    newDescribeImport,
+    DescribeImportResponse (DescribeImportResponse'),
+    newDescribeImportResponse,
+
+    -- ** DescribeIntent
+    DescribeIntent (DescribeIntent'),
+    newDescribeIntent,
+    DescribeIntentResponse (DescribeIntentResponse'),
+    newDescribeIntentResponse,
+
+    -- ** DescribeResourcePolicy
+    DescribeResourcePolicy (DescribeResourcePolicy'),
+    newDescribeResourcePolicy,
+    DescribeResourcePolicyResponse (DescribeResourcePolicyResponse'),
+    newDescribeResourcePolicyResponse,
+
+    -- ** DescribeSlot
+    DescribeSlot (DescribeSlot'),
+    newDescribeSlot,
+    DescribeSlotResponse (DescribeSlotResponse'),
+    newDescribeSlotResponse,
+
+    -- ** DescribeSlotType
+    DescribeSlotType (DescribeSlotType'),
+    newDescribeSlotType,
+    DescribeSlotTypeResponse (DescribeSlotTypeResponse'),
+    newDescribeSlotTypeResponse,
+
+    -- ** ListAggregatedUtterances
+    ListAggregatedUtterances (ListAggregatedUtterances'),
+    newListAggregatedUtterances,
+    ListAggregatedUtterancesResponse (ListAggregatedUtterancesResponse'),
+    newListAggregatedUtterancesResponse,
+
+    -- ** ListBotAliases
+    ListBotAliases (ListBotAliases'),
+    newListBotAliases,
+    ListBotAliasesResponse (ListBotAliasesResponse'),
+    newListBotAliasesResponse,
+
+    -- ** ListBotLocales
+    ListBotLocales (ListBotLocales'),
+    newListBotLocales,
+    ListBotLocalesResponse (ListBotLocalesResponse'),
+    newListBotLocalesResponse,
+
+    -- ** ListBotRecommendations
+    ListBotRecommendations (ListBotRecommendations'),
+    newListBotRecommendations,
+    ListBotRecommendationsResponse (ListBotRecommendationsResponse'),
+    newListBotRecommendationsResponse,
+
+    -- ** ListBotVersions
+    ListBotVersions (ListBotVersions'),
+    newListBotVersions,
+    ListBotVersionsResponse (ListBotVersionsResponse'),
+    newListBotVersionsResponse,
+
+    -- ** ListBots
+    ListBots (ListBots'),
+    newListBots,
+    ListBotsResponse (ListBotsResponse'),
+    newListBotsResponse,
+
+    -- ** ListBuiltInIntents
+    ListBuiltInIntents (ListBuiltInIntents'),
+    newListBuiltInIntents,
+    ListBuiltInIntentsResponse (ListBuiltInIntentsResponse'),
+    newListBuiltInIntentsResponse,
+
+    -- ** ListBuiltInSlotTypes
+    ListBuiltInSlotTypes (ListBuiltInSlotTypes'),
+    newListBuiltInSlotTypes,
+    ListBuiltInSlotTypesResponse (ListBuiltInSlotTypesResponse'),
+    newListBuiltInSlotTypesResponse,
+
+    -- ** ListCustomVocabularyItems
+    ListCustomVocabularyItems (ListCustomVocabularyItems'),
+    newListCustomVocabularyItems,
+    ListCustomVocabularyItemsResponse (ListCustomVocabularyItemsResponse'),
+    newListCustomVocabularyItemsResponse,
+
+    -- ** ListExports
+    ListExports (ListExports'),
+    newListExports,
+    ListExportsResponse (ListExportsResponse'),
+    newListExportsResponse,
+
+    -- ** ListImports
+    ListImports (ListImports'),
+    newListImports,
+    ListImportsResponse (ListImportsResponse'),
+    newListImportsResponse,
+
+    -- ** ListIntents
+    ListIntents (ListIntents'),
+    newListIntents,
+    ListIntentsResponse (ListIntentsResponse'),
+    newListIntentsResponse,
+
+    -- ** ListRecommendedIntents
+    ListRecommendedIntents (ListRecommendedIntents'),
+    newListRecommendedIntents,
+    ListRecommendedIntentsResponse (ListRecommendedIntentsResponse'),
+    newListRecommendedIntentsResponse,
+
+    -- ** ListSlotTypes
+    ListSlotTypes (ListSlotTypes'),
+    newListSlotTypes,
+    ListSlotTypesResponse (ListSlotTypesResponse'),
+    newListSlotTypesResponse,
+
+    -- ** ListSlots
+    ListSlots (ListSlots'),
+    newListSlots,
+    ListSlotsResponse (ListSlotsResponse'),
+    newListSlotsResponse,
+
+    -- ** ListTagsForResource
+    ListTagsForResource (ListTagsForResource'),
+    newListTagsForResource,
+    ListTagsForResourceResponse (ListTagsForResourceResponse'),
+    newListTagsForResourceResponse,
+
+    -- ** SearchAssociatedTranscripts
+    SearchAssociatedTranscripts (SearchAssociatedTranscripts'),
+    newSearchAssociatedTranscripts,
+    SearchAssociatedTranscriptsResponse (SearchAssociatedTranscriptsResponse'),
+    newSearchAssociatedTranscriptsResponse,
+
+    -- ** StartBotRecommendation
+    StartBotRecommendation (StartBotRecommendation'),
+    newStartBotRecommendation,
+    StartBotRecommendationResponse (StartBotRecommendationResponse'),
+    newStartBotRecommendationResponse,
+
+    -- ** StartImport
+    StartImport (StartImport'),
+    newStartImport,
+    StartImportResponse (StartImportResponse'),
+    newStartImportResponse,
+
+    -- ** StopBotRecommendation
+    StopBotRecommendation (StopBotRecommendation'),
+    newStopBotRecommendation,
+    StopBotRecommendationResponse (StopBotRecommendationResponse'),
+    newStopBotRecommendationResponse,
+
+    -- ** TagResource
+    TagResource (TagResource'),
+    newTagResource,
+    TagResourceResponse (TagResourceResponse'),
+    newTagResourceResponse,
+
+    -- ** UntagResource
+    UntagResource (UntagResource'),
+    newUntagResource,
+    UntagResourceResponse (UntagResourceResponse'),
+    newUntagResourceResponse,
+
+    -- ** UpdateBot
+    UpdateBot (UpdateBot'),
+    newUpdateBot,
+    UpdateBotResponse (UpdateBotResponse'),
+    newUpdateBotResponse,
+
+    -- ** UpdateBotAlias
+    UpdateBotAlias (UpdateBotAlias'),
+    newUpdateBotAlias,
+    UpdateBotAliasResponse (UpdateBotAliasResponse'),
+    newUpdateBotAliasResponse,
+
+    -- ** UpdateBotLocale
+    UpdateBotLocale (UpdateBotLocale'),
+    newUpdateBotLocale,
+    UpdateBotLocaleResponse (UpdateBotLocaleResponse'),
+    newUpdateBotLocaleResponse,
+
+    -- ** UpdateBotRecommendation
+    UpdateBotRecommendation (UpdateBotRecommendation'),
+    newUpdateBotRecommendation,
+    UpdateBotRecommendationResponse (UpdateBotRecommendationResponse'),
+    newUpdateBotRecommendationResponse,
+
+    -- ** UpdateExport
+    UpdateExport (UpdateExport'),
+    newUpdateExport,
+    UpdateExportResponse (UpdateExportResponse'),
+    newUpdateExportResponse,
+
+    -- ** UpdateIntent
+    UpdateIntent (UpdateIntent'),
+    newUpdateIntent,
+    UpdateIntentResponse (UpdateIntentResponse'),
+    newUpdateIntentResponse,
+
+    -- ** UpdateResourcePolicy
+    UpdateResourcePolicy (UpdateResourcePolicy'),
+    newUpdateResourcePolicy,
+    UpdateResourcePolicyResponse (UpdateResourcePolicyResponse'),
+    newUpdateResourcePolicyResponse,
+
+    -- ** UpdateSlot
+    UpdateSlot (UpdateSlot'),
+    newUpdateSlot,
+    UpdateSlotResponse (UpdateSlotResponse'),
+    newUpdateSlotResponse,
+
+    -- ** UpdateSlotType
+    UpdateSlotType (UpdateSlotType'),
+    newUpdateSlotType,
+    UpdateSlotTypeResponse (UpdateSlotTypeResponse'),
+    newUpdateSlotTypeResponse,
+
+    -- * Types
+
+    -- ** AggregatedUtterancesFilterName
+    AggregatedUtterancesFilterName (..),
+
+    -- ** AggregatedUtterancesFilterOperator
+    AggregatedUtterancesFilterOperator (..),
+
+    -- ** AggregatedUtterancesSortAttribute
+    AggregatedUtterancesSortAttribute (..),
+
+    -- ** AssociatedTranscriptFilterName
+    AssociatedTranscriptFilterName (..),
+
+    -- ** AudioRecognitionStrategy
+    AudioRecognitionStrategy (..),
+
+    -- ** BotAliasStatus
+    BotAliasStatus (..),
+
+    -- ** BotFilterName
+    BotFilterName (..),
+
+    -- ** BotFilterOperator
+    BotFilterOperator (..),
+
+    -- ** BotLocaleFilterName
+    BotLocaleFilterName (..),
+
+    -- ** BotLocaleFilterOperator
+    BotLocaleFilterOperator (..),
+
+    -- ** BotLocaleSortAttribute
+    BotLocaleSortAttribute (..),
+
+    -- ** BotLocaleStatus
+    BotLocaleStatus (..),
+
+    -- ** BotRecommendationStatus
+    BotRecommendationStatus (..),
+
+    -- ** BotSortAttribute
+    BotSortAttribute (..),
+
+    -- ** BotStatus
+    BotStatus (..),
+
+    -- ** BotVersionSortAttribute
+    BotVersionSortAttribute (..),
+
+    -- ** BuiltInIntentSortAttribute
+    BuiltInIntentSortAttribute (..),
+
+    -- ** BuiltInSlotTypeSortAttribute
+    BuiltInSlotTypeSortAttribute (..),
+
+    -- ** CustomVocabularyStatus
+    CustomVocabularyStatus (..),
+
+    -- ** DialogActionType
+    DialogActionType (..),
+
+    -- ** Effect
+    Effect (..),
+
+    -- ** ErrorCode
+    ErrorCode (..),
+
+    -- ** ExportFilterName
+    ExportFilterName (..),
+
+    -- ** ExportFilterOperator
+    ExportFilterOperator (..),
+
+    -- ** ExportSortAttribute
+    ExportSortAttribute (..),
+
+    -- ** ExportStatus
+    ExportStatus (..),
+
+    -- ** ImportExportFileFormat
+    ImportExportFileFormat (..),
+
+    -- ** ImportFilterName
+    ImportFilterName (..),
+
+    -- ** ImportFilterOperator
+    ImportFilterOperator (..),
+
+    -- ** ImportResourceType
+    ImportResourceType (..),
+
+    -- ** ImportSortAttribute
+    ImportSortAttribute (..),
+
+    -- ** ImportStatus
+    ImportStatus (..),
+
+    -- ** IntentFilterName
+    IntentFilterName (..),
+
+    -- ** IntentFilterOperator
+    IntentFilterOperator (..),
+
+    -- ** IntentSortAttribute
+    IntentSortAttribute (..),
+
+    -- ** MergeStrategy
+    MergeStrategy (..),
+
+    -- ** MessageSelectionStrategy
+    MessageSelectionStrategy (..),
+
+    -- ** ObfuscationSettingType
+    ObfuscationSettingType (..),
+
+    -- ** PromptAttempt
+    PromptAttempt (..),
+
+    -- ** SearchOrder
+    SearchOrder (..),
+
+    -- ** SlotConstraint
+    SlotConstraint (..),
+
+    -- ** SlotFilterName
+    SlotFilterName (..),
+
+    -- ** SlotFilterOperator
+    SlotFilterOperator (..),
+
+    -- ** SlotShape
+    SlotShape (..),
+
+    -- ** SlotSortAttribute
+    SlotSortAttribute (..),
+
+    -- ** SlotTypeCategory
+    SlotTypeCategory (..),
+
+    -- ** SlotTypeFilterName
+    SlotTypeFilterName (..),
+
+    -- ** SlotTypeFilterOperator
+    SlotTypeFilterOperator (..),
+
+    -- ** SlotTypeSortAttribute
+    SlotTypeSortAttribute (..),
+
+    -- ** SlotValueResolutionStrategy
+    SlotValueResolutionStrategy (..),
+
+    -- ** SortOrder
+    SortOrder (..),
+
+    -- ** TimeDimension
+    TimeDimension (..),
+
+    -- ** TranscriptFormat
+    TranscriptFormat (..),
+
+    -- ** VoiceEngine
+    VoiceEngine (..),
+
+    -- ** AdvancedRecognitionSetting
+    AdvancedRecognitionSetting (AdvancedRecognitionSetting'),
+    newAdvancedRecognitionSetting,
+
+    -- ** AggregatedUtterancesFilter
+    AggregatedUtterancesFilter (AggregatedUtterancesFilter'),
+    newAggregatedUtterancesFilter,
+
+    -- ** AggregatedUtterancesSortBy
+    AggregatedUtterancesSortBy (AggregatedUtterancesSortBy'),
+    newAggregatedUtterancesSortBy,
+
+    -- ** AggregatedUtterancesSummary
+    AggregatedUtterancesSummary (AggregatedUtterancesSummary'),
+    newAggregatedUtterancesSummary,
+
+    -- ** AllowedInputTypes
+    AllowedInputTypes (AllowedInputTypes'),
+    newAllowedInputTypes,
+
+    -- ** AssociatedTranscript
+    AssociatedTranscript (AssociatedTranscript'),
+    newAssociatedTranscript,
+
+    -- ** AssociatedTranscriptFilter
+    AssociatedTranscriptFilter (AssociatedTranscriptFilter'),
+    newAssociatedTranscriptFilter,
+
+    -- ** AudioAndDTMFInputSpecification
+    AudioAndDTMFInputSpecification (AudioAndDTMFInputSpecification'),
+    newAudioAndDTMFInputSpecification,
+
+    -- ** AudioLogDestination
+    AudioLogDestination (AudioLogDestination'),
+    newAudioLogDestination,
+
+    -- ** AudioLogSetting
+    AudioLogSetting (AudioLogSetting'),
+    newAudioLogSetting,
+
+    -- ** AudioSpecification
+    AudioSpecification (AudioSpecification'),
+    newAudioSpecification,
+
+    -- ** BotAliasHistoryEvent
+    BotAliasHistoryEvent (BotAliasHistoryEvent'),
+    newBotAliasHistoryEvent,
+
+    -- ** BotAliasLocaleSettings
+    BotAliasLocaleSettings (BotAliasLocaleSettings'),
+    newBotAliasLocaleSettings,
+
+    -- ** BotAliasSummary
+    BotAliasSummary (BotAliasSummary'),
+    newBotAliasSummary,
+
+    -- ** BotExportSpecification
+    BotExportSpecification (BotExportSpecification'),
+    newBotExportSpecification,
+
+    -- ** BotFilter
+    BotFilter (BotFilter'),
+    newBotFilter,
+
+    -- ** BotImportSpecification
+    BotImportSpecification (BotImportSpecification'),
+    newBotImportSpecification,
+
+    -- ** BotLocaleExportSpecification
+    BotLocaleExportSpecification (BotLocaleExportSpecification'),
+    newBotLocaleExportSpecification,
+
+    -- ** BotLocaleFilter
+    BotLocaleFilter (BotLocaleFilter'),
+    newBotLocaleFilter,
+
+    -- ** BotLocaleHistoryEvent
+    BotLocaleHistoryEvent (BotLocaleHistoryEvent'),
+    newBotLocaleHistoryEvent,
+
+    -- ** BotLocaleImportSpecification
+    BotLocaleImportSpecification (BotLocaleImportSpecification'),
+    newBotLocaleImportSpecification,
+
+    -- ** BotLocaleSortBy
+    BotLocaleSortBy (BotLocaleSortBy'),
+    newBotLocaleSortBy,
+
+    -- ** BotLocaleSummary
+    BotLocaleSummary (BotLocaleSummary'),
+    newBotLocaleSummary,
+
+    -- ** BotRecommendationResultStatistics
+    BotRecommendationResultStatistics (BotRecommendationResultStatistics'),
+    newBotRecommendationResultStatistics,
+
+    -- ** BotRecommendationResults
+    BotRecommendationResults (BotRecommendationResults'),
+    newBotRecommendationResults,
+
+    -- ** BotRecommendationSummary
+    BotRecommendationSummary (BotRecommendationSummary'),
+    newBotRecommendationSummary,
+
+    -- ** BotSortBy
+    BotSortBy (BotSortBy'),
+    newBotSortBy,
+
+    -- ** BotSummary
+    BotSummary (BotSummary'),
+    newBotSummary,
+
+    -- ** BotVersionLocaleDetails
+    BotVersionLocaleDetails (BotVersionLocaleDetails'),
+    newBotVersionLocaleDetails,
+
+    -- ** BotVersionSortBy
+    BotVersionSortBy (BotVersionSortBy'),
+    newBotVersionSortBy,
+
+    -- ** BotVersionSummary
+    BotVersionSummary (BotVersionSummary'),
+    newBotVersionSummary,
+
+    -- ** BuiltInIntentSortBy
+    BuiltInIntentSortBy (BuiltInIntentSortBy'),
+    newBuiltInIntentSortBy,
+
+    -- ** BuiltInIntentSummary
+    BuiltInIntentSummary (BuiltInIntentSummary'),
+    newBuiltInIntentSummary,
+
+    -- ** BuiltInSlotTypeSortBy
+    BuiltInSlotTypeSortBy (BuiltInSlotTypeSortBy'),
+    newBuiltInSlotTypeSortBy,
+
+    -- ** BuiltInSlotTypeSummary
+    BuiltInSlotTypeSummary (BuiltInSlotTypeSummary'),
+    newBuiltInSlotTypeSummary,
+
+    -- ** Button
+    Button (Button'),
+    newButton,
+
+    -- ** CloudWatchLogGroupLogDestination
+    CloudWatchLogGroupLogDestination (CloudWatchLogGroupLogDestination'),
+    newCloudWatchLogGroupLogDestination,
+
+    -- ** CodeHookSpecification
+    CodeHookSpecification (CodeHookSpecification'),
+    newCodeHookSpecification,
+
+    -- ** CompositeSlotTypeSetting
+    CompositeSlotTypeSetting (CompositeSlotTypeSetting'),
+    newCompositeSlotTypeSetting,
+
+    -- ** Condition
+    Condition (Condition'),
+    newCondition,
+
+    -- ** ConditionalBranch
+    ConditionalBranch (ConditionalBranch'),
+    newConditionalBranch,
+
+    -- ** ConditionalSpecification
+    ConditionalSpecification (ConditionalSpecification'),
+    newConditionalSpecification,
+
+    -- ** ConversationLogSettings
+    ConversationLogSettings (ConversationLogSettings'),
+    newConversationLogSettings,
+
+    -- ** CustomPayload
+    CustomPayload (CustomPayload'),
+    newCustomPayload,
+
+    -- ** CustomVocabularyEntryId
+    CustomVocabularyEntryId (CustomVocabularyEntryId'),
+    newCustomVocabularyEntryId,
+
+    -- ** CustomVocabularyExportSpecification
+    CustomVocabularyExportSpecification (CustomVocabularyExportSpecification'),
+    newCustomVocabularyExportSpecification,
+
+    -- ** CustomVocabularyImportSpecification
+    CustomVocabularyImportSpecification (CustomVocabularyImportSpecification'),
+    newCustomVocabularyImportSpecification,
+
+    -- ** CustomVocabularyItem
+    CustomVocabularyItem (CustomVocabularyItem'),
+    newCustomVocabularyItem,
+
+    -- ** DTMFSpecification
+    DTMFSpecification (DTMFSpecification'),
+    newDTMFSpecification,
+
+    -- ** DataPrivacy
+    DataPrivacy (DataPrivacy'),
+    newDataPrivacy,
+
+    -- ** DateRangeFilter
+    DateRangeFilter (DateRangeFilter'),
+    newDateRangeFilter,
+
+    -- ** DefaultConditionalBranch
+    DefaultConditionalBranch (DefaultConditionalBranch'),
+    newDefaultConditionalBranch,
+
+    -- ** DialogAction
+    DialogAction (DialogAction'),
+    newDialogAction,
+
+    -- ** DialogCodeHookInvocationSetting
+    DialogCodeHookInvocationSetting (DialogCodeHookInvocationSetting'),
+    newDialogCodeHookInvocationSetting,
+
+    -- ** DialogCodeHookSettings
+    DialogCodeHookSettings (DialogCodeHookSettings'),
+    newDialogCodeHookSettings,
+
+    -- ** DialogState
+    DialogState (DialogState'),
+    newDialogState,
+
+    -- ** ElicitationCodeHookInvocationSetting
+    ElicitationCodeHookInvocationSetting (ElicitationCodeHookInvocationSetting'),
+    newElicitationCodeHookInvocationSetting,
+
+    -- ** EncryptionSetting
+    EncryptionSetting (EncryptionSetting'),
+    newEncryptionSetting,
+
+    -- ** ExportFilter
+    ExportFilter (ExportFilter'),
+    newExportFilter,
+
+    -- ** ExportResourceSpecification
+    ExportResourceSpecification (ExportResourceSpecification'),
+    newExportResourceSpecification,
+
+    -- ** ExportSortBy
+    ExportSortBy (ExportSortBy'),
+    newExportSortBy,
+
+    -- ** ExportSummary
+    ExportSummary (ExportSummary'),
+    newExportSummary,
+
+    -- ** ExternalSourceSetting
+    ExternalSourceSetting (ExternalSourceSetting'),
+    newExternalSourceSetting,
+
+    -- ** FailedCustomVocabularyItem
+    FailedCustomVocabularyItem (FailedCustomVocabularyItem'),
+    newFailedCustomVocabularyItem,
+
+    -- ** FulfillmentCodeHookSettings
+    FulfillmentCodeHookSettings (FulfillmentCodeHookSettings'),
+    newFulfillmentCodeHookSettings,
+
+    -- ** FulfillmentStartResponseSpecification
+    FulfillmentStartResponseSpecification (FulfillmentStartResponseSpecification'),
+    newFulfillmentStartResponseSpecification,
+
+    -- ** FulfillmentUpdateResponseSpecification
+    FulfillmentUpdateResponseSpecification (FulfillmentUpdateResponseSpecification'),
+    newFulfillmentUpdateResponseSpecification,
+
+    -- ** FulfillmentUpdatesSpecification
+    FulfillmentUpdatesSpecification (FulfillmentUpdatesSpecification'),
+    newFulfillmentUpdatesSpecification,
+
+    -- ** GrammarSlotTypeSetting
+    GrammarSlotTypeSetting (GrammarSlotTypeSetting'),
+    newGrammarSlotTypeSetting,
+
+    -- ** GrammarSlotTypeSource
+    GrammarSlotTypeSource (GrammarSlotTypeSource'),
+    newGrammarSlotTypeSource,
+
+    -- ** ImageResponseCard
+    ImageResponseCard (ImageResponseCard'),
+    newImageResponseCard,
+
+    -- ** ImportFilter
+    ImportFilter (ImportFilter'),
+    newImportFilter,
+
+    -- ** ImportResourceSpecification
+    ImportResourceSpecification (ImportResourceSpecification'),
+    newImportResourceSpecification,
+
+    -- ** ImportSortBy
+    ImportSortBy (ImportSortBy'),
+    newImportSortBy,
+
+    -- ** ImportSummary
+    ImportSummary (ImportSummary'),
+    newImportSummary,
+
+    -- ** InitialResponseSetting
+    InitialResponseSetting (InitialResponseSetting'),
+    newInitialResponseSetting,
+
+    -- ** InputContext
+    InputContext (InputContext'),
+    newInputContext,
+
+    -- ** IntentClosingSetting
+    IntentClosingSetting (IntentClosingSetting'),
+    newIntentClosingSetting,
+
+    -- ** IntentConfirmationSetting
+    IntentConfirmationSetting (IntentConfirmationSetting'),
+    newIntentConfirmationSetting,
+
+    -- ** IntentFilter
+    IntentFilter (IntentFilter'),
+    newIntentFilter,
+
+    -- ** IntentOverride
+    IntentOverride (IntentOverride'),
+    newIntentOverride,
+
+    -- ** IntentSortBy
+    IntentSortBy (IntentSortBy'),
+    newIntentSortBy,
+
+    -- ** IntentStatistics
+    IntentStatistics (IntentStatistics'),
+    newIntentStatistics,
+
+    -- ** IntentSummary
+    IntentSummary (IntentSummary'),
+    newIntentSummary,
+
+    -- ** KendraConfiguration
+    KendraConfiguration (KendraConfiguration'),
+    newKendraConfiguration,
+
+    -- ** LambdaCodeHook
+    LambdaCodeHook (LambdaCodeHook'),
+    newLambdaCodeHook,
+
+    -- ** LexTranscriptFilter
+    LexTranscriptFilter (LexTranscriptFilter'),
+    newLexTranscriptFilter,
+
+    -- ** Message
+    Message (Message'),
+    newMessage,
+
+    -- ** MessageGroup
+    MessageGroup (MessageGroup'),
+    newMessageGroup,
+
+    -- ** MultipleValuesSetting
+    MultipleValuesSetting (MultipleValuesSetting'),
+    newMultipleValuesSetting,
+
+    -- ** NewCustomVocabularyItem
+    NewCustomVocabularyItem (NewCustomVocabularyItem'),
+    newNewCustomVocabularyItem,
+
+    -- ** ObfuscationSetting
+    ObfuscationSetting (ObfuscationSetting'),
+    newObfuscationSetting,
+
+    -- ** OutputContext
+    OutputContext (OutputContext'),
+    newOutputContext,
+
+    -- ** PathFormat
+    PathFormat (PathFormat'),
+    newPathFormat,
+
+    -- ** PlainTextMessage
+    PlainTextMessage (PlainTextMessage'),
+    newPlainTextMessage,
+
+    -- ** PostDialogCodeHookInvocationSpecification
+    PostDialogCodeHookInvocationSpecification (PostDialogCodeHookInvocationSpecification'),
+    newPostDialogCodeHookInvocationSpecification,
+
+    -- ** PostFulfillmentStatusSpecification
+    PostFulfillmentStatusSpecification (PostFulfillmentStatusSpecification'),
+    newPostFulfillmentStatusSpecification,
+
+    -- ** Principal
+    Principal (Principal'),
+    newPrincipal,
+
+    -- ** PromptAttemptSpecification
+    PromptAttemptSpecification (PromptAttemptSpecification'),
+    newPromptAttemptSpecification,
+
+    -- ** PromptSpecification
+    PromptSpecification (PromptSpecification'),
+    newPromptSpecification,
+
+    -- ** RecommendedIntentSummary
+    RecommendedIntentSummary (RecommendedIntentSummary'),
+    newRecommendedIntentSummary,
+
+    -- ** RelativeAggregationDuration
+    RelativeAggregationDuration (RelativeAggregationDuration'),
+    newRelativeAggregationDuration,
+
+    -- ** ResponseSpecification
+    ResponseSpecification (ResponseSpecification'),
+    newResponseSpecification,
+
+    -- ** S3BucketLogDestination
+    S3BucketLogDestination (S3BucketLogDestination'),
+    newS3BucketLogDestination,
+
+    -- ** S3BucketTranscriptSource
+    S3BucketTranscriptSource (S3BucketTranscriptSource'),
+    newS3BucketTranscriptSource,
+
+    -- ** SSMLMessage
+    SSMLMessage (SSMLMessage'),
+    newSSMLMessage,
+
+    -- ** SampleUtterance
+    SampleUtterance (SampleUtterance'),
+    newSampleUtterance,
+
+    -- ** SampleValue
+    SampleValue (SampleValue'),
+    newSampleValue,
+
+    -- ** SentimentAnalysisSettings
+    SentimentAnalysisSettings (SentimentAnalysisSettings'),
+    newSentimentAnalysisSettings,
+
+    -- ** SlotCaptureSetting
+    SlotCaptureSetting (SlotCaptureSetting'),
+    newSlotCaptureSetting,
+
+    -- ** SlotDefaultValue
+    SlotDefaultValue (SlotDefaultValue'),
+    newSlotDefaultValue,
+
+    -- ** SlotDefaultValueSpecification
+    SlotDefaultValueSpecification (SlotDefaultValueSpecification'),
+    newSlotDefaultValueSpecification,
+
+    -- ** SlotFilter
+    SlotFilter (SlotFilter'),
+    newSlotFilter,
+
+    -- ** SlotPriority
+    SlotPriority (SlotPriority'),
+    newSlotPriority,
+
+    -- ** SlotSortBy
+    SlotSortBy (SlotSortBy'),
+    newSlotSortBy,
+
+    -- ** SlotSummary
+    SlotSummary (SlotSummary'),
+    newSlotSummary,
+
+    -- ** SlotTypeFilter
+    SlotTypeFilter (SlotTypeFilter'),
+    newSlotTypeFilter,
+
+    -- ** SlotTypeSortBy
+    SlotTypeSortBy (SlotTypeSortBy'),
+    newSlotTypeSortBy,
+
+    -- ** SlotTypeStatistics
+    SlotTypeStatistics (SlotTypeStatistics'),
+    newSlotTypeStatistics,
+
+    -- ** SlotTypeSummary
+    SlotTypeSummary (SlotTypeSummary'),
+    newSlotTypeSummary,
+
+    -- ** SlotTypeValue
+    SlotTypeValue (SlotTypeValue'),
+    newSlotTypeValue,
+
+    -- ** SlotValue
+    SlotValue (SlotValue'),
+    newSlotValue,
+
+    -- ** SlotValueElicitationSetting
+    SlotValueElicitationSetting (SlotValueElicitationSetting'),
+    newSlotValueElicitationSetting,
+
+    -- ** SlotValueOverride
+    SlotValueOverride (SlotValueOverride'),
+    newSlotValueOverride,
+
+    -- ** SlotValueRegexFilter
+    SlotValueRegexFilter (SlotValueRegexFilter'),
+    newSlotValueRegexFilter,
+
+    -- ** SlotValueSelectionSetting
+    SlotValueSelectionSetting (SlotValueSelectionSetting'),
+    newSlotValueSelectionSetting,
+
+    -- ** Specifications
+    Specifications (Specifications'),
+    newSpecifications,
+
+    -- ** StillWaitingResponseSpecification
+    StillWaitingResponseSpecification (StillWaitingResponseSpecification'),
+    newStillWaitingResponseSpecification,
+
+    -- ** SubSlotSetting
+    SubSlotSetting (SubSlotSetting'),
+    newSubSlotSetting,
+
+    -- ** SubSlotTypeComposition
+    SubSlotTypeComposition (SubSlotTypeComposition'),
+    newSubSlotTypeComposition,
+
+    -- ** SubSlotValueElicitationSetting
+    SubSlotValueElicitationSetting (SubSlotValueElicitationSetting'),
+    newSubSlotValueElicitationSetting,
+
+    -- ** TextInputSpecification
+    TextInputSpecification (TextInputSpecification'),
+    newTextInputSpecification,
+
+    -- ** TextLogDestination
+    TextLogDestination (TextLogDestination'),
+    newTextLogDestination,
+
+    -- ** TextLogSetting
+    TextLogSetting (TextLogSetting'),
+    newTextLogSetting,
+
+    -- ** TranscriptFilter
+    TranscriptFilter (TranscriptFilter'),
+    newTranscriptFilter,
+
+    -- ** TranscriptSourceSetting
+    TranscriptSourceSetting (TranscriptSourceSetting'),
+    newTranscriptSourceSetting,
+
+    -- ** UtteranceAggregationDuration
+    UtteranceAggregationDuration (UtteranceAggregationDuration'),
+    newUtteranceAggregationDuration,
+
+    -- ** VoiceSettings
+    VoiceSettings (VoiceSettings'),
+    newVoiceSettings,
+
+    -- ** WaitAndContinueSpecification
+    WaitAndContinueSpecification (WaitAndContinueSpecification'),
+    newWaitAndContinueSpecification,
+  )
+where
+
+import Amazonka.LexV2Models.BatchCreateCustomVocabularyItem
+import Amazonka.LexV2Models.BatchDeleteCustomVocabularyItem
+import Amazonka.LexV2Models.BatchUpdateCustomVocabularyItem
+import Amazonka.LexV2Models.BuildBotLocale
+import Amazonka.LexV2Models.CreateBot
+import Amazonka.LexV2Models.CreateBotAlias
+import Amazonka.LexV2Models.CreateBotLocale
+import Amazonka.LexV2Models.CreateBotVersion
+import Amazonka.LexV2Models.CreateExport
+import Amazonka.LexV2Models.CreateIntent
+import Amazonka.LexV2Models.CreateResourcePolicy
+import Amazonka.LexV2Models.CreateResourcePolicyStatement
+import Amazonka.LexV2Models.CreateSlot
+import Amazonka.LexV2Models.CreateSlotType
+import Amazonka.LexV2Models.CreateUploadUrl
+import Amazonka.LexV2Models.DeleteBot
+import Amazonka.LexV2Models.DeleteBotAlias
+import Amazonka.LexV2Models.DeleteBotLocale
+import Amazonka.LexV2Models.DeleteBotVersion
+import Amazonka.LexV2Models.DeleteCustomVocabulary
+import Amazonka.LexV2Models.DeleteExport
+import Amazonka.LexV2Models.DeleteImport
+import Amazonka.LexV2Models.DeleteIntent
+import Amazonka.LexV2Models.DeleteResourcePolicy
+import Amazonka.LexV2Models.DeleteResourcePolicyStatement
+import Amazonka.LexV2Models.DeleteSlot
+import Amazonka.LexV2Models.DeleteSlotType
+import Amazonka.LexV2Models.DeleteUtterances
+import Amazonka.LexV2Models.DescribeBot
+import Amazonka.LexV2Models.DescribeBotAlias
+import Amazonka.LexV2Models.DescribeBotLocale
+import Amazonka.LexV2Models.DescribeBotRecommendation
+import Amazonka.LexV2Models.DescribeBotVersion
+import Amazonka.LexV2Models.DescribeCustomVocabularyMetadata
+import Amazonka.LexV2Models.DescribeExport
+import Amazonka.LexV2Models.DescribeImport
+import Amazonka.LexV2Models.DescribeIntent
+import Amazonka.LexV2Models.DescribeResourcePolicy
+import Amazonka.LexV2Models.DescribeSlot
+import Amazonka.LexV2Models.DescribeSlotType
+import Amazonka.LexV2Models.Lens
+import Amazonka.LexV2Models.ListAggregatedUtterances
+import Amazonka.LexV2Models.ListBotAliases
+import Amazonka.LexV2Models.ListBotLocales
+import Amazonka.LexV2Models.ListBotRecommendations
+import Amazonka.LexV2Models.ListBotVersions
+import Amazonka.LexV2Models.ListBots
+import Amazonka.LexV2Models.ListBuiltInIntents
+import Amazonka.LexV2Models.ListBuiltInSlotTypes
+import Amazonka.LexV2Models.ListCustomVocabularyItems
+import Amazonka.LexV2Models.ListExports
+import Amazonka.LexV2Models.ListImports
+import Amazonka.LexV2Models.ListIntents
+import Amazonka.LexV2Models.ListRecommendedIntents
+import Amazonka.LexV2Models.ListSlotTypes
+import Amazonka.LexV2Models.ListSlots
+import Amazonka.LexV2Models.ListTagsForResource
+import Amazonka.LexV2Models.SearchAssociatedTranscripts
+import Amazonka.LexV2Models.StartBotRecommendation
+import Amazonka.LexV2Models.StartImport
+import Amazonka.LexV2Models.StopBotRecommendation
+import Amazonka.LexV2Models.TagResource
+import Amazonka.LexV2Models.Types
+import Amazonka.LexV2Models.UntagResource
+import Amazonka.LexV2Models.UpdateBot
+import Amazonka.LexV2Models.UpdateBotAlias
+import Amazonka.LexV2Models.UpdateBotLocale
+import Amazonka.LexV2Models.UpdateBotRecommendation
+import Amazonka.LexV2Models.UpdateExport
+import Amazonka.LexV2Models.UpdateIntent
+import Amazonka.LexV2Models.UpdateResourcePolicy
+import Amazonka.LexV2Models.UpdateSlot
+import Amazonka.LexV2Models.UpdateSlotType
+import Amazonka.LexV2Models.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 'LexV2Models'.
+
+-- $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/LexV2Models/BatchCreateCustomVocabularyItem.hs b/gen/Amazonka/LexV2Models/BatchCreateCustomVocabularyItem.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/BatchCreateCustomVocabularyItem.hs
@@ -0,0 +1,323 @@
+{-# 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.LexV2Models.BatchCreateCustomVocabularyItem
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Batch create custom vocabulary item for the specified locale in the
+-- specified bot.
+module Amazonka.LexV2Models.BatchCreateCustomVocabularyItem
+  ( -- * Creating a Request
+    BatchCreateCustomVocabularyItem (..),
+    newBatchCreateCustomVocabularyItem,
+
+    -- * Request Lenses
+    batchCreateCustomVocabularyItem_botId,
+    batchCreateCustomVocabularyItem_botVersion,
+    batchCreateCustomVocabularyItem_localeId,
+    batchCreateCustomVocabularyItem_customVocabularyItemList,
+
+    -- * Destructuring the Response
+    BatchCreateCustomVocabularyItemResponse (..),
+    newBatchCreateCustomVocabularyItemResponse,
+
+    -- * Response Lenses
+    batchCreateCustomVocabularyItemResponse_botId,
+    batchCreateCustomVocabularyItemResponse_botVersion,
+    batchCreateCustomVocabularyItemResponse_errors,
+    batchCreateCustomVocabularyItemResponse_localeId,
+    batchCreateCustomVocabularyItemResponse_resources,
+    batchCreateCustomVocabularyItemResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LexV2Models.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newBatchCreateCustomVocabularyItem' smart constructor.
+data BatchCreateCustomVocabularyItem = BatchCreateCustomVocabularyItem'
+  { -- | The unique identifier of the bot to batch create the custom vocabulary
+    -- item for.
+    botId :: Prelude.Text,
+    -- | The bot version of the bot to batch create the custom vocabulary item
+    -- for.
+    botVersion :: Prelude.Text,
+    -- | The unique locale identifier of the bot to batch create the custom
+    -- vocabulary item for.
+    localeId :: Prelude.Text,
+    -- | The custom vocabulary item list of the bot to batch create the custom
+    -- vocabulary item for.
+    customVocabularyItemList :: Prelude.NonEmpty NewCustomVocabularyItem
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'BatchCreateCustomVocabularyItem' 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:
+--
+-- 'botId', 'batchCreateCustomVocabularyItem_botId' - The unique identifier of the bot to batch create the custom vocabulary
+-- item for.
+--
+-- 'botVersion', 'batchCreateCustomVocabularyItem_botVersion' - The bot version of the bot to batch create the custom vocabulary item
+-- for.
+--
+-- 'localeId', 'batchCreateCustomVocabularyItem_localeId' - The unique locale identifier of the bot to batch create the custom
+-- vocabulary item for.
+--
+-- 'customVocabularyItemList', 'batchCreateCustomVocabularyItem_customVocabularyItemList' - The custom vocabulary item list of the bot to batch create the custom
+-- vocabulary item for.
+newBatchCreateCustomVocabularyItem ::
+  -- | 'botId'
+  Prelude.Text ->
+  -- | 'botVersion'
+  Prelude.Text ->
+  -- | 'localeId'
+  Prelude.Text ->
+  -- | 'customVocabularyItemList'
+  Prelude.NonEmpty NewCustomVocabularyItem ->
+  BatchCreateCustomVocabularyItem
+newBatchCreateCustomVocabularyItem
+  pBotId_
+  pBotVersion_
+  pLocaleId_
+  pCustomVocabularyItemList_ =
+    BatchCreateCustomVocabularyItem'
+      { botId = pBotId_,
+        botVersion = pBotVersion_,
+        localeId = pLocaleId_,
+        customVocabularyItemList =
+          Lens.coerced
+            Lens.# pCustomVocabularyItemList_
+      }
+
+-- | The unique identifier of the bot to batch create the custom vocabulary
+-- item for.
+batchCreateCustomVocabularyItem_botId :: Lens.Lens' BatchCreateCustomVocabularyItem Prelude.Text
+batchCreateCustomVocabularyItem_botId = Lens.lens (\BatchCreateCustomVocabularyItem' {botId} -> botId) (\s@BatchCreateCustomVocabularyItem' {} a -> s {botId = a} :: BatchCreateCustomVocabularyItem)
+
+-- | The bot version of the bot to batch create the custom vocabulary item
+-- for.
+batchCreateCustomVocabularyItem_botVersion :: Lens.Lens' BatchCreateCustomVocabularyItem Prelude.Text
+batchCreateCustomVocabularyItem_botVersion = Lens.lens (\BatchCreateCustomVocabularyItem' {botVersion} -> botVersion) (\s@BatchCreateCustomVocabularyItem' {} a -> s {botVersion = a} :: BatchCreateCustomVocabularyItem)
+
+-- | The unique locale identifier of the bot to batch create the custom
+-- vocabulary item for.
+batchCreateCustomVocabularyItem_localeId :: Lens.Lens' BatchCreateCustomVocabularyItem Prelude.Text
+batchCreateCustomVocabularyItem_localeId = Lens.lens (\BatchCreateCustomVocabularyItem' {localeId} -> localeId) (\s@BatchCreateCustomVocabularyItem' {} a -> s {localeId = a} :: BatchCreateCustomVocabularyItem)
+
+-- | The custom vocabulary item list of the bot to batch create the custom
+-- vocabulary item for.
+batchCreateCustomVocabularyItem_customVocabularyItemList :: Lens.Lens' BatchCreateCustomVocabularyItem (Prelude.NonEmpty NewCustomVocabularyItem)
+batchCreateCustomVocabularyItem_customVocabularyItemList = Lens.lens (\BatchCreateCustomVocabularyItem' {customVocabularyItemList} -> customVocabularyItemList) (\s@BatchCreateCustomVocabularyItem' {} a -> s {customVocabularyItemList = a} :: BatchCreateCustomVocabularyItem) Prelude.. Lens.coerced
+
+instance
+  Core.AWSRequest
+    BatchCreateCustomVocabularyItem
+  where
+  type
+    AWSResponse BatchCreateCustomVocabularyItem =
+      BatchCreateCustomVocabularyItemResponse
+  request overrides =
+    Request.putJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          BatchCreateCustomVocabularyItemResponse'
+            Prelude.<$> (x Data..?> "botId")
+            Prelude.<*> (x Data..?> "botVersion")
+            Prelude.<*> (x Data..?> "errors" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "localeId")
+            Prelude.<*> (x Data..?> "resources" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    BatchCreateCustomVocabularyItem
+  where
+  hashWithSalt
+    _salt
+    BatchCreateCustomVocabularyItem' {..} =
+      _salt
+        `Prelude.hashWithSalt` botId
+        `Prelude.hashWithSalt` botVersion
+        `Prelude.hashWithSalt` localeId
+        `Prelude.hashWithSalt` customVocabularyItemList
+
+instance
+  Prelude.NFData
+    BatchCreateCustomVocabularyItem
+  where
+  rnf BatchCreateCustomVocabularyItem' {..} =
+    Prelude.rnf botId
+      `Prelude.seq` Prelude.rnf botVersion
+      `Prelude.seq` Prelude.rnf localeId
+      `Prelude.seq` Prelude.rnf customVocabularyItemList
+
+instance
+  Data.ToHeaders
+    BatchCreateCustomVocabularyItem
+  where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON BatchCreateCustomVocabularyItem where
+  toJSON BatchCreateCustomVocabularyItem' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ( "customVocabularyItemList"
+                  Data..= customVocabularyItemList
+              )
+          ]
+      )
+
+instance Data.ToPath BatchCreateCustomVocabularyItem where
+  toPath BatchCreateCustomVocabularyItem' {..} =
+    Prelude.mconcat
+      [ "/bots/",
+        Data.toBS botId,
+        "/botversions/",
+        Data.toBS botVersion,
+        "/botlocales/",
+        Data.toBS localeId,
+        "/customvocabulary/DEFAULT/batchcreate"
+      ]
+
+instance Data.ToQuery BatchCreateCustomVocabularyItem where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newBatchCreateCustomVocabularyItemResponse' smart constructor.
+data BatchCreateCustomVocabularyItemResponse = BatchCreateCustomVocabularyItemResponse'
+  { -- | The unique identifier of the bot to batch create response for the custom
+    -- vocabulary item.
+    botId :: Prelude.Maybe Prelude.Text,
+    -- | The bot version of the bot to batch create the custom vocabulary item
+    -- response for.
+    botVersion :: Prelude.Maybe Prelude.Text,
+    -- | The errors of the action to batch create the custom vocabulary item
+    -- response for a bot.
+    errors :: Prelude.Maybe [FailedCustomVocabularyItem],
+    -- | The unique locale identifier of the bot to batch create the custom
+    -- vocabulary item response for.
+    localeId :: Prelude.Maybe Prelude.Text,
+    -- | The resources of the action to batch create the custom vocabulary item
+    -- response for a bot.
+    resources :: Prelude.Maybe [CustomVocabularyItem],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'BatchCreateCustomVocabularyItemResponse' 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:
+--
+-- 'botId', 'batchCreateCustomVocabularyItemResponse_botId' - The unique identifier of the bot to batch create response for the custom
+-- vocabulary item.
+--
+-- 'botVersion', 'batchCreateCustomVocabularyItemResponse_botVersion' - The bot version of the bot to batch create the custom vocabulary item
+-- response for.
+--
+-- 'errors', 'batchCreateCustomVocabularyItemResponse_errors' - The errors of the action to batch create the custom vocabulary item
+-- response for a bot.
+--
+-- 'localeId', 'batchCreateCustomVocabularyItemResponse_localeId' - The unique locale identifier of the bot to batch create the custom
+-- vocabulary item response for.
+--
+-- 'resources', 'batchCreateCustomVocabularyItemResponse_resources' - The resources of the action to batch create the custom vocabulary item
+-- response for a bot.
+--
+-- 'httpStatus', 'batchCreateCustomVocabularyItemResponse_httpStatus' - The response's http status code.
+newBatchCreateCustomVocabularyItemResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  BatchCreateCustomVocabularyItemResponse
+newBatchCreateCustomVocabularyItemResponse
+  pHttpStatus_ =
+    BatchCreateCustomVocabularyItemResponse'
+      { botId =
+          Prelude.Nothing,
+        botVersion = Prelude.Nothing,
+        errors = Prelude.Nothing,
+        localeId = Prelude.Nothing,
+        resources = Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | The unique identifier of the bot to batch create response for the custom
+-- vocabulary item.
+batchCreateCustomVocabularyItemResponse_botId :: Lens.Lens' BatchCreateCustomVocabularyItemResponse (Prelude.Maybe Prelude.Text)
+batchCreateCustomVocabularyItemResponse_botId = Lens.lens (\BatchCreateCustomVocabularyItemResponse' {botId} -> botId) (\s@BatchCreateCustomVocabularyItemResponse' {} a -> s {botId = a} :: BatchCreateCustomVocabularyItemResponse)
+
+-- | The bot version of the bot to batch create the custom vocabulary item
+-- response for.
+batchCreateCustomVocabularyItemResponse_botVersion :: Lens.Lens' BatchCreateCustomVocabularyItemResponse (Prelude.Maybe Prelude.Text)
+batchCreateCustomVocabularyItemResponse_botVersion = Lens.lens (\BatchCreateCustomVocabularyItemResponse' {botVersion} -> botVersion) (\s@BatchCreateCustomVocabularyItemResponse' {} a -> s {botVersion = a} :: BatchCreateCustomVocabularyItemResponse)
+
+-- | The errors of the action to batch create the custom vocabulary item
+-- response for a bot.
+batchCreateCustomVocabularyItemResponse_errors :: Lens.Lens' BatchCreateCustomVocabularyItemResponse (Prelude.Maybe [FailedCustomVocabularyItem])
+batchCreateCustomVocabularyItemResponse_errors = Lens.lens (\BatchCreateCustomVocabularyItemResponse' {errors} -> errors) (\s@BatchCreateCustomVocabularyItemResponse' {} a -> s {errors = a} :: BatchCreateCustomVocabularyItemResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The unique locale identifier of the bot to batch create the custom
+-- vocabulary item response for.
+batchCreateCustomVocabularyItemResponse_localeId :: Lens.Lens' BatchCreateCustomVocabularyItemResponse (Prelude.Maybe Prelude.Text)
+batchCreateCustomVocabularyItemResponse_localeId = Lens.lens (\BatchCreateCustomVocabularyItemResponse' {localeId} -> localeId) (\s@BatchCreateCustomVocabularyItemResponse' {} a -> s {localeId = a} :: BatchCreateCustomVocabularyItemResponse)
+
+-- | The resources of the action to batch create the custom vocabulary item
+-- response for a bot.
+batchCreateCustomVocabularyItemResponse_resources :: Lens.Lens' BatchCreateCustomVocabularyItemResponse (Prelude.Maybe [CustomVocabularyItem])
+batchCreateCustomVocabularyItemResponse_resources = Lens.lens (\BatchCreateCustomVocabularyItemResponse' {resources} -> resources) (\s@BatchCreateCustomVocabularyItemResponse' {} a -> s {resources = a} :: BatchCreateCustomVocabularyItemResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+batchCreateCustomVocabularyItemResponse_httpStatus :: Lens.Lens' BatchCreateCustomVocabularyItemResponse Prelude.Int
+batchCreateCustomVocabularyItemResponse_httpStatus = Lens.lens (\BatchCreateCustomVocabularyItemResponse' {httpStatus} -> httpStatus) (\s@BatchCreateCustomVocabularyItemResponse' {} a -> s {httpStatus = a} :: BatchCreateCustomVocabularyItemResponse)
+
+instance
+  Prelude.NFData
+    BatchCreateCustomVocabularyItemResponse
+  where
+  rnf BatchCreateCustomVocabularyItemResponse' {..} =
+    Prelude.rnf botId
+      `Prelude.seq` Prelude.rnf botVersion
+      `Prelude.seq` Prelude.rnf errors
+      `Prelude.seq` Prelude.rnf localeId
+      `Prelude.seq` Prelude.rnf resources
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/LexV2Models/BatchDeleteCustomVocabularyItem.hs b/gen/Amazonka/LexV2Models/BatchDeleteCustomVocabularyItem.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/BatchDeleteCustomVocabularyItem.hs
@@ -0,0 +1,323 @@
+{-# 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.LexV2Models.BatchDeleteCustomVocabularyItem
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Batch delete custom vocabulary item for the specified locale in the
+-- specified bot.
+module Amazonka.LexV2Models.BatchDeleteCustomVocabularyItem
+  ( -- * Creating a Request
+    BatchDeleteCustomVocabularyItem (..),
+    newBatchDeleteCustomVocabularyItem,
+
+    -- * Request Lenses
+    batchDeleteCustomVocabularyItem_botId,
+    batchDeleteCustomVocabularyItem_botVersion,
+    batchDeleteCustomVocabularyItem_localeId,
+    batchDeleteCustomVocabularyItem_customVocabularyItemList,
+
+    -- * Destructuring the Response
+    BatchDeleteCustomVocabularyItemResponse (..),
+    newBatchDeleteCustomVocabularyItemResponse,
+
+    -- * Response Lenses
+    batchDeleteCustomVocabularyItemResponse_botId,
+    batchDeleteCustomVocabularyItemResponse_botVersion,
+    batchDeleteCustomVocabularyItemResponse_errors,
+    batchDeleteCustomVocabularyItemResponse_localeId,
+    batchDeleteCustomVocabularyItemResponse_resources,
+    batchDeleteCustomVocabularyItemResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LexV2Models.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newBatchDeleteCustomVocabularyItem' smart constructor.
+data BatchDeleteCustomVocabularyItem = BatchDeleteCustomVocabularyItem'
+  { -- | The unique identifier of the bot to batch delete request for the custom
+    -- vocabulary item.
+    botId :: Prelude.Text,
+    -- | The version of the bot to batch delete request for the custom vocabulary
+    -- item.
+    botVersion :: Prelude.Text,
+    -- | The locale identifier of the bot to batch delete request for the custom
+    -- vocabulary item.
+    localeId :: Prelude.Text,
+    -- | The custom vocabulary list to batch delete request for the custom
+    -- vocabulary item.
+    customVocabularyItemList :: Prelude.NonEmpty CustomVocabularyEntryId
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'BatchDeleteCustomVocabularyItem' 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:
+--
+-- 'botId', 'batchDeleteCustomVocabularyItem_botId' - The unique identifier of the bot to batch delete request for the custom
+-- vocabulary item.
+--
+-- 'botVersion', 'batchDeleteCustomVocabularyItem_botVersion' - The version of the bot to batch delete request for the custom vocabulary
+-- item.
+--
+-- 'localeId', 'batchDeleteCustomVocabularyItem_localeId' - The locale identifier of the bot to batch delete request for the custom
+-- vocabulary item.
+--
+-- 'customVocabularyItemList', 'batchDeleteCustomVocabularyItem_customVocabularyItemList' - The custom vocabulary list to batch delete request for the custom
+-- vocabulary item.
+newBatchDeleteCustomVocabularyItem ::
+  -- | 'botId'
+  Prelude.Text ->
+  -- | 'botVersion'
+  Prelude.Text ->
+  -- | 'localeId'
+  Prelude.Text ->
+  -- | 'customVocabularyItemList'
+  Prelude.NonEmpty CustomVocabularyEntryId ->
+  BatchDeleteCustomVocabularyItem
+newBatchDeleteCustomVocabularyItem
+  pBotId_
+  pBotVersion_
+  pLocaleId_
+  pCustomVocabularyItemList_ =
+    BatchDeleteCustomVocabularyItem'
+      { botId = pBotId_,
+        botVersion = pBotVersion_,
+        localeId = pLocaleId_,
+        customVocabularyItemList =
+          Lens.coerced
+            Lens.# pCustomVocabularyItemList_
+      }
+
+-- | The unique identifier of the bot to batch delete request for the custom
+-- vocabulary item.
+batchDeleteCustomVocabularyItem_botId :: Lens.Lens' BatchDeleteCustomVocabularyItem Prelude.Text
+batchDeleteCustomVocabularyItem_botId = Lens.lens (\BatchDeleteCustomVocabularyItem' {botId} -> botId) (\s@BatchDeleteCustomVocabularyItem' {} a -> s {botId = a} :: BatchDeleteCustomVocabularyItem)
+
+-- | The version of the bot to batch delete request for the custom vocabulary
+-- item.
+batchDeleteCustomVocabularyItem_botVersion :: Lens.Lens' BatchDeleteCustomVocabularyItem Prelude.Text
+batchDeleteCustomVocabularyItem_botVersion = Lens.lens (\BatchDeleteCustomVocabularyItem' {botVersion} -> botVersion) (\s@BatchDeleteCustomVocabularyItem' {} a -> s {botVersion = a} :: BatchDeleteCustomVocabularyItem)
+
+-- | The locale identifier of the bot to batch delete request for the custom
+-- vocabulary item.
+batchDeleteCustomVocabularyItem_localeId :: Lens.Lens' BatchDeleteCustomVocabularyItem Prelude.Text
+batchDeleteCustomVocabularyItem_localeId = Lens.lens (\BatchDeleteCustomVocabularyItem' {localeId} -> localeId) (\s@BatchDeleteCustomVocabularyItem' {} a -> s {localeId = a} :: BatchDeleteCustomVocabularyItem)
+
+-- | The custom vocabulary list to batch delete request for the custom
+-- vocabulary item.
+batchDeleteCustomVocabularyItem_customVocabularyItemList :: Lens.Lens' BatchDeleteCustomVocabularyItem (Prelude.NonEmpty CustomVocabularyEntryId)
+batchDeleteCustomVocabularyItem_customVocabularyItemList = Lens.lens (\BatchDeleteCustomVocabularyItem' {customVocabularyItemList} -> customVocabularyItemList) (\s@BatchDeleteCustomVocabularyItem' {} a -> s {customVocabularyItemList = a} :: BatchDeleteCustomVocabularyItem) Prelude.. Lens.coerced
+
+instance
+  Core.AWSRequest
+    BatchDeleteCustomVocabularyItem
+  where
+  type
+    AWSResponse BatchDeleteCustomVocabularyItem =
+      BatchDeleteCustomVocabularyItemResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          BatchDeleteCustomVocabularyItemResponse'
+            Prelude.<$> (x Data..?> "botId")
+            Prelude.<*> (x Data..?> "botVersion")
+            Prelude.<*> (x Data..?> "errors" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "localeId")
+            Prelude.<*> (x Data..?> "resources" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    BatchDeleteCustomVocabularyItem
+  where
+  hashWithSalt
+    _salt
+    BatchDeleteCustomVocabularyItem' {..} =
+      _salt
+        `Prelude.hashWithSalt` botId
+        `Prelude.hashWithSalt` botVersion
+        `Prelude.hashWithSalt` localeId
+        `Prelude.hashWithSalt` customVocabularyItemList
+
+instance
+  Prelude.NFData
+    BatchDeleteCustomVocabularyItem
+  where
+  rnf BatchDeleteCustomVocabularyItem' {..} =
+    Prelude.rnf botId
+      `Prelude.seq` Prelude.rnf botVersion
+      `Prelude.seq` Prelude.rnf localeId
+      `Prelude.seq` Prelude.rnf customVocabularyItemList
+
+instance
+  Data.ToHeaders
+    BatchDeleteCustomVocabularyItem
+  where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON BatchDeleteCustomVocabularyItem where
+  toJSON BatchDeleteCustomVocabularyItem' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ( "customVocabularyItemList"
+                  Data..= customVocabularyItemList
+              )
+          ]
+      )
+
+instance Data.ToPath BatchDeleteCustomVocabularyItem where
+  toPath BatchDeleteCustomVocabularyItem' {..} =
+    Prelude.mconcat
+      [ "/bots/",
+        Data.toBS botId,
+        "/botversions/",
+        Data.toBS botVersion,
+        "/botlocales/",
+        Data.toBS localeId,
+        "/customvocabulary/DEFAULT/batchdelete"
+      ]
+
+instance Data.ToQuery BatchDeleteCustomVocabularyItem where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newBatchDeleteCustomVocabularyItemResponse' smart constructor.
+data BatchDeleteCustomVocabularyItemResponse = BatchDeleteCustomVocabularyItemResponse'
+  { -- | The unique identifier of the bot to batch delete response for the custom
+    -- vocabulary item.
+    botId :: Prelude.Maybe Prelude.Text,
+    -- | The version of the bot to batch delete response for the custom
+    -- vocabulary item.
+    botVersion :: Prelude.Maybe Prelude.Text,
+    -- | The errors of the action to batch delete response for the custom
+    -- vocabulary item.
+    errors :: Prelude.Maybe [FailedCustomVocabularyItem],
+    -- | The locale identifier of the bot to batch delete response for the custom
+    -- vocabulary item.
+    localeId :: Prelude.Maybe Prelude.Text,
+    -- | The resources of the action to batch delete response for the custom
+    -- vocabulary item.
+    resources :: Prelude.Maybe [CustomVocabularyItem],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'BatchDeleteCustomVocabularyItemResponse' 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:
+--
+-- 'botId', 'batchDeleteCustomVocabularyItemResponse_botId' - The unique identifier of the bot to batch delete response for the custom
+-- vocabulary item.
+--
+-- 'botVersion', 'batchDeleteCustomVocabularyItemResponse_botVersion' - The version of the bot to batch delete response for the custom
+-- vocabulary item.
+--
+-- 'errors', 'batchDeleteCustomVocabularyItemResponse_errors' - The errors of the action to batch delete response for the custom
+-- vocabulary item.
+--
+-- 'localeId', 'batchDeleteCustomVocabularyItemResponse_localeId' - The locale identifier of the bot to batch delete response for the custom
+-- vocabulary item.
+--
+-- 'resources', 'batchDeleteCustomVocabularyItemResponse_resources' - The resources of the action to batch delete response for the custom
+-- vocabulary item.
+--
+-- 'httpStatus', 'batchDeleteCustomVocabularyItemResponse_httpStatus' - The response's http status code.
+newBatchDeleteCustomVocabularyItemResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  BatchDeleteCustomVocabularyItemResponse
+newBatchDeleteCustomVocabularyItemResponse
+  pHttpStatus_ =
+    BatchDeleteCustomVocabularyItemResponse'
+      { botId =
+          Prelude.Nothing,
+        botVersion = Prelude.Nothing,
+        errors = Prelude.Nothing,
+        localeId = Prelude.Nothing,
+        resources = Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | The unique identifier of the bot to batch delete response for the custom
+-- vocabulary item.
+batchDeleteCustomVocabularyItemResponse_botId :: Lens.Lens' BatchDeleteCustomVocabularyItemResponse (Prelude.Maybe Prelude.Text)
+batchDeleteCustomVocabularyItemResponse_botId = Lens.lens (\BatchDeleteCustomVocabularyItemResponse' {botId} -> botId) (\s@BatchDeleteCustomVocabularyItemResponse' {} a -> s {botId = a} :: BatchDeleteCustomVocabularyItemResponse)
+
+-- | The version of the bot to batch delete response for the custom
+-- vocabulary item.
+batchDeleteCustomVocabularyItemResponse_botVersion :: Lens.Lens' BatchDeleteCustomVocabularyItemResponse (Prelude.Maybe Prelude.Text)
+batchDeleteCustomVocabularyItemResponse_botVersion = Lens.lens (\BatchDeleteCustomVocabularyItemResponse' {botVersion} -> botVersion) (\s@BatchDeleteCustomVocabularyItemResponse' {} a -> s {botVersion = a} :: BatchDeleteCustomVocabularyItemResponse)
+
+-- | The errors of the action to batch delete response for the custom
+-- vocabulary item.
+batchDeleteCustomVocabularyItemResponse_errors :: Lens.Lens' BatchDeleteCustomVocabularyItemResponse (Prelude.Maybe [FailedCustomVocabularyItem])
+batchDeleteCustomVocabularyItemResponse_errors = Lens.lens (\BatchDeleteCustomVocabularyItemResponse' {errors} -> errors) (\s@BatchDeleteCustomVocabularyItemResponse' {} a -> s {errors = a} :: BatchDeleteCustomVocabularyItemResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The locale identifier of the bot to batch delete response for the custom
+-- vocabulary item.
+batchDeleteCustomVocabularyItemResponse_localeId :: Lens.Lens' BatchDeleteCustomVocabularyItemResponse (Prelude.Maybe Prelude.Text)
+batchDeleteCustomVocabularyItemResponse_localeId = Lens.lens (\BatchDeleteCustomVocabularyItemResponse' {localeId} -> localeId) (\s@BatchDeleteCustomVocabularyItemResponse' {} a -> s {localeId = a} :: BatchDeleteCustomVocabularyItemResponse)
+
+-- | The resources of the action to batch delete response for the custom
+-- vocabulary item.
+batchDeleteCustomVocabularyItemResponse_resources :: Lens.Lens' BatchDeleteCustomVocabularyItemResponse (Prelude.Maybe [CustomVocabularyItem])
+batchDeleteCustomVocabularyItemResponse_resources = Lens.lens (\BatchDeleteCustomVocabularyItemResponse' {resources} -> resources) (\s@BatchDeleteCustomVocabularyItemResponse' {} a -> s {resources = a} :: BatchDeleteCustomVocabularyItemResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+batchDeleteCustomVocabularyItemResponse_httpStatus :: Lens.Lens' BatchDeleteCustomVocabularyItemResponse Prelude.Int
+batchDeleteCustomVocabularyItemResponse_httpStatus = Lens.lens (\BatchDeleteCustomVocabularyItemResponse' {httpStatus} -> httpStatus) (\s@BatchDeleteCustomVocabularyItemResponse' {} a -> s {httpStatus = a} :: BatchDeleteCustomVocabularyItemResponse)
+
+instance
+  Prelude.NFData
+    BatchDeleteCustomVocabularyItemResponse
+  where
+  rnf BatchDeleteCustomVocabularyItemResponse' {..} =
+    Prelude.rnf botId
+      `Prelude.seq` Prelude.rnf botVersion
+      `Prelude.seq` Prelude.rnf errors
+      `Prelude.seq` Prelude.rnf localeId
+      `Prelude.seq` Prelude.rnf resources
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/LexV2Models/BatchUpdateCustomVocabularyItem.hs b/gen/Amazonka/LexV2Models/BatchUpdateCustomVocabularyItem.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/BatchUpdateCustomVocabularyItem.hs
@@ -0,0 +1,323 @@
+{-# 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.LexV2Models.BatchUpdateCustomVocabularyItem
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Batch update custom vocabulary item for the specified locale in the
+-- specified bot.
+module Amazonka.LexV2Models.BatchUpdateCustomVocabularyItem
+  ( -- * Creating a Request
+    BatchUpdateCustomVocabularyItem (..),
+    newBatchUpdateCustomVocabularyItem,
+
+    -- * Request Lenses
+    batchUpdateCustomVocabularyItem_botId,
+    batchUpdateCustomVocabularyItem_botVersion,
+    batchUpdateCustomVocabularyItem_localeId,
+    batchUpdateCustomVocabularyItem_customVocabularyItemList,
+
+    -- * Destructuring the Response
+    BatchUpdateCustomVocabularyItemResponse (..),
+    newBatchUpdateCustomVocabularyItemResponse,
+
+    -- * Response Lenses
+    batchUpdateCustomVocabularyItemResponse_botId,
+    batchUpdateCustomVocabularyItemResponse_botVersion,
+    batchUpdateCustomVocabularyItemResponse_errors,
+    batchUpdateCustomVocabularyItemResponse_localeId,
+    batchUpdateCustomVocabularyItemResponse_resources,
+    batchUpdateCustomVocabularyItemResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LexV2Models.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newBatchUpdateCustomVocabularyItem' smart constructor.
+data BatchUpdateCustomVocabularyItem = BatchUpdateCustomVocabularyItem'
+  { -- | The unique identifier of the bot to the batch update request for the
+    -- custom vocabulary item.
+    botId :: Prelude.Text,
+    -- | The bot version of the bot to the batch update request for the custom
+    -- vocabulary item.
+    botVersion :: Prelude.Text,
+    -- | The locale identifier of the bot to the batch update request for the
+    -- custom vocabulary item.
+    localeId :: Prelude.Text,
+    -- | The custom vocabulary item list of the bot to the batch update request
+    -- for the custom vocabulary item.
+    customVocabularyItemList :: Prelude.NonEmpty CustomVocabularyItem
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'BatchUpdateCustomVocabularyItem' 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:
+--
+-- 'botId', 'batchUpdateCustomVocabularyItem_botId' - The unique identifier of the bot to the batch update request for the
+-- custom vocabulary item.
+--
+-- 'botVersion', 'batchUpdateCustomVocabularyItem_botVersion' - The bot version of the bot to the batch update request for the custom
+-- vocabulary item.
+--
+-- 'localeId', 'batchUpdateCustomVocabularyItem_localeId' - The locale identifier of the bot to the batch update request for the
+-- custom vocabulary item.
+--
+-- 'customVocabularyItemList', 'batchUpdateCustomVocabularyItem_customVocabularyItemList' - The custom vocabulary item list of the bot to the batch update request
+-- for the custom vocabulary item.
+newBatchUpdateCustomVocabularyItem ::
+  -- | 'botId'
+  Prelude.Text ->
+  -- | 'botVersion'
+  Prelude.Text ->
+  -- | 'localeId'
+  Prelude.Text ->
+  -- | 'customVocabularyItemList'
+  Prelude.NonEmpty CustomVocabularyItem ->
+  BatchUpdateCustomVocabularyItem
+newBatchUpdateCustomVocabularyItem
+  pBotId_
+  pBotVersion_
+  pLocaleId_
+  pCustomVocabularyItemList_ =
+    BatchUpdateCustomVocabularyItem'
+      { botId = pBotId_,
+        botVersion = pBotVersion_,
+        localeId = pLocaleId_,
+        customVocabularyItemList =
+          Lens.coerced
+            Lens.# pCustomVocabularyItemList_
+      }
+
+-- | The unique identifier of the bot to the batch update request for the
+-- custom vocabulary item.
+batchUpdateCustomVocabularyItem_botId :: Lens.Lens' BatchUpdateCustomVocabularyItem Prelude.Text
+batchUpdateCustomVocabularyItem_botId = Lens.lens (\BatchUpdateCustomVocabularyItem' {botId} -> botId) (\s@BatchUpdateCustomVocabularyItem' {} a -> s {botId = a} :: BatchUpdateCustomVocabularyItem)
+
+-- | The bot version of the bot to the batch update request for the custom
+-- vocabulary item.
+batchUpdateCustomVocabularyItem_botVersion :: Lens.Lens' BatchUpdateCustomVocabularyItem Prelude.Text
+batchUpdateCustomVocabularyItem_botVersion = Lens.lens (\BatchUpdateCustomVocabularyItem' {botVersion} -> botVersion) (\s@BatchUpdateCustomVocabularyItem' {} a -> s {botVersion = a} :: BatchUpdateCustomVocabularyItem)
+
+-- | The locale identifier of the bot to the batch update request for the
+-- custom vocabulary item.
+batchUpdateCustomVocabularyItem_localeId :: Lens.Lens' BatchUpdateCustomVocabularyItem Prelude.Text
+batchUpdateCustomVocabularyItem_localeId = Lens.lens (\BatchUpdateCustomVocabularyItem' {localeId} -> localeId) (\s@BatchUpdateCustomVocabularyItem' {} a -> s {localeId = a} :: BatchUpdateCustomVocabularyItem)
+
+-- | The custom vocabulary item list of the bot to the batch update request
+-- for the custom vocabulary item.
+batchUpdateCustomVocabularyItem_customVocabularyItemList :: Lens.Lens' BatchUpdateCustomVocabularyItem (Prelude.NonEmpty CustomVocabularyItem)
+batchUpdateCustomVocabularyItem_customVocabularyItemList = Lens.lens (\BatchUpdateCustomVocabularyItem' {customVocabularyItemList} -> customVocabularyItemList) (\s@BatchUpdateCustomVocabularyItem' {} a -> s {customVocabularyItemList = a} :: BatchUpdateCustomVocabularyItem) Prelude.. Lens.coerced
+
+instance
+  Core.AWSRequest
+    BatchUpdateCustomVocabularyItem
+  where
+  type
+    AWSResponse BatchUpdateCustomVocabularyItem =
+      BatchUpdateCustomVocabularyItemResponse
+  request overrides =
+    Request.putJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          BatchUpdateCustomVocabularyItemResponse'
+            Prelude.<$> (x Data..?> "botId")
+            Prelude.<*> (x Data..?> "botVersion")
+            Prelude.<*> (x Data..?> "errors" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "localeId")
+            Prelude.<*> (x Data..?> "resources" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    BatchUpdateCustomVocabularyItem
+  where
+  hashWithSalt
+    _salt
+    BatchUpdateCustomVocabularyItem' {..} =
+      _salt
+        `Prelude.hashWithSalt` botId
+        `Prelude.hashWithSalt` botVersion
+        `Prelude.hashWithSalt` localeId
+        `Prelude.hashWithSalt` customVocabularyItemList
+
+instance
+  Prelude.NFData
+    BatchUpdateCustomVocabularyItem
+  where
+  rnf BatchUpdateCustomVocabularyItem' {..} =
+    Prelude.rnf botId
+      `Prelude.seq` Prelude.rnf botVersion
+      `Prelude.seq` Prelude.rnf localeId
+      `Prelude.seq` Prelude.rnf customVocabularyItemList
+
+instance
+  Data.ToHeaders
+    BatchUpdateCustomVocabularyItem
+  where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON BatchUpdateCustomVocabularyItem where
+  toJSON BatchUpdateCustomVocabularyItem' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ( "customVocabularyItemList"
+                  Data..= customVocabularyItemList
+              )
+          ]
+      )
+
+instance Data.ToPath BatchUpdateCustomVocabularyItem where
+  toPath BatchUpdateCustomVocabularyItem' {..} =
+    Prelude.mconcat
+      [ "/bots/",
+        Data.toBS botId,
+        "/botversions/",
+        Data.toBS botVersion,
+        "/botlocales/",
+        Data.toBS localeId,
+        "/customvocabulary/DEFAULT/batchupdate"
+      ]
+
+instance Data.ToQuery BatchUpdateCustomVocabularyItem where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newBatchUpdateCustomVocabularyItemResponse' smart constructor.
+data BatchUpdateCustomVocabularyItemResponse = BatchUpdateCustomVocabularyItemResponse'
+  { -- | The unique identifier of the bot to the batch update response for the
+    -- custom vocabulary item.
+    botId :: Prelude.Maybe Prelude.Text,
+    -- | The bot version of the bot to the batch update response for the custom
+    -- vocabulary item.
+    botVersion :: Prelude.Maybe Prelude.Text,
+    -- | The errors of the action to batch update response for the custom
+    -- vocabulary item.
+    errors :: Prelude.Maybe [FailedCustomVocabularyItem],
+    -- | The locale identifier of the bot to the batch update response for the
+    -- custom vocabulary item.
+    localeId :: Prelude.Maybe Prelude.Text,
+    -- | The resources of the action to batch update response for the custom
+    -- vocabulary item.
+    resources :: Prelude.Maybe [CustomVocabularyItem],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'BatchUpdateCustomVocabularyItemResponse' 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:
+--
+-- 'botId', 'batchUpdateCustomVocabularyItemResponse_botId' - The unique identifier of the bot to the batch update response for the
+-- custom vocabulary item.
+--
+-- 'botVersion', 'batchUpdateCustomVocabularyItemResponse_botVersion' - The bot version of the bot to the batch update response for the custom
+-- vocabulary item.
+--
+-- 'errors', 'batchUpdateCustomVocabularyItemResponse_errors' - The errors of the action to batch update response for the custom
+-- vocabulary item.
+--
+-- 'localeId', 'batchUpdateCustomVocabularyItemResponse_localeId' - The locale identifier of the bot to the batch update response for the
+-- custom vocabulary item.
+--
+-- 'resources', 'batchUpdateCustomVocabularyItemResponse_resources' - The resources of the action to batch update response for the custom
+-- vocabulary item.
+--
+-- 'httpStatus', 'batchUpdateCustomVocabularyItemResponse_httpStatus' - The response's http status code.
+newBatchUpdateCustomVocabularyItemResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  BatchUpdateCustomVocabularyItemResponse
+newBatchUpdateCustomVocabularyItemResponse
+  pHttpStatus_ =
+    BatchUpdateCustomVocabularyItemResponse'
+      { botId =
+          Prelude.Nothing,
+        botVersion = Prelude.Nothing,
+        errors = Prelude.Nothing,
+        localeId = Prelude.Nothing,
+        resources = Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | The unique identifier of the bot to the batch update response for the
+-- custom vocabulary item.
+batchUpdateCustomVocabularyItemResponse_botId :: Lens.Lens' BatchUpdateCustomVocabularyItemResponse (Prelude.Maybe Prelude.Text)
+batchUpdateCustomVocabularyItemResponse_botId = Lens.lens (\BatchUpdateCustomVocabularyItemResponse' {botId} -> botId) (\s@BatchUpdateCustomVocabularyItemResponse' {} a -> s {botId = a} :: BatchUpdateCustomVocabularyItemResponse)
+
+-- | The bot version of the bot to the batch update response for the custom
+-- vocabulary item.
+batchUpdateCustomVocabularyItemResponse_botVersion :: Lens.Lens' BatchUpdateCustomVocabularyItemResponse (Prelude.Maybe Prelude.Text)
+batchUpdateCustomVocabularyItemResponse_botVersion = Lens.lens (\BatchUpdateCustomVocabularyItemResponse' {botVersion} -> botVersion) (\s@BatchUpdateCustomVocabularyItemResponse' {} a -> s {botVersion = a} :: BatchUpdateCustomVocabularyItemResponse)
+
+-- | The errors of the action to batch update response for the custom
+-- vocabulary item.
+batchUpdateCustomVocabularyItemResponse_errors :: Lens.Lens' BatchUpdateCustomVocabularyItemResponse (Prelude.Maybe [FailedCustomVocabularyItem])
+batchUpdateCustomVocabularyItemResponse_errors = Lens.lens (\BatchUpdateCustomVocabularyItemResponse' {errors} -> errors) (\s@BatchUpdateCustomVocabularyItemResponse' {} a -> s {errors = a} :: BatchUpdateCustomVocabularyItemResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The locale identifier of the bot to the batch update response for the
+-- custom vocabulary item.
+batchUpdateCustomVocabularyItemResponse_localeId :: Lens.Lens' BatchUpdateCustomVocabularyItemResponse (Prelude.Maybe Prelude.Text)
+batchUpdateCustomVocabularyItemResponse_localeId = Lens.lens (\BatchUpdateCustomVocabularyItemResponse' {localeId} -> localeId) (\s@BatchUpdateCustomVocabularyItemResponse' {} a -> s {localeId = a} :: BatchUpdateCustomVocabularyItemResponse)
+
+-- | The resources of the action to batch update response for the custom
+-- vocabulary item.
+batchUpdateCustomVocabularyItemResponse_resources :: Lens.Lens' BatchUpdateCustomVocabularyItemResponse (Prelude.Maybe [CustomVocabularyItem])
+batchUpdateCustomVocabularyItemResponse_resources = Lens.lens (\BatchUpdateCustomVocabularyItemResponse' {resources} -> resources) (\s@BatchUpdateCustomVocabularyItemResponse' {} a -> s {resources = a} :: BatchUpdateCustomVocabularyItemResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+batchUpdateCustomVocabularyItemResponse_httpStatus :: Lens.Lens' BatchUpdateCustomVocabularyItemResponse Prelude.Int
+batchUpdateCustomVocabularyItemResponse_httpStatus = Lens.lens (\BatchUpdateCustomVocabularyItemResponse' {httpStatus} -> httpStatus) (\s@BatchUpdateCustomVocabularyItemResponse' {} a -> s {httpStatus = a} :: BatchUpdateCustomVocabularyItemResponse)
+
+instance
+  Prelude.NFData
+    BatchUpdateCustomVocabularyItemResponse
+  where
+  rnf BatchUpdateCustomVocabularyItemResponse' {..} =
+    Prelude.rnf botId
+      `Prelude.seq` Prelude.rnf botVersion
+      `Prelude.seq` Prelude.rnf errors
+      `Prelude.seq` Prelude.rnf localeId
+      `Prelude.seq` Prelude.rnf resources
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/LexV2Models/BuildBotLocale.hs b/gen/Amazonka/LexV2Models/BuildBotLocale.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/BuildBotLocale.hs
@@ -0,0 +1,289 @@
+{-# 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.LexV2Models.BuildBotLocale
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Builds a bot, its intents, and its slot types into a specific locale. A
+-- bot can be built into multiple locales. At runtime the locale is used to
+-- choose a specific build of the bot.
+module Amazonka.LexV2Models.BuildBotLocale
+  ( -- * Creating a Request
+    BuildBotLocale (..),
+    newBuildBotLocale,
+
+    -- * Request Lenses
+    buildBotLocale_botId,
+    buildBotLocale_botVersion,
+    buildBotLocale_localeId,
+
+    -- * Destructuring the Response
+    BuildBotLocaleResponse (..),
+    newBuildBotLocaleResponse,
+
+    -- * Response Lenses
+    buildBotLocaleResponse_botId,
+    buildBotLocaleResponse_botLocaleStatus,
+    buildBotLocaleResponse_botVersion,
+    buildBotLocaleResponse_lastBuildSubmittedDateTime,
+    buildBotLocaleResponse_localeId,
+    buildBotLocaleResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LexV2Models.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newBuildBotLocale' smart constructor.
+data BuildBotLocale = BuildBotLocale'
+  { -- | The identifier of the bot to build. The identifier is returned in the
+    -- response from the
+    -- <https://docs.aws.amazon.com/lexv2/latest/dg/API_CreateBot.html CreateBot>
+    -- operation.
+    botId :: Prelude.Text,
+    -- | The version of the bot to build. This can only be the draft version of
+    -- the bot.
+    botVersion :: Prelude.Text,
+    -- | The identifier of the language and locale that the bot will be used in.
+    -- The string must match one of the supported locales. All of the intents,
+    -- slot types, and slots used in the bot must have the same locale. For
+    -- more information, see
+    -- <https://docs.aws.amazon.com/lexv2/latest/dg/how-languages.html Supported languages>.
+    localeId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'BuildBotLocale' 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:
+--
+-- 'botId', 'buildBotLocale_botId' - The identifier of the bot to build. The identifier is returned in the
+-- response from the
+-- <https://docs.aws.amazon.com/lexv2/latest/dg/API_CreateBot.html CreateBot>
+-- operation.
+--
+-- 'botVersion', 'buildBotLocale_botVersion' - The version of the bot to build. This can only be the draft version of
+-- the bot.
+--
+-- 'localeId', 'buildBotLocale_localeId' - The identifier of the language and locale that the bot will be used in.
+-- The string must match one of the supported locales. All of the intents,
+-- slot types, and slots used in the bot must have the same locale. For
+-- more information, see
+-- <https://docs.aws.amazon.com/lexv2/latest/dg/how-languages.html Supported languages>.
+newBuildBotLocale ::
+  -- | 'botId'
+  Prelude.Text ->
+  -- | 'botVersion'
+  Prelude.Text ->
+  -- | 'localeId'
+  Prelude.Text ->
+  BuildBotLocale
+newBuildBotLocale pBotId_ pBotVersion_ pLocaleId_ =
+  BuildBotLocale'
+    { botId = pBotId_,
+      botVersion = pBotVersion_,
+      localeId = pLocaleId_
+    }
+
+-- | The identifier of the bot to build. The identifier is returned in the
+-- response from the
+-- <https://docs.aws.amazon.com/lexv2/latest/dg/API_CreateBot.html CreateBot>
+-- operation.
+buildBotLocale_botId :: Lens.Lens' BuildBotLocale Prelude.Text
+buildBotLocale_botId = Lens.lens (\BuildBotLocale' {botId} -> botId) (\s@BuildBotLocale' {} a -> s {botId = a} :: BuildBotLocale)
+
+-- | The version of the bot to build. This can only be the draft version of
+-- the bot.
+buildBotLocale_botVersion :: Lens.Lens' BuildBotLocale Prelude.Text
+buildBotLocale_botVersion = Lens.lens (\BuildBotLocale' {botVersion} -> botVersion) (\s@BuildBotLocale' {} a -> s {botVersion = a} :: BuildBotLocale)
+
+-- | The identifier of the language and locale that the bot will be used in.
+-- The string must match one of the supported locales. All of the intents,
+-- slot types, and slots used in the bot must have the same locale. For
+-- more information, see
+-- <https://docs.aws.amazon.com/lexv2/latest/dg/how-languages.html Supported languages>.
+buildBotLocale_localeId :: Lens.Lens' BuildBotLocale Prelude.Text
+buildBotLocale_localeId = Lens.lens (\BuildBotLocale' {localeId} -> localeId) (\s@BuildBotLocale' {} a -> s {localeId = a} :: BuildBotLocale)
+
+instance Core.AWSRequest BuildBotLocale where
+  type
+    AWSResponse BuildBotLocale =
+      BuildBotLocaleResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          BuildBotLocaleResponse'
+            Prelude.<$> (x Data..?> "botId")
+            Prelude.<*> (x Data..?> "botLocaleStatus")
+            Prelude.<*> (x Data..?> "botVersion")
+            Prelude.<*> (x Data..?> "lastBuildSubmittedDateTime")
+            Prelude.<*> (x Data..?> "localeId")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable BuildBotLocale where
+  hashWithSalt _salt BuildBotLocale' {..} =
+    _salt
+      `Prelude.hashWithSalt` botId
+      `Prelude.hashWithSalt` botVersion
+      `Prelude.hashWithSalt` localeId
+
+instance Prelude.NFData BuildBotLocale where
+  rnf BuildBotLocale' {..} =
+    Prelude.rnf botId
+      `Prelude.seq` Prelude.rnf botVersion
+      `Prelude.seq` Prelude.rnf localeId
+
+instance Data.ToHeaders BuildBotLocale where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON BuildBotLocale where
+  toJSON = Prelude.const (Data.Object Prelude.mempty)
+
+instance Data.ToPath BuildBotLocale where
+  toPath BuildBotLocale' {..} =
+    Prelude.mconcat
+      [ "/bots/",
+        Data.toBS botId,
+        "/botversions/",
+        Data.toBS botVersion,
+        "/botlocales/",
+        Data.toBS localeId,
+        "/"
+      ]
+
+instance Data.ToQuery BuildBotLocale where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newBuildBotLocaleResponse' smart constructor.
+data BuildBotLocaleResponse = BuildBotLocaleResponse'
+  { -- | The identifier of the specified bot.
+    botId :: Prelude.Maybe Prelude.Text,
+    -- | The bot\'s build status. When the status is @ReadyExpressTesting@ you
+    -- can test the bot using the utterances defined for the intents and slot
+    -- types. When the status is @Built@, the bot is ready for use and can be
+    -- tested using any utterance.
+    botLocaleStatus :: Prelude.Maybe BotLocaleStatus,
+    -- | The version of the bot that was built. This is only the draft version of
+    -- the bot.
+    botVersion :: Prelude.Maybe Prelude.Text,
+    -- | A timestamp indicating the date and time that the bot was last built for
+    -- this locale.
+    lastBuildSubmittedDateTime :: Prelude.Maybe Data.POSIX,
+    -- | The language and locale specified of where the bot can be used.
+    localeId :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'BuildBotLocaleResponse' 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:
+--
+-- 'botId', 'buildBotLocaleResponse_botId' - The identifier of the specified bot.
+--
+-- 'botLocaleStatus', 'buildBotLocaleResponse_botLocaleStatus' - The bot\'s build status. When the status is @ReadyExpressTesting@ you
+-- can test the bot using the utterances defined for the intents and slot
+-- types. When the status is @Built@, the bot is ready for use and can be
+-- tested using any utterance.
+--
+-- 'botVersion', 'buildBotLocaleResponse_botVersion' - The version of the bot that was built. This is only the draft version of
+-- the bot.
+--
+-- 'lastBuildSubmittedDateTime', 'buildBotLocaleResponse_lastBuildSubmittedDateTime' - A timestamp indicating the date and time that the bot was last built for
+-- this locale.
+--
+-- 'localeId', 'buildBotLocaleResponse_localeId' - The language and locale specified of where the bot can be used.
+--
+-- 'httpStatus', 'buildBotLocaleResponse_httpStatus' - The response's http status code.
+newBuildBotLocaleResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  BuildBotLocaleResponse
+newBuildBotLocaleResponse pHttpStatus_ =
+  BuildBotLocaleResponse'
+    { botId = Prelude.Nothing,
+      botLocaleStatus = Prelude.Nothing,
+      botVersion = Prelude.Nothing,
+      lastBuildSubmittedDateTime = Prelude.Nothing,
+      localeId = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The identifier of the specified bot.
+buildBotLocaleResponse_botId :: Lens.Lens' BuildBotLocaleResponse (Prelude.Maybe Prelude.Text)
+buildBotLocaleResponse_botId = Lens.lens (\BuildBotLocaleResponse' {botId} -> botId) (\s@BuildBotLocaleResponse' {} a -> s {botId = a} :: BuildBotLocaleResponse)
+
+-- | The bot\'s build status. When the status is @ReadyExpressTesting@ you
+-- can test the bot using the utterances defined for the intents and slot
+-- types. When the status is @Built@, the bot is ready for use and can be
+-- tested using any utterance.
+buildBotLocaleResponse_botLocaleStatus :: Lens.Lens' BuildBotLocaleResponse (Prelude.Maybe BotLocaleStatus)
+buildBotLocaleResponse_botLocaleStatus = Lens.lens (\BuildBotLocaleResponse' {botLocaleStatus} -> botLocaleStatus) (\s@BuildBotLocaleResponse' {} a -> s {botLocaleStatus = a} :: BuildBotLocaleResponse)
+
+-- | The version of the bot that was built. This is only the draft version of
+-- the bot.
+buildBotLocaleResponse_botVersion :: Lens.Lens' BuildBotLocaleResponse (Prelude.Maybe Prelude.Text)
+buildBotLocaleResponse_botVersion = Lens.lens (\BuildBotLocaleResponse' {botVersion} -> botVersion) (\s@BuildBotLocaleResponse' {} a -> s {botVersion = a} :: BuildBotLocaleResponse)
+
+-- | A timestamp indicating the date and time that the bot was last built for
+-- this locale.
+buildBotLocaleResponse_lastBuildSubmittedDateTime :: Lens.Lens' BuildBotLocaleResponse (Prelude.Maybe Prelude.UTCTime)
+buildBotLocaleResponse_lastBuildSubmittedDateTime = Lens.lens (\BuildBotLocaleResponse' {lastBuildSubmittedDateTime} -> lastBuildSubmittedDateTime) (\s@BuildBotLocaleResponse' {} a -> s {lastBuildSubmittedDateTime = a} :: BuildBotLocaleResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The language and locale specified of where the bot can be used.
+buildBotLocaleResponse_localeId :: Lens.Lens' BuildBotLocaleResponse (Prelude.Maybe Prelude.Text)
+buildBotLocaleResponse_localeId = Lens.lens (\BuildBotLocaleResponse' {localeId} -> localeId) (\s@BuildBotLocaleResponse' {} a -> s {localeId = a} :: BuildBotLocaleResponse)
+
+-- | The response's http status code.
+buildBotLocaleResponse_httpStatus :: Lens.Lens' BuildBotLocaleResponse Prelude.Int
+buildBotLocaleResponse_httpStatus = Lens.lens (\BuildBotLocaleResponse' {httpStatus} -> httpStatus) (\s@BuildBotLocaleResponse' {} a -> s {httpStatus = a} :: BuildBotLocaleResponse)
+
+instance Prelude.NFData BuildBotLocaleResponse where
+  rnf BuildBotLocaleResponse' {..} =
+    Prelude.rnf botId
+      `Prelude.seq` Prelude.rnf botLocaleStatus
+      `Prelude.seq` Prelude.rnf botVersion
+      `Prelude.seq` Prelude.rnf lastBuildSubmittedDateTime
+      `Prelude.seq` Prelude.rnf localeId
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/LexV2Models/CreateBot.hs b/gen/Amazonka/LexV2Models/CreateBot.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/CreateBot.hs
@@ -0,0 +1,429 @@
+{-# 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.LexV2Models.CreateBot
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates an Amazon Lex conversational bot.
+module Amazonka.LexV2Models.CreateBot
+  ( -- * Creating a Request
+    CreateBot (..),
+    newCreateBot,
+
+    -- * Request Lenses
+    createBot_botTags,
+    createBot_description,
+    createBot_testBotAliasTags,
+    createBot_botName,
+    createBot_roleArn,
+    createBot_dataPrivacy,
+    createBot_idleSessionTTLInSeconds,
+
+    -- * Destructuring the Response
+    CreateBotResponse (..),
+    newCreateBotResponse,
+
+    -- * Response Lenses
+    createBotResponse_botId,
+    createBotResponse_botName,
+    createBotResponse_botStatus,
+    createBotResponse_botTags,
+    createBotResponse_creationDateTime,
+    createBotResponse_dataPrivacy,
+    createBotResponse_description,
+    createBotResponse_idleSessionTTLInSeconds,
+    createBotResponse_roleArn,
+    createBotResponse_testBotAliasTags,
+    createBotResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LexV2Models.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateBot' smart constructor.
+data CreateBot = CreateBot'
+  { -- | A list of tags to add to the bot. You can only add tags when you create
+    -- a bot. You can\'t use the @UpdateBot@ operation to update tags. To
+    -- update tags, use the @TagResource@ operation.
+    botTags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | A description of the bot. It appears in lists to help you identify a
+    -- particular bot.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | A list of tags to add to the test alias for a bot. You can only add tags
+    -- when you create a bot. You can\'t use the @UpdateAlias@ operation to
+    -- update tags. To update tags on the test alias, use the @TagResource@
+    -- operation.
+    testBotAliasTags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The name of the bot. The bot name must be unique in the account that
+    -- creates the bot.
+    botName :: Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of an IAM role that has permission to
+    -- access the bot.
+    roleArn :: Prelude.Text,
+    -- | Provides information on additional privacy protections Amazon Lex should
+    -- use with the bot\'s data.
+    dataPrivacy :: DataPrivacy,
+    -- | The time, in seconds, that Amazon Lex should keep information about a
+    -- user\'s conversation with the bot.
+    --
+    -- A user interaction remains active for the amount of time specified. If
+    -- no conversation occurs during this time, the session expires and Amazon
+    -- Lex deletes any data provided before the timeout.
+    --
+    -- You can specify between 60 (1 minute) and 86,400 (24 hours) seconds.
+    idleSessionTTLInSeconds :: Prelude.Natural
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateBot' 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:
+--
+-- 'botTags', 'createBot_botTags' - A list of tags to add to the bot. You can only add tags when you create
+-- a bot. You can\'t use the @UpdateBot@ operation to update tags. To
+-- update tags, use the @TagResource@ operation.
+--
+-- 'description', 'createBot_description' - A description of the bot. It appears in lists to help you identify a
+-- particular bot.
+--
+-- 'testBotAliasTags', 'createBot_testBotAliasTags' - A list of tags to add to the test alias for a bot. You can only add tags
+-- when you create a bot. You can\'t use the @UpdateAlias@ operation to
+-- update tags. To update tags on the test alias, use the @TagResource@
+-- operation.
+--
+-- 'botName', 'createBot_botName' - The name of the bot. The bot name must be unique in the account that
+-- creates the bot.
+--
+-- 'roleArn', 'createBot_roleArn' - The Amazon Resource Name (ARN) of an IAM role that has permission to
+-- access the bot.
+--
+-- 'dataPrivacy', 'createBot_dataPrivacy' - Provides information on additional privacy protections Amazon Lex should
+-- use with the bot\'s data.
+--
+-- 'idleSessionTTLInSeconds', 'createBot_idleSessionTTLInSeconds' - The time, in seconds, that Amazon Lex should keep information about a
+-- user\'s conversation with the bot.
+--
+-- A user interaction remains active for the amount of time specified. If
+-- no conversation occurs during this time, the session expires and Amazon
+-- Lex deletes any data provided before the timeout.
+--
+-- You can specify between 60 (1 minute) and 86,400 (24 hours) seconds.
+newCreateBot ::
+  -- | 'botName'
+  Prelude.Text ->
+  -- | 'roleArn'
+  Prelude.Text ->
+  -- | 'dataPrivacy'
+  DataPrivacy ->
+  -- | 'idleSessionTTLInSeconds'
+  Prelude.Natural ->
+  CreateBot
+newCreateBot
+  pBotName_
+  pRoleArn_
+  pDataPrivacy_
+  pIdleSessionTTLInSeconds_ =
+    CreateBot'
+      { botTags = Prelude.Nothing,
+        description = Prelude.Nothing,
+        testBotAliasTags = Prelude.Nothing,
+        botName = pBotName_,
+        roleArn = pRoleArn_,
+        dataPrivacy = pDataPrivacy_,
+        idleSessionTTLInSeconds = pIdleSessionTTLInSeconds_
+      }
+
+-- | A list of tags to add to the bot. You can only add tags when you create
+-- a bot. You can\'t use the @UpdateBot@ operation to update tags. To
+-- update tags, use the @TagResource@ operation.
+createBot_botTags :: Lens.Lens' CreateBot (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+createBot_botTags = Lens.lens (\CreateBot' {botTags} -> botTags) (\s@CreateBot' {} a -> s {botTags = a} :: CreateBot) Prelude.. Lens.mapping Lens.coerced
+
+-- | A description of the bot. It appears in lists to help you identify a
+-- particular bot.
+createBot_description :: Lens.Lens' CreateBot (Prelude.Maybe Prelude.Text)
+createBot_description = Lens.lens (\CreateBot' {description} -> description) (\s@CreateBot' {} a -> s {description = a} :: CreateBot)
+
+-- | A list of tags to add to the test alias for a bot. You can only add tags
+-- when you create a bot. You can\'t use the @UpdateAlias@ operation to
+-- update tags. To update tags on the test alias, use the @TagResource@
+-- operation.
+createBot_testBotAliasTags :: Lens.Lens' CreateBot (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+createBot_testBotAliasTags = Lens.lens (\CreateBot' {testBotAliasTags} -> testBotAliasTags) (\s@CreateBot' {} a -> s {testBotAliasTags = a} :: CreateBot) Prelude.. Lens.mapping Lens.coerced
+
+-- | The name of the bot. The bot name must be unique in the account that
+-- creates the bot.
+createBot_botName :: Lens.Lens' CreateBot Prelude.Text
+createBot_botName = Lens.lens (\CreateBot' {botName} -> botName) (\s@CreateBot' {} a -> s {botName = a} :: CreateBot)
+
+-- | The Amazon Resource Name (ARN) of an IAM role that has permission to
+-- access the bot.
+createBot_roleArn :: Lens.Lens' CreateBot Prelude.Text
+createBot_roleArn = Lens.lens (\CreateBot' {roleArn} -> roleArn) (\s@CreateBot' {} a -> s {roleArn = a} :: CreateBot)
+
+-- | Provides information on additional privacy protections Amazon Lex should
+-- use with the bot\'s data.
+createBot_dataPrivacy :: Lens.Lens' CreateBot DataPrivacy
+createBot_dataPrivacy = Lens.lens (\CreateBot' {dataPrivacy} -> dataPrivacy) (\s@CreateBot' {} a -> s {dataPrivacy = a} :: CreateBot)
+
+-- | The time, in seconds, that Amazon Lex should keep information about a
+-- user\'s conversation with the bot.
+--
+-- A user interaction remains active for the amount of time specified. If
+-- no conversation occurs during this time, the session expires and Amazon
+-- Lex deletes any data provided before the timeout.
+--
+-- You can specify between 60 (1 minute) and 86,400 (24 hours) seconds.
+createBot_idleSessionTTLInSeconds :: Lens.Lens' CreateBot Prelude.Natural
+createBot_idleSessionTTLInSeconds = Lens.lens (\CreateBot' {idleSessionTTLInSeconds} -> idleSessionTTLInSeconds) (\s@CreateBot' {} a -> s {idleSessionTTLInSeconds = a} :: CreateBot)
+
+instance Core.AWSRequest CreateBot where
+  type AWSResponse CreateBot = CreateBotResponse
+  request overrides =
+    Request.putJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateBotResponse'
+            Prelude.<$> (x Data..?> "botId")
+            Prelude.<*> (x Data..?> "botName")
+            Prelude.<*> (x Data..?> "botStatus")
+            Prelude.<*> (x Data..?> "botTags" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "creationDateTime")
+            Prelude.<*> (x Data..?> "dataPrivacy")
+            Prelude.<*> (x Data..?> "description")
+            Prelude.<*> (x Data..?> "idleSessionTTLInSeconds")
+            Prelude.<*> (x Data..?> "roleArn")
+            Prelude.<*> ( x
+                            Data..?> "testBotAliasTags"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateBot where
+  hashWithSalt _salt CreateBot' {..} =
+    _salt
+      `Prelude.hashWithSalt` botTags
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` testBotAliasTags
+      `Prelude.hashWithSalt` botName
+      `Prelude.hashWithSalt` roleArn
+      `Prelude.hashWithSalt` dataPrivacy
+      `Prelude.hashWithSalt` idleSessionTTLInSeconds
+
+instance Prelude.NFData CreateBot where
+  rnf CreateBot' {..} =
+    Prelude.rnf botTags
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf testBotAliasTags
+      `Prelude.seq` Prelude.rnf botName
+      `Prelude.seq` Prelude.rnf roleArn
+      `Prelude.seq` Prelude.rnf dataPrivacy
+      `Prelude.seq` Prelude.rnf idleSessionTTLInSeconds
+
+instance Data.ToHeaders CreateBot where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateBot where
+  toJSON CreateBot' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("botTags" Data..=) Prelude.<$> botTags,
+            ("description" Data..=) Prelude.<$> description,
+            ("testBotAliasTags" Data..=)
+              Prelude.<$> testBotAliasTags,
+            Prelude.Just ("botName" Data..= botName),
+            Prelude.Just ("roleArn" Data..= roleArn),
+            Prelude.Just ("dataPrivacy" Data..= dataPrivacy),
+            Prelude.Just
+              ( "idleSessionTTLInSeconds"
+                  Data..= idleSessionTTLInSeconds
+              )
+          ]
+      )
+
+instance Data.ToPath CreateBot where
+  toPath = Prelude.const "/bots/"
+
+instance Data.ToQuery CreateBot where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateBotResponse' smart constructor.
+data CreateBotResponse = CreateBotResponse'
+  { -- | A unique identifier for a particular bot. You use this to identify the
+    -- bot when you call other Amazon Lex API operations.
+    botId :: Prelude.Maybe Prelude.Text,
+    -- | The name specified for the bot.
+    botName :: Prelude.Maybe Prelude.Text,
+    -- | Shows the current status of the bot. The bot is first in the @Creating@
+    -- status. Once the bot is read for use, it changes to the @Available@
+    -- status. After the bot is created, you can use the @Draft@ version of the
+    -- bot.
+    botStatus :: Prelude.Maybe BotStatus,
+    -- | A list of tags associated with the bot.
+    botTags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | A timestamp indicating the date and time that the bot was created.
+    creationDateTime :: Prelude.Maybe Data.POSIX,
+    -- | The data privacy settings specified for the bot.
+    dataPrivacy :: Prelude.Maybe DataPrivacy,
+    -- | The description specified for the bot.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The session idle time specified for the bot.
+    idleSessionTTLInSeconds :: Prelude.Maybe Prelude.Natural,
+    -- | The IAM role specified for the bot.
+    roleArn :: Prelude.Maybe Prelude.Text,
+    -- | A list of tags associated with the test alias for the bot.
+    testBotAliasTags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateBotResponse' 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:
+--
+-- 'botId', 'createBotResponse_botId' - A unique identifier for a particular bot. You use this to identify the
+-- bot when you call other Amazon Lex API operations.
+--
+-- 'botName', 'createBotResponse_botName' - The name specified for the bot.
+--
+-- 'botStatus', 'createBotResponse_botStatus' - Shows the current status of the bot. The bot is first in the @Creating@
+-- status. Once the bot is read for use, it changes to the @Available@
+-- status. After the bot is created, you can use the @Draft@ version of the
+-- bot.
+--
+-- 'botTags', 'createBotResponse_botTags' - A list of tags associated with the bot.
+--
+-- 'creationDateTime', 'createBotResponse_creationDateTime' - A timestamp indicating the date and time that the bot was created.
+--
+-- 'dataPrivacy', 'createBotResponse_dataPrivacy' - The data privacy settings specified for the bot.
+--
+-- 'description', 'createBotResponse_description' - The description specified for the bot.
+--
+-- 'idleSessionTTLInSeconds', 'createBotResponse_idleSessionTTLInSeconds' - The session idle time specified for the bot.
+--
+-- 'roleArn', 'createBotResponse_roleArn' - The IAM role specified for the bot.
+--
+-- 'testBotAliasTags', 'createBotResponse_testBotAliasTags' - A list of tags associated with the test alias for the bot.
+--
+-- 'httpStatus', 'createBotResponse_httpStatus' - The response's http status code.
+newCreateBotResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateBotResponse
+newCreateBotResponse pHttpStatus_ =
+  CreateBotResponse'
+    { botId = Prelude.Nothing,
+      botName = Prelude.Nothing,
+      botStatus = Prelude.Nothing,
+      botTags = Prelude.Nothing,
+      creationDateTime = Prelude.Nothing,
+      dataPrivacy = Prelude.Nothing,
+      description = Prelude.Nothing,
+      idleSessionTTLInSeconds = Prelude.Nothing,
+      roleArn = Prelude.Nothing,
+      testBotAliasTags = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | A unique identifier for a particular bot. You use this to identify the
+-- bot when you call other Amazon Lex API operations.
+createBotResponse_botId :: Lens.Lens' CreateBotResponse (Prelude.Maybe Prelude.Text)
+createBotResponse_botId = Lens.lens (\CreateBotResponse' {botId} -> botId) (\s@CreateBotResponse' {} a -> s {botId = a} :: CreateBotResponse)
+
+-- | The name specified for the bot.
+createBotResponse_botName :: Lens.Lens' CreateBotResponse (Prelude.Maybe Prelude.Text)
+createBotResponse_botName = Lens.lens (\CreateBotResponse' {botName} -> botName) (\s@CreateBotResponse' {} a -> s {botName = a} :: CreateBotResponse)
+
+-- | Shows the current status of the bot. The bot is first in the @Creating@
+-- status. Once the bot is read for use, it changes to the @Available@
+-- status. After the bot is created, you can use the @Draft@ version of the
+-- bot.
+createBotResponse_botStatus :: Lens.Lens' CreateBotResponse (Prelude.Maybe BotStatus)
+createBotResponse_botStatus = Lens.lens (\CreateBotResponse' {botStatus} -> botStatus) (\s@CreateBotResponse' {} a -> s {botStatus = a} :: CreateBotResponse)
+
+-- | A list of tags associated with the bot.
+createBotResponse_botTags :: Lens.Lens' CreateBotResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+createBotResponse_botTags = Lens.lens (\CreateBotResponse' {botTags} -> botTags) (\s@CreateBotResponse' {} a -> s {botTags = a} :: CreateBotResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | A timestamp indicating the date and time that the bot was created.
+createBotResponse_creationDateTime :: Lens.Lens' CreateBotResponse (Prelude.Maybe Prelude.UTCTime)
+createBotResponse_creationDateTime = Lens.lens (\CreateBotResponse' {creationDateTime} -> creationDateTime) (\s@CreateBotResponse' {} a -> s {creationDateTime = a} :: CreateBotResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The data privacy settings specified for the bot.
+createBotResponse_dataPrivacy :: Lens.Lens' CreateBotResponse (Prelude.Maybe DataPrivacy)
+createBotResponse_dataPrivacy = Lens.lens (\CreateBotResponse' {dataPrivacy} -> dataPrivacy) (\s@CreateBotResponse' {} a -> s {dataPrivacy = a} :: CreateBotResponse)
+
+-- | The description specified for the bot.
+createBotResponse_description :: Lens.Lens' CreateBotResponse (Prelude.Maybe Prelude.Text)
+createBotResponse_description = Lens.lens (\CreateBotResponse' {description} -> description) (\s@CreateBotResponse' {} a -> s {description = a} :: CreateBotResponse)
+
+-- | The session idle time specified for the bot.
+createBotResponse_idleSessionTTLInSeconds :: Lens.Lens' CreateBotResponse (Prelude.Maybe Prelude.Natural)
+createBotResponse_idleSessionTTLInSeconds = Lens.lens (\CreateBotResponse' {idleSessionTTLInSeconds} -> idleSessionTTLInSeconds) (\s@CreateBotResponse' {} a -> s {idleSessionTTLInSeconds = a} :: CreateBotResponse)
+
+-- | The IAM role specified for the bot.
+createBotResponse_roleArn :: Lens.Lens' CreateBotResponse (Prelude.Maybe Prelude.Text)
+createBotResponse_roleArn = Lens.lens (\CreateBotResponse' {roleArn} -> roleArn) (\s@CreateBotResponse' {} a -> s {roleArn = a} :: CreateBotResponse)
+
+-- | A list of tags associated with the test alias for the bot.
+createBotResponse_testBotAliasTags :: Lens.Lens' CreateBotResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+createBotResponse_testBotAliasTags = Lens.lens (\CreateBotResponse' {testBotAliasTags} -> testBotAliasTags) (\s@CreateBotResponse' {} a -> s {testBotAliasTags = a} :: CreateBotResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+createBotResponse_httpStatus :: Lens.Lens' CreateBotResponse Prelude.Int
+createBotResponse_httpStatus = Lens.lens (\CreateBotResponse' {httpStatus} -> httpStatus) (\s@CreateBotResponse' {} a -> s {httpStatus = a} :: CreateBotResponse)
+
+instance Prelude.NFData CreateBotResponse where
+  rnf CreateBotResponse' {..} =
+    Prelude.rnf botId
+      `Prelude.seq` Prelude.rnf botName
+      `Prelude.seq` Prelude.rnf botStatus
+      `Prelude.seq` Prelude.rnf botTags
+      `Prelude.seq` Prelude.rnf creationDateTime
+      `Prelude.seq` Prelude.rnf dataPrivacy
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf idleSessionTTLInSeconds
+      `Prelude.seq` Prelude.rnf roleArn
+      `Prelude.seq` Prelude.rnf testBotAliasTags
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/LexV2Models/CreateBotAlias.hs b/gen/Amazonka/LexV2Models/CreateBotAlias.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/CreateBotAlias.hs
@@ -0,0 +1,438 @@
+{-# 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.LexV2Models.CreateBotAlias
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates an alias for the specified version of a bot. Use an alias to
+-- enable you to change the version of a bot without updating applications
+-- that use the bot.
+--
+-- For example, you can create an alias called \"PROD\" that your
+-- applications use to call the Amazon Lex bot.
+module Amazonka.LexV2Models.CreateBotAlias
+  ( -- * Creating a Request
+    CreateBotAlias (..),
+    newCreateBotAlias,
+
+    -- * Request Lenses
+    createBotAlias_botAliasLocaleSettings,
+    createBotAlias_botVersion,
+    createBotAlias_conversationLogSettings,
+    createBotAlias_description,
+    createBotAlias_sentimentAnalysisSettings,
+    createBotAlias_tags,
+    createBotAlias_botAliasName,
+    createBotAlias_botId,
+
+    -- * Destructuring the Response
+    CreateBotAliasResponse (..),
+    newCreateBotAliasResponse,
+
+    -- * Response Lenses
+    createBotAliasResponse_botAliasId,
+    createBotAliasResponse_botAliasLocaleSettings,
+    createBotAliasResponse_botAliasName,
+    createBotAliasResponse_botAliasStatus,
+    createBotAliasResponse_botId,
+    createBotAliasResponse_botVersion,
+    createBotAliasResponse_conversationLogSettings,
+    createBotAliasResponse_creationDateTime,
+    createBotAliasResponse_description,
+    createBotAliasResponse_sentimentAnalysisSettings,
+    createBotAliasResponse_tags,
+    createBotAliasResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LexV2Models.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateBotAlias' smart constructor.
+data CreateBotAlias = CreateBotAlias'
+  { -- | Maps configuration information to a specific locale. You can use this
+    -- parameter to specify a specific Lambda function to run different
+    -- functions in different locales.
+    botAliasLocaleSettings :: Prelude.Maybe (Prelude.HashMap Prelude.Text BotAliasLocaleSettings),
+    -- | The version of the bot that this alias points to. You can use the
+    -- <https://docs.aws.amazon.com/lexv2/latest/dg/API_UpdateBotAlias.html UpdateBotAlias>
+    -- operation to change the bot version associated with the alias.
+    botVersion :: Prelude.Maybe Prelude.Text,
+    -- | Specifies whether Amazon Lex logs text and audio for a conversation with
+    -- the bot. When you enable conversation logs, text logs store text input,
+    -- transcripts of audio input, and associated metadata in Amazon CloudWatch
+    -- Logs. Audio logs store audio input in Amazon S3.
+    conversationLogSettings :: Prelude.Maybe ConversationLogSettings,
+    -- | A description of the alias. Use this description to help identify the
+    -- alias.
+    description :: Prelude.Maybe Prelude.Text,
+    sentimentAnalysisSettings :: Prelude.Maybe SentimentAnalysisSettings,
+    -- | A list of tags to add to the bot alias. You can only add tags when you
+    -- create an alias, you can\'t use the @UpdateBotAlias@ operation to update
+    -- the tags on a bot alias. To update tags, use the @TagResource@
+    -- operation.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The alias to create. The name must be unique for the bot.
+    botAliasName :: Prelude.Text,
+    -- | The unique identifier of the bot that the alias applies to.
+    botId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateBotAlias' 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:
+--
+-- 'botAliasLocaleSettings', 'createBotAlias_botAliasLocaleSettings' - Maps configuration information to a specific locale. You can use this
+-- parameter to specify a specific Lambda function to run different
+-- functions in different locales.
+--
+-- 'botVersion', 'createBotAlias_botVersion' - The version of the bot that this alias points to. You can use the
+-- <https://docs.aws.amazon.com/lexv2/latest/dg/API_UpdateBotAlias.html UpdateBotAlias>
+-- operation to change the bot version associated with the alias.
+--
+-- 'conversationLogSettings', 'createBotAlias_conversationLogSettings' - Specifies whether Amazon Lex logs text and audio for a conversation with
+-- the bot. When you enable conversation logs, text logs store text input,
+-- transcripts of audio input, and associated metadata in Amazon CloudWatch
+-- Logs. Audio logs store audio input in Amazon S3.
+--
+-- 'description', 'createBotAlias_description' - A description of the alias. Use this description to help identify the
+-- alias.
+--
+-- 'sentimentAnalysisSettings', 'createBotAlias_sentimentAnalysisSettings' - Undocumented member.
+--
+-- 'tags', 'createBotAlias_tags' - A list of tags to add to the bot alias. You can only add tags when you
+-- create an alias, you can\'t use the @UpdateBotAlias@ operation to update
+-- the tags on a bot alias. To update tags, use the @TagResource@
+-- operation.
+--
+-- 'botAliasName', 'createBotAlias_botAliasName' - The alias to create. The name must be unique for the bot.
+--
+-- 'botId', 'createBotAlias_botId' - The unique identifier of the bot that the alias applies to.
+newCreateBotAlias ::
+  -- | 'botAliasName'
+  Prelude.Text ->
+  -- | 'botId'
+  Prelude.Text ->
+  CreateBotAlias
+newCreateBotAlias pBotAliasName_ pBotId_ =
+  CreateBotAlias'
+    { botAliasLocaleSettings =
+        Prelude.Nothing,
+      botVersion = Prelude.Nothing,
+      conversationLogSettings = Prelude.Nothing,
+      description = Prelude.Nothing,
+      sentimentAnalysisSettings = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      botAliasName = pBotAliasName_,
+      botId = pBotId_
+    }
+
+-- | Maps configuration information to a specific locale. You can use this
+-- parameter to specify a specific Lambda function to run different
+-- functions in different locales.
+createBotAlias_botAliasLocaleSettings :: Lens.Lens' CreateBotAlias (Prelude.Maybe (Prelude.HashMap Prelude.Text BotAliasLocaleSettings))
+createBotAlias_botAliasLocaleSettings = Lens.lens (\CreateBotAlias' {botAliasLocaleSettings} -> botAliasLocaleSettings) (\s@CreateBotAlias' {} a -> s {botAliasLocaleSettings = a} :: CreateBotAlias) Prelude.. Lens.mapping Lens.coerced
+
+-- | The version of the bot that this alias points to. You can use the
+-- <https://docs.aws.amazon.com/lexv2/latest/dg/API_UpdateBotAlias.html UpdateBotAlias>
+-- operation to change the bot version associated with the alias.
+createBotAlias_botVersion :: Lens.Lens' CreateBotAlias (Prelude.Maybe Prelude.Text)
+createBotAlias_botVersion = Lens.lens (\CreateBotAlias' {botVersion} -> botVersion) (\s@CreateBotAlias' {} a -> s {botVersion = a} :: CreateBotAlias)
+
+-- | Specifies whether Amazon Lex logs text and audio for a conversation with
+-- the bot. When you enable conversation logs, text logs store text input,
+-- transcripts of audio input, and associated metadata in Amazon CloudWatch
+-- Logs. Audio logs store audio input in Amazon S3.
+createBotAlias_conversationLogSettings :: Lens.Lens' CreateBotAlias (Prelude.Maybe ConversationLogSettings)
+createBotAlias_conversationLogSettings = Lens.lens (\CreateBotAlias' {conversationLogSettings} -> conversationLogSettings) (\s@CreateBotAlias' {} a -> s {conversationLogSettings = a} :: CreateBotAlias)
+
+-- | A description of the alias. Use this description to help identify the
+-- alias.
+createBotAlias_description :: Lens.Lens' CreateBotAlias (Prelude.Maybe Prelude.Text)
+createBotAlias_description = Lens.lens (\CreateBotAlias' {description} -> description) (\s@CreateBotAlias' {} a -> s {description = a} :: CreateBotAlias)
+
+-- | Undocumented member.
+createBotAlias_sentimentAnalysisSettings :: Lens.Lens' CreateBotAlias (Prelude.Maybe SentimentAnalysisSettings)
+createBotAlias_sentimentAnalysisSettings = Lens.lens (\CreateBotAlias' {sentimentAnalysisSettings} -> sentimentAnalysisSettings) (\s@CreateBotAlias' {} a -> s {sentimentAnalysisSettings = a} :: CreateBotAlias)
+
+-- | A list of tags to add to the bot alias. You can only add tags when you
+-- create an alias, you can\'t use the @UpdateBotAlias@ operation to update
+-- the tags on a bot alias. To update tags, use the @TagResource@
+-- operation.
+createBotAlias_tags :: Lens.Lens' CreateBotAlias (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+createBotAlias_tags = Lens.lens (\CreateBotAlias' {tags} -> tags) (\s@CreateBotAlias' {} a -> s {tags = a} :: CreateBotAlias) Prelude.. Lens.mapping Lens.coerced
+
+-- | The alias to create. The name must be unique for the bot.
+createBotAlias_botAliasName :: Lens.Lens' CreateBotAlias Prelude.Text
+createBotAlias_botAliasName = Lens.lens (\CreateBotAlias' {botAliasName} -> botAliasName) (\s@CreateBotAlias' {} a -> s {botAliasName = a} :: CreateBotAlias)
+
+-- | The unique identifier of the bot that the alias applies to.
+createBotAlias_botId :: Lens.Lens' CreateBotAlias Prelude.Text
+createBotAlias_botId = Lens.lens (\CreateBotAlias' {botId} -> botId) (\s@CreateBotAlias' {} a -> s {botId = a} :: CreateBotAlias)
+
+instance Core.AWSRequest CreateBotAlias where
+  type
+    AWSResponse CreateBotAlias =
+      CreateBotAliasResponse
+  request overrides =
+    Request.putJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateBotAliasResponse'
+            Prelude.<$> (x Data..?> "botAliasId")
+            Prelude.<*> ( x
+                            Data..?> "botAliasLocaleSettings"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (x Data..?> "botAliasName")
+            Prelude.<*> (x Data..?> "botAliasStatus")
+            Prelude.<*> (x Data..?> "botId")
+            Prelude.<*> (x Data..?> "botVersion")
+            Prelude.<*> (x Data..?> "conversationLogSettings")
+            Prelude.<*> (x Data..?> "creationDateTime")
+            Prelude.<*> (x Data..?> "description")
+            Prelude.<*> (x Data..?> "sentimentAnalysisSettings")
+            Prelude.<*> (x Data..?> "tags" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateBotAlias where
+  hashWithSalt _salt CreateBotAlias' {..} =
+    _salt
+      `Prelude.hashWithSalt` botAliasLocaleSettings
+      `Prelude.hashWithSalt` botVersion
+      `Prelude.hashWithSalt` conversationLogSettings
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` sentimentAnalysisSettings
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` botAliasName
+      `Prelude.hashWithSalt` botId
+
+instance Prelude.NFData CreateBotAlias where
+  rnf CreateBotAlias' {..} =
+    Prelude.rnf botAliasLocaleSettings
+      `Prelude.seq` Prelude.rnf botVersion
+      `Prelude.seq` Prelude.rnf conversationLogSettings
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf sentimentAnalysisSettings
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf botAliasName
+      `Prelude.seq` Prelude.rnf botId
+
+instance Data.ToHeaders CreateBotAlias where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateBotAlias where
+  toJSON CreateBotAlias' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("botAliasLocaleSettings" Data..=)
+              Prelude.<$> botAliasLocaleSettings,
+            ("botVersion" Data..=) Prelude.<$> botVersion,
+            ("conversationLogSettings" Data..=)
+              Prelude.<$> conversationLogSettings,
+            ("description" Data..=) Prelude.<$> description,
+            ("sentimentAnalysisSettings" Data..=)
+              Prelude.<$> sentimentAnalysisSettings,
+            ("tags" Data..=) Prelude.<$> tags,
+            Prelude.Just ("botAliasName" Data..= botAliasName)
+          ]
+      )
+
+instance Data.ToPath CreateBotAlias where
+  toPath CreateBotAlias' {..} =
+    Prelude.mconcat
+      ["/bots/", Data.toBS botId, "/botaliases/"]
+
+instance Data.ToQuery CreateBotAlias where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateBotAliasResponse' smart constructor.
+data CreateBotAliasResponse = CreateBotAliasResponse'
+  { -- | The unique identifier of the bot alias.
+    botAliasId :: Prelude.Maybe Prelude.Text,
+    -- | Configuration information for a specific locale.
+    botAliasLocaleSettings :: Prelude.Maybe (Prelude.HashMap Prelude.Text BotAliasLocaleSettings),
+    -- | The name specified for the bot alias.
+    botAliasName :: Prelude.Maybe Prelude.Text,
+    -- | The current status of the alias. The alias is first put into the
+    -- @Creating@ state. When the alias is ready to be used, it is put into the
+    -- @Available@ state. You can use the @DescribeBotAlias@ operation to get
+    -- the current state of an alias.
+    botAliasStatus :: Prelude.Maybe BotAliasStatus,
+    -- | The unique identifier of the bot that this alias applies to.
+    botId :: Prelude.Maybe Prelude.Text,
+    -- | The version of the bot associated with this alias.
+    botVersion :: Prelude.Maybe Prelude.Text,
+    -- | The conversation log settings specified for the alias.
+    conversationLogSettings :: Prelude.Maybe ConversationLogSettings,
+    -- | A Unix timestamp indicating the date and time that the bot alias was
+    -- created.
+    creationDateTime :: Prelude.Maybe Data.POSIX,
+    -- | The description specified for the bot alias.
+    description :: Prelude.Maybe Prelude.Text,
+    sentimentAnalysisSettings :: Prelude.Maybe SentimentAnalysisSettings,
+    -- | A list of tags associated with the bot alias.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateBotAliasResponse' 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:
+--
+-- 'botAliasId', 'createBotAliasResponse_botAliasId' - The unique identifier of the bot alias.
+--
+-- 'botAliasLocaleSettings', 'createBotAliasResponse_botAliasLocaleSettings' - Configuration information for a specific locale.
+--
+-- 'botAliasName', 'createBotAliasResponse_botAliasName' - The name specified for the bot alias.
+--
+-- 'botAliasStatus', 'createBotAliasResponse_botAliasStatus' - The current status of the alias. The alias is first put into the
+-- @Creating@ state. When the alias is ready to be used, it is put into the
+-- @Available@ state. You can use the @DescribeBotAlias@ operation to get
+-- the current state of an alias.
+--
+-- 'botId', 'createBotAliasResponse_botId' - The unique identifier of the bot that this alias applies to.
+--
+-- 'botVersion', 'createBotAliasResponse_botVersion' - The version of the bot associated with this alias.
+--
+-- 'conversationLogSettings', 'createBotAliasResponse_conversationLogSettings' - The conversation log settings specified for the alias.
+--
+-- 'creationDateTime', 'createBotAliasResponse_creationDateTime' - A Unix timestamp indicating the date and time that the bot alias was
+-- created.
+--
+-- 'description', 'createBotAliasResponse_description' - The description specified for the bot alias.
+--
+-- 'sentimentAnalysisSettings', 'createBotAliasResponse_sentimentAnalysisSettings' - Undocumented member.
+--
+-- 'tags', 'createBotAliasResponse_tags' - A list of tags associated with the bot alias.
+--
+-- 'httpStatus', 'createBotAliasResponse_httpStatus' - The response's http status code.
+newCreateBotAliasResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateBotAliasResponse
+newCreateBotAliasResponse pHttpStatus_ =
+  CreateBotAliasResponse'
+    { botAliasId =
+        Prelude.Nothing,
+      botAliasLocaleSettings = Prelude.Nothing,
+      botAliasName = Prelude.Nothing,
+      botAliasStatus = Prelude.Nothing,
+      botId = Prelude.Nothing,
+      botVersion = Prelude.Nothing,
+      conversationLogSettings = Prelude.Nothing,
+      creationDateTime = Prelude.Nothing,
+      description = Prelude.Nothing,
+      sentimentAnalysisSettings = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The unique identifier of the bot alias.
+createBotAliasResponse_botAliasId :: Lens.Lens' CreateBotAliasResponse (Prelude.Maybe Prelude.Text)
+createBotAliasResponse_botAliasId = Lens.lens (\CreateBotAliasResponse' {botAliasId} -> botAliasId) (\s@CreateBotAliasResponse' {} a -> s {botAliasId = a} :: CreateBotAliasResponse)
+
+-- | Configuration information for a specific locale.
+createBotAliasResponse_botAliasLocaleSettings :: Lens.Lens' CreateBotAliasResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text BotAliasLocaleSettings))
+createBotAliasResponse_botAliasLocaleSettings = Lens.lens (\CreateBotAliasResponse' {botAliasLocaleSettings} -> botAliasLocaleSettings) (\s@CreateBotAliasResponse' {} a -> s {botAliasLocaleSettings = a} :: CreateBotAliasResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The name specified for the bot alias.
+createBotAliasResponse_botAliasName :: Lens.Lens' CreateBotAliasResponse (Prelude.Maybe Prelude.Text)
+createBotAliasResponse_botAliasName = Lens.lens (\CreateBotAliasResponse' {botAliasName} -> botAliasName) (\s@CreateBotAliasResponse' {} a -> s {botAliasName = a} :: CreateBotAliasResponse)
+
+-- | The current status of the alias. The alias is first put into the
+-- @Creating@ state. When the alias is ready to be used, it is put into the
+-- @Available@ state. You can use the @DescribeBotAlias@ operation to get
+-- the current state of an alias.
+createBotAliasResponse_botAliasStatus :: Lens.Lens' CreateBotAliasResponse (Prelude.Maybe BotAliasStatus)
+createBotAliasResponse_botAliasStatus = Lens.lens (\CreateBotAliasResponse' {botAliasStatus} -> botAliasStatus) (\s@CreateBotAliasResponse' {} a -> s {botAliasStatus = a} :: CreateBotAliasResponse)
+
+-- | The unique identifier of the bot that this alias applies to.
+createBotAliasResponse_botId :: Lens.Lens' CreateBotAliasResponse (Prelude.Maybe Prelude.Text)
+createBotAliasResponse_botId = Lens.lens (\CreateBotAliasResponse' {botId} -> botId) (\s@CreateBotAliasResponse' {} a -> s {botId = a} :: CreateBotAliasResponse)
+
+-- | The version of the bot associated with this alias.
+createBotAliasResponse_botVersion :: Lens.Lens' CreateBotAliasResponse (Prelude.Maybe Prelude.Text)
+createBotAliasResponse_botVersion = Lens.lens (\CreateBotAliasResponse' {botVersion} -> botVersion) (\s@CreateBotAliasResponse' {} a -> s {botVersion = a} :: CreateBotAliasResponse)
+
+-- | The conversation log settings specified for the alias.
+createBotAliasResponse_conversationLogSettings :: Lens.Lens' CreateBotAliasResponse (Prelude.Maybe ConversationLogSettings)
+createBotAliasResponse_conversationLogSettings = Lens.lens (\CreateBotAliasResponse' {conversationLogSettings} -> conversationLogSettings) (\s@CreateBotAliasResponse' {} a -> s {conversationLogSettings = a} :: CreateBotAliasResponse)
+
+-- | A Unix timestamp indicating the date and time that the bot alias was
+-- created.
+createBotAliasResponse_creationDateTime :: Lens.Lens' CreateBotAliasResponse (Prelude.Maybe Prelude.UTCTime)
+createBotAliasResponse_creationDateTime = Lens.lens (\CreateBotAliasResponse' {creationDateTime} -> creationDateTime) (\s@CreateBotAliasResponse' {} a -> s {creationDateTime = a} :: CreateBotAliasResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The description specified for the bot alias.
+createBotAliasResponse_description :: Lens.Lens' CreateBotAliasResponse (Prelude.Maybe Prelude.Text)
+createBotAliasResponse_description = Lens.lens (\CreateBotAliasResponse' {description} -> description) (\s@CreateBotAliasResponse' {} a -> s {description = a} :: CreateBotAliasResponse)
+
+-- | Undocumented member.
+createBotAliasResponse_sentimentAnalysisSettings :: Lens.Lens' CreateBotAliasResponse (Prelude.Maybe SentimentAnalysisSettings)
+createBotAliasResponse_sentimentAnalysisSettings = Lens.lens (\CreateBotAliasResponse' {sentimentAnalysisSettings} -> sentimentAnalysisSettings) (\s@CreateBotAliasResponse' {} a -> s {sentimentAnalysisSettings = a} :: CreateBotAliasResponse)
+
+-- | A list of tags associated with the bot alias.
+createBotAliasResponse_tags :: Lens.Lens' CreateBotAliasResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+createBotAliasResponse_tags = Lens.lens (\CreateBotAliasResponse' {tags} -> tags) (\s@CreateBotAliasResponse' {} a -> s {tags = a} :: CreateBotAliasResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+createBotAliasResponse_httpStatus :: Lens.Lens' CreateBotAliasResponse Prelude.Int
+createBotAliasResponse_httpStatus = Lens.lens (\CreateBotAliasResponse' {httpStatus} -> httpStatus) (\s@CreateBotAliasResponse' {} a -> s {httpStatus = a} :: CreateBotAliasResponse)
+
+instance Prelude.NFData CreateBotAliasResponse where
+  rnf CreateBotAliasResponse' {..} =
+    Prelude.rnf botAliasId
+      `Prelude.seq` Prelude.rnf botAliasLocaleSettings
+      `Prelude.seq` Prelude.rnf botAliasName
+      `Prelude.seq` Prelude.rnf botAliasStatus
+      `Prelude.seq` Prelude.rnf botId
+      `Prelude.seq` Prelude.rnf botVersion
+      `Prelude.seq` Prelude.rnf conversationLogSettings
+      `Prelude.seq` Prelude.rnf creationDateTime
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf sentimentAnalysisSettings
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/LexV2Models/CreateBotLocale.hs b/gen/Amazonka/LexV2Models/CreateBotLocale.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/CreateBotLocale.hs
@@ -0,0 +1,468 @@
+{-# 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.LexV2Models.CreateBotLocale
+-- 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 locale in the bot. The locale contains the intents and slot
+-- types that the bot uses in conversations with users in the specified
+-- language and locale. You must add a locale to a bot before you can add
+-- intents and slot types to the bot.
+module Amazonka.LexV2Models.CreateBotLocale
+  ( -- * Creating a Request
+    CreateBotLocale (..),
+    newCreateBotLocale,
+
+    -- * Request Lenses
+    createBotLocale_description,
+    createBotLocale_voiceSettings,
+    createBotLocale_botId,
+    createBotLocale_botVersion,
+    createBotLocale_localeId,
+    createBotLocale_nluIntentConfidenceThreshold,
+
+    -- * Destructuring the Response
+    CreateBotLocaleResponse (..),
+    newCreateBotLocaleResponse,
+
+    -- * Response Lenses
+    createBotLocaleResponse_botId,
+    createBotLocaleResponse_botLocaleStatus,
+    createBotLocaleResponse_botVersion,
+    createBotLocaleResponse_creationDateTime,
+    createBotLocaleResponse_description,
+    createBotLocaleResponse_localeId,
+    createBotLocaleResponse_localeName,
+    createBotLocaleResponse_nluIntentConfidenceThreshold,
+    createBotLocaleResponse_voiceSettings,
+    createBotLocaleResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LexV2Models.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateBotLocale' smart constructor.
+data CreateBotLocale = CreateBotLocale'
+  { -- | A description of the bot locale. Use this to help identify the bot
+    -- locale in lists.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Polly voice ID that Amazon Lex uses for voice interaction
+    -- with the user.
+    voiceSettings :: Prelude.Maybe VoiceSettings,
+    -- | The identifier of the bot to create the locale for.
+    botId :: Prelude.Text,
+    -- | The version of the bot to create the locale for. This can only be the
+    -- draft version of the bot.
+    botVersion :: Prelude.Text,
+    -- | The identifier of the language and locale that the bot will be used in.
+    -- The string must match one of the supported locales. All of the intents,
+    -- slot types, and slots used in the bot must have the same locale. For
+    -- more information, see
+    -- <https://docs.aws.amazon.com/lexv2/latest/dg/how-languages.html Supported languages>.
+    localeId :: Prelude.Text,
+    -- | Determines the threshold where Amazon Lex will insert the
+    -- @AMAZON.FallbackIntent@, @AMAZON.KendraSearchIntent@, or both when
+    -- returning alternative intents. @AMAZON.FallbackIntent@ and
+    -- @AMAZON.KendraSearchIntent@ are only inserted if they are configured for
+    -- the bot.
+    --
+    -- For example, suppose a bot is configured with the confidence threshold
+    -- of 0.80 and the @AMAZON.FallbackIntent@. Amazon Lex returns three
+    -- alternative intents with the following confidence scores: IntentA
+    -- (0.70), IntentB (0.60), IntentC (0.50). The response from the
+    -- @RecognizeText@ operation would be:
+    --
+    -- -   AMAZON.FallbackIntent
+    --
+    -- -   IntentA
+    --
+    -- -   IntentB
+    --
+    -- -   IntentC
+    nluIntentConfidenceThreshold :: Prelude.Double
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateBotLocale' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'description', 'createBotLocale_description' - A description of the bot locale. Use this to help identify the bot
+-- locale in lists.
+--
+-- 'voiceSettings', 'createBotLocale_voiceSettings' - The Amazon Polly voice ID that Amazon Lex uses for voice interaction
+-- with the user.
+--
+-- 'botId', 'createBotLocale_botId' - The identifier of the bot to create the locale for.
+--
+-- 'botVersion', 'createBotLocale_botVersion' - The version of the bot to create the locale for. This can only be the
+-- draft version of the bot.
+--
+-- 'localeId', 'createBotLocale_localeId' - The identifier of the language and locale that the bot will be used in.
+-- The string must match one of the supported locales. All of the intents,
+-- slot types, and slots used in the bot must have the same locale. For
+-- more information, see
+-- <https://docs.aws.amazon.com/lexv2/latest/dg/how-languages.html Supported languages>.
+--
+-- 'nluIntentConfidenceThreshold', 'createBotLocale_nluIntentConfidenceThreshold' - Determines the threshold where Amazon Lex will insert the
+-- @AMAZON.FallbackIntent@, @AMAZON.KendraSearchIntent@, or both when
+-- returning alternative intents. @AMAZON.FallbackIntent@ and
+-- @AMAZON.KendraSearchIntent@ are only inserted if they are configured for
+-- the bot.
+--
+-- For example, suppose a bot is configured with the confidence threshold
+-- of 0.80 and the @AMAZON.FallbackIntent@. Amazon Lex returns three
+-- alternative intents with the following confidence scores: IntentA
+-- (0.70), IntentB (0.60), IntentC (0.50). The response from the
+-- @RecognizeText@ operation would be:
+--
+-- -   AMAZON.FallbackIntent
+--
+-- -   IntentA
+--
+-- -   IntentB
+--
+-- -   IntentC
+newCreateBotLocale ::
+  -- | 'botId'
+  Prelude.Text ->
+  -- | 'botVersion'
+  Prelude.Text ->
+  -- | 'localeId'
+  Prelude.Text ->
+  -- | 'nluIntentConfidenceThreshold'
+  Prelude.Double ->
+  CreateBotLocale
+newCreateBotLocale
+  pBotId_
+  pBotVersion_
+  pLocaleId_
+  pNluIntentConfidenceThreshold_ =
+    CreateBotLocale'
+      { description = Prelude.Nothing,
+        voiceSettings = Prelude.Nothing,
+        botId = pBotId_,
+        botVersion = pBotVersion_,
+        localeId = pLocaleId_,
+        nluIntentConfidenceThreshold =
+          pNluIntentConfidenceThreshold_
+      }
+
+-- | A description of the bot locale. Use this to help identify the bot
+-- locale in lists.
+createBotLocale_description :: Lens.Lens' CreateBotLocale (Prelude.Maybe Prelude.Text)
+createBotLocale_description = Lens.lens (\CreateBotLocale' {description} -> description) (\s@CreateBotLocale' {} a -> s {description = a} :: CreateBotLocale)
+
+-- | The Amazon Polly voice ID that Amazon Lex uses for voice interaction
+-- with the user.
+createBotLocale_voiceSettings :: Lens.Lens' CreateBotLocale (Prelude.Maybe VoiceSettings)
+createBotLocale_voiceSettings = Lens.lens (\CreateBotLocale' {voiceSettings} -> voiceSettings) (\s@CreateBotLocale' {} a -> s {voiceSettings = a} :: CreateBotLocale)
+
+-- | The identifier of the bot to create the locale for.
+createBotLocale_botId :: Lens.Lens' CreateBotLocale Prelude.Text
+createBotLocale_botId = Lens.lens (\CreateBotLocale' {botId} -> botId) (\s@CreateBotLocale' {} a -> s {botId = a} :: CreateBotLocale)
+
+-- | The version of the bot to create the locale for. This can only be the
+-- draft version of the bot.
+createBotLocale_botVersion :: Lens.Lens' CreateBotLocale Prelude.Text
+createBotLocale_botVersion = Lens.lens (\CreateBotLocale' {botVersion} -> botVersion) (\s@CreateBotLocale' {} a -> s {botVersion = a} :: CreateBotLocale)
+
+-- | The identifier of the language and locale that the bot will be used in.
+-- The string must match one of the supported locales. All of the intents,
+-- slot types, and slots used in the bot must have the same locale. For
+-- more information, see
+-- <https://docs.aws.amazon.com/lexv2/latest/dg/how-languages.html Supported languages>.
+createBotLocale_localeId :: Lens.Lens' CreateBotLocale Prelude.Text
+createBotLocale_localeId = Lens.lens (\CreateBotLocale' {localeId} -> localeId) (\s@CreateBotLocale' {} a -> s {localeId = a} :: CreateBotLocale)
+
+-- | Determines the threshold where Amazon Lex will insert the
+-- @AMAZON.FallbackIntent@, @AMAZON.KendraSearchIntent@, or both when
+-- returning alternative intents. @AMAZON.FallbackIntent@ and
+-- @AMAZON.KendraSearchIntent@ are only inserted if they are configured for
+-- the bot.
+--
+-- For example, suppose a bot is configured with the confidence threshold
+-- of 0.80 and the @AMAZON.FallbackIntent@. Amazon Lex returns three
+-- alternative intents with the following confidence scores: IntentA
+-- (0.70), IntentB (0.60), IntentC (0.50). The response from the
+-- @RecognizeText@ operation would be:
+--
+-- -   AMAZON.FallbackIntent
+--
+-- -   IntentA
+--
+-- -   IntentB
+--
+-- -   IntentC
+createBotLocale_nluIntentConfidenceThreshold :: Lens.Lens' CreateBotLocale Prelude.Double
+createBotLocale_nluIntentConfidenceThreshold = Lens.lens (\CreateBotLocale' {nluIntentConfidenceThreshold} -> nluIntentConfidenceThreshold) (\s@CreateBotLocale' {} a -> s {nluIntentConfidenceThreshold = a} :: CreateBotLocale)
+
+instance Core.AWSRequest CreateBotLocale where
+  type
+    AWSResponse CreateBotLocale =
+      CreateBotLocaleResponse
+  request overrides =
+    Request.putJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateBotLocaleResponse'
+            Prelude.<$> (x Data..?> "botId")
+            Prelude.<*> (x Data..?> "botLocaleStatus")
+            Prelude.<*> (x Data..?> "botVersion")
+            Prelude.<*> (x Data..?> "creationDateTime")
+            Prelude.<*> (x Data..?> "description")
+            Prelude.<*> (x Data..?> "localeId")
+            Prelude.<*> (x Data..?> "localeName")
+            Prelude.<*> (x Data..?> "nluIntentConfidenceThreshold")
+            Prelude.<*> (x Data..?> "voiceSettings")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateBotLocale where
+  hashWithSalt _salt CreateBotLocale' {..} =
+    _salt
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` voiceSettings
+      `Prelude.hashWithSalt` botId
+      `Prelude.hashWithSalt` botVersion
+      `Prelude.hashWithSalt` localeId
+      `Prelude.hashWithSalt` nluIntentConfidenceThreshold
+
+instance Prelude.NFData CreateBotLocale where
+  rnf CreateBotLocale' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf voiceSettings
+      `Prelude.seq` Prelude.rnf botId
+      `Prelude.seq` Prelude.rnf botVersion
+      `Prelude.seq` Prelude.rnf localeId
+      `Prelude.seq` Prelude.rnf nluIntentConfidenceThreshold
+
+instance Data.ToHeaders CreateBotLocale where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateBotLocale where
+  toJSON CreateBotLocale' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("description" Data..=) Prelude.<$> description,
+            ("voiceSettings" Data..=) Prelude.<$> voiceSettings,
+            Prelude.Just ("localeId" Data..= localeId),
+            Prelude.Just
+              ( "nluIntentConfidenceThreshold"
+                  Data..= nluIntentConfidenceThreshold
+              )
+          ]
+      )
+
+instance Data.ToPath CreateBotLocale where
+  toPath CreateBotLocale' {..} =
+    Prelude.mconcat
+      [ "/bots/",
+        Data.toBS botId,
+        "/botversions/",
+        Data.toBS botVersion,
+        "/botlocales/"
+      ]
+
+instance Data.ToQuery CreateBotLocale where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateBotLocaleResponse' smart constructor.
+data CreateBotLocaleResponse = CreateBotLocaleResponse'
+  { -- | The specified bot identifier.
+    botId :: Prelude.Maybe Prelude.Text,
+    -- | The status of the bot.
+    --
+    -- When the status is @Creating@ the bot locale is being configured. When
+    -- the status is @Building@ Amazon Lex is building the bot for testing and
+    -- use.
+    --
+    -- If the status of the bot is @ReadyExpressTesting@, you can test the bot
+    -- using the exact utterances specified in the bots\' intents. When the bot
+    -- is ready for full testing or to run, the status is @Built@.
+    --
+    -- If there was a problem with building the bot, the status is @Failed@. If
+    -- the bot was saved but not built, the status is @NotBuilt@.
+    botLocaleStatus :: Prelude.Maybe BotLocaleStatus,
+    -- | The specified bot version.
+    botVersion :: Prelude.Maybe Prelude.Text,
+    -- | A timestamp specifying the date and time that the bot locale was
+    -- created.
+    creationDateTime :: Prelude.Maybe Data.POSIX,
+    -- | The specified description of the bot locale.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The specified locale identifier.
+    localeId :: Prelude.Maybe Prelude.Text,
+    -- | The specified locale name.
+    localeName :: Prelude.Maybe Prelude.Text,
+    -- | The specified confidence threshold for inserting the
+    -- @AMAZON.FallbackIntent@ and @AMAZON.KendraSearchIntent@ intents.
+    nluIntentConfidenceThreshold :: Prelude.Maybe Prelude.Double,
+    -- | The Amazon Polly voice ID that Amazon Lex uses for voice interaction
+    -- with the user.
+    voiceSettings :: Prelude.Maybe VoiceSettings,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateBotLocaleResponse' 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:
+--
+-- 'botId', 'createBotLocaleResponse_botId' - The specified bot identifier.
+--
+-- 'botLocaleStatus', 'createBotLocaleResponse_botLocaleStatus' - The status of the bot.
+--
+-- When the status is @Creating@ the bot locale is being configured. When
+-- the status is @Building@ Amazon Lex is building the bot for testing and
+-- use.
+--
+-- If the status of the bot is @ReadyExpressTesting@, you can test the bot
+-- using the exact utterances specified in the bots\' intents. When the bot
+-- is ready for full testing or to run, the status is @Built@.
+--
+-- If there was a problem with building the bot, the status is @Failed@. If
+-- the bot was saved but not built, the status is @NotBuilt@.
+--
+-- 'botVersion', 'createBotLocaleResponse_botVersion' - The specified bot version.
+--
+-- 'creationDateTime', 'createBotLocaleResponse_creationDateTime' - A timestamp specifying the date and time that the bot locale was
+-- created.
+--
+-- 'description', 'createBotLocaleResponse_description' - The specified description of the bot locale.
+--
+-- 'localeId', 'createBotLocaleResponse_localeId' - The specified locale identifier.
+--
+-- 'localeName', 'createBotLocaleResponse_localeName' - The specified locale name.
+--
+-- 'nluIntentConfidenceThreshold', 'createBotLocaleResponse_nluIntentConfidenceThreshold' - The specified confidence threshold for inserting the
+-- @AMAZON.FallbackIntent@ and @AMAZON.KendraSearchIntent@ intents.
+--
+-- 'voiceSettings', 'createBotLocaleResponse_voiceSettings' - The Amazon Polly voice ID that Amazon Lex uses for voice interaction
+-- with the user.
+--
+-- 'httpStatus', 'createBotLocaleResponse_httpStatus' - The response's http status code.
+newCreateBotLocaleResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateBotLocaleResponse
+newCreateBotLocaleResponse pHttpStatus_ =
+  CreateBotLocaleResponse'
+    { botId = Prelude.Nothing,
+      botLocaleStatus = Prelude.Nothing,
+      botVersion = Prelude.Nothing,
+      creationDateTime = Prelude.Nothing,
+      description = Prelude.Nothing,
+      localeId = Prelude.Nothing,
+      localeName = Prelude.Nothing,
+      nluIntentConfidenceThreshold = Prelude.Nothing,
+      voiceSettings = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The specified bot identifier.
+createBotLocaleResponse_botId :: Lens.Lens' CreateBotLocaleResponse (Prelude.Maybe Prelude.Text)
+createBotLocaleResponse_botId = Lens.lens (\CreateBotLocaleResponse' {botId} -> botId) (\s@CreateBotLocaleResponse' {} a -> s {botId = a} :: CreateBotLocaleResponse)
+
+-- | The status of the bot.
+--
+-- When the status is @Creating@ the bot locale is being configured. When
+-- the status is @Building@ Amazon Lex is building the bot for testing and
+-- use.
+--
+-- If the status of the bot is @ReadyExpressTesting@, you can test the bot
+-- using the exact utterances specified in the bots\' intents. When the bot
+-- is ready for full testing or to run, the status is @Built@.
+--
+-- If there was a problem with building the bot, the status is @Failed@. If
+-- the bot was saved but not built, the status is @NotBuilt@.
+createBotLocaleResponse_botLocaleStatus :: Lens.Lens' CreateBotLocaleResponse (Prelude.Maybe BotLocaleStatus)
+createBotLocaleResponse_botLocaleStatus = Lens.lens (\CreateBotLocaleResponse' {botLocaleStatus} -> botLocaleStatus) (\s@CreateBotLocaleResponse' {} a -> s {botLocaleStatus = a} :: CreateBotLocaleResponse)
+
+-- | The specified bot version.
+createBotLocaleResponse_botVersion :: Lens.Lens' CreateBotLocaleResponse (Prelude.Maybe Prelude.Text)
+createBotLocaleResponse_botVersion = Lens.lens (\CreateBotLocaleResponse' {botVersion} -> botVersion) (\s@CreateBotLocaleResponse' {} a -> s {botVersion = a} :: CreateBotLocaleResponse)
+
+-- | A timestamp specifying the date and time that the bot locale was
+-- created.
+createBotLocaleResponse_creationDateTime :: Lens.Lens' CreateBotLocaleResponse (Prelude.Maybe Prelude.UTCTime)
+createBotLocaleResponse_creationDateTime = Lens.lens (\CreateBotLocaleResponse' {creationDateTime} -> creationDateTime) (\s@CreateBotLocaleResponse' {} a -> s {creationDateTime = a} :: CreateBotLocaleResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The specified description of the bot locale.
+createBotLocaleResponse_description :: Lens.Lens' CreateBotLocaleResponse (Prelude.Maybe Prelude.Text)
+createBotLocaleResponse_description = Lens.lens (\CreateBotLocaleResponse' {description} -> description) (\s@CreateBotLocaleResponse' {} a -> s {description = a} :: CreateBotLocaleResponse)
+
+-- | The specified locale identifier.
+createBotLocaleResponse_localeId :: Lens.Lens' CreateBotLocaleResponse (Prelude.Maybe Prelude.Text)
+createBotLocaleResponse_localeId = Lens.lens (\CreateBotLocaleResponse' {localeId} -> localeId) (\s@CreateBotLocaleResponse' {} a -> s {localeId = a} :: CreateBotLocaleResponse)
+
+-- | The specified locale name.
+createBotLocaleResponse_localeName :: Lens.Lens' CreateBotLocaleResponse (Prelude.Maybe Prelude.Text)
+createBotLocaleResponse_localeName = Lens.lens (\CreateBotLocaleResponse' {localeName} -> localeName) (\s@CreateBotLocaleResponse' {} a -> s {localeName = a} :: CreateBotLocaleResponse)
+
+-- | The specified confidence threshold for inserting the
+-- @AMAZON.FallbackIntent@ and @AMAZON.KendraSearchIntent@ intents.
+createBotLocaleResponse_nluIntentConfidenceThreshold :: Lens.Lens' CreateBotLocaleResponse (Prelude.Maybe Prelude.Double)
+createBotLocaleResponse_nluIntentConfidenceThreshold = Lens.lens (\CreateBotLocaleResponse' {nluIntentConfidenceThreshold} -> nluIntentConfidenceThreshold) (\s@CreateBotLocaleResponse' {} a -> s {nluIntentConfidenceThreshold = a} :: CreateBotLocaleResponse)
+
+-- | The Amazon Polly voice ID that Amazon Lex uses for voice interaction
+-- with the user.
+createBotLocaleResponse_voiceSettings :: Lens.Lens' CreateBotLocaleResponse (Prelude.Maybe VoiceSettings)
+createBotLocaleResponse_voiceSettings = Lens.lens (\CreateBotLocaleResponse' {voiceSettings} -> voiceSettings) (\s@CreateBotLocaleResponse' {} a -> s {voiceSettings = a} :: CreateBotLocaleResponse)
+
+-- | The response's http status code.
+createBotLocaleResponse_httpStatus :: Lens.Lens' CreateBotLocaleResponse Prelude.Int
+createBotLocaleResponse_httpStatus = Lens.lens (\CreateBotLocaleResponse' {httpStatus} -> httpStatus) (\s@CreateBotLocaleResponse' {} a -> s {httpStatus = a} :: CreateBotLocaleResponse)
+
+instance Prelude.NFData CreateBotLocaleResponse where
+  rnf CreateBotLocaleResponse' {..} =
+    Prelude.rnf botId
+      `Prelude.seq` Prelude.rnf botLocaleStatus
+      `Prelude.seq` Prelude.rnf botVersion
+      `Prelude.seq` Prelude.rnf creationDateTime
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf localeId
+      `Prelude.seq` Prelude.rnf localeName
+      `Prelude.seq` Prelude.rnf nluIntentConfidenceThreshold
+      `Prelude.seq` Prelude.rnf voiceSettings
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/LexV2Models/CreateBotVersion.hs b/gen/Amazonka/LexV2Models/CreateBotVersion.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/CreateBotVersion.hs
@@ -0,0 +1,288 @@
+{-# 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.LexV2Models.CreateBotVersion
+-- 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 version of the bot based on the @DRAFT@ version. If the
+-- @DRAFT@ version of this resource hasn\'t changed since you created the
+-- last version, Amazon Lex doesn\'t create a new version, it returns the
+-- last created version.
+--
+-- When you create the first version of a bot, Amazon Lex sets the version
+-- to 1. Subsequent versions increment by 1.
+module Amazonka.LexV2Models.CreateBotVersion
+  ( -- * Creating a Request
+    CreateBotVersion (..),
+    newCreateBotVersion,
+
+    -- * Request Lenses
+    createBotVersion_description,
+    createBotVersion_botId,
+    createBotVersion_botVersionLocaleSpecification,
+
+    -- * Destructuring the Response
+    CreateBotVersionResponse (..),
+    newCreateBotVersionResponse,
+
+    -- * Response Lenses
+    createBotVersionResponse_botId,
+    createBotVersionResponse_botStatus,
+    createBotVersionResponse_botVersion,
+    createBotVersionResponse_botVersionLocaleSpecification,
+    createBotVersionResponse_creationDateTime,
+    createBotVersionResponse_description,
+    createBotVersionResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LexV2Models.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateBotVersion' smart constructor.
+data CreateBotVersion = CreateBotVersion'
+  { -- | A description of the version. Use the description to help identify the
+    -- version in lists.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The identifier of the bot to create the version for.
+    botId :: Prelude.Text,
+    -- | Specifies the locales that Amazon Lex adds to this version. You can
+    -- choose the @Draft@ version or any other previously published version for
+    -- each locale. When you specify a source version, the locale data is
+    -- copied from the source version to the new version.
+    botVersionLocaleSpecification :: Prelude.HashMap Prelude.Text BotVersionLocaleDetails
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateBotVersion' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'description', 'createBotVersion_description' - A description of the version. Use the description to help identify the
+-- version in lists.
+--
+-- 'botId', 'createBotVersion_botId' - The identifier of the bot to create the version for.
+--
+-- 'botVersionLocaleSpecification', 'createBotVersion_botVersionLocaleSpecification' - Specifies the locales that Amazon Lex adds to this version. You can
+-- choose the @Draft@ version or any other previously published version for
+-- each locale. When you specify a source version, the locale data is
+-- copied from the source version to the new version.
+newCreateBotVersion ::
+  -- | 'botId'
+  Prelude.Text ->
+  CreateBotVersion
+newCreateBotVersion pBotId_ =
+  CreateBotVersion'
+    { description = Prelude.Nothing,
+      botId = pBotId_,
+      botVersionLocaleSpecification = Prelude.mempty
+    }
+
+-- | A description of the version. Use the description to help identify the
+-- version in lists.
+createBotVersion_description :: Lens.Lens' CreateBotVersion (Prelude.Maybe Prelude.Text)
+createBotVersion_description = Lens.lens (\CreateBotVersion' {description} -> description) (\s@CreateBotVersion' {} a -> s {description = a} :: CreateBotVersion)
+
+-- | The identifier of the bot to create the version for.
+createBotVersion_botId :: Lens.Lens' CreateBotVersion Prelude.Text
+createBotVersion_botId = Lens.lens (\CreateBotVersion' {botId} -> botId) (\s@CreateBotVersion' {} a -> s {botId = a} :: CreateBotVersion)
+
+-- | Specifies the locales that Amazon Lex adds to this version. You can
+-- choose the @Draft@ version or any other previously published version for
+-- each locale. When you specify a source version, the locale data is
+-- copied from the source version to the new version.
+createBotVersion_botVersionLocaleSpecification :: Lens.Lens' CreateBotVersion (Prelude.HashMap Prelude.Text BotVersionLocaleDetails)
+createBotVersion_botVersionLocaleSpecification = Lens.lens (\CreateBotVersion' {botVersionLocaleSpecification} -> botVersionLocaleSpecification) (\s@CreateBotVersion' {} a -> s {botVersionLocaleSpecification = a} :: CreateBotVersion) Prelude.. Lens.coerced
+
+instance Core.AWSRequest CreateBotVersion where
+  type
+    AWSResponse CreateBotVersion =
+      CreateBotVersionResponse
+  request overrides =
+    Request.putJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateBotVersionResponse'
+            Prelude.<$> (x Data..?> "botId")
+            Prelude.<*> (x Data..?> "botStatus")
+            Prelude.<*> (x Data..?> "botVersion")
+            Prelude.<*> ( x
+                            Data..?> "botVersionLocaleSpecification"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (x Data..?> "creationDateTime")
+            Prelude.<*> (x Data..?> "description")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateBotVersion where
+  hashWithSalt _salt CreateBotVersion' {..} =
+    _salt
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` botId
+      `Prelude.hashWithSalt` botVersionLocaleSpecification
+
+instance Prelude.NFData CreateBotVersion where
+  rnf CreateBotVersion' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf botId
+      `Prelude.seq` Prelude.rnf botVersionLocaleSpecification
+
+instance Data.ToHeaders CreateBotVersion where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateBotVersion where
+  toJSON CreateBotVersion' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("description" Data..=) Prelude.<$> description,
+            Prelude.Just
+              ( "botVersionLocaleSpecification"
+                  Data..= botVersionLocaleSpecification
+              )
+          ]
+      )
+
+instance Data.ToPath CreateBotVersion where
+  toPath CreateBotVersion' {..} =
+    Prelude.mconcat
+      ["/bots/", Data.toBS botId, "/botversions/"]
+
+instance Data.ToQuery CreateBotVersion where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateBotVersionResponse' smart constructor.
+data CreateBotVersionResponse = CreateBotVersionResponse'
+  { -- | The bot identifier specified in the request.
+    botId :: Prelude.Maybe Prelude.Text,
+    -- | When you send a request to create or update a bot, Amazon Lex sets the
+    -- status response element to @Creating@. After Amazon Lex builds the bot,
+    -- it sets status to @Available@. If Amazon Lex can\'t build the bot, it
+    -- sets status to @Failed@.
+    botStatus :: Prelude.Maybe BotStatus,
+    -- | The version number assigned to the version.
+    botVersion :: Prelude.Maybe Prelude.Text,
+    -- | The source versions used for each locale in the new version.
+    botVersionLocaleSpecification :: Prelude.Maybe (Prelude.HashMap Prelude.Text BotVersionLocaleDetails),
+    -- | A timestamp of the date and time that the version was created.
+    creationDateTime :: Prelude.Maybe Data.POSIX,
+    -- | The description of the version specified in the request.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateBotVersionResponse' 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:
+--
+-- 'botId', 'createBotVersionResponse_botId' - The bot identifier specified in the request.
+--
+-- 'botStatus', 'createBotVersionResponse_botStatus' - When you send a request to create or update a bot, Amazon Lex sets the
+-- status response element to @Creating@. After Amazon Lex builds the bot,
+-- it sets status to @Available@. If Amazon Lex can\'t build the bot, it
+-- sets status to @Failed@.
+--
+-- 'botVersion', 'createBotVersionResponse_botVersion' - The version number assigned to the version.
+--
+-- 'botVersionLocaleSpecification', 'createBotVersionResponse_botVersionLocaleSpecification' - The source versions used for each locale in the new version.
+--
+-- 'creationDateTime', 'createBotVersionResponse_creationDateTime' - A timestamp of the date and time that the version was created.
+--
+-- 'description', 'createBotVersionResponse_description' - The description of the version specified in the request.
+--
+-- 'httpStatus', 'createBotVersionResponse_httpStatus' - The response's http status code.
+newCreateBotVersionResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateBotVersionResponse
+newCreateBotVersionResponse pHttpStatus_ =
+  CreateBotVersionResponse'
+    { botId = Prelude.Nothing,
+      botStatus = Prelude.Nothing,
+      botVersion = Prelude.Nothing,
+      botVersionLocaleSpecification = Prelude.Nothing,
+      creationDateTime = Prelude.Nothing,
+      description = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The bot identifier specified in the request.
+createBotVersionResponse_botId :: Lens.Lens' CreateBotVersionResponse (Prelude.Maybe Prelude.Text)
+createBotVersionResponse_botId = Lens.lens (\CreateBotVersionResponse' {botId} -> botId) (\s@CreateBotVersionResponse' {} a -> s {botId = a} :: CreateBotVersionResponse)
+
+-- | When you send a request to create or update a bot, Amazon Lex sets the
+-- status response element to @Creating@. After Amazon Lex builds the bot,
+-- it sets status to @Available@. If Amazon Lex can\'t build the bot, it
+-- sets status to @Failed@.
+createBotVersionResponse_botStatus :: Lens.Lens' CreateBotVersionResponse (Prelude.Maybe BotStatus)
+createBotVersionResponse_botStatus = Lens.lens (\CreateBotVersionResponse' {botStatus} -> botStatus) (\s@CreateBotVersionResponse' {} a -> s {botStatus = a} :: CreateBotVersionResponse)
+
+-- | The version number assigned to the version.
+createBotVersionResponse_botVersion :: Lens.Lens' CreateBotVersionResponse (Prelude.Maybe Prelude.Text)
+createBotVersionResponse_botVersion = Lens.lens (\CreateBotVersionResponse' {botVersion} -> botVersion) (\s@CreateBotVersionResponse' {} a -> s {botVersion = a} :: CreateBotVersionResponse)
+
+-- | The source versions used for each locale in the new version.
+createBotVersionResponse_botVersionLocaleSpecification :: Lens.Lens' CreateBotVersionResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text BotVersionLocaleDetails))
+createBotVersionResponse_botVersionLocaleSpecification = Lens.lens (\CreateBotVersionResponse' {botVersionLocaleSpecification} -> botVersionLocaleSpecification) (\s@CreateBotVersionResponse' {} a -> s {botVersionLocaleSpecification = a} :: CreateBotVersionResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | A timestamp of the date and time that the version was created.
+createBotVersionResponse_creationDateTime :: Lens.Lens' CreateBotVersionResponse (Prelude.Maybe Prelude.UTCTime)
+createBotVersionResponse_creationDateTime = Lens.lens (\CreateBotVersionResponse' {creationDateTime} -> creationDateTime) (\s@CreateBotVersionResponse' {} a -> s {creationDateTime = a} :: CreateBotVersionResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The description of the version specified in the request.
+createBotVersionResponse_description :: Lens.Lens' CreateBotVersionResponse (Prelude.Maybe Prelude.Text)
+createBotVersionResponse_description = Lens.lens (\CreateBotVersionResponse' {description} -> description) (\s@CreateBotVersionResponse' {} a -> s {description = a} :: CreateBotVersionResponse)
+
+-- | The response's http status code.
+createBotVersionResponse_httpStatus :: Lens.Lens' CreateBotVersionResponse Prelude.Int
+createBotVersionResponse_httpStatus = Lens.lens (\CreateBotVersionResponse' {httpStatus} -> httpStatus) (\s@CreateBotVersionResponse' {} a -> s {httpStatus = a} :: CreateBotVersionResponse)
+
+instance Prelude.NFData CreateBotVersionResponse where
+  rnf CreateBotVersionResponse' {..} =
+    Prelude.rnf botId
+      `Prelude.seq` Prelude.rnf botStatus
+      `Prelude.seq` Prelude.rnf botVersion
+      `Prelude.seq` Prelude.rnf botVersionLocaleSpecification
+      `Prelude.seq` Prelude.rnf creationDateTime
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/LexV2Models/CreateExport.hs b/gen/Amazonka/LexV2Models/CreateExport.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/CreateExport.hs
@@ -0,0 +1,280 @@
+{-# 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.LexV2Models.CreateExport
+-- 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 zip archive containing the contents of a bot or a bot locale.
+-- The archive contains a directory structure that contains JSON files that
+-- define the bot.
+--
+-- You can create an archive that contains the complete definition of a
+-- bot, or you can specify that the archive contain only the definition of
+-- a single bot locale.
+--
+-- For more information about exporting bots, and about the structure of
+-- the export archive, see
+-- <https://docs.aws.amazon.com/lexv2/latest/dg/importing-exporting.html Importing and exporting bots>
+module Amazonka.LexV2Models.CreateExport
+  ( -- * Creating a Request
+    CreateExport (..),
+    newCreateExport,
+
+    -- * Request Lenses
+    createExport_filePassword,
+    createExport_resourceSpecification,
+    createExport_fileFormat,
+
+    -- * Destructuring the Response
+    CreateExportResponse (..),
+    newCreateExportResponse,
+
+    -- * Response Lenses
+    createExportResponse_creationDateTime,
+    createExportResponse_exportId,
+    createExportResponse_exportStatus,
+    createExportResponse_fileFormat,
+    createExportResponse_resourceSpecification,
+    createExportResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LexV2Models.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateExport' smart constructor.
+data CreateExport = CreateExport'
+  { -- | An password to use to encrypt the exported archive. Using a password is
+    -- optional, but you should encrypt the archive to protect the data in
+    -- transit between Amazon Lex and your local computer.
+    filePassword :: Prelude.Maybe (Data.Sensitive Prelude.Text),
+    -- | Specifies the type of resource to export, either a bot or a bot locale.
+    -- You can only specify one type of resource to export.
+    resourceSpecification :: ExportResourceSpecification,
+    -- | The file format of the bot or bot locale definition files.
+    fileFormat :: ImportExportFileFormat
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateExport' 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:
+--
+-- 'filePassword', 'createExport_filePassword' - An password to use to encrypt the exported archive. Using a password is
+-- optional, but you should encrypt the archive to protect the data in
+-- transit between Amazon Lex and your local computer.
+--
+-- 'resourceSpecification', 'createExport_resourceSpecification' - Specifies the type of resource to export, either a bot or a bot locale.
+-- You can only specify one type of resource to export.
+--
+-- 'fileFormat', 'createExport_fileFormat' - The file format of the bot or bot locale definition files.
+newCreateExport ::
+  -- | 'resourceSpecification'
+  ExportResourceSpecification ->
+  -- | 'fileFormat'
+  ImportExportFileFormat ->
+  CreateExport
+newCreateExport pResourceSpecification_ pFileFormat_ =
+  CreateExport'
+    { filePassword = Prelude.Nothing,
+      resourceSpecification = pResourceSpecification_,
+      fileFormat = pFileFormat_
+    }
+
+-- | An password to use to encrypt the exported archive. Using a password is
+-- optional, but you should encrypt the archive to protect the data in
+-- transit between Amazon Lex and your local computer.
+createExport_filePassword :: Lens.Lens' CreateExport (Prelude.Maybe Prelude.Text)
+createExport_filePassword = Lens.lens (\CreateExport' {filePassword} -> filePassword) (\s@CreateExport' {} a -> s {filePassword = a} :: CreateExport) Prelude.. Lens.mapping Data._Sensitive
+
+-- | Specifies the type of resource to export, either a bot or a bot locale.
+-- You can only specify one type of resource to export.
+createExport_resourceSpecification :: Lens.Lens' CreateExport ExportResourceSpecification
+createExport_resourceSpecification = Lens.lens (\CreateExport' {resourceSpecification} -> resourceSpecification) (\s@CreateExport' {} a -> s {resourceSpecification = a} :: CreateExport)
+
+-- | The file format of the bot or bot locale definition files.
+createExport_fileFormat :: Lens.Lens' CreateExport ImportExportFileFormat
+createExport_fileFormat = Lens.lens (\CreateExport' {fileFormat} -> fileFormat) (\s@CreateExport' {} a -> s {fileFormat = a} :: CreateExport)
+
+instance Core.AWSRequest CreateExport where
+  type AWSResponse CreateExport = CreateExportResponse
+  request overrides =
+    Request.putJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateExportResponse'
+            Prelude.<$> (x Data..?> "creationDateTime")
+            Prelude.<*> (x Data..?> "exportId")
+            Prelude.<*> (x Data..?> "exportStatus")
+            Prelude.<*> (x Data..?> "fileFormat")
+            Prelude.<*> (x Data..?> "resourceSpecification")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateExport where
+  hashWithSalt _salt CreateExport' {..} =
+    _salt
+      `Prelude.hashWithSalt` filePassword
+      `Prelude.hashWithSalt` resourceSpecification
+      `Prelude.hashWithSalt` fileFormat
+
+instance Prelude.NFData CreateExport where
+  rnf CreateExport' {..} =
+    Prelude.rnf filePassword
+      `Prelude.seq` Prelude.rnf resourceSpecification
+      `Prelude.seq` Prelude.rnf fileFormat
+
+instance Data.ToHeaders CreateExport where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateExport where
+  toJSON CreateExport' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("filePassword" Data..=) Prelude.<$> filePassword,
+            Prelude.Just
+              ( "resourceSpecification"
+                  Data..= resourceSpecification
+              ),
+            Prelude.Just ("fileFormat" Data..= fileFormat)
+          ]
+      )
+
+instance Data.ToPath CreateExport where
+  toPath = Prelude.const "/exports/"
+
+instance Data.ToQuery CreateExport where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateExportResponse' smart constructor.
+data CreateExportResponse = CreateExportResponse'
+  { -- | The date and time that the request to export a bot was created.
+    creationDateTime :: Prelude.Maybe Data.POSIX,
+    -- | An identifier for a specific request to create an export.
+    exportId :: Prelude.Maybe Prelude.Text,
+    -- | The status of the export. When the status is @Completed@, you can use
+    -- the
+    -- <https://docs.aws.amazon.com/lexv2/latest/dg/API_DescribeExport.html DescribeExport>
+    -- operation to get the pre-signed S3 URL link to your exported bot or bot
+    -- locale.
+    exportStatus :: Prelude.Maybe ExportStatus,
+    -- | The file format used for the bot or bot locale definition files.
+    fileFormat :: Prelude.Maybe ImportExportFileFormat,
+    -- | A description of the type of resource that was exported, either a bot or
+    -- a bot locale.
+    resourceSpecification :: Prelude.Maybe ExportResourceSpecification,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateExportResponse' 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:
+--
+-- 'creationDateTime', 'createExportResponse_creationDateTime' - The date and time that the request to export a bot was created.
+--
+-- 'exportId', 'createExportResponse_exportId' - An identifier for a specific request to create an export.
+--
+-- 'exportStatus', 'createExportResponse_exportStatus' - The status of the export. When the status is @Completed@, you can use
+-- the
+-- <https://docs.aws.amazon.com/lexv2/latest/dg/API_DescribeExport.html DescribeExport>
+-- operation to get the pre-signed S3 URL link to your exported bot or bot
+-- locale.
+--
+-- 'fileFormat', 'createExportResponse_fileFormat' - The file format used for the bot or bot locale definition files.
+--
+-- 'resourceSpecification', 'createExportResponse_resourceSpecification' - A description of the type of resource that was exported, either a bot or
+-- a bot locale.
+--
+-- 'httpStatus', 'createExportResponse_httpStatus' - The response's http status code.
+newCreateExportResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateExportResponse
+newCreateExportResponse pHttpStatus_ =
+  CreateExportResponse'
+    { creationDateTime =
+        Prelude.Nothing,
+      exportId = Prelude.Nothing,
+      exportStatus = Prelude.Nothing,
+      fileFormat = Prelude.Nothing,
+      resourceSpecification = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The date and time that the request to export a bot was created.
+createExportResponse_creationDateTime :: Lens.Lens' CreateExportResponse (Prelude.Maybe Prelude.UTCTime)
+createExportResponse_creationDateTime = Lens.lens (\CreateExportResponse' {creationDateTime} -> creationDateTime) (\s@CreateExportResponse' {} a -> s {creationDateTime = a} :: CreateExportResponse) Prelude.. Lens.mapping Data._Time
+
+-- | An identifier for a specific request to create an export.
+createExportResponse_exportId :: Lens.Lens' CreateExportResponse (Prelude.Maybe Prelude.Text)
+createExportResponse_exportId = Lens.lens (\CreateExportResponse' {exportId} -> exportId) (\s@CreateExportResponse' {} a -> s {exportId = a} :: CreateExportResponse)
+
+-- | The status of the export. When the status is @Completed@, you can use
+-- the
+-- <https://docs.aws.amazon.com/lexv2/latest/dg/API_DescribeExport.html DescribeExport>
+-- operation to get the pre-signed S3 URL link to your exported bot or bot
+-- locale.
+createExportResponse_exportStatus :: Lens.Lens' CreateExportResponse (Prelude.Maybe ExportStatus)
+createExportResponse_exportStatus = Lens.lens (\CreateExportResponse' {exportStatus} -> exportStatus) (\s@CreateExportResponse' {} a -> s {exportStatus = a} :: CreateExportResponse)
+
+-- | The file format used for the bot or bot locale definition files.
+createExportResponse_fileFormat :: Lens.Lens' CreateExportResponse (Prelude.Maybe ImportExportFileFormat)
+createExportResponse_fileFormat = Lens.lens (\CreateExportResponse' {fileFormat} -> fileFormat) (\s@CreateExportResponse' {} a -> s {fileFormat = a} :: CreateExportResponse)
+
+-- | A description of the type of resource that was exported, either a bot or
+-- a bot locale.
+createExportResponse_resourceSpecification :: Lens.Lens' CreateExportResponse (Prelude.Maybe ExportResourceSpecification)
+createExportResponse_resourceSpecification = Lens.lens (\CreateExportResponse' {resourceSpecification} -> resourceSpecification) (\s@CreateExportResponse' {} a -> s {resourceSpecification = a} :: CreateExportResponse)
+
+-- | The response's http status code.
+createExportResponse_httpStatus :: Lens.Lens' CreateExportResponse Prelude.Int
+createExportResponse_httpStatus = Lens.lens (\CreateExportResponse' {httpStatus} -> httpStatus) (\s@CreateExportResponse' {} a -> s {httpStatus = a} :: CreateExportResponse)
+
+instance Prelude.NFData CreateExportResponse where
+  rnf CreateExportResponse' {..} =
+    Prelude.rnf creationDateTime
+      `Prelude.seq` Prelude.rnf exportId
+      `Prelude.seq` Prelude.rnf exportStatus
+      `Prelude.seq` Prelude.rnf fileFormat
+      `Prelude.seq` Prelude.rnf resourceSpecification
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/LexV2Models/CreateIntent.hs b/gen/Amazonka/LexV2Models/CreateIntent.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/CreateIntent.hs
@@ -0,0 +1,778 @@
+{-# 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.LexV2Models.CreateIntent
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates an intent.
+--
+-- To define the interaction between the user and your bot, you define one
+-- or more intents. For example, for a pizza ordering bot you would create
+-- an @OrderPizza@ intent.
+--
+-- When you create an intent, you must provide a name. You can optionally
+-- provide the following:
+--
+-- -   Sample utterances. For example, \"I want to order a pizza\" and
+--     \"Can I order a pizza.\" You can\'t provide utterances for built-in
+--     intents.
+--
+-- -   Information to be gathered. You specify slots for the information
+--     that you bot requests from the user. You can specify standard slot
+--     types, such as date and time, or custom slot types for your
+--     application.
+--
+-- -   How the intent is fulfilled. You can provide a Lambda function or
+--     configure the intent to return the intent information to your client
+--     application. If you use a Lambda function, Amazon Lex invokes the
+--     function when all of the intent information is available.
+--
+-- -   A confirmation prompt to send to the user to confirm an intent. For
+--     example, \"Shall I order your pizza?\"
+--
+-- -   A conclusion statement to send to the user after the intent is
+--     fulfilled. For example, \"I ordered your pizza.\"
+--
+-- -   A follow-up prompt that asks the user for additional activity. For
+--     example, \"Do you want a drink with your pizza?\"
+module Amazonka.LexV2Models.CreateIntent
+  ( -- * Creating a Request
+    CreateIntent (..),
+    newCreateIntent,
+
+    -- * Request Lenses
+    createIntent_description,
+    createIntent_dialogCodeHook,
+    createIntent_fulfillmentCodeHook,
+    createIntent_initialResponseSetting,
+    createIntent_inputContexts,
+    createIntent_intentClosingSetting,
+    createIntent_intentConfirmationSetting,
+    createIntent_kendraConfiguration,
+    createIntent_outputContexts,
+    createIntent_parentIntentSignature,
+    createIntent_sampleUtterances,
+    createIntent_intentName,
+    createIntent_botId,
+    createIntent_botVersion,
+    createIntent_localeId,
+
+    -- * Destructuring the Response
+    CreateIntentResponse (..),
+    newCreateIntentResponse,
+
+    -- * Response Lenses
+    createIntentResponse_botId,
+    createIntentResponse_botVersion,
+    createIntentResponse_creationDateTime,
+    createIntentResponse_description,
+    createIntentResponse_dialogCodeHook,
+    createIntentResponse_fulfillmentCodeHook,
+    createIntentResponse_initialResponseSetting,
+    createIntentResponse_inputContexts,
+    createIntentResponse_intentClosingSetting,
+    createIntentResponse_intentConfirmationSetting,
+    createIntentResponse_intentId,
+    createIntentResponse_intentName,
+    createIntentResponse_kendraConfiguration,
+    createIntentResponse_localeId,
+    createIntentResponse_outputContexts,
+    createIntentResponse_parentIntentSignature,
+    createIntentResponse_sampleUtterances,
+    createIntentResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LexV2Models.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateIntent' smart constructor.
+data CreateIntent = CreateIntent'
+  { -- | A description of the intent. Use the description to help identify the
+    -- intent in lists.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | Specifies that Amazon Lex invokes the alias Lambda function for each
+    -- user input. You can invoke this Lambda function to personalize user
+    -- interaction.
+    --
+    -- For example, suppose that your bot determines that the user\'s name is
+    -- John. You Lambda function might retrieve John\'s information from a
+    -- backend database and prepopulate some of the values. For example, if you
+    -- find that John is gluten intolerant, you might set the corresponding
+    -- intent slot, @glutenIntolerant@ to @true@. You might find John\'s phone
+    -- number and set the corresponding session attribute.
+    dialogCodeHook :: Prelude.Maybe DialogCodeHookSettings,
+    -- | Specifies that Amazon Lex invokes the alias Lambda function when the
+    -- intent is ready for fulfillment. You can invoke this function to
+    -- complete the bot\'s transaction with the user.
+    --
+    -- For example, in a pizza ordering bot, the Lambda function can look up
+    -- the closest pizza restaurant to the customer\'s location and then place
+    -- an order on the customer\'s behalf.
+    fulfillmentCodeHook :: Prelude.Maybe FulfillmentCodeHookSettings,
+    -- | Configuration settings for the response that is sent to the user at the
+    -- beginning of a conversation, before eliciting slot values.
+    initialResponseSetting :: Prelude.Maybe InitialResponseSetting,
+    -- | A list of contexts that must be active for this intent to be considered
+    -- by Amazon Lex.
+    --
+    -- When an intent has an input context list, Amazon Lex only considers
+    -- using the intent in an interaction with the user when the specified
+    -- contexts are included in the active context list for the session. If the
+    -- contexts are not active, then Amazon Lex will not use the intent.
+    --
+    -- A context can be automatically activated using the @outputContexts@
+    -- property or it can be set at runtime.
+    --
+    -- For example, if there are two intents with different input contexts that
+    -- respond to the same utterances, only the intent with the active context
+    -- will respond.
+    --
+    -- An intent may have up to 5 input contexts. If an intent has multiple
+    -- input contexts, all of the contexts must be active to consider the
+    -- intent.
+    inputContexts :: Prelude.Maybe [InputContext],
+    -- | Sets the response that Amazon Lex sends to the user when the intent is
+    -- closed.
+    intentClosingSetting :: Prelude.Maybe IntentClosingSetting,
+    -- | Provides prompts that Amazon Lex sends to the user to confirm the
+    -- completion of an intent. If the user answers \"no,\" the settings
+    -- contain a statement that is sent to the user to end the intent.
+    intentConfirmationSetting :: Prelude.Maybe IntentConfirmationSetting,
+    -- | Configuration information required to use the
+    -- @AMAZON.KendraSearchIntent@ intent to connect to an Amazon Kendra index.
+    -- The @AMAZON.KendraSearchIntent@ intent is called when Amazon Lex can\'t
+    -- determine another intent to invoke.
+    kendraConfiguration :: Prelude.Maybe KendraConfiguration,
+    -- | A lists of contexts that the intent activates when it is fulfilled.
+    --
+    -- You can use an output context to indicate the intents that Amazon Lex
+    -- should consider for the next turn of the conversation with a customer.
+    --
+    -- When you use the @outputContextsList@ property, all of the contexts
+    -- specified in the list are activated when the intent is fulfilled. You
+    -- can set up to 10 output contexts. You can also set the number of
+    -- conversation turns that the context should be active, or the length of
+    -- time that the context should be active.
+    outputContexts :: Prelude.Maybe [OutputContext],
+    -- | A unique identifier for the built-in intent to base this intent on.
+    parentIntentSignature :: Prelude.Maybe Prelude.Text,
+    -- | An array of strings that a user might say to signal the intent. For
+    -- example, \"I want a pizza\", or \"I want a {PizzaSize} pizza\".
+    --
+    -- In an utterance, slot names are enclosed in curly braces (\"{\", \"}\")
+    -- to indicate where they should be displayed in the utterance shown to the
+    -- user..
+    sampleUtterances :: Prelude.Maybe [SampleUtterance],
+    -- | The name of the intent. Intent names must be unique in the locale that
+    -- contains the intent and cannot match the name of any built-in intent.
+    intentName :: Prelude.Text,
+    -- | The identifier of the bot associated with this intent.
+    botId :: Prelude.Text,
+    -- | The identifier of the version of the bot associated with this intent.
+    botVersion :: Prelude.Text,
+    -- | The identifier of the language and locale where this intent is used. All
+    -- of the bots, slot types, and slots used by the intent must have the same
+    -- locale. For more information, see
+    -- <https://docs.aws.amazon.com/lexv2/latest/dg/how-languages.html Supported languages>.
+    localeId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateIntent' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'description', 'createIntent_description' - A description of the intent. Use the description to help identify the
+-- intent in lists.
+--
+-- 'dialogCodeHook', 'createIntent_dialogCodeHook' - Specifies that Amazon Lex invokes the alias Lambda function for each
+-- user input. You can invoke this Lambda function to personalize user
+-- interaction.
+--
+-- For example, suppose that your bot determines that the user\'s name is
+-- John. You Lambda function might retrieve John\'s information from a
+-- backend database and prepopulate some of the values. For example, if you
+-- find that John is gluten intolerant, you might set the corresponding
+-- intent slot, @glutenIntolerant@ to @true@. You might find John\'s phone
+-- number and set the corresponding session attribute.
+--
+-- 'fulfillmentCodeHook', 'createIntent_fulfillmentCodeHook' - Specifies that Amazon Lex invokes the alias Lambda function when the
+-- intent is ready for fulfillment. You can invoke this function to
+-- complete the bot\'s transaction with the user.
+--
+-- For example, in a pizza ordering bot, the Lambda function can look up
+-- the closest pizza restaurant to the customer\'s location and then place
+-- an order on the customer\'s behalf.
+--
+-- 'initialResponseSetting', 'createIntent_initialResponseSetting' - Configuration settings for the response that is sent to the user at the
+-- beginning of a conversation, before eliciting slot values.
+--
+-- 'inputContexts', 'createIntent_inputContexts' - A list of contexts that must be active for this intent to be considered
+-- by Amazon Lex.
+--
+-- When an intent has an input context list, Amazon Lex only considers
+-- using the intent in an interaction with the user when the specified
+-- contexts are included in the active context list for the session. If the
+-- contexts are not active, then Amazon Lex will not use the intent.
+--
+-- A context can be automatically activated using the @outputContexts@
+-- property or it can be set at runtime.
+--
+-- For example, if there are two intents with different input contexts that
+-- respond to the same utterances, only the intent with the active context
+-- will respond.
+--
+-- An intent may have up to 5 input contexts. If an intent has multiple
+-- input contexts, all of the contexts must be active to consider the
+-- intent.
+--
+-- 'intentClosingSetting', 'createIntent_intentClosingSetting' - Sets the response that Amazon Lex sends to the user when the intent is
+-- closed.
+--
+-- 'intentConfirmationSetting', 'createIntent_intentConfirmationSetting' - Provides prompts that Amazon Lex sends to the user to confirm the
+-- completion of an intent. If the user answers \"no,\" the settings
+-- contain a statement that is sent to the user to end the intent.
+--
+-- 'kendraConfiguration', 'createIntent_kendraConfiguration' - Configuration information required to use the
+-- @AMAZON.KendraSearchIntent@ intent to connect to an Amazon Kendra index.
+-- The @AMAZON.KendraSearchIntent@ intent is called when Amazon Lex can\'t
+-- determine another intent to invoke.
+--
+-- 'outputContexts', 'createIntent_outputContexts' - A lists of contexts that the intent activates when it is fulfilled.
+--
+-- You can use an output context to indicate the intents that Amazon Lex
+-- should consider for the next turn of the conversation with a customer.
+--
+-- When you use the @outputContextsList@ property, all of the contexts
+-- specified in the list are activated when the intent is fulfilled. You
+-- can set up to 10 output contexts. You can also set the number of
+-- conversation turns that the context should be active, or the length of
+-- time that the context should be active.
+--
+-- 'parentIntentSignature', 'createIntent_parentIntentSignature' - A unique identifier for the built-in intent to base this intent on.
+--
+-- 'sampleUtterances', 'createIntent_sampleUtterances' - An array of strings that a user might say to signal the intent. For
+-- example, \"I want a pizza\", or \"I want a {PizzaSize} pizza\".
+--
+-- In an utterance, slot names are enclosed in curly braces (\"{\", \"}\")
+-- to indicate where they should be displayed in the utterance shown to the
+-- user..
+--
+-- 'intentName', 'createIntent_intentName' - The name of the intent. Intent names must be unique in the locale that
+-- contains the intent and cannot match the name of any built-in intent.
+--
+-- 'botId', 'createIntent_botId' - The identifier of the bot associated with this intent.
+--
+-- 'botVersion', 'createIntent_botVersion' - The identifier of the version of the bot associated with this intent.
+--
+-- 'localeId', 'createIntent_localeId' - The identifier of the language and locale where this intent is used. All
+-- of the bots, slot types, and slots used by the intent must have the same
+-- locale. For more information, see
+-- <https://docs.aws.amazon.com/lexv2/latest/dg/how-languages.html Supported languages>.
+newCreateIntent ::
+  -- | 'intentName'
+  Prelude.Text ->
+  -- | 'botId'
+  Prelude.Text ->
+  -- | 'botVersion'
+  Prelude.Text ->
+  -- | 'localeId'
+  Prelude.Text ->
+  CreateIntent
+newCreateIntent
+  pIntentName_
+  pBotId_
+  pBotVersion_
+  pLocaleId_ =
+    CreateIntent'
+      { description = Prelude.Nothing,
+        dialogCodeHook = Prelude.Nothing,
+        fulfillmentCodeHook = Prelude.Nothing,
+        initialResponseSetting = Prelude.Nothing,
+        inputContexts = Prelude.Nothing,
+        intentClosingSetting = Prelude.Nothing,
+        intentConfirmationSetting = Prelude.Nothing,
+        kendraConfiguration = Prelude.Nothing,
+        outputContexts = Prelude.Nothing,
+        parentIntentSignature = Prelude.Nothing,
+        sampleUtterances = Prelude.Nothing,
+        intentName = pIntentName_,
+        botId = pBotId_,
+        botVersion = pBotVersion_,
+        localeId = pLocaleId_
+      }
+
+-- | A description of the intent. Use the description to help identify the
+-- intent in lists.
+createIntent_description :: Lens.Lens' CreateIntent (Prelude.Maybe Prelude.Text)
+createIntent_description = Lens.lens (\CreateIntent' {description} -> description) (\s@CreateIntent' {} a -> s {description = a} :: CreateIntent)
+
+-- | Specifies that Amazon Lex invokes the alias Lambda function for each
+-- user input. You can invoke this Lambda function to personalize user
+-- interaction.
+--
+-- For example, suppose that your bot determines that the user\'s name is
+-- John. You Lambda function might retrieve John\'s information from a
+-- backend database and prepopulate some of the values. For example, if you
+-- find that John is gluten intolerant, you might set the corresponding
+-- intent slot, @glutenIntolerant@ to @true@. You might find John\'s phone
+-- number and set the corresponding session attribute.
+createIntent_dialogCodeHook :: Lens.Lens' CreateIntent (Prelude.Maybe DialogCodeHookSettings)
+createIntent_dialogCodeHook = Lens.lens (\CreateIntent' {dialogCodeHook} -> dialogCodeHook) (\s@CreateIntent' {} a -> s {dialogCodeHook = a} :: CreateIntent)
+
+-- | Specifies that Amazon Lex invokes the alias Lambda function when the
+-- intent is ready for fulfillment. You can invoke this function to
+-- complete the bot\'s transaction with the user.
+--
+-- For example, in a pizza ordering bot, the Lambda function can look up
+-- the closest pizza restaurant to the customer\'s location and then place
+-- an order on the customer\'s behalf.
+createIntent_fulfillmentCodeHook :: Lens.Lens' CreateIntent (Prelude.Maybe FulfillmentCodeHookSettings)
+createIntent_fulfillmentCodeHook = Lens.lens (\CreateIntent' {fulfillmentCodeHook} -> fulfillmentCodeHook) (\s@CreateIntent' {} a -> s {fulfillmentCodeHook = a} :: CreateIntent)
+
+-- | Configuration settings for the response that is sent to the user at the
+-- beginning of a conversation, before eliciting slot values.
+createIntent_initialResponseSetting :: Lens.Lens' CreateIntent (Prelude.Maybe InitialResponseSetting)
+createIntent_initialResponseSetting = Lens.lens (\CreateIntent' {initialResponseSetting} -> initialResponseSetting) (\s@CreateIntent' {} a -> s {initialResponseSetting = a} :: CreateIntent)
+
+-- | A list of contexts that must be active for this intent to be considered
+-- by Amazon Lex.
+--
+-- When an intent has an input context list, Amazon Lex only considers
+-- using the intent in an interaction with the user when the specified
+-- contexts are included in the active context list for the session. If the
+-- contexts are not active, then Amazon Lex will not use the intent.
+--
+-- A context can be automatically activated using the @outputContexts@
+-- property or it can be set at runtime.
+--
+-- For example, if there are two intents with different input contexts that
+-- respond to the same utterances, only the intent with the active context
+-- will respond.
+--
+-- An intent may have up to 5 input contexts. If an intent has multiple
+-- input contexts, all of the contexts must be active to consider the
+-- intent.
+createIntent_inputContexts :: Lens.Lens' CreateIntent (Prelude.Maybe [InputContext])
+createIntent_inputContexts = Lens.lens (\CreateIntent' {inputContexts} -> inputContexts) (\s@CreateIntent' {} a -> s {inputContexts = a} :: CreateIntent) Prelude.. Lens.mapping Lens.coerced
+
+-- | Sets the response that Amazon Lex sends to the user when the intent is
+-- closed.
+createIntent_intentClosingSetting :: Lens.Lens' CreateIntent (Prelude.Maybe IntentClosingSetting)
+createIntent_intentClosingSetting = Lens.lens (\CreateIntent' {intentClosingSetting} -> intentClosingSetting) (\s@CreateIntent' {} a -> s {intentClosingSetting = a} :: CreateIntent)
+
+-- | Provides prompts that Amazon Lex sends to the user to confirm the
+-- completion of an intent. If the user answers \"no,\" the settings
+-- contain a statement that is sent to the user to end the intent.
+createIntent_intentConfirmationSetting :: Lens.Lens' CreateIntent (Prelude.Maybe IntentConfirmationSetting)
+createIntent_intentConfirmationSetting = Lens.lens (\CreateIntent' {intentConfirmationSetting} -> intentConfirmationSetting) (\s@CreateIntent' {} a -> s {intentConfirmationSetting = a} :: CreateIntent)
+
+-- | Configuration information required to use the
+-- @AMAZON.KendraSearchIntent@ intent to connect to an Amazon Kendra index.
+-- The @AMAZON.KendraSearchIntent@ intent is called when Amazon Lex can\'t
+-- determine another intent to invoke.
+createIntent_kendraConfiguration :: Lens.Lens' CreateIntent (Prelude.Maybe KendraConfiguration)
+createIntent_kendraConfiguration = Lens.lens (\CreateIntent' {kendraConfiguration} -> kendraConfiguration) (\s@CreateIntent' {} a -> s {kendraConfiguration = a} :: CreateIntent)
+
+-- | A lists of contexts that the intent activates when it is fulfilled.
+--
+-- You can use an output context to indicate the intents that Amazon Lex
+-- should consider for the next turn of the conversation with a customer.
+--
+-- When you use the @outputContextsList@ property, all of the contexts
+-- specified in the list are activated when the intent is fulfilled. You
+-- can set up to 10 output contexts. You can also set the number of
+-- conversation turns that the context should be active, or the length of
+-- time that the context should be active.
+createIntent_outputContexts :: Lens.Lens' CreateIntent (Prelude.Maybe [OutputContext])
+createIntent_outputContexts = Lens.lens (\CreateIntent' {outputContexts} -> outputContexts) (\s@CreateIntent' {} a -> s {outputContexts = a} :: CreateIntent) Prelude.. Lens.mapping Lens.coerced
+
+-- | A unique identifier for the built-in intent to base this intent on.
+createIntent_parentIntentSignature :: Lens.Lens' CreateIntent (Prelude.Maybe Prelude.Text)
+createIntent_parentIntentSignature = Lens.lens (\CreateIntent' {parentIntentSignature} -> parentIntentSignature) (\s@CreateIntent' {} a -> s {parentIntentSignature = a} :: CreateIntent)
+
+-- | An array of strings that a user might say to signal the intent. For
+-- example, \"I want a pizza\", or \"I want a {PizzaSize} pizza\".
+--
+-- In an utterance, slot names are enclosed in curly braces (\"{\", \"}\")
+-- to indicate where they should be displayed in the utterance shown to the
+-- user..
+createIntent_sampleUtterances :: Lens.Lens' CreateIntent (Prelude.Maybe [SampleUtterance])
+createIntent_sampleUtterances = Lens.lens (\CreateIntent' {sampleUtterances} -> sampleUtterances) (\s@CreateIntent' {} a -> s {sampleUtterances = a} :: CreateIntent) Prelude.. Lens.mapping Lens.coerced
+
+-- | The name of the intent. Intent names must be unique in the locale that
+-- contains the intent and cannot match the name of any built-in intent.
+createIntent_intentName :: Lens.Lens' CreateIntent Prelude.Text
+createIntent_intentName = Lens.lens (\CreateIntent' {intentName} -> intentName) (\s@CreateIntent' {} a -> s {intentName = a} :: CreateIntent)
+
+-- | The identifier of the bot associated with this intent.
+createIntent_botId :: Lens.Lens' CreateIntent Prelude.Text
+createIntent_botId = Lens.lens (\CreateIntent' {botId} -> botId) (\s@CreateIntent' {} a -> s {botId = a} :: CreateIntent)
+
+-- | The identifier of the version of the bot associated with this intent.
+createIntent_botVersion :: Lens.Lens' CreateIntent Prelude.Text
+createIntent_botVersion = Lens.lens (\CreateIntent' {botVersion} -> botVersion) (\s@CreateIntent' {} a -> s {botVersion = a} :: CreateIntent)
+
+-- | The identifier of the language and locale where this intent is used. All
+-- of the bots, slot types, and slots used by the intent must have the same
+-- locale. For more information, see
+-- <https://docs.aws.amazon.com/lexv2/latest/dg/how-languages.html Supported languages>.
+createIntent_localeId :: Lens.Lens' CreateIntent Prelude.Text
+createIntent_localeId = Lens.lens (\CreateIntent' {localeId} -> localeId) (\s@CreateIntent' {} a -> s {localeId = a} :: CreateIntent)
+
+instance Core.AWSRequest CreateIntent where
+  type AWSResponse CreateIntent = CreateIntentResponse
+  request overrides =
+    Request.putJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateIntentResponse'
+            Prelude.<$> (x Data..?> "botId")
+            Prelude.<*> (x Data..?> "botVersion")
+            Prelude.<*> (x Data..?> "creationDateTime")
+            Prelude.<*> (x Data..?> "description")
+            Prelude.<*> (x Data..?> "dialogCodeHook")
+            Prelude.<*> (x Data..?> "fulfillmentCodeHook")
+            Prelude.<*> (x Data..?> "initialResponseSetting")
+            Prelude.<*> (x Data..?> "inputContexts" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "intentClosingSetting")
+            Prelude.<*> (x Data..?> "intentConfirmationSetting")
+            Prelude.<*> (x Data..?> "intentId")
+            Prelude.<*> (x Data..?> "intentName")
+            Prelude.<*> (x Data..?> "kendraConfiguration")
+            Prelude.<*> (x Data..?> "localeId")
+            Prelude.<*> (x Data..?> "outputContexts" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "parentIntentSignature")
+            Prelude.<*> ( x
+                            Data..?> "sampleUtterances"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateIntent where
+  hashWithSalt _salt CreateIntent' {..} =
+    _salt
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` dialogCodeHook
+      `Prelude.hashWithSalt` fulfillmentCodeHook
+      `Prelude.hashWithSalt` initialResponseSetting
+      `Prelude.hashWithSalt` inputContexts
+      `Prelude.hashWithSalt` intentClosingSetting
+      `Prelude.hashWithSalt` intentConfirmationSetting
+      `Prelude.hashWithSalt` kendraConfiguration
+      `Prelude.hashWithSalt` outputContexts
+      `Prelude.hashWithSalt` parentIntentSignature
+      `Prelude.hashWithSalt` sampleUtterances
+      `Prelude.hashWithSalt` intentName
+      `Prelude.hashWithSalt` botId
+      `Prelude.hashWithSalt` botVersion
+      `Prelude.hashWithSalt` localeId
+
+instance Prelude.NFData CreateIntent where
+  rnf CreateIntent' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf dialogCodeHook
+      `Prelude.seq` Prelude.rnf fulfillmentCodeHook
+      `Prelude.seq` Prelude.rnf initialResponseSetting
+      `Prelude.seq` Prelude.rnf inputContexts
+      `Prelude.seq` Prelude.rnf intentClosingSetting
+      `Prelude.seq` Prelude.rnf intentConfirmationSetting
+      `Prelude.seq` Prelude.rnf kendraConfiguration
+      `Prelude.seq` Prelude.rnf outputContexts
+      `Prelude.seq` Prelude.rnf parentIntentSignature
+      `Prelude.seq` Prelude.rnf sampleUtterances
+      `Prelude.seq` Prelude.rnf intentName
+      `Prelude.seq` Prelude.rnf botId
+      `Prelude.seq` Prelude.rnf botVersion
+      `Prelude.seq` Prelude.rnf localeId
+
+instance Data.ToHeaders CreateIntent where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateIntent where
+  toJSON CreateIntent' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("description" Data..=) Prelude.<$> description,
+            ("dialogCodeHook" Data..=)
+              Prelude.<$> dialogCodeHook,
+            ("fulfillmentCodeHook" Data..=)
+              Prelude.<$> fulfillmentCodeHook,
+            ("initialResponseSetting" Data..=)
+              Prelude.<$> initialResponseSetting,
+            ("inputContexts" Data..=) Prelude.<$> inputContexts,
+            ("intentClosingSetting" Data..=)
+              Prelude.<$> intentClosingSetting,
+            ("intentConfirmationSetting" Data..=)
+              Prelude.<$> intentConfirmationSetting,
+            ("kendraConfiguration" Data..=)
+              Prelude.<$> kendraConfiguration,
+            ("outputContexts" Data..=)
+              Prelude.<$> outputContexts,
+            ("parentIntentSignature" Data..=)
+              Prelude.<$> parentIntentSignature,
+            ("sampleUtterances" Data..=)
+              Prelude.<$> sampleUtterances,
+            Prelude.Just ("intentName" Data..= intentName)
+          ]
+      )
+
+instance Data.ToPath CreateIntent where
+  toPath CreateIntent' {..} =
+    Prelude.mconcat
+      [ "/bots/",
+        Data.toBS botId,
+        "/botversions/",
+        Data.toBS botVersion,
+        "/botlocales/",
+        Data.toBS localeId,
+        "/intents/"
+      ]
+
+instance Data.ToQuery CreateIntent where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateIntentResponse' smart constructor.
+data CreateIntentResponse = CreateIntentResponse'
+  { -- | The identifier of the bot associated with the intent.
+    botId :: Prelude.Maybe Prelude.Text,
+    -- | The identifier of the version of the bot associated with the intent.
+    botVersion :: Prelude.Maybe Prelude.Text,
+    -- | A timestamp of the date and time that the intent was created.
+    creationDateTime :: Prelude.Maybe Data.POSIX,
+    -- | The description specified for the intent.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The dialog Lambda function specified for the intent.
+    dialogCodeHook :: Prelude.Maybe DialogCodeHookSettings,
+    -- | The fulfillment Lambda function specified for the intent.
+    fulfillmentCodeHook :: Prelude.Maybe FulfillmentCodeHookSettings,
+    -- | Configuration settings for the response that is sent to the user at the
+    -- beginning of a conversation, before eliciting slot values.
+    initialResponseSetting :: Prelude.Maybe InitialResponseSetting,
+    -- | The list of input contexts specified for the intent.
+    inputContexts :: Prelude.Maybe [InputContext],
+    -- | The closing setting specified for the intent.
+    intentClosingSetting :: Prelude.Maybe IntentClosingSetting,
+    -- | The confirmation setting specified for the intent.
+    intentConfirmationSetting :: Prelude.Maybe IntentConfirmationSetting,
+    -- | A unique identifier for the intent.
+    intentId :: Prelude.Maybe Prelude.Text,
+    -- | The name specified for the intent.
+    intentName :: Prelude.Maybe Prelude.Text,
+    -- | Configuration for searching a Amazon Kendra index specified for the
+    -- intent.
+    kendraConfiguration :: Prelude.Maybe KendraConfiguration,
+    -- | The locale that the intent is specified to use.
+    localeId :: Prelude.Maybe Prelude.Text,
+    -- | The list of output contexts specified for the intent.
+    outputContexts :: Prelude.Maybe [OutputContext],
+    -- | The signature of the parent intent specified for the intent.
+    parentIntentSignature :: Prelude.Maybe Prelude.Text,
+    -- | The sample utterances specified for the intent.
+    sampleUtterances :: Prelude.Maybe [SampleUtterance],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateIntentResponse' 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:
+--
+-- 'botId', 'createIntentResponse_botId' - The identifier of the bot associated with the intent.
+--
+-- 'botVersion', 'createIntentResponse_botVersion' - The identifier of the version of the bot associated with the intent.
+--
+-- 'creationDateTime', 'createIntentResponse_creationDateTime' - A timestamp of the date and time that the intent was created.
+--
+-- 'description', 'createIntentResponse_description' - The description specified for the intent.
+--
+-- 'dialogCodeHook', 'createIntentResponse_dialogCodeHook' - The dialog Lambda function specified for the intent.
+--
+-- 'fulfillmentCodeHook', 'createIntentResponse_fulfillmentCodeHook' - The fulfillment Lambda function specified for the intent.
+--
+-- 'initialResponseSetting', 'createIntentResponse_initialResponseSetting' - Configuration settings for the response that is sent to the user at the
+-- beginning of a conversation, before eliciting slot values.
+--
+-- 'inputContexts', 'createIntentResponse_inputContexts' - The list of input contexts specified for the intent.
+--
+-- 'intentClosingSetting', 'createIntentResponse_intentClosingSetting' - The closing setting specified for the intent.
+--
+-- 'intentConfirmationSetting', 'createIntentResponse_intentConfirmationSetting' - The confirmation setting specified for the intent.
+--
+-- 'intentId', 'createIntentResponse_intentId' - A unique identifier for the intent.
+--
+-- 'intentName', 'createIntentResponse_intentName' - The name specified for the intent.
+--
+-- 'kendraConfiguration', 'createIntentResponse_kendraConfiguration' - Configuration for searching a Amazon Kendra index specified for the
+-- intent.
+--
+-- 'localeId', 'createIntentResponse_localeId' - The locale that the intent is specified to use.
+--
+-- 'outputContexts', 'createIntentResponse_outputContexts' - The list of output contexts specified for the intent.
+--
+-- 'parentIntentSignature', 'createIntentResponse_parentIntentSignature' - The signature of the parent intent specified for the intent.
+--
+-- 'sampleUtterances', 'createIntentResponse_sampleUtterances' - The sample utterances specified for the intent.
+--
+-- 'httpStatus', 'createIntentResponse_httpStatus' - The response's http status code.
+newCreateIntentResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateIntentResponse
+newCreateIntentResponse pHttpStatus_ =
+  CreateIntentResponse'
+    { botId = Prelude.Nothing,
+      botVersion = Prelude.Nothing,
+      creationDateTime = Prelude.Nothing,
+      description = Prelude.Nothing,
+      dialogCodeHook = Prelude.Nothing,
+      fulfillmentCodeHook = Prelude.Nothing,
+      initialResponseSetting = Prelude.Nothing,
+      inputContexts = Prelude.Nothing,
+      intentClosingSetting = Prelude.Nothing,
+      intentConfirmationSetting = Prelude.Nothing,
+      intentId = Prelude.Nothing,
+      intentName = Prelude.Nothing,
+      kendraConfiguration = Prelude.Nothing,
+      localeId = Prelude.Nothing,
+      outputContexts = Prelude.Nothing,
+      parentIntentSignature = Prelude.Nothing,
+      sampleUtterances = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The identifier of the bot associated with the intent.
+createIntentResponse_botId :: Lens.Lens' CreateIntentResponse (Prelude.Maybe Prelude.Text)
+createIntentResponse_botId = Lens.lens (\CreateIntentResponse' {botId} -> botId) (\s@CreateIntentResponse' {} a -> s {botId = a} :: CreateIntentResponse)
+
+-- | The identifier of the version of the bot associated with the intent.
+createIntentResponse_botVersion :: Lens.Lens' CreateIntentResponse (Prelude.Maybe Prelude.Text)
+createIntentResponse_botVersion = Lens.lens (\CreateIntentResponse' {botVersion} -> botVersion) (\s@CreateIntentResponse' {} a -> s {botVersion = a} :: CreateIntentResponse)
+
+-- | A timestamp of the date and time that the intent was created.
+createIntentResponse_creationDateTime :: Lens.Lens' CreateIntentResponse (Prelude.Maybe Prelude.UTCTime)
+createIntentResponse_creationDateTime = Lens.lens (\CreateIntentResponse' {creationDateTime} -> creationDateTime) (\s@CreateIntentResponse' {} a -> s {creationDateTime = a} :: CreateIntentResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The description specified for the intent.
+createIntentResponse_description :: Lens.Lens' CreateIntentResponse (Prelude.Maybe Prelude.Text)
+createIntentResponse_description = Lens.lens (\CreateIntentResponse' {description} -> description) (\s@CreateIntentResponse' {} a -> s {description = a} :: CreateIntentResponse)
+
+-- | The dialog Lambda function specified for the intent.
+createIntentResponse_dialogCodeHook :: Lens.Lens' CreateIntentResponse (Prelude.Maybe DialogCodeHookSettings)
+createIntentResponse_dialogCodeHook = Lens.lens (\CreateIntentResponse' {dialogCodeHook} -> dialogCodeHook) (\s@CreateIntentResponse' {} a -> s {dialogCodeHook = a} :: CreateIntentResponse)
+
+-- | The fulfillment Lambda function specified for the intent.
+createIntentResponse_fulfillmentCodeHook :: Lens.Lens' CreateIntentResponse (Prelude.Maybe FulfillmentCodeHookSettings)
+createIntentResponse_fulfillmentCodeHook = Lens.lens (\CreateIntentResponse' {fulfillmentCodeHook} -> fulfillmentCodeHook) (\s@CreateIntentResponse' {} a -> s {fulfillmentCodeHook = a} :: CreateIntentResponse)
+
+-- | Configuration settings for the response that is sent to the user at the
+-- beginning of a conversation, before eliciting slot values.
+createIntentResponse_initialResponseSetting :: Lens.Lens' CreateIntentResponse (Prelude.Maybe InitialResponseSetting)
+createIntentResponse_initialResponseSetting = Lens.lens (\CreateIntentResponse' {initialResponseSetting} -> initialResponseSetting) (\s@CreateIntentResponse' {} a -> s {initialResponseSetting = a} :: CreateIntentResponse)
+
+-- | The list of input contexts specified for the intent.
+createIntentResponse_inputContexts :: Lens.Lens' CreateIntentResponse (Prelude.Maybe [InputContext])
+createIntentResponse_inputContexts = Lens.lens (\CreateIntentResponse' {inputContexts} -> inputContexts) (\s@CreateIntentResponse' {} a -> s {inputContexts = a} :: CreateIntentResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The closing setting specified for the intent.
+createIntentResponse_intentClosingSetting :: Lens.Lens' CreateIntentResponse (Prelude.Maybe IntentClosingSetting)
+createIntentResponse_intentClosingSetting = Lens.lens (\CreateIntentResponse' {intentClosingSetting} -> intentClosingSetting) (\s@CreateIntentResponse' {} a -> s {intentClosingSetting = a} :: CreateIntentResponse)
+
+-- | The confirmation setting specified for the intent.
+createIntentResponse_intentConfirmationSetting :: Lens.Lens' CreateIntentResponse (Prelude.Maybe IntentConfirmationSetting)
+createIntentResponse_intentConfirmationSetting = Lens.lens (\CreateIntentResponse' {intentConfirmationSetting} -> intentConfirmationSetting) (\s@CreateIntentResponse' {} a -> s {intentConfirmationSetting = a} :: CreateIntentResponse)
+
+-- | A unique identifier for the intent.
+createIntentResponse_intentId :: Lens.Lens' CreateIntentResponse (Prelude.Maybe Prelude.Text)
+createIntentResponse_intentId = Lens.lens (\CreateIntentResponse' {intentId} -> intentId) (\s@CreateIntentResponse' {} a -> s {intentId = a} :: CreateIntentResponse)
+
+-- | The name specified for the intent.
+createIntentResponse_intentName :: Lens.Lens' CreateIntentResponse (Prelude.Maybe Prelude.Text)
+createIntentResponse_intentName = Lens.lens (\CreateIntentResponse' {intentName} -> intentName) (\s@CreateIntentResponse' {} a -> s {intentName = a} :: CreateIntentResponse)
+
+-- | Configuration for searching a Amazon Kendra index specified for the
+-- intent.
+createIntentResponse_kendraConfiguration :: Lens.Lens' CreateIntentResponse (Prelude.Maybe KendraConfiguration)
+createIntentResponse_kendraConfiguration = Lens.lens (\CreateIntentResponse' {kendraConfiguration} -> kendraConfiguration) (\s@CreateIntentResponse' {} a -> s {kendraConfiguration = a} :: CreateIntentResponse)
+
+-- | The locale that the intent is specified to use.
+createIntentResponse_localeId :: Lens.Lens' CreateIntentResponse (Prelude.Maybe Prelude.Text)
+createIntentResponse_localeId = Lens.lens (\CreateIntentResponse' {localeId} -> localeId) (\s@CreateIntentResponse' {} a -> s {localeId = a} :: CreateIntentResponse)
+
+-- | The list of output contexts specified for the intent.
+createIntentResponse_outputContexts :: Lens.Lens' CreateIntentResponse (Prelude.Maybe [OutputContext])
+createIntentResponse_outputContexts = Lens.lens (\CreateIntentResponse' {outputContexts} -> outputContexts) (\s@CreateIntentResponse' {} a -> s {outputContexts = a} :: CreateIntentResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The signature of the parent intent specified for the intent.
+createIntentResponse_parentIntentSignature :: Lens.Lens' CreateIntentResponse (Prelude.Maybe Prelude.Text)
+createIntentResponse_parentIntentSignature = Lens.lens (\CreateIntentResponse' {parentIntentSignature} -> parentIntentSignature) (\s@CreateIntentResponse' {} a -> s {parentIntentSignature = a} :: CreateIntentResponse)
+
+-- | The sample utterances specified for the intent.
+createIntentResponse_sampleUtterances :: Lens.Lens' CreateIntentResponse (Prelude.Maybe [SampleUtterance])
+createIntentResponse_sampleUtterances = Lens.lens (\CreateIntentResponse' {sampleUtterances} -> sampleUtterances) (\s@CreateIntentResponse' {} a -> s {sampleUtterances = a} :: CreateIntentResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+createIntentResponse_httpStatus :: Lens.Lens' CreateIntentResponse Prelude.Int
+createIntentResponse_httpStatus = Lens.lens (\CreateIntentResponse' {httpStatus} -> httpStatus) (\s@CreateIntentResponse' {} a -> s {httpStatus = a} :: CreateIntentResponse)
+
+instance Prelude.NFData CreateIntentResponse where
+  rnf CreateIntentResponse' {..} =
+    Prelude.rnf botId
+      `Prelude.seq` Prelude.rnf botVersion
+      `Prelude.seq` Prelude.rnf creationDateTime
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf dialogCodeHook
+      `Prelude.seq` Prelude.rnf fulfillmentCodeHook
+      `Prelude.seq` Prelude.rnf initialResponseSetting
+      `Prelude.seq` Prelude.rnf inputContexts
+      `Prelude.seq` Prelude.rnf intentClosingSetting
+      `Prelude.seq` Prelude.rnf intentConfirmationSetting
+      `Prelude.seq` Prelude.rnf intentId
+      `Prelude.seq` Prelude.rnf intentName
+      `Prelude.seq` Prelude.rnf kendraConfiguration
+      `Prelude.seq` Prelude.rnf localeId
+      `Prelude.seq` Prelude.rnf outputContexts
+      `Prelude.seq` Prelude.rnf parentIntentSignature
+      `Prelude.seq` Prelude.rnf sampleUtterances
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/LexV2Models/CreateResourcePolicy.hs b/gen/Amazonka/LexV2Models/CreateResourcePolicy.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/CreateResourcePolicy.hs
@@ -0,0 +1,232 @@
+{-# 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.LexV2Models.CreateResourcePolicy
+-- 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 resource policy with the specified policy statements.
+module Amazonka.LexV2Models.CreateResourcePolicy
+  ( -- * Creating a Request
+    CreateResourcePolicy (..),
+    newCreateResourcePolicy,
+
+    -- * Request Lenses
+    createResourcePolicy_resourceArn,
+    createResourcePolicy_policy,
+
+    -- * Destructuring the Response
+    CreateResourcePolicyResponse (..),
+    newCreateResourcePolicyResponse,
+
+    -- * Response Lenses
+    createResourcePolicyResponse_resourceArn,
+    createResourcePolicyResponse_revisionId,
+    createResourcePolicyResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LexV2Models.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateResourcePolicy' smart constructor.
+data CreateResourcePolicy = CreateResourcePolicy'
+  { -- | The Amazon Resource Name (ARN) of the bot or bot alias that the resource
+    -- policy is attached to.
+    resourceArn :: Prelude.Text,
+    -- | A resource policy to add to the resource. The policy is a JSON structure
+    -- that contains one or more statements that define the policy. The policy
+    -- must follow the IAM syntax. For more information about the contents of a
+    -- JSON policy document, see
+    -- <https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies.html IAM JSON policy reference>
+    -- .
+    --
+    -- If the policy isn\'t valid, Amazon Lex returns a validation exception.
+    policy :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateResourcePolicy' 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', 'createResourcePolicy_resourceArn' - The Amazon Resource Name (ARN) of the bot or bot alias that the resource
+-- policy is attached to.
+--
+-- 'policy', 'createResourcePolicy_policy' - A resource policy to add to the resource. The policy is a JSON structure
+-- that contains one or more statements that define the policy. The policy
+-- must follow the IAM syntax. For more information about the contents of a
+-- JSON policy document, see
+-- <https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies.html IAM JSON policy reference>
+-- .
+--
+-- If the policy isn\'t valid, Amazon Lex returns a validation exception.
+newCreateResourcePolicy ::
+  -- | 'resourceArn'
+  Prelude.Text ->
+  -- | 'policy'
+  Prelude.Text ->
+  CreateResourcePolicy
+newCreateResourcePolicy pResourceArn_ pPolicy_ =
+  CreateResourcePolicy'
+    { resourceArn = pResourceArn_,
+      policy = pPolicy_
+    }
+
+-- | The Amazon Resource Name (ARN) of the bot or bot alias that the resource
+-- policy is attached to.
+createResourcePolicy_resourceArn :: Lens.Lens' CreateResourcePolicy Prelude.Text
+createResourcePolicy_resourceArn = Lens.lens (\CreateResourcePolicy' {resourceArn} -> resourceArn) (\s@CreateResourcePolicy' {} a -> s {resourceArn = a} :: CreateResourcePolicy)
+
+-- | A resource policy to add to the resource. The policy is a JSON structure
+-- that contains one or more statements that define the policy. The policy
+-- must follow the IAM syntax. For more information about the contents of a
+-- JSON policy document, see
+-- <https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies.html IAM JSON policy reference>
+-- .
+--
+-- If the policy isn\'t valid, Amazon Lex returns a validation exception.
+createResourcePolicy_policy :: Lens.Lens' CreateResourcePolicy Prelude.Text
+createResourcePolicy_policy = Lens.lens (\CreateResourcePolicy' {policy} -> policy) (\s@CreateResourcePolicy' {} a -> s {policy = a} :: CreateResourcePolicy)
+
+instance Core.AWSRequest CreateResourcePolicy where
+  type
+    AWSResponse CreateResourcePolicy =
+      CreateResourcePolicyResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateResourcePolicyResponse'
+            Prelude.<$> (x Data..?> "resourceArn")
+            Prelude.<*> (x Data..?> "revisionId")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateResourcePolicy where
+  hashWithSalt _salt CreateResourcePolicy' {..} =
+    _salt
+      `Prelude.hashWithSalt` resourceArn
+      `Prelude.hashWithSalt` policy
+
+instance Prelude.NFData CreateResourcePolicy where
+  rnf CreateResourcePolicy' {..} =
+    Prelude.rnf resourceArn
+      `Prelude.seq` Prelude.rnf policy
+
+instance Data.ToHeaders CreateResourcePolicy where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateResourcePolicy where
+  toJSON CreateResourcePolicy' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("policy" Data..= policy)]
+      )
+
+instance Data.ToPath CreateResourcePolicy where
+  toPath CreateResourcePolicy' {..} =
+    Prelude.mconcat
+      ["/policy/", Data.toBS resourceArn, "/"]
+
+instance Data.ToQuery CreateResourcePolicy where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateResourcePolicyResponse' smart constructor.
+data CreateResourcePolicyResponse = CreateResourcePolicyResponse'
+  { -- | The Amazon Resource Name (ARN) of the bot or bot alias that the resource
+    -- policy was attached to.
+    resourceArn :: Prelude.Maybe Prelude.Text,
+    -- | The current revision of the resource policy. Use the revision ID to make
+    -- sure that you are updating the most current version of a resource policy
+    -- when you add a policy statement to a resource, delete a resource, or
+    -- update a resource.
+    revisionId :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateResourcePolicyResponse' 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', 'createResourcePolicyResponse_resourceArn' - The Amazon Resource Name (ARN) of the bot or bot alias that the resource
+-- policy was attached to.
+--
+-- 'revisionId', 'createResourcePolicyResponse_revisionId' - The current revision of the resource policy. Use the revision ID to make
+-- sure that you are updating the most current version of a resource policy
+-- when you add a policy statement to a resource, delete a resource, or
+-- update a resource.
+--
+-- 'httpStatus', 'createResourcePolicyResponse_httpStatus' - The response's http status code.
+newCreateResourcePolicyResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateResourcePolicyResponse
+newCreateResourcePolicyResponse pHttpStatus_ =
+  CreateResourcePolicyResponse'
+    { resourceArn =
+        Prelude.Nothing,
+      revisionId = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The Amazon Resource Name (ARN) of the bot or bot alias that the resource
+-- policy was attached to.
+createResourcePolicyResponse_resourceArn :: Lens.Lens' CreateResourcePolicyResponse (Prelude.Maybe Prelude.Text)
+createResourcePolicyResponse_resourceArn = Lens.lens (\CreateResourcePolicyResponse' {resourceArn} -> resourceArn) (\s@CreateResourcePolicyResponse' {} a -> s {resourceArn = a} :: CreateResourcePolicyResponse)
+
+-- | The current revision of the resource policy. Use the revision ID to make
+-- sure that you are updating the most current version of a resource policy
+-- when you add a policy statement to a resource, delete a resource, or
+-- update a resource.
+createResourcePolicyResponse_revisionId :: Lens.Lens' CreateResourcePolicyResponse (Prelude.Maybe Prelude.Text)
+createResourcePolicyResponse_revisionId = Lens.lens (\CreateResourcePolicyResponse' {revisionId} -> revisionId) (\s@CreateResourcePolicyResponse' {} a -> s {revisionId = a} :: CreateResourcePolicyResponse)
+
+-- | The response's http status code.
+createResourcePolicyResponse_httpStatus :: Lens.Lens' CreateResourcePolicyResponse Prelude.Int
+createResourcePolicyResponse_httpStatus = Lens.lens (\CreateResourcePolicyResponse' {httpStatus} -> httpStatus) (\s@CreateResourcePolicyResponse' {} a -> s {httpStatus = a} :: CreateResourcePolicyResponse)
+
+instance Prelude.NFData CreateResourcePolicyResponse where
+  rnf CreateResourcePolicyResponse' {..} =
+    Prelude.rnf resourceArn
+      `Prelude.seq` Prelude.rnf revisionId
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/LexV2Models/CreateResourcePolicyStatement.hs b/gen/Amazonka/LexV2Models/CreateResourcePolicyStatement.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/CreateResourcePolicyStatement.hs
@@ -0,0 +1,361 @@
+{-# 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.LexV2Models.CreateResourcePolicyStatement
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Adds a new resource policy statement to a bot or bot alias. If a
+-- resource policy exists, the statement is added to the current resource
+-- policy. If a policy doesn\'t exist, a new policy is created.
+--
+-- You can\'t create a resource policy statement that allows cross-account
+-- access.
+module Amazonka.LexV2Models.CreateResourcePolicyStatement
+  ( -- * Creating a Request
+    CreateResourcePolicyStatement (..),
+    newCreateResourcePolicyStatement,
+
+    -- * Request Lenses
+    createResourcePolicyStatement_condition,
+    createResourcePolicyStatement_expectedRevisionId,
+    createResourcePolicyStatement_resourceArn,
+    createResourcePolicyStatement_statementId,
+    createResourcePolicyStatement_effect,
+    createResourcePolicyStatement_principal,
+    createResourcePolicyStatement_action,
+
+    -- * Destructuring the Response
+    CreateResourcePolicyStatementResponse (..),
+    newCreateResourcePolicyStatementResponse,
+
+    -- * Response Lenses
+    createResourcePolicyStatementResponse_resourceArn,
+    createResourcePolicyStatementResponse_revisionId,
+    createResourcePolicyStatementResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LexV2Models.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateResourcePolicyStatement' smart constructor.
+data CreateResourcePolicyStatement = CreateResourcePolicyStatement'
+  { -- | Specifies a condition when the policy is in effect. If the principal of
+    -- the policy is a service principal, you must provide two condition
+    -- blocks, one with a SourceAccount global condition key and one with a
+    -- SourceArn global condition key.
+    --
+    -- For more information, see
+    -- <https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition.html IAM JSON policy elements: Condition>
+    -- .
+    condition :: Prelude.Maybe (Prelude.HashMap Prelude.Text (Prelude.HashMap Prelude.Text Prelude.Text)),
+    -- | The identifier of the revision of the policy to edit. If this revision
+    -- ID doesn\'t match the current revision ID, Amazon Lex throws an
+    -- exception.
+    --
+    -- If you don\'t specify a revision, Amazon Lex overwrites the contents of
+    -- the policy with the new values.
+    expectedRevisionId :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the bot or bot alias that the resource
+    -- policy is attached to.
+    resourceArn :: Prelude.Text,
+    -- | The name of the statement. The ID is the same as the @Sid@ IAM property.
+    -- The statement name must be unique within the policy. For more
+    -- information, see
+    -- <https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_sid.html IAM JSON policy elements: Sid>.
+    statementId :: Prelude.Text,
+    -- | Determines whether the statement allows or denies access to the
+    -- resource.
+    effect :: Effect,
+    -- | An IAM principal, such as an IAM users, IAM roles, or AWS services that
+    -- is allowed or denied access to a resource. For more information, see
+    -- <https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_principal.html AWS JSON policy elements: Principal>.
+    principal :: [Principal],
+    -- | The Amazon Lex action that this policy either allows or denies. The
+    -- action must apply to the resource type of the specified ARN. For more
+    -- information, see
+    -- <https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonlexv2.html Actions, resources, and condition keys for Amazon Lex V2>.
+    action :: [Prelude.Text]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateResourcePolicyStatement' 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:
+--
+-- 'condition', 'createResourcePolicyStatement_condition' - Specifies a condition when the policy is in effect. If the principal of
+-- the policy is a service principal, you must provide two condition
+-- blocks, one with a SourceAccount global condition key and one with a
+-- SourceArn global condition key.
+--
+-- For more information, see
+-- <https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition.html IAM JSON policy elements: Condition>
+-- .
+--
+-- 'expectedRevisionId', 'createResourcePolicyStatement_expectedRevisionId' - The identifier of the revision of the policy to edit. If this revision
+-- ID doesn\'t match the current revision ID, Amazon Lex throws an
+-- exception.
+--
+-- If you don\'t specify a revision, Amazon Lex overwrites the contents of
+-- the policy with the new values.
+--
+-- 'resourceArn', 'createResourcePolicyStatement_resourceArn' - The Amazon Resource Name (ARN) of the bot or bot alias that the resource
+-- policy is attached to.
+--
+-- 'statementId', 'createResourcePolicyStatement_statementId' - The name of the statement. The ID is the same as the @Sid@ IAM property.
+-- The statement name must be unique within the policy. For more
+-- information, see
+-- <https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_sid.html IAM JSON policy elements: Sid>.
+--
+-- 'effect', 'createResourcePolicyStatement_effect' - Determines whether the statement allows or denies access to the
+-- resource.
+--
+-- 'principal', 'createResourcePolicyStatement_principal' - An IAM principal, such as an IAM users, IAM roles, or AWS services that
+-- is allowed or denied access to a resource. For more information, see
+-- <https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_principal.html AWS JSON policy elements: Principal>.
+--
+-- 'action', 'createResourcePolicyStatement_action' - The Amazon Lex action that this policy either allows or denies. The
+-- action must apply to the resource type of the specified ARN. For more
+-- information, see
+-- <https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonlexv2.html Actions, resources, and condition keys for Amazon Lex V2>.
+newCreateResourcePolicyStatement ::
+  -- | 'resourceArn'
+  Prelude.Text ->
+  -- | 'statementId'
+  Prelude.Text ->
+  -- | 'effect'
+  Effect ->
+  CreateResourcePolicyStatement
+newCreateResourcePolicyStatement
+  pResourceArn_
+  pStatementId_
+  pEffect_ =
+    CreateResourcePolicyStatement'
+      { condition =
+          Prelude.Nothing,
+        expectedRevisionId = Prelude.Nothing,
+        resourceArn = pResourceArn_,
+        statementId = pStatementId_,
+        effect = pEffect_,
+        principal = Prelude.mempty,
+        action = Prelude.mempty
+      }
+
+-- | Specifies a condition when the policy is in effect. If the principal of
+-- the policy is a service principal, you must provide two condition
+-- blocks, one with a SourceAccount global condition key and one with a
+-- SourceArn global condition key.
+--
+-- For more information, see
+-- <https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition.html IAM JSON policy elements: Condition>
+-- .
+createResourcePolicyStatement_condition :: Lens.Lens' CreateResourcePolicyStatement (Prelude.Maybe (Prelude.HashMap Prelude.Text (Prelude.HashMap Prelude.Text Prelude.Text)))
+createResourcePolicyStatement_condition = Lens.lens (\CreateResourcePolicyStatement' {condition} -> condition) (\s@CreateResourcePolicyStatement' {} a -> s {condition = a} :: CreateResourcePolicyStatement) Prelude.. Lens.mapping Lens.coerced
+
+-- | The identifier of the revision of the policy to edit. If this revision
+-- ID doesn\'t match the current revision ID, Amazon Lex throws an
+-- exception.
+--
+-- If you don\'t specify a revision, Amazon Lex overwrites the contents of
+-- the policy with the new values.
+createResourcePolicyStatement_expectedRevisionId :: Lens.Lens' CreateResourcePolicyStatement (Prelude.Maybe Prelude.Text)
+createResourcePolicyStatement_expectedRevisionId = Lens.lens (\CreateResourcePolicyStatement' {expectedRevisionId} -> expectedRevisionId) (\s@CreateResourcePolicyStatement' {} a -> s {expectedRevisionId = a} :: CreateResourcePolicyStatement)
+
+-- | The Amazon Resource Name (ARN) of the bot or bot alias that the resource
+-- policy is attached to.
+createResourcePolicyStatement_resourceArn :: Lens.Lens' CreateResourcePolicyStatement Prelude.Text
+createResourcePolicyStatement_resourceArn = Lens.lens (\CreateResourcePolicyStatement' {resourceArn} -> resourceArn) (\s@CreateResourcePolicyStatement' {} a -> s {resourceArn = a} :: CreateResourcePolicyStatement)
+
+-- | The name of the statement. The ID is the same as the @Sid@ IAM property.
+-- The statement name must be unique within the policy. For more
+-- information, see
+-- <https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_sid.html IAM JSON policy elements: Sid>.
+createResourcePolicyStatement_statementId :: Lens.Lens' CreateResourcePolicyStatement Prelude.Text
+createResourcePolicyStatement_statementId = Lens.lens (\CreateResourcePolicyStatement' {statementId} -> statementId) (\s@CreateResourcePolicyStatement' {} a -> s {statementId = a} :: CreateResourcePolicyStatement)
+
+-- | Determines whether the statement allows or denies access to the
+-- resource.
+createResourcePolicyStatement_effect :: Lens.Lens' CreateResourcePolicyStatement Effect
+createResourcePolicyStatement_effect = Lens.lens (\CreateResourcePolicyStatement' {effect} -> effect) (\s@CreateResourcePolicyStatement' {} a -> s {effect = a} :: CreateResourcePolicyStatement)
+
+-- | An IAM principal, such as an IAM users, IAM roles, or AWS services that
+-- is allowed or denied access to a resource. For more information, see
+-- <https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_principal.html AWS JSON policy elements: Principal>.
+createResourcePolicyStatement_principal :: Lens.Lens' CreateResourcePolicyStatement [Principal]
+createResourcePolicyStatement_principal = Lens.lens (\CreateResourcePolicyStatement' {principal} -> principal) (\s@CreateResourcePolicyStatement' {} a -> s {principal = a} :: CreateResourcePolicyStatement) Prelude.. Lens.coerced
+
+-- | The Amazon Lex action that this policy either allows or denies. The
+-- action must apply to the resource type of the specified ARN. For more
+-- information, see
+-- <https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonlexv2.html Actions, resources, and condition keys for Amazon Lex V2>.
+createResourcePolicyStatement_action :: Lens.Lens' CreateResourcePolicyStatement [Prelude.Text]
+createResourcePolicyStatement_action = Lens.lens (\CreateResourcePolicyStatement' {action} -> action) (\s@CreateResourcePolicyStatement' {} a -> s {action = a} :: CreateResourcePolicyStatement) Prelude.. Lens.coerced
+
+instance
+  Core.AWSRequest
+    CreateResourcePolicyStatement
+  where
+  type
+    AWSResponse CreateResourcePolicyStatement =
+      CreateResourcePolicyStatementResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateResourcePolicyStatementResponse'
+            Prelude.<$> (x Data..?> "resourceArn")
+            Prelude.<*> (x Data..?> "revisionId")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    CreateResourcePolicyStatement
+  where
+  hashWithSalt _salt CreateResourcePolicyStatement' {..} =
+    _salt
+      `Prelude.hashWithSalt` condition
+      `Prelude.hashWithSalt` expectedRevisionId
+      `Prelude.hashWithSalt` resourceArn
+      `Prelude.hashWithSalt` statementId
+      `Prelude.hashWithSalt` effect
+      `Prelude.hashWithSalt` principal
+      `Prelude.hashWithSalt` action
+
+instance Prelude.NFData CreateResourcePolicyStatement where
+  rnf CreateResourcePolicyStatement' {..} =
+    Prelude.rnf condition
+      `Prelude.seq` Prelude.rnf expectedRevisionId
+      `Prelude.seq` Prelude.rnf resourceArn
+      `Prelude.seq` Prelude.rnf statementId
+      `Prelude.seq` Prelude.rnf effect
+      `Prelude.seq` Prelude.rnf principal
+      `Prelude.seq` Prelude.rnf action
+
+instance Data.ToHeaders CreateResourcePolicyStatement where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateResourcePolicyStatement where
+  toJSON CreateResourcePolicyStatement' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("condition" Data..=) Prelude.<$> condition,
+            Prelude.Just ("statementId" Data..= statementId),
+            Prelude.Just ("effect" Data..= effect),
+            Prelude.Just ("principal" Data..= principal),
+            Prelude.Just ("action" Data..= action)
+          ]
+      )
+
+instance Data.ToPath CreateResourcePolicyStatement where
+  toPath CreateResourcePolicyStatement' {..} =
+    Prelude.mconcat
+      ["/policy/", Data.toBS resourceArn, "/statements/"]
+
+instance Data.ToQuery CreateResourcePolicyStatement where
+  toQuery CreateResourcePolicyStatement' {..} =
+    Prelude.mconcat
+      ["expectedRevisionId" Data.=: expectedRevisionId]
+
+-- | /See:/ 'newCreateResourcePolicyStatementResponse' smart constructor.
+data CreateResourcePolicyStatementResponse = CreateResourcePolicyStatementResponse'
+  { -- | The Amazon Resource Name (ARN) of the bot or bot alias that the resource
+    -- policy is attached to.
+    resourceArn :: Prelude.Maybe Prelude.Text,
+    -- | The current revision of the resource policy. Use the revision ID to make
+    -- sure that you are updating the most current version of a resource policy
+    -- when you add a policy statement to a resource, delete a resource, or
+    -- update a resource.
+    revisionId :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateResourcePolicyStatementResponse' 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', 'createResourcePolicyStatementResponse_resourceArn' - The Amazon Resource Name (ARN) of the bot or bot alias that the resource
+-- policy is attached to.
+--
+-- 'revisionId', 'createResourcePolicyStatementResponse_revisionId' - The current revision of the resource policy. Use the revision ID to make
+-- sure that you are updating the most current version of a resource policy
+-- when you add a policy statement to a resource, delete a resource, or
+-- update a resource.
+--
+-- 'httpStatus', 'createResourcePolicyStatementResponse_httpStatus' - The response's http status code.
+newCreateResourcePolicyStatementResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateResourcePolicyStatementResponse
+newCreateResourcePolicyStatementResponse pHttpStatus_ =
+  CreateResourcePolicyStatementResponse'
+    { resourceArn =
+        Prelude.Nothing,
+      revisionId = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The Amazon Resource Name (ARN) of the bot or bot alias that the resource
+-- policy is attached to.
+createResourcePolicyStatementResponse_resourceArn :: Lens.Lens' CreateResourcePolicyStatementResponse (Prelude.Maybe Prelude.Text)
+createResourcePolicyStatementResponse_resourceArn = Lens.lens (\CreateResourcePolicyStatementResponse' {resourceArn} -> resourceArn) (\s@CreateResourcePolicyStatementResponse' {} a -> s {resourceArn = a} :: CreateResourcePolicyStatementResponse)
+
+-- | The current revision of the resource policy. Use the revision ID to make
+-- sure that you are updating the most current version of a resource policy
+-- when you add a policy statement to a resource, delete a resource, or
+-- update a resource.
+createResourcePolicyStatementResponse_revisionId :: Lens.Lens' CreateResourcePolicyStatementResponse (Prelude.Maybe Prelude.Text)
+createResourcePolicyStatementResponse_revisionId = Lens.lens (\CreateResourcePolicyStatementResponse' {revisionId} -> revisionId) (\s@CreateResourcePolicyStatementResponse' {} a -> s {revisionId = a} :: CreateResourcePolicyStatementResponse)
+
+-- | The response's http status code.
+createResourcePolicyStatementResponse_httpStatus :: Lens.Lens' CreateResourcePolicyStatementResponse Prelude.Int
+createResourcePolicyStatementResponse_httpStatus = Lens.lens (\CreateResourcePolicyStatementResponse' {httpStatus} -> httpStatus) (\s@CreateResourcePolicyStatementResponse' {} a -> s {httpStatus = a} :: CreateResourcePolicyStatementResponse)
+
+instance
+  Prelude.NFData
+    CreateResourcePolicyStatementResponse
+  where
+  rnf CreateResourcePolicyStatementResponse' {..} =
+    Prelude.rnf resourceArn
+      `Prelude.seq` Prelude.rnf revisionId
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/LexV2Models/CreateSlot.hs b/gen/Amazonka/LexV2Models/CreateSlot.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/CreateSlot.hs
@@ -0,0 +1,535 @@
+{-# 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.LexV2Models.CreateSlot
+-- 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 slot in an intent. A slot is a variable needed to fulfill an
+-- intent. For example, an @OrderPizza@ intent might need slots for size,
+-- crust, and number of pizzas. For each slot, you define one or more
+-- utterances that Amazon Lex uses to elicit a response from the user.
+module Amazonka.LexV2Models.CreateSlot
+  ( -- * Creating a Request
+    CreateSlot (..),
+    newCreateSlot,
+
+    -- * Request Lenses
+    createSlot_description,
+    createSlot_multipleValuesSetting,
+    createSlot_obfuscationSetting,
+    createSlot_slotTypeId,
+    createSlot_subSlotSetting,
+    createSlot_slotName,
+    createSlot_valueElicitationSetting,
+    createSlot_botId,
+    createSlot_botVersion,
+    createSlot_localeId,
+    createSlot_intentId,
+
+    -- * Destructuring the Response
+    CreateSlotResponse (..),
+    newCreateSlotResponse,
+
+    -- * Response Lenses
+    createSlotResponse_botId,
+    createSlotResponse_botVersion,
+    createSlotResponse_creationDateTime,
+    createSlotResponse_description,
+    createSlotResponse_intentId,
+    createSlotResponse_localeId,
+    createSlotResponse_multipleValuesSetting,
+    createSlotResponse_obfuscationSetting,
+    createSlotResponse_slotId,
+    createSlotResponse_slotName,
+    createSlotResponse_slotTypeId,
+    createSlotResponse_subSlotSetting,
+    createSlotResponse_valueElicitationSetting,
+    createSlotResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LexV2Models.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateSlot' smart constructor.
+data CreateSlot = CreateSlot'
+  { -- | A description of the slot. Use this to help identify the slot in lists.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | Indicates whether the slot returns multiple values in one response.
+    -- Multi-value slots are only available in the en-US locale. If you set
+    -- this value to @true@ in any other locale, Amazon Lex throws a
+    -- @ValidationException@.
+    --
+    -- If the @multipleValuesSetting@ is not set, the default value is @false@.
+    multipleValuesSetting :: Prelude.Maybe MultipleValuesSetting,
+    -- | Determines how slot values are used in Amazon CloudWatch logs. If the
+    -- value of the @obfuscationSetting@ parameter is @DefaultObfuscation@,
+    -- slot values are obfuscated in the log output. If the value is @None@,
+    -- the actual value is present in the log output.
+    --
+    -- The default is to obfuscate values in the CloudWatch logs.
+    obfuscationSetting :: Prelude.Maybe ObfuscationSetting,
+    -- | The unique identifier for the slot type associated with this slot. The
+    -- slot type determines the values that can be entered into the slot.
+    slotTypeId :: Prelude.Maybe Prelude.Text,
+    -- | Specifications for the constituent sub slots and the expression for the
+    -- composite slot.
+    subSlotSetting :: Prelude.Maybe SubSlotSetting,
+    -- | The name of the slot. Slot names must be unique within the bot that
+    -- contains the slot.
+    slotName :: Prelude.Text,
+    -- | Specifies prompts that Amazon Lex sends to the user to elicit a response
+    -- that provides the value for the slot.
+    valueElicitationSetting :: SlotValueElicitationSetting,
+    -- | The identifier of the bot associated with the slot.
+    botId :: Prelude.Text,
+    -- | The version of the bot associated with the slot.
+    botVersion :: Prelude.Text,
+    -- | The identifier of the language and locale that the slot will be used in.
+    -- The string must match one of the supported locales. All of the bots,
+    -- intents, slot types used by the slot must have the same locale. For more
+    -- information, see
+    -- <https://docs.aws.amazon.com/lexv2/latest/dg/how-languages.html Supported languages>.
+    localeId :: Prelude.Text,
+    -- | The identifier of the intent that contains the slot.
+    intentId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateSlot' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'description', 'createSlot_description' - A description of the slot. Use this to help identify the slot in lists.
+--
+-- 'multipleValuesSetting', 'createSlot_multipleValuesSetting' - Indicates whether the slot returns multiple values in one response.
+-- Multi-value slots are only available in the en-US locale. If you set
+-- this value to @true@ in any other locale, Amazon Lex throws a
+-- @ValidationException@.
+--
+-- If the @multipleValuesSetting@ is not set, the default value is @false@.
+--
+-- 'obfuscationSetting', 'createSlot_obfuscationSetting' - Determines how slot values are used in Amazon CloudWatch logs. If the
+-- value of the @obfuscationSetting@ parameter is @DefaultObfuscation@,
+-- slot values are obfuscated in the log output. If the value is @None@,
+-- the actual value is present in the log output.
+--
+-- The default is to obfuscate values in the CloudWatch logs.
+--
+-- 'slotTypeId', 'createSlot_slotTypeId' - The unique identifier for the slot type associated with this slot. The
+-- slot type determines the values that can be entered into the slot.
+--
+-- 'subSlotSetting', 'createSlot_subSlotSetting' - Specifications for the constituent sub slots and the expression for the
+-- composite slot.
+--
+-- 'slotName', 'createSlot_slotName' - The name of the slot. Slot names must be unique within the bot that
+-- contains the slot.
+--
+-- 'valueElicitationSetting', 'createSlot_valueElicitationSetting' - Specifies prompts that Amazon Lex sends to the user to elicit a response
+-- that provides the value for the slot.
+--
+-- 'botId', 'createSlot_botId' - The identifier of the bot associated with the slot.
+--
+-- 'botVersion', 'createSlot_botVersion' - The version of the bot associated with the slot.
+--
+-- 'localeId', 'createSlot_localeId' - The identifier of the language and locale that the slot will be used in.
+-- The string must match one of the supported locales. All of the bots,
+-- intents, slot types used by the slot must have the same locale. For more
+-- information, see
+-- <https://docs.aws.amazon.com/lexv2/latest/dg/how-languages.html Supported languages>.
+--
+-- 'intentId', 'createSlot_intentId' - The identifier of the intent that contains the slot.
+newCreateSlot ::
+  -- | 'slotName'
+  Prelude.Text ->
+  -- | 'valueElicitationSetting'
+  SlotValueElicitationSetting ->
+  -- | 'botId'
+  Prelude.Text ->
+  -- | 'botVersion'
+  Prelude.Text ->
+  -- | 'localeId'
+  Prelude.Text ->
+  -- | 'intentId'
+  Prelude.Text ->
+  CreateSlot
+newCreateSlot
+  pSlotName_
+  pValueElicitationSetting_
+  pBotId_
+  pBotVersion_
+  pLocaleId_
+  pIntentId_ =
+    CreateSlot'
+      { description = Prelude.Nothing,
+        multipleValuesSetting = Prelude.Nothing,
+        obfuscationSetting = Prelude.Nothing,
+        slotTypeId = Prelude.Nothing,
+        subSlotSetting = Prelude.Nothing,
+        slotName = pSlotName_,
+        valueElicitationSetting = pValueElicitationSetting_,
+        botId = pBotId_,
+        botVersion = pBotVersion_,
+        localeId = pLocaleId_,
+        intentId = pIntentId_
+      }
+
+-- | A description of the slot. Use this to help identify the slot in lists.
+createSlot_description :: Lens.Lens' CreateSlot (Prelude.Maybe Prelude.Text)
+createSlot_description = Lens.lens (\CreateSlot' {description} -> description) (\s@CreateSlot' {} a -> s {description = a} :: CreateSlot)
+
+-- | Indicates whether the slot returns multiple values in one response.
+-- Multi-value slots are only available in the en-US locale. If you set
+-- this value to @true@ in any other locale, Amazon Lex throws a
+-- @ValidationException@.
+--
+-- If the @multipleValuesSetting@ is not set, the default value is @false@.
+createSlot_multipleValuesSetting :: Lens.Lens' CreateSlot (Prelude.Maybe MultipleValuesSetting)
+createSlot_multipleValuesSetting = Lens.lens (\CreateSlot' {multipleValuesSetting} -> multipleValuesSetting) (\s@CreateSlot' {} a -> s {multipleValuesSetting = a} :: CreateSlot)
+
+-- | Determines how slot values are used in Amazon CloudWatch logs. If the
+-- value of the @obfuscationSetting@ parameter is @DefaultObfuscation@,
+-- slot values are obfuscated in the log output. If the value is @None@,
+-- the actual value is present in the log output.
+--
+-- The default is to obfuscate values in the CloudWatch logs.
+createSlot_obfuscationSetting :: Lens.Lens' CreateSlot (Prelude.Maybe ObfuscationSetting)
+createSlot_obfuscationSetting = Lens.lens (\CreateSlot' {obfuscationSetting} -> obfuscationSetting) (\s@CreateSlot' {} a -> s {obfuscationSetting = a} :: CreateSlot)
+
+-- | The unique identifier for the slot type associated with this slot. The
+-- slot type determines the values that can be entered into the slot.
+createSlot_slotTypeId :: Lens.Lens' CreateSlot (Prelude.Maybe Prelude.Text)
+createSlot_slotTypeId = Lens.lens (\CreateSlot' {slotTypeId} -> slotTypeId) (\s@CreateSlot' {} a -> s {slotTypeId = a} :: CreateSlot)
+
+-- | Specifications for the constituent sub slots and the expression for the
+-- composite slot.
+createSlot_subSlotSetting :: Lens.Lens' CreateSlot (Prelude.Maybe SubSlotSetting)
+createSlot_subSlotSetting = Lens.lens (\CreateSlot' {subSlotSetting} -> subSlotSetting) (\s@CreateSlot' {} a -> s {subSlotSetting = a} :: CreateSlot)
+
+-- | The name of the slot. Slot names must be unique within the bot that
+-- contains the slot.
+createSlot_slotName :: Lens.Lens' CreateSlot Prelude.Text
+createSlot_slotName = Lens.lens (\CreateSlot' {slotName} -> slotName) (\s@CreateSlot' {} a -> s {slotName = a} :: CreateSlot)
+
+-- | Specifies prompts that Amazon Lex sends to the user to elicit a response
+-- that provides the value for the slot.
+createSlot_valueElicitationSetting :: Lens.Lens' CreateSlot SlotValueElicitationSetting
+createSlot_valueElicitationSetting = Lens.lens (\CreateSlot' {valueElicitationSetting} -> valueElicitationSetting) (\s@CreateSlot' {} a -> s {valueElicitationSetting = a} :: CreateSlot)
+
+-- | The identifier of the bot associated with the slot.
+createSlot_botId :: Lens.Lens' CreateSlot Prelude.Text
+createSlot_botId = Lens.lens (\CreateSlot' {botId} -> botId) (\s@CreateSlot' {} a -> s {botId = a} :: CreateSlot)
+
+-- | The version of the bot associated with the slot.
+createSlot_botVersion :: Lens.Lens' CreateSlot Prelude.Text
+createSlot_botVersion = Lens.lens (\CreateSlot' {botVersion} -> botVersion) (\s@CreateSlot' {} a -> s {botVersion = a} :: CreateSlot)
+
+-- | The identifier of the language and locale that the slot will be used in.
+-- The string must match one of the supported locales. All of the bots,
+-- intents, slot types used by the slot must have the same locale. For more
+-- information, see
+-- <https://docs.aws.amazon.com/lexv2/latest/dg/how-languages.html Supported languages>.
+createSlot_localeId :: Lens.Lens' CreateSlot Prelude.Text
+createSlot_localeId = Lens.lens (\CreateSlot' {localeId} -> localeId) (\s@CreateSlot' {} a -> s {localeId = a} :: CreateSlot)
+
+-- | The identifier of the intent that contains the slot.
+createSlot_intentId :: Lens.Lens' CreateSlot Prelude.Text
+createSlot_intentId = Lens.lens (\CreateSlot' {intentId} -> intentId) (\s@CreateSlot' {} a -> s {intentId = a} :: CreateSlot)
+
+instance Core.AWSRequest CreateSlot where
+  type AWSResponse CreateSlot = CreateSlotResponse
+  request overrides =
+    Request.putJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateSlotResponse'
+            Prelude.<$> (x Data..?> "botId")
+            Prelude.<*> (x Data..?> "botVersion")
+            Prelude.<*> (x Data..?> "creationDateTime")
+            Prelude.<*> (x Data..?> "description")
+            Prelude.<*> (x Data..?> "intentId")
+            Prelude.<*> (x Data..?> "localeId")
+            Prelude.<*> (x Data..?> "multipleValuesSetting")
+            Prelude.<*> (x Data..?> "obfuscationSetting")
+            Prelude.<*> (x Data..?> "slotId")
+            Prelude.<*> (x Data..?> "slotName")
+            Prelude.<*> (x Data..?> "slotTypeId")
+            Prelude.<*> (x Data..?> "subSlotSetting")
+            Prelude.<*> (x Data..?> "valueElicitationSetting")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateSlot where
+  hashWithSalt _salt CreateSlot' {..} =
+    _salt
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` multipleValuesSetting
+      `Prelude.hashWithSalt` obfuscationSetting
+      `Prelude.hashWithSalt` slotTypeId
+      `Prelude.hashWithSalt` subSlotSetting
+      `Prelude.hashWithSalt` slotName
+      `Prelude.hashWithSalt` valueElicitationSetting
+      `Prelude.hashWithSalt` botId
+      `Prelude.hashWithSalt` botVersion
+      `Prelude.hashWithSalt` localeId
+      `Prelude.hashWithSalt` intentId
+
+instance Prelude.NFData CreateSlot where
+  rnf CreateSlot' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf multipleValuesSetting
+      `Prelude.seq` Prelude.rnf obfuscationSetting
+      `Prelude.seq` Prelude.rnf slotTypeId
+      `Prelude.seq` Prelude.rnf subSlotSetting
+      `Prelude.seq` Prelude.rnf slotName
+      `Prelude.seq` Prelude.rnf valueElicitationSetting
+      `Prelude.seq` Prelude.rnf botId
+      `Prelude.seq` Prelude.rnf botVersion
+      `Prelude.seq` Prelude.rnf localeId
+      `Prelude.seq` Prelude.rnf intentId
+
+instance Data.ToHeaders CreateSlot where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateSlot where
+  toJSON CreateSlot' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("description" Data..=) Prelude.<$> description,
+            ("multipleValuesSetting" Data..=)
+              Prelude.<$> multipleValuesSetting,
+            ("obfuscationSetting" Data..=)
+              Prelude.<$> obfuscationSetting,
+            ("slotTypeId" Data..=) Prelude.<$> slotTypeId,
+            ("subSlotSetting" Data..=)
+              Prelude.<$> subSlotSetting,
+            Prelude.Just ("slotName" Data..= slotName),
+            Prelude.Just
+              ( "valueElicitationSetting"
+                  Data..= valueElicitationSetting
+              )
+          ]
+      )
+
+instance Data.ToPath CreateSlot where
+  toPath CreateSlot' {..} =
+    Prelude.mconcat
+      [ "/bots/",
+        Data.toBS botId,
+        "/botversions/",
+        Data.toBS botVersion,
+        "/botlocales/",
+        Data.toBS localeId,
+        "/intents/",
+        Data.toBS intentId,
+        "/slots/"
+      ]
+
+instance Data.ToQuery CreateSlot where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateSlotResponse' smart constructor.
+data CreateSlotResponse = CreateSlotResponse'
+  { -- | The unique identifier of the bot associated with the slot.
+    botId :: Prelude.Maybe Prelude.Text,
+    -- | The version of the bot associated with the slot.
+    botVersion :: Prelude.Maybe Prelude.Text,
+    -- | The timestamp of the date and time that the slot was created.
+    creationDateTime :: Prelude.Maybe Data.POSIX,
+    -- | The description associated with the slot.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The unique identifier of the intent associated with the slot.
+    intentId :: Prelude.Maybe Prelude.Text,
+    -- | The language and local specified for the slot.
+    localeId :: Prelude.Maybe Prelude.Text,
+    -- | Indicates whether the slot returns multiple values in one response.
+    multipleValuesSetting :: Prelude.Maybe MultipleValuesSetting,
+    -- | Indicates whether the slot is configured to obfuscate values in Amazon
+    -- CloudWatch logs.
+    obfuscationSetting :: Prelude.Maybe ObfuscationSetting,
+    -- | The unique identifier associated with the slot. Use this to identify the
+    -- slot when you update or delete it.
+    slotId :: Prelude.Maybe Prelude.Text,
+    -- | The name specified for the slot.
+    slotName :: Prelude.Maybe Prelude.Text,
+    -- | The unique identifier of the slot type associated with this slot.
+    slotTypeId :: Prelude.Maybe Prelude.Text,
+    -- | Specifications for the constituent sub slots and the expression for the
+    -- composite slot.
+    subSlotSetting :: Prelude.Maybe SubSlotSetting,
+    -- | The value elicitation settings specified for the slot.
+    valueElicitationSetting :: Prelude.Maybe SlotValueElicitationSetting,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateSlotResponse' 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:
+--
+-- 'botId', 'createSlotResponse_botId' - The unique identifier of the bot associated with the slot.
+--
+-- 'botVersion', 'createSlotResponse_botVersion' - The version of the bot associated with the slot.
+--
+-- 'creationDateTime', 'createSlotResponse_creationDateTime' - The timestamp of the date and time that the slot was created.
+--
+-- 'description', 'createSlotResponse_description' - The description associated with the slot.
+--
+-- 'intentId', 'createSlotResponse_intentId' - The unique identifier of the intent associated with the slot.
+--
+-- 'localeId', 'createSlotResponse_localeId' - The language and local specified for the slot.
+--
+-- 'multipleValuesSetting', 'createSlotResponse_multipleValuesSetting' - Indicates whether the slot returns multiple values in one response.
+--
+-- 'obfuscationSetting', 'createSlotResponse_obfuscationSetting' - Indicates whether the slot is configured to obfuscate values in Amazon
+-- CloudWatch logs.
+--
+-- 'slotId', 'createSlotResponse_slotId' - The unique identifier associated with the slot. Use this to identify the
+-- slot when you update or delete it.
+--
+-- 'slotName', 'createSlotResponse_slotName' - The name specified for the slot.
+--
+-- 'slotTypeId', 'createSlotResponse_slotTypeId' - The unique identifier of the slot type associated with this slot.
+--
+-- 'subSlotSetting', 'createSlotResponse_subSlotSetting' - Specifications for the constituent sub slots and the expression for the
+-- composite slot.
+--
+-- 'valueElicitationSetting', 'createSlotResponse_valueElicitationSetting' - The value elicitation settings specified for the slot.
+--
+-- 'httpStatus', 'createSlotResponse_httpStatus' - The response's http status code.
+newCreateSlotResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateSlotResponse
+newCreateSlotResponse pHttpStatus_ =
+  CreateSlotResponse'
+    { botId = Prelude.Nothing,
+      botVersion = Prelude.Nothing,
+      creationDateTime = Prelude.Nothing,
+      description = Prelude.Nothing,
+      intentId = Prelude.Nothing,
+      localeId = Prelude.Nothing,
+      multipleValuesSetting = Prelude.Nothing,
+      obfuscationSetting = Prelude.Nothing,
+      slotId = Prelude.Nothing,
+      slotName = Prelude.Nothing,
+      slotTypeId = Prelude.Nothing,
+      subSlotSetting = Prelude.Nothing,
+      valueElicitationSetting = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The unique identifier of the bot associated with the slot.
+createSlotResponse_botId :: Lens.Lens' CreateSlotResponse (Prelude.Maybe Prelude.Text)
+createSlotResponse_botId = Lens.lens (\CreateSlotResponse' {botId} -> botId) (\s@CreateSlotResponse' {} a -> s {botId = a} :: CreateSlotResponse)
+
+-- | The version of the bot associated with the slot.
+createSlotResponse_botVersion :: Lens.Lens' CreateSlotResponse (Prelude.Maybe Prelude.Text)
+createSlotResponse_botVersion = Lens.lens (\CreateSlotResponse' {botVersion} -> botVersion) (\s@CreateSlotResponse' {} a -> s {botVersion = a} :: CreateSlotResponse)
+
+-- | The timestamp of the date and time that the slot was created.
+createSlotResponse_creationDateTime :: Lens.Lens' CreateSlotResponse (Prelude.Maybe Prelude.UTCTime)
+createSlotResponse_creationDateTime = Lens.lens (\CreateSlotResponse' {creationDateTime} -> creationDateTime) (\s@CreateSlotResponse' {} a -> s {creationDateTime = a} :: CreateSlotResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The description associated with the slot.
+createSlotResponse_description :: Lens.Lens' CreateSlotResponse (Prelude.Maybe Prelude.Text)
+createSlotResponse_description = Lens.lens (\CreateSlotResponse' {description} -> description) (\s@CreateSlotResponse' {} a -> s {description = a} :: CreateSlotResponse)
+
+-- | The unique identifier of the intent associated with the slot.
+createSlotResponse_intentId :: Lens.Lens' CreateSlotResponse (Prelude.Maybe Prelude.Text)
+createSlotResponse_intentId = Lens.lens (\CreateSlotResponse' {intentId} -> intentId) (\s@CreateSlotResponse' {} a -> s {intentId = a} :: CreateSlotResponse)
+
+-- | The language and local specified for the slot.
+createSlotResponse_localeId :: Lens.Lens' CreateSlotResponse (Prelude.Maybe Prelude.Text)
+createSlotResponse_localeId = Lens.lens (\CreateSlotResponse' {localeId} -> localeId) (\s@CreateSlotResponse' {} a -> s {localeId = a} :: CreateSlotResponse)
+
+-- | Indicates whether the slot returns multiple values in one response.
+createSlotResponse_multipleValuesSetting :: Lens.Lens' CreateSlotResponse (Prelude.Maybe MultipleValuesSetting)
+createSlotResponse_multipleValuesSetting = Lens.lens (\CreateSlotResponse' {multipleValuesSetting} -> multipleValuesSetting) (\s@CreateSlotResponse' {} a -> s {multipleValuesSetting = a} :: CreateSlotResponse)
+
+-- | Indicates whether the slot is configured to obfuscate values in Amazon
+-- CloudWatch logs.
+createSlotResponse_obfuscationSetting :: Lens.Lens' CreateSlotResponse (Prelude.Maybe ObfuscationSetting)
+createSlotResponse_obfuscationSetting = Lens.lens (\CreateSlotResponse' {obfuscationSetting} -> obfuscationSetting) (\s@CreateSlotResponse' {} a -> s {obfuscationSetting = a} :: CreateSlotResponse)
+
+-- | The unique identifier associated with the slot. Use this to identify the
+-- slot when you update or delete it.
+createSlotResponse_slotId :: Lens.Lens' CreateSlotResponse (Prelude.Maybe Prelude.Text)
+createSlotResponse_slotId = Lens.lens (\CreateSlotResponse' {slotId} -> slotId) (\s@CreateSlotResponse' {} a -> s {slotId = a} :: CreateSlotResponse)
+
+-- | The name specified for the slot.
+createSlotResponse_slotName :: Lens.Lens' CreateSlotResponse (Prelude.Maybe Prelude.Text)
+createSlotResponse_slotName = Lens.lens (\CreateSlotResponse' {slotName} -> slotName) (\s@CreateSlotResponse' {} a -> s {slotName = a} :: CreateSlotResponse)
+
+-- | The unique identifier of the slot type associated with this slot.
+createSlotResponse_slotTypeId :: Lens.Lens' CreateSlotResponse (Prelude.Maybe Prelude.Text)
+createSlotResponse_slotTypeId = Lens.lens (\CreateSlotResponse' {slotTypeId} -> slotTypeId) (\s@CreateSlotResponse' {} a -> s {slotTypeId = a} :: CreateSlotResponse)
+
+-- | Specifications for the constituent sub slots and the expression for the
+-- composite slot.
+createSlotResponse_subSlotSetting :: Lens.Lens' CreateSlotResponse (Prelude.Maybe SubSlotSetting)
+createSlotResponse_subSlotSetting = Lens.lens (\CreateSlotResponse' {subSlotSetting} -> subSlotSetting) (\s@CreateSlotResponse' {} a -> s {subSlotSetting = a} :: CreateSlotResponse)
+
+-- | The value elicitation settings specified for the slot.
+createSlotResponse_valueElicitationSetting :: Lens.Lens' CreateSlotResponse (Prelude.Maybe SlotValueElicitationSetting)
+createSlotResponse_valueElicitationSetting = Lens.lens (\CreateSlotResponse' {valueElicitationSetting} -> valueElicitationSetting) (\s@CreateSlotResponse' {} a -> s {valueElicitationSetting = a} :: CreateSlotResponse)
+
+-- | The response's http status code.
+createSlotResponse_httpStatus :: Lens.Lens' CreateSlotResponse Prelude.Int
+createSlotResponse_httpStatus = Lens.lens (\CreateSlotResponse' {httpStatus} -> httpStatus) (\s@CreateSlotResponse' {} a -> s {httpStatus = a} :: CreateSlotResponse)
+
+instance Prelude.NFData CreateSlotResponse where
+  rnf CreateSlotResponse' {..} =
+    Prelude.rnf botId
+      `Prelude.seq` Prelude.rnf botVersion
+      `Prelude.seq` Prelude.rnf creationDateTime
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf intentId
+      `Prelude.seq` Prelude.rnf localeId
+      `Prelude.seq` Prelude.rnf multipleValuesSetting
+      `Prelude.seq` Prelude.rnf obfuscationSetting
+      `Prelude.seq` Prelude.rnf slotId
+      `Prelude.seq` Prelude.rnf slotName
+      `Prelude.seq` Prelude.rnf slotTypeId
+      `Prelude.seq` Prelude.rnf subSlotSetting
+      `Prelude.seq` Prelude.rnf valueElicitationSetting
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/LexV2Models/CreateSlotType.hs b/gen/Amazonka/LexV2Models/CreateSlotType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/CreateSlotType.hs
@@ -0,0 +1,523 @@
+{-# 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.LexV2Models.CreateSlotType
+-- 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 custom slot type
+--
+-- To create a custom slot type, specify a name for the slot type and a set
+-- of enumeration values, the values that a slot of this type can assume.
+module Amazonka.LexV2Models.CreateSlotType
+  ( -- * Creating a Request
+    CreateSlotType (..),
+    newCreateSlotType,
+
+    -- * Request Lenses
+    createSlotType_compositeSlotTypeSetting,
+    createSlotType_description,
+    createSlotType_externalSourceSetting,
+    createSlotType_parentSlotTypeSignature,
+    createSlotType_slotTypeValues,
+    createSlotType_valueSelectionSetting,
+    createSlotType_slotTypeName,
+    createSlotType_botId,
+    createSlotType_botVersion,
+    createSlotType_localeId,
+
+    -- * Destructuring the Response
+    CreateSlotTypeResponse (..),
+    newCreateSlotTypeResponse,
+
+    -- * Response Lenses
+    createSlotTypeResponse_botId,
+    createSlotTypeResponse_botVersion,
+    createSlotTypeResponse_compositeSlotTypeSetting,
+    createSlotTypeResponse_creationDateTime,
+    createSlotTypeResponse_description,
+    createSlotTypeResponse_externalSourceSetting,
+    createSlotTypeResponse_localeId,
+    createSlotTypeResponse_parentSlotTypeSignature,
+    createSlotTypeResponse_slotTypeId,
+    createSlotTypeResponse_slotTypeName,
+    createSlotTypeResponse_slotTypeValues,
+    createSlotTypeResponse_valueSelectionSetting,
+    createSlotTypeResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LexV2Models.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateSlotType' smart constructor.
+data CreateSlotType = CreateSlotType'
+  { -- | Specifications for a composite slot type.
+    compositeSlotTypeSetting :: Prelude.Maybe CompositeSlotTypeSetting,
+    -- | A description of the slot type. Use the description to help identify the
+    -- slot type in lists.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | Sets the type of external information used to create the slot type.
+    externalSourceSetting :: Prelude.Maybe ExternalSourceSetting,
+    -- | The built-in slot type used as a parent of this slot type. When you
+    -- define a parent slot type, the new slot type has the configuration of
+    -- the parent slot type.
+    --
+    -- Only @AMAZON.AlphaNumeric@ is supported.
+    parentSlotTypeSignature :: Prelude.Maybe Prelude.Text,
+    -- | A list of @SlotTypeValue@ objects that defines the values that the slot
+    -- type can take. Each value can have a list of synonyms, additional values
+    -- that help train the machine learning model about the values that it
+    -- resolves for a slot.
+    slotTypeValues :: Prelude.Maybe (Prelude.NonEmpty SlotTypeValue),
+    -- | Determines the strategy that Amazon Lex uses to select a value from the
+    -- list of possible values. The field can be set to one of the following
+    -- values:
+    --
+    -- -   @OriginalValue@ - Returns the value entered by the user, if the user
+    --     value is similar to the slot value.
+    --
+    -- -   @TopResolution@ - If there is a resolution list for the slot, return
+    --     the first value in the resolution list. If there is no resolution
+    --     list, return null.
+    --
+    -- If you don\'t specify the @valueSelectionSetting@ parameter, the default
+    -- is @OriginalValue@.
+    valueSelectionSetting :: Prelude.Maybe SlotValueSelectionSetting,
+    -- | The name for the slot. A slot type name must be unique within the
+    -- account.
+    slotTypeName :: Prelude.Text,
+    -- | The identifier of the bot associated with this slot type.
+    botId :: Prelude.Text,
+    -- | The identifier of the bot version associated with this slot type.
+    botVersion :: Prelude.Text,
+    -- | The identifier of the language and locale that the slot type will be
+    -- used in. The string must match one of the supported locales. All of the
+    -- bots, intents, and slots used by the slot type must have the same
+    -- locale. For more information, see
+    -- <https://docs.aws.amazon.com/lexv2/latest/dg/how-languages.html Supported languages>.
+    localeId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateSlotType' 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:
+--
+-- 'compositeSlotTypeSetting', 'createSlotType_compositeSlotTypeSetting' - Specifications for a composite slot type.
+--
+-- 'description', 'createSlotType_description' - A description of the slot type. Use the description to help identify the
+-- slot type in lists.
+--
+-- 'externalSourceSetting', 'createSlotType_externalSourceSetting' - Sets the type of external information used to create the slot type.
+--
+-- 'parentSlotTypeSignature', 'createSlotType_parentSlotTypeSignature' - The built-in slot type used as a parent of this slot type. When you
+-- define a parent slot type, the new slot type has the configuration of
+-- the parent slot type.
+--
+-- Only @AMAZON.AlphaNumeric@ is supported.
+--
+-- 'slotTypeValues', 'createSlotType_slotTypeValues' - A list of @SlotTypeValue@ objects that defines the values that the slot
+-- type can take. Each value can have a list of synonyms, additional values
+-- that help train the machine learning model about the values that it
+-- resolves for a slot.
+--
+-- 'valueSelectionSetting', 'createSlotType_valueSelectionSetting' - Determines the strategy that Amazon Lex uses to select a value from the
+-- list of possible values. The field can be set to one of the following
+-- values:
+--
+-- -   @OriginalValue@ - Returns the value entered by the user, if the user
+--     value is similar to the slot value.
+--
+-- -   @TopResolution@ - If there is a resolution list for the slot, return
+--     the first value in the resolution list. If there is no resolution
+--     list, return null.
+--
+-- If you don\'t specify the @valueSelectionSetting@ parameter, the default
+-- is @OriginalValue@.
+--
+-- 'slotTypeName', 'createSlotType_slotTypeName' - The name for the slot. A slot type name must be unique within the
+-- account.
+--
+-- 'botId', 'createSlotType_botId' - The identifier of the bot associated with this slot type.
+--
+-- 'botVersion', 'createSlotType_botVersion' - The identifier of the bot version associated with this slot type.
+--
+-- 'localeId', 'createSlotType_localeId' - The identifier of the language and locale that the slot type will be
+-- used in. The string must match one of the supported locales. All of the
+-- bots, intents, and slots used by the slot type must have the same
+-- locale. For more information, see
+-- <https://docs.aws.amazon.com/lexv2/latest/dg/how-languages.html Supported languages>.
+newCreateSlotType ::
+  -- | 'slotTypeName'
+  Prelude.Text ->
+  -- | 'botId'
+  Prelude.Text ->
+  -- | 'botVersion'
+  Prelude.Text ->
+  -- | 'localeId'
+  Prelude.Text ->
+  CreateSlotType
+newCreateSlotType
+  pSlotTypeName_
+  pBotId_
+  pBotVersion_
+  pLocaleId_ =
+    CreateSlotType'
+      { compositeSlotTypeSetting =
+          Prelude.Nothing,
+        description = Prelude.Nothing,
+        externalSourceSetting = Prelude.Nothing,
+        parentSlotTypeSignature = Prelude.Nothing,
+        slotTypeValues = Prelude.Nothing,
+        valueSelectionSetting = Prelude.Nothing,
+        slotTypeName = pSlotTypeName_,
+        botId = pBotId_,
+        botVersion = pBotVersion_,
+        localeId = pLocaleId_
+      }
+
+-- | Specifications for a composite slot type.
+createSlotType_compositeSlotTypeSetting :: Lens.Lens' CreateSlotType (Prelude.Maybe CompositeSlotTypeSetting)
+createSlotType_compositeSlotTypeSetting = Lens.lens (\CreateSlotType' {compositeSlotTypeSetting} -> compositeSlotTypeSetting) (\s@CreateSlotType' {} a -> s {compositeSlotTypeSetting = a} :: CreateSlotType)
+
+-- | A description of the slot type. Use the description to help identify the
+-- slot type in lists.
+createSlotType_description :: Lens.Lens' CreateSlotType (Prelude.Maybe Prelude.Text)
+createSlotType_description = Lens.lens (\CreateSlotType' {description} -> description) (\s@CreateSlotType' {} a -> s {description = a} :: CreateSlotType)
+
+-- | Sets the type of external information used to create the slot type.
+createSlotType_externalSourceSetting :: Lens.Lens' CreateSlotType (Prelude.Maybe ExternalSourceSetting)
+createSlotType_externalSourceSetting = Lens.lens (\CreateSlotType' {externalSourceSetting} -> externalSourceSetting) (\s@CreateSlotType' {} a -> s {externalSourceSetting = a} :: CreateSlotType)
+
+-- | The built-in slot type used as a parent of this slot type. When you
+-- define a parent slot type, the new slot type has the configuration of
+-- the parent slot type.
+--
+-- Only @AMAZON.AlphaNumeric@ is supported.
+createSlotType_parentSlotTypeSignature :: Lens.Lens' CreateSlotType (Prelude.Maybe Prelude.Text)
+createSlotType_parentSlotTypeSignature = Lens.lens (\CreateSlotType' {parentSlotTypeSignature} -> parentSlotTypeSignature) (\s@CreateSlotType' {} a -> s {parentSlotTypeSignature = a} :: CreateSlotType)
+
+-- | A list of @SlotTypeValue@ objects that defines the values that the slot
+-- type can take. Each value can have a list of synonyms, additional values
+-- that help train the machine learning model about the values that it
+-- resolves for a slot.
+createSlotType_slotTypeValues :: Lens.Lens' CreateSlotType (Prelude.Maybe (Prelude.NonEmpty SlotTypeValue))
+createSlotType_slotTypeValues = Lens.lens (\CreateSlotType' {slotTypeValues} -> slotTypeValues) (\s@CreateSlotType' {} a -> s {slotTypeValues = a} :: CreateSlotType) Prelude.. Lens.mapping Lens.coerced
+
+-- | Determines the strategy that Amazon Lex uses to select a value from the
+-- list of possible values. The field can be set to one of the following
+-- values:
+--
+-- -   @OriginalValue@ - Returns the value entered by the user, if the user
+--     value is similar to the slot value.
+--
+-- -   @TopResolution@ - If there is a resolution list for the slot, return
+--     the first value in the resolution list. If there is no resolution
+--     list, return null.
+--
+-- If you don\'t specify the @valueSelectionSetting@ parameter, the default
+-- is @OriginalValue@.
+createSlotType_valueSelectionSetting :: Lens.Lens' CreateSlotType (Prelude.Maybe SlotValueSelectionSetting)
+createSlotType_valueSelectionSetting = Lens.lens (\CreateSlotType' {valueSelectionSetting} -> valueSelectionSetting) (\s@CreateSlotType' {} a -> s {valueSelectionSetting = a} :: CreateSlotType)
+
+-- | The name for the slot. A slot type name must be unique within the
+-- account.
+createSlotType_slotTypeName :: Lens.Lens' CreateSlotType Prelude.Text
+createSlotType_slotTypeName = Lens.lens (\CreateSlotType' {slotTypeName} -> slotTypeName) (\s@CreateSlotType' {} a -> s {slotTypeName = a} :: CreateSlotType)
+
+-- | The identifier of the bot associated with this slot type.
+createSlotType_botId :: Lens.Lens' CreateSlotType Prelude.Text
+createSlotType_botId = Lens.lens (\CreateSlotType' {botId} -> botId) (\s@CreateSlotType' {} a -> s {botId = a} :: CreateSlotType)
+
+-- | The identifier of the bot version associated with this slot type.
+createSlotType_botVersion :: Lens.Lens' CreateSlotType Prelude.Text
+createSlotType_botVersion = Lens.lens (\CreateSlotType' {botVersion} -> botVersion) (\s@CreateSlotType' {} a -> s {botVersion = a} :: CreateSlotType)
+
+-- | The identifier of the language and locale that the slot type will be
+-- used in. The string must match one of the supported locales. All of the
+-- bots, intents, and slots used by the slot type must have the same
+-- locale. For more information, see
+-- <https://docs.aws.amazon.com/lexv2/latest/dg/how-languages.html Supported languages>.
+createSlotType_localeId :: Lens.Lens' CreateSlotType Prelude.Text
+createSlotType_localeId = Lens.lens (\CreateSlotType' {localeId} -> localeId) (\s@CreateSlotType' {} a -> s {localeId = a} :: CreateSlotType)
+
+instance Core.AWSRequest CreateSlotType where
+  type
+    AWSResponse CreateSlotType =
+      CreateSlotTypeResponse
+  request overrides =
+    Request.putJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateSlotTypeResponse'
+            Prelude.<$> (x Data..?> "botId")
+            Prelude.<*> (x Data..?> "botVersion")
+            Prelude.<*> (x Data..?> "compositeSlotTypeSetting")
+            Prelude.<*> (x Data..?> "creationDateTime")
+            Prelude.<*> (x Data..?> "description")
+            Prelude.<*> (x Data..?> "externalSourceSetting")
+            Prelude.<*> (x Data..?> "localeId")
+            Prelude.<*> (x Data..?> "parentSlotTypeSignature")
+            Prelude.<*> (x Data..?> "slotTypeId")
+            Prelude.<*> (x Data..?> "slotTypeName")
+            Prelude.<*> (x Data..?> "slotTypeValues")
+            Prelude.<*> (x Data..?> "valueSelectionSetting")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateSlotType where
+  hashWithSalt _salt CreateSlotType' {..} =
+    _salt
+      `Prelude.hashWithSalt` compositeSlotTypeSetting
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` externalSourceSetting
+      `Prelude.hashWithSalt` parentSlotTypeSignature
+      `Prelude.hashWithSalt` slotTypeValues
+      `Prelude.hashWithSalt` valueSelectionSetting
+      `Prelude.hashWithSalt` slotTypeName
+      `Prelude.hashWithSalt` botId
+      `Prelude.hashWithSalt` botVersion
+      `Prelude.hashWithSalt` localeId
+
+instance Prelude.NFData CreateSlotType where
+  rnf CreateSlotType' {..} =
+    Prelude.rnf compositeSlotTypeSetting
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf externalSourceSetting
+      `Prelude.seq` Prelude.rnf parentSlotTypeSignature
+      `Prelude.seq` Prelude.rnf slotTypeValues
+      `Prelude.seq` Prelude.rnf valueSelectionSetting
+      `Prelude.seq` Prelude.rnf slotTypeName
+      `Prelude.seq` Prelude.rnf botId
+      `Prelude.seq` Prelude.rnf botVersion
+      `Prelude.seq` Prelude.rnf localeId
+
+instance Data.ToHeaders CreateSlotType where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateSlotType where
+  toJSON CreateSlotType' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("compositeSlotTypeSetting" Data..=)
+              Prelude.<$> compositeSlotTypeSetting,
+            ("description" Data..=) Prelude.<$> description,
+            ("externalSourceSetting" Data..=)
+              Prelude.<$> externalSourceSetting,
+            ("parentSlotTypeSignature" Data..=)
+              Prelude.<$> parentSlotTypeSignature,
+            ("slotTypeValues" Data..=)
+              Prelude.<$> slotTypeValues,
+            ("valueSelectionSetting" Data..=)
+              Prelude.<$> valueSelectionSetting,
+            Prelude.Just ("slotTypeName" Data..= slotTypeName)
+          ]
+      )
+
+instance Data.ToPath CreateSlotType where
+  toPath CreateSlotType' {..} =
+    Prelude.mconcat
+      [ "/bots/",
+        Data.toBS botId,
+        "/botversions/",
+        Data.toBS botVersion,
+        "/botlocales/",
+        Data.toBS localeId,
+        "/slottypes/"
+      ]
+
+instance Data.ToQuery CreateSlotType where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateSlotTypeResponse' smart constructor.
+data CreateSlotTypeResponse = CreateSlotTypeResponse'
+  { -- | The identifier for the bot associated with the slot type.
+    botId :: Prelude.Maybe Prelude.Text,
+    -- | The version of the bot associated with the slot type.
+    botVersion :: Prelude.Maybe Prelude.Text,
+    -- | Specifications for a composite slot type.
+    compositeSlotTypeSetting :: Prelude.Maybe CompositeSlotTypeSetting,
+    -- | A timestamp of the date and time that the slot type was created.
+    creationDateTime :: Prelude.Maybe Data.POSIX,
+    -- | The description specified for the slot type.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The type of external information used to create the slot type.
+    externalSourceSetting :: Prelude.Maybe ExternalSourceSetting,
+    -- | The specified language and local specified for the slot type.
+    localeId :: Prelude.Maybe Prelude.Text,
+    -- | The signature of the base slot type specified for the slot type.
+    parentSlotTypeSignature :: Prelude.Maybe Prelude.Text,
+    -- | The unique identifier assigned to the slot type. Use this to identify
+    -- the slot type in the @UpdateSlotType@ and @DeleteSlotType@ operations.
+    slotTypeId :: Prelude.Maybe Prelude.Text,
+    -- | The name specified for the slot type.
+    slotTypeName :: Prelude.Maybe Prelude.Text,
+    -- | The list of values that the slot type can assume.
+    slotTypeValues :: Prelude.Maybe (Prelude.NonEmpty SlotTypeValue),
+    -- | The strategy that Amazon Lex uses to select a value from the list of
+    -- possible values.
+    valueSelectionSetting :: Prelude.Maybe SlotValueSelectionSetting,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateSlotTypeResponse' 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:
+--
+-- 'botId', 'createSlotTypeResponse_botId' - The identifier for the bot associated with the slot type.
+--
+-- 'botVersion', 'createSlotTypeResponse_botVersion' - The version of the bot associated with the slot type.
+--
+-- 'compositeSlotTypeSetting', 'createSlotTypeResponse_compositeSlotTypeSetting' - Specifications for a composite slot type.
+--
+-- 'creationDateTime', 'createSlotTypeResponse_creationDateTime' - A timestamp of the date and time that the slot type was created.
+--
+-- 'description', 'createSlotTypeResponse_description' - The description specified for the slot type.
+--
+-- 'externalSourceSetting', 'createSlotTypeResponse_externalSourceSetting' - The type of external information used to create the slot type.
+--
+-- 'localeId', 'createSlotTypeResponse_localeId' - The specified language and local specified for the slot type.
+--
+-- 'parentSlotTypeSignature', 'createSlotTypeResponse_parentSlotTypeSignature' - The signature of the base slot type specified for the slot type.
+--
+-- 'slotTypeId', 'createSlotTypeResponse_slotTypeId' - The unique identifier assigned to the slot type. Use this to identify
+-- the slot type in the @UpdateSlotType@ and @DeleteSlotType@ operations.
+--
+-- 'slotTypeName', 'createSlotTypeResponse_slotTypeName' - The name specified for the slot type.
+--
+-- 'slotTypeValues', 'createSlotTypeResponse_slotTypeValues' - The list of values that the slot type can assume.
+--
+-- 'valueSelectionSetting', 'createSlotTypeResponse_valueSelectionSetting' - The strategy that Amazon Lex uses to select a value from the list of
+-- possible values.
+--
+-- 'httpStatus', 'createSlotTypeResponse_httpStatus' - The response's http status code.
+newCreateSlotTypeResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateSlotTypeResponse
+newCreateSlotTypeResponse pHttpStatus_ =
+  CreateSlotTypeResponse'
+    { botId = Prelude.Nothing,
+      botVersion = Prelude.Nothing,
+      compositeSlotTypeSetting = Prelude.Nothing,
+      creationDateTime = Prelude.Nothing,
+      description = Prelude.Nothing,
+      externalSourceSetting = Prelude.Nothing,
+      localeId = Prelude.Nothing,
+      parentSlotTypeSignature = Prelude.Nothing,
+      slotTypeId = Prelude.Nothing,
+      slotTypeName = Prelude.Nothing,
+      slotTypeValues = Prelude.Nothing,
+      valueSelectionSetting = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The identifier for the bot associated with the slot type.
+createSlotTypeResponse_botId :: Lens.Lens' CreateSlotTypeResponse (Prelude.Maybe Prelude.Text)
+createSlotTypeResponse_botId = Lens.lens (\CreateSlotTypeResponse' {botId} -> botId) (\s@CreateSlotTypeResponse' {} a -> s {botId = a} :: CreateSlotTypeResponse)
+
+-- | The version of the bot associated with the slot type.
+createSlotTypeResponse_botVersion :: Lens.Lens' CreateSlotTypeResponse (Prelude.Maybe Prelude.Text)
+createSlotTypeResponse_botVersion = Lens.lens (\CreateSlotTypeResponse' {botVersion} -> botVersion) (\s@CreateSlotTypeResponse' {} a -> s {botVersion = a} :: CreateSlotTypeResponse)
+
+-- | Specifications for a composite slot type.
+createSlotTypeResponse_compositeSlotTypeSetting :: Lens.Lens' CreateSlotTypeResponse (Prelude.Maybe CompositeSlotTypeSetting)
+createSlotTypeResponse_compositeSlotTypeSetting = Lens.lens (\CreateSlotTypeResponse' {compositeSlotTypeSetting} -> compositeSlotTypeSetting) (\s@CreateSlotTypeResponse' {} a -> s {compositeSlotTypeSetting = a} :: CreateSlotTypeResponse)
+
+-- | A timestamp of the date and time that the slot type was created.
+createSlotTypeResponse_creationDateTime :: Lens.Lens' CreateSlotTypeResponse (Prelude.Maybe Prelude.UTCTime)
+createSlotTypeResponse_creationDateTime = Lens.lens (\CreateSlotTypeResponse' {creationDateTime} -> creationDateTime) (\s@CreateSlotTypeResponse' {} a -> s {creationDateTime = a} :: CreateSlotTypeResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The description specified for the slot type.
+createSlotTypeResponse_description :: Lens.Lens' CreateSlotTypeResponse (Prelude.Maybe Prelude.Text)
+createSlotTypeResponse_description = Lens.lens (\CreateSlotTypeResponse' {description} -> description) (\s@CreateSlotTypeResponse' {} a -> s {description = a} :: CreateSlotTypeResponse)
+
+-- | The type of external information used to create the slot type.
+createSlotTypeResponse_externalSourceSetting :: Lens.Lens' CreateSlotTypeResponse (Prelude.Maybe ExternalSourceSetting)
+createSlotTypeResponse_externalSourceSetting = Lens.lens (\CreateSlotTypeResponse' {externalSourceSetting} -> externalSourceSetting) (\s@CreateSlotTypeResponse' {} a -> s {externalSourceSetting = a} :: CreateSlotTypeResponse)
+
+-- | The specified language and local specified for the slot type.
+createSlotTypeResponse_localeId :: Lens.Lens' CreateSlotTypeResponse (Prelude.Maybe Prelude.Text)
+createSlotTypeResponse_localeId = Lens.lens (\CreateSlotTypeResponse' {localeId} -> localeId) (\s@CreateSlotTypeResponse' {} a -> s {localeId = a} :: CreateSlotTypeResponse)
+
+-- | The signature of the base slot type specified for the slot type.
+createSlotTypeResponse_parentSlotTypeSignature :: Lens.Lens' CreateSlotTypeResponse (Prelude.Maybe Prelude.Text)
+createSlotTypeResponse_parentSlotTypeSignature = Lens.lens (\CreateSlotTypeResponse' {parentSlotTypeSignature} -> parentSlotTypeSignature) (\s@CreateSlotTypeResponse' {} a -> s {parentSlotTypeSignature = a} :: CreateSlotTypeResponse)
+
+-- | The unique identifier assigned to the slot type. Use this to identify
+-- the slot type in the @UpdateSlotType@ and @DeleteSlotType@ operations.
+createSlotTypeResponse_slotTypeId :: Lens.Lens' CreateSlotTypeResponse (Prelude.Maybe Prelude.Text)
+createSlotTypeResponse_slotTypeId = Lens.lens (\CreateSlotTypeResponse' {slotTypeId} -> slotTypeId) (\s@CreateSlotTypeResponse' {} a -> s {slotTypeId = a} :: CreateSlotTypeResponse)
+
+-- | The name specified for the slot type.
+createSlotTypeResponse_slotTypeName :: Lens.Lens' CreateSlotTypeResponse (Prelude.Maybe Prelude.Text)
+createSlotTypeResponse_slotTypeName = Lens.lens (\CreateSlotTypeResponse' {slotTypeName} -> slotTypeName) (\s@CreateSlotTypeResponse' {} a -> s {slotTypeName = a} :: CreateSlotTypeResponse)
+
+-- | The list of values that the slot type can assume.
+createSlotTypeResponse_slotTypeValues :: Lens.Lens' CreateSlotTypeResponse (Prelude.Maybe (Prelude.NonEmpty SlotTypeValue))
+createSlotTypeResponse_slotTypeValues = Lens.lens (\CreateSlotTypeResponse' {slotTypeValues} -> slotTypeValues) (\s@CreateSlotTypeResponse' {} a -> s {slotTypeValues = a} :: CreateSlotTypeResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The strategy that Amazon Lex uses to select a value from the list of
+-- possible values.
+createSlotTypeResponse_valueSelectionSetting :: Lens.Lens' CreateSlotTypeResponse (Prelude.Maybe SlotValueSelectionSetting)
+createSlotTypeResponse_valueSelectionSetting = Lens.lens (\CreateSlotTypeResponse' {valueSelectionSetting} -> valueSelectionSetting) (\s@CreateSlotTypeResponse' {} a -> s {valueSelectionSetting = a} :: CreateSlotTypeResponse)
+
+-- | The response's http status code.
+createSlotTypeResponse_httpStatus :: Lens.Lens' CreateSlotTypeResponse Prelude.Int
+createSlotTypeResponse_httpStatus = Lens.lens (\CreateSlotTypeResponse' {httpStatus} -> httpStatus) (\s@CreateSlotTypeResponse' {} a -> s {httpStatus = a} :: CreateSlotTypeResponse)
+
+instance Prelude.NFData CreateSlotTypeResponse where
+  rnf CreateSlotTypeResponse' {..} =
+    Prelude.rnf botId
+      `Prelude.seq` Prelude.rnf botVersion
+      `Prelude.seq` Prelude.rnf compositeSlotTypeSetting
+      `Prelude.seq` Prelude.rnf creationDateTime
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf externalSourceSetting
+      `Prelude.seq` Prelude.rnf localeId
+      `Prelude.seq` Prelude.rnf parentSlotTypeSignature
+      `Prelude.seq` Prelude.rnf slotTypeId
+      `Prelude.seq` Prelude.rnf slotTypeName
+      `Prelude.seq` Prelude.rnf slotTypeValues
+      `Prelude.seq` Prelude.rnf valueSelectionSetting
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/LexV2Models/CreateUploadUrl.hs b/gen/Amazonka/LexV2Models/CreateUploadUrl.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/CreateUploadUrl.hs
@@ -0,0 +1,166 @@
+{-# 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.LexV2Models.CreateUploadUrl
+-- 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 a pre-signed S3 write URL that you use to upload the zip archive
+-- when importing a bot or a bot locale.
+module Amazonka.LexV2Models.CreateUploadUrl
+  ( -- * Creating a Request
+    CreateUploadUrl (..),
+    newCreateUploadUrl,
+
+    -- * Destructuring the Response
+    CreateUploadUrlResponse (..),
+    newCreateUploadUrlResponse,
+
+    -- * Response Lenses
+    createUploadUrlResponse_importId,
+    createUploadUrlResponse_uploadUrl,
+    createUploadUrlResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LexV2Models.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateUploadUrl' smart constructor.
+data CreateUploadUrl = CreateUploadUrl'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateUploadUrl' 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.
+newCreateUploadUrl ::
+  CreateUploadUrl
+newCreateUploadUrl = CreateUploadUrl'
+
+instance Core.AWSRequest CreateUploadUrl where
+  type
+    AWSResponse CreateUploadUrl =
+      CreateUploadUrlResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateUploadUrlResponse'
+            Prelude.<$> (x Data..?> "importId")
+            Prelude.<*> (x Data..?> "uploadUrl")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateUploadUrl where
+  hashWithSalt _salt _ =
+    _salt `Prelude.hashWithSalt` ()
+
+instance Prelude.NFData CreateUploadUrl where
+  rnf _ = ()
+
+instance Data.ToHeaders CreateUploadUrl where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateUploadUrl where
+  toJSON = Prelude.const (Data.Object Prelude.mempty)
+
+instance Data.ToPath CreateUploadUrl where
+  toPath = Prelude.const "/createuploadurl/"
+
+instance Data.ToQuery CreateUploadUrl where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateUploadUrlResponse' smart constructor.
+data CreateUploadUrlResponse = CreateUploadUrlResponse'
+  { -- | An identifier for a unique import job. Use it when you call the
+    -- <https://docs.aws.amazon.com/lexv2/latest/dg/API_StartImport.html StartImport>
+    -- operation.
+    importId :: Prelude.Maybe Prelude.Text,
+    -- | A pre-signed S3 write URL. Upload the zip archive file that contains the
+    -- definition of your bot or bot locale.
+    uploadUrl :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateUploadUrlResponse' 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:
+--
+-- 'importId', 'createUploadUrlResponse_importId' - An identifier for a unique import job. Use it when you call the
+-- <https://docs.aws.amazon.com/lexv2/latest/dg/API_StartImport.html StartImport>
+-- operation.
+--
+-- 'uploadUrl', 'createUploadUrlResponse_uploadUrl' - A pre-signed S3 write URL. Upload the zip archive file that contains the
+-- definition of your bot or bot locale.
+--
+-- 'httpStatus', 'createUploadUrlResponse_httpStatus' - The response's http status code.
+newCreateUploadUrlResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateUploadUrlResponse
+newCreateUploadUrlResponse pHttpStatus_ =
+  CreateUploadUrlResponse'
+    { importId =
+        Prelude.Nothing,
+      uploadUrl = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | An identifier for a unique import job. Use it when you call the
+-- <https://docs.aws.amazon.com/lexv2/latest/dg/API_StartImport.html StartImport>
+-- operation.
+createUploadUrlResponse_importId :: Lens.Lens' CreateUploadUrlResponse (Prelude.Maybe Prelude.Text)
+createUploadUrlResponse_importId = Lens.lens (\CreateUploadUrlResponse' {importId} -> importId) (\s@CreateUploadUrlResponse' {} a -> s {importId = a} :: CreateUploadUrlResponse)
+
+-- | A pre-signed S3 write URL. Upload the zip archive file that contains the
+-- definition of your bot or bot locale.
+createUploadUrlResponse_uploadUrl :: Lens.Lens' CreateUploadUrlResponse (Prelude.Maybe Prelude.Text)
+createUploadUrlResponse_uploadUrl = Lens.lens (\CreateUploadUrlResponse' {uploadUrl} -> uploadUrl) (\s@CreateUploadUrlResponse' {} a -> s {uploadUrl = a} :: CreateUploadUrlResponse)
+
+-- | The response's http status code.
+createUploadUrlResponse_httpStatus :: Lens.Lens' CreateUploadUrlResponse Prelude.Int
+createUploadUrlResponse_httpStatus = Lens.lens (\CreateUploadUrlResponse' {httpStatus} -> httpStatus) (\s@CreateUploadUrlResponse' {} a -> s {httpStatus = a} :: CreateUploadUrlResponse)
+
+instance Prelude.NFData CreateUploadUrlResponse where
+  rnf CreateUploadUrlResponse' {..} =
+    Prelude.rnf importId
+      `Prelude.seq` Prelude.rnf uploadUrl
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/LexV2Models/DeleteBot.hs b/gen/Amazonka/LexV2Models/DeleteBot.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/DeleteBot.hs
@@ -0,0 +1,203 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.LexV2Models.DeleteBot
+-- 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 all versions of a bot, including the @Draft@ version. To delete
+-- a specific version, use the @DeleteBotVersion@ operation.
+--
+-- When you delete a bot, all of the resources contained in the bot are
+-- also deleted. Deleting a bot removes all locales, intents, slot, and
+-- slot types defined for the bot.
+--
+-- If a bot has an alias, the @DeleteBot@ operation returns a
+-- @ResourceInUseException@ exception. If you want to delete the bot and
+-- the alias, set the @skipResourceInUseCheck@ parameter to @true@.
+module Amazonka.LexV2Models.DeleteBot
+  ( -- * Creating a Request
+    DeleteBot (..),
+    newDeleteBot,
+
+    -- * Request Lenses
+    deleteBot_skipResourceInUseCheck,
+    deleteBot_botId,
+
+    -- * Destructuring the Response
+    DeleteBotResponse (..),
+    newDeleteBotResponse,
+
+    -- * Response Lenses
+    deleteBotResponse_botId,
+    deleteBotResponse_botStatus,
+    deleteBotResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LexV2Models.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteBot' smart constructor.
+data DeleteBot = DeleteBot'
+  { -- | When @true@, Amazon Lex doesn\'t check to see if another resource, such
+    -- as an alias, is using the bot before it is deleted.
+    skipResourceInUseCheck :: Prelude.Maybe Prelude.Bool,
+    -- | The identifier of the bot to delete.
+    botId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteBot' 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:
+--
+-- 'skipResourceInUseCheck', 'deleteBot_skipResourceInUseCheck' - When @true@, Amazon Lex doesn\'t check to see if another resource, such
+-- as an alias, is using the bot before it is deleted.
+--
+-- 'botId', 'deleteBot_botId' - The identifier of the bot to delete.
+newDeleteBot ::
+  -- | 'botId'
+  Prelude.Text ->
+  DeleteBot
+newDeleteBot pBotId_ =
+  DeleteBot'
+    { skipResourceInUseCheck =
+        Prelude.Nothing,
+      botId = pBotId_
+    }
+
+-- | When @true@, Amazon Lex doesn\'t check to see if another resource, such
+-- as an alias, is using the bot before it is deleted.
+deleteBot_skipResourceInUseCheck :: Lens.Lens' DeleteBot (Prelude.Maybe Prelude.Bool)
+deleteBot_skipResourceInUseCheck = Lens.lens (\DeleteBot' {skipResourceInUseCheck} -> skipResourceInUseCheck) (\s@DeleteBot' {} a -> s {skipResourceInUseCheck = a} :: DeleteBot)
+
+-- | The identifier of the bot to delete.
+deleteBot_botId :: Lens.Lens' DeleteBot Prelude.Text
+deleteBot_botId = Lens.lens (\DeleteBot' {botId} -> botId) (\s@DeleteBot' {} a -> s {botId = a} :: DeleteBot)
+
+instance Core.AWSRequest DeleteBot where
+  type AWSResponse DeleteBot = DeleteBotResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DeleteBotResponse'
+            Prelude.<$> (x Data..?> "botId")
+            Prelude.<*> (x Data..?> "botStatus")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeleteBot where
+  hashWithSalt _salt DeleteBot' {..} =
+    _salt
+      `Prelude.hashWithSalt` skipResourceInUseCheck
+      `Prelude.hashWithSalt` botId
+
+instance Prelude.NFData DeleteBot where
+  rnf DeleteBot' {..} =
+    Prelude.rnf skipResourceInUseCheck
+      `Prelude.seq` Prelude.rnf botId
+
+instance Data.ToHeaders DeleteBot where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath DeleteBot where
+  toPath DeleteBot' {..} =
+    Prelude.mconcat ["/bots/", Data.toBS botId, "/"]
+
+instance Data.ToQuery DeleteBot where
+  toQuery DeleteBot' {..} =
+    Prelude.mconcat
+      [ "skipResourceInUseCheck"
+          Data.=: skipResourceInUseCheck
+      ]
+
+-- | /See:/ 'newDeleteBotResponse' smart constructor.
+data DeleteBotResponse = DeleteBotResponse'
+  { -- | The unique identifier of the bot that Amazon Lex is deleting.
+    botId :: Prelude.Maybe Prelude.Text,
+    -- | The current status of the bot. The status is @Deleting@ while the bot
+    -- and its associated resources are being deleted.
+    botStatus :: Prelude.Maybe BotStatus,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteBotResponse' 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:
+--
+-- 'botId', 'deleteBotResponse_botId' - The unique identifier of the bot that Amazon Lex is deleting.
+--
+-- 'botStatus', 'deleteBotResponse_botStatus' - The current status of the bot. The status is @Deleting@ while the bot
+-- and its associated resources are being deleted.
+--
+-- 'httpStatus', 'deleteBotResponse_httpStatus' - The response's http status code.
+newDeleteBotResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteBotResponse
+newDeleteBotResponse pHttpStatus_ =
+  DeleteBotResponse'
+    { botId = Prelude.Nothing,
+      botStatus = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The unique identifier of the bot that Amazon Lex is deleting.
+deleteBotResponse_botId :: Lens.Lens' DeleteBotResponse (Prelude.Maybe Prelude.Text)
+deleteBotResponse_botId = Lens.lens (\DeleteBotResponse' {botId} -> botId) (\s@DeleteBotResponse' {} a -> s {botId = a} :: DeleteBotResponse)
+
+-- | The current status of the bot. The status is @Deleting@ while the bot
+-- and its associated resources are being deleted.
+deleteBotResponse_botStatus :: Lens.Lens' DeleteBotResponse (Prelude.Maybe BotStatus)
+deleteBotResponse_botStatus = Lens.lens (\DeleteBotResponse' {botStatus} -> botStatus) (\s@DeleteBotResponse' {} a -> s {botStatus = a} :: DeleteBotResponse)
+
+-- | The response's http status code.
+deleteBotResponse_httpStatus :: Lens.Lens' DeleteBotResponse Prelude.Int
+deleteBotResponse_httpStatus = Lens.lens (\DeleteBotResponse' {httpStatus} -> httpStatus) (\s@DeleteBotResponse' {} a -> s {httpStatus = a} :: DeleteBotResponse)
+
+instance Prelude.NFData DeleteBotResponse where
+  rnf DeleteBotResponse' {..} =
+    Prelude.rnf botId
+      `Prelude.seq` Prelude.rnf botStatus
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/LexV2Models/DeleteBotAlias.hs b/gen/Amazonka/LexV2Models/DeleteBotAlias.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/DeleteBotAlias.hs
@@ -0,0 +1,235 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.LexV2Models.DeleteBotAlias
+-- 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 bot alias.
+module Amazonka.LexV2Models.DeleteBotAlias
+  ( -- * Creating a Request
+    DeleteBotAlias (..),
+    newDeleteBotAlias,
+
+    -- * Request Lenses
+    deleteBotAlias_skipResourceInUseCheck,
+    deleteBotAlias_botAliasId,
+    deleteBotAlias_botId,
+
+    -- * Destructuring the Response
+    DeleteBotAliasResponse (..),
+    newDeleteBotAliasResponse,
+
+    -- * Response Lenses
+    deleteBotAliasResponse_botAliasId,
+    deleteBotAliasResponse_botAliasStatus,
+    deleteBotAliasResponse_botId,
+    deleteBotAliasResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LexV2Models.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteBotAlias' smart constructor.
+data DeleteBotAlias = DeleteBotAlias'
+  { -- | When this parameter is true, Amazon Lex doesn\'t check to see if any
+    -- other resource is using the alias before it is deleted.
+    skipResourceInUseCheck :: Prelude.Maybe Prelude.Bool,
+    -- | The unique identifier of the bot alias to delete.
+    botAliasId :: Prelude.Text,
+    -- | The unique identifier of the bot associated with the alias to delete.
+    botId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteBotAlias' 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:
+--
+-- 'skipResourceInUseCheck', 'deleteBotAlias_skipResourceInUseCheck' - When this parameter is true, Amazon Lex doesn\'t check to see if any
+-- other resource is using the alias before it is deleted.
+--
+-- 'botAliasId', 'deleteBotAlias_botAliasId' - The unique identifier of the bot alias to delete.
+--
+-- 'botId', 'deleteBotAlias_botId' - The unique identifier of the bot associated with the alias to delete.
+newDeleteBotAlias ::
+  -- | 'botAliasId'
+  Prelude.Text ->
+  -- | 'botId'
+  Prelude.Text ->
+  DeleteBotAlias
+newDeleteBotAlias pBotAliasId_ pBotId_ =
+  DeleteBotAlias'
+    { skipResourceInUseCheck =
+        Prelude.Nothing,
+      botAliasId = pBotAliasId_,
+      botId = pBotId_
+    }
+
+-- | When this parameter is true, Amazon Lex doesn\'t check to see if any
+-- other resource is using the alias before it is deleted.
+deleteBotAlias_skipResourceInUseCheck :: Lens.Lens' DeleteBotAlias (Prelude.Maybe Prelude.Bool)
+deleteBotAlias_skipResourceInUseCheck = Lens.lens (\DeleteBotAlias' {skipResourceInUseCheck} -> skipResourceInUseCheck) (\s@DeleteBotAlias' {} a -> s {skipResourceInUseCheck = a} :: DeleteBotAlias)
+
+-- | The unique identifier of the bot alias to delete.
+deleteBotAlias_botAliasId :: Lens.Lens' DeleteBotAlias Prelude.Text
+deleteBotAlias_botAliasId = Lens.lens (\DeleteBotAlias' {botAliasId} -> botAliasId) (\s@DeleteBotAlias' {} a -> s {botAliasId = a} :: DeleteBotAlias)
+
+-- | The unique identifier of the bot associated with the alias to delete.
+deleteBotAlias_botId :: Lens.Lens' DeleteBotAlias Prelude.Text
+deleteBotAlias_botId = Lens.lens (\DeleteBotAlias' {botId} -> botId) (\s@DeleteBotAlias' {} a -> s {botId = a} :: DeleteBotAlias)
+
+instance Core.AWSRequest DeleteBotAlias where
+  type
+    AWSResponse DeleteBotAlias =
+      DeleteBotAliasResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DeleteBotAliasResponse'
+            Prelude.<$> (x Data..?> "botAliasId")
+            Prelude.<*> (x Data..?> "botAliasStatus")
+            Prelude.<*> (x Data..?> "botId")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeleteBotAlias where
+  hashWithSalt _salt DeleteBotAlias' {..} =
+    _salt
+      `Prelude.hashWithSalt` skipResourceInUseCheck
+      `Prelude.hashWithSalt` botAliasId
+      `Prelude.hashWithSalt` botId
+
+instance Prelude.NFData DeleteBotAlias where
+  rnf DeleteBotAlias' {..} =
+    Prelude.rnf skipResourceInUseCheck
+      `Prelude.seq` Prelude.rnf botAliasId
+      `Prelude.seq` Prelude.rnf botId
+
+instance Data.ToHeaders DeleteBotAlias where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath DeleteBotAlias where
+  toPath DeleteBotAlias' {..} =
+    Prelude.mconcat
+      [ "/bots/",
+        Data.toBS botId,
+        "/botaliases/",
+        Data.toBS botAliasId,
+        "/"
+      ]
+
+instance Data.ToQuery DeleteBotAlias where
+  toQuery DeleteBotAlias' {..} =
+    Prelude.mconcat
+      [ "skipResourceInUseCheck"
+          Data.=: skipResourceInUseCheck
+      ]
+
+-- | /See:/ 'newDeleteBotAliasResponse' smart constructor.
+data DeleteBotAliasResponse = DeleteBotAliasResponse'
+  { -- | The unique identifier of the bot alias to delete.
+    botAliasId :: Prelude.Maybe Prelude.Text,
+    -- | The current status of the alias. The status is @Deleting@ while the
+    -- alias is in the process of being deleted. Once the alias is deleted, it
+    -- will no longer appear in the list of aliases returned by the
+    -- @ListBotAliases@ operation.
+    botAliasStatus :: Prelude.Maybe BotAliasStatus,
+    -- | The unique identifier of the bot that contains the alias to delete.
+    botId :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteBotAliasResponse' 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:
+--
+-- 'botAliasId', 'deleteBotAliasResponse_botAliasId' - The unique identifier of the bot alias to delete.
+--
+-- 'botAliasStatus', 'deleteBotAliasResponse_botAliasStatus' - The current status of the alias. The status is @Deleting@ while the
+-- alias is in the process of being deleted. Once the alias is deleted, it
+-- will no longer appear in the list of aliases returned by the
+-- @ListBotAliases@ operation.
+--
+-- 'botId', 'deleteBotAliasResponse_botId' - The unique identifier of the bot that contains the alias to delete.
+--
+-- 'httpStatus', 'deleteBotAliasResponse_httpStatus' - The response's http status code.
+newDeleteBotAliasResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteBotAliasResponse
+newDeleteBotAliasResponse pHttpStatus_ =
+  DeleteBotAliasResponse'
+    { botAliasId =
+        Prelude.Nothing,
+      botAliasStatus = Prelude.Nothing,
+      botId = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The unique identifier of the bot alias to delete.
+deleteBotAliasResponse_botAliasId :: Lens.Lens' DeleteBotAliasResponse (Prelude.Maybe Prelude.Text)
+deleteBotAliasResponse_botAliasId = Lens.lens (\DeleteBotAliasResponse' {botAliasId} -> botAliasId) (\s@DeleteBotAliasResponse' {} a -> s {botAliasId = a} :: DeleteBotAliasResponse)
+
+-- | The current status of the alias. The status is @Deleting@ while the
+-- alias is in the process of being deleted. Once the alias is deleted, it
+-- will no longer appear in the list of aliases returned by the
+-- @ListBotAliases@ operation.
+deleteBotAliasResponse_botAliasStatus :: Lens.Lens' DeleteBotAliasResponse (Prelude.Maybe BotAliasStatus)
+deleteBotAliasResponse_botAliasStatus = Lens.lens (\DeleteBotAliasResponse' {botAliasStatus} -> botAliasStatus) (\s@DeleteBotAliasResponse' {} a -> s {botAliasStatus = a} :: DeleteBotAliasResponse)
+
+-- | The unique identifier of the bot that contains the alias to delete.
+deleteBotAliasResponse_botId :: Lens.Lens' DeleteBotAliasResponse (Prelude.Maybe Prelude.Text)
+deleteBotAliasResponse_botId = Lens.lens (\DeleteBotAliasResponse' {botId} -> botId) (\s@DeleteBotAliasResponse' {} a -> s {botId = a} :: DeleteBotAliasResponse)
+
+-- | The response's http status code.
+deleteBotAliasResponse_httpStatus :: Lens.Lens' DeleteBotAliasResponse Prelude.Int
+deleteBotAliasResponse_httpStatus = Lens.lens (\DeleteBotAliasResponse' {httpStatus} -> httpStatus) (\s@DeleteBotAliasResponse' {} a -> s {httpStatus = a} :: DeleteBotAliasResponse)
+
+instance Prelude.NFData DeleteBotAliasResponse where
+  rnf DeleteBotAliasResponse' {..} =
+    Prelude.rnf botAliasId
+      `Prelude.seq` Prelude.rnf botAliasStatus
+      `Prelude.seq` Prelude.rnf botId
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/LexV2Models/DeleteBotLocale.hs b/gen/Amazonka/LexV2Models/DeleteBotLocale.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/DeleteBotLocale.hs
@@ -0,0 +1,251 @@
+{-# 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.LexV2Models.DeleteBotLocale
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Removes a locale from a bot.
+--
+-- When you delete a locale, all intents, slots, and slot types defined for
+-- the locale are also deleted.
+module Amazonka.LexV2Models.DeleteBotLocale
+  ( -- * Creating a Request
+    DeleteBotLocale (..),
+    newDeleteBotLocale,
+
+    -- * Request Lenses
+    deleteBotLocale_botId,
+    deleteBotLocale_botVersion,
+    deleteBotLocale_localeId,
+
+    -- * Destructuring the Response
+    DeleteBotLocaleResponse (..),
+    newDeleteBotLocaleResponse,
+
+    -- * Response Lenses
+    deleteBotLocaleResponse_botId,
+    deleteBotLocaleResponse_botLocaleStatus,
+    deleteBotLocaleResponse_botVersion,
+    deleteBotLocaleResponse_localeId,
+    deleteBotLocaleResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LexV2Models.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteBotLocale' smart constructor.
+data DeleteBotLocale = DeleteBotLocale'
+  { -- | The unique identifier of the bot that contains the locale.
+    botId :: Prelude.Text,
+    -- | The version of the bot that contains the locale.
+    botVersion :: Prelude.Text,
+    -- | The identifier of the language and locale that will be deleted. The
+    -- string must match one of the supported locales. For more information,
+    -- see
+    -- <https://docs.aws.amazon.com/lexv2/latest/dg/how-languages.html Supported languages>.
+    localeId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteBotLocale' 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:
+--
+-- 'botId', 'deleteBotLocale_botId' - The unique identifier of the bot that contains the locale.
+--
+-- 'botVersion', 'deleteBotLocale_botVersion' - The version of the bot that contains the locale.
+--
+-- 'localeId', 'deleteBotLocale_localeId' - The identifier of the language and locale that will be deleted. The
+-- string must match one of the supported locales. For more information,
+-- see
+-- <https://docs.aws.amazon.com/lexv2/latest/dg/how-languages.html Supported languages>.
+newDeleteBotLocale ::
+  -- | 'botId'
+  Prelude.Text ->
+  -- | 'botVersion'
+  Prelude.Text ->
+  -- | 'localeId'
+  Prelude.Text ->
+  DeleteBotLocale
+newDeleteBotLocale pBotId_ pBotVersion_ pLocaleId_ =
+  DeleteBotLocale'
+    { botId = pBotId_,
+      botVersion = pBotVersion_,
+      localeId = pLocaleId_
+    }
+
+-- | The unique identifier of the bot that contains the locale.
+deleteBotLocale_botId :: Lens.Lens' DeleteBotLocale Prelude.Text
+deleteBotLocale_botId = Lens.lens (\DeleteBotLocale' {botId} -> botId) (\s@DeleteBotLocale' {} a -> s {botId = a} :: DeleteBotLocale)
+
+-- | The version of the bot that contains the locale.
+deleteBotLocale_botVersion :: Lens.Lens' DeleteBotLocale Prelude.Text
+deleteBotLocale_botVersion = Lens.lens (\DeleteBotLocale' {botVersion} -> botVersion) (\s@DeleteBotLocale' {} a -> s {botVersion = a} :: DeleteBotLocale)
+
+-- | The identifier of the language and locale that will be deleted. The
+-- string must match one of the supported locales. For more information,
+-- see
+-- <https://docs.aws.amazon.com/lexv2/latest/dg/how-languages.html Supported languages>.
+deleteBotLocale_localeId :: Lens.Lens' DeleteBotLocale Prelude.Text
+deleteBotLocale_localeId = Lens.lens (\DeleteBotLocale' {localeId} -> localeId) (\s@DeleteBotLocale' {} a -> s {localeId = a} :: DeleteBotLocale)
+
+instance Core.AWSRequest DeleteBotLocale where
+  type
+    AWSResponse DeleteBotLocale =
+      DeleteBotLocaleResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DeleteBotLocaleResponse'
+            Prelude.<$> (x Data..?> "botId")
+            Prelude.<*> (x Data..?> "botLocaleStatus")
+            Prelude.<*> (x Data..?> "botVersion")
+            Prelude.<*> (x Data..?> "localeId")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeleteBotLocale where
+  hashWithSalt _salt DeleteBotLocale' {..} =
+    _salt
+      `Prelude.hashWithSalt` botId
+      `Prelude.hashWithSalt` botVersion
+      `Prelude.hashWithSalt` localeId
+
+instance Prelude.NFData DeleteBotLocale where
+  rnf DeleteBotLocale' {..} =
+    Prelude.rnf botId
+      `Prelude.seq` Prelude.rnf botVersion
+      `Prelude.seq` Prelude.rnf localeId
+
+instance Data.ToHeaders DeleteBotLocale where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath DeleteBotLocale where
+  toPath DeleteBotLocale' {..} =
+    Prelude.mconcat
+      [ "/bots/",
+        Data.toBS botId,
+        "/botversions/",
+        Data.toBS botVersion,
+        "/botlocales/",
+        Data.toBS localeId,
+        "/"
+      ]
+
+instance Data.ToQuery DeleteBotLocale where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteBotLocaleResponse' smart constructor.
+data DeleteBotLocaleResponse = DeleteBotLocaleResponse'
+  { -- | The identifier of the bot that contained the deleted locale.
+    botId :: Prelude.Maybe Prelude.Text,
+    -- | The status of deleting the bot locale. The locale first enters the
+    -- @Deleting@ status. Once the locale is deleted it no longer appears in
+    -- the list of locales for the bot.
+    botLocaleStatus :: Prelude.Maybe BotLocaleStatus,
+    -- | The version of the bot that contained the deleted locale.
+    botVersion :: Prelude.Maybe Prelude.Text,
+    -- | The language and locale of the deleted locale.
+    localeId :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteBotLocaleResponse' 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:
+--
+-- 'botId', 'deleteBotLocaleResponse_botId' - The identifier of the bot that contained the deleted locale.
+--
+-- 'botLocaleStatus', 'deleteBotLocaleResponse_botLocaleStatus' - The status of deleting the bot locale. The locale first enters the
+-- @Deleting@ status. Once the locale is deleted it no longer appears in
+-- the list of locales for the bot.
+--
+-- 'botVersion', 'deleteBotLocaleResponse_botVersion' - The version of the bot that contained the deleted locale.
+--
+-- 'localeId', 'deleteBotLocaleResponse_localeId' - The language and locale of the deleted locale.
+--
+-- 'httpStatus', 'deleteBotLocaleResponse_httpStatus' - The response's http status code.
+newDeleteBotLocaleResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteBotLocaleResponse
+newDeleteBotLocaleResponse pHttpStatus_ =
+  DeleteBotLocaleResponse'
+    { botId = Prelude.Nothing,
+      botLocaleStatus = Prelude.Nothing,
+      botVersion = Prelude.Nothing,
+      localeId = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The identifier of the bot that contained the deleted locale.
+deleteBotLocaleResponse_botId :: Lens.Lens' DeleteBotLocaleResponse (Prelude.Maybe Prelude.Text)
+deleteBotLocaleResponse_botId = Lens.lens (\DeleteBotLocaleResponse' {botId} -> botId) (\s@DeleteBotLocaleResponse' {} a -> s {botId = a} :: DeleteBotLocaleResponse)
+
+-- | The status of deleting the bot locale. The locale first enters the
+-- @Deleting@ status. Once the locale is deleted it no longer appears in
+-- the list of locales for the bot.
+deleteBotLocaleResponse_botLocaleStatus :: Lens.Lens' DeleteBotLocaleResponse (Prelude.Maybe BotLocaleStatus)
+deleteBotLocaleResponse_botLocaleStatus = Lens.lens (\DeleteBotLocaleResponse' {botLocaleStatus} -> botLocaleStatus) (\s@DeleteBotLocaleResponse' {} a -> s {botLocaleStatus = a} :: DeleteBotLocaleResponse)
+
+-- | The version of the bot that contained the deleted locale.
+deleteBotLocaleResponse_botVersion :: Lens.Lens' DeleteBotLocaleResponse (Prelude.Maybe Prelude.Text)
+deleteBotLocaleResponse_botVersion = Lens.lens (\DeleteBotLocaleResponse' {botVersion} -> botVersion) (\s@DeleteBotLocaleResponse' {} a -> s {botVersion = a} :: DeleteBotLocaleResponse)
+
+-- | The language and locale of the deleted locale.
+deleteBotLocaleResponse_localeId :: Lens.Lens' DeleteBotLocaleResponse (Prelude.Maybe Prelude.Text)
+deleteBotLocaleResponse_localeId = Lens.lens (\DeleteBotLocaleResponse' {localeId} -> localeId) (\s@DeleteBotLocaleResponse' {} a -> s {localeId = a} :: DeleteBotLocaleResponse)
+
+-- | The response's http status code.
+deleteBotLocaleResponse_httpStatus :: Lens.Lens' DeleteBotLocaleResponse Prelude.Int
+deleteBotLocaleResponse_httpStatus = Lens.lens (\DeleteBotLocaleResponse' {httpStatus} -> httpStatus) (\s@DeleteBotLocaleResponse' {} a -> s {httpStatus = a} :: DeleteBotLocaleResponse)
+
+instance Prelude.NFData DeleteBotLocaleResponse where
+  rnf DeleteBotLocaleResponse' {..} =
+    Prelude.rnf botId
+      `Prelude.seq` Prelude.rnf botLocaleStatus
+      `Prelude.seq` Prelude.rnf botVersion
+      `Prelude.seq` Prelude.rnf localeId
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/LexV2Models/DeleteBotVersion.hs b/gen/Amazonka/LexV2Models/DeleteBotVersion.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/DeleteBotVersion.hs
@@ -0,0 +1,237 @@
+{-# 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.LexV2Models.DeleteBotVersion
+-- 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 a specific version of a bot. To delete all version of a bot, use
+-- the
+-- <https://docs.aws.amazon.com/lexv2/latest/dg/API_DeleteBot.html DeleteBot>
+-- operation.
+module Amazonka.LexV2Models.DeleteBotVersion
+  ( -- * Creating a Request
+    DeleteBotVersion (..),
+    newDeleteBotVersion,
+
+    -- * Request Lenses
+    deleteBotVersion_skipResourceInUseCheck,
+    deleteBotVersion_botId,
+    deleteBotVersion_botVersion,
+
+    -- * Destructuring the Response
+    DeleteBotVersionResponse (..),
+    newDeleteBotVersionResponse,
+
+    -- * Response Lenses
+    deleteBotVersionResponse_botId,
+    deleteBotVersionResponse_botStatus,
+    deleteBotVersionResponse_botVersion,
+    deleteBotVersionResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LexV2Models.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteBotVersion' smart constructor.
+data DeleteBotVersion = DeleteBotVersion'
+  { -- | By default, the @DeleteBotVersion@ operations throws a
+    -- @ResourceInUseException@ exception if you try to delete a bot version
+    -- that has an alias pointing at it. Set the @skipResourceInUseCheck@
+    -- parameter to @true@ to skip this check and remove the version even if an
+    -- alias points to it.
+    skipResourceInUseCheck :: Prelude.Maybe Prelude.Bool,
+    -- | The identifier of the bot that contains the version.
+    botId :: Prelude.Text,
+    -- | The version of the bot to delete.
+    botVersion :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteBotVersion' 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:
+--
+-- 'skipResourceInUseCheck', 'deleteBotVersion_skipResourceInUseCheck' - By default, the @DeleteBotVersion@ operations throws a
+-- @ResourceInUseException@ exception if you try to delete a bot version
+-- that has an alias pointing at it. Set the @skipResourceInUseCheck@
+-- parameter to @true@ to skip this check and remove the version even if an
+-- alias points to it.
+--
+-- 'botId', 'deleteBotVersion_botId' - The identifier of the bot that contains the version.
+--
+-- 'botVersion', 'deleteBotVersion_botVersion' - The version of the bot to delete.
+newDeleteBotVersion ::
+  -- | 'botId'
+  Prelude.Text ->
+  -- | 'botVersion'
+  Prelude.Text ->
+  DeleteBotVersion
+newDeleteBotVersion pBotId_ pBotVersion_ =
+  DeleteBotVersion'
+    { skipResourceInUseCheck =
+        Prelude.Nothing,
+      botId = pBotId_,
+      botVersion = pBotVersion_
+    }
+
+-- | By default, the @DeleteBotVersion@ operations throws a
+-- @ResourceInUseException@ exception if you try to delete a bot version
+-- that has an alias pointing at it. Set the @skipResourceInUseCheck@
+-- parameter to @true@ to skip this check and remove the version even if an
+-- alias points to it.
+deleteBotVersion_skipResourceInUseCheck :: Lens.Lens' DeleteBotVersion (Prelude.Maybe Prelude.Bool)
+deleteBotVersion_skipResourceInUseCheck = Lens.lens (\DeleteBotVersion' {skipResourceInUseCheck} -> skipResourceInUseCheck) (\s@DeleteBotVersion' {} a -> s {skipResourceInUseCheck = a} :: DeleteBotVersion)
+
+-- | The identifier of the bot that contains the version.
+deleteBotVersion_botId :: Lens.Lens' DeleteBotVersion Prelude.Text
+deleteBotVersion_botId = Lens.lens (\DeleteBotVersion' {botId} -> botId) (\s@DeleteBotVersion' {} a -> s {botId = a} :: DeleteBotVersion)
+
+-- | The version of the bot to delete.
+deleteBotVersion_botVersion :: Lens.Lens' DeleteBotVersion Prelude.Text
+deleteBotVersion_botVersion = Lens.lens (\DeleteBotVersion' {botVersion} -> botVersion) (\s@DeleteBotVersion' {} a -> s {botVersion = a} :: DeleteBotVersion)
+
+instance Core.AWSRequest DeleteBotVersion where
+  type
+    AWSResponse DeleteBotVersion =
+      DeleteBotVersionResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DeleteBotVersionResponse'
+            Prelude.<$> (x Data..?> "botId")
+            Prelude.<*> (x Data..?> "botStatus")
+            Prelude.<*> (x Data..?> "botVersion")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeleteBotVersion where
+  hashWithSalt _salt DeleteBotVersion' {..} =
+    _salt
+      `Prelude.hashWithSalt` skipResourceInUseCheck
+      `Prelude.hashWithSalt` botId
+      `Prelude.hashWithSalt` botVersion
+
+instance Prelude.NFData DeleteBotVersion where
+  rnf DeleteBotVersion' {..} =
+    Prelude.rnf skipResourceInUseCheck
+      `Prelude.seq` Prelude.rnf botId
+      `Prelude.seq` Prelude.rnf botVersion
+
+instance Data.ToHeaders DeleteBotVersion where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath DeleteBotVersion where
+  toPath DeleteBotVersion' {..} =
+    Prelude.mconcat
+      [ "/bots/",
+        Data.toBS botId,
+        "/botversions/",
+        Data.toBS botVersion,
+        "/"
+      ]
+
+instance Data.ToQuery DeleteBotVersion where
+  toQuery DeleteBotVersion' {..} =
+    Prelude.mconcat
+      [ "skipResourceInUseCheck"
+          Data.=: skipResourceInUseCheck
+      ]
+
+-- | /See:/ 'newDeleteBotVersionResponse' smart constructor.
+data DeleteBotVersionResponse = DeleteBotVersionResponse'
+  { -- | The identifier of the bot that is being deleted.
+    botId :: Prelude.Maybe Prelude.Text,
+    -- | The current status of the bot.
+    botStatus :: Prelude.Maybe BotStatus,
+    -- | The version of the bot that is being deleted.
+    botVersion :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteBotVersionResponse' 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:
+--
+-- 'botId', 'deleteBotVersionResponse_botId' - The identifier of the bot that is being deleted.
+--
+-- 'botStatus', 'deleteBotVersionResponse_botStatus' - The current status of the bot.
+--
+-- 'botVersion', 'deleteBotVersionResponse_botVersion' - The version of the bot that is being deleted.
+--
+-- 'httpStatus', 'deleteBotVersionResponse_httpStatus' - The response's http status code.
+newDeleteBotVersionResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteBotVersionResponse
+newDeleteBotVersionResponse pHttpStatus_ =
+  DeleteBotVersionResponse'
+    { botId = Prelude.Nothing,
+      botStatus = Prelude.Nothing,
+      botVersion = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The identifier of the bot that is being deleted.
+deleteBotVersionResponse_botId :: Lens.Lens' DeleteBotVersionResponse (Prelude.Maybe Prelude.Text)
+deleteBotVersionResponse_botId = Lens.lens (\DeleteBotVersionResponse' {botId} -> botId) (\s@DeleteBotVersionResponse' {} a -> s {botId = a} :: DeleteBotVersionResponse)
+
+-- | The current status of the bot.
+deleteBotVersionResponse_botStatus :: Lens.Lens' DeleteBotVersionResponse (Prelude.Maybe BotStatus)
+deleteBotVersionResponse_botStatus = Lens.lens (\DeleteBotVersionResponse' {botStatus} -> botStatus) (\s@DeleteBotVersionResponse' {} a -> s {botStatus = a} :: DeleteBotVersionResponse)
+
+-- | The version of the bot that is being deleted.
+deleteBotVersionResponse_botVersion :: Lens.Lens' DeleteBotVersionResponse (Prelude.Maybe Prelude.Text)
+deleteBotVersionResponse_botVersion = Lens.lens (\DeleteBotVersionResponse' {botVersion} -> botVersion) (\s@DeleteBotVersionResponse' {} a -> s {botVersion = a} :: DeleteBotVersionResponse)
+
+-- | The response's http status code.
+deleteBotVersionResponse_httpStatus :: Lens.Lens' DeleteBotVersionResponse Prelude.Int
+deleteBotVersionResponse_httpStatus = Lens.lens (\DeleteBotVersionResponse' {httpStatus} -> httpStatus) (\s@DeleteBotVersionResponse' {} a -> s {httpStatus = a} :: DeleteBotVersionResponse)
+
+instance Prelude.NFData DeleteBotVersionResponse where
+  rnf DeleteBotVersionResponse' {..} =
+    Prelude.rnf botId
+      `Prelude.seq` Prelude.rnf botStatus
+      `Prelude.seq` Prelude.rnf botVersion
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/LexV2Models/DeleteCustomVocabulary.hs b/gen/Amazonka/LexV2Models/DeleteCustomVocabulary.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/DeleteCustomVocabulary.hs
@@ -0,0 +1,247 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.LexV2Models.DeleteCustomVocabulary
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Removes a custom vocabulary from the specified locale in the specified
+-- bot.
+module Amazonka.LexV2Models.DeleteCustomVocabulary
+  ( -- * Creating a Request
+    DeleteCustomVocabulary (..),
+    newDeleteCustomVocabulary,
+
+    -- * Request Lenses
+    deleteCustomVocabulary_botId,
+    deleteCustomVocabulary_botVersion,
+    deleteCustomVocabulary_localeId,
+
+    -- * Destructuring the Response
+    DeleteCustomVocabularyResponse (..),
+    newDeleteCustomVocabularyResponse,
+
+    -- * Response Lenses
+    deleteCustomVocabularyResponse_botId,
+    deleteCustomVocabularyResponse_botVersion,
+    deleteCustomVocabularyResponse_customVocabularyStatus,
+    deleteCustomVocabularyResponse_localeId,
+    deleteCustomVocabularyResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LexV2Models.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteCustomVocabulary' smart constructor.
+data DeleteCustomVocabulary = DeleteCustomVocabulary'
+  { -- | The unique identifier of the bot to remove the custom vocabulary from.
+    botId :: Prelude.Text,
+    -- | The version of the bot to remove the custom vocabulary from.
+    botVersion :: Prelude.Text,
+    -- | The locale identifier for the locale that contains the custom vocabulary
+    -- to remove.
+    localeId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteCustomVocabulary' 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:
+--
+-- 'botId', 'deleteCustomVocabulary_botId' - The unique identifier of the bot to remove the custom vocabulary from.
+--
+-- 'botVersion', 'deleteCustomVocabulary_botVersion' - The version of the bot to remove the custom vocabulary from.
+--
+-- 'localeId', 'deleteCustomVocabulary_localeId' - The locale identifier for the locale that contains the custom vocabulary
+-- to remove.
+newDeleteCustomVocabulary ::
+  -- | 'botId'
+  Prelude.Text ->
+  -- | 'botVersion'
+  Prelude.Text ->
+  -- | 'localeId'
+  Prelude.Text ->
+  DeleteCustomVocabulary
+newDeleteCustomVocabulary
+  pBotId_
+  pBotVersion_
+  pLocaleId_ =
+    DeleteCustomVocabulary'
+      { botId = pBotId_,
+        botVersion = pBotVersion_,
+        localeId = pLocaleId_
+      }
+
+-- | The unique identifier of the bot to remove the custom vocabulary from.
+deleteCustomVocabulary_botId :: Lens.Lens' DeleteCustomVocabulary Prelude.Text
+deleteCustomVocabulary_botId = Lens.lens (\DeleteCustomVocabulary' {botId} -> botId) (\s@DeleteCustomVocabulary' {} a -> s {botId = a} :: DeleteCustomVocabulary)
+
+-- | The version of the bot to remove the custom vocabulary from.
+deleteCustomVocabulary_botVersion :: Lens.Lens' DeleteCustomVocabulary Prelude.Text
+deleteCustomVocabulary_botVersion = Lens.lens (\DeleteCustomVocabulary' {botVersion} -> botVersion) (\s@DeleteCustomVocabulary' {} a -> s {botVersion = a} :: DeleteCustomVocabulary)
+
+-- | The locale identifier for the locale that contains the custom vocabulary
+-- to remove.
+deleteCustomVocabulary_localeId :: Lens.Lens' DeleteCustomVocabulary Prelude.Text
+deleteCustomVocabulary_localeId = Lens.lens (\DeleteCustomVocabulary' {localeId} -> localeId) (\s@DeleteCustomVocabulary' {} a -> s {localeId = a} :: DeleteCustomVocabulary)
+
+instance Core.AWSRequest DeleteCustomVocabulary where
+  type
+    AWSResponse DeleteCustomVocabulary =
+      DeleteCustomVocabularyResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DeleteCustomVocabularyResponse'
+            Prelude.<$> (x Data..?> "botId")
+            Prelude.<*> (x Data..?> "botVersion")
+            Prelude.<*> (x Data..?> "customVocabularyStatus")
+            Prelude.<*> (x Data..?> "localeId")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeleteCustomVocabulary where
+  hashWithSalt _salt DeleteCustomVocabulary' {..} =
+    _salt
+      `Prelude.hashWithSalt` botId
+      `Prelude.hashWithSalt` botVersion
+      `Prelude.hashWithSalt` localeId
+
+instance Prelude.NFData DeleteCustomVocabulary where
+  rnf DeleteCustomVocabulary' {..} =
+    Prelude.rnf botId
+      `Prelude.seq` Prelude.rnf botVersion
+      `Prelude.seq` Prelude.rnf localeId
+
+instance Data.ToHeaders DeleteCustomVocabulary where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath DeleteCustomVocabulary where
+  toPath DeleteCustomVocabulary' {..} =
+    Prelude.mconcat
+      [ "/bots/",
+        Data.toBS botId,
+        "/botversions/",
+        Data.toBS botVersion,
+        "/botlocales/",
+        Data.toBS localeId,
+        "/customvocabulary"
+      ]
+
+instance Data.ToQuery DeleteCustomVocabulary where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteCustomVocabularyResponse' smart constructor.
+data DeleteCustomVocabularyResponse = DeleteCustomVocabularyResponse'
+  { -- | The identifier of the bot that the custom vocabulary was removed from.
+    botId :: Prelude.Maybe Prelude.Text,
+    -- | The version of the bot that the custom vocabulary was removed from.
+    botVersion :: Prelude.Maybe Prelude.Text,
+    -- | The status of removing the custom vocabulary.
+    customVocabularyStatus :: Prelude.Maybe CustomVocabularyStatus,
+    -- | The locale identifier for the locale that the custom vocabulary was
+    -- removed from.
+    localeId :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteCustomVocabularyResponse' 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:
+--
+-- 'botId', 'deleteCustomVocabularyResponse_botId' - The identifier of the bot that the custom vocabulary was removed from.
+--
+-- 'botVersion', 'deleteCustomVocabularyResponse_botVersion' - The version of the bot that the custom vocabulary was removed from.
+--
+-- 'customVocabularyStatus', 'deleteCustomVocabularyResponse_customVocabularyStatus' - The status of removing the custom vocabulary.
+--
+-- 'localeId', 'deleteCustomVocabularyResponse_localeId' - The locale identifier for the locale that the custom vocabulary was
+-- removed from.
+--
+-- 'httpStatus', 'deleteCustomVocabularyResponse_httpStatus' - The response's http status code.
+newDeleteCustomVocabularyResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteCustomVocabularyResponse
+newDeleteCustomVocabularyResponse pHttpStatus_ =
+  DeleteCustomVocabularyResponse'
+    { botId =
+        Prelude.Nothing,
+      botVersion = Prelude.Nothing,
+      customVocabularyStatus = Prelude.Nothing,
+      localeId = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The identifier of the bot that the custom vocabulary was removed from.
+deleteCustomVocabularyResponse_botId :: Lens.Lens' DeleteCustomVocabularyResponse (Prelude.Maybe Prelude.Text)
+deleteCustomVocabularyResponse_botId = Lens.lens (\DeleteCustomVocabularyResponse' {botId} -> botId) (\s@DeleteCustomVocabularyResponse' {} a -> s {botId = a} :: DeleteCustomVocabularyResponse)
+
+-- | The version of the bot that the custom vocabulary was removed from.
+deleteCustomVocabularyResponse_botVersion :: Lens.Lens' DeleteCustomVocabularyResponse (Prelude.Maybe Prelude.Text)
+deleteCustomVocabularyResponse_botVersion = Lens.lens (\DeleteCustomVocabularyResponse' {botVersion} -> botVersion) (\s@DeleteCustomVocabularyResponse' {} a -> s {botVersion = a} :: DeleteCustomVocabularyResponse)
+
+-- | The status of removing the custom vocabulary.
+deleteCustomVocabularyResponse_customVocabularyStatus :: Lens.Lens' DeleteCustomVocabularyResponse (Prelude.Maybe CustomVocabularyStatus)
+deleteCustomVocabularyResponse_customVocabularyStatus = Lens.lens (\DeleteCustomVocabularyResponse' {customVocabularyStatus} -> customVocabularyStatus) (\s@DeleteCustomVocabularyResponse' {} a -> s {customVocabularyStatus = a} :: DeleteCustomVocabularyResponse)
+
+-- | The locale identifier for the locale that the custom vocabulary was
+-- removed from.
+deleteCustomVocabularyResponse_localeId :: Lens.Lens' DeleteCustomVocabularyResponse (Prelude.Maybe Prelude.Text)
+deleteCustomVocabularyResponse_localeId = Lens.lens (\DeleteCustomVocabularyResponse' {localeId} -> localeId) (\s@DeleteCustomVocabularyResponse' {} a -> s {localeId = a} :: DeleteCustomVocabularyResponse)
+
+-- | The response's http status code.
+deleteCustomVocabularyResponse_httpStatus :: Lens.Lens' DeleteCustomVocabularyResponse Prelude.Int
+deleteCustomVocabularyResponse_httpStatus = Lens.lens (\DeleteCustomVocabularyResponse' {httpStatus} -> httpStatus) (\s@DeleteCustomVocabularyResponse' {} a -> s {httpStatus = a} :: DeleteCustomVocabularyResponse)
+
+instance
+  Prelude.NFData
+    DeleteCustomVocabularyResponse
+  where
+  rnf DeleteCustomVocabularyResponse' {..} =
+    Prelude.rnf botId
+      `Prelude.seq` Prelude.rnf botVersion
+      `Prelude.seq` Prelude.rnf customVocabularyStatus
+      `Prelude.seq` Prelude.rnf localeId
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/LexV2Models/DeleteExport.hs b/gen/Amazonka/LexV2Models/DeleteExport.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/DeleteExport.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.LexV2Models.DeleteExport
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Removes a previous export and the associated files stored in an S3
+-- bucket.
+module Amazonka.LexV2Models.DeleteExport
+  ( -- * Creating a Request
+    DeleteExport (..),
+    newDeleteExport,
+
+    -- * Request Lenses
+    deleteExport_exportId,
+
+    -- * Destructuring the Response
+    DeleteExportResponse (..),
+    newDeleteExportResponse,
+
+    -- * Response Lenses
+    deleteExportResponse_exportId,
+    deleteExportResponse_exportStatus,
+    deleteExportResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LexV2Models.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteExport' smart constructor.
+data DeleteExport = DeleteExport'
+  { -- | The unique identifier of the export to delete.
+    exportId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteExport' 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:
+--
+-- 'exportId', 'deleteExport_exportId' - The unique identifier of the export to delete.
+newDeleteExport ::
+  -- | 'exportId'
+  Prelude.Text ->
+  DeleteExport
+newDeleteExport pExportId_ =
+  DeleteExport' {exportId = pExportId_}
+
+-- | The unique identifier of the export to delete.
+deleteExport_exportId :: Lens.Lens' DeleteExport Prelude.Text
+deleteExport_exportId = Lens.lens (\DeleteExport' {exportId} -> exportId) (\s@DeleteExport' {} a -> s {exportId = a} :: DeleteExport)
+
+instance Core.AWSRequest DeleteExport where
+  type AWSResponse DeleteExport = DeleteExportResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DeleteExportResponse'
+            Prelude.<$> (x Data..?> "exportId")
+            Prelude.<*> (x Data..?> "exportStatus")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeleteExport where
+  hashWithSalt _salt DeleteExport' {..} =
+    _salt `Prelude.hashWithSalt` exportId
+
+instance Prelude.NFData DeleteExport where
+  rnf DeleteExport' {..} = Prelude.rnf exportId
+
+instance Data.ToHeaders DeleteExport where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath DeleteExport where
+  toPath DeleteExport' {..} =
+    Prelude.mconcat
+      ["/exports/", Data.toBS exportId, "/"]
+
+instance Data.ToQuery DeleteExport where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteExportResponse' smart constructor.
+data DeleteExportResponse = DeleteExportResponse'
+  { -- | The unique identifier of the deleted export.
+    exportId :: Prelude.Maybe Prelude.Text,
+    -- | The current status of the deletion. When the deletion is complete, the
+    -- export will no longer be returned by the
+    -- <https://docs.aws.amazon.com/lexv2/latest/dg/API_ListExports.html ListExports>
+    -- operation and calls to the
+    -- <https://docs.aws.amazon.com/lexv2/latest/dg/API_DescribeExport.html DescribeExport>
+    -- operation with the export identifier will fail.
+    exportStatus :: Prelude.Maybe ExportStatus,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteExportResponse' 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:
+--
+-- 'exportId', 'deleteExportResponse_exportId' - The unique identifier of the deleted export.
+--
+-- 'exportStatus', 'deleteExportResponse_exportStatus' - The current status of the deletion. When the deletion is complete, the
+-- export will no longer be returned by the
+-- <https://docs.aws.amazon.com/lexv2/latest/dg/API_ListExports.html ListExports>
+-- operation and calls to the
+-- <https://docs.aws.amazon.com/lexv2/latest/dg/API_DescribeExport.html DescribeExport>
+-- operation with the export identifier will fail.
+--
+-- 'httpStatus', 'deleteExportResponse_httpStatus' - The response's http status code.
+newDeleteExportResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteExportResponse
+newDeleteExportResponse pHttpStatus_ =
+  DeleteExportResponse'
+    { exportId = Prelude.Nothing,
+      exportStatus = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The unique identifier of the deleted export.
+deleteExportResponse_exportId :: Lens.Lens' DeleteExportResponse (Prelude.Maybe Prelude.Text)
+deleteExportResponse_exportId = Lens.lens (\DeleteExportResponse' {exportId} -> exportId) (\s@DeleteExportResponse' {} a -> s {exportId = a} :: DeleteExportResponse)
+
+-- | The current status of the deletion. When the deletion is complete, the
+-- export will no longer be returned by the
+-- <https://docs.aws.amazon.com/lexv2/latest/dg/API_ListExports.html ListExports>
+-- operation and calls to the
+-- <https://docs.aws.amazon.com/lexv2/latest/dg/API_DescribeExport.html DescribeExport>
+-- operation with the export identifier will fail.
+deleteExportResponse_exportStatus :: Lens.Lens' DeleteExportResponse (Prelude.Maybe ExportStatus)
+deleteExportResponse_exportStatus = Lens.lens (\DeleteExportResponse' {exportStatus} -> exportStatus) (\s@DeleteExportResponse' {} a -> s {exportStatus = a} :: DeleteExportResponse)
+
+-- | The response's http status code.
+deleteExportResponse_httpStatus :: Lens.Lens' DeleteExportResponse Prelude.Int
+deleteExportResponse_httpStatus = Lens.lens (\DeleteExportResponse' {httpStatus} -> httpStatus) (\s@DeleteExportResponse' {} a -> s {httpStatus = a} :: DeleteExportResponse)
+
+instance Prelude.NFData DeleteExportResponse where
+  rnf DeleteExportResponse' {..} =
+    Prelude.rnf exportId
+      `Prelude.seq` Prelude.rnf exportStatus
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/LexV2Models/DeleteImport.hs b/gen/Amazonka/LexV2Models/DeleteImport.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/DeleteImport.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.LexV2Models.DeleteImport
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Removes a previous import and the associated file stored in an S3
+-- bucket.
+module Amazonka.LexV2Models.DeleteImport
+  ( -- * Creating a Request
+    DeleteImport (..),
+    newDeleteImport,
+
+    -- * Request Lenses
+    deleteImport_importId,
+
+    -- * Destructuring the Response
+    DeleteImportResponse (..),
+    newDeleteImportResponse,
+
+    -- * Response Lenses
+    deleteImportResponse_importId,
+    deleteImportResponse_importStatus,
+    deleteImportResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LexV2Models.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteImport' smart constructor.
+data DeleteImport = DeleteImport'
+  { -- | The unique identifier of the import to delete.
+    importId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteImport' 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:
+--
+-- 'importId', 'deleteImport_importId' - The unique identifier of the import to delete.
+newDeleteImport ::
+  -- | 'importId'
+  Prelude.Text ->
+  DeleteImport
+newDeleteImport pImportId_ =
+  DeleteImport' {importId = pImportId_}
+
+-- | The unique identifier of the import to delete.
+deleteImport_importId :: Lens.Lens' DeleteImport Prelude.Text
+deleteImport_importId = Lens.lens (\DeleteImport' {importId} -> importId) (\s@DeleteImport' {} a -> s {importId = a} :: DeleteImport)
+
+instance Core.AWSRequest DeleteImport where
+  type AWSResponse DeleteImport = DeleteImportResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DeleteImportResponse'
+            Prelude.<$> (x Data..?> "importId")
+            Prelude.<*> (x Data..?> "importStatus")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeleteImport where
+  hashWithSalt _salt DeleteImport' {..} =
+    _salt `Prelude.hashWithSalt` importId
+
+instance Prelude.NFData DeleteImport where
+  rnf DeleteImport' {..} = Prelude.rnf importId
+
+instance Data.ToHeaders DeleteImport where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath DeleteImport where
+  toPath DeleteImport' {..} =
+    Prelude.mconcat
+      ["/imports/", Data.toBS importId, "/"]
+
+instance Data.ToQuery DeleteImport where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteImportResponse' smart constructor.
+data DeleteImportResponse = DeleteImportResponse'
+  { -- | The unique identifier of the deleted import.
+    importId :: Prelude.Maybe Prelude.Text,
+    -- | The current status of the deletion. When the deletion is complete, the
+    -- import will no longer be returned by the
+    -- <https://docs.aws.amazon.com/lexv2/latest/dg/API_ListImports.html ListImports>
+    -- operation and calls to the
+    -- <https://docs.aws.amazon.com/lexv2/latest/dg/API_DescribeImport.html DescribeImport>
+    -- operation with the import identifier will fail.
+    importStatus :: Prelude.Maybe ImportStatus,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteImportResponse' 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:
+--
+-- 'importId', 'deleteImportResponse_importId' - The unique identifier of the deleted import.
+--
+-- 'importStatus', 'deleteImportResponse_importStatus' - The current status of the deletion. When the deletion is complete, the
+-- import will no longer be returned by the
+-- <https://docs.aws.amazon.com/lexv2/latest/dg/API_ListImports.html ListImports>
+-- operation and calls to the
+-- <https://docs.aws.amazon.com/lexv2/latest/dg/API_DescribeImport.html DescribeImport>
+-- operation with the import identifier will fail.
+--
+-- 'httpStatus', 'deleteImportResponse_httpStatus' - The response's http status code.
+newDeleteImportResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteImportResponse
+newDeleteImportResponse pHttpStatus_ =
+  DeleteImportResponse'
+    { importId = Prelude.Nothing,
+      importStatus = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The unique identifier of the deleted import.
+deleteImportResponse_importId :: Lens.Lens' DeleteImportResponse (Prelude.Maybe Prelude.Text)
+deleteImportResponse_importId = Lens.lens (\DeleteImportResponse' {importId} -> importId) (\s@DeleteImportResponse' {} a -> s {importId = a} :: DeleteImportResponse)
+
+-- | The current status of the deletion. When the deletion is complete, the
+-- import will no longer be returned by the
+-- <https://docs.aws.amazon.com/lexv2/latest/dg/API_ListImports.html ListImports>
+-- operation and calls to the
+-- <https://docs.aws.amazon.com/lexv2/latest/dg/API_DescribeImport.html DescribeImport>
+-- operation with the import identifier will fail.
+deleteImportResponse_importStatus :: Lens.Lens' DeleteImportResponse (Prelude.Maybe ImportStatus)
+deleteImportResponse_importStatus = Lens.lens (\DeleteImportResponse' {importStatus} -> importStatus) (\s@DeleteImportResponse' {} a -> s {importStatus = a} :: DeleteImportResponse)
+
+-- | The response's http status code.
+deleteImportResponse_httpStatus :: Lens.Lens' DeleteImportResponse Prelude.Int
+deleteImportResponse_httpStatus = Lens.lens (\DeleteImportResponse' {httpStatus} -> httpStatus) (\s@DeleteImportResponse' {} a -> s {httpStatus = a} :: DeleteImportResponse)
+
+instance Prelude.NFData DeleteImportResponse where
+  rnf DeleteImportResponse' {..} =
+    Prelude.rnf importId
+      `Prelude.seq` Prelude.rnf importStatus
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/LexV2Models/DeleteIntent.hs b/gen/Amazonka/LexV2Models/DeleteIntent.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/DeleteIntent.hs
@@ -0,0 +1,190 @@
+{-# 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.LexV2Models.DeleteIntent
+-- 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 intent.
+--
+-- Deleting an intent also deletes the slots associated with the intent.
+module Amazonka.LexV2Models.DeleteIntent
+  ( -- * Creating a Request
+    DeleteIntent (..),
+    newDeleteIntent,
+
+    -- * Request Lenses
+    deleteIntent_intentId,
+    deleteIntent_botId,
+    deleteIntent_botVersion,
+    deleteIntent_localeId,
+
+    -- * Destructuring the Response
+    DeleteIntentResponse (..),
+    newDeleteIntentResponse,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LexV2Models.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteIntent' smart constructor.
+data DeleteIntent = DeleteIntent'
+  { -- | The unique identifier of the intent to delete.
+    intentId :: Prelude.Text,
+    -- | The identifier of the bot associated with the intent.
+    botId :: Prelude.Text,
+    -- | The version of the bot associated with the intent.
+    botVersion :: Prelude.Text,
+    -- | The identifier of the language and locale where the bot will be deleted.
+    -- The string must match one of the supported locales. For more
+    -- information, see
+    -- <https://docs.aws.amazon.com/lexv2/latest/dg/how-languages.html Supported languages>.
+    localeId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteIntent' 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:
+--
+-- 'intentId', 'deleteIntent_intentId' - The unique identifier of the intent to delete.
+--
+-- 'botId', 'deleteIntent_botId' - The identifier of the bot associated with the intent.
+--
+-- 'botVersion', 'deleteIntent_botVersion' - The version of the bot associated with the intent.
+--
+-- 'localeId', 'deleteIntent_localeId' - The identifier of the language and locale where the bot will be deleted.
+-- The string must match one of the supported locales. For more
+-- information, see
+-- <https://docs.aws.amazon.com/lexv2/latest/dg/how-languages.html Supported languages>.
+newDeleteIntent ::
+  -- | 'intentId'
+  Prelude.Text ->
+  -- | 'botId'
+  Prelude.Text ->
+  -- | 'botVersion'
+  Prelude.Text ->
+  -- | 'localeId'
+  Prelude.Text ->
+  DeleteIntent
+newDeleteIntent
+  pIntentId_
+  pBotId_
+  pBotVersion_
+  pLocaleId_ =
+    DeleteIntent'
+      { intentId = pIntentId_,
+        botId = pBotId_,
+        botVersion = pBotVersion_,
+        localeId = pLocaleId_
+      }
+
+-- | The unique identifier of the intent to delete.
+deleteIntent_intentId :: Lens.Lens' DeleteIntent Prelude.Text
+deleteIntent_intentId = Lens.lens (\DeleteIntent' {intentId} -> intentId) (\s@DeleteIntent' {} a -> s {intentId = a} :: DeleteIntent)
+
+-- | The identifier of the bot associated with the intent.
+deleteIntent_botId :: Lens.Lens' DeleteIntent Prelude.Text
+deleteIntent_botId = Lens.lens (\DeleteIntent' {botId} -> botId) (\s@DeleteIntent' {} a -> s {botId = a} :: DeleteIntent)
+
+-- | The version of the bot associated with the intent.
+deleteIntent_botVersion :: Lens.Lens' DeleteIntent Prelude.Text
+deleteIntent_botVersion = Lens.lens (\DeleteIntent' {botVersion} -> botVersion) (\s@DeleteIntent' {} a -> s {botVersion = a} :: DeleteIntent)
+
+-- | The identifier of the language and locale where the bot will be deleted.
+-- The string must match one of the supported locales. For more
+-- information, see
+-- <https://docs.aws.amazon.com/lexv2/latest/dg/how-languages.html Supported languages>.
+deleteIntent_localeId :: Lens.Lens' DeleteIntent Prelude.Text
+deleteIntent_localeId = Lens.lens (\DeleteIntent' {localeId} -> localeId) (\s@DeleteIntent' {} a -> s {localeId = a} :: DeleteIntent)
+
+instance Core.AWSRequest DeleteIntent where
+  type AWSResponse DeleteIntent = DeleteIntentResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response = Response.receiveNull DeleteIntentResponse'
+
+instance Prelude.Hashable DeleteIntent where
+  hashWithSalt _salt DeleteIntent' {..} =
+    _salt
+      `Prelude.hashWithSalt` intentId
+      `Prelude.hashWithSalt` botId
+      `Prelude.hashWithSalt` botVersion
+      `Prelude.hashWithSalt` localeId
+
+instance Prelude.NFData DeleteIntent where
+  rnf DeleteIntent' {..} =
+    Prelude.rnf intentId
+      `Prelude.seq` Prelude.rnf botId
+      `Prelude.seq` Prelude.rnf botVersion
+      `Prelude.seq` Prelude.rnf localeId
+
+instance Data.ToHeaders DeleteIntent where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath DeleteIntent where
+  toPath DeleteIntent' {..} =
+    Prelude.mconcat
+      [ "/bots/",
+        Data.toBS botId,
+        "/botversions/",
+        Data.toBS botVersion,
+        "/botlocales/",
+        Data.toBS localeId,
+        "/intents/",
+        Data.toBS intentId,
+        "/"
+      ]
+
+instance Data.ToQuery DeleteIntent where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteIntentResponse' smart constructor.
+data DeleteIntentResponse = DeleteIntentResponse'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteIntentResponse' 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.
+newDeleteIntentResponse ::
+  DeleteIntentResponse
+newDeleteIntentResponse = DeleteIntentResponse'
+
+instance Prelude.NFData DeleteIntentResponse where
+  rnf _ = ()
diff --git a/gen/Amazonka/LexV2Models/DeleteResourcePolicy.hs b/gen/Amazonka/LexV2Models/DeleteResourcePolicy.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/DeleteResourcePolicy.hs
@@ -0,0 +1,218 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.LexV2Models.DeleteResourcePolicy
+-- 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 an existing policy from a bot or bot alias. If the resource
+-- doesn\'t have a policy attached, Amazon Lex returns an exception.
+module Amazonka.LexV2Models.DeleteResourcePolicy
+  ( -- * Creating a Request
+    DeleteResourcePolicy (..),
+    newDeleteResourcePolicy,
+
+    -- * Request Lenses
+    deleteResourcePolicy_expectedRevisionId,
+    deleteResourcePolicy_resourceArn,
+
+    -- * Destructuring the Response
+    DeleteResourcePolicyResponse (..),
+    newDeleteResourcePolicyResponse,
+
+    -- * Response Lenses
+    deleteResourcePolicyResponse_resourceArn,
+    deleteResourcePolicyResponse_revisionId,
+    deleteResourcePolicyResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LexV2Models.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteResourcePolicy' smart constructor.
+data DeleteResourcePolicy = DeleteResourcePolicy'
+  { -- | The identifier of the revision to edit. If this ID doesn\'t match the
+    -- current revision number, Amazon Lex returns an exception
+    --
+    -- If you don\'t specify a revision ID, Amazon Lex will delete the current
+    -- policy.
+    expectedRevisionId :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the bot or bot alias that has the
+    -- resource policy attached.
+    resourceArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteResourcePolicy' 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:
+--
+-- 'expectedRevisionId', 'deleteResourcePolicy_expectedRevisionId' - The identifier of the revision to edit. If this ID doesn\'t match the
+-- current revision number, Amazon Lex returns an exception
+--
+-- If you don\'t specify a revision ID, Amazon Lex will delete the current
+-- policy.
+--
+-- 'resourceArn', 'deleteResourcePolicy_resourceArn' - The Amazon Resource Name (ARN) of the bot or bot alias that has the
+-- resource policy attached.
+newDeleteResourcePolicy ::
+  -- | 'resourceArn'
+  Prelude.Text ->
+  DeleteResourcePolicy
+newDeleteResourcePolicy pResourceArn_ =
+  DeleteResourcePolicy'
+    { expectedRevisionId =
+        Prelude.Nothing,
+      resourceArn = pResourceArn_
+    }
+
+-- | The identifier of the revision to edit. If this ID doesn\'t match the
+-- current revision number, Amazon Lex returns an exception
+--
+-- If you don\'t specify a revision ID, Amazon Lex will delete the current
+-- policy.
+deleteResourcePolicy_expectedRevisionId :: Lens.Lens' DeleteResourcePolicy (Prelude.Maybe Prelude.Text)
+deleteResourcePolicy_expectedRevisionId = Lens.lens (\DeleteResourcePolicy' {expectedRevisionId} -> expectedRevisionId) (\s@DeleteResourcePolicy' {} a -> s {expectedRevisionId = a} :: DeleteResourcePolicy)
+
+-- | The Amazon Resource Name (ARN) of the bot or bot alias that has the
+-- resource policy attached.
+deleteResourcePolicy_resourceArn :: Lens.Lens' DeleteResourcePolicy Prelude.Text
+deleteResourcePolicy_resourceArn = Lens.lens (\DeleteResourcePolicy' {resourceArn} -> resourceArn) (\s@DeleteResourcePolicy' {} a -> s {resourceArn = a} :: DeleteResourcePolicy)
+
+instance Core.AWSRequest DeleteResourcePolicy where
+  type
+    AWSResponse DeleteResourcePolicy =
+      DeleteResourcePolicyResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DeleteResourcePolicyResponse'
+            Prelude.<$> (x Data..?> "resourceArn")
+            Prelude.<*> (x Data..?> "revisionId")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeleteResourcePolicy where
+  hashWithSalt _salt DeleteResourcePolicy' {..} =
+    _salt
+      `Prelude.hashWithSalt` expectedRevisionId
+      `Prelude.hashWithSalt` resourceArn
+
+instance Prelude.NFData DeleteResourcePolicy where
+  rnf DeleteResourcePolicy' {..} =
+    Prelude.rnf expectedRevisionId
+      `Prelude.seq` Prelude.rnf resourceArn
+
+instance Data.ToHeaders DeleteResourcePolicy where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath DeleteResourcePolicy where
+  toPath DeleteResourcePolicy' {..} =
+    Prelude.mconcat
+      ["/policy/", Data.toBS resourceArn, "/"]
+
+instance Data.ToQuery DeleteResourcePolicy where
+  toQuery DeleteResourcePolicy' {..} =
+    Prelude.mconcat
+      ["expectedRevisionId" Data.=: expectedRevisionId]
+
+-- | /See:/ 'newDeleteResourcePolicyResponse' smart constructor.
+data DeleteResourcePolicyResponse = DeleteResourcePolicyResponse'
+  { -- | The Amazon Resource Name (ARN) of the bot or bot alias that the resource
+    -- policy was deleted from.
+    resourceArn :: Prelude.Maybe Prelude.Text,
+    -- | The current revision of the resource policy. Use the revision ID to make
+    -- sure that you are updating the most current version of a resource policy
+    -- when you add a policy statement to a resource, delete a resource, or
+    -- update a resource.
+    revisionId :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteResourcePolicyResponse' 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', 'deleteResourcePolicyResponse_resourceArn' - The Amazon Resource Name (ARN) of the bot or bot alias that the resource
+-- policy was deleted from.
+--
+-- 'revisionId', 'deleteResourcePolicyResponse_revisionId' - The current revision of the resource policy. Use the revision ID to make
+-- sure that you are updating the most current version of a resource policy
+-- when you add a policy statement to a resource, delete a resource, or
+-- update a resource.
+--
+-- 'httpStatus', 'deleteResourcePolicyResponse_httpStatus' - The response's http status code.
+newDeleteResourcePolicyResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteResourcePolicyResponse
+newDeleteResourcePolicyResponse pHttpStatus_ =
+  DeleteResourcePolicyResponse'
+    { resourceArn =
+        Prelude.Nothing,
+      revisionId = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The Amazon Resource Name (ARN) of the bot or bot alias that the resource
+-- policy was deleted from.
+deleteResourcePolicyResponse_resourceArn :: Lens.Lens' DeleteResourcePolicyResponse (Prelude.Maybe Prelude.Text)
+deleteResourcePolicyResponse_resourceArn = Lens.lens (\DeleteResourcePolicyResponse' {resourceArn} -> resourceArn) (\s@DeleteResourcePolicyResponse' {} a -> s {resourceArn = a} :: DeleteResourcePolicyResponse)
+
+-- | The current revision of the resource policy. Use the revision ID to make
+-- sure that you are updating the most current version of a resource policy
+-- when you add a policy statement to a resource, delete a resource, or
+-- update a resource.
+deleteResourcePolicyResponse_revisionId :: Lens.Lens' DeleteResourcePolicyResponse (Prelude.Maybe Prelude.Text)
+deleteResourcePolicyResponse_revisionId = Lens.lens (\DeleteResourcePolicyResponse' {revisionId} -> revisionId) (\s@DeleteResourcePolicyResponse' {} a -> s {revisionId = a} :: DeleteResourcePolicyResponse)
+
+-- | The response's http status code.
+deleteResourcePolicyResponse_httpStatus :: Lens.Lens' DeleteResourcePolicyResponse Prelude.Int
+deleteResourcePolicyResponse_httpStatus = Lens.lens (\DeleteResourcePolicyResponse' {httpStatus} -> httpStatus) (\s@DeleteResourcePolicyResponse' {} a -> s {httpStatus = a} :: DeleteResourcePolicyResponse)
+
+instance Prelude.NFData DeleteResourcePolicyResponse where
+  rnf DeleteResourcePolicyResponse' {..} =
+    Prelude.rnf resourceArn
+      `Prelude.seq` Prelude.rnf revisionId
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/LexV2Models/DeleteResourcePolicyStatement.hs b/gen/Amazonka/LexV2Models/DeleteResourcePolicyStatement.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/DeleteResourcePolicyStatement.hs
@@ -0,0 +1,253 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.LexV2Models.DeleteResourcePolicyStatement
+-- 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 a policy statement from a resource policy. If you delete the
+-- last statement from a policy, the policy is deleted. If you specify a
+-- statement ID that doesn\'t exist in the policy, or if the bot or bot
+-- alias doesn\'t have a policy attached, Amazon Lex returns an exception.
+module Amazonka.LexV2Models.DeleteResourcePolicyStatement
+  ( -- * Creating a Request
+    DeleteResourcePolicyStatement (..),
+    newDeleteResourcePolicyStatement,
+
+    -- * Request Lenses
+    deleteResourcePolicyStatement_expectedRevisionId,
+    deleteResourcePolicyStatement_resourceArn,
+    deleteResourcePolicyStatement_statementId,
+
+    -- * Destructuring the Response
+    DeleteResourcePolicyStatementResponse (..),
+    newDeleteResourcePolicyStatementResponse,
+
+    -- * Response Lenses
+    deleteResourcePolicyStatementResponse_resourceArn,
+    deleteResourcePolicyStatementResponse_revisionId,
+    deleteResourcePolicyStatementResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LexV2Models.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteResourcePolicyStatement' smart constructor.
+data DeleteResourcePolicyStatement = DeleteResourcePolicyStatement'
+  { -- | The identifier of the revision of the policy to delete the statement
+    -- from. If this revision ID doesn\'t match the current revision ID, Amazon
+    -- Lex throws an exception.
+    --
+    -- If you don\'t specify a revision, Amazon Lex removes the current
+    -- contents of the statement.
+    expectedRevisionId :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the bot or bot alias that the resource
+    -- policy is attached to.
+    resourceArn :: Prelude.Text,
+    -- | The name of the statement (SID) to delete from the policy.
+    statementId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteResourcePolicyStatement' 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:
+--
+-- 'expectedRevisionId', 'deleteResourcePolicyStatement_expectedRevisionId' - The identifier of the revision of the policy to delete the statement
+-- from. If this revision ID doesn\'t match the current revision ID, Amazon
+-- Lex throws an exception.
+--
+-- If you don\'t specify a revision, Amazon Lex removes the current
+-- contents of the statement.
+--
+-- 'resourceArn', 'deleteResourcePolicyStatement_resourceArn' - The Amazon Resource Name (ARN) of the bot or bot alias that the resource
+-- policy is attached to.
+--
+-- 'statementId', 'deleteResourcePolicyStatement_statementId' - The name of the statement (SID) to delete from the policy.
+newDeleteResourcePolicyStatement ::
+  -- | 'resourceArn'
+  Prelude.Text ->
+  -- | 'statementId'
+  Prelude.Text ->
+  DeleteResourcePolicyStatement
+newDeleteResourcePolicyStatement
+  pResourceArn_
+  pStatementId_ =
+    DeleteResourcePolicyStatement'
+      { expectedRevisionId =
+          Prelude.Nothing,
+        resourceArn = pResourceArn_,
+        statementId = pStatementId_
+      }
+
+-- | The identifier of the revision of the policy to delete the statement
+-- from. If this revision ID doesn\'t match the current revision ID, Amazon
+-- Lex throws an exception.
+--
+-- If you don\'t specify a revision, Amazon Lex removes the current
+-- contents of the statement.
+deleteResourcePolicyStatement_expectedRevisionId :: Lens.Lens' DeleteResourcePolicyStatement (Prelude.Maybe Prelude.Text)
+deleteResourcePolicyStatement_expectedRevisionId = Lens.lens (\DeleteResourcePolicyStatement' {expectedRevisionId} -> expectedRevisionId) (\s@DeleteResourcePolicyStatement' {} a -> s {expectedRevisionId = a} :: DeleteResourcePolicyStatement)
+
+-- | The Amazon Resource Name (ARN) of the bot or bot alias that the resource
+-- policy is attached to.
+deleteResourcePolicyStatement_resourceArn :: Lens.Lens' DeleteResourcePolicyStatement Prelude.Text
+deleteResourcePolicyStatement_resourceArn = Lens.lens (\DeleteResourcePolicyStatement' {resourceArn} -> resourceArn) (\s@DeleteResourcePolicyStatement' {} a -> s {resourceArn = a} :: DeleteResourcePolicyStatement)
+
+-- | The name of the statement (SID) to delete from the policy.
+deleteResourcePolicyStatement_statementId :: Lens.Lens' DeleteResourcePolicyStatement Prelude.Text
+deleteResourcePolicyStatement_statementId = Lens.lens (\DeleteResourcePolicyStatement' {statementId} -> statementId) (\s@DeleteResourcePolicyStatement' {} a -> s {statementId = a} :: DeleteResourcePolicyStatement)
+
+instance
+  Core.AWSRequest
+    DeleteResourcePolicyStatement
+  where
+  type
+    AWSResponse DeleteResourcePolicyStatement =
+      DeleteResourcePolicyStatementResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DeleteResourcePolicyStatementResponse'
+            Prelude.<$> (x Data..?> "resourceArn")
+            Prelude.<*> (x Data..?> "revisionId")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    DeleteResourcePolicyStatement
+  where
+  hashWithSalt _salt DeleteResourcePolicyStatement' {..} =
+    _salt
+      `Prelude.hashWithSalt` expectedRevisionId
+      `Prelude.hashWithSalt` resourceArn
+      `Prelude.hashWithSalt` statementId
+
+instance Prelude.NFData DeleteResourcePolicyStatement where
+  rnf DeleteResourcePolicyStatement' {..} =
+    Prelude.rnf expectedRevisionId
+      `Prelude.seq` Prelude.rnf resourceArn
+      `Prelude.seq` Prelude.rnf statementId
+
+instance Data.ToHeaders DeleteResourcePolicyStatement where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath DeleteResourcePolicyStatement where
+  toPath DeleteResourcePolicyStatement' {..} =
+    Prelude.mconcat
+      [ "/policy/",
+        Data.toBS resourceArn,
+        "/statements/",
+        Data.toBS statementId,
+        "/"
+      ]
+
+instance Data.ToQuery DeleteResourcePolicyStatement where
+  toQuery DeleteResourcePolicyStatement' {..} =
+    Prelude.mconcat
+      ["expectedRevisionId" Data.=: expectedRevisionId]
+
+-- | /See:/ 'newDeleteResourcePolicyStatementResponse' smart constructor.
+data DeleteResourcePolicyStatementResponse = DeleteResourcePolicyStatementResponse'
+  { -- | The Amazon Resource Name (ARN) of the bot or bot alias that the resource
+    -- policy statement was removed from.
+    resourceArn :: Prelude.Maybe Prelude.Text,
+    -- | The current revision of the resource policy. Use the revision ID to make
+    -- sure that you are updating the most current version of a resource policy
+    -- when you add a policy statement to a resource, delete a resource, or
+    -- update a resource.
+    revisionId :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteResourcePolicyStatementResponse' 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', 'deleteResourcePolicyStatementResponse_resourceArn' - The Amazon Resource Name (ARN) of the bot or bot alias that the resource
+-- policy statement was removed from.
+--
+-- 'revisionId', 'deleteResourcePolicyStatementResponse_revisionId' - The current revision of the resource policy. Use the revision ID to make
+-- sure that you are updating the most current version of a resource policy
+-- when you add a policy statement to a resource, delete a resource, or
+-- update a resource.
+--
+-- 'httpStatus', 'deleteResourcePolicyStatementResponse_httpStatus' - The response's http status code.
+newDeleteResourcePolicyStatementResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteResourcePolicyStatementResponse
+newDeleteResourcePolicyStatementResponse pHttpStatus_ =
+  DeleteResourcePolicyStatementResponse'
+    { resourceArn =
+        Prelude.Nothing,
+      revisionId = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The Amazon Resource Name (ARN) of the bot or bot alias that the resource
+-- policy statement was removed from.
+deleteResourcePolicyStatementResponse_resourceArn :: Lens.Lens' DeleteResourcePolicyStatementResponse (Prelude.Maybe Prelude.Text)
+deleteResourcePolicyStatementResponse_resourceArn = Lens.lens (\DeleteResourcePolicyStatementResponse' {resourceArn} -> resourceArn) (\s@DeleteResourcePolicyStatementResponse' {} a -> s {resourceArn = a} :: DeleteResourcePolicyStatementResponse)
+
+-- | The current revision of the resource policy. Use the revision ID to make
+-- sure that you are updating the most current version of a resource policy
+-- when you add a policy statement to a resource, delete a resource, or
+-- update a resource.
+deleteResourcePolicyStatementResponse_revisionId :: Lens.Lens' DeleteResourcePolicyStatementResponse (Prelude.Maybe Prelude.Text)
+deleteResourcePolicyStatementResponse_revisionId = Lens.lens (\DeleteResourcePolicyStatementResponse' {revisionId} -> revisionId) (\s@DeleteResourcePolicyStatementResponse' {} a -> s {revisionId = a} :: DeleteResourcePolicyStatementResponse)
+
+-- | The response's http status code.
+deleteResourcePolicyStatementResponse_httpStatus :: Lens.Lens' DeleteResourcePolicyStatementResponse Prelude.Int
+deleteResourcePolicyStatementResponse_httpStatus = Lens.lens (\DeleteResourcePolicyStatementResponse' {httpStatus} -> httpStatus) (\s@DeleteResourcePolicyStatementResponse' {} a -> s {httpStatus = a} :: DeleteResourcePolicyStatementResponse)
+
+instance
+  Prelude.NFData
+    DeleteResourcePolicyStatementResponse
+  where
+  rnf DeleteResourcePolicyStatementResponse' {..} =
+    Prelude.rnf resourceArn
+      `Prelude.seq` Prelude.rnf revisionId
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/LexV2Models/DeleteSlot.hs b/gen/Amazonka/LexV2Models/DeleteSlot.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/DeleteSlot.hs
@@ -0,0 +1,205 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.LexV2Models.DeleteSlot
+-- 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 slot from an intent.
+module Amazonka.LexV2Models.DeleteSlot
+  ( -- * Creating a Request
+    DeleteSlot (..),
+    newDeleteSlot,
+
+    -- * Request Lenses
+    deleteSlot_slotId,
+    deleteSlot_botId,
+    deleteSlot_botVersion,
+    deleteSlot_localeId,
+    deleteSlot_intentId,
+
+    -- * Destructuring the Response
+    DeleteSlotResponse (..),
+    newDeleteSlotResponse,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LexV2Models.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteSlot' smart constructor.
+data DeleteSlot = DeleteSlot'
+  { -- | The identifier of the slot to delete.
+    slotId :: Prelude.Text,
+    -- | The identifier of the bot associated with the slot to delete.
+    botId :: Prelude.Text,
+    -- | The version of the bot associated with the slot to delete.
+    botVersion :: Prelude.Text,
+    -- | The identifier of the language and locale that the slot will be deleted
+    -- from. The string must match one of the supported locales. For more
+    -- information, see
+    -- <https://docs.aws.amazon.com/lexv2/latest/dg/how-languages.html Supported languages>.
+    localeId :: Prelude.Text,
+    -- | The identifier of the intent associated with the slot.
+    intentId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteSlot' 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:
+--
+-- 'slotId', 'deleteSlot_slotId' - The identifier of the slot to delete.
+--
+-- 'botId', 'deleteSlot_botId' - The identifier of the bot associated with the slot to delete.
+--
+-- 'botVersion', 'deleteSlot_botVersion' - The version of the bot associated with the slot to delete.
+--
+-- 'localeId', 'deleteSlot_localeId' - The identifier of the language and locale that the slot will be deleted
+-- from. The string must match one of the supported locales. For more
+-- information, see
+-- <https://docs.aws.amazon.com/lexv2/latest/dg/how-languages.html Supported languages>.
+--
+-- 'intentId', 'deleteSlot_intentId' - The identifier of the intent associated with the slot.
+newDeleteSlot ::
+  -- | 'slotId'
+  Prelude.Text ->
+  -- | 'botId'
+  Prelude.Text ->
+  -- | 'botVersion'
+  Prelude.Text ->
+  -- | 'localeId'
+  Prelude.Text ->
+  -- | 'intentId'
+  Prelude.Text ->
+  DeleteSlot
+newDeleteSlot
+  pSlotId_
+  pBotId_
+  pBotVersion_
+  pLocaleId_
+  pIntentId_ =
+    DeleteSlot'
+      { slotId = pSlotId_,
+        botId = pBotId_,
+        botVersion = pBotVersion_,
+        localeId = pLocaleId_,
+        intentId = pIntentId_
+      }
+
+-- | The identifier of the slot to delete.
+deleteSlot_slotId :: Lens.Lens' DeleteSlot Prelude.Text
+deleteSlot_slotId = Lens.lens (\DeleteSlot' {slotId} -> slotId) (\s@DeleteSlot' {} a -> s {slotId = a} :: DeleteSlot)
+
+-- | The identifier of the bot associated with the slot to delete.
+deleteSlot_botId :: Lens.Lens' DeleteSlot Prelude.Text
+deleteSlot_botId = Lens.lens (\DeleteSlot' {botId} -> botId) (\s@DeleteSlot' {} a -> s {botId = a} :: DeleteSlot)
+
+-- | The version of the bot associated with the slot to delete.
+deleteSlot_botVersion :: Lens.Lens' DeleteSlot Prelude.Text
+deleteSlot_botVersion = Lens.lens (\DeleteSlot' {botVersion} -> botVersion) (\s@DeleteSlot' {} a -> s {botVersion = a} :: DeleteSlot)
+
+-- | The identifier of the language and locale that the slot will be deleted
+-- from. The string must match one of the supported locales. For more
+-- information, see
+-- <https://docs.aws.amazon.com/lexv2/latest/dg/how-languages.html Supported languages>.
+deleteSlot_localeId :: Lens.Lens' DeleteSlot Prelude.Text
+deleteSlot_localeId = Lens.lens (\DeleteSlot' {localeId} -> localeId) (\s@DeleteSlot' {} a -> s {localeId = a} :: DeleteSlot)
+
+-- | The identifier of the intent associated with the slot.
+deleteSlot_intentId :: Lens.Lens' DeleteSlot Prelude.Text
+deleteSlot_intentId = Lens.lens (\DeleteSlot' {intentId} -> intentId) (\s@DeleteSlot' {} a -> s {intentId = a} :: DeleteSlot)
+
+instance Core.AWSRequest DeleteSlot where
+  type AWSResponse DeleteSlot = DeleteSlotResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response = Response.receiveNull DeleteSlotResponse'
+
+instance Prelude.Hashable DeleteSlot where
+  hashWithSalt _salt DeleteSlot' {..} =
+    _salt
+      `Prelude.hashWithSalt` slotId
+      `Prelude.hashWithSalt` botId
+      `Prelude.hashWithSalt` botVersion
+      `Prelude.hashWithSalt` localeId
+      `Prelude.hashWithSalt` intentId
+
+instance Prelude.NFData DeleteSlot where
+  rnf DeleteSlot' {..} =
+    Prelude.rnf slotId
+      `Prelude.seq` Prelude.rnf botId
+      `Prelude.seq` Prelude.rnf botVersion
+      `Prelude.seq` Prelude.rnf localeId
+      `Prelude.seq` Prelude.rnf intentId
+
+instance Data.ToHeaders DeleteSlot where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath DeleteSlot where
+  toPath DeleteSlot' {..} =
+    Prelude.mconcat
+      [ "/bots/",
+        Data.toBS botId,
+        "/botversions/",
+        Data.toBS botVersion,
+        "/botlocales/",
+        Data.toBS localeId,
+        "/intents/",
+        Data.toBS intentId,
+        "/slots/",
+        Data.toBS slotId,
+        "/"
+      ]
+
+instance Data.ToQuery DeleteSlot where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteSlotResponse' smart constructor.
+data DeleteSlotResponse = DeleteSlotResponse'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteSlotResponse' 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.
+newDeleteSlotResponse ::
+  DeleteSlotResponse
+newDeleteSlotResponse = DeleteSlotResponse'
+
+instance Prelude.NFData DeleteSlotResponse where
+  rnf _ = ()
diff --git a/gen/Amazonka/LexV2Models/DeleteSlotType.hs b/gen/Amazonka/LexV2Models/DeleteSlotType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/DeleteSlotType.hs
@@ -0,0 +1,221 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.LexV2Models.DeleteSlotType
+-- 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 a slot type from a bot locale.
+--
+-- If a slot is using the slot type, Amazon Lex throws a
+-- @ResourceInUseException@ exception. To avoid the exception, set the
+-- @skipResourceInUseCheck@ parameter to @true@.
+module Amazonka.LexV2Models.DeleteSlotType
+  ( -- * Creating a Request
+    DeleteSlotType (..),
+    newDeleteSlotType,
+
+    -- * Request Lenses
+    deleteSlotType_skipResourceInUseCheck,
+    deleteSlotType_slotTypeId,
+    deleteSlotType_botId,
+    deleteSlotType_botVersion,
+    deleteSlotType_localeId,
+
+    -- * Destructuring the Response
+    DeleteSlotTypeResponse (..),
+    newDeleteSlotTypeResponse,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LexV2Models.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteSlotType' smart constructor.
+data DeleteSlotType = DeleteSlotType'
+  { -- | By default, the @DeleteSlotType@ operations throws a
+    -- @ResourceInUseException@ exception if you try to delete a slot type used
+    -- by a slot. Set the @skipResourceInUseCheck@ parameter to @true@ to skip
+    -- this check and remove the slot type even if a slot uses it.
+    skipResourceInUseCheck :: Prelude.Maybe Prelude.Bool,
+    -- | The identifier of the slot type to delete.
+    slotTypeId :: Prelude.Text,
+    -- | The identifier of the bot associated with the slot type.
+    botId :: Prelude.Text,
+    -- | The version of the bot associated with the slot type.
+    botVersion :: Prelude.Text,
+    -- | The identifier of the language and locale that the slot type will be
+    -- deleted from. The string must match one of the supported locales. For
+    -- more information, see
+    -- <https://docs.aws.amazon.com/lexv2/latest/dg/how-languages.html Supported languages>.
+    localeId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteSlotType' 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:
+--
+-- 'skipResourceInUseCheck', 'deleteSlotType_skipResourceInUseCheck' - By default, the @DeleteSlotType@ operations throws a
+-- @ResourceInUseException@ exception if you try to delete a slot type used
+-- by a slot. Set the @skipResourceInUseCheck@ parameter to @true@ to skip
+-- this check and remove the slot type even if a slot uses it.
+--
+-- 'slotTypeId', 'deleteSlotType_slotTypeId' - The identifier of the slot type to delete.
+--
+-- 'botId', 'deleteSlotType_botId' - The identifier of the bot associated with the slot type.
+--
+-- 'botVersion', 'deleteSlotType_botVersion' - The version of the bot associated with the slot type.
+--
+-- 'localeId', 'deleteSlotType_localeId' - The identifier of the language and locale that the slot type will be
+-- deleted from. The string must match one of the supported locales. For
+-- more information, see
+-- <https://docs.aws.amazon.com/lexv2/latest/dg/how-languages.html Supported languages>.
+newDeleteSlotType ::
+  -- | 'slotTypeId'
+  Prelude.Text ->
+  -- | 'botId'
+  Prelude.Text ->
+  -- | 'botVersion'
+  Prelude.Text ->
+  -- | 'localeId'
+  Prelude.Text ->
+  DeleteSlotType
+newDeleteSlotType
+  pSlotTypeId_
+  pBotId_
+  pBotVersion_
+  pLocaleId_ =
+    DeleteSlotType'
+      { skipResourceInUseCheck =
+          Prelude.Nothing,
+        slotTypeId = pSlotTypeId_,
+        botId = pBotId_,
+        botVersion = pBotVersion_,
+        localeId = pLocaleId_
+      }
+
+-- | By default, the @DeleteSlotType@ operations throws a
+-- @ResourceInUseException@ exception if you try to delete a slot type used
+-- by a slot. Set the @skipResourceInUseCheck@ parameter to @true@ to skip
+-- this check and remove the slot type even if a slot uses it.
+deleteSlotType_skipResourceInUseCheck :: Lens.Lens' DeleteSlotType (Prelude.Maybe Prelude.Bool)
+deleteSlotType_skipResourceInUseCheck = Lens.lens (\DeleteSlotType' {skipResourceInUseCheck} -> skipResourceInUseCheck) (\s@DeleteSlotType' {} a -> s {skipResourceInUseCheck = a} :: DeleteSlotType)
+
+-- | The identifier of the slot type to delete.
+deleteSlotType_slotTypeId :: Lens.Lens' DeleteSlotType Prelude.Text
+deleteSlotType_slotTypeId = Lens.lens (\DeleteSlotType' {slotTypeId} -> slotTypeId) (\s@DeleteSlotType' {} a -> s {slotTypeId = a} :: DeleteSlotType)
+
+-- | The identifier of the bot associated with the slot type.
+deleteSlotType_botId :: Lens.Lens' DeleteSlotType Prelude.Text
+deleteSlotType_botId = Lens.lens (\DeleteSlotType' {botId} -> botId) (\s@DeleteSlotType' {} a -> s {botId = a} :: DeleteSlotType)
+
+-- | The version of the bot associated with the slot type.
+deleteSlotType_botVersion :: Lens.Lens' DeleteSlotType Prelude.Text
+deleteSlotType_botVersion = Lens.lens (\DeleteSlotType' {botVersion} -> botVersion) (\s@DeleteSlotType' {} a -> s {botVersion = a} :: DeleteSlotType)
+
+-- | The identifier of the language and locale that the slot type will be
+-- deleted from. The string must match one of the supported locales. For
+-- more information, see
+-- <https://docs.aws.amazon.com/lexv2/latest/dg/how-languages.html Supported languages>.
+deleteSlotType_localeId :: Lens.Lens' DeleteSlotType Prelude.Text
+deleteSlotType_localeId = Lens.lens (\DeleteSlotType' {localeId} -> localeId) (\s@DeleteSlotType' {} a -> s {localeId = a} :: DeleteSlotType)
+
+instance Core.AWSRequest DeleteSlotType where
+  type
+    AWSResponse DeleteSlotType =
+      DeleteSlotTypeResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveNull DeleteSlotTypeResponse'
+
+instance Prelude.Hashable DeleteSlotType where
+  hashWithSalt _salt DeleteSlotType' {..} =
+    _salt
+      `Prelude.hashWithSalt` skipResourceInUseCheck
+      `Prelude.hashWithSalt` slotTypeId
+      `Prelude.hashWithSalt` botId
+      `Prelude.hashWithSalt` botVersion
+      `Prelude.hashWithSalt` localeId
+
+instance Prelude.NFData DeleteSlotType where
+  rnf DeleteSlotType' {..} =
+    Prelude.rnf skipResourceInUseCheck
+      `Prelude.seq` Prelude.rnf slotTypeId
+      `Prelude.seq` Prelude.rnf botId
+      `Prelude.seq` Prelude.rnf botVersion
+      `Prelude.seq` Prelude.rnf localeId
+
+instance Data.ToHeaders DeleteSlotType where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath DeleteSlotType where
+  toPath DeleteSlotType' {..} =
+    Prelude.mconcat
+      [ "/bots/",
+        Data.toBS botId,
+        "/botversions/",
+        Data.toBS botVersion,
+        "/botlocales/",
+        Data.toBS localeId,
+        "/slottypes/",
+        Data.toBS slotTypeId,
+        "/"
+      ]
+
+instance Data.ToQuery DeleteSlotType where
+  toQuery DeleteSlotType' {..} =
+    Prelude.mconcat
+      [ "skipResourceInUseCheck"
+          Data.=: skipResourceInUseCheck
+      ]
+
+-- | /See:/ 'newDeleteSlotTypeResponse' smart constructor.
+data DeleteSlotTypeResponse = DeleteSlotTypeResponse'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteSlotTypeResponse' 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.
+newDeleteSlotTypeResponse ::
+  DeleteSlotTypeResponse
+newDeleteSlotTypeResponse = DeleteSlotTypeResponse'
+
+instance Prelude.NFData DeleteSlotTypeResponse where
+  rnf _ = ()
diff --git a/gen/Amazonka/LexV2Models/DeleteUtterances.hs b/gen/Amazonka/LexV2Models/DeleteUtterances.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/DeleteUtterances.hs
@@ -0,0 +1,215 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.LexV2Models.DeleteUtterances
+-- 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 stored utterances.
+--
+-- Amazon Lex stores the utterances that users send to your bot. Utterances
+-- are stored for 15 days for use with the
+-- <https://docs.aws.amazon.com/lexv2/latest/dg/API_ListAggregatedUtterances.html ListAggregatedUtterances>
+-- operation, and then stored indefinitely for use in improving the ability
+-- of your bot to respond to user input..
+--
+-- Use the @DeleteUtterances@ operation to manually delete utterances for a
+-- specific session. When you use the @DeleteUtterances@ operation,
+-- utterances stored for improving your bot\'s ability to respond to user
+-- input are deleted immediately. Utterances stored for use with the
+-- @ListAggregatedUtterances@ operation are deleted after 15 days.
+module Amazonka.LexV2Models.DeleteUtterances
+  ( -- * Creating a Request
+    DeleteUtterances (..),
+    newDeleteUtterances,
+
+    -- * Request Lenses
+    deleteUtterances_localeId,
+    deleteUtterances_sessionId,
+    deleteUtterances_botId,
+
+    -- * Destructuring the Response
+    DeleteUtterancesResponse (..),
+    newDeleteUtterancesResponse,
+
+    -- * Response Lenses
+    deleteUtterancesResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LexV2Models.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteUtterances' smart constructor.
+data DeleteUtterances = DeleteUtterances'
+  { -- | The identifier of the language and locale where the utterances were
+    -- collected. The string must match one of the supported locales. For more
+    -- information, see
+    -- <https://docs.aws.amazon.com/lexv2/latest/dg/how-languages.html Supported languages>.
+    localeId :: Prelude.Maybe Prelude.Text,
+    -- | The unique identifier of the session with the user. The ID is returned
+    -- in the response from the
+    -- <https://docs.aws.amazon.com/lexv2/latest/dg/API_runtime_RecognizeText.html RecognizeText>
+    -- and
+    -- <https://docs.aws.amazon.com/lexv2/latest/dg/API_runtime_RecognizeUtterance.html RecognizeUtterance>
+    -- operations.
+    sessionId :: Prelude.Maybe Prelude.Text,
+    -- | The unique identifier of the bot that contains the utterances.
+    botId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteUtterances' 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:
+--
+-- 'localeId', 'deleteUtterances_localeId' - The identifier of the language and locale where the utterances were
+-- collected. The string must match one of the supported locales. For more
+-- information, see
+-- <https://docs.aws.amazon.com/lexv2/latest/dg/how-languages.html Supported languages>.
+--
+-- 'sessionId', 'deleteUtterances_sessionId' - The unique identifier of the session with the user. The ID is returned
+-- in the response from the
+-- <https://docs.aws.amazon.com/lexv2/latest/dg/API_runtime_RecognizeText.html RecognizeText>
+-- and
+-- <https://docs.aws.amazon.com/lexv2/latest/dg/API_runtime_RecognizeUtterance.html RecognizeUtterance>
+-- operations.
+--
+-- 'botId', 'deleteUtterances_botId' - The unique identifier of the bot that contains the utterances.
+newDeleteUtterances ::
+  -- | 'botId'
+  Prelude.Text ->
+  DeleteUtterances
+newDeleteUtterances pBotId_ =
+  DeleteUtterances'
+    { localeId = Prelude.Nothing,
+      sessionId = Prelude.Nothing,
+      botId = pBotId_
+    }
+
+-- | The identifier of the language and locale where the utterances were
+-- collected. The string must match one of the supported locales. For more
+-- information, see
+-- <https://docs.aws.amazon.com/lexv2/latest/dg/how-languages.html Supported languages>.
+deleteUtterances_localeId :: Lens.Lens' DeleteUtterances (Prelude.Maybe Prelude.Text)
+deleteUtterances_localeId = Lens.lens (\DeleteUtterances' {localeId} -> localeId) (\s@DeleteUtterances' {} a -> s {localeId = a} :: DeleteUtterances)
+
+-- | The unique identifier of the session with the user. The ID is returned
+-- in the response from the
+-- <https://docs.aws.amazon.com/lexv2/latest/dg/API_runtime_RecognizeText.html RecognizeText>
+-- and
+-- <https://docs.aws.amazon.com/lexv2/latest/dg/API_runtime_RecognizeUtterance.html RecognizeUtterance>
+-- operations.
+deleteUtterances_sessionId :: Lens.Lens' DeleteUtterances (Prelude.Maybe Prelude.Text)
+deleteUtterances_sessionId = Lens.lens (\DeleteUtterances' {sessionId} -> sessionId) (\s@DeleteUtterances' {} a -> s {sessionId = a} :: DeleteUtterances)
+
+-- | The unique identifier of the bot that contains the utterances.
+deleteUtterances_botId :: Lens.Lens' DeleteUtterances Prelude.Text
+deleteUtterances_botId = Lens.lens (\DeleteUtterances' {botId} -> botId) (\s@DeleteUtterances' {} a -> s {botId = a} :: DeleteUtterances)
+
+instance Core.AWSRequest DeleteUtterances where
+  type
+    AWSResponse DeleteUtterances =
+      DeleteUtterancesResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          DeleteUtterancesResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeleteUtterances where
+  hashWithSalt _salt DeleteUtterances' {..} =
+    _salt
+      `Prelude.hashWithSalt` localeId
+      `Prelude.hashWithSalt` sessionId
+      `Prelude.hashWithSalt` botId
+
+instance Prelude.NFData DeleteUtterances where
+  rnf DeleteUtterances' {..} =
+    Prelude.rnf localeId
+      `Prelude.seq` Prelude.rnf sessionId
+      `Prelude.seq` Prelude.rnf botId
+
+instance Data.ToHeaders DeleteUtterances where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath DeleteUtterances where
+  toPath DeleteUtterances' {..} =
+    Prelude.mconcat
+      ["/bots/", Data.toBS botId, "/utterances/"]
+
+instance Data.ToQuery DeleteUtterances where
+  toQuery DeleteUtterances' {..} =
+    Prelude.mconcat
+      [ "localeId" Data.=: localeId,
+        "sessionId" Data.=: sessionId
+      ]
+
+-- | /See:/ 'newDeleteUtterancesResponse' smart constructor.
+data DeleteUtterancesResponse = DeleteUtterancesResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteUtterancesResponse' 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', 'deleteUtterancesResponse_httpStatus' - The response's http status code.
+newDeleteUtterancesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteUtterancesResponse
+newDeleteUtterancesResponse pHttpStatus_ =
+  DeleteUtterancesResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+deleteUtterancesResponse_httpStatus :: Lens.Lens' DeleteUtterancesResponse Prelude.Int
+deleteUtterancesResponse_httpStatus = Lens.lens (\DeleteUtterancesResponse' {httpStatus} -> httpStatus) (\s@DeleteUtterancesResponse' {} a -> s {httpStatus = a} :: DeleteUtterancesResponse)
+
+instance Prelude.NFData DeleteUtterancesResponse where
+  rnf DeleteUtterancesResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/LexV2Models/DescribeBot.hs b/gen/Amazonka/LexV2Models/DescribeBot.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/DescribeBot.hs
@@ -0,0 +1,263 @@
+{-# 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.LexV2Models.DescribeBot
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Provides metadata information about a bot.
+module Amazonka.LexV2Models.DescribeBot
+  ( -- * Creating a Request
+    DescribeBot (..),
+    newDescribeBot,
+
+    -- * Request Lenses
+    describeBot_botId,
+
+    -- * Destructuring the Response
+    DescribeBotResponse (..),
+    newDescribeBotResponse,
+
+    -- * Response Lenses
+    describeBotResponse_botId,
+    describeBotResponse_botName,
+    describeBotResponse_botStatus,
+    describeBotResponse_creationDateTime,
+    describeBotResponse_dataPrivacy,
+    describeBotResponse_description,
+    describeBotResponse_idleSessionTTLInSeconds,
+    describeBotResponse_lastUpdatedDateTime,
+    describeBotResponse_roleArn,
+    describeBotResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LexV2Models.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeBot' smart constructor.
+data DescribeBot = DescribeBot'
+  { -- | The unique identifier of the bot to describe.
+    botId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeBot' 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:
+--
+-- 'botId', 'describeBot_botId' - The unique identifier of the bot to describe.
+newDescribeBot ::
+  -- | 'botId'
+  Prelude.Text ->
+  DescribeBot
+newDescribeBot pBotId_ =
+  DescribeBot' {botId = pBotId_}
+
+-- | The unique identifier of the bot to describe.
+describeBot_botId :: Lens.Lens' DescribeBot Prelude.Text
+describeBot_botId = Lens.lens (\DescribeBot' {botId} -> botId) (\s@DescribeBot' {} a -> s {botId = a} :: DescribeBot)
+
+instance Core.AWSRequest DescribeBot where
+  type AWSResponse DescribeBot = DescribeBotResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeBotResponse'
+            Prelude.<$> (x Data..?> "botId")
+            Prelude.<*> (x Data..?> "botName")
+            Prelude.<*> (x Data..?> "botStatus")
+            Prelude.<*> (x Data..?> "creationDateTime")
+            Prelude.<*> (x Data..?> "dataPrivacy")
+            Prelude.<*> (x Data..?> "description")
+            Prelude.<*> (x Data..?> "idleSessionTTLInSeconds")
+            Prelude.<*> (x Data..?> "lastUpdatedDateTime")
+            Prelude.<*> (x Data..?> "roleArn")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeBot where
+  hashWithSalt _salt DescribeBot' {..} =
+    _salt `Prelude.hashWithSalt` botId
+
+instance Prelude.NFData DescribeBot where
+  rnf DescribeBot' {..} = Prelude.rnf botId
+
+instance Data.ToHeaders DescribeBot where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath DescribeBot where
+  toPath DescribeBot' {..} =
+    Prelude.mconcat ["/bots/", Data.toBS botId, "/"]
+
+instance Data.ToQuery DescribeBot where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDescribeBotResponse' smart constructor.
+data DescribeBotResponse = DescribeBotResponse'
+  { -- | The unique identifier of the bot.
+    botId :: Prelude.Maybe Prelude.Text,
+    -- | The name of the bot.
+    botName :: Prelude.Maybe Prelude.Text,
+    -- | The current status of the bot. When the status is @Available@ the bot is
+    -- ready to be used in conversations with users.
+    botStatus :: Prelude.Maybe BotStatus,
+    -- | A timestamp of the date and time that the bot was created.
+    creationDateTime :: Prelude.Maybe Data.POSIX,
+    -- | Settings for managing data privacy of the bot and its conversations with
+    -- users.
+    dataPrivacy :: Prelude.Maybe DataPrivacy,
+    -- | The description of the bot.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The maximum time in seconds that Amazon Lex retains the data gathered in
+    -- a conversation.
+    idleSessionTTLInSeconds :: Prelude.Maybe Prelude.Natural,
+    -- | A timestamp of the date and time that the bot was last updated.
+    lastUpdatedDateTime :: Prelude.Maybe Data.POSIX,
+    -- | The Amazon Resource Name (ARN) of an IAM role that has permission to
+    -- access the bot.
+    roleArn :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeBotResponse' 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:
+--
+-- 'botId', 'describeBotResponse_botId' - The unique identifier of the bot.
+--
+-- 'botName', 'describeBotResponse_botName' - The name of the bot.
+--
+-- 'botStatus', 'describeBotResponse_botStatus' - The current status of the bot. When the status is @Available@ the bot is
+-- ready to be used in conversations with users.
+--
+-- 'creationDateTime', 'describeBotResponse_creationDateTime' - A timestamp of the date and time that the bot was created.
+--
+-- 'dataPrivacy', 'describeBotResponse_dataPrivacy' - Settings for managing data privacy of the bot and its conversations with
+-- users.
+--
+-- 'description', 'describeBotResponse_description' - The description of the bot.
+--
+-- 'idleSessionTTLInSeconds', 'describeBotResponse_idleSessionTTLInSeconds' - The maximum time in seconds that Amazon Lex retains the data gathered in
+-- a conversation.
+--
+-- 'lastUpdatedDateTime', 'describeBotResponse_lastUpdatedDateTime' - A timestamp of the date and time that the bot was last updated.
+--
+-- 'roleArn', 'describeBotResponse_roleArn' - The Amazon Resource Name (ARN) of an IAM role that has permission to
+-- access the bot.
+--
+-- 'httpStatus', 'describeBotResponse_httpStatus' - The response's http status code.
+newDescribeBotResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeBotResponse
+newDescribeBotResponse pHttpStatus_ =
+  DescribeBotResponse'
+    { botId = Prelude.Nothing,
+      botName = Prelude.Nothing,
+      botStatus = Prelude.Nothing,
+      creationDateTime = Prelude.Nothing,
+      dataPrivacy = Prelude.Nothing,
+      description = Prelude.Nothing,
+      idleSessionTTLInSeconds = Prelude.Nothing,
+      lastUpdatedDateTime = Prelude.Nothing,
+      roleArn = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The unique identifier of the bot.
+describeBotResponse_botId :: Lens.Lens' DescribeBotResponse (Prelude.Maybe Prelude.Text)
+describeBotResponse_botId = Lens.lens (\DescribeBotResponse' {botId} -> botId) (\s@DescribeBotResponse' {} a -> s {botId = a} :: DescribeBotResponse)
+
+-- | The name of the bot.
+describeBotResponse_botName :: Lens.Lens' DescribeBotResponse (Prelude.Maybe Prelude.Text)
+describeBotResponse_botName = Lens.lens (\DescribeBotResponse' {botName} -> botName) (\s@DescribeBotResponse' {} a -> s {botName = a} :: DescribeBotResponse)
+
+-- | The current status of the bot. When the status is @Available@ the bot is
+-- ready to be used in conversations with users.
+describeBotResponse_botStatus :: Lens.Lens' DescribeBotResponse (Prelude.Maybe BotStatus)
+describeBotResponse_botStatus = Lens.lens (\DescribeBotResponse' {botStatus} -> botStatus) (\s@DescribeBotResponse' {} a -> s {botStatus = a} :: DescribeBotResponse)
+
+-- | A timestamp of the date and time that the bot was created.
+describeBotResponse_creationDateTime :: Lens.Lens' DescribeBotResponse (Prelude.Maybe Prelude.UTCTime)
+describeBotResponse_creationDateTime = Lens.lens (\DescribeBotResponse' {creationDateTime} -> creationDateTime) (\s@DescribeBotResponse' {} a -> s {creationDateTime = a} :: DescribeBotResponse) Prelude.. Lens.mapping Data._Time
+
+-- | Settings for managing data privacy of the bot and its conversations with
+-- users.
+describeBotResponse_dataPrivacy :: Lens.Lens' DescribeBotResponse (Prelude.Maybe DataPrivacy)
+describeBotResponse_dataPrivacy = Lens.lens (\DescribeBotResponse' {dataPrivacy} -> dataPrivacy) (\s@DescribeBotResponse' {} a -> s {dataPrivacy = a} :: DescribeBotResponse)
+
+-- | The description of the bot.
+describeBotResponse_description :: Lens.Lens' DescribeBotResponse (Prelude.Maybe Prelude.Text)
+describeBotResponse_description = Lens.lens (\DescribeBotResponse' {description} -> description) (\s@DescribeBotResponse' {} a -> s {description = a} :: DescribeBotResponse)
+
+-- | The maximum time in seconds that Amazon Lex retains the data gathered in
+-- a conversation.
+describeBotResponse_idleSessionTTLInSeconds :: Lens.Lens' DescribeBotResponse (Prelude.Maybe Prelude.Natural)
+describeBotResponse_idleSessionTTLInSeconds = Lens.lens (\DescribeBotResponse' {idleSessionTTLInSeconds} -> idleSessionTTLInSeconds) (\s@DescribeBotResponse' {} a -> s {idleSessionTTLInSeconds = a} :: DescribeBotResponse)
+
+-- | A timestamp of the date and time that the bot was last updated.
+describeBotResponse_lastUpdatedDateTime :: Lens.Lens' DescribeBotResponse (Prelude.Maybe Prelude.UTCTime)
+describeBotResponse_lastUpdatedDateTime = Lens.lens (\DescribeBotResponse' {lastUpdatedDateTime} -> lastUpdatedDateTime) (\s@DescribeBotResponse' {} a -> s {lastUpdatedDateTime = a} :: DescribeBotResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The Amazon Resource Name (ARN) of an IAM role that has permission to
+-- access the bot.
+describeBotResponse_roleArn :: Lens.Lens' DescribeBotResponse (Prelude.Maybe Prelude.Text)
+describeBotResponse_roleArn = Lens.lens (\DescribeBotResponse' {roleArn} -> roleArn) (\s@DescribeBotResponse' {} a -> s {roleArn = a} :: DescribeBotResponse)
+
+-- | The response's http status code.
+describeBotResponse_httpStatus :: Lens.Lens' DescribeBotResponse Prelude.Int
+describeBotResponse_httpStatus = Lens.lens (\DescribeBotResponse' {httpStatus} -> httpStatus) (\s@DescribeBotResponse' {} a -> s {httpStatus = a} :: DescribeBotResponse)
+
+instance Prelude.NFData DescribeBotResponse where
+  rnf DescribeBotResponse' {..} =
+    Prelude.rnf botId
+      `Prelude.seq` Prelude.rnf botName
+      `Prelude.seq` Prelude.rnf botStatus
+      `Prelude.seq` Prelude.rnf creationDateTime
+      `Prelude.seq` Prelude.rnf dataPrivacy
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf idleSessionTTLInSeconds
+      `Prelude.seq` Prelude.rnf lastUpdatedDateTime
+      `Prelude.seq` Prelude.rnf roleArn
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/LexV2Models/DescribeBotAlias.hs b/gen/Amazonka/LexV2Models/DescribeBotAlias.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/DescribeBotAlias.hs
@@ -0,0 +1,328 @@
+{-# 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.LexV2Models.DescribeBotAlias
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Get information about a specific bot alias.
+module Amazonka.LexV2Models.DescribeBotAlias
+  ( -- * Creating a Request
+    DescribeBotAlias (..),
+    newDescribeBotAlias,
+
+    -- * Request Lenses
+    describeBotAlias_botAliasId,
+    describeBotAlias_botId,
+
+    -- * Destructuring the Response
+    DescribeBotAliasResponse (..),
+    newDescribeBotAliasResponse,
+
+    -- * Response Lenses
+    describeBotAliasResponse_botAliasHistoryEvents,
+    describeBotAliasResponse_botAliasId,
+    describeBotAliasResponse_botAliasLocaleSettings,
+    describeBotAliasResponse_botAliasName,
+    describeBotAliasResponse_botAliasStatus,
+    describeBotAliasResponse_botId,
+    describeBotAliasResponse_botVersion,
+    describeBotAliasResponse_conversationLogSettings,
+    describeBotAliasResponse_creationDateTime,
+    describeBotAliasResponse_description,
+    describeBotAliasResponse_lastUpdatedDateTime,
+    describeBotAliasResponse_sentimentAnalysisSettings,
+    describeBotAliasResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LexV2Models.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeBotAlias' smart constructor.
+data DescribeBotAlias = DescribeBotAlias'
+  { -- | The identifier of the bot alias to describe.
+    botAliasId :: Prelude.Text,
+    -- | The identifier of the bot associated with the bot alias to describe.
+    botId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeBotAlias' 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:
+--
+-- 'botAliasId', 'describeBotAlias_botAliasId' - The identifier of the bot alias to describe.
+--
+-- 'botId', 'describeBotAlias_botId' - The identifier of the bot associated with the bot alias to describe.
+newDescribeBotAlias ::
+  -- | 'botAliasId'
+  Prelude.Text ->
+  -- | 'botId'
+  Prelude.Text ->
+  DescribeBotAlias
+newDescribeBotAlias pBotAliasId_ pBotId_ =
+  DescribeBotAlias'
+    { botAliasId = pBotAliasId_,
+      botId = pBotId_
+    }
+
+-- | The identifier of the bot alias to describe.
+describeBotAlias_botAliasId :: Lens.Lens' DescribeBotAlias Prelude.Text
+describeBotAlias_botAliasId = Lens.lens (\DescribeBotAlias' {botAliasId} -> botAliasId) (\s@DescribeBotAlias' {} a -> s {botAliasId = a} :: DescribeBotAlias)
+
+-- | The identifier of the bot associated with the bot alias to describe.
+describeBotAlias_botId :: Lens.Lens' DescribeBotAlias Prelude.Text
+describeBotAlias_botId = Lens.lens (\DescribeBotAlias' {botId} -> botId) (\s@DescribeBotAlias' {} a -> s {botId = a} :: DescribeBotAlias)
+
+instance Core.AWSRequest DescribeBotAlias where
+  type
+    AWSResponse DescribeBotAlias =
+      DescribeBotAliasResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeBotAliasResponse'
+            Prelude.<$> ( x
+                            Data..?> "botAliasHistoryEvents"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (x Data..?> "botAliasId")
+            Prelude.<*> ( x
+                            Data..?> "botAliasLocaleSettings"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (x Data..?> "botAliasName")
+            Prelude.<*> (x Data..?> "botAliasStatus")
+            Prelude.<*> (x Data..?> "botId")
+            Prelude.<*> (x Data..?> "botVersion")
+            Prelude.<*> (x Data..?> "conversationLogSettings")
+            Prelude.<*> (x Data..?> "creationDateTime")
+            Prelude.<*> (x Data..?> "description")
+            Prelude.<*> (x Data..?> "lastUpdatedDateTime")
+            Prelude.<*> (x Data..?> "sentimentAnalysisSettings")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeBotAlias where
+  hashWithSalt _salt DescribeBotAlias' {..} =
+    _salt
+      `Prelude.hashWithSalt` botAliasId
+      `Prelude.hashWithSalt` botId
+
+instance Prelude.NFData DescribeBotAlias where
+  rnf DescribeBotAlias' {..} =
+    Prelude.rnf botAliasId
+      `Prelude.seq` Prelude.rnf botId
+
+instance Data.ToHeaders DescribeBotAlias where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath DescribeBotAlias where
+  toPath DescribeBotAlias' {..} =
+    Prelude.mconcat
+      [ "/bots/",
+        Data.toBS botId,
+        "/botaliases/",
+        Data.toBS botAliasId,
+        "/"
+      ]
+
+instance Data.ToQuery DescribeBotAlias where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDescribeBotAliasResponse' smart constructor.
+data DescribeBotAliasResponse = DescribeBotAliasResponse'
+  { -- | A list of events that affect a bot alias. For example, an event is
+    -- recorded when the version that the alias points to changes.
+    botAliasHistoryEvents :: Prelude.Maybe [BotAliasHistoryEvent],
+    -- | The identifier of the bot alias.
+    botAliasId :: Prelude.Maybe Prelude.Text,
+    -- | The locale settings that are unique to the alias.
+    botAliasLocaleSettings :: Prelude.Maybe (Prelude.HashMap Prelude.Text BotAliasLocaleSettings),
+    -- | The name of the bot alias.
+    botAliasName :: Prelude.Maybe Prelude.Text,
+    -- | The current status of the alias. When the alias is @Available@, the
+    -- alias is ready for use with your bot.
+    botAliasStatus :: Prelude.Maybe BotAliasStatus,
+    -- | The identifier of the bot associated with the bot alias.
+    botId :: Prelude.Maybe Prelude.Text,
+    -- | The version of the bot associated with the bot alias.
+    botVersion :: Prelude.Maybe Prelude.Text,
+    -- | Specifics of how Amazon Lex logs text and audio conversations with the
+    -- bot associated with the alias.
+    conversationLogSettings :: Prelude.Maybe ConversationLogSettings,
+    -- | A timestamp of the date and time that the alias was created.
+    creationDateTime :: Prelude.Maybe Data.POSIX,
+    -- | The description of the bot alias.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | A timestamp of the date and time that the alias was last updated.
+    lastUpdatedDateTime :: Prelude.Maybe Data.POSIX,
+    sentimentAnalysisSettings :: Prelude.Maybe SentimentAnalysisSettings,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeBotAliasResponse' 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:
+--
+-- 'botAliasHistoryEvents', 'describeBotAliasResponse_botAliasHistoryEvents' - A list of events that affect a bot alias. For example, an event is
+-- recorded when the version that the alias points to changes.
+--
+-- 'botAliasId', 'describeBotAliasResponse_botAliasId' - The identifier of the bot alias.
+--
+-- 'botAliasLocaleSettings', 'describeBotAliasResponse_botAliasLocaleSettings' - The locale settings that are unique to the alias.
+--
+-- 'botAliasName', 'describeBotAliasResponse_botAliasName' - The name of the bot alias.
+--
+-- 'botAliasStatus', 'describeBotAliasResponse_botAliasStatus' - The current status of the alias. When the alias is @Available@, the
+-- alias is ready for use with your bot.
+--
+-- 'botId', 'describeBotAliasResponse_botId' - The identifier of the bot associated with the bot alias.
+--
+-- 'botVersion', 'describeBotAliasResponse_botVersion' - The version of the bot associated with the bot alias.
+--
+-- 'conversationLogSettings', 'describeBotAliasResponse_conversationLogSettings' - Specifics of how Amazon Lex logs text and audio conversations with the
+-- bot associated with the alias.
+--
+-- 'creationDateTime', 'describeBotAliasResponse_creationDateTime' - A timestamp of the date and time that the alias was created.
+--
+-- 'description', 'describeBotAliasResponse_description' - The description of the bot alias.
+--
+-- 'lastUpdatedDateTime', 'describeBotAliasResponse_lastUpdatedDateTime' - A timestamp of the date and time that the alias was last updated.
+--
+-- 'sentimentAnalysisSettings', 'describeBotAliasResponse_sentimentAnalysisSettings' - Undocumented member.
+--
+-- 'httpStatus', 'describeBotAliasResponse_httpStatus' - The response's http status code.
+newDescribeBotAliasResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeBotAliasResponse
+newDescribeBotAliasResponse pHttpStatus_ =
+  DescribeBotAliasResponse'
+    { botAliasHistoryEvents =
+        Prelude.Nothing,
+      botAliasId = Prelude.Nothing,
+      botAliasLocaleSettings = Prelude.Nothing,
+      botAliasName = Prelude.Nothing,
+      botAliasStatus = Prelude.Nothing,
+      botId = Prelude.Nothing,
+      botVersion = Prelude.Nothing,
+      conversationLogSettings = Prelude.Nothing,
+      creationDateTime = Prelude.Nothing,
+      description = Prelude.Nothing,
+      lastUpdatedDateTime = Prelude.Nothing,
+      sentimentAnalysisSettings = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | A list of events that affect a bot alias. For example, an event is
+-- recorded when the version that the alias points to changes.
+describeBotAliasResponse_botAliasHistoryEvents :: Lens.Lens' DescribeBotAliasResponse (Prelude.Maybe [BotAliasHistoryEvent])
+describeBotAliasResponse_botAliasHistoryEvents = Lens.lens (\DescribeBotAliasResponse' {botAliasHistoryEvents} -> botAliasHistoryEvents) (\s@DescribeBotAliasResponse' {} a -> s {botAliasHistoryEvents = a} :: DescribeBotAliasResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The identifier of the bot alias.
+describeBotAliasResponse_botAliasId :: Lens.Lens' DescribeBotAliasResponse (Prelude.Maybe Prelude.Text)
+describeBotAliasResponse_botAliasId = Lens.lens (\DescribeBotAliasResponse' {botAliasId} -> botAliasId) (\s@DescribeBotAliasResponse' {} a -> s {botAliasId = a} :: DescribeBotAliasResponse)
+
+-- | The locale settings that are unique to the alias.
+describeBotAliasResponse_botAliasLocaleSettings :: Lens.Lens' DescribeBotAliasResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text BotAliasLocaleSettings))
+describeBotAliasResponse_botAliasLocaleSettings = Lens.lens (\DescribeBotAliasResponse' {botAliasLocaleSettings} -> botAliasLocaleSettings) (\s@DescribeBotAliasResponse' {} a -> s {botAliasLocaleSettings = a} :: DescribeBotAliasResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The name of the bot alias.
+describeBotAliasResponse_botAliasName :: Lens.Lens' DescribeBotAliasResponse (Prelude.Maybe Prelude.Text)
+describeBotAliasResponse_botAliasName = Lens.lens (\DescribeBotAliasResponse' {botAliasName} -> botAliasName) (\s@DescribeBotAliasResponse' {} a -> s {botAliasName = a} :: DescribeBotAliasResponse)
+
+-- | The current status of the alias. When the alias is @Available@, the
+-- alias is ready for use with your bot.
+describeBotAliasResponse_botAliasStatus :: Lens.Lens' DescribeBotAliasResponse (Prelude.Maybe BotAliasStatus)
+describeBotAliasResponse_botAliasStatus = Lens.lens (\DescribeBotAliasResponse' {botAliasStatus} -> botAliasStatus) (\s@DescribeBotAliasResponse' {} a -> s {botAliasStatus = a} :: DescribeBotAliasResponse)
+
+-- | The identifier of the bot associated with the bot alias.
+describeBotAliasResponse_botId :: Lens.Lens' DescribeBotAliasResponse (Prelude.Maybe Prelude.Text)
+describeBotAliasResponse_botId = Lens.lens (\DescribeBotAliasResponse' {botId} -> botId) (\s@DescribeBotAliasResponse' {} a -> s {botId = a} :: DescribeBotAliasResponse)
+
+-- | The version of the bot associated with the bot alias.
+describeBotAliasResponse_botVersion :: Lens.Lens' DescribeBotAliasResponse (Prelude.Maybe Prelude.Text)
+describeBotAliasResponse_botVersion = Lens.lens (\DescribeBotAliasResponse' {botVersion} -> botVersion) (\s@DescribeBotAliasResponse' {} a -> s {botVersion = a} :: DescribeBotAliasResponse)
+
+-- | Specifics of how Amazon Lex logs text and audio conversations with the
+-- bot associated with the alias.
+describeBotAliasResponse_conversationLogSettings :: Lens.Lens' DescribeBotAliasResponse (Prelude.Maybe ConversationLogSettings)
+describeBotAliasResponse_conversationLogSettings = Lens.lens (\DescribeBotAliasResponse' {conversationLogSettings} -> conversationLogSettings) (\s@DescribeBotAliasResponse' {} a -> s {conversationLogSettings = a} :: DescribeBotAliasResponse)
+
+-- | A timestamp of the date and time that the alias was created.
+describeBotAliasResponse_creationDateTime :: Lens.Lens' DescribeBotAliasResponse (Prelude.Maybe Prelude.UTCTime)
+describeBotAliasResponse_creationDateTime = Lens.lens (\DescribeBotAliasResponse' {creationDateTime} -> creationDateTime) (\s@DescribeBotAliasResponse' {} a -> s {creationDateTime = a} :: DescribeBotAliasResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The description of the bot alias.
+describeBotAliasResponse_description :: Lens.Lens' DescribeBotAliasResponse (Prelude.Maybe Prelude.Text)
+describeBotAliasResponse_description = Lens.lens (\DescribeBotAliasResponse' {description} -> description) (\s@DescribeBotAliasResponse' {} a -> s {description = a} :: DescribeBotAliasResponse)
+
+-- | A timestamp of the date and time that the alias was last updated.
+describeBotAliasResponse_lastUpdatedDateTime :: Lens.Lens' DescribeBotAliasResponse (Prelude.Maybe Prelude.UTCTime)
+describeBotAliasResponse_lastUpdatedDateTime = Lens.lens (\DescribeBotAliasResponse' {lastUpdatedDateTime} -> lastUpdatedDateTime) (\s@DescribeBotAliasResponse' {} a -> s {lastUpdatedDateTime = a} :: DescribeBotAliasResponse) Prelude.. Lens.mapping Data._Time
+
+-- | Undocumented member.
+describeBotAliasResponse_sentimentAnalysisSettings :: Lens.Lens' DescribeBotAliasResponse (Prelude.Maybe SentimentAnalysisSettings)
+describeBotAliasResponse_sentimentAnalysisSettings = Lens.lens (\DescribeBotAliasResponse' {sentimentAnalysisSettings} -> sentimentAnalysisSettings) (\s@DescribeBotAliasResponse' {} a -> s {sentimentAnalysisSettings = a} :: DescribeBotAliasResponse)
+
+-- | The response's http status code.
+describeBotAliasResponse_httpStatus :: Lens.Lens' DescribeBotAliasResponse Prelude.Int
+describeBotAliasResponse_httpStatus = Lens.lens (\DescribeBotAliasResponse' {httpStatus} -> httpStatus) (\s@DescribeBotAliasResponse' {} a -> s {httpStatus = a} :: DescribeBotAliasResponse)
+
+instance Prelude.NFData DescribeBotAliasResponse where
+  rnf DescribeBotAliasResponse' {..} =
+    Prelude.rnf botAliasHistoryEvents
+      `Prelude.seq` Prelude.rnf botAliasId
+      `Prelude.seq` Prelude.rnf botAliasLocaleSettings
+      `Prelude.seq` Prelude.rnf botAliasName
+      `Prelude.seq` Prelude.rnf botAliasStatus
+      `Prelude.seq` Prelude.rnf botId
+      `Prelude.seq` Prelude.rnf botVersion
+      `Prelude.seq` Prelude.rnf conversationLogSettings
+      `Prelude.seq` Prelude.rnf creationDateTime
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf lastUpdatedDateTime
+      `Prelude.seq` Prelude.rnf sentimentAnalysisSettings
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/LexV2Models/DescribeBotLocale.hs b/gen/Amazonka/LexV2Models/DescribeBotLocale.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/DescribeBotLocale.hs
@@ -0,0 +1,410 @@
+{-# 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.LexV2Models.DescribeBotLocale
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Describes the settings that a bot has for a specific locale.
+module Amazonka.LexV2Models.DescribeBotLocale
+  ( -- * Creating a Request
+    DescribeBotLocale (..),
+    newDescribeBotLocale,
+
+    -- * Request Lenses
+    describeBotLocale_botId,
+    describeBotLocale_botVersion,
+    describeBotLocale_localeId,
+
+    -- * Destructuring the Response
+    DescribeBotLocaleResponse (..),
+    newDescribeBotLocaleResponse,
+
+    -- * Response Lenses
+    describeBotLocaleResponse_botId,
+    describeBotLocaleResponse_botLocaleHistoryEvents,
+    describeBotLocaleResponse_botLocaleStatus,
+    describeBotLocaleResponse_botVersion,
+    describeBotLocaleResponse_creationDateTime,
+    describeBotLocaleResponse_description,
+    describeBotLocaleResponse_failureReasons,
+    describeBotLocaleResponse_intentsCount,
+    describeBotLocaleResponse_lastBuildSubmittedDateTime,
+    describeBotLocaleResponse_lastUpdatedDateTime,
+    describeBotLocaleResponse_localeId,
+    describeBotLocaleResponse_localeName,
+    describeBotLocaleResponse_nluIntentConfidenceThreshold,
+    describeBotLocaleResponse_recommendedActions,
+    describeBotLocaleResponse_slotTypesCount,
+    describeBotLocaleResponse_voiceSettings,
+    describeBotLocaleResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LexV2Models.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeBotLocale' smart constructor.
+data DescribeBotLocale = DescribeBotLocale'
+  { -- | The identifier of the bot associated with the locale.
+    botId :: Prelude.Text,
+    -- | The identifier of the version of the bot associated with the locale.
+    botVersion :: Prelude.Text,
+    -- | The unique identifier of the locale to describe. The string must match
+    -- one of the supported locales. For more information, see
+    -- <https://docs.aws.amazon.com/lexv2/latest/dg/how-languages.html Supported languages>.
+    localeId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeBotLocale' 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:
+--
+-- 'botId', 'describeBotLocale_botId' - The identifier of the bot associated with the locale.
+--
+-- 'botVersion', 'describeBotLocale_botVersion' - The identifier of the version of the bot associated with the locale.
+--
+-- 'localeId', 'describeBotLocale_localeId' - The unique identifier of the locale to describe. The string must match
+-- one of the supported locales. For more information, see
+-- <https://docs.aws.amazon.com/lexv2/latest/dg/how-languages.html Supported languages>.
+newDescribeBotLocale ::
+  -- | 'botId'
+  Prelude.Text ->
+  -- | 'botVersion'
+  Prelude.Text ->
+  -- | 'localeId'
+  Prelude.Text ->
+  DescribeBotLocale
+newDescribeBotLocale pBotId_ pBotVersion_ pLocaleId_ =
+  DescribeBotLocale'
+    { botId = pBotId_,
+      botVersion = pBotVersion_,
+      localeId = pLocaleId_
+    }
+
+-- | The identifier of the bot associated with the locale.
+describeBotLocale_botId :: Lens.Lens' DescribeBotLocale Prelude.Text
+describeBotLocale_botId = Lens.lens (\DescribeBotLocale' {botId} -> botId) (\s@DescribeBotLocale' {} a -> s {botId = a} :: DescribeBotLocale)
+
+-- | The identifier of the version of the bot associated with the locale.
+describeBotLocale_botVersion :: Lens.Lens' DescribeBotLocale Prelude.Text
+describeBotLocale_botVersion = Lens.lens (\DescribeBotLocale' {botVersion} -> botVersion) (\s@DescribeBotLocale' {} a -> s {botVersion = a} :: DescribeBotLocale)
+
+-- | The unique identifier of the locale to describe. The string must match
+-- one of the supported locales. For more information, see
+-- <https://docs.aws.amazon.com/lexv2/latest/dg/how-languages.html Supported languages>.
+describeBotLocale_localeId :: Lens.Lens' DescribeBotLocale Prelude.Text
+describeBotLocale_localeId = Lens.lens (\DescribeBotLocale' {localeId} -> localeId) (\s@DescribeBotLocale' {} a -> s {localeId = a} :: DescribeBotLocale)
+
+instance Core.AWSRequest DescribeBotLocale where
+  type
+    AWSResponse DescribeBotLocale =
+      DescribeBotLocaleResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeBotLocaleResponse'
+            Prelude.<$> (x Data..?> "botId")
+            Prelude.<*> ( x
+                            Data..?> "botLocaleHistoryEvents"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (x Data..?> "botLocaleStatus")
+            Prelude.<*> (x Data..?> "botVersion")
+            Prelude.<*> (x Data..?> "creationDateTime")
+            Prelude.<*> (x Data..?> "description")
+            Prelude.<*> (x Data..?> "failureReasons" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "intentsCount")
+            Prelude.<*> (x Data..?> "lastBuildSubmittedDateTime")
+            Prelude.<*> (x Data..?> "lastUpdatedDateTime")
+            Prelude.<*> (x Data..?> "localeId")
+            Prelude.<*> (x Data..?> "localeName")
+            Prelude.<*> (x Data..?> "nluIntentConfidenceThreshold")
+            Prelude.<*> ( x
+                            Data..?> "recommendedActions"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (x Data..?> "slotTypesCount")
+            Prelude.<*> (x Data..?> "voiceSettings")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeBotLocale where
+  hashWithSalt _salt DescribeBotLocale' {..} =
+    _salt
+      `Prelude.hashWithSalt` botId
+      `Prelude.hashWithSalt` botVersion
+      `Prelude.hashWithSalt` localeId
+
+instance Prelude.NFData DescribeBotLocale where
+  rnf DescribeBotLocale' {..} =
+    Prelude.rnf botId
+      `Prelude.seq` Prelude.rnf botVersion
+      `Prelude.seq` Prelude.rnf localeId
+
+instance Data.ToHeaders DescribeBotLocale where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath DescribeBotLocale where
+  toPath DescribeBotLocale' {..} =
+    Prelude.mconcat
+      [ "/bots/",
+        Data.toBS botId,
+        "/botversions/",
+        Data.toBS botVersion,
+        "/botlocales/",
+        Data.toBS localeId,
+        "/"
+      ]
+
+instance Data.ToQuery DescribeBotLocale where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDescribeBotLocaleResponse' smart constructor.
+data DescribeBotLocaleResponse = DescribeBotLocaleResponse'
+  { -- | The identifier of the bot associated with the locale.
+    botId :: Prelude.Maybe Prelude.Text,
+    -- | History of changes, such as when a locale is used in an alias, that have
+    -- taken place for the locale.
+    botLocaleHistoryEvents :: Prelude.Maybe [BotLocaleHistoryEvent],
+    -- | The status of the bot. If the status is @Failed@, the reasons for the
+    -- failure are listed in the @failureReasons@ field.
+    botLocaleStatus :: Prelude.Maybe BotLocaleStatus,
+    -- | The identifier of the version of the bot associated with the locale.
+    botVersion :: Prelude.Maybe Prelude.Text,
+    -- | The date and time that the locale was created.
+    creationDateTime :: Prelude.Maybe Data.POSIX,
+    -- | The description of the locale.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | if @botLocaleStatus@ is @Failed@, Amazon Lex explains why it failed to
+    -- build the bot.
+    failureReasons :: Prelude.Maybe [Prelude.Text],
+    -- | The number of intents defined for the locale.
+    intentsCount :: Prelude.Maybe Prelude.Int,
+    -- | The date and time that the locale was last submitted for building.
+    lastBuildSubmittedDateTime :: Prelude.Maybe Data.POSIX,
+    -- | The date and time that the locale was last updated.
+    lastUpdatedDateTime :: Prelude.Maybe Data.POSIX,
+    -- | The unique identifier of the described locale.
+    localeId :: Prelude.Maybe Prelude.Text,
+    -- | The name of the locale.
+    localeName :: Prelude.Maybe Prelude.Text,
+    -- | The confidence threshold where Amazon Lex inserts the
+    -- @AMAZON.FallbackIntent@ and @AMAZON.KendraSearchIntent@ intents in the
+    -- list of possible intents for an utterance.
+    nluIntentConfidenceThreshold :: Prelude.Maybe Prelude.Double,
+    -- | Recommended actions to take to resolve an error in the @failureReasons@
+    -- field.
+    recommendedActions :: Prelude.Maybe [Prelude.Text],
+    -- | The number of slot types defined for the locale.
+    slotTypesCount :: Prelude.Maybe Prelude.Int,
+    -- | The Amazon Polly voice Amazon Lex uses for voice interaction with the
+    -- user.
+    voiceSettings :: Prelude.Maybe VoiceSettings,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeBotLocaleResponse' 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:
+--
+-- 'botId', 'describeBotLocaleResponse_botId' - The identifier of the bot associated with the locale.
+--
+-- 'botLocaleHistoryEvents', 'describeBotLocaleResponse_botLocaleHistoryEvents' - History of changes, such as when a locale is used in an alias, that have
+-- taken place for the locale.
+--
+-- 'botLocaleStatus', 'describeBotLocaleResponse_botLocaleStatus' - The status of the bot. If the status is @Failed@, the reasons for the
+-- failure are listed in the @failureReasons@ field.
+--
+-- 'botVersion', 'describeBotLocaleResponse_botVersion' - The identifier of the version of the bot associated with the locale.
+--
+-- 'creationDateTime', 'describeBotLocaleResponse_creationDateTime' - The date and time that the locale was created.
+--
+-- 'description', 'describeBotLocaleResponse_description' - The description of the locale.
+--
+-- 'failureReasons', 'describeBotLocaleResponse_failureReasons' - if @botLocaleStatus@ is @Failed@, Amazon Lex explains why it failed to
+-- build the bot.
+--
+-- 'intentsCount', 'describeBotLocaleResponse_intentsCount' - The number of intents defined for the locale.
+--
+-- 'lastBuildSubmittedDateTime', 'describeBotLocaleResponse_lastBuildSubmittedDateTime' - The date and time that the locale was last submitted for building.
+--
+-- 'lastUpdatedDateTime', 'describeBotLocaleResponse_lastUpdatedDateTime' - The date and time that the locale was last updated.
+--
+-- 'localeId', 'describeBotLocaleResponse_localeId' - The unique identifier of the described locale.
+--
+-- 'localeName', 'describeBotLocaleResponse_localeName' - The name of the locale.
+--
+-- 'nluIntentConfidenceThreshold', 'describeBotLocaleResponse_nluIntentConfidenceThreshold' - The confidence threshold where Amazon Lex inserts the
+-- @AMAZON.FallbackIntent@ and @AMAZON.KendraSearchIntent@ intents in the
+-- list of possible intents for an utterance.
+--
+-- 'recommendedActions', 'describeBotLocaleResponse_recommendedActions' - Recommended actions to take to resolve an error in the @failureReasons@
+-- field.
+--
+-- 'slotTypesCount', 'describeBotLocaleResponse_slotTypesCount' - The number of slot types defined for the locale.
+--
+-- 'voiceSettings', 'describeBotLocaleResponse_voiceSettings' - The Amazon Polly voice Amazon Lex uses for voice interaction with the
+-- user.
+--
+-- 'httpStatus', 'describeBotLocaleResponse_httpStatus' - The response's http status code.
+newDescribeBotLocaleResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeBotLocaleResponse
+newDescribeBotLocaleResponse pHttpStatus_ =
+  DescribeBotLocaleResponse'
+    { botId = Prelude.Nothing,
+      botLocaleHistoryEvents = Prelude.Nothing,
+      botLocaleStatus = Prelude.Nothing,
+      botVersion = Prelude.Nothing,
+      creationDateTime = Prelude.Nothing,
+      description = Prelude.Nothing,
+      failureReasons = Prelude.Nothing,
+      intentsCount = Prelude.Nothing,
+      lastBuildSubmittedDateTime = Prelude.Nothing,
+      lastUpdatedDateTime = Prelude.Nothing,
+      localeId = Prelude.Nothing,
+      localeName = Prelude.Nothing,
+      nluIntentConfidenceThreshold = Prelude.Nothing,
+      recommendedActions = Prelude.Nothing,
+      slotTypesCount = Prelude.Nothing,
+      voiceSettings = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The identifier of the bot associated with the locale.
+describeBotLocaleResponse_botId :: Lens.Lens' DescribeBotLocaleResponse (Prelude.Maybe Prelude.Text)
+describeBotLocaleResponse_botId = Lens.lens (\DescribeBotLocaleResponse' {botId} -> botId) (\s@DescribeBotLocaleResponse' {} a -> s {botId = a} :: DescribeBotLocaleResponse)
+
+-- | History of changes, such as when a locale is used in an alias, that have
+-- taken place for the locale.
+describeBotLocaleResponse_botLocaleHistoryEvents :: Lens.Lens' DescribeBotLocaleResponse (Prelude.Maybe [BotLocaleHistoryEvent])
+describeBotLocaleResponse_botLocaleHistoryEvents = Lens.lens (\DescribeBotLocaleResponse' {botLocaleHistoryEvents} -> botLocaleHistoryEvents) (\s@DescribeBotLocaleResponse' {} a -> s {botLocaleHistoryEvents = a} :: DescribeBotLocaleResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The status of the bot. If the status is @Failed@, the reasons for the
+-- failure are listed in the @failureReasons@ field.
+describeBotLocaleResponse_botLocaleStatus :: Lens.Lens' DescribeBotLocaleResponse (Prelude.Maybe BotLocaleStatus)
+describeBotLocaleResponse_botLocaleStatus = Lens.lens (\DescribeBotLocaleResponse' {botLocaleStatus} -> botLocaleStatus) (\s@DescribeBotLocaleResponse' {} a -> s {botLocaleStatus = a} :: DescribeBotLocaleResponse)
+
+-- | The identifier of the version of the bot associated with the locale.
+describeBotLocaleResponse_botVersion :: Lens.Lens' DescribeBotLocaleResponse (Prelude.Maybe Prelude.Text)
+describeBotLocaleResponse_botVersion = Lens.lens (\DescribeBotLocaleResponse' {botVersion} -> botVersion) (\s@DescribeBotLocaleResponse' {} a -> s {botVersion = a} :: DescribeBotLocaleResponse)
+
+-- | The date and time that the locale was created.
+describeBotLocaleResponse_creationDateTime :: Lens.Lens' DescribeBotLocaleResponse (Prelude.Maybe Prelude.UTCTime)
+describeBotLocaleResponse_creationDateTime = Lens.lens (\DescribeBotLocaleResponse' {creationDateTime} -> creationDateTime) (\s@DescribeBotLocaleResponse' {} a -> s {creationDateTime = a} :: DescribeBotLocaleResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The description of the locale.
+describeBotLocaleResponse_description :: Lens.Lens' DescribeBotLocaleResponse (Prelude.Maybe Prelude.Text)
+describeBotLocaleResponse_description = Lens.lens (\DescribeBotLocaleResponse' {description} -> description) (\s@DescribeBotLocaleResponse' {} a -> s {description = a} :: DescribeBotLocaleResponse)
+
+-- | if @botLocaleStatus@ is @Failed@, Amazon Lex explains why it failed to
+-- build the bot.
+describeBotLocaleResponse_failureReasons :: Lens.Lens' DescribeBotLocaleResponse (Prelude.Maybe [Prelude.Text])
+describeBotLocaleResponse_failureReasons = Lens.lens (\DescribeBotLocaleResponse' {failureReasons} -> failureReasons) (\s@DescribeBotLocaleResponse' {} a -> s {failureReasons = a} :: DescribeBotLocaleResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The number of intents defined for the locale.
+describeBotLocaleResponse_intentsCount :: Lens.Lens' DescribeBotLocaleResponse (Prelude.Maybe Prelude.Int)
+describeBotLocaleResponse_intentsCount = Lens.lens (\DescribeBotLocaleResponse' {intentsCount} -> intentsCount) (\s@DescribeBotLocaleResponse' {} a -> s {intentsCount = a} :: DescribeBotLocaleResponse)
+
+-- | The date and time that the locale was last submitted for building.
+describeBotLocaleResponse_lastBuildSubmittedDateTime :: Lens.Lens' DescribeBotLocaleResponse (Prelude.Maybe Prelude.UTCTime)
+describeBotLocaleResponse_lastBuildSubmittedDateTime = Lens.lens (\DescribeBotLocaleResponse' {lastBuildSubmittedDateTime} -> lastBuildSubmittedDateTime) (\s@DescribeBotLocaleResponse' {} a -> s {lastBuildSubmittedDateTime = a} :: DescribeBotLocaleResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The date and time that the locale was last updated.
+describeBotLocaleResponse_lastUpdatedDateTime :: Lens.Lens' DescribeBotLocaleResponse (Prelude.Maybe Prelude.UTCTime)
+describeBotLocaleResponse_lastUpdatedDateTime = Lens.lens (\DescribeBotLocaleResponse' {lastUpdatedDateTime} -> lastUpdatedDateTime) (\s@DescribeBotLocaleResponse' {} a -> s {lastUpdatedDateTime = a} :: DescribeBotLocaleResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The unique identifier of the described locale.
+describeBotLocaleResponse_localeId :: Lens.Lens' DescribeBotLocaleResponse (Prelude.Maybe Prelude.Text)
+describeBotLocaleResponse_localeId = Lens.lens (\DescribeBotLocaleResponse' {localeId} -> localeId) (\s@DescribeBotLocaleResponse' {} a -> s {localeId = a} :: DescribeBotLocaleResponse)
+
+-- | The name of the locale.
+describeBotLocaleResponse_localeName :: Lens.Lens' DescribeBotLocaleResponse (Prelude.Maybe Prelude.Text)
+describeBotLocaleResponse_localeName = Lens.lens (\DescribeBotLocaleResponse' {localeName} -> localeName) (\s@DescribeBotLocaleResponse' {} a -> s {localeName = a} :: DescribeBotLocaleResponse)
+
+-- | The confidence threshold where Amazon Lex inserts the
+-- @AMAZON.FallbackIntent@ and @AMAZON.KendraSearchIntent@ intents in the
+-- list of possible intents for an utterance.
+describeBotLocaleResponse_nluIntentConfidenceThreshold :: Lens.Lens' DescribeBotLocaleResponse (Prelude.Maybe Prelude.Double)
+describeBotLocaleResponse_nluIntentConfidenceThreshold = Lens.lens (\DescribeBotLocaleResponse' {nluIntentConfidenceThreshold} -> nluIntentConfidenceThreshold) (\s@DescribeBotLocaleResponse' {} a -> s {nluIntentConfidenceThreshold = a} :: DescribeBotLocaleResponse)
+
+-- | Recommended actions to take to resolve an error in the @failureReasons@
+-- field.
+describeBotLocaleResponse_recommendedActions :: Lens.Lens' DescribeBotLocaleResponse (Prelude.Maybe [Prelude.Text])
+describeBotLocaleResponse_recommendedActions = Lens.lens (\DescribeBotLocaleResponse' {recommendedActions} -> recommendedActions) (\s@DescribeBotLocaleResponse' {} a -> s {recommendedActions = a} :: DescribeBotLocaleResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The number of slot types defined for the locale.
+describeBotLocaleResponse_slotTypesCount :: Lens.Lens' DescribeBotLocaleResponse (Prelude.Maybe Prelude.Int)
+describeBotLocaleResponse_slotTypesCount = Lens.lens (\DescribeBotLocaleResponse' {slotTypesCount} -> slotTypesCount) (\s@DescribeBotLocaleResponse' {} a -> s {slotTypesCount = a} :: DescribeBotLocaleResponse)
+
+-- | The Amazon Polly voice Amazon Lex uses for voice interaction with the
+-- user.
+describeBotLocaleResponse_voiceSettings :: Lens.Lens' DescribeBotLocaleResponse (Prelude.Maybe VoiceSettings)
+describeBotLocaleResponse_voiceSettings = Lens.lens (\DescribeBotLocaleResponse' {voiceSettings} -> voiceSettings) (\s@DescribeBotLocaleResponse' {} a -> s {voiceSettings = a} :: DescribeBotLocaleResponse)
+
+-- | The response's http status code.
+describeBotLocaleResponse_httpStatus :: Lens.Lens' DescribeBotLocaleResponse Prelude.Int
+describeBotLocaleResponse_httpStatus = Lens.lens (\DescribeBotLocaleResponse' {httpStatus} -> httpStatus) (\s@DescribeBotLocaleResponse' {} a -> s {httpStatus = a} :: DescribeBotLocaleResponse)
+
+instance Prelude.NFData DescribeBotLocaleResponse where
+  rnf DescribeBotLocaleResponse' {..} =
+    Prelude.rnf botId
+      `Prelude.seq` Prelude.rnf botLocaleHistoryEvents
+      `Prelude.seq` Prelude.rnf botLocaleStatus
+      `Prelude.seq` Prelude.rnf botVersion
+      `Prelude.seq` Prelude.rnf creationDateTime
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf failureReasons
+      `Prelude.seq` Prelude.rnf intentsCount
+      `Prelude.seq` Prelude.rnf lastBuildSubmittedDateTime
+      `Prelude.seq` Prelude.rnf lastUpdatedDateTime
+      `Prelude.seq` Prelude.rnf localeId
+      `Prelude.seq` Prelude.rnf localeName
+      `Prelude.seq` Prelude.rnf nluIntentConfidenceThreshold
+      `Prelude.seq` Prelude.rnf recommendedActions
+      `Prelude.seq` Prelude.rnf slotTypesCount
+      `Prelude.seq` Prelude.rnf voiceSettings
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/LexV2Models/DescribeBotRecommendation.hs b/gen/Amazonka/LexV2Models/DescribeBotRecommendation.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/DescribeBotRecommendation.hs
@@ -0,0 +1,377 @@
+{-# 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.LexV2Models.DescribeBotRecommendation
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Provides metadata information about a bot recommendation. This
+-- information will enable you to get a description on the request inputs,
+-- to download associated transcripts after processing is complete, and to
+-- download intents and slot-types generated by the bot recommendation.
+module Amazonka.LexV2Models.DescribeBotRecommendation
+  ( -- * Creating a Request
+    DescribeBotRecommendation (..),
+    newDescribeBotRecommendation,
+
+    -- * Request Lenses
+    describeBotRecommendation_botId,
+    describeBotRecommendation_botVersion,
+    describeBotRecommendation_localeId,
+    describeBotRecommendation_botRecommendationId,
+
+    -- * Destructuring the Response
+    DescribeBotRecommendationResponse (..),
+    newDescribeBotRecommendationResponse,
+
+    -- * Response Lenses
+    describeBotRecommendationResponse_botId,
+    describeBotRecommendationResponse_botRecommendationId,
+    describeBotRecommendationResponse_botRecommendationResults,
+    describeBotRecommendationResponse_botRecommendationStatus,
+    describeBotRecommendationResponse_botVersion,
+    describeBotRecommendationResponse_creationDateTime,
+    describeBotRecommendationResponse_encryptionSetting,
+    describeBotRecommendationResponse_failureReasons,
+    describeBotRecommendationResponse_lastUpdatedDateTime,
+    describeBotRecommendationResponse_localeId,
+    describeBotRecommendationResponse_transcriptSourceSetting,
+    describeBotRecommendationResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LexV2Models.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeBotRecommendation' smart constructor.
+data DescribeBotRecommendation = DescribeBotRecommendation'
+  { -- | The unique identifier of the bot associated with the bot recommendation.
+    botId :: Prelude.Text,
+    -- | The version of the bot associated with the bot recommendation.
+    botVersion :: Prelude.Text,
+    -- | The identifier of the language and locale of the bot recommendation to
+    -- describe. The string must match one of the supported locales. For more
+    -- information, see
+    -- <https://docs.aws.amazon.com/lexv2/latest/dg/how-languages.html Supported languages>.
+    localeId :: Prelude.Text,
+    -- | The identifier of the bot recommendation to describe.
+    botRecommendationId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeBotRecommendation' 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:
+--
+-- 'botId', 'describeBotRecommendation_botId' - The unique identifier of the bot associated with the bot recommendation.
+--
+-- 'botVersion', 'describeBotRecommendation_botVersion' - The version of the bot associated with the bot recommendation.
+--
+-- 'localeId', 'describeBotRecommendation_localeId' - The identifier of the language and locale of the bot recommendation to
+-- describe. The string must match one of the supported locales. For more
+-- information, see
+-- <https://docs.aws.amazon.com/lexv2/latest/dg/how-languages.html Supported languages>.
+--
+-- 'botRecommendationId', 'describeBotRecommendation_botRecommendationId' - The identifier of the bot recommendation to describe.
+newDescribeBotRecommendation ::
+  -- | 'botId'
+  Prelude.Text ->
+  -- | 'botVersion'
+  Prelude.Text ->
+  -- | 'localeId'
+  Prelude.Text ->
+  -- | 'botRecommendationId'
+  Prelude.Text ->
+  DescribeBotRecommendation
+newDescribeBotRecommendation
+  pBotId_
+  pBotVersion_
+  pLocaleId_
+  pBotRecommendationId_ =
+    DescribeBotRecommendation'
+      { botId = pBotId_,
+        botVersion = pBotVersion_,
+        localeId = pLocaleId_,
+        botRecommendationId = pBotRecommendationId_
+      }
+
+-- | The unique identifier of the bot associated with the bot recommendation.
+describeBotRecommendation_botId :: Lens.Lens' DescribeBotRecommendation Prelude.Text
+describeBotRecommendation_botId = Lens.lens (\DescribeBotRecommendation' {botId} -> botId) (\s@DescribeBotRecommendation' {} a -> s {botId = a} :: DescribeBotRecommendation)
+
+-- | The version of the bot associated with the bot recommendation.
+describeBotRecommendation_botVersion :: Lens.Lens' DescribeBotRecommendation Prelude.Text
+describeBotRecommendation_botVersion = Lens.lens (\DescribeBotRecommendation' {botVersion} -> botVersion) (\s@DescribeBotRecommendation' {} a -> s {botVersion = a} :: DescribeBotRecommendation)
+
+-- | The identifier of the language and locale of the bot recommendation to
+-- describe. The string must match one of the supported locales. For more
+-- information, see
+-- <https://docs.aws.amazon.com/lexv2/latest/dg/how-languages.html Supported languages>.
+describeBotRecommendation_localeId :: Lens.Lens' DescribeBotRecommendation Prelude.Text
+describeBotRecommendation_localeId = Lens.lens (\DescribeBotRecommendation' {localeId} -> localeId) (\s@DescribeBotRecommendation' {} a -> s {localeId = a} :: DescribeBotRecommendation)
+
+-- | The identifier of the bot recommendation to describe.
+describeBotRecommendation_botRecommendationId :: Lens.Lens' DescribeBotRecommendation Prelude.Text
+describeBotRecommendation_botRecommendationId = Lens.lens (\DescribeBotRecommendation' {botRecommendationId} -> botRecommendationId) (\s@DescribeBotRecommendation' {} a -> s {botRecommendationId = a} :: DescribeBotRecommendation)
+
+instance Core.AWSRequest DescribeBotRecommendation where
+  type
+    AWSResponse DescribeBotRecommendation =
+      DescribeBotRecommendationResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeBotRecommendationResponse'
+            Prelude.<$> (x Data..?> "botId")
+            Prelude.<*> (x Data..?> "botRecommendationId")
+            Prelude.<*> (x Data..?> "botRecommendationResults")
+            Prelude.<*> (x Data..?> "botRecommendationStatus")
+            Prelude.<*> (x Data..?> "botVersion")
+            Prelude.<*> (x Data..?> "creationDateTime")
+            Prelude.<*> (x Data..?> "encryptionSetting")
+            Prelude.<*> (x Data..?> "failureReasons" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "lastUpdatedDateTime")
+            Prelude.<*> (x Data..?> "localeId")
+            Prelude.<*> (x Data..?> "transcriptSourceSetting")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeBotRecommendation where
+  hashWithSalt _salt DescribeBotRecommendation' {..} =
+    _salt
+      `Prelude.hashWithSalt` botId
+      `Prelude.hashWithSalt` botVersion
+      `Prelude.hashWithSalt` localeId
+      `Prelude.hashWithSalt` botRecommendationId
+
+instance Prelude.NFData DescribeBotRecommendation where
+  rnf DescribeBotRecommendation' {..} =
+    Prelude.rnf botId
+      `Prelude.seq` Prelude.rnf botVersion
+      `Prelude.seq` Prelude.rnf localeId
+      `Prelude.seq` Prelude.rnf botRecommendationId
+
+instance Data.ToHeaders DescribeBotRecommendation where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath DescribeBotRecommendation where
+  toPath DescribeBotRecommendation' {..} =
+    Prelude.mconcat
+      [ "/bots/",
+        Data.toBS botId,
+        "/botversions/",
+        Data.toBS botVersion,
+        "/botlocales/",
+        Data.toBS localeId,
+        "/botrecommendations/",
+        Data.toBS botRecommendationId,
+        "/"
+      ]
+
+instance Data.ToQuery DescribeBotRecommendation where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDescribeBotRecommendationResponse' smart constructor.
+data DescribeBotRecommendationResponse = DescribeBotRecommendationResponse'
+  { -- | The identifier of the bot associated with the bot recommendation.
+    botId :: Prelude.Maybe Prelude.Text,
+    -- | The identifier of the bot recommendation being described.
+    botRecommendationId :: Prelude.Maybe Prelude.Text,
+    -- | The object representing the URL of the bot definition, the URL of the
+    -- associated transcript and a statistical summary of the bot
+    -- recommendation results.
+    botRecommendationResults :: Prelude.Maybe BotRecommendationResults,
+    -- | The status of the bot recommendation. If the status is Failed, then the
+    -- reasons for the failure are listed in the failureReasons field.
+    botRecommendationStatus :: Prelude.Maybe BotRecommendationStatus,
+    -- | The version of the bot associated with the bot recommendation.
+    botVersion :: Prelude.Maybe Prelude.Text,
+    -- | The date and time that the bot recommendation was created.
+    creationDateTime :: Prelude.Maybe Data.POSIX,
+    -- | The object representing the passwords that were used to encrypt the data
+    -- related to the bot recommendation results, as well as the KMS key ARN
+    -- used to encrypt the associated metadata.
+    encryptionSetting :: Prelude.Maybe EncryptionSetting,
+    -- | If botRecommendationStatus is Failed, Amazon Lex explains why.
+    failureReasons :: Prelude.Maybe [Prelude.Text],
+    -- | The date and time that the bot recommendation was last updated.
+    lastUpdatedDateTime :: Prelude.Maybe Data.POSIX,
+    -- | The identifier of the language and locale of the bot recommendation to
+    -- describe.
+    localeId :: Prelude.Maybe Prelude.Text,
+    -- | The object representing the Amazon S3 bucket containing the transcript,
+    -- as well as the associated metadata.
+    transcriptSourceSetting :: Prelude.Maybe TranscriptSourceSetting,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeBotRecommendationResponse' 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:
+--
+-- 'botId', 'describeBotRecommendationResponse_botId' - The identifier of the bot associated with the bot recommendation.
+--
+-- 'botRecommendationId', 'describeBotRecommendationResponse_botRecommendationId' - The identifier of the bot recommendation being described.
+--
+-- 'botRecommendationResults', 'describeBotRecommendationResponse_botRecommendationResults' - The object representing the URL of the bot definition, the URL of the
+-- associated transcript and a statistical summary of the bot
+-- recommendation results.
+--
+-- 'botRecommendationStatus', 'describeBotRecommendationResponse_botRecommendationStatus' - The status of the bot recommendation. If the status is Failed, then the
+-- reasons for the failure are listed in the failureReasons field.
+--
+-- 'botVersion', 'describeBotRecommendationResponse_botVersion' - The version of the bot associated with the bot recommendation.
+--
+-- 'creationDateTime', 'describeBotRecommendationResponse_creationDateTime' - The date and time that the bot recommendation was created.
+--
+-- 'encryptionSetting', 'describeBotRecommendationResponse_encryptionSetting' - The object representing the passwords that were used to encrypt the data
+-- related to the bot recommendation results, as well as the KMS key ARN
+-- used to encrypt the associated metadata.
+--
+-- 'failureReasons', 'describeBotRecommendationResponse_failureReasons' - If botRecommendationStatus is Failed, Amazon Lex explains why.
+--
+-- 'lastUpdatedDateTime', 'describeBotRecommendationResponse_lastUpdatedDateTime' - The date and time that the bot recommendation was last updated.
+--
+-- 'localeId', 'describeBotRecommendationResponse_localeId' - The identifier of the language and locale of the bot recommendation to
+-- describe.
+--
+-- 'transcriptSourceSetting', 'describeBotRecommendationResponse_transcriptSourceSetting' - The object representing the Amazon S3 bucket containing the transcript,
+-- as well as the associated metadata.
+--
+-- 'httpStatus', 'describeBotRecommendationResponse_httpStatus' - The response's http status code.
+newDescribeBotRecommendationResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeBotRecommendationResponse
+newDescribeBotRecommendationResponse pHttpStatus_ =
+  DescribeBotRecommendationResponse'
+    { botId =
+        Prelude.Nothing,
+      botRecommendationId = Prelude.Nothing,
+      botRecommendationResults =
+        Prelude.Nothing,
+      botRecommendationStatus =
+        Prelude.Nothing,
+      botVersion = Prelude.Nothing,
+      creationDateTime = Prelude.Nothing,
+      encryptionSetting = Prelude.Nothing,
+      failureReasons = Prelude.Nothing,
+      lastUpdatedDateTime = Prelude.Nothing,
+      localeId = Prelude.Nothing,
+      transcriptSourceSetting =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The identifier of the bot associated with the bot recommendation.
+describeBotRecommendationResponse_botId :: Lens.Lens' DescribeBotRecommendationResponse (Prelude.Maybe Prelude.Text)
+describeBotRecommendationResponse_botId = Lens.lens (\DescribeBotRecommendationResponse' {botId} -> botId) (\s@DescribeBotRecommendationResponse' {} a -> s {botId = a} :: DescribeBotRecommendationResponse)
+
+-- | The identifier of the bot recommendation being described.
+describeBotRecommendationResponse_botRecommendationId :: Lens.Lens' DescribeBotRecommendationResponse (Prelude.Maybe Prelude.Text)
+describeBotRecommendationResponse_botRecommendationId = Lens.lens (\DescribeBotRecommendationResponse' {botRecommendationId} -> botRecommendationId) (\s@DescribeBotRecommendationResponse' {} a -> s {botRecommendationId = a} :: DescribeBotRecommendationResponse)
+
+-- | The object representing the URL of the bot definition, the URL of the
+-- associated transcript and a statistical summary of the bot
+-- recommendation results.
+describeBotRecommendationResponse_botRecommendationResults :: Lens.Lens' DescribeBotRecommendationResponse (Prelude.Maybe BotRecommendationResults)
+describeBotRecommendationResponse_botRecommendationResults = Lens.lens (\DescribeBotRecommendationResponse' {botRecommendationResults} -> botRecommendationResults) (\s@DescribeBotRecommendationResponse' {} a -> s {botRecommendationResults = a} :: DescribeBotRecommendationResponse)
+
+-- | The status of the bot recommendation. If the status is Failed, then the
+-- reasons for the failure are listed in the failureReasons field.
+describeBotRecommendationResponse_botRecommendationStatus :: Lens.Lens' DescribeBotRecommendationResponse (Prelude.Maybe BotRecommendationStatus)
+describeBotRecommendationResponse_botRecommendationStatus = Lens.lens (\DescribeBotRecommendationResponse' {botRecommendationStatus} -> botRecommendationStatus) (\s@DescribeBotRecommendationResponse' {} a -> s {botRecommendationStatus = a} :: DescribeBotRecommendationResponse)
+
+-- | The version of the bot associated with the bot recommendation.
+describeBotRecommendationResponse_botVersion :: Lens.Lens' DescribeBotRecommendationResponse (Prelude.Maybe Prelude.Text)
+describeBotRecommendationResponse_botVersion = Lens.lens (\DescribeBotRecommendationResponse' {botVersion} -> botVersion) (\s@DescribeBotRecommendationResponse' {} a -> s {botVersion = a} :: DescribeBotRecommendationResponse)
+
+-- | The date and time that the bot recommendation was created.
+describeBotRecommendationResponse_creationDateTime :: Lens.Lens' DescribeBotRecommendationResponse (Prelude.Maybe Prelude.UTCTime)
+describeBotRecommendationResponse_creationDateTime = Lens.lens (\DescribeBotRecommendationResponse' {creationDateTime} -> creationDateTime) (\s@DescribeBotRecommendationResponse' {} a -> s {creationDateTime = a} :: DescribeBotRecommendationResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The object representing the passwords that were used to encrypt the data
+-- related to the bot recommendation results, as well as the KMS key ARN
+-- used to encrypt the associated metadata.
+describeBotRecommendationResponse_encryptionSetting :: Lens.Lens' DescribeBotRecommendationResponse (Prelude.Maybe EncryptionSetting)
+describeBotRecommendationResponse_encryptionSetting = Lens.lens (\DescribeBotRecommendationResponse' {encryptionSetting} -> encryptionSetting) (\s@DescribeBotRecommendationResponse' {} a -> s {encryptionSetting = a} :: DescribeBotRecommendationResponse)
+
+-- | If botRecommendationStatus is Failed, Amazon Lex explains why.
+describeBotRecommendationResponse_failureReasons :: Lens.Lens' DescribeBotRecommendationResponse (Prelude.Maybe [Prelude.Text])
+describeBotRecommendationResponse_failureReasons = Lens.lens (\DescribeBotRecommendationResponse' {failureReasons} -> failureReasons) (\s@DescribeBotRecommendationResponse' {} a -> s {failureReasons = a} :: DescribeBotRecommendationResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The date and time that the bot recommendation was last updated.
+describeBotRecommendationResponse_lastUpdatedDateTime :: Lens.Lens' DescribeBotRecommendationResponse (Prelude.Maybe Prelude.UTCTime)
+describeBotRecommendationResponse_lastUpdatedDateTime = Lens.lens (\DescribeBotRecommendationResponse' {lastUpdatedDateTime} -> lastUpdatedDateTime) (\s@DescribeBotRecommendationResponse' {} a -> s {lastUpdatedDateTime = a} :: DescribeBotRecommendationResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The identifier of the language and locale of the bot recommendation to
+-- describe.
+describeBotRecommendationResponse_localeId :: Lens.Lens' DescribeBotRecommendationResponse (Prelude.Maybe Prelude.Text)
+describeBotRecommendationResponse_localeId = Lens.lens (\DescribeBotRecommendationResponse' {localeId} -> localeId) (\s@DescribeBotRecommendationResponse' {} a -> s {localeId = a} :: DescribeBotRecommendationResponse)
+
+-- | The object representing the Amazon S3 bucket containing the transcript,
+-- as well as the associated metadata.
+describeBotRecommendationResponse_transcriptSourceSetting :: Lens.Lens' DescribeBotRecommendationResponse (Prelude.Maybe TranscriptSourceSetting)
+describeBotRecommendationResponse_transcriptSourceSetting = Lens.lens (\DescribeBotRecommendationResponse' {transcriptSourceSetting} -> transcriptSourceSetting) (\s@DescribeBotRecommendationResponse' {} a -> s {transcriptSourceSetting = a} :: DescribeBotRecommendationResponse)
+
+-- | The response's http status code.
+describeBotRecommendationResponse_httpStatus :: Lens.Lens' DescribeBotRecommendationResponse Prelude.Int
+describeBotRecommendationResponse_httpStatus = Lens.lens (\DescribeBotRecommendationResponse' {httpStatus} -> httpStatus) (\s@DescribeBotRecommendationResponse' {} a -> s {httpStatus = a} :: DescribeBotRecommendationResponse)
+
+instance
+  Prelude.NFData
+    DescribeBotRecommendationResponse
+  where
+  rnf DescribeBotRecommendationResponse' {..} =
+    Prelude.rnf botId
+      `Prelude.seq` Prelude.rnf botRecommendationId
+      `Prelude.seq` Prelude.rnf botRecommendationResults
+      `Prelude.seq` Prelude.rnf botRecommendationStatus
+      `Prelude.seq` Prelude.rnf botVersion
+      `Prelude.seq` Prelude.rnf creationDateTime
+      `Prelude.seq` Prelude.rnf encryptionSetting
+      `Prelude.seq` Prelude.rnf failureReasons
+      `Prelude.seq` Prelude.rnf lastUpdatedDateTime
+      `Prelude.seq` Prelude.rnf localeId
+      `Prelude.seq` Prelude.rnf transcriptSourceSetting
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/LexV2Models/DescribeBotVersion.hs b/gen/Amazonka/LexV2Models/DescribeBotVersion.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/DescribeBotVersion.hs
@@ -0,0 +1,302 @@
+{-# 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.LexV2Models.DescribeBotVersion
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Provides metadata about a version of a bot.
+module Amazonka.LexV2Models.DescribeBotVersion
+  ( -- * Creating a Request
+    DescribeBotVersion (..),
+    newDescribeBotVersion,
+
+    -- * Request Lenses
+    describeBotVersion_botId,
+    describeBotVersion_botVersion,
+
+    -- * Destructuring the Response
+    DescribeBotVersionResponse (..),
+    newDescribeBotVersionResponse,
+
+    -- * Response Lenses
+    describeBotVersionResponse_botId,
+    describeBotVersionResponse_botName,
+    describeBotVersionResponse_botStatus,
+    describeBotVersionResponse_botVersion,
+    describeBotVersionResponse_creationDateTime,
+    describeBotVersionResponse_dataPrivacy,
+    describeBotVersionResponse_description,
+    describeBotVersionResponse_failureReasons,
+    describeBotVersionResponse_idleSessionTTLInSeconds,
+    describeBotVersionResponse_roleArn,
+    describeBotVersionResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LexV2Models.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeBotVersion' smart constructor.
+data DescribeBotVersion = DescribeBotVersion'
+  { -- | The identifier of the bot containing the version to return metadata for.
+    botId :: Prelude.Text,
+    -- | The version of the bot to return metadata for.
+    botVersion :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeBotVersion' 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:
+--
+-- 'botId', 'describeBotVersion_botId' - The identifier of the bot containing the version to return metadata for.
+--
+-- 'botVersion', 'describeBotVersion_botVersion' - The version of the bot to return metadata for.
+newDescribeBotVersion ::
+  -- | 'botId'
+  Prelude.Text ->
+  -- | 'botVersion'
+  Prelude.Text ->
+  DescribeBotVersion
+newDescribeBotVersion pBotId_ pBotVersion_ =
+  DescribeBotVersion'
+    { botId = pBotId_,
+      botVersion = pBotVersion_
+    }
+
+-- | The identifier of the bot containing the version to return metadata for.
+describeBotVersion_botId :: Lens.Lens' DescribeBotVersion Prelude.Text
+describeBotVersion_botId = Lens.lens (\DescribeBotVersion' {botId} -> botId) (\s@DescribeBotVersion' {} a -> s {botId = a} :: DescribeBotVersion)
+
+-- | The version of the bot to return metadata for.
+describeBotVersion_botVersion :: Lens.Lens' DescribeBotVersion Prelude.Text
+describeBotVersion_botVersion = Lens.lens (\DescribeBotVersion' {botVersion} -> botVersion) (\s@DescribeBotVersion' {} a -> s {botVersion = a} :: DescribeBotVersion)
+
+instance Core.AWSRequest DescribeBotVersion where
+  type
+    AWSResponse DescribeBotVersion =
+      DescribeBotVersionResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeBotVersionResponse'
+            Prelude.<$> (x Data..?> "botId")
+            Prelude.<*> (x Data..?> "botName")
+            Prelude.<*> (x Data..?> "botStatus")
+            Prelude.<*> (x Data..?> "botVersion")
+            Prelude.<*> (x Data..?> "creationDateTime")
+            Prelude.<*> (x Data..?> "dataPrivacy")
+            Prelude.<*> (x Data..?> "description")
+            Prelude.<*> (x Data..?> "failureReasons" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "idleSessionTTLInSeconds")
+            Prelude.<*> (x Data..?> "roleArn")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeBotVersion where
+  hashWithSalt _salt DescribeBotVersion' {..} =
+    _salt
+      `Prelude.hashWithSalt` botId
+      `Prelude.hashWithSalt` botVersion
+
+instance Prelude.NFData DescribeBotVersion where
+  rnf DescribeBotVersion' {..} =
+    Prelude.rnf botId
+      `Prelude.seq` Prelude.rnf botVersion
+
+instance Data.ToHeaders DescribeBotVersion where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath DescribeBotVersion where
+  toPath DescribeBotVersion' {..} =
+    Prelude.mconcat
+      [ "/bots/",
+        Data.toBS botId,
+        "/botversions/",
+        Data.toBS botVersion,
+        "/"
+      ]
+
+instance Data.ToQuery DescribeBotVersion where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDescribeBotVersionResponse' smart constructor.
+data DescribeBotVersionResponse = DescribeBotVersionResponse'
+  { -- | The identifier of the bot that contains the version.
+    botId :: Prelude.Maybe Prelude.Text,
+    -- | The name of the bot that contains the version.
+    botName :: Prelude.Maybe Prelude.Text,
+    -- | The current status of the bot. When the status is @Available@, the bot
+    -- version is ready for use.
+    botStatus :: Prelude.Maybe BotStatus,
+    -- | The version of the bot to describe.
+    botVersion :: Prelude.Maybe Prelude.Text,
+    -- | A timestamp of the date and time that the bot version was created.
+    creationDateTime :: Prelude.Maybe Data.POSIX,
+    -- | Data privacy settings for the bot version.
+    dataPrivacy :: Prelude.Maybe DataPrivacy,
+    -- | The description specified for the bot.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | If the @botStatus@ is @Failed@, this contains a list of reasons that the
+    -- version couldn\'t be built.
+    failureReasons :: Prelude.Maybe [Prelude.Text],
+    -- | The number of seconds that a session with the bot remains active before
+    -- it is discarded by Amazon Lex.
+    idleSessionTTLInSeconds :: Prelude.Maybe Prelude.Natural,
+    -- | The Amazon Resource Name (ARN) of an IAM role that has permission to
+    -- access the bot version.
+    roleArn :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeBotVersionResponse' 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:
+--
+-- 'botId', 'describeBotVersionResponse_botId' - The identifier of the bot that contains the version.
+--
+-- 'botName', 'describeBotVersionResponse_botName' - The name of the bot that contains the version.
+--
+-- 'botStatus', 'describeBotVersionResponse_botStatus' - The current status of the bot. When the status is @Available@, the bot
+-- version is ready for use.
+--
+-- 'botVersion', 'describeBotVersionResponse_botVersion' - The version of the bot to describe.
+--
+-- 'creationDateTime', 'describeBotVersionResponse_creationDateTime' - A timestamp of the date and time that the bot version was created.
+--
+-- 'dataPrivacy', 'describeBotVersionResponse_dataPrivacy' - Data privacy settings for the bot version.
+--
+-- 'description', 'describeBotVersionResponse_description' - The description specified for the bot.
+--
+-- 'failureReasons', 'describeBotVersionResponse_failureReasons' - If the @botStatus@ is @Failed@, this contains a list of reasons that the
+-- version couldn\'t be built.
+--
+-- 'idleSessionTTLInSeconds', 'describeBotVersionResponse_idleSessionTTLInSeconds' - The number of seconds that a session with the bot remains active before
+-- it is discarded by Amazon Lex.
+--
+-- 'roleArn', 'describeBotVersionResponse_roleArn' - The Amazon Resource Name (ARN) of an IAM role that has permission to
+-- access the bot version.
+--
+-- 'httpStatus', 'describeBotVersionResponse_httpStatus' - The response's http status code.
+newDescribeBotVersionResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeBotVersionResponse
+newDescribeBotVersionResponse pHttpStatus_ =
+  DescribeBotVersionResponse'
+    { botId =
+        Prelude.Nothing,
+      botName = Prelude.Nothing,
+      botStatus = Prelude.Nothing,
+      botVersion = Prelude.Nothing,
+      creationDateTime = Prelude.Nothing,
+      dataPrivacy = Prelude.Nothing,
+      description = Prelude.Nothing,
+      failureReasons = Prelude.Nothing,
+      idleSessionTTLInSeconds = Prelude.Nothing,
+      roleArn = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The identifier of the bot that contains the version.
+describeBotVersionResponse_botId :: Lens.Lens' DescribeBotVersionResponse (Prelude.Maybe Prelude.Text)
+describeBotVersionResponse_botId = Lens.lens (\DescribeBotVersionResponse' {botId} -> botId) (\s@DescribeBotVersionResponse' {} a -> s {botId = a} :: DescribeBotVersionResponse)
+
+-- | The name of the bot that contains the version.
+describeBotVersionResponse_botName :: Lens.Lens' DescribeBotVersionResponse (Prelude.Maybe Prelude.Text)
+describeBotVersionResponse_botName = Lens.lens (\DescribeBotVersionResponse' {botName} -> botName) (\s@DescribeBotVersionResponse' {} a -> s {botName = a} :: DescribeBotVersionResponse)
+
+-- | The current status of the bot. When the status is @Available@, the bot
+-- version is ready for use.
+describeBotVersionResponse_botStatus :: Lens.Lens' DescribeBotVersionResponse (Prelude.Maybe BotStatus)
+describeBotVersionResponse_botStatus = Lens.lens (\DescribeBotVersionResponse' {botStatus} -> botStatus) (\s@DescribeBotVersionResponse' {} a -> s {botStatus = a} :: DescribeBotVersionResponse)
+
+-- | The version of the bot to describe.
+describeBotVersionResponse_botVersion :: Lens.Lens' DescribeBotVersionResponse (Prelude.Maybe Prelude.Text)
+describeBotVersionResponse_botVersion = Lens.lens (\DescribeBotVersionResponse' {botVersion} -> botVersion) (\s@DescribeBotVersionResponse' {} a -> s {botVersion = a} :: DescribeBotVersionResponse)
+
+-- | A timestamp of the date and time that the bot version was created.
+describeBotVersionResponse_creationDateTime :: Lens.Lens' DescribeBotVersionResponse (Prelude.Maybe Prelude.UTCTime)
+describeBotVersionResponse_creationDateTime = Lens.lens (\DescribeBotVersionResponse' {creationDateTime} -> creationDateTime) (\s@DescribeBotVersionResponse' {} a -> s {creationDateTime = a} :: DescribeBotVersionResponse) Prelude.. Lens.mapping Data._Time
+
+-- | Data privacy settings for the bot version.
+describeBotVersionResponse_dataPrivacy :: Lens.Lens' DescribeBotVersionResponse (Prelude.Maybe DataPrivacy)
+describeBotVersionResponse_dataPrivacy = Lens.lens (\DescribeBotVersionResponse' {dataPrivacy} -> dataPrivacy) (\s@DescribeBotVersionResponse' {} a -> s {dataPrivacy = a} :: DescribeBotVersionResponse)
+
+-- | The description specified for the bot.
+describeBotVersionResponse_description :: Lens.Lens' DescribeBotVersionResponse (Prelude.Maybe Prelude.Text)
+describeBotVersionResponse_description = Lens.lens (\DescribeBotVersionResponse' {description} -> description) (\s@DescribeBotVersionResponse' {} a -> s {description = a} :: DescribeBotVersionResponse)
+
+-- | If the @botStatus@ is @Failed@, this contains a list of reasons that the
+-- version couldn\'t be built.
+describeBotVersionResponse_failureReasons :: Lens.Lens' DescribeBotVersionResponse (Prelude.Maybe [Prelude.Text])
+describeBotVersionResponse_failureReasons = Lens.lens (\DescribeBotVersionResponse' {failureReasons} -> failureReasons) (\s@DescribeBotVersionResponse' {} a -> s {failureReasons = a} :: DescribeBotVersionResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The number of seconds that a session with the bot remains active before
+-- it is discarded by Amazon Lex.
+describeBotVersionResponse_idleSessionTTLInSeconds :: Lens.Lens' DescribeBotVersionResponse (Prelude.Maybe Prelude.Natural)
+describeBotVersionResponse_idleSessionTTLInSeconds = Lens.lens (\DescribeBotVersionResponse' {idleSessionTTLInSeconds} -> idleSessionTTLInSeconds) (\s@DescribeBotVersionResponse' {} a -> s {idleSessionTTLInSeconds = a} :: DescribeBotVersionResponse)
+
+-- | The Amazon Resource Name (ARN) of an IAM role that has permission to
+-- access the bot version.
+describeBotVersionResponse_roleArn :: Lens.Lens' DescribeBotVersionResponse (Prelude.Maybe Prelude.Text)
+describeBotVersionResponse_roleArn = Lens.lens (\DescribeBotVersionResponse' {roleArn} -> roleArn) (\s@DescribeBotVersionResponse' {} a -> s {roleArn = a} :: DescribeBotVersionResponse)
+
+-- | The response's http status code.
+describeBotVersionResponse_httpStatus :: Lens.Lens' DescribeBotVersionResponse Prelude.Int
+describeBotVersionResponse_httpStatus = Lens.lens (\DescribeBotVersionResponse' {httpStatus} -> httpStatus) (\s@DescribeBotVersionResponse' {} a -> s {httpStatus = a} :: DescribeBotVersionResponse)
+
+instance Prelude.NFData DescribeBotVersionResponse where
+  rnf DescribeBotVersionResponse' {..} =
+    Prelude.rnf botId
+      `Prelude.seq` Prelude.rnf botName
+      `Prelude.seq` Prelude.rnf botStatus
+      `Prelude.seq` Prelude.rnf botVersion
+      `Prelude.seq` Prelude.rnf creationDateTime
+      `Prelude.seq` Prelude.rnf dataPrivacy
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf failureReasons
+      `Prelude.seq` Prelude.rnf idleSessionTTLInSeconds
+      `Prelude.seq` Prelude.rnf roleArn
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/LexV2Models/DescribeCustomVocabularyMetadata.hs b/gen/Amazonka/LexV2Models/DescribeCustomVocabularyMetadata.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/DescribeCustomVocabularyMetadata.hs
@@ -0,0 +1,291 @@
+{-# 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.LexV2Models.DescribeCustomVocabularyMetadata
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Provides metadata information about a custom vocabulary.
+module Amazonka.LexV2Models.DescribeCustomVocabularyMetadata
+  ( -- * Creating a Request
+    DescribeCustomVocabularyMetadata (..),
+    newDescribeCustomVocabularyMetadata,
+
+    -- * Request Lenses
+    describeCustomVocabularyMetadata_botId,
+    describeCustomVocabularyMetadata_botVersion,
+    describeCustomVocabularyMetadata_localeId,
+
+    -- * Destructuring the Response
+    DescribeCustomVocabularyMetadataResponse (..),
+    newDescribeCustomVocabularyMetadataResponse,
+
+    -- * Response Lenses
+    describeCustomVocabularyMetadataResponse_botId,
+    describeCustomVocabularyMetadataResponse_botVersion,
+    describeCustomVocabularyMetadataResponse_creationDateTime,
+    describeCustomVocabularyMetadataResponse_customVocabularyStatus,
+    describeCustomVocabularyMetadataResponse_lastUpdatedDateTime,
+    describeCustomVocabularyMetadataResponse_localeId,
+    describeCustomVocabularyMetadataResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LexV2Models.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeCustomVocabularyMetadata' smart constructor.
+data DescribeCustomVocabularyMetadata = DescribeCustomVocabularyMetadata'
+  { -- | The unique identifier of the bot that contains the custom vocabulary.
+    botId :: Prelude.Text,
+    -- | The bot version of the bot to return metadata for.
+    botVersion :: Prelude.Text,
+    -- | The locale to return the custom vocabulary information for. The locale
+    -- must be @en_GB@.
+    localeId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeCustomVocabularyMetadata' 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:
+--
+-- 'botId', 'describeCustomVocabularyMetadata_botId' - The unique identifier of the bot that contains the custom vocabulary.
+--
+-- 'botVersion', 'describeCustomVocabularyMetadata_botVersion' - The bot version of the bot to return metadata for.
+--
+-- 'localeId', 'describeCustomVocabularyMetadata_localeId' - The locale to return the custom vocabulary information for. The locale
+-- must be @en_GB@.
+newDescribeCustomVocabularyMetadata ::
+  -- | 'botId'
+  Prelude.Text ->
+  -- | 'botVersion'
+  Prelude.Text ->
+  -- | 'localeId'
+  Prelude.Text ->
+  DescribeCustomVocabularyMetadata
+newDescribeCustomVocabularyMetadata
+  pBotId_
+  pBotVersion_
+  pLocaleId_ =
+    DescribeCustomVocabularyMetadata'
+      { botId = pBotId_,
+        botVersion = pBotVersion_,
+        localeId = pLocaleId_
+      }
+
+-- | The unique identifier of the bot that contains the custom vocabulary.
+describeCustomVocabularyMetadata_botId :: Lens.Lens' DescribeCustomVocabularyMetadata Prelude.Text
+describeCustomVocabularyMetadata_botId = Lens.lens (\DescribeCustomVocabularyMetadata' {botId} -> botId) (\s@DescribeCustomVocabularyMetadata' {} a -> s {botId = a} :: DescribeCustomVocabularyMetadata)
+
+-- | The bot version of the bot to return metadata for.
+describeCustomVocabularyMetadata_botVersion :: Lens.Lens' DescribeCustomVocabularyMetadata Prelude.Text
+describeCustomVocabularyMetadata_botVersion = Lens.lens (\DescribeCustomVocabularyMetadata' {botVersion} -> botVersion) (\s@DescribeCustomVocabularyMetadata' {} a -> s {botVersion = a} :: DescribeCustomVocabularyMetadata)
+
+-- | The locale to return the custom vocabulary information for. The locale
+-- must be @en_GB@.
+describeCustomVocabularyMetadata_localeId :: Lens.Lens' DescribeCustomVocabularyMetadata Prelude.Text
+describeCustomVocabularyMetadata_localeId = Lens.lens (\DescribeCustomVocabularyMetadata' {localeId} -> localeId) (\s@DescribeCustomVocabularyMetadata' {} a -> s {localeId = a} :: DescribeCustomVocabularyMetadata)
+
+instance
+  Core.AWSRequest
+    DescribeCustomVocabularyMetadata
+  where
+  type
+    AWSResponse DescribeCustomVocabularyMetadata =
+      DescribeCustomVocabularyMetadataResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeCustomVocabularyMetadataResponse'
+            Prelude.<$> (x Data..?> "botId")
+            Prelude.<*> (x Data..?> "botVersion")
+            Prelude.<*> (x Data..?> "creationDateTime")
+            Prelude.<*> (x Data..?> "customVocabularyStatus")
+            Prelude.<*> (x Data..?> "lastUpdatedDateTime")
+            Prelude.<*> (x Data..?> "localeId")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    DescribeCustomVocabularyMetadata
+  where
+  hashWithSalt
+    _salt
+    DescribeCustomVocabularyMetadata' {..} =
+      _salt
+        `Prelude.hashWithSalt` botId
+        `Prelude.hashWithSalt` botVersion
+        `Prelude.hashWithSalt` localeId
+
+instance
+  Prelude.NFData
+    DescribeCustomVocabularyMetadata
+  where
+  rnf DescribeCustomVocabularyMetadata' {..} =
+    Prelude.rnf botId
+      `Prelude.seq` Prelude.rnf botVersion
+      `Prelude.seq` Prelude.rnf localeId
+
+instance
+  Data.ToHeaders
+    DescribeCustomVocabularyMetadata
+  where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath DescribeCustomVocabularyMetadata where
+  toPath DescribeCustomVocabularyMetadata' {..} =
+    Prelude.mconcat
+      [ "/bots/",
+        Data.toBS botId,
+        "/botversions/",
+        Data.toBS botVersion,
+        "/botlocales/",
+        Data.toBS localeId,
+        "/customvocabulary/DEFAULT/metadata"
+      ]
+
+instance
+  Data.ToQuery
+    DescribeCustomVocabularyMetadata
+  where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDescribeCustomVocabularyMetadataResponse' smart constructor.
+data DescribeCustomVocabularyMetadataResponse = DescribeCustomVocabularyMetadataResponse'
+  { -- | The identifier of the bot that contains the custom vocabulary.
+    botId :: Prelude.Maybe Prelude.Text,
+    -- | The version of the bot that contains the custom vocabulary to describe.
+    botVersion :: Prelude.Maybe Prelude.Text,
+    -- | The date and time that the custom vocabulary was created.
+    creationDateTime :: Prelude.Maybe Data.POSIX,
+    -- | The status of the custom vocabulary. If the status is @Ready@ the custom
+    -- vocabulary is ready to use.
+    customVocabularyStatus :: Prelude.Maybe CustomVocabularyStatus,
+    -- | The date and time that the custom vocabulary was last updated.
+    lastUpdatedDateTime :: Prelude.Maybe Data.POSIX,
+    -- | The locale that contains the custom vocabulary to describe.
+    localeId :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeCustomVocabularyMetadataResponse' 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:
+--
+-- 'botId', 'describeCustomVocabularyMetadataResponse_botId' - The identifier of the bot that contains the custom vocabulary.
+--
+-- 'botVersion', 'describeCustomVocabularyMetadataResponse_botVersion' - The version of the bot that contains the custom vocabulary to describe.
+--
+-- 'creationDateTime', 'describeCustomVocabularyMetadataResponse_creationDateTime' - The date and time that the custom vocabulary was created.
+--
+-- 'customVocabularyStatus', 'describeCustomVocabularyMetadataResponse_customVocabularyStatus' - The status of the custom vocabulary. If the status is @Ready@ the custom
+-- vocabulary is ready to use.
+--
+-- 'lastUpdatedDateTime', 'describeCustomVocabularyMetadataResponse_lastUpdatedDateTime' - The date and time that the custom vocabulary was last updated.
+--
+-- 'localeId', 'describeCustomVocabularyMetadataResponse_localeId' - The locale that contains the custom vocabulary to describe.
+--
+-- 'httpStatus', 'describeCustomVocabularyMetadataResponse_httpStatus' - The response's http status code.
+newDescribeCustomVocabularyMetadataResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeCustomVocabularyMetadataResponse
+newDescribeCustomVocabularyMetadataResponse
+  pHttpStatus_ =
+    DescribeCustomVocabularyMetadataResponse'
+      { botId =
+          Prelude.Nothing,
+        botVersion = Prelude.Nothing,
+        creationDateTime =
+          Prelude.Nothing,
+        customVocabularyStatus =
+          Prelude.Nothing,
+        lastUpdatedDateTime =
+          Prelude.Nothing,
+        localeId = Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | The identifier of the bot that contains the custom vocabulary.
+describeCustomVocabularyMetadataResponse_botId :: Lens.Lens' DescribeCustomVocabularyMetadataResponse (Prelude.Maybe Prelude.Text)
+describeCustomVocabularyMetadataResponse_botId = Lens.lens (\DescribeCustomVocabularyMetadataResponse' {botId} -> botId) (\s@DescribeCustomVocabularyMetadataResponse' {} a -> s {botId = a} :: DescribeCustomVocabularyMetadataResponse)
+
+-- | The version of the bot that contains the custom vocabulary to describe.
+describeCustomVocabularyMetadataResponse_botVersion :: Lens.Lens' DescribeCustomVocabularyMetadataResponse (Prelude.Maybe Prelude.Text)
+describeCustomVocabularyMetadataResponse_botVersion = Lens.lens (\DescribeCustomVocabularyMetadataResponse' {botVersion} -> botVersion) (\s@DescribeCustomVocabularyMetadataResponse' {} a -> s {botVersion = a} :: DescribeCustomVocabularyMetadataResponse)
+
+-- | The date and time that the custom vocabulary was created.
+describeCustomVocabularyMetadataResponse_creationDateTime :: Lens.Lens' DescribeCustomVocabularyMetadataResponse (Prelude.Maybe Prelude.UTCTime)
+describeCustomVocabularyMetadataResponse_creationDateTime = Lens.lens (\DescribeCustomVocabularyMetadataResponse' {creationDateTime} -> creationDateTime) (\s@DescribeCustomVocabularyMetadataResponse' {} a -> s {creationDateTime = a} :: DescribeCustomVocabularyMetadataResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The status of the custom vocabulary. If the status is @Ready@ the custom
+-- vocabulary is ready to use.
+describeCustomVocabularyMetadataResponse_customVocabularyStatus :: Lens.Lens' DescribeCustomVocabularyMetadataResponse (Prelude.Maybe CustomVocabularyStatus)
+describeCustomVocabularyMetadataResponse_customVocabularyStatus = Lens.lens (\DescribeCustomVocabularyMetadataResponse' {customVocabularyStatus} -> customVocabularyStatus) (\s@DescribeCustomVocabularyMetadataResponse' {} a -> s {customVocabularyStatus = a} :: DescribeCustomVocabularyMetadataResponse)
+
+-- | The date and time that the custom vocabulary was last updated.
+describeCustomVocabularyMetadataResponse_lastUpdatedDateTime :: Lens.Lens' DescribeCustomVocabularyMetadataResponse (Prelude.Maybe Prelude.UTCTime)
+describeCustomVocabularyMetadataResponse_lastUpdatedDateTime = Lens.lens (\DescribeCustomVocabularyMetadataResponse' {lastUpdatedDateTime} -> lastUpdatedDateTime) (\s@DescribeCustomVocabularyMetadataResponse' {} a -> s {lastUpdatedDateTime = a} :: DescribeCustomVocabularyMetadataResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The locale that contains the custom vocabulary to describe.
+describeCustomVocabularyMetadataResponse_localeId :: Lens.Lens' DescribeCustomVocabularyMetadataResponse (Prelude.Maybe Prelude.Text)
+describeCustomVocabularyMetadataResponse_localeId = Lens.lens (\DescribeCustomVocabularyMetadataResponse' {localeId} -> localeId) (\s@DescribeCustomVocabularyMetadataResponse' {} a -> s {localeId = a} :: DescribeCustomVocabularyMetadataResponse)
+
+-- | The response's http status code.
+describeCustomVocabularyMetadataResponse_httpStatus :: Lens.Lens' DescribeCustomVocabularyMetadataResponse Prelude.Int
+describeCustomVocabularyMetadataResponse_httpStatus = Lens.lens (\DescribeCustomVocabularyMetadataResponse' {httpStatus} -> httpStatus) (\s@DescribeCustomVocabularyMetadataResponse' {} a -> s {httpStatus = a} :: DescribeCustomVocabularyMetadataResponse)
+
+instance
+  Prelude.NFData
+    DescribeCustomVocabularyMetadataResponse
+  where
+  rnf DescribeCustomVocabularyMetadataResponse' {..} =
+    Prelude.rnf botId
+      `Prelude.seq` Prelude.rnf botVersion
+      `Prelude.seq` Prelude.rnf creationDateTime
+      `Prelude.seq` Prelude.rnf customVocabularyStatus
+      `Prelude.seq` Prelude.rnf lastUpdatedDateTime
+      `Prelude.seq` Prelude.rnf localeId
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/LexV2Models/DescribeExport.hs b/gen/Amazonka/LexV2Models/DescribeExport.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/DescribeExport.hs
@@ -0,0 +1,258 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.LexV2Models.DescribeExport
+-- 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 information about a specific export.
+module Amazonka.LexV2Models.DescribeExport
+  ( -- * Creating a Request
+    DescribeExport (..),
+    newDescribeExport,
+
+    -- * Request Lenses
+    describeExport_exportId,
+
+    -- * Destructuring the Response
+    DescribeExportResponse (..),
+    newDescribeExportResponse,
+
+    -- * Response Lenses
+    describeExportResponse_creationDateTime,
+    describeExportResponse_downloadUrl,
+    describeExportResponse_exportId,
+    describeExportResponse_exportStatus,
+    describeExportResponse_failureReasons,
+    describeExportResponse_fileFormat,
+    describeExportResponse_lastUpdatedDateTime,
+    describeExportResponse_resourceSpecification,
+    describeExportResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LexV2Models.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeExport' smart constructor.
+data DescribeExport = DescribeExport'
+  { -- | The unique identifier of the export to describe.
+    exportId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeExport' 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:
+--
+-- 'exportId', 'describeExport_exportId' - The unique identifier of the export to describe.
+newDescribeExport ::
+  -- | 'exportId'
+  Prelude.Text ->
+  DescribeExport
+newDescribeExport pExportId_ =
+  DescribeExport' {exportId = pExportId_}
+
+-- | The unique identifier of the export to describe.
+describeExport_exportId :: Lens.Lens' DescribeExport Prelude.Text
+describeExport_exportId = Lens.lens (\DescribeExport' {exportId} -> exportId) (\s@DescribeExport' {} a -> s {exportId = a} :: DescribeExport)
+
+instance Core.AWSRequest DescribeExport where
+  type
+    AWSResponse DescribeExport =
+      DescribeExportResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeExportResponse'
+            Prelude.<$> (x Data..?> "creationDateTime")
+            Prelude.<*> (x Data..?> "downloadUrl")
+            Prelude.<*> (x Data..?> "exportId")
+            Prelude.<*> (x Data..?> "exportStatus")
+            Prelude.<*> (x Data..?> "failureReasons" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "fileFormat")
+            Prelude.<*> (x Data..?> "lastUpdatedDateTime")
+            Prelude.<*> (x Data..?> "resourceSpecification")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeExport where
+  hashWithSalt _salt DescribeExport' {..} =
+    _salt `Prelude.hashWithSalt` exportId
+
+instance Prelude.NFData DescribeExport where
+  rnf DescribeExport' {..} = Prelude.rnf exportId
+
+instance Data.ToHeaders DescribeExport where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath DescribeExport where
+  toPath DescribeExport' {..} =
+    Prelude.mconcat
+      ["/exports/", Data.toBS exportId, "/"]
+
+instance Data.ToQuery DescribeExport where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDescribeExportResponse' smart constructor.
+data DescribeExportResponse = DescribeExportResponse'
+  { -- | The date and time that the export was created.
+    creationDateTime :: Prelude.Maybe Data.POSIX,
+    -- | A pre-signed S3 URL that points to the bot or bot locale archive. The
+    -- URL is only available for 5 minutes after calling the @DescribeExport@
+    -- operation.
+    downloadUrl :: Prelude.Maybe Prelude.Text,
+    -- | The unique identifier of the described export.
+    exportId :: Prelude.Maybe Prelude.Text,
+    -- | The status of the export. When the status is @Complete@ the export
+    -- archive file is available for download.
+    exportStatus :: Prelude.Maybe ExportStatus,
+    -- | If the @exportStatus@ is failed, contains one or more reasons why the
+    -- export could not be completed.
+    failureReasons :: Prelude.Maybe [Prelude.Text],
+    -- | The file format used in the files that describe the resource.
+    fileFormat :: Prelude.Maybe ImportExportFileFormat,
+    -- | The last date and time that the export was updated.
+    lastUpdatedDateTime :: Prelude.Maybe Data.POSIX,
+    -- | The bot, bot ID, and optional locale ID of the exported bot or bot
+    -- locale.
+    resourceSpecification :: Prelude.Maybe ExportResourceSpecification,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeExportResponse' 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:
+--
+-- 'creationDateTime', 'describeExportResponse_creationDateTime' - The date and time that the export was created.
+--
+-- 'downloadUrl', 'describeExportResponse_downloadUrl' - A pre-signed S3 URL that points to the bot or bot locale archive. The
+-- URL is only available for 5 minutes after calling the @DescribeExport@
+-- operation.
+--
+-- 'exportId', 'describeExportResponse_exportId' - The unique identifier of the described export.
+--
+-- 'exportStatus', 'describeExportResponse_exportStatus' - The status of the export. When the status is @Complete@ the export
+-- archive file is available for download.
+--
+-- 'failureReasons', 'describeExportResponse_failureReasons' - If the @exportStatus@ is failed, contains one or more reasons why the
+-- export could not be completed.
+--
+-- 'fileFormat', 'describeExportResponse_fileFormat' - The file format used in the files that describe the resource.
+--
+-- 'lastUpdatedDateTime', 'describeExportResponse_lastUpdatedDateTime' - The last date and time that the export was updated.
+--
+-- 'resourceSpecification', 'describeExportResponse_resourceSpecification' - The bot, bot ID, and optional locale ID of the exported bot or bot
+-- locale.
+--
+-- 'httpStatus', 'describeExportResponse_httpStatus' - The response's http status code.
+newDescribeExportResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeExportResponse
+newDescribeExportResponse pHttpStatus_ =
+  DescribeExportResponse'
+    { creationDateTime =
+        Prelude.Nothing,
+      downloadUrl = Prelude.Nothing,
+      exportId = Prelude.Nothing,
+      exportStatus = Prelude.Nothing,
+      failureReasons = Prelude.Nothing,
+      fileFormat = Prelude.Nothing,
+      lastUpdatedDateTime = Prelude.Nothing,
+      resourceSpecification = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The date and time that the export was created.
+describeExportResponse_creationDateTime :: Lens.Lens' DescribeExportResponse (Prelude.Maybe Prelude.UTCTime)
+describeExportResponse_creationDateTime = Lens.lens (\DescribeExportResponse' {creationDateTime} -> creationDateTime) (\s@DescribeExportResponse' {} a -> s {creationDateTime = a} :: DescribeExportResponse) Prelude.. Lens.mapping Data._Time
+
+-- | A pre-signed S3 URL that points to the bot or bot locale archive. The
+-- URL is only available for 5 minutes after calling the @DescribeExport@
+-- operation.
+describeExportResponse_downloadUrl :: Lens.Lens' DescribeExportResponse (Prelude.Maybe Prelude.Text)
+describeExportResponse_downloadUrl = Lens.lens (\DescribeExportResponse' {downloadUrl} -> downloadUrl) (\s@DescribeExportResponse' {} a -> s {downloadUrl = a} :: DescribeExportResponse)
+
+-- | The unique identifier of the described export.
+describeExportResponse_exportId :: Lens.Lens' DescribeExportResponse (Prelude.Maybe Prelude.Text)
+describeExportResponse_exportId = Lens.lens (\DescribeExportResponse' {exportId} -> exportId) (\s@DescribeExportResponse' {} a -> s {exportId = a} :: DescribeExportResponse)
+
+-- | The status of the export. When the status is @Complete@ the export
+-- archive file is available for download.
+describeExportResponse_exportStatus :: Lens.Lens' DescribeExportResponse (Prelude.Maybe ExportStatus)
+describeExportResponse_exportStatus = Lens.lens (\DescribeExportResponse' {exportStatus} -> exportStatus) (\s@DescribeExportResponse' {} a -> s {exportStatus = a} :: DescribeExportResponse)
+
+-- | If the @exportStatus@ is failed, contains one or more reasons why the
+-- export could not be completed.
+describeExportResponse_failureReasons :: Lens.Lens' DescribeExportResponse (Prelude.Maybe [Prelude.Text])
+describeExportResponse_failureReasons = Lens.lens (\DescribeExportResponse' {failureReasons} -> failureReasons) (\s@DescribeExportResponse' {} a -> s {failureReasons = a} :: DescribeExportResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The file format used in the files that describe the resource.
+describeExportResponse_fileFormat :: Lens.Lens' DescribeExportResponse (Prelude.Maybe ImportExportFileFormat)
+describeExportResponse_fileFormat = Lens.lens (\DescribeExportResponse' {fileFormat} -> fileFormat) (\s@DescribeExportResponse' {} a -> s {fileFormat = a} :: DescribeExportResponse)
+
+-- | The last date and time that the export was updated.
+describeExportResponse_lastUpdatedDateTime :: Lens.Lens' DescribeExportResponse (Prelude.Maybe Prelude.UTCTime)
+describeExportResponse_lastUpdatedDateTime = Lens.lens (\DescribeExportResponse' {lastUpdatedDateTime} -> lastUpdatedDateTime) (\s@DescribeExportResponse' {} a -> s {lastUpdatedDateTime = a} :: DescribeExportResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The bot, bot ID, and optional locale ID of the exported bot or bot
+-- locale.
+describeExportResponse_resourceSpecification :: Lens.Lens' DescribeExportResponse (Prelude.Maybe ExportResourceSpecification)
+describeExportResponse_resourceSpecification = Lens.lens (\DescribeExportResponse' {resourceSpecification} -> resourceSpecification) (\s@DescribeExportResponse' {} a -> s {resourceSpecification = a} :: DescribeExportResponse)
+
+-- | The response's http status code.
+describeExportResponse_httpStatus :: Lens.Lens' DescribeExportResponse Prelude.Int
+describeExportResponse_httpStatus = Lens.lens (\DescribeExportResponse' {httpStatus} -> httpStatus) (\s@DescribeExportResponse' {} a -> s {httpStatus = a} :: DescribeExportResponse)
+
+instance Prelude.NFData DescribeExportResponse where
+  rnf DescribeExportResponse' {..} =
+    Prelude.rnf creationDateTime
+      `Prelude.seq` Prelude.rnf downloadUrl
+      `Prelude.seq` Prelude.rnf exportId
+      `Prelude.seq` Prelude.rnf exportStatus
+      `Prelude.seq` Prelude.rnf failureReasons
+      `Prelude.seq` Prelude.rnf fileFormat
+      `Prelude.seq` Prelude.rnf lastUpdatedDateTime
+      `Prelude.seq` Prelude.rnf resourceSpecification
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/LexV2Models/DescribeImport.hs b/gen/Amazonka/LexV2Models/DescribeImport.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/DescribeImport.hs
@@ -0,0 +1,276 @@
+{-# 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.LexV2Models.DescribeImport
+-- 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 information about a specific import.
+module Amazonka.LexV2Models.DescribeImport
+  ( -- * Creating a Request
+    DescribeImport (..),
+    newDescribeImport,
+
+    -- * Request Lenses
+    describeImport_importId,
+
+    -- * Destructuring the Response
+    DescribeImportResponse (..),
+    newDescribeImportResponse,
+
+    -- * Response Lenses
+    describeImportResponse_creationDateTime,
+    describeImportResponse_failureReasons,
+    describeImportResponse_importId,
+    describeImportResponse_importStatus,
+    describeImportResponse_importedResourceId,
+    describeImportResponse_importedResourceName,
+    describeImportResponse_lastUpdatedDateTime,
+    describeImportResponse_mergeStrategy,
+    describeImportResponse_resourceSpecification,
+    describeImportResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LexV2Models.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeImport' smart constructor.
+data DescribeImport = DescribeImport'
+  { -- | The unique identifier of the import to describe.
+    importId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeImport' 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:
+--
+-- 'importId', 'describeImport_importId' - The unique identifier of the import to describe.
+newDescribeImport ::
+  -- | 'importId'
+  Prelude.Text ->
+  DescribeImport
+newDescribeImport pImportId_ =
+  DescribeImport' {importId = pImportId_}
+
+-- | The unique identifier of the import to describe.
+describeImport_importId :: Lens.Lens' DescribeImport Prelude.Text
+describeImport_importId = Lens.lens (\DescribeImport' {importId} -> importId) (\s@DescribeImport' {} a -> s {importId = a} :: DescribeImport)
+
+instance Core.AWSRequest DescribeImport where
+  type
+    AWSResponse DescribeImport =
+      DescribeImportResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeImportResponse'
+            Prelude.<$> (x Data..?> "creationDateTime")
+            Prelude.<*> (x Data..?> "failureReasons" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "importId")
+            Prelude.<*> (x Data..?> "importStatus")
+            Prelude.<*> (x Data..?> "importedResourceId")
+            Prelude.<*> (x Data..?> "importedResourceName")
+            Prelude.<*> (x Data..?> "lastUpdatedDateTime")
+            Prelude.<*> (x Data..?> "mergeStrategy")
+            Prelude.<*> (x Data..?> "resourceSpecification")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeImport where
+  hashWithSalt _salt DescribeImport' {..} =
+    _salt `Prelude.hashWithSalt` importId
+
+instance Prelude.NFData DescribeImport where
+  rnf DescribeImport' {..} = Prelude.rnf importId
+
+instance Data.ToHeaders DescribeImport where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath DescribeImport where
+  toPath DescribeImport' {..} =
+    Prelude.mconcat
+      ["/imports/", Data.toBS importId, "/"]
+
+instance Data.ToQuery DescribeImport where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDescribeImportResponse' smart constructor.
+data DescribeImportResponse = DescribeImportResponse'
+  { -- | The date and time that the import was created.
+    creationDateTime :: Prelude.Maybe Data.POSIX,
+    -- | If the @importStatus@ field is @Failed@, this provides one or more
+    -- reasons for the failure.
+    failureReasons :: Prelude.Maybe [Prelude.Text],
+    -- | The unique identifier of the described import.
+    importId :: Prelude.Maybe Prelude.Text,
+    -- | The status of the import process. When the status is @Completed@ the
+    -- resource is imported and ready for use.
+    importStatus :: Prelude.Maybe ImportStatus,
+    -- | The unique identifier that Amazon Lex assigned to the resource created
+    -- by the import.
+    importedResourceId :: Prelude.Maybe Prelude.Text,
+    -- | The name of the imported resource.
+    importedResourceName :: Prelude.Maybe Prelude.Text,
+    -- | The date and time that the import was last updated.
+    lastUpdatedDateTime :: Prelude.Maybe Data.POSIX,
+    -- | The strategy used when there was a name conflict between the imported
+    -- resource and an existing resource. When the merge strategy is
+    -- @FailOnConflict@ existing resources are not overwritten and the import
+    -- fails.
+    mergeStrategy :: Prelude.Maybe MergeStrategy,
+    -- | The specifications of the imported bot, bot locale, or custom
+    -- vocabulary.
+    resourceSpecification :: Prelude.Maybe ImportResourceSpecification,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeImportResponse' 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:
+--
+-- 'creationDateTime', 'describeImportResponse_creationDateTime' - The date and time that the import was created.
+--
+-- 'failureReasons', 'describeImportResponse_failureReasons' - If the @importStatus@ field is @Failed@, this provides one or more
+-- reasons for the failure.
+--
+-- 'importId', 'describeImportResponse_importId' - The unique identifier of the described import.
+--
+-- 'importStatus', 'describeImportResponse_importStatus' - The status of the import process. When the status is @Completed@ the
+-- resource is imported and ready for use.
+--
+-- 'importedResourceId', 'describeImportResponse_importedResourceId' - The unique identifier that Amazon Lex assigned to the resource created
+-- by the import.
+--
+-- 'importedResourceName', 'describeImportResponse_importedResourceName' - The name of the imported resource.
+--
+-- 'lastUpdatedDateTime', 'describeImportResponse_lastUpdatedDateTime' - The date and time that the import was last updated.
+--
+-- 'mergeStrategy', 'describeImportResponse_mergeStrategy' - The strategy used when there was a name conflict between the imported
+-- resource and an existing resource. When the merge strategy is
+-- @FailOnConflict@ existing resources are not overwritten and the import
+-- fails.
+--
+-- 'resourceSpecification', 'describeImportResponse_resourceSpecification' - The specifications of the imported bot, bot locale, or custom
+-- vocabulary.
+--
+-- 'httpStatus', 'describeImportResponse_httpStatus' - The response's http status code.
+newDescribeImportResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeImportResponse
+newDescribeImportResponse pHttpStatus_ =
+  DescribeImportResponse'
+    { creationDateTime =
+        Prelude.Nothing,
+      failureReasons = Prelude.Nothing,
+      importId = Prelude.Nothing,
+      importStatus = Prelude.Nothing,
+      importedResourceId = Prelude.Nothing,
+      importedResourceName = Prelude.Nothing,
+      lastUpdatedDateTime = Prelude.Nothing,
+      mergeStrategy = Prelude.Nothing,
+      resourceSpecification = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The date and time that the import was created.
+describeImportResponse_creationDateTime :: Lens.Lens' DescribeImportResponse (Prelude.Maybe Prelude.UTCTime)
+describeImportResponse_creationDateTime = Lens.lens (\DescribeImportResponse' {creationDateTime} -> creationDateTime) (\s@DescribeImportResponse' {} a -> s {creationDateTime = a} :: DescribeImportResponse) Prelude.. Lens.mapping Data._Time
+
+-- | If the @importStatus@ field is @Failed@, this provides one or more
+-- reasons for the failure.
+describeImportResponse_failureReasons :: Lens.Lens' DescribeImportResponse (Prelude.Maybe [Prelude.Text])
+describeImportResponse_failureReasons = Lens.lens (\DescribeImportResponse' {failureReasons} -> failureReasons) (\s@DescribeImportResponse' {} a -> s {failureReasons = a} :: DescribeImportResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The unique identifier of the described import.
+describeImportResponse_importId :: Lens.Lens' DescribeImportResponse (Prelude.Maybe Prelude.Text)
+describeImportResponse_importId = Lens.lens (\DescribeImportResponse' {importId} -> importId) (\s@DescribeImportResponse' {} a -> s {importId = a} :: DescribeImportResponse)
+
+-- | The status of the import process. When the status is @Completed@ the
+-- resource is imported and ready for use.
+describeImportResponse_importStatus :: Lens.Lens' DescribeImportResponse (Prelude.Maybe ImportStatus)
+describeImportResponse_importStatus = Lens.lens (\DescribeImportResponse' {importStatus} -> importStatus) (\s@DescribeImportResponse' {} a -> s {importStatus = a} :: DescribeImportResponse)
+
+-- | The unique identifier that Amazon Lex assigned to the resource created
+-- by the import.
+describeImportResponse_importedResourceId :: Lens.Lens' DescribeImportResponse (Prelude.Maybe Prelude.Text)
+describeImportResponse_importedResourceId = Lens.lens (\DescribeImportResponse' {importedResourceId} -> importedResourceId) (\s@DescribeImportResponse' {} a -> s {importedResourceId = a} :: DescribeImportResponse)
+
+-- | The name of the imported resource.
+describeImportResponse_importedResourceName :: Lens.Lens' DescribeImportResponse (Prelude.Maybe Prelude.Text)
+describeImportResponse_importedResourceName = Lens.lens (\DescribeImportResponse' {importedResourceName} -> importedResourceName) (\s@DescribeImportResponse' {} a -> s {importedResourceName = a} :: DescribeImportResponse)
+
+-- | The date and time that the import was last updated.
+describeImportResponse_lastUpdatedDateTime :: Lens.Lens' DescribeImportResponse (Prelude.Maybe Prelude.UTCTime)
+describeImportResponse_lastUpdatedDateTime = Lens.lens (\DescribeImportResponse' {lastUpdatedDateTime} -> lastUpdatedDateTime) (\s@DescribeImportResponse' {} a -> s {lastUpdatedDateTime = a} :: DescribeImportResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The strategy used when there was a name conflict between the imported
+-- resource and an existing resource. When the merge strategy is
+-- @FailOnConflict@ existing resources are not overwritten and the import
+-- fails.
+describeImportResponse_mergeStrategy :: Lens.Lens' DescribeImportResponse (Prelude.Maybe MergeStrategy)
+describeImportResponse_mergeStrategy = Lens.lens (\DescribeImportResponse' {mergeStrategy} -> mergeStrategy) (\s@DescribeImportResponse' {} a -> s {mergeStrategy = a} :: DescribeImportResponse)
+
+-- | The specifications of the imported bot, bot locale, or custom
+-- vocabulary.
+describeImportResponse_resourceSpecification :: Lens.Lens' DescribeImportResponse (Prelude.Maybe ImportResourceSpecification)
+describeImportResponse_resourceSpecification = Lens.lens (\DescribeImportResponse' {resourceSpecification} -> resourceSpecification) (\s@DescribeImportResponse' {} a -> s {resourceSpecification = a} :: DescribeImportResponse)
+
+-- | The response's http status code.
+describeImportResponse_httpStatus :: Lens.Lens' DescribeImportResponse Prelude.Int
+describeImportResponse_httpStatus = Lens.lens (\DescribeImportResponse' {httpStatus} -> httpStatus) (\s@DescribeImportResponse' {} a -> s {httpStatus = a} :: DescribeImportResponse)
+
+instance Prelude.NFData DescribeImportResponse where
+  rnf DescribeImportResponse' {..} =
+    Prelude.rnf creationDateTime
+      `Prelude.seq` Prelude.rnf failureReasons
+      `Prelude.seq` Prelude.rnf importId
+      `Prelude.seq` Prelude.rnf importStatus
+      `Prelude.seq` Prelude.rnf importedResourceId
+      `Prelude.seq` Prelude.rnf importedResourceName
+      `Prelude.seq` Prelude.rnf lastUpdatedDateTime
+      `Prelude.seq` Prelude.rnf mergeStrategy
+      `Prelude.seq` Prelude.rnf resourceSpecification
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/LexV2Models/DescribeIntent.hs b/gen/Amazonka/LexV2Models/DescribeIntent.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/DescribeIntent.hs
@@ -0,0 +1,464 @@
+{-# 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.LexV2Models.DescribeIntent
+-- 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 metadata about an intent.
+module Amazonka.LexV2Models.DescribeIntent
+  ( -- * Creating a Request
+    DescribeIntent (..),
+    newDescribeIntent,
+
+    -- * Request Lenses
+    describeIntent_intentId,
+    describeIntent_botId,
+    describeIntent_botVersion,
+    describeIntent_localeId,
+
+    -- * Destructuring the Response
+    DescribeIntentResponse (..),
+    newDescribeIntentResponse,
+
+    -- * Response Lenses
+    describeIntentResponse_botId,
+    describeIntentResponse_botVersion,
+    describeIntentResponse_creationDateTime,
+    describeIntentResponse_description,
+    describeIntentResponse_dialogCodeHook,
+    describeIntentResponse_fulfillmentCodeHook,
+    describeIntentResponse_initialResponseSetting,
+    describeIntentResponse_inputContexts,
+    describeIntentResponse_intentClosingSetting,
+    describeIntentResponse_intentConfirmationSetting,
+    describeIntentResponse_intentId,
+    describeIntentResponse_intentName,
+    describeIntentResponse_kendraConfiguration,
+    describeIntentResponse_lastUpdatedDateTime,
+    describeIntentResponse_localeId,
+    describeIntentResponse_outputContexts,
+    describeIntentResponse_parentIntentSignature,
+    describeIntentResponse_sampleUtterances,
+    describeIntentResponse_slotPriorities,
+    describeIntentResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LexV2Models.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeIntent' smart constructor.
+data DescribeIntent = DescribeIntent'
+  { -- | The identifier of the intent to describe.
+    intentId :: Prelude.Text,
+    -- | The identifier of the bot associated with the intent.
+    botId :: Prelude.Text,
+    -- | The version of the bot associated with the intent.
+    botVersion :: Prelude.Text,
+    -- | The identifier of the language and locale of the intent to describe. The
+    -- string must match one of the supported locales. For more information,
+    -- see
+    -- <https://docs.aws.amazon.com/lexv2/latest/dg/how-languages.html Supported languages>.
+    localeId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeIntent' 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:
+--
+-- 'intentId', 'describeIntent_intentId' - The identifier of the intent to describe.
+--
+-- 'botId', 'describeIntent_botId' - The identifier of the bot associated with the intent.
+--
+-- 'botVersion', 'describeIntent_botVersion' - The version of the bot associated with the intent.
+--
+-- 'localeId', 'describeIntent_localeId' - The identifier of the language and locale of the intent to describe. The
+-- string must match one of the supported locales. For more information,
+-- see
+-- <https://docs.aws.amazon.com/lexv2/latest/dg/how-languages.html Supported languages>.
+newDescribeIntent ::
+  -- | 'intentId'
+  Prelude.Text ->
+  -- | 'botId'
+  Prelude.Text ->
+  -- | 'botVersion'
+  Prelude.Text ->
+  -- | 'localeId'
+  Prelude.Text ->
+  DescribeIntent
+newDescribeIntent
+  pIntentId_
+  pBotId_
+  pBotVersion_
+  pLocaleId_ =
+    DescribeIntent'
+      { intentId = pIntentId_,
+        botId = pBotId_,
+        botVersion = pBotVersion_,
+        localeId = pLocaleId_
+      }
+
+-- | The identifier of the intent to describe.
+describeIntent_intentId :: Lens.Lens' DescribeIntent Prelude.Text
+describeIntent_intentId = Lens.lens (\DescribeIntent' {intentId} -> intentId) (\s@DescribeIntent' {} a -> s {intentId = a} :: DescribeIntent)
+
+-- | The identifier of the bot associated with the intent.
+describeIntent_botId :: Lens.Lens' DescribeIntent Prelude.Text
+describeIntent_botId = Lens.lens (\DescribeIntent' {botId} -> botId) (\s@DescribeIntent' {} a -> s {botId = a} :: DescribeIntent)
+
+-- | The version of the bot associated with the intent.
+describeIntent_botVersion :: Lens.Lens' DescribeIntent Prelude.Text
+describeIntent_botVersion = Lens.lens (\DescribeIntent' {botVersion} -> botVersion) (\s@DescribeIntent' {} a -> s {botVersion = a} :: DescribeIntent)
+
+-- | The identifier of the language and locale of the intent to describe. The
+-- string must match one of the supported locales. For more information,
+-- see
+-- <https://docs.aws.amazon.com/lexv2/latest/dg/how-languages.html Supported languages>.
+describeIntent_localeId :: Lens.Lens' DescribeIntent Prelude.Text
+describeIntent_localeId = Lens.lens (\DescribeIntent' {localeId} -> localeId) (\s@DescribeIntent' {} a -> s {localeId = a} :: DescribeIntent)
+
+instance Core.AWSRequest DescribeIntent where
+  type
+    AWSResponse DescribeIntent =
+      DescribeIntentResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeIntentResponse'
+            Prelude.<$> (x Data..?> "botId")
+            Prelude.<*> (x Data..?> "botVersion")
+            Prelude.<*> (x Data..?> "creationDateTime")
+            Prelude.<*> (x Data..?> "description")
+            Prelude.<*> (x Data..?> "dialogCodeHook")
+            Prelude.<*> (x Data..?> "fulfillmentCodeHook")
+            Prelude.<*> (x Data..?> "initialResponseSetting")
+            Prelude.<*> (x Data..?> "inputContexts" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "intentClosingSetting")
+            Prelude.<*> (x Data..?> "intentConfirmationSetting")
+            Prelude.<*> (x Data..?> "intentId")
+            Prelude.<*> (x Data..?> "intentName")
+            Prelude.<*> (x Data..?> "kendraConfiguration")
+            Prelude.<*> (x Data..?> "lastUpdatedDateTime")
+            Prelude.<*> (x Data..?> "localeId")
+            Prelude.<*> (x Data..?> "outputContexts" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "parentIntentSignature")
+            Prelude.<*> ( x
+                            Data..?> "sampleUtterances"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (x Data..?> "slotPriorities" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeIntent where
+  hashWithSalt _salt DescribeIntent' {..} =
+    _salt
+      `Prelude.hashWithSalt` intentId
+      `Prelude.hashWithSalt` botId
+      `Prelude.hashWithSalt` botVersion
+      `Prelude.hashWithSalt` localeId
+
+instance Prelude.NFData DescribeIntent where
+  rnf DescribeIntent' {..} =
+    Prelude.rnf intentId
+      `Prelude.seq` Prelude.rnf botId
+      `Prelude.seq` Prelude.rnf botVersion
+      `Prelude.seq` Prelude.rnf localeId
+
+instance Data.ToHeaders DescribeIntent where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath DescribeIntent where
+  toPath DescribeIntent' {..} =
+    Prelude.mconcat
+      [ "/bots/",
+        Data.toBS botId,
+        "/botversions/",
+        Data.toBS botVersion,
+        "/botlocales/",
+        Data.toBS localeId,
+        "/intents/",
+        Data.toBS intentId,
+        "/"
+      ]
+
+instance Data.ToQuery DescribeIntent where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDescribeIntentResponse' smart constructor.
+data DescribeIntentResponse = DescribeIntentResponse'
+  { -- | The identifier of the bot associated with the intent.
+    botId :: Prelude.Maybe Prelude.Text,
+    -- | The version of the bot associated with the intent.
+    botVersion :: Prelude.Maybe Prelude.Text,
+    -- | A timestamp of the date and time that the intent was created.
+    creationDateTime :: Prelude.Maybe Data.POSIX,
+    -- | The description of the intent.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The Lambda function called during each turn of a conversation with the
+    -- intent.
+    dialogCodeHook :: Prelude.Maybe DialogCodeHookSettings,
+    -- | The Lambda function called when the intent is complete and ready for
+    -- fulfillment.
+    fulfillmentCodeHook :: Prelude.Maybe FulfillmentCodeHookSettings,
+    initialResponseSetting :: Prelude.Maybe InitialResponseSetting,
+    -- | A list of contexts that must be active for the intent to be considered
+    -- for sending to the user.
+    inputContexts :: Prelude.Maybe [InputContext],
+    -- | The response that Amazon Lex sends to when the intent is closed.
+    intentClosingSetting :: Prelude.Maybe IntentClosingSetting,
+    -- | Prompts that Amazon Lex sends to the user to confirm completion of an
+    -- intent.
+    intentConfirmationSetting :: Prelude.Maybe IntentConfirmationSetting,
+    -- | The unique identifier assigned to the intent when it was created.
+    intentId :: Prelude.Maybe Prelude.Text,
+    -- | The name specified for the intent.
+    intentName :: Prelude.Maybe Prelude.Text,
+    -- | Configuration information required to use the
+    -- @AMAZON.KendraSearchIntent@ intent.
+    kendraConfiguration :: Prelude.Maybe KendraConfiguration,
+    -- | A timestamp of the date and time that the intent was last updated.
+    lastUpdatedDateTime :: Prelude.Maybe Data.POSIX,
+    -- | The language and locale specified for the intent.
+    localeId :: Prelude.Maybe Prelude.Text,
+    -- | A list of contexts that are activated when the intent is fulfilled.
+    outputContexts :: Prelude.Maybe [OutputContext],
+    -- | The identifier of the built-in intent that this intent is derived from,
+    -- if any.
+    parentIntentSignature :: Prelude.Maybe Prelude.Text,
+    -- | User utterances that trigger this intent.
+    sampleUtterances :: Prelude.Maybe [SampleUtterance],
+    -- | The list that determines the priority that slots should be elicited from
+    -- the user.
+    slotPriorities :: Prelude.Maybe [SlotPriority],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeIntentResponse' 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:
+--
+-- 'botId', 'describeIntentResponse_botId' - The identifier of the bot associated with the intent.
+--
+-- 'botVersion', 'describeIntentResponse_botVersion' - The version of the bot associated with the intent.
+--
+-- 'creationDateTime', 'describeIntentResponse_creationDateTime' - A timestamp of the date and time that the intent was created.
+--
+-- 'description', 'describeIntentResponse_description' - The description of the intent.
+--
+-- 'dialogCodeHook', 'describeIntentResponse_dialogCodeHook' - The Lambda function called during each turn of a conversation with the
+-- intent.
+--
+-- 'fulfillmentCodeHook', 'describeIntentResponse_fulfillmentCodeHook' - The Lambda function called when the intent is complete and ready for
+-- fulfillment.
+--
+-- 'initialResponseSetting', 'describeIntentResponse_initialResponseSetting' -
+--
+-- 'inputContexts', 'describeIntentResponse_inputContexts' - A list of contexts that must be active for the intent to be considered
+-- for sending to the user.
+--
+-- 'intentClosingSetting', 'describeIntentResponse_intentClosingSetting' - The response that Amazon Lex sends to when the intent is closed.
+--
+-- 'intentConfirmationSetting', 'describeIntentResponse_intentConfirmationSetting' - Prompts that Amazon Lex sends to the user to confirm completion of an
+-- intent.
+--
+-- 'intentId', 'describeIntentResponse_intentId' - The unique identifier assigned to the intent when it was created.
+--
+-- 'intentName', 'describeIntentResponse_intentName' - The name specified for the intent.
+--
+-- 'kendraConfiguration', 'describeIntentResponse_kendraConfiguration' - Configuration information required to use the
+-- @AMAZON.KendraSearchIntent@ intent.
+--
+-- 'lastUpdatedDateTime', 'describeIntentResponse_lastUpdatedDateTime' - A timestamp of the date and time that the intent was last updated.
+--
+-- 'localeId', 'describeIntentResponse_localeId' - The language and locale specified for the intent.
+--
+-- 'outputContexts', 'describeIntentResponse_outputContexts' - A list of contexts that are activated when the intent is fulfilled.
+--
+-- 'parentIntentSignature', 'describeIntentResponse_parentIntentSignature' - The identifier of the built-in intent that this intent is derived from,
+-- if any.
+--
+-- 'sampleUtterances', 'describeIntentResponse_sampleUtterances' - User utterances that trigger this intent.
+--
+-- 'slotPriorities', 'describeIntentResponse_slotPriorities' - The list that determines the priority that slots should be elicited from
+-- the user.
+--
+-- 'httpStatus', 'describeIntentResponse_httpStatus' - The response's http status code.
+newDescribeIntentResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeIntentResponse
+newDescribeIntentResponse pHttpStatus_ =
+  DescribeIntentResponse'
+    { botId = Prelude.Nothing,
+      botVersion = Prelude.Nothing,
+      creationDateTime = Prelude.Nothing,
+      description = Prelude.Nothing,
+      dialogCodeHook = Prelude.Nothing,
+      fulfillmentCodeHook = Prelude.Nothing,
+      initialResponseSetting = Prelude.Nothing,
+      inputContexts = Prelude.Nothing,
+      intentClosingSetting = Prelude.Nothing,
+      intentConfirmationSetting = Prelude.Nothing,
+      intentId = Prelude.Nothing,
+      intentName = Prelude.Nothing,
+      kendraConfiguration = Prelude.Nothing,
+      lastUpdatedDateTime = Prelude.Nothing,
+      localeId = Prelude.Nothing,
+      outputContexts = Prelude.Nothing,
+      parentIntentSignature = Prelude.Nothing,
+      sampleUtterances = Prelude.Nothing,
+      slotPriorities = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The identifier of the bot associated with the intent.
+describeIntentResponse_botId :: Lens.Lens' DescribeIntentResponse (Prelude.Maybe Prelude.Text)
+describeIntentResponse_botId = Lens.lens (\DescribeIntentResponse' {botId} -> botId) (\s@DescribeIntentResponse' {} a -> s {botId = a} :: DescribeIntentResponse)
+
+-- | The version of the bot associated with the intent.
+describeIntentResponse_botVersion :: Lens.Lens' DescribeIntentResponse (Prelude.Maybe Prelude.Text)
+describeIntentResponse_botVersion = Lens.lens (\DescribeIntentResponse' {botVersion} -> botVersion) (\s@DescribeIntentResponse' {} a -> s {botVersion = a} :: DescribeIntentResponse)
+
+-- | A timestamp of the date and time that the intent was created.
+describeIntentResponse_creationDateTime :: Lens.Lens' DescribeIntentResponse (Prelude.Maybe Prelude.UTCTime)
+describeIntentResponse_creationDateTime = Lens.lens (\DescribeIntentResponse' {creationDateTime} -> creationDateTime) (\s@DescribeIntentResponse' {} a -> s {creationDateTime = a} :: DescribeIntentResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The description of the intent.
+describeIntentResponse_description :: Lens.Lens' DescribeIntentResponse (Prelude.Maybe Prelude.Text)
+describeIntentResponse_description = Lens.lens (\DescribeIntentResponse' {description} -> description) (\s@DescribeIntentResponse' {} a -> s {description = a} :: DescribeIntentResponse)
+
+-- | The Lambda function called during each turn of a conversation with the
+-- intent.
+describeIntentResponse_dialogCodeHook :: Lens.Lens' DescribeIntentResponse (Prelude.Maybe DialogCodeHookSettings)
+describeIntentResponse_dialogCodeHook = Lens.lens (\DescribeIntentResponse' {dialogCodeHook} -> dialogCodeHook) (\s@DescribeIntentResponse' {} a -> s {dialogCodeHook = a} :: DescribeIntentResponse)
+
+-- | The Lambda function called when the intent is complete and ready for
+-- fulfillment.
+describeIntentResponse_fulfillmentCodeHook :: Lens.Lens' DescribeIntentResponse (Prelude.Maybe FulfillmentCodeHookSettings)
+describeIntentResponse_fulfillmentCodeHook = Lens.lens (\DescribeIntentResponse' {fulfillmentCodeHook} -> fulfillmentCodeHook) (\s@DescribeIntentResponse' {} a -> s {fulfillmentCodeHook = a} :: DescribeIntentResponse)
+
+describeIntentResponse_initialResponseSetting :: Lens.Lens' DescribeIntentResponse (Prelude.Maybe InitialResponseSetting)
+describeIntentResponse_initialResponseSetting = Lens.lens (\DescribeIntentResponse' {initialResponseSetting} -> initialResponseSetting) (\s@DescribeIntentResponse' {} a -> s {initialResponseSetting = a} :: DescribeIntentResponse)
+
+-- | A list of contexts that must be active for the intent to be considered
+-- for sending to the user.
+describeIntentResponse_inputContexts :: Lens.Lens' DescribeIntentResponse (Prelude.Maybe [InputContext])
+describeIntentResponse_inputContexts = Lens.lens (\DescribeIntentResponse' {inputContexts} -> inputContexts) (\s@DescribeIntentResponse' {} a -> s {inputContexts = a} :: DescribeIntentResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response that Amazon Lex sends to when the intent is closed.
+describeIntentResponse_intentClosingSetting :: Lens.Lens' DescribeIntentResponse (Prelude.Maybe IntentClosingSetting)
+describeIntentResponse_intentClosingSetting = Lens.lens (\DescribeIntentResponse' {intentClosingSetting} -> intentClosingSetting) (\s@DescribeIntentResponse' {} a -> s {intentClosingSetting = a} :: DescribeIntentResponse)
+
+-- | Prompts that Amazon Lex sends to the user to confirm completion of an
+-- intent.
+describeIntentResponse_intentConfirmationSetting :: Lens.Lens' DescribeIntentResponse (Prelude.Maybe IntentConfirmationSetting)
+describeIntentResponse_intentConfirmationSetting = Lens.lens (\DescribeIntentResponse' {intentConfirmationSetting} -> intentConfirmationSetting) (\s@DescribeIntentResponse' {} a -> s {intentConfirmationSetting = a} :: DescribeIntentResponse)
+
+-- | The unique identifier assigned to the intent when it was created.
+describeIntentResponse_intentId :: Lens.Lens' DescribeIntentResponse (Prelude.Maybe Prelude.Text)
+describeIntentResponse_intentId = Lens.lens (\DescribeIntentResponse' {intentId} -> intentId) (\s@DescribeIntentResponse' {} a -> s {intentId = a} :: DescribeIntentResponse)
+
+-- | The name specified for the intent.
+describeIntentResponse_intentName :: Lens.Lens' DescribeIntentResponse (Prelude.Maybe Prelude.Text)
+describeIntentResponse_intentName = Lens.lens (\DescribeIntentResponse' {intentName} -> intentName) (\s@DescribeIntentResponse' {} a -> s {intentName = a} :: DescribeIntentResponse)
+
+-- | Configuration information required to use the
+-- @AMAZON.KendraSearchIntent@ intent.
+describeIntentResponse_kendraConfiguration :: Lens.Lens' DescribeIntentResponse (Prelude.Maybe KendraConfiguration)
+describeIntentResponse_kendraConfiguration = Lens.lens (\DescribeIntentResponse' {kendraConfiguration} -> kendraConfiguration) (\s@DescribeIntentResponse' {} a -> s {kendraConfiguration = a} :: DescribeIntentResponse)
+
+-- | A timestamp of the date and time that the intent was last updated.
+describeIntentResponse_lastUpdatedDateTime :: Lens.Lens' DescribeIntentResponse (Prelude.Maybe Prelude.UTCTime)
+describeIntentResponse_lastUpdatedDateTime = Lens.lens (\DescribeIntentResponse' {lastUpdatedDateTime} -> lastUpdatedDateTime) (\s@DescribeIntentResponse' {} a -> s {lastUpdatedDateTime = a} :: DescribeIntentResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The language and locale specified for the intent.
+describeIntentResponse_localeId :: Lens.Lens' DescribeIntentResponse (Prelude.Maybe Prelude.Text)
+describeIntentResponse_localeId = Lens.lens (\DescribeIntentResponse' {localeId} -> localeId) (\s@DescribeIntentResponse' {} a -> s {localeId = a} :: DescribeIntentResponse)
+
+-- | A list of contexts that are activated when the intent is fulfilled.
+describeIntentResponse_outputContexts :: Lens.Lens' DescribeIntentResponse (Prelude.Maybe [OutputContext])
+describeIntentResponse_outputContexts = Lens.lens (\DescribeIntentResponse' {outputContexts} -> outputContexts) (\s@DescribeIntentResponse' {} a -> s {outputContexts = a} :: DescribeIntentResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The identifier of the built-in intent that this intent is derived from,
+-- if any.
+describeIntentResponse_parentIntentSignature :: Lens.Lens' DescribeIntentResponse (Prelude.Maybe Prelude.Text)
+describeIntentResponse_parentIntentSignature = Lens.lens (\DescribeIntentResponse' {parentIntentSignature} -> parentIntentSignature) (\s@DescribeIntentResponse' {} a -> s {parentIntentSignature = a} :: DescribeIntentResponse)
+
+-- | User utterances that trigger this intent.
+describeIntentResponse_sampleUtterances :: Lens.Lens' DescribeIntentResponse (Prelude.Maybe [SampleUtterance])
+describeIntentResponse_sampleUtterances = Lens.lens (\DescribeIntentResponse' {sampleUtterances} -> sampleUtterances) (\s@DescribeIntentResponse' {} a -> s {sampleUtterances = a} :: DescribeIntentResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The list that determines the priority that slots should be elicited from
+-- the user.
+describeIntentResponse_slotPriorities :: Lens.Lens' DescribeIntentResponse (Prelude.Maybe [SlotPriority])
+describeIntentResponse_slotPriorities = Lens.lens (\DescribeIntentResponse' {slotPriorities} -> slotPriorities) (\s@DescribeIntentResponse' {} a -> s {slotPriorities = a} :: DescribeIntentResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+describeIntentResponse_httpStatus :: Lens.Lens' DescribeIntentResponse Prelude.Int
+describeIntentResponse_httpStatus = Lens.lens (\DescribeIntentResponse' {httpStatus} -> httpStatus) (\s@DescribeIntentResponse' {} a -> s {httpStatus = a} :: DescribeIntentResponse)
+
+instance Prelude.NFData DescribeIntentResponse where
+  rnf DescribeIntentResponse' {..} =
+    Prelude.rnf botId
+      `Prelude.seq` Prelude.rnf botVersion
+      `Prelude.seq` Prelude.rnf creationDateTime
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf dialogCodeHook
+      `Prelude.seq` Prelude.rnf fulfillmentCodeHook
+      `Prelude.seq` Prelude.rnf initialResponseSetting
+      `Prelude.seq` Prelude.rnf inputContexts
+      `Prelude.seq` Prelude.rnf intentClosingSetting
+      `Prelude.seq` Prelude.rnf intentConfirmationSetting
+      `Prelude.seq` Prelude.rnf intentId
+      `Prelude.seq` Prelude.rnf intentName
+      `Prelude.seq` Prelude.rnf kendraConfiguration
+      `Prelude.seq` Prelude.rnf lastUpdatedDateTime
+      `Prelude.seq` Prelude.rnf localeId
+      `Prelude.seq` Prelude.rnf outputContexts
+      `Prelude.seq` Prelude.rnf parentIntentSignature
+      `Prelude.seq` Prelude.rnf sampleUtterances
+      `Prelude.seq` Prelude.rnf slotPriorities
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/LexV2Models/DescribeResourcePolicy.hs b/gen/Amazonka/LexV2Models/DescribeResourcePolicy.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/DescribeResourcePolicy.hs
@@ -0,0 +1,214 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.LexV2Models.DescribeResourcePolicy
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Gets the resource policy and policy revision for a bot or bot alias.
+module Amazonka.LexV2Models.DescribeResourcePolicy
+  ( -- * Creating a Request
+    DescribeResourcePolicy (..),
+    newDescribeResourcePolicy,
+
+    -- * Request Lenses
+    describeResourcePolicy_resourceArn,
+
+    -- * Destructuring the Response
+    DescribeResourcePolicyResponse (..),
+    newDescribeResourcePolicyResponse,
+
+    -- * Response Lenses
+    describeResourcePolicyResponse_policy,
+    describeResourcePolicyResponse_resourceArn,
+    describeResourcePolicyResponse_revisionId,
+    describeResourcePolicyResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LexV2Models.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeResourcePolicy' smart constructor.
+data DescribeResourcePolicy = DescribeResourcePolicy'
+  { -- | The Amazon Resource Name (ARN) of the bot or bot alias that the resource
+    -- policy is attached to.
+    resourceArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeResourcePolicy' 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', 'describeResourcePolicy_resourceArn' - The Amazon Resource Name (ARN) of the bot or bot alias that the resource
+-- policy is attached to.
+newDescribeResourcePolicy ::
+  -- | 'resourceArn'
+  Prelude.Text ->
+  DescribeResourcePolicy
+newDescribeResourcePolicy pResourceArn_ =
+  DescribeResourcePolicy'
+    { resourceArn =
+        pResourceArn_
+    }
+
+-- | The Amazon Resource Name (ARN) of the bot or bot alias that the resource
+-- policy is attached to.
+describeResourcePolicy_resourceArn :: Lens.Lens' DescribeResourcePolicy Prelude.Text
+describeResourcePolicy_resourceArn = Lens.lens (\DescribeResourcePolicy' {resourceArn} -> resourceArn) (\s@DescribeResourcePolicy' {} a -> s {resourceArn = a} :: DescribeResourcePolicy)
+
+instance Core.AWSRequest DescribeResourcePolicy where
+  type
+    AWSResponse DescribeResourcePolicy =
+      DescribeResourcePolicyResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeResourcePolicyResponse'
+            Prelude.<$> (x Data..?> "policy")
+            Prelude.<*> (x Data..?> "resourceArn")
+            Prelude.<*> (x Data..?> "revisionId")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeResourcePolicy where
+  hashWithSalt _salt DescribeResourcePolicy' {..} =
+    _salt `Prelude.hashWithSalt` resourceArn
+
+instance Prelude.NFData DescribeResourcePolicy where
+  rnf DescribeResourcePolicy' {..} =
+    Prelude.rnf resourceArn
+
+instance Data.ToHeaders DescribeResourcePolicy where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath DescribeResourcePolicy where
+  toPath DescribeResourcePolicy' {..} =
+    Prelude.mconcat
+      ["/policy/", Data.toBS resourceArn, "/"]
+
+instance Data.ToQuery DescribeResourcePolicy where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDescribeResourcePolicyResponse' smart constructor.
+data DescribeResourcePolicyResponse = DescribeResourcePolicyResponse'
+  { -- | The JSON structure that contains the resource policy. For more
+    -- information about the contents of a JSON policy document, see
+    -- <https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies.html IAM JSON policy reference>
+    -- .
+    policy :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the bot or bot alias that the resource
+    -- policy is attached to.
+    resourceArn :: Prelude.Maybe Prelude.Text,
+    -- | The current revision of the resource policy. Use the revision ID to make
+    -- sure that you are updating the most current version of a resource policy
+    -- when you add a policy statement to a resource, delete a resource, or
+    -- update a resource.
+    revisionId :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeResourcePolicyResponse' 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:
+--
+-- 'policy', 'describeResourcePolicyResponse_policy' - The JSON structure that contains the resource policy. For more
+-- information about the contents of a JSON policy document, see
+-- <https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies.html IAM JSON policy reference>
+-- .
+--
+-- 'resourceArn', 'describeResourcePolicyResponse_resourceArn' - The Amazon Resource Name (ARN) of the bot or bot alias that the resource
+-- policy is attached to.
+--
+-- 'revisionId', 'describeResourcePolicyResponse_revisionId' - The current revision of the resource policy. Use the revision ID to make
+-- sure that you are updating the most current version of a resource policy
+-- when you add a policy statement to a resource, delete a resource, or
+-- update a resource.
+--
+-- 'httpStatus', 'describeResourcePolicyResponse_httpStatus' - The response's http status code.
+newDescribeResourcePolicyResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeResourcePolicyResponse
+newDescribeResourcePolicyResponse pHttpStatus_ =
+  DescribeResourcePolicyResponse'
+    { policy =
+        Prelude.Nothing,
+      resourceArn = Prelude.Nothing,
+      revisionId = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The JSON structure that contains the resource policy. For more
+-- information about the contents of a JSON policy document, see
+-- <https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies.html IAM JSON policy reference>
+-- .
+describeResourcePolicyResponse_policy :: Lens.Lens' DescribeResourcePolicyResponse (Prelude.Maybe Prelude.Text)
+describeResourcePolicyResponse_policy = Lens.lens (\DescribeResourcePolicyResponse' {policy} -> policy) (\s@DescribeResourcePolicyResponse' {} a -> s {policy = a} :: DescribeResourcePolicyResponse)
+
+-- | The Amazon Resource Name (ARN) of the bot or bot alias that the resource
+-- policy is attached to.
+describeResourcePolicyResponse_resourceArn :: Lens.Lens' DescribeResourcePolicyResponse (Prelude.Maybe Prelude.Text)
+describeResourcePolicyResponse_resourceArn = Lens.lens (\DescribeResourcePolicyResponse' {resourceArn} -> resourceArn) (\s@DescribeResourcePolicyResponse' {} a -> s {resourceArn = a} :: DescribeResourcePolicyResponse)
+
+-- | The current revision of the resource policy. Use the revision ID to make
+-- sure that you are updating the most current version of a resource policy
+-- when you add a policy statement to a resource, delete a resource, or
+-- update a resource.
+describeResourcePolicyResponse_revisionId :: Lens.Lens' DescribeResourcePolicyResponse (Prelude.Maybe Prelude.Text)
+describeResourcePolicyResponse_revisionId = Lens.lens (\DescribeResourcePolicyResponse' {revisionId} -> revisionId) (\s@DescribeResourcePolicyResponse' {} a -> s {revisionId = a} :: DescribeResourcePolicyResponse)
+
+-- | The response's http status code.
+describeResourcePolicyResponse_httpStatus :: Lens.Lens' DescribeResourcePolicyResponse Prelude.Int
+describeResourcePolicyResponse_httpStatus = Lens.lens (\DescribeResourcePolicyResponse' {httpStatus} -> httpStatus) (\s@DescribeResourcePolicyResponse' {} a -> s {httpStatus = a} :: DescribeResourcePolicyResponse)
+
+instance
+  Prelude.NFData
+    DescribeResourcePolicyResponse
+  where
+  rnf DescribeResourcePolicyResponse' {..} =
+    Prelude.rnf policy
+      `Prelude.seq` Prelude.rnf resourceArn
+      `Prelude.seq` Prelude.rnf revisionId
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/LexV2Models/DescribeSlot.hs b/gen/Amazonka/LexV2Models/DescribeSlot.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/DescribeSlot.hs
@@ -0,0 +1,415 @@
+{-# 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.LexV2Models.DescribeSlot
+-- 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 metadata information about a slot.
+module Amazonka.LexV2Models.DescribeSlot
+  ( -- * Creating a Request
+    DescribeSlot (..),
+    newDescribeSlot,
+
+    -- * Request Lenses
+    describeSlot_slotId,
+    describeSlot_botId,
+    describeSlot_botVersion,
+    describeSlot_localeId,
+    describeSlot_intentId,
+
+    -- * Destructuring the Response
+    DescribeSlotResponse (..),
+    newDescribeSlotResponse,
+
+    -- * Response Lenses
+    describeSlotResponse_botId,
+    describeSlotResponse_botVersion,
+    describeSlotResponse_creationDateTime,
+    describeSlotResponse_description,
+    describeSlotResponse_intentId,
+    describeSlotResponse_lastUpdatedDateTime,
+    describeSlotResponse_localeId,
+    describeSlotResponse_multipleValuesSetting,
+    describeSlotResponse_obfuscationSetting,
+    describeSlotResponse_slotId,
+    describeSlotResponse_slotName,
+    describeSlotResponse_slotTypeId,
+    describeSlotResponse_subSlotSetting,
+    describeSlotResponse_valueElicitationSetting,
+    describeSlotResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LexV2Models.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeSlot' smart constructor.
+data DescribeSlot = DescribeSlot'
+  { -- | The unique identifier for the slot.
+    slotId :: Prelude.Text,
+    -- | The identifier of the bot associated with the slot.
+    botId :: Prelude.Text,
+    -- | The version of the bot associated with the slot.
+    botVersion :: Prelude.Text,
+    -- | The identifier of the language and locale of the slot to describe. The
+    -- string must match one of the supported locales. For more information,
+    -- see
+    -- <https://docs.aws.amazon.com/lexv2/latest/dg/how-languages.html Supported languages>.
+    localeId :: Prelude.Text,
+    -- | The identifier of the intent that contains the slot.
+    intentId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeSlot' 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:
+--
+-- 'slotId', 'describeSlot_slotId' - The unique identifier for the slot.
+--
+-- 'botId', 'describeSlot_botId' - The identifier of the bot associated with the slot.
+--
+-- 'botVersion', 'describeSlot_botVersion' - The version of the bot associated with the slot.
+--
+-- 'localeId', 'describeSlot_localeId' - The identifier of the language and locale of the slot to describe. The
+-- string must match one of the supported locales. For more information,
+-- see
+-- <https://docs.aws.amazon.com/lexv2/latest/dg/how-languages.html Supported languages>.
+--
+-- 'intentId', 'describeSlot_intentId' - The identifier of the intent that contains the slot.
+newDescribeSlot ::
+  -- | 'slotId'
+  Prelude.Text ->
+  -- | 'botId'
+  Prelude.Text ->
+  -- | 'botVersion'
+  Prelude.Text ->
+  -- | 'localeId'
+  Prelude.Text ->
+  -- | 'intentId'
+  Prelude.Text ->
+  DescribeSlot
+newDescribeSlot
+  pSlotId_
+  pBotId_
+  pBotVersion_
+  pLocaleId_
+  pIntentId_ =
+    DescribeSlot'
+      { slotId = pSlotId_,
+        botId = pBotId_,
+        botVersion = pBotVersion_,
+        localeId = pLocaleId_,
+        intentId = pIntentId_
+      }
+
+-- | The unique identifier for the slot.
+describeSlot_slotId :: Lens.Lens' DescribeSlot Prelude.Text
+describeSlot_slotId = Lens.lens (\DescribeSlot' {slotId} -> slotId) (\s@DescribeSlot' {} a -> s {slotId = a} :: DescribeSlot)
+
+-- | The identifier of the bot associated with the slot.
+describeSlot_botId :: Lens.Lens' DescribeSlot Prelude.Text
+describeSlot_botId = Lens.lens (\DescribeSlot' {botId} -> botId) (\s@DescribeSlot' {} a -> s {botId = a} :: DescribeSlot)
+
+-- | The version of the bot associated with the slot.
+describeSlot_botVersion :: Lens.Lens' DescribeSlot Prelude.Text
+describeSlot_botVersion = Lens.lens (\DescribeSlot' {botVersion} -> botVersion) (\s@DescribeSlot' {} a -> s {botVersion = a} :: DescribeSlot)
+
+-- | The identifier of the language and locale of the slot to describe. The
+-- string must match one of the supported locales. For more information,
+-- see
+-- <https://docs.aws.amazon.com/lexv2/latest/dg/how-languages.html Supported languages>.
+describeSlot_localeId :: Lens.Lens' DescribeSlot Prelude.Text
+describeSlot_localeId = Lens.lens (\DescribeSlot' {localeId} -> localeId) (\s@DescribeSlot' {} a -> s {localeId = a} :: DescribeSlot)
+
+-- | The identifier of the intent that contains the slot.
+describeSlot_intentId :: Lens.Lens' DescribeSlot Prelude.Text
+describeSlot_intentId = Lens.lens (\DescribeSlot' {intentId} -> intentId) (\s@DescribeSlot' {} a -> s {intentId = a} :: DescribeSlot)
+
+instance Core.AWSRequest DescribeSlot where
+  type AWSResponse DescribeSlot = DescribeSlotResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeSlotResponse'
+            Prelude.<$> (x Data..?> "botId")
+            Prelude.<*> (x Data..?> "botVersion")
+            Prelude.<*> (x Data..?> "creationDateTime")
+            Prelude.<*> (x Data..?> "description")
+            Prelude.<*> (x Data..?> "intentId")
+            Prelude.<*> (x Data..?> "lastUpdatedDateTime")
+            Prelude.<*> (x Data..?> "localeId")
+            Prelude.<*> (x Data..?> "multipleValuesSetting")
+            Prelude.<*> (x Data..?> "obfuscationSetting")
+            Prelude.<*> (x Data..?> "slotId")
+            Prelude.<*> (x Data..?> "slotName")
+            Prelude.<*> (x Data..?> "slotTypeId")
+            Prelude.<*> (x Data..?> "subSlotSetting")
+            Prelude.<*> (x Data..?> "valueElicitationSetting")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeSlot where
+  hashWithSalt _salt DescribeSlot' {..} =
+    _salt
+      `Prelude.hashWithSalt` slotId
+      `Prelude.hashWithSalt` botId
+      `Prelude.hashWithSalt` botVersion
+      `Prelude.hashWithSalt` localeId
+      `Prelude.hashWithSalt` intentId
+
+instance Prelude.NFData DescribeSlot where
+  rnf DescribeSlot' {..} =
+    Prelude.rnf slotId
+      `Prelude.seq` Prelude.rnf botId
+      `Prelude.seq` Prelude.rnf botVersion
+      `Prelude.seq` Prelude.rnf localeId
+      `Prelude.seq` Prelude.rnf intentId
+
+instance Data.ToHeaders DescribeSlot where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath DescribeSlot where
+  toPath DescribeSlot' {..} =
+    Prelude.mconcat
+      [ "/bots/",
+        Data.toBS botId,
+        "/botversions/",
+        Data.toBS botVersion,
+        "/botlocales/",
+        Data.toBS localeId,
+        "/intents/",
+        Data.toBS intentId,
+        "/slots/",
+        Data.toBS slotId,
+        "/"
+      ]
+
+instance Data.ToQuery DescribeSlot where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDescribeSlotResponse' smart constructor.
+data DescribeSlotResponse = DescribeSlotResponse'
+  { -- | The identifier of the bot associated with the slot.
+    botId :: Prelude.Maybe Prelude.Text,
+    -- | The version of the bot associated with the slot.
+    botVersion :: Prelude.Maybe Prelude.Text,
+    -- | A timestamp of the date and time that the slot was created.
+    creationDateTime :: Prelude.Maybe Data.POSIX,
+    -- | The description specified for the slot.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The identifier of the intent associated with the slot.
+    intentId :: Prelude.Maybe Prelude.Text,
+    -- | A timestamp of the date and time that the slot was last updated.
+    lastUpdatedDateTime :: Prelude.Maybe Data.POSIX,
+    -- | The language and locale specified for the slot.
+    localeId :: Prelude.Maybe Prelude.Text,
+    -- | Indicates whether the slot accepts multiple values in a single
+    -- utterance.
+    --
+    -- If the @multipleValuesSetting@ is not set, the default value is @false@.
+    multipleValuesSetting :: Prelude.Maybe MultipleValuesSetting,
+    -- | Whether slot values are shown in Amazon CloudWatch logs. If the value is
+    -- @None@, the actual value of the slot is shown in logs.
+    obfuscationSetting :: Prelude.Maybe ObfuscationSetting,
+    -- | The unique identifier generated for the slot.
+    slotId :: Prelude.Maybe Prelude.Text,
+    -- | The name specified for the slot.
+    slotName :: Prelude.Maybe Prelude.Text,
+    -- | The identifier of the slot type that determines the values entered into
+    -- the slot.
+    slotTypeId :: Prelude.Maybe Prelude.Text,
+    -- | Specifications for the constituent sub slots and the expression for the
+    -- composite slot.
+    subSlotSetting :: Prelude.Maybe SubSlotSetting,
+    -- | Prompts that Amazon Lex uses to elicit a value for the slot.
+    valueElicitationSetting :: Prelude.Maybe SlotValueElicitationSetting,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeSlotResponse' 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:
+--
+-- 'botId', 'describeSlotResponse_botId' - The identifier of the bot associated with the slot.
+--
+-- 'botVersion', 'describeSlotResponse_botVersion' - The version of the bot associated with the slot.
+--
+-- 'creationDateTime', 'describeSlotResponse_creationDateTime' - A timestamp of the date and time that the slot was created.
+--
+-- 'description', 'describeSlotResponse_description' - The description specified for the slot.
+--
+-- 'intentId', 'describeSlotResponse_intentId' - The identifier of the intent associated with the slot.
+--
+-- 'lastUpdatedDateTime', 'describeSlotResponse_lastUpdatedDateTime' - A timestamp of the date and time that the slot was last updated.
+--
+-- 'localeId', 'describeSlotResponse_localeId' - The language and locale specified for the slot.
+--
+-- 'multipleValuesSetting', 'describeSlotResponse_multipleValuesSetting' - Indicates whether the slot accepts multiple values in a single
+-- utterance.
+--
+-- If the @multipleValuesSetting@ is not set, the default value is @false@.
+--
+-- 'obfuscationSetting', 'describeSlotResponse_obfuscationSetting' - Whether slot values are shown in Amazon CloudWatch logs. If the value is
+-- @None@, the actual value of the slot is shown in logs.
+--
+-- 'slotId', 'describeSlotResponse_slotId' - The unique identifier generated for the slot.
+--
+-- 'slotName', 'describeSlotResponse_slotName' - The name specified for the slot.
+--
+-- 'slotTypeId', 'describeSlotResponse_slotTypeId' - The identifier of the slot type that determines the values entered into
+-- the slot.
+--
+-- 'subSlotSetting', 'describeSlotResponse_subSlotSetting' - Specifications for the constituent sub slots and the expression for the
+-- composite slot.
+--
+-- 'valueElicitationSetting', 'describeSlotResponse_valueElicitationSetting' - Prompts that Amazon Lex uses to elicit a value for the slot.
+--
+-- 'httpStatus', 'describeSlotResponse_httpStatus' - The response's http status code.
+newDescribeSlotResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeSlotResponse
+newDescribeSlotResponse pHttpStatus_ =
+  DescribeSlotResponse'
+    { botId = Prelude.Nothing,
+      botVersion = Prelude.Nothing,
+      creationDateTime = Prelude.Nothing,
+      description = Prelude.Nothing,
+      intentId = Prelude.Nothing,
+      lastUpdatedDateTime = Prelude.Nothing,
+      localeId = Prelude.Nothing,
+      multipleValuesSetting = Prelude.Nothing,
+      obfuscationSetting = Prelude.Nothing,
+      slotId = Prelude.Nothing,
+      slotName = Prelude.Nothing,
+      slotTypeId = Prelude.Nothing,
+      subSlotSetting = Prelude.Nothing,
+      valueElicitationSetting = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The identifier of the bot associated with the slot.
+describeSlotResponse_botId :: Lens.Lens' DescribeSlotResponse (Prelude.Maybe Prelude.Text)
+describeSlotResponse_botId = Lens.lens (\DescribeSlotResponse' {botId} -> botId) (\s@DescribeSlotResponse' {} a -> s {botId = a} :: DescribeSlotResponse)
+
+-- | The version of the bot associated with the slot.
+describeSlotResponse_botVersion :: Lens.Lens' DescribeSlotResponse (Prelude.Maybe Prelude.Text)
+describeSlotResponse_botVersion = Lens.lens (\DescribeSlotResponse' {botVersion} -> botVersion) (\s@DescribeSlotResponse' {} a -> s {botVersion = a} :: DescribeSlotResponse)
+
+-- | A timestamp of the date and time that the slot was created.
+describeSlotResponse_creationDateTime :: Lens.Lens' DescribeSlotResponse (Prelude.Maybe Prelude.UTCTime)
+describeSlotResponse_creationDateTime = Lens.lens (\DescribeSlotResponse' {creationDateTime} -> creationDateTime) (\s@DescribeSlotResponse' {} a -> s {creationDateTime = a} :: DescribeSlotResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The description specified for the slot.
+describeSlotResponse_description :: Lens.Lens' DescribeSlotResponse (Prelude.Maybe Prelude.Text)
+describeSlotResponse_description = Lens.lens (\DescribeSlotResponse' {description} -> description) (\s@DescribeSlotResponse' {} a -> s {description = a} :: DescribeSlotResponse)
+
+-- | The identifier of the intent associated with the slot.
+describeSlotResponse_intentId :: Lens.Lens' DescribeSlotResponse (Prelude.Maybe Prelude.Text)
+describeSlotResponse_intentId = Lens.lens (\DescribeSlotResponse' {intentId} -> intentId) (\s@DescribeSlotResponse' {} a -> s {intentId = a} :: DescribeSlotResponse)
+
+-- | A timestamp of the date and time that the slot was last updated.
+describeSlotResponse_lastUpdatedDateTime :: Lens.Lens' DescribeSlotResponse (Prelude.Maybe Prelude.UTCTime)
+describeSlotResponse_lastUpdatedDateTime = Lens.lens (\DescribeSlotResponse' {lastUpdatedDateTime} -> lastUpdatedDateTime) (\s@DescribeSlotResponse' {} a -> s {lastUpdatedDateTime = a} :: DescribeSlotResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The language and locale specified for the slot.
+describeSlotResponse_localeId :: Lens.Lens' DescribeSlotResponse (Prelude.Maybe Prelude.Text)
+describeSlotResponse_localeId = Lens.lens (\DescribeSlotResponse' {localeId} -> localeId) (\s@DescribeSlotResponse' {} a -> s {localeId = a} :: DescribeSlotResponse)
+
+-- | Indicates whether the slot accepts multiple values in a single
+-- utterance.
+--
+-- If the @multipleValuesSetting@ is not set, the default value is @false@.
+describeSlotResponse_multipleValuesSetting :: Lens.Lens' DescribeSlotResponse (Prelude.Maybe MultipleValuesSetting)
+describeSlotResponse_multipleValuesSetting = Lens.lens (\DescribeSlotResponse' {multipleValuesSetting} -> multipleValuesSetting) (\s@DescribeSlotResponse' {} a -> s {multipleValuesSetting = a} :: DescribeSlotResponse)
+
+-- | Whether slot values are shown in Amazon CloudWatch logs. If the value is
+-- @None@, the actual value of the slot is shown in logs.
+describeSlotResponse_obfuscationSetting :: Lens.Lens' DescribeSlotResponse (Prelude.Maybe ObfuscationSetting)
+describeSlotResponse_obfuscationSetting = Lens.lens (\DescribeSlotResponse' {obfuscationSetting} -> obfuscationSetting) (\s@DescribeSlotResponse' {} a -> s {obfuscationSetting = a} :: DescribeSlotResponse)
+
+-- | The unique identifier generated for the slot.
+describeSlotResponse_slotId :: Lens.Lens' DescribeSlotResponse (Prelude.Maybe Prelude.Text)
+describeSlotResponse_slotId = Lens.lens (\DescribeSlotResponse' {slotId} -> slotId) (\s@DescribeSlotResponse' {} a -> s {slotId = a} :: DescribeSlotResponse)
+
+-- | The name specified for the slot.
+describeSlotResponse_slotName :: Lens.Lens' DescribeSlotResponse (Prelude.Maybe Prelude.Text)
+describeSlotResponse_slotName = Lens.lens (\DescribeSlotResponse' {slotName} -> slotName) (\s@DescribeSlotResponse' {} a -> s {slotName = a} :: DescribeSlotResponse)
+
+-- | The identifier of the slot type that determines the values entered into
+-- the slot.
+describeSlotResponse_slotTypeId :: Lens.Lens' DescribeSlotResponse (Prelude.Maybe Prelude.Text)
+describeSlotResponse_slotTypeId = Lens.lens (\DescribeSlotResponse' {slotTypeId} -> slotTypeId) (\s@DescribeSlotResponse' {} a -> s {slotTypeId = a} :: DescribeSlotResponse)
+
+-- | Specifications for the constituent sub slots and the expression for the
+-- composite slot.
+describeSlotResponse_subSlotSetting :: Lens.Lens' DescribeSlotResponse (Prelude.Maybe SubSlotSetting)
+describeSlotResponse_subSlotSetting = Lens.lens (\DescribeSlotResponse' {subSlotSetting} -> subSlotSetting) (\s@DescribeSlotResponse' {} a -> s {subSlotSetting = a} :: DescribeSlotResponse)
+
+-- | Prompts that Amazon Lex uses to elicit a value for the slot.
+describeSlotResponse_valueElicitationSetting :: Lens.Lens' DescribeSlotResponse (Prelude.Maybe SlotValueElicitationSetting)
+describeSlotResponse_valueElicitationSetting = Lens.lens (\DescribeSlotResponse' {valueElicitationSetting} -> valueElicitationSetting) (\s@DescribeSlotResponse' {} a -> s {valueElicitationSetting = a} :: DescribeSlotResponse)
+
+-- | The response's http status code.
+describeSlotResponse_httpStatus :: Lens.Lens' DescribeSlotResponse Prelude.Int
+describeSlotResponse_httpStatus = Lens.lens (\DescribeSlotResponse' {httpStatus} -> httpStatus) (\s@DescribeSlotResponse' {} a -> s {httpStatus = a} :: DescribeSlotResponse)
+
+instance Prelude.NFData DescribeSlotResponse where
+  rnf DescribeSlotResponse' {..} =
+    Prelude.rnf botId
+      `Prelude.seq` Prelude.rnf botVersion
+      `Prelude.seq` Prelude.rnf creationDateTime
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf intentId
+      `Prelude.seq` Prelude.rnf lastUpdatedDateTime
+      `Prelude.seq` Prelude.rnf localeId
+      `Prelude.seq` Prelude.rnf multipleValuesSetting
+      `Prelude.seq` Prelude.rnf obfuscationSetting
+      `Prelude.seq` Prelude.rnf slotId
+      `Prelude.seq` Prelude.rnf slotName
+      `Prelude.seq` Prelude.rnf slotTypeId
+      `Prelude.seq` Prelude.rnf subSlotSetting
+      `Prelude.seq` Prelude.rnf valueElicitationSetting
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/LexV2Models/DescribeSlotType.hs b/gen/Amazonka/LexV2Models/DescribeSlotType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/DescribeSlotType.hs
@@ -0,0 +1,375 @@
+{-# 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.LexV2Models.DescribeSlotType
+-- 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 metadata information about a slot type.
+module Amazonka.LexV2Models.DescribeSlotType
+  ( -- * Creating a Request
+    DescribeSlotType (..),
+    newDescribeSlotType,
+
+    -- * Request Lenses
+    describeSlotType_slotTypeId,
+    describeSlotType_botId,
+    describeSlotType_botVersion,
+    describeSlotType_localeId,
+
+    -- * Destructuring the Response
+    DescribeSlotTypeResponse (..),
+    newDescribeSlotTypeResponse,
+
+    -- * Response Lenses
+    describeSlotTypeResponse_botId,
+    describeSlotTypeResponse_botVersion,
+    describeSlotTypeResponse_compositeSlotTypeSetting,
+    describeSlotTypeResponse_creationDateTime,
+    describeSlotTypeResponse_description,
+    describeSlotTypeResponse_externalSourceSetting,
+    describeSlotTypeResponse_lastUpdatedDateTime,
+    describeSlotTypeResponse_localeId,
+    describeSlotTypeResponse_parentSlotTypeSignature,
+    describeSlotTypeResponse_slotTypeId,
+    describeSlotTypeResponse_slotTypeName,
+    describeSlotTypeResponse_slotTypeValues,
+    describeSlotTypeResponse_valueSelectionSetting,
+    describeSlotTypeResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LexV2Models.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeSlotType' smart constructor.
+data DescribeSlotType = DescribeSlotType'
+  { -- | The identifier of the slot type.
+    slotTypeId :: Prelude.Text,
+    -- | The identifier of the bot associated with the slot type.
+    botId :: Prelude.Text,
+    -- | The version of the bot associated with the slot type.
+    botVersion :: Prelude.Text,
+    -- | The identifier of the language and locale of the slot type to describe.
+    -- The string must match one of the supported locales. For more
+    -- information, see
+    -- <https://docs.aws.amazon.com/lexv2/latest/dg/how-languages.html Supported languages>.
+    localeId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeSlotType' 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:
+--
+-- 'slotTypeId', 'describeSlotType_slotTypeId' - The identifier of the slot type.
+--
+-- 'botId', 'describeSlotType_botId' - The identifier of the bot associated with the slot type.
+--
+-- 'botVersion', 'describeSlotType_botVersion' - The version of the bot associated with the slot type.
+--
+-- 'localeId', 'describeSlotType_localeId' - The identifier of the language and locale of the slot type to describe.
+-- The string must match one of the supported locales. For more
+-- information, see
+-- <https://docs.aws.amazon.com/lexv2/latest/dg/how-languages.html Supported languages>.
+newDescribeSlotType ::
+  -- | 'slotTypeId'
+  Prelude.Text ->
+  -- | 'botId'
+  Prelude.Text ->
+  -- | 'botVersion'
+  Prelude.Text ->
+  -- | 'localeId'
+  Prelude.Text ->
+  DescribeSlotType
+newDescribeSlotType
+  pSlotTypeId_
+  pBotId_
+  pBotVersion_
+  pLocaleId_ =
+    DescribeSlotType'
+      { slotTypeId = pSlotTypeId_,
+        botId = pBotId_,
+        botVersion = pBotVersion_,
+        localeId = pLocaleId_
+      }
+
+-- | The identifier of the slot type.
+describeSlotType_slotTypeId :: Lens.Lens' DescribeSlotType Prelude.Text
+describeSlotType_slotTypeId = Lens.lens (\DescribeSlotType' {slotTypeId} -> slotTypeId) (\s@DescribeSlotType' {} a -> s {slotTypeId = a} :: DescribeSlotType)
+
+-- | The identifier of the bot associated with the slot type.
+describeSlotType_botId :: Lens.Lens' DescribeSlotType Prelude.Text
+describeSlotType_botId = Lens.lens (\DescribeSlotType' {botId} -> botId) (\s@DescribeSlotType' {} a -> s {botId = a} :: DescribeSlotType)
+
+-- | The version of the bot associated with the slot type.
+describeSlotType_botVersion :: Lens.Lens' DescribeSlotType Prelude.Text
+describeSlotType_botVersion = Lens.lens (\DescribeSlotType' {botVersion} -> botVersion) (\s@DescribeSlotType' {} a -> s {botVersion = a} :: DescribeSlotType)
+
+-- | The identifier of the language and locale of the slot type to describe.
+-- The string must match one of the supported locales. For more
+-- information, see
+-- <https://docs.aws.amazon.com/lexv2/latest/dg/how-languages.html Supported languages>.
+describeSlotType_localeId :: Lens.Lens' DescribeSlotType Prelude.Text
+describeSlotType_localeId = Lens.lens (\DescribeSlotType' {localeId} -> localeId) (\s@DescribeSlotType' {} a -> s {localeId = a} :: DescribeSlotType)
+
+instance Core.AWSRequest DescribeSlotType where
+  type
+    AWSResponse DescribeSlotType =
+      DescribeSlotTypeResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeSlotTypeResponse'
+            Prelude.<$> (x Data..?> "botId")
+            Prelude.<*> (x Data..?> "botVersion")
+            Prelude.<*> (x Data..?> "compositeSlotTypeSetting")
+            Prelude.<*> (x Data..?> "creationDateTime")
+            Prelude.<*> (x Data..?> "description")
+            Prelude.<*> (x Data..?> "externalSourceSetting")
+            Prelude.<*> (x Data..?> "lastUpdatedDateTime")
+            Prelude.<*> (x Data..?> "localeId")
+            Prelude.<*> (x Data..?> "parentSlotTypeSignature")
+            Prelude.<*> (x Data..?> "slotTypeId")
+            Prelude.<*> (x Data..?> "slotTypeName")
+            Prelude.<*> (x Data..?> "slotTypeValues")
+            Prelude.<*> (x Data..?> "valueSelectionSetting")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeSlotType where
+  hashWithSalt _salt DescribeSlotType' {..} =
+    _salt
+      `Prelude.hashWithSalt` slotTypeId
+      `Prelude.hashWithSalt` botId
+      `Prelude.hashWithSalt` botVersion
+      `Prelude.hashWithSalt` localeId
+
+instance Prelude.NFData DescribeSlotType where
+  rnf DescribeSlotType' {..} =
+    Prelude.rnf slotTypeId
+      `Prelude.seq` Prelude.rnf botId
+      `Prelude.seq` Prelude.rnf botVersion
+      `Prelude.seq` Prelude.rnf localeId
+
+instance Data.ToHeaders DescribeSlotType where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath DescribeSlotType where
+  toPath DescribeSlotType' {..} =
+    Prelude.mconcat
+      [ "/bots/",
+        Data.toBS botId,
+        "/botversions/",
+        Data.toBS botVersion,
+        "/botlocales/",
+        Data.toBS localeId,
+        "/slottypes/",
+        Data.toBS slotTypeId,
+        "/"
+      ]
+
+instance Data.ToQuery DescribeSlotType where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDescribeSlotTypeResponse' smart constructor.
+data DescribeSlotTypeResponse = DescribeSlotTypeResponse'
+  { -- | The identifier of the bot associated with the slot type.
+    botId :: Prelude.Maybe Prelude.Text,
+    -- | The version of the bot associated with the slot type.
+    botVersion :: Prelude.Maybe Prelude.Text,
+    -- | Specifications for a composite slot type.
+    compositeSlotTypeSetting :: Prelude.Maybe CompositeSlotTypeSetting,
+    -- | A timestamp of the date and time that the slot type was created.
+    creationDateTime :: Prelude.Maybe Data.POSIX,
+    -- | The description specified for the slot type.
+    description :: Prelude.Maybe Prelude.Text,
+    externalSourceSetting :: Prelude.Maybe ExternalSourceSetting,
+    -- | A timestamp of the date and time that the slot type was last updated.
+    lastUpdatedDateTime :: Prelude.Maybe Data.POSIX,
+    -- | The language and locale specified for the slot type.
+    localeId :: Prelude.Maybe Prelude.Text,
+    -- | The built in slot type used as a parent to this slot type.
+    parentSlotTypeSignature :: Prelude.Maybe Prelude.Text,
+    -- | The unique identifier for the slot type.
+    slotTypeId :: Prelude.Maybe Prelude.Text,
+    -- | The name specified for the slot type.
+    slotTypeName :: Prelude.Maybe Prelude.Text,
+    -- | The values that the slot type can take. Includes any synonyms for the
+    -- slot type values.
+    slotTypeValues :: Prelude.Maybe (Prelude.NonEmpty SlotTypeValue),
+    -- | The strategy that Amazon Lex uses to choose a value from a list of
+    -- possible values.
+    valueSelectionSetting :: Prelude.Maybe SlotValueSelectionSetting,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeSlotTypeResponse' 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:
+--
+-- 'botId', 'describeSlotTypeResponse_botId' - The identifier of the bot associated with the slot type.
+--
+-- 'botVersion', 'describeSlotTypeResponse_botVersion' - The version of the bot associated with the slot type.
+--
+-- 'compositeSlotTypeSetting', 'describeSlotTypeResponse_compositeSlotTypeSetting' - Specifications for a composite slot type.
+--
+-- 'creationDateTime', 'describeSlotTypeResponse_creationDateTime' - A timestamp of the date and time that the slot type was created.
+--
+-- 'description', 'describeSlotTypeResponse_description' - The description specified for the slot type.
+--
+-- 'externalSourceSetting', 'describeSlotTypeResponse_externalSourceSetting' - Undocumented member.
+--
+-- 'lastUpdatedDateTime', 'describeSlotTypeResponse_lastUpdatedDateTime' - A timestamp of the date and time that the slot type was last updated.
+--
+-- 'localeId', 'describeSlotTypeResponse_localeId' - The language and locale specified for the slot type.
+--
+-- 'parentSlotTypeSignature', 'describeSlotTypeResponse_parentSlotTypeSignature' - The built in slot type used as a parent to this slot type.
+--
+-- 'slotTypeId', 'describeSlotTypeResponse_slotTypeId' - The unique identifier for the slot type.
+--
+-- 'slotTypeName', 'describeSlotTypeResponse_slotTypeName' - The name specified for the slot type.
+--
+-- 'slotTypeValues', 'describeSlotTypeResponse_slotTypeValues' - The values that the slot type can take. Includes any synonyms for the
+-- slot type values.
+--
+-- 'valueSelectionSetting', 'describeSlotTypeResponse_valueSelectionSetting' - The strategy that Amazon Lex uses to choose a value from a list of
+-- possible values.
+--
+-- 'httpStatus', 'describeSlotTypeResponse_httpStatus' - The response's http status code.
+newDescribeSlotTypeResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeSlotTypeResponse
+newDescribeSlotTypeResponse pHttpStatus_ =
+  DescribeSlotTypeResponse'
+    { botId = Prelude.Nothing,
+      botVersion = Prelude.Nothing,
+      compositeSlotTypeSetting = Prelude.Nothing,
+      creationDateTime = Prelude.Nothing,
+      description = Prelude.Nothing,
+      externalSourceSetting = Prelude.Nothing,
+      lastUpdatedDateTime = Prelude.Nothing,
+      localeId = Prelude.Nothing,
+      parentSlotTypeSignature = Prelude.Nothing,
+      slotTypeId = Prelude.Nothing,
+      slotTypeName = Prelude.Nothing,
+      slotTypeValues = Prelude.Nothing,
+      valueSelectionSetting = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The identifier of the bot associated with the slot type.
+describeSlotTypeResponse_botId :: Lens.Lens' DescribeSlotTypeResponse (Prelude.Maybe Prelude.Text)
+describeSlotTypeResponse_botId = Lens.lens (\DescribeSlotTypeResponse' {botId} -> botId) (\s@DescribeSlotTypeResponse' {} a -> s {botId = a} :: DescribeSlotTypeResponse)
+
+-- | The version of the bot associated with the slot type.
+describeSlotTypeResponse_botVersion :: Lens.Lens' DescribeSlotTypeResponse (Prelude.Maybe Prelude.Text)
+describeSlotTypeResponse_botVersion = Lens.lens (\DescribeSlotTypeResponse' {botVersion} -> botVersion) (\s@DescribeSlotTypeResponse' {} a -> s {botVersion = a} :: DescribeSlotTypeResponse)
+
+-- | Specifications for a composite slot type.
+describeSlotTypeResponse_compositeSlotTypeSetting :: Lens.Lens' DescribeSlotTypeResponse (Prelude.Maybe CompositeSlotTypeSetting)
+describeSlotTypeResponse_compositeSlotTypeSetting = Lens.lens (\DescribeSlotTypeResponse' {compositeSlotTypeSetting} -> compositeSlotTypeSetting) (\s@DescribeSlotTypeResponse' {} a -> s {compositeSlotTypeSetting = a} :: DescribeSlotTypeResponse)
+
+-- | A timestamp of the date and time that the slot type was created.
+describeSlotTypeResponse_creationDateTime :: Lens.Lens' DescribeSlotTypeResponse (Prelude.Maybe Prelude.UTCTime)
+describeSlotTypeResponse_creationDateTime = Lens.lens (\DescribeSlotTypeResponse' {creationDateTime} -> creationDateTime) (\s@DescribeSlotTypeResponse' {} a -> s {creationDateTime = a} :: DescribeSlotTypeResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The description specified for the slot type.
+describeSlotTypeResponse_description :: Lens.Lens' DescribeSlotTypeResponse (Prelude.Maybe Prelude.Text)
+describeSlotTypeResponse_description = Lens.lens (\DescribeSlotTypeResponse' {description} -> description) (\s@DescribeSlotTypeResponse' {} a -> s {description = a} :: DescribeSlotTypeResponse)
+
+-- | Undocumented member.
+describeSlotTypeResponse_externalSourceSetting :: Lens.Lens' DescribeSlotTypeResponse (Prelude.Maybe ExternalSourceSetting)
+describeSlotTypeResponse_externalSourceSetting = Lens.lens (\DescribeSlotTypeResponse' {externalSourceSetting} -> externalSourceSetting) (\s@DescribeSlotTypeResponse' {} a -> s {externalSourceSetting = a} :: DescribeSlotTypeResponse)
+
+-- | A timestamp of the date and time that the slot type was last updated.
+describeSlotTypeResponse_lastUpdatedDateTime :: Lens.Lens' DescribeSlotTypeResponse (Prelude.Maybe Prelude.UTCTime)
+describeSlotTypeResponse_lastUpdatedDateTime = Lens.lens (\DescribeSlotTypeResponse' {lastUpdatedDateTime} -> lastUpdatedDateTime) (\s@DescribeSlotTypeResponse' {} a -> s {lastUpdatedDateTime = a} :: DescribeSlotTypeResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The language and locale specified for the slot type.
+describeSlotTypeResponse_localeId :: Lens.Lens' DescribeSlotTypeResponse (Prelude.Maybe Prelude.Text)
+describeSlotTypeResponse_localeId = Lens.lens (\DescribeSlotTypeResponse' {localeId} -> localeId) (\s@DescribeSlotTypeResponse' {} a -> s {localeId = a} :: DescribeSlotTypeResponse)
+
+-- | The built in slot type used as a parent to this slot type.
+describeSlotTypeResponse_parentSlotTypeSignature :: Lens.Lens' DescribeSlotTypeResponse (Prelude.Maybe Prelude.Text)
+describeSlotTypeResponse_parentSlotTypeSignature = Lens.lens (\DescribeSlotTypeResponse' {parentSlotTypeSignature} -> parentSlotTypeSignature) (\s@DescribeSlotTypeResponse' {} a -> s {parentSlotTypeSignature = a} :: DescribeSlotTypeResponse)
+
+-- | The unique identifier for the slot type.
+describeSlotTypeResponse_slotTypeId :: Lens.Lens' DescribeSlotTypeResponse (Prelude.Maybe Prelude.Text)
+describeSlotTypeResponse_slotTypeId = Lens.lens (\DescribeSlotTypeResponse' {slotTypeId} -> slotTypeId) (\s@DescribeSlotTypeResponse' {} a -> s {slotTypeId = a} :: DescribeSlotTypeResponse)
+
+-- | The name specified for the slot type.
+describeSlotTypeResponse_slotTypeName :: Lens.Lens' DescribeSlotTypeResponse (Prelude.Maybe Prelude.Text)
+describeSlotTypeResponse_slotTypeName = Lens.lens (\DescribeSlotTypeResponse' {slotTypeName} -> slotTypeName) (\s@DescribeSlotTypeResponse' {} a -> s {slotTypeName = a} :: DescribeSlotTypeResponse)
+
+-- | The values that the slot type can take. Includes any synonyms for the
+-- slot type values.
+describeSlotTypeResponse_slotTypeValues :: Lens.Lens' DescribeSlotTypeResponse (Prelude.Maybe (Prelude.NonEmpty SlotTypeValue))
+describeSlotTypeResponse_slotTypeValues = Lens.lens (\DescribeSlotTypeResponse' {slotTypeValues} -> slotTypeValues) (\s@DescribeSlotTypeResponse' {} a -> s {slotTypeValues = a} :: DescribeSlotTypeResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The strategy that Amazon Lex uses to choose a value from a list of
+-- possible values.
+describeSlotTypeResponse_valueSelectionSetting :: Lens.Lens' DescribeSlotTypeResponse (Prelude.Maybe SlotValueSelectionSetting)
+describeSlotTypeResponse_valueSelectionSetting = Lens.lens (\DescribeSlotTypeResponse' {valueSelectionSetting} -> valueSelectionSetting) (\s@DescribeSlotTypeResponse' {} a -> s {valueSelectionSetting = a} :: DescribeSlotTypeResponse)
+
+-- | The response's http status code.
+describeSlotTypeResponse_httpStatus :: Lens.Lens' DescribeSlotTypeResponse Prelude.Int
+describeSlotTypeResponse_httpStatus = Lens.lens (\DescribeSlotTypeResponse' {httpStatus} -> httpStatus) (\s@DescribeSlotTypeResponse' {} a -> s {httpStatus = a} :: DescribeSlotTypeResponse)
+
+instance Prelude.NFData DescribeSlotTypeResponse where
+  rnf DescribeSlotTypeResponse' {..} =
+    Prelude.rnf botId
+      `Prelude.seq` Prelude.rnf botVersion
+      `Prelude.seq` Prelude.rnf compositeSlotTypeSetting
+      `Prelude.seq` Prelude.rnf creationDateTime
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf externalSourceSetting
+      `Prelude.seq` Prelude.rnf lastUpdatedDateTime
+      `Prelude.seq` Prelude.rnf localeId
+      `Prelude.seq` Prelude.rnf parentSlotTypeSignature
+      `Prelude.seq` Prelude.rnf slotTypeId
+      `Prelude.seq` Prelude.rnf slotTypeName
+      `Prelude.seq` Prelude.rnf slotTypeValues
+      `Prelude.seq` Prelude.rnf valueSelectionSetting
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/LexV2Models/Lens.hs b/gen/Amazonka/LexV2Models/Lens.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/Lens.hs
@@ -0,0 +1,1907 @@
+{-# 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.LexV2Models.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.LexV2Models.Lens
+  ( -- * Operations
+
+    -- ** BatchCreateCustomVocabularyItem
+    batchCreateCustomVocabularyItem_botId,
+    batchCreateCustomVocabularyItem_botVersion,
+    batchCreateCustomVocabularyItem_localeId,
+    batchCreateCustomVocabularyItem_customVocabularyItemList,
+    batchCreateCustomVocabularyItemResponse_botId,
+    batchCreateCustomVocabularyItemResponse_botVersion,
+    batchCreateCustomVocabularyItemResponse_errors,
+    batchCreateCustomVocabularyItemResponse_localeId,
+    batchCreateCustomVocabularyItemResponse_resources,
+    batchCreateCustomVocabularyItemResponse_httpStatus,
+
+    -- ** BatchDeleteCustomVocabularyItem
+    batchDeleteCustomVocabularyItem_botId,
+    batchDeleteCustomVocabularyItem_botVersion,
+    batchDeleteCustomVocabularyItem_localeId,
+    batchDeleteCustomVocabularyItem_customVocabularyItemList,
+    batchDeleteCustomVocabularyItemResponse_botId,
+    batchDeleteCustomVocabularyItemResponse_botVersion,
+    batchDeleteCustomVocabularyItemResponse_errors,
+    batchDeleteCustomVocabularyItemResponse_localeId,
+    batchDeleteCustomVocabularyItemResponse_resources,
+    batchDeleteCustomVocabularyItemResponse_httpStatus,
+
+    -- ** BatchUpdateCustomVocabularyItem
+    batchUpdateCustomVocabularyItem_botId,
+    batchUpdateCustomVocabularyItem_botVersion,
+    batchUpdateCustomVocabularyItem_localeId,
+    batchUpdateCustomVocabularyItem_customVocabularyItemList,
+    batchUpdateCustomVocabularyItemResponse_botId,
+    batchUpdateCustomVocabularyItemResponse_botVersion,
+    batchUpdateCustomVocabularyItemResponse_errors,
+    batchUpdateCustomVocabularyItemResponse_localeId,
+    batchUpdateCustomVocabularyItemResponse_resources,
+    batchUpdateCustomVocabularyItemResponse_httpStatus,
+
+    -- ** BuildBotLocale
+    buildBotLocale_botId,
+    buildBotLocale_botVersion,
+    buildBotLocale_localeId,
+    buildBotLocaleResponse_botId,
+    buildBotLocaleResponse_botLocaleStatus,
+    buildBotLocaleResponse_botVersion,
+    buildBotLocaleResponse_lastBuildSubmittedDateTime,
+    buildBotLocaleResponse_localeId,
+    buildBotLocaleResponse_httpStatus,
+
+    -- ** CreateBot
+    createBot_botTags,
+    createBot_description,
+    createBot_testBotAliasTags,
+    createBot_botName,
+    createBot_roleArn,
+    createBot_dataPrivacy,
+    createBot_idleSessionTTLInSeconds,
+    createBotResponse_botId,
+    createBotResponse_botName,
+    createBotResponse_botStatus,
+    createBotResponse_botTags,
+    createBotResponse_creationDateTime,
+    createBotResponse_dataPrivacy,
+    createBotResponse_description,
+    createBotResponse_idleSessionTTLInSeconds,
+    createBotResponse_roleArn,
+    createBotResponse_testBotAliasTags,
+    createBotResponse_httpStatus,
+
+    -- ** CreateBotAlias
+    createBotAlias_botAliasLocaleSettings,
+    createBotAlias_botVersion,
+    createBotAlias_conversationLogSettings,
+    createBotAlias_description,
+    createBotAlias_sentimentAnalysisSettings,
+    createBotAlias_tags,
+    createBotAlias_botAliasName,
+    createBotAlias_botId,
+    createBotAliasResponse_botAliasId,
+    createBotAliasResponse_botAliasLocaleSettings,
+    createBotAliasResponse_botAliasName,
+    createBotAliasResponse_botAliasStatus,
+    createBotAliasResponse_botId,
+    createBotAliasResponse_botVersion,
+    createBotAliasResponse_conversationLogSettings,
+    createBotAliasResponse_creationDateTime,
+    createBotAliasResponse_description,
+    createBotAliasResponse_sentimentAnalysisSettings,
+    createBotAliasResponse_tags,
+    createBotAliasResponse_httpStatus,
+
+    -- ** CreateBotLocale
+    createBotLocale_description,
+    createBotLocale_voiceSettings,
+    createBotLocale_botId,
+    createBotLocale_botVersion,
+    createBotLocale_localeId,
+    createBotLocale_nluIntentConfidenceThreshold,
+    createBotLocaleResponse_botId,
+    createBotLocaleResponse_botLocaleStatus,
+    createBotLocaleResponse_botVersion,
+    createBotLocaleResponse_creationDateTime,
+    createBotLocaleResponse_description,
+    createBotLocaleResponse_localeId,
+    createBotLocaleResponse_localeName,
+    createBotLocaleResponse_nluIntentConfidenceThreshold,
+    createBotLocaleResponse_voiceSettings,
+    createBotLocaleResponse_httpStatus,
+
+    -- ** CreateBotVersion
+    createBotVersion_description,
+    createBotVersion_botId,
+    createBotVersion_botVersionLocaleSpecification,
+    createBotVersionResponse_botId,
+    createBotVersionResponse_botStatus,
+    createBotVersionResponse_botVersion,
+    createBotVersionResponse_botVersionLocaleSpecification,
+    createBotVersionResponse_creationDateTime,
+    createBotVersionResponse_description,
+    createBotVersionResponse_httpStatus,
+
+    -- ** CreateExport
+    createExport_filePassword,
+    createExport_resourceSpecification,
+    createExport_fileFormat,
+    createExportResponse_creationDateTime,
+    createExportResponse_exportId,
+    createExportResponse_exportStatus,
+    createExportResponse_fileFormat,
+    createExportResponse_resourceSpecification,
+    createExportResponse_httpStatus,
+
+    -- ** CreateIntent
+    createIntent_description,
+    createIntent_dialogCodeHook,
+    createIntent_fulfillmentCodeHook,
+    createIntent_initialResponseSetting,
+    createIntent_inputContexts,
+    createIntent_intentClosingSetting,
+    createIntent_intentConfirmationSetting,
+    createIntent_kendraConfiguration,
+    createIntent_outputContexts,
+    createIntent_parentIntentSignature,
+    createIntent_sampleUtterances,
+    createIntent_intentName,
+    createIntent_botId,
+    createIntent_botVersion,
+    createIntent_localeId,
+    createIntentResponse_botId,
+    createIntentResponse_botVersion,
+    createIntentResponse_creationDateTime,
+    createIntentResponse_description,
+    createIntentResponse_dialogCodeHook,
+    createIntentResponse_fulfillmentCodeHook,
+    createIntentResponse_initialResponseSetting,
+    createIntentResponse_inputContexts,
+    createIntentResponse_intentClosingSetting,
+    createIntentResponse_intentConfirmationSetting,
+    createIntentResponse_intentId,
+    createIntentResponse_intentName,
+    createIntentResponse_kendraConfiguration,
+    createIntentResponse_localeId,
+    createIntentResponse_outputContexts,
+    createIntentResponse_parentIntentSignature,
+    createIntentResponse_sampleUtterances,
+    createIntentResponse_httpStatus,
+
+    -- ** CreateResourcePolicy
+    createResourcePolicy_resourceArn,
+    createResourcePolicy_policy,
+    createResourcePolicyResponse_resourceArn,
+    createResourcePolicyResponse_revisionId,
+    createResourcePolicyResponse_httpStatus,
+
+    -- ** CreateResourcePolicyStatement
+    createResourcePolicyStatement_condition,
+    createResourcePolicyStatement_expectedRevisionId,
+    createResourcePolicyStatement_resourceArn,
+    createResourcePolicyStatement_statementId,
+    createResourcePolicyStatement_effect,
+    createResourcePolicyStatement_principal,
+    createResourcePolicyStatement_action,
+    createResourcePolicyStatementResponse_resourceArn,
+    createResourcePolicyStatementResponse_revisionId,
+    createResourcePolicyStatementResponse_httpStatus,
+
+    -- ** CreateSlot
+    createSlot_description,
+    createSlot_multipleValuesSetting,
+    createSlot_obfuscationSetting,
+    createSlot_slotTypeId,
+    createSlot_subSlotSetting,
+    createSlot_slotName,
+    createSlot_valueElicitationSetting,
+    createSlot_botId,
+    createSlot_botVersion,
+    createSlot_localeId,
+    createSlot_intentId,
+    createSlotResponse_botId,
+    createSlotResponse_botVersion,
+    createSlotResponse_creationDateTime,
+    createSlotResponse_description,
+    createSlotResponse_intentId,
+    createSlotResponse_localeId,
+    createSlotResponse_multipleValuesSetting,
+    createSlotResponse_obfuscationSetting,
+    createSlotResponse_slotId,
+    createSlotResponse_slotName,
+    createSlotResponse_slotTypeId,
+    createSlotResponse_subSlotSetting,
+    createSlotResponse_valueElicitationSetting,
+    createSlotResponse_httpStatus,
+
+    -- ** CreateSlotType
+    createSlotType_compositeSlotTypeSetting,
+    createSlotType_description,
+    createSlotType_externalSourceSetting,
+    createSlotType_parentSlotTypeSignature,
+    createSlotType_slotTypeValues,
+    createSlotType_valueSelectionSetting,
+    createSlotType_slotTypeName,
+    createSlotType_botId,
+    createSlotType_botVersion,
+    createSlotType_localeId,
+    createSlotTypeResponse_botId,
+    createSlotTypeResponse_botVersion,
+    createSlotTypeResponse_compositeSlotTypeSetting,
+    createSlotTypeResponse_creationDateTime,
+    createSlotTypeResponse_description,
+    createSlotTypeResponse_externalSourceSetting,
+    createSlotTypeResponse_localeId,
+    createSlotTypeResponse_parentSlotTypeSignature,
+    createSlotTypeResponse_slotTypeId,
+    createSlotTypeResponse_slotTypeName,
+    createSlotTypeResponse_slotTypeValues,
+    createSlotTypeResponse_valueSelectionSetting,
+    createSlotTypeResponse_httpStatus,
+
+    -- ** CreateUploadUrl
+    createUploadUrlResponse_importId,
+    createUploadUrlResponse_uploadUrl,
+    createUploadUrlResponse_httpStatus,
+
+    -- ** DeleteBot
+    deleteBot_skipResourceInUseCheck,
+    deleteBot_botId,
+    deleteBotResponse_botId,
+    deleteBotResponse_botStatus,
+    deleteBotResponse_httpStatus,
+
+    -- ** DeleteBotAlias
+    deleteBotAlias_skipResourceInUseCheck,
+    deleteBotAlias_botAliasId,
+    deleteBotAlias_botId,
+    deleteBotAliasResponse_botAliasId,
+    deleteBotAliasResponse_botAliasStatus,
+    deleteBotAliasResponse_botId,
+    deleteBotAliasResponse_httpStatus,
+
+    -- ** DeleteBotLocale
+    deleteBotLocale_botId,
+    deleteBotLocale_botVersion,
+    deleteBotLocale_localeId,
+    deleteBotLocaleResponse_botId,
+    deleteBotLocaleResponse_botLocaleStatus,
+    deleteBotLocaleResponse_botVersion,
+    deleteBotLocaleResponse_localeId,
+    deleteBotLocaleResponse_httpStatus,
+
+    -- ** DeleteBotVersion
+    deleteBotVersion_skipResourceInUseCheck,
+    deleteBotVersion_botId,
+    deleteBotVersion_botVersion,
+    deleteBotVersionResponse_botId,
+    deleteBotVersionResponse_botStatus,
+    deleteBotVersionResponse_botVersion,
+    deleteBotVersionResponse_httpStatus,
+
+    -- ** DeleteCustomVocabulary
+    deleteCustomVocabulary_botId,
+    deleteCustomVocabulary_botVersion,
+    deleteCustomVocabulary_localeId,
+    deleteCustomVocabularyResponse_botId,
+    deleteCustomVocabularyResponse_botVersion,
+    deleteCustomVocabularyResponse_customVocabularyStatus,
+    deleteCustomVocabularyResponse_localeId,
+    deleteCustomVocabularyResponse_httpStatus,
+
+    -- ** DeleteExport
+    deleteExport_exportId,
+    deleteExportResponse_exportId,
+    deleteExportResponse_exportStatus,
+    deleteExportResponse_httpStatus,
+
+    -- ** DeleteImport
+    deleteImport_importId,
+    deleteImportResponse_importId,
+    deleteImportResponse_importStatus,
+    deleteImportResponse_httpStatus,
+
+    -- ** DeleteIntent
+    deleteIntent_intentId,
+    deleteIntent_botId,
+    deleteIntent_botVersion,
+    deleteIntent_localeId,
+
+    -- ** DeleteResourcePolicy
+    deleteResourcePolicy_expectedRevisionId,
+    deleteResourcePolicy_resourceArn,
+    deleteResourcePolicyResponse_resourceArn,
+    deleteResourcePolicyResponse_revisionId,
+    deleteResourcePolicyResponse_httpStatus,
+
+    -- ** DeleteResourcePolicyStatement
+    deleteResourcePolicyStatement_expectedRevisionId,
+    deleteResourcePolicyStatement_resourceArn,
+    deleteResourcePolicyStatement_statementId,
+    deleteResourcePolicyStatementResponse_resourceArn,
+    deleteResourcePolicyStatementResponse_revisionId,
+    deleteResourcePolicyStatementResponse_httpStatus,
+
+    -- ** DeleteSlot
+    deleteSlot_slotId,
+    deleteSlot_botId,
+    deleteSlot_botVersion,
+    deleteSlot_localeId,
+    deleteSlot_intentId,
+
+    -- ** DeleteSlotType
+    deleteSlotType_skipResourceInUseCheck,
+    deleteSlotType_slotTypeId,
+    deleteSlotType_botId,
+    deleteSlotType_botVersion,
+    deleteSlotType_localeId,
+
+    -- ** DeleteUtterances
+    deleteUtterances_localeId,
+    deleteUtterances_sessionId,
+    deleteUtterances_botId,
+    deleteUtterancesResponse_httpStatus,
+
+    -- ** DescribeBot
+    describeBot_botId,
+    describeBotResponse_botId,
+    describeBotResponse_botName,
+    describeBotResponse_botStatus,
+    describeBotResponse_creationDateTime,
+    describeBotResponse_dataPrivacy,
+    describeBotResponse_description,
+    describeBotResponse_idleSessionTTLInSeconds,
+    describeBotResponse_lastUpdatedDateTime,
+    describeBotResponse_roleArn,
+    describeBotResponse_httpStatus,
+
+    -- ** DescribeBotAlias
+    describeBotAlias_botAliasId,
+    describeBotAlias_botId,
+    describeBotAliasResponse_botAliasHistoryEvents,
+    describeBotAliasResponse_botAliasId,
+    describeBotAliasResponse_botAliasLocaleSettings,
+    describeBotAliasResponse_botAliasName,
+    describeBotAliasResponse_botAliasStatus,
+    describeBotAliasResponse_botId,
+    describeBotAliasResponse_botVersion,
+    describeBotAliasResponse_conversationLogSettings,
+    describeBotAliasResponse_creationDateTime,
+    describeBotAliasResponse_description,
+    describeBotAliasResponse_lastUpdatedDateTime,
+    describeBotAliasResponse_sentimentAnalysisSettings,
+    describeBotAliasResponse_httpStatus,
+
+    -- ** DescribeBotLocale
+    describeBotLocale_botId,
+    describeBotLocale_botVersion,
+    describeBotLocale_localeId,
+    describeBotLocaleResponse_botId,
+    describeBotLocaleResponse_botLocaleHistoryEvents,
+    describeBotLocaleResponse_botLocaleStatus,
+    describeBotLocaleResponse_botVersion,
+    describeBotLocaleResponse_creationDateTime,
+    describeBotLocaleResponse_description,
+    describeBotLocaleResponse_failureReasons,
+    describeBotLocaleResponse_intentsCount,
+    describeBotLocaleResponse_lastBuildSubmittedDateTime,
+    describeBotLocaleResponse_lastUpdatedDateTime,
+    describeBotLocaleResponse_localeId,
+    describeBotLocaleResponse_localeName,
+    describeBotLocaleResponse_nluIntentConfidenceThreshold,
+    describeBotLocaleResponse_recommendedActions,
+    describeBotLocaleResponse_slotTypesCount,
+    describeBotLocaleResponse_voiceSettings,
+    describeBotLocaleResponse_httpStatus,
+
+    -- ** DescribeBotRecommendation
+    describeBotRecommendation_botId,
+    describeBotRecommendation_botVersion,
+    describeBotRecommendation_localeId,
+    describeBotRecommendation_botRecommendationId,
+    describeBotRecommendationResponse_botId,
+    describeBotRecommendationResponse_botRecommendationId,
+    describeBotRecommendationResponse_botRecommendationResults,
+    describeBotRecommendationResponse_botRecommendationStatus,
+    describeBotRecommendationResponse_botVersion,
+    describeBotRecommendationResponse_creationDateTime,
+    describeBotRecommendationResponse_encryptionSetting,
+    describeBotRecommendationResponse_failureReasons,
+    describeBotRecommendationResponse_lastUpdatedDateTime,
+    describeBotRecommendationResponse_localeId,
+    describeBotRecommendationResponse_transcriptSourceSetting,
+    describeBotRecommendationResponse_httpStatus,
+
+    -- ** DescribeBotVersion
+    describeBotVersion_botId,
+    describeBotVersion_botVersion,
+    describeBotVersionResponse_botId,
+    describeBotVersionResponse_botName,
+    describeBotVersionResponse_botStatus,
+    describeBotVersionResponse_botVersion,
+    describeBotVersionResponse_creationDateTime,
+    describeBotVersionResponse_dataPrivacy,
+    describeBotVersionResponse_description,
+    describeBotVersionResponse_failureReasons,
+    describeBotVersionResponse_idleSessionTTLInSeconds,
+    describeBotVersionResponse_roleArn,
+    describeBotVersionResponse_httpStatus,
+
+    -- ** DescribeCustomVocabularyMetadata
+    describeCustomVocabularyMetadata_botId,
+    describeCustomVocabularyMetadata_botVersion,
+    describeCustomVocabularyMetadata_localeId,
+    describeCustomVocabularyMetadataResponse_botId,
+    describeCustomVocabularyMetadataResponse_botVersion,
+    describeCustomVocabularyMetadataResponse_creationDateTime,
+    describeCustomVocabularyMetadataResponse_customVocabularyStatus,
+    describeCustomVocabularyMetadataResponse_lastUpdatedDateTime,
+    describeCustomVocabularyMetadataResponse_localeId,
+    describeCustomVocabularyMetadataResponse_httpStatus,
+
+    -- ** DescribeExport
+    describeExport_exportId,
+    describeExportResponse_creationDateTime,
+    describeExportResponse_downloadUrl,
+    describeExportResponse_exportId,
+    describeExportResponse_exportStatus,
+    describeExportResponse_failureReasons,
+    describeExportResponse_fileFormat,
+    describeExportResponse_lastUpdatedDateTime,
+    describeExportResponse_resourceSpecification,
+    describeExportResponse_httpStatus,
+
+    -- ** DescribeImport
+    describeImport_importId,
+    describeImportResponse_creationDateTime,
+    describeImportResponse_failureReasons,
+    describeImportResponse_importId,
+    describeImportResponse_importStatus,
+    describeImportResponse_importedResourceId,
+    describeImportResponse_importedResourceName,
+    describeImportResponse_lastUpdatedDateTime,
+    describeImportResponse_mergeStrategy,
+    describeImportResponse_resourceSpecification,
+    describeImportResponse_httpStatus,
+
+    -- ** DescribeIntent
+    describeIntent_intentId,
+    describeIntent_botId,
+    describeIntent_botVersion,
+    describeIntent_localeId,
+    describeIntentResponse_botId,
+    describeIntentResponse_botVersion,
+    describeIntentResponse_creationDateTime,
+    describeIntentResponse_description,
+    describeIntentResponse_dialogCodeHook,
+    describeIntentResponse_fulfillmentCodeHook,
+    describeIntentResponse_initialResponseSetting,
+    describeIntentResponse_inputContexts,
+    describeIntentResponse_intentClosingSetting,
+    describeIntentResponse_intentConfirmationSetting,
+    describeIntentResponse_intentId,
+    describeIntentResponse_intentName,
+    describeIntentResponse_kendraConfiguration,
+    describeIntentResponse_lastUpdatedDateTime,
+    describeIntentResponse_localeId,
+    describeIntentResponse_outputContexts,
+    describeIntentResponse_parentIntentSignature,
+    describeIntentResponse_sampleUtterances,
+    describeIntentResponse_slotPriorities,
+    describeIntentResponse_httpStatus,
+
+    -- ** DescribeResourcePolicy
+    describeResourcePolicy_resourceArn,
+    describeResourcePolicyResponse_policy,
+    describeResourcePolicyResponse_resourceArn,
+    describeResourcePolicyResponse_revisionId,
+    describeResourcePolicyResponse_httpStatus,
+
+    -- ** DescribeSlot
+    describeSlot_slotId,
+    describeSlot_botId,
+    describeSlot_botVersion,
+    describeSlot_localeId,
+    describeSlot_intentId,
+    describeSlotResponse_botId,
+    describeSlotResponse_botVersion,
+    describeSlotResponse_creationDateTime,
+    describeSlotResponse_description,
+    describeSlotResponse_intentId,
+    describeSlotResponse_lastUpdatedDateTime,
+    describeSlotResponse_localeId,
+    describeSlotResponse_multipleValuesSetting,
+    describeSlotResponse_obfuscationSetting,
+    describeSlotResponse_slotId,
+    describeSlotResponse_slotName,
+    describeSlotResponse_slotTypeId,
+    describeSlotResponse_subSlotSetting,
+    describeSlotResponse_valueElicitationSetting,
+    describeSlotResponse_httpStatus,
+
+    -- ** DescribeSlotType
+    describeSlotType_slotTypeId,
+    describeSlotType_botId,
+    describeSlotType_botVersion,
+    describeSlotType_localeId,
+    describeSlotTypeResponse_botId,
+    describeSlotTypeResponse_botVersion,
+    describeSlotTypeResponse_compositeSlotTypeSetting,
+    describeSlotTypeResponse_creationDateTime,
+    describeSlotTypeResponse_description,
+    describeSlotTypeResponse_externalSourceSetting,
+    describeSlotTypeResponse_lastUpdatedDateTime,
+    describeSlotTypeResponse_localeId,
+    describeSlotTypeResponse_parentSlotTypeSignature,
+    describeSlotTypeResponse_slotTypeId,
+    describeSlotTypeResponse_slotTypeName,
+    describeSlotTypeResponse_slotTypeValues,
+    describeSlotTypeResponse_valueSelectionSetting,
+    describeSlotTypeResponse_httpStatus,
+
+    -- ** ListAggregatedUtterances
+    listAggregatedUtterances_botAliasId,
+    listAggregatedUtterances_botVersion,
+    listAggregatedUtterances_filters,
+    listAggregatedUtterances_maxResults,
+    listAggregatedUtterances_nextToken,
+    listAggregatedUtterances_sortBy,
+    listAggregatedUtterances_botId,
+    listAggregatedUtterances_localeId,
+    listAggregatedUtterances_aggregationDuration,
+    listAggregatedUtterancesResponse_aggregatedUtterancesSummaries,
+    listAggregatedUtterancesResponse_aggregationDuration,
+    listAggregatedUtterancesResponse_aggregationLastRefreshedDateTime,
+    listAggregatedUtterancesResponse_aggregationWindowEndTime,
+    listAggregatedUtterancesResponse_aggregationWindowStartTime,
+    listAggregatedUtterancesResponse_botAliasId,
+    listAggregatedUtterancesResponse_botId,
+    listAggregatedUtterancesResponse_botVersion,
+    listAggregatedUtterancesResponse_localeId,
+    listAggregatedUtterancesResponse_nextToken,
+    listAggregatedUtterancesResponse_httpStatus,
+
+    -- ** ListBotAliases
+    listBotAliases_maxResults,
+    listBotAliases_nextToken,
+    listBotAliases_botId,
+    listBotAliasesResponse_botAliasSummaries,
+    listBotAliasesResponse_botId,
+    listBotAliasesResponse_nextToken,
+    listBotAliasesResponse_httpStatus,
+
+    -- ** ListBotLocales
+    listBotLocales_filters,
+    listBotLocales_maxResults,
+    listBotLocales_nextToken,
+    listBotLocales_sortBy,
+    listBotLocales_botId,
+    listBotLocales_botVersion,
+    listBotLocalesResponse_botId,
+    listBotLocalesResponse_botLocaleSummaries,
+    listBotLocalesResponse_botVersion,
+    listBotLocalesResponse_nextToken,
+    listBotLocalesResponse_httpStatus,
+
+    -- ** ListBotRecommendations
+    listBotRecommendations_maxResults,
+    listBotRecommendations_nextToken,
+    listBotRecommendations_botId,
+    listBotRecommendations_botVersion,
+    listBotRecommendations_localeId,
+    listBotRecommendationsResponse_botId,
+    listBotRecommendationsResponse_botRecommendationSummaries,
+    listBotRecommendationsResponse_botVersion,
+    listBotRecommendationsResponse_localeId,
+    listBotRecommendationsResponse_nextToken,
+    listBotRecommendationsResponse_httpStatus,
+
+    -- ** ListBotVersions
+    listBotVersions_maxResults,
+    listBotVersions_nextToken,
+    listBotVersions_sortBy,
+    listBotVersions_botId,
+    listBotVersionsResponse_botId,
+    listBotVersionsResponse_botVersionSummaries,
+    listBotVersionsResponse_nextToken,
+    listBotVersionsResponse_httpStatus,
+
+    -- ** ListBots
+    listBots_filters,
+    listBots_maxResults,
+    listBots_nextToken,
+    listBots_sortBy,
+    listBotsResponse_botSummaries,
+    listBotsResponse_nextToken,
+    listBotsResponse_httpStatus,
+
+    -- ** ListBuiltInIntents
+    listBuiltInIntents_maxResults,
+    listBuiltInIntents_nextToken,
+    listBuiltInIntents_sortBy,
+    listBuiltInIntents_localeId,
+    listBuiltInIntentsResponse_builtInIntentSummaries,
+    listBuiltInIntentsResponse_localeId,
+    listBuiltInIntentsResponse_nextToken,
+    listBuiltInIntentsResponse_httpStatus,
+
+    -- ** ListBuiltInSlotTypes
+    listBuiltInSlotTypes_maxResults,
+    listBuiltInSlotTypes_nextToken,
+    listBuiltInSlotTypes_sortBy,
+    listBuiltInSlotTypes_localeId,
+    listBuiltInSlotTypesResponse_builtInSlotTypeSummaries,
+    listBuiltInSlotTypesResponse_localeId,
+    listBuiltInSlotTypesResponse_nextToken,
+    listBuiltInSlotTypesResponse_httpStatus,
+
+    -- ** ListCustomVocabularyItems
+    listCustomVocabularyItems_maxResults,
+    listCustomVocabularyItems_nextToken,
+    listCustomVocabularyItems_botId,
+    listCustomVocabularyItems_botVersion,
+    listCustomVocabularyItems_localeId,
+    listCustomVocabularyItemsResponse_botId,
+    listCustomVocabularyItemsResponse_botVersion,
+    listCustomVocabularyItemsResponse_customVocabularyItems,
+    listCustomVocabularyItemsResponse_localeId,
+    listCustomVocabularyItemsResponse_nextToken,
+    listCustomVocabularyItemsResponse_httpStatus,
+
+    -- ** ListExports
+    listExports_botId,
+    listExports_botVersion,
+    listExports_filters,
+    listExports_localeId,
+    listExports_maxResults,
+    listExports_nextToken,
+    listExports_sortBy,
+    listExportsResponse_botId,
+    listExportsResponse_botVersion,
+    listExportsResponse_exportSummaries,
+    listExportsResponse_localeId,
+    listExportsResponse_nextToken,
+    listExportsResponse_httpStatus,
+
+    -- ** ListImports
+    listImports_botId,
+    listImports_botVersion,
+    listImports_filters,
+    listImports_localeId,
+    listImports_maxResults,
+    listImports_nextToken,
+    listImports_sortBy,
+    listImportsResponse_botId,
+    listImportsResponse_botVersion,
+    listImportsResponse_importSummaries,
+    listImportsResponse_localeId,
+    listImportsResponse_nextToken,
+    listImportsResponse_httpStatus,
+
+    -- ** ListIntents
+    listIntents_filters,
+    listIntents_maxResults,
+    listIntents_nextToken,
+    listIntents_sortBy,
+    listIntents_botId,
+    listIntents_botVersion,
+    listIntents_localeId,
+    listIntentsResponse_botId,
+    listIntentsResponse_botVersion,
+    listIntentsResponse_intentSummaries,
+    listIntentsResponse_localeId,
+    listIntentsResponse_nextToken,
+    listIntentsResponse_httpStatus,
+
+    -- ** ListRecommendedIntents
+    listRecommendedIntents_maxResults,
+    listRecommendedIntents_nextToken,
+    listRecommendedIntents_botId,
+    listRecommendedIntents_botVersion,
+    listRecommendedIntents_localeId,
+    listRecommendedIntents_botRecommendationId,
+    listRecommendedIntentsResponse_botId,
+    listRecommendedIntentsResponse_botRecommendationId,
+    listRecommendedIntentsResponse_botVersion,
+    listRecommendedIntentsResponse_localeId,
+    listRecommendedIntentsResponse_nextToken,
+    listRecommendedIntentsResponse_summaryList,
+    listRecommendedIntentsResponse_httpStatus,
+
+    -- ** ListSlotTypes
+    listSlotTypes_filters,
+    listSlotTypes_maxResults,
+    listSlotTypes_nextToken,
+    listSlotTypes_sortBy,
+    listSlotTypes_botId,
+    listSlotTypes_botVersion,
+    listSlotTypes_localeId,
+    listSlotTypesResponse_botId,
+    listSlotTypesResponse_botVersion,
+    listSlotTypesResponse_localeId,
+    listSlotTypesResponse_nextToken,
+    listSlotTypesResponse_slotTypeSummaries,
+    listSlotTypesResponse_httpStatus,
+
+    -- ** ListSlots
+    listSlots_filters,
+    listSlots_maxResults,
+    listSlots_nextToken,
+    listSlots_sortBy,
+    listSlots_botId,
+    listSlots_botVersion,
+    listSlots_localeId,
+    listSlots_intentId,
+    listSlotsResponse_botId,
+    listSlotsResponse_botVersion,
+    listSlotsResponse_intentId,
+    listSlotsResponse_localeId,
+    listSlotsResponse_nextToken,
+    listSlotsResponse_slotSummaries,
+    listSlotsResponse_httpStatus,
+
+    -- ** ListTagsForResource
+    listTagsForResource_resourceARN,
+    listTagsForResourceResponse_tags,
+    listTagsForResourceResponse_httpStatus,
+
+    -- ** SearchAssociatedTranscripts
+    searchAssociatedTranscripts_maxResults,
+    searchAssociatedTranscripts_nextIndex,
+    searchAssociatedTranscripts_searchOrder,
+    searchAssociatedTranscripts_botId,
+    searchAssociatedTranscripts_botVersion,
+    searchAssociatedTranscripts_localeId,
+    searchAssociatedTranscripts_botRecommendationId,
+    searchAssociatedTranscripts_filters,
+    searchAssociatedTranscriptsResponse_associatedTranscripts,
+    searchAssociatedTranscriptsResponse_botId,
+    searchAssociatedTranscriptsResponse_botRecommendationId,
+    searchAssociatedTranscriptsResponse_botVersion,
+    searchAssociatedTranscriptsResponse_localeId,
+    searchAssociatedTranscriptsResponse_nextIndex,
+    searchAssociatedTranscriptsResponse_totalResults,
+    searchAssociatedTranscriptsResponse_httpStatus,
+
+    -- ** StartBotRecommendation
+    startBotRecommendation_encryptionSetting,
+    startBotRecommendation_botId,
+    startBotRecommendation_botVersion,
+    startBotRecommendation_localeId,
+    startBotRecommendation_transcriptSourceSetting,
+    startBotRecommendationResponse_botId,
+    startBotRecommendationResponse_botRecommendationId,
+    startBotRecommendationResponse_botRecommendationStatus,
+    startBotRecommendationResponse_botVersion,
+    startBotRecommendationResponse_creationDateTime,
+    startBotRecommendationResponse_encryptionSetting,
+    startBotRecommendationResponse_localeId,
+    startBotRecommendationResponse_transcriptSourceSetting,
+    startBotRecommendationResponse_httpStatus,
+
+    -- ** StartImport
+    startImport_filePassword,
+    startImport_importId,
+    startImport_resourceSpecification,
+    startImport_mergeStrategy,
+    startImportResponse_creationDateTime,
+    startImportResponse_importId,
+    startImportResponse_importStatus,
+    startImportResponse_mergeStrategy,
+    startImportResponse_resourceSpecification,
+    startImportResponse_httpStatus,
+
+    -- ** StopBotRecommendation
+    stopBotRecommendation_botId,
+    stopBotRecommendation_botVersion,
+    stopBotRecommendation_localeId,
+    stopBotRecommendation_botRecommendationId,
+    stopBotRecommendationResponse_botId,
+    stopBotRecommendationResponse_botRecommendationId,
+    stopBotRecommendationResponse_botRecommendationStatus,
+    stopBotRecommendationResponse_botVersion,
+    stopBotRecommendationResponse_localeId,
+    stopBotRecommendationResponse_httpStatus,
+
+    -- ** TagResource
+    tagResource_resourceARN,
+    tagResource_tags,
+    tagResourceResponse_httpStatus,
+
+    -- ** UntagResource
+    untagResource_resourceARN,
+    untagResource_tagKeys,
+    untagResourceResponse_httpStatus,
+
+    -- ** UpdateBot
+    updateBot_description,
+    updateBot_botId,
+    updateBot_botName,
+    updateBot_roleArn,
+    updateBot_dataPrivacy,
+    updateBot_idleSessionTTLInSeconds,
+    updateBotResponse_botId,
+    updateBotResponse_botName,
+    updateBotResponse_botStatus,
+    updateBotResponse_creationDateTime,
+    updateBotResponse_dataPrivacy,
+    updateBotResponse_description,
+    updateBotResponse_idleSessionTTLInSeconds,
+    updateBotResponse_lastUpdatedDateTime,
+    updateBotResponse_roleArn,
+    updateBotResponse_httpStatus,
+
+    -- ** UpdateBotAlias
+    updateBotAlias_botAliasLocaleSettings,
+    updateBotAlias_botVersion,
+    updateBotAlias_conversationLogSettings,
+    updateBotAlias_description,
+    updateBotAlias_sentimentAnalysisSettings,
+    updateBotAlias_botAliasId,
+    updateBotAlias_botAliasName,
+    updateBotAlias_botId,
+    updateBotAliasResponse_botAliasId,
+    updateBotAliasResponse_botAliasLocaleSettings,
+    updateBotAliasResponse_botAliasName,
+    updateBotAliasResponse_botAliasStatus,
+    updateBotAliasResponse_botId,
+    updateBotAliasResponse_botVersion,
+    updateBotAliasResponse_conversationLogSettings,
+    updateBotAliasResponse_creationDateTime,
+    updateBotAliasResponse_description,
+    updateBotAliasResponse_lastUpdatedDateTime,
+    updateBotAliasResponse_sentimentAnalysisSettings,
+    updateBotAliasResponse_httpStatus,
+
+    -- ** UpdateBotLocale
+    updateBotLocale_description,
+    updateBotLocale_voiceSettings,
+    updateBotLocale_botId,
+    updateBotLocale_botVersion,
+    updateBotLocale_localeId,
+    updateBotLocale_nluIntentConfidenceThreshold,
+    updateBotLocaleResponse_botId,
+    updateBotLocaleResponse_botLocaleStatus,
+    updateBotLocaleResponse_botVersion,
+    updateBotLocaleResponse_creationDateTime,
+    updateBotLocaleResponse_description,
+    updateBotLocaleResponse_failureReasons,
+    updateBotLocaleResponse_lastUpdatedDateTime,
+    updateBotLocaleResponse_localeId,
+    updateBotLocaleResponse_localeName,
+    updateBotLocaleResponse_nluIntentConfidenceThreshold,
+    updateBotLocaleResponse_recommendedActions,
+    updateBotLocaleResponse_voiceSettings,
+    updateBotLocaleResponse_httpStatus,
+
+    -- ** UpdateBotRecommendation
+    updateBotRecommendation_botId,
+    updateBotRecommendation_botVersion,
+    updateBotRecommendation_localeId,
+    updateBotRecommendation_botRecommendationId,
+    updateBotRecommendation_encryptionSetting,
+    updateBotRecommendationResponse_botId,
+    updateBotRecommendationResponse_botRecommendationId,
+    updateBotRecommendationResponse_botRecommendationStatus,
+    updateBotRecommendationResponse_botVersion,
+    updateBotRecommendationResponse_creationDateTime,
+    updateBotRecommendationResponse_encryptionSetting,
+    updateBotRecommendationResponse_lastUpdatedDateTime,
+    updateBotRecommendationResponse_localeId,
+    updateBotRecommendationResponse_transcriptSourceSetting,
+    updateBotRecommendationResponse_httpStatus,
+
+    -- ** UpdateExport
+    updateExport_filePassword,
+    updateExport_exportId,
+    updateExportResponse_creationDateTime,
+    updateExportResponse_exportId,
+    updateExportResponse_exportStatus,
+    updateExportResponse_fileFormat,
+    updateExportResponse_lastUpdatedDateTime,
+    updateExportResponse_resourceSpecification,
+    updateExportResponse_httpStatus,
+
+    -- ** UpdateIntent
+    updateIntent_description,
+    updateIntent_dialogCodeHook,
+    updateIntent_fulfillmentCodeHook,
+    updateIntent_initialResponseSetting,
+    updateIntent_inputContexts,
+    updateIntent_intentClosingSetting,
+    updateIntent_intentConfirmationSetting,
+    updateIntent_kendraConfiguration,
+    updateIntent_outputContexts,
+    updateIntent_parentIntentSignature,
+    updateIntent_sampleUtterances,
+    updateIntent_slotPriorities,
+    updateIntent_intentId,
+    updateIntent_intentName,
+    updateIntent_botId,
+    updateIntent_botVersion,
+    updateIntent_localeId,
+    updateIntentResponse_botId,
+    updateIntentResponse_botVersion,
+    updateIntentResponse_creationDateTime,
+    updateIntentResponse_description,
+    updateIntentResponse_dialogCodeHook,
+    updateIntentResponse_fulfillmentCodeHook,
+    updateIntentResponse_initialResponseSetting,
+    updateIntentResponse_inputContexts,
+    updateIntentResponse_intentClosingSetting,
+    updateIntentResponse_intentConfirmationSetting,
+    updateIntentResponse_intentId,
+    updateIntentResponse_intentName,
+    updateIntentResponse_kendraConfiguration,
+    updateIntentResponse_lastUpdatedDateTime,
+    updateIntentResponse_localeId,
+    updateIntentResponse_outputContexts,
+    updateIntentResponse_parentIntentSignature,
+    updateIntentResponse_sampleUtterances,
+    updateIntentResponse_slotPriorities,
+    updateIntentResponse_httpStatus,
+
+    -- ** UpdateResourcePolicy
+    updateResourcePolicy_expectedRevisionId,
+    updateResourcePolicy_resourceArn,
+    updateResourcePolicy_policy,
+    updateResourcePolicyResponse_resourceArn,
+    updateResourcePolicyResponse_revisionId,
+    updateResourcePolicyResponse_httpStatus,
+
+    -- ** UpdateSlot
+    updateSlot_description,
+    updateSlot_multipleValuesSetting,
+    updateSlot_obfuscationSetting,
+    updateSlot_slotTypeId,
+    updateSlot_subSlotSetting,
+    updateSlot_slotId,
+    updateSlot_slotName,
+    updateSlot_valueElicitationSetting,
+    updateSlot_botId,
+    updateSlot_botVersion,
+    updateSlot_localeId,
+    updateSlot_intentId,
+    updateSlotResponse_botId,
+    updateSlotResponse_botVersion,
+    updateSlotResponse_creationDateTime,
+    updateSlotResponse_description,
+    updateSlotResponse_intentId,
+    updateSlotResponse_lastUpdatedDateTime,
+    updateSlotResponse_localeId,
+    updateSlotResponse_multipleValuesSetting,
+    updateSlotResponse_obfuscationSetting,
+    updateSlotResponse_slotId,
+    updateSlotResponse_slotName,
+    updateSlotResponse_slotTypeId,
+    updateSlotResponse_subSlotSetting,
+    updateSlotResponse_valueElicitationSetting,
+    updateSlotResponse_httpStatus,
+
+    -- ** UpdateSlotType
+    updateSlotType_compositeSlotTypeSetting,
+    updateSlotType_description,
+    updateSlotType_externalSourceSetting,
+    updateSlotType_parentSlotTypeSignature,
+    updateSlotType_slotTypeValues,
+    updateSlotType_valueSelectionSetting,
+    updateSlotType_slotTypeId,
+    updateSlotType_slotTypeName,
+    updateSlotType_botId,
+    updateSlotType_botVersion,
+    updateSlotType_localeId,
+    updateSlotTypeResponse_botId,
+    updateSlotTypeResponse_botVersion,
+    updateSlotTypeResponse_compositeSlotTypeSetting,
+    updateSlotTypeResponse_creationDateTime,
+    updateSlotTypeResponse_description,
+    updateSlotTypeResponse_externalSourceSetting,
+    updateSlotTypeResponse_lastUpdatedDateTime,
+    updateSlotTypeResponse_localeId,
+    updateSlotTypeResponse_parentSlotTypeSignature,
+    updateSlotTypeResponse_slotTypeId,
+    updateSlotTypeResponse_slotTypeName,
+    updateSlotTypeResponse_slotTypeValues,
+    updateSlotTypeResponse_valueSelectionSetting,
+    updateSlotTypeResponse_httpStatus,
+
+    -- * Types
+
+    -- ** AdvancedRecognitionSetting
+    advancedRecognitionSetting_audioRecognitionStrategy,
+
+    -- ** AggregatedUtterancesFilter
+    aggregatedUtterancesFilter_name,
+    aggregatedUtterancesFilter_values,
+    aggregatedUtterancesFilter_operator,
+
+    -- ** AggregatedUtterancesSortBy
+    aggregatedUtterancesSortBy_attribute,
+    aggregatedUtterancesSortBy_order,
+
+    -- ** AggregatedUtterancesSummary
+    aggregatedUtterancesSummary_containsDataFromDeletedResources,
+    aggregatedUtterancesSummary_hitCount,
+    aggregatedUtterancesSummary_missedCount,
+    aggregatedUtterancesSummary_utterance,
+    aggregatedUtterancesSummary_utteranceFirstRecordedInAggregationDuration,
+    aggregatedUtterancesSummary_utteranceLastRecordedInAggregationDuration,
+
+    -- ** AllowedInputTypes
+    allowedInputTypes_allowAudioInput,
+    allowedInputTypes_allowDTMFInput,
+
+    -- ** AssociatedTranscript
+    associatedTranscript_transcript,
+
+    -- ** AssociatedTranscriptFilter
+    associatedTranscriptFilter_name,
+    associatedTranscriptFilter_values,
+
+    -- ** AudioAndDTMFInputSpecification
+    audioAndDTMFInputSpecification_audioSpecification,
+    audioAndDTMFInputSpecification_dtmfSpecification,
+    audioAndDTMFInputSpecification_startTimeoutMs,
+
+    -- ** AudioLogDestination
+    audioLogDestination_s3Bucket,
+
+    -- ** AudioLogSetting
+    audioLogSetting_enabled,
+    audioLogSetting_destination,
+
+    -- ** AudioSpecification
+    audioSpecification_maxLengthMs,
+    audioSpecification_endTimeoutMs,
+
+    -- ** BotAliasHistoryEvent
+    botAliasHistoryEvent_botVersion,
+    botAliasHistoryEvent_endDate,
+    botAliasHistoryEvent_startDate,
+
+    -- ** BotAliasLocaleSettings
+    botAliasLocaleSettings_codeHookSpecification,
+    botAliasLocaleSettings_enabled,
+
+    -- ** BotAliasSummary
+    botAliasSummary_botAliasId,
+    botAliasSummary_botAliasName,
+    botAliasSummary_botAliasStatus,
+    botAliasSummary_botVersion,
+    botAliasSummary_creationDateTime,
+    botAliasSummary_description,
+    botAliasSummary_lastUpdatedDateTime,
+
+    -- ** BotExportSpecification
+    botExportSpecification_botId,
+    botExportSpecification_botVersion,
+
+    -- ** BotFilter
+    botFilter_name,
+    botFilter_values,
+    botFilter_operator,
+
+    -- ** BotImportSpecification
+    botImportSpecification_botTags,
+    botImportSpecification_idleSessionTTLInSeconds,
+    botImportSpecification_testBotAliasTags,
+    botImportSpecification_botName,
+    botImportSpecification_roleArn,
+    botImportSpecification_dataPrivacy,
+
+    -- ** BotLocaleExportSpecification
+    botLocaleExportSpecification_botId,
+    botLocaleExportSpecification_botVersion,
+    botLocaleExportSpecification_localeId,
+
+    -- ** BotLocaleFilter
+    botLocaleFilter_name,
+    botLocaleFilter_values,
+    botLocaleFilter_operator,
+
+    -- ** BotLocaleHistoryEvent
+    botLocaleHistoryEvent_event,
+    botLocaleHistoryEvent_eventDate,
+
+    -- ** BotLocaleImportSpecification
+    botLocaleImportSpecification_nluIntentConfidenceThreshold,
+    botLocaleImportSpecification_voiceSettings,
+    botLocaleImportSpecification_botId,
+    botLocaleImportSpecification_botVersion,
+    botLocaleImportSpecification_localeId,
+
+    -- ** BotLocaleSortBy
+    botLocaleSortBy_attribute,
+    botLocaleSortBy_order,
+
+    -- ** BotLocaleSummary
+    botLocaleSummary_botLocaleStatus,
+    botLocaleSummary_description,
+    botLocaleSummary_lastBuildSubmittedDateTime,
+    botLocaleSummary_lastUpdatedDateTime,
+    botLocaleSummary_localeId,
+    botLocaleSummary_localeName,
+
+    -- ** BotRecommendationResultStatistics
+    botRecommendationResultStatistics_intents,
+    botRecommendationResultStatistics_slotTypes,
+
+    -- ** BotRecommendationResults
+    botRecommendationResults_associatedTranscriptsUrl,
+    botRecommendationResults_botLocaleExportUrl,
+    botRecommendationResults_statistics,
+
+    -- ** BotRecommendationSummary
+    botRecommendationSummary_creationDateTime,
+    botRecommendationSummary_lastUpdatedDateTime,
+    botRecommendationSummary_botRecommendationStatus,
+    botRecommendationSummary_botRecommendationId,
+
+    -- ** BotSortBy
+    botSortBy_attribute,
+    botSortBy_order,
+
+    -- ** BotSummary
+    botSummary_botId,
+    botSummary_botName,
+    botSummary_botStatus,
+    botSummary_description,
+    botSummary_lastUpdatedDateTime,
+    botSummary_latestBotVersion,
+
+    -- ** BotVersionLocaleDetails
+    botVersionLocaleDetails_sourceBotVersion,
+
+    -- ** BotVersionSortBy
+    botVersionSortBy_attribute,
+    botVersionSortBy_order,
+
+    -- ** BotVersionSummary
+    botVersionSummary_botName,
+    botVersionSummary_botStatus,
+    botVersionSummary_botVersion,
+    botVersionSummary_creationDateTime,
+    botVersionSummary_description,
+
+    -- ** BuiltInIntentSortBy
+    builtInIntentSortBy_attribute,
+    builtInIntentSortBy_order,
+
+    -- ** BuiltInIntentSummary
+    builtInIntentSummary_description,
+    builtInIntentSummary_intentSignature,
+
+    -- ** BuiltInSlotTypeSortBy
+    builtInSlotTypeSortBy_attribute,
+    builtInSlotTypeSortBy_order,
+
+    -- ** BuiltInSlotTypeSummary
+    builtInSlotTypeSummary_description,
+    builtInSlotTypeSummary_slotTypeSignature,
+
+    -- ** Button
+    button_text,
+    button_value,
+
+    -- ** CloudWatchLogGroupLogDestination
+    cloudWatchLogGroupLogDestination_cloudWatchLogGroupArn,
+    cloudWatchLogGroupLogDestination_logPrefix,
+
+    -- ** CodeHookSpecification
+    codeHookSpecification_lambdaCodeHook,
+
+    -- ** CompositeSlotTypeSetting
+    compositeSlotTypeSetting_subSlots,
+
+    -- ** Condition
+    condition_expressionString,
+
+    -- ** ConditionalBranch
+    conditionalBranch_response,
+    conditionalBranch_name,
+    conditionalBranch_condition,
+    conditionalBranch_nextStep,
+
+    -- ** ConditionalSpecification
+    conditionalSpecification_active,
+    conditionalSpecification_conditionalBranches,
+    conditionalSpecification_defaultBranch,
+
+    -- ** ConversationLogSettings
+    conversationLogSettings_audioLogSettings,
+    conversationLogSettings_textLogSettings,
+
+    -- ** CustomPayload
+    customPayload_value,
+
+    -- ** CustomVocabularyEntryId
+    customVocabularyEntryId_itemId,
+
+    -- ** CustomVocabularyExportSpecification
+    customVocabularyExportSpecification_botId,
+    customVocabularyExportSpecification_botVersion,
+    customVocabularyExportSpecification_localeId,
+
+    -- ** CustomVocabularyImportSpecification
+    customVocabularyImportSpecification_botId,
+    customVocabularyImportSpecification_botVersion,
+    customVocabularyImportSpecification_localeId,
+
+    -- ** CustomVocabularyItem
+    customVocabularyItem_displayAs,
+    customVocabularyItem_weight,
+    customVocabularyItem_itemId,
+    customVocabularyItem_phrase,
+
+    -- ** DTMFSpecification
+    dTMFSpecification_maxLength,
+    dTMFSpecification_endTimeoutMs,
+    dTMFSpecification_deletionCharacter,
+    dTMFSpecification_endCharacter,
+
+    -- ** DataPrivacy
+    dataPrivacy_childDirected,
+
+    -- ** DateRangeFilter
+    dateRangeFilter_startDateTime,
+    dateRangeFilter_endDateTime,
+
+    -- ** DefaultConditionalBranch
+    defaultConditionalBranch_nextStep,
+    defaultConditionalBranch_response,
+
+    -- ** DialogAction
+    dialogAction_slotToElicit,
+    dialogAction_suppressNextMessage,
+    dialogAction_type,
+
+    -- ** DialogCodeHookInvocationSetting
+    dialogCodeHookInvocationSetting_invocationLabel,
+    dialogCodeHookInvocationSetting_enableCodeHookInvocation,
+    dialogCodeHookInvocationSetting_active,
+    dialogCodeHookInvocationSetting_postCodeHookSpecification,
+
+    -- ** DialogCodeHookSettings
+    dialogCodeHookSettings_enabled,
+
+    -- ** DialogState
+    dialogState_dialogAction,
+    dialogState_intent,
+    dialogState_sessionAttributes,
+
+    -- ** ElicitationCodeHookInvocationSetting
+    elicitationCodeHookInvocationSetting_invocationLabel,
+    elicitationCodeHookInvocationSetting_enableCodeHookInvocation,
+
+    -- ** EncryptionSetting
+    encryptionSetting_associatedTranscriptsPassword,
+    encryptionSetting_botLocaleExportPassword,
+    encryptionSetting_kmsKeyArn,
+
+    -- ** ExportFilter
+    exportFilter_name,
+    exportFilter_values,
+    exportFilter_operator,
+
+    -- ** ExportResourceSpecification
+    exportResourceSpecification_botExportSpecification,
+    exportResourceSpecification_botLocaleExportSpecification,
+    exportResourceSpecification_customVocabularyExportSpecification,
+
+    -- ** ExportSortBy
+    exportSortBy_attribute,
+    exportSortBy_order,
+
+    -- ** ExportSummary
+    exportSummary_creationDateTime,
+    exportSummary_exportId,
+    exportSummary_exportStatus,
+    exportSummary_fileFormat,
+    exportSummary_lastUpdatedDateTime,
+    exportSummary_resourceSpecification,
+
+    -- ** ExternalSourceSetting
+    externalSourceSetting_grammarSlotTypeSetting,
+
+    -- ** FailedCustomVocabularyItem
+    failedCustomVocabularyItem_errorCode,
+    failedCustomVocabularyItem_errorMessage,
+    failedCustomVocabularyItem_itemId,
+
+    -- ** FulfillmentCodeHookSettings
+    fulfillmentCodeHookSettings_active,
+    fulfillmentCodeHookSettings_fulfillmentUpdatesSpecification,
+    fulfillmentCodeHookSettings_postFulfillmentStatusSpecification,
+    fulfillmentCodeHookSettings_enabled,
+
+    -- ** FulfillmentStartResponseSpecification
+    fulfillmentStartResponseSpecification_allowInterrupt,
+    fulfillmentStartResponseSpecification_delayInSeconds,
+    fulfillmentStartResponseSpecification_messageGroups,
+
+    -- ** FulfillmentUpdateResponseSpecification
+    fulfillmentUpdateResponseSpecification_allowInterrupt,
+    fulfillmentUpdateResponseSpecification_frequencyInSeconds,
+    fulfillmentUpdateResponseSpecification_messageGroups,
+
+    -- ** FulfillmentUpdatesSpecification
+    fulfillmentUpdatesSpecification_startResponse,
+    fulfillmentUpdatesSpecification_timeoutInSeconds,
+    fulfillmentUpdatesSpecification_updateResponse,
+    fulfillmentUpdatesSpecification_active,
+
+    -- ** GrammarSlotTypeSetting
+    grammarSlotTypeSetting_source,
+
+    -- ** GrammarSlotTypeSource
+    grammarSlotTypeSource_kmsKeyArn,
+    grammarSlotTypeSource_s3BucketName,
+    grammarSlotTypeSource_s3ObjectKey,
+
+    -- ** ImageResponseCard
+    imageResponseCard_buttons,
+    imageResponseCard_imageUrl,
+    imageResponseCard_subtitle,
+    imageResponseCard_title,
+
+    -- ** ImportFilter
+    importFilter_name,
+    importFilter_values,
+    importFilter_operator,
+
+    -- ** ImportResourceSpecification
+    importResourceSpecification_botImportSpecification,
+    importResourceSpecification_botLocaleImportSpecification,
+    importResourceSpecification_customVocabularyImportSpecification,
+
+    -- ** ImportSortBy
+    importSortBy_attribute,
+    importSortBy_order,
+
+    -- ** ImportSummary
+    importSummary_creationDateTime,
+    importSummary_importId,
+    importSummary_importStatus,
+    importSummary_importedResourceId,
+    importSummary_importedResourceName,
+    importSummary_importedResourceType,
+    importSummary_lastUpdatedDateTime,
+    importSummary_mergeStrategy,
+
+    -- ** InitialResponseSetting
+    initialResponseSetting_codeHook,
+    initialResponseSetting_conditional,
+    initialResponseSetting_initialResponse,
+    initialResponseSetting_nextStep,
+
+    -- ** InputContext
+    inputContext_name,
+
+    -- ** IntentClosingSetting
+    intentClosingSetting_active,
+    intentClosingSetting_closingResponse,
+    intentClosingSetting_conditional,
+    intentClosingSetting_nextStep,
+
+    -- ** IntentConfirmationSetting
+    intentConfirmationSetting_active,
+    intentConfirmationSetting_codeHook,
+    intentConfirmationSetting_confirmationConditional,
+    intentConfirmationSetting_confirmationNextStep,
+    intentConfirmationSetting_confirmationResponse,
+    intentConfirmationSetting_declinationConditional,
+    intentConfirmationSetting_declinationNextStep,
+    intentConfirmationSetting_declinationResponse,
+    intentConfirmationSetting_elicitationCodeHook,
+    intentConfirmationSetting_failureConditional,
+    intentConfirmationSetting_failureNextStep,
+    intentConfirmationSetting_failureResponse,
+    intentConfirmationSetting_promptSpecification,
+
+    -- ** IntentFilter
+    intentFilter_name,
+    intentFilter_values,
+    intentFilter_operator,
+
+    -- ** IntentOverride
+    intentOverride_name,
+    intentOverride_slots,
+
+    -- ** IntentSortBy
+    intentSortBy_attribute,
+    intentSortBy_order,
+
+    -- ** IntentStatistics
+    intentStatistics_discoveredIntentCount,
+
+    -- ** IntentSummary
+    intentSummary_description,
+    intentSummary_inputContexts,
+    intentSummary_intentId,
+    intentSummary_intentName,
+    intentSummary_lastUpdatedDateTime,
+    intentSummary_outputContexts,
+    intentSummary_parentIntentSignature,
+
+    -- ** KendraConfiguration
+    kendraConfiguration_queryFilterString,
+    kendraConfiguration_queryFilterStringEnabled,
+    kendraConfiguration_kendraIndex,
+
+    -- ** LambdaCodeHook
+    lambdaCodeHook_lambdaARN,
+    lambdaCodeHook_codeHookInterfaceVersion,
+
+    -- ** LexTranscriptFilter
+    lexTranscriptFilter_dateRangeFilter,
+
+    -- ** Message
+    message_customPayload,
+    message_imageResponseCard,
+    message_plainTextMessage,
+    message_ssmlMessage,
+
+    -- ** MessageGroup
+    messageGroup_variations,
+    messageGroup_message,
+
+    -- ** MultipleValuesSetting
+    multipleValuesSetting_allowMultipleValues,
+
+    -- ** NewCustomVocabularyItem
+    newCustomVocabularyItem_displayAs,
+    newCustomVocabularyItem_weight,
+    newCustomVocabularyItem_phrase,
+
+    -- ** ObfuscationSetting
+    obfuscationSetting_obfuscationSettingType,
+
+    -- ** OutputContext
+    outputContext_name,
+    outputContext_timeToLiveInSeconds,
+    outputContext_turnsToLive,
+
+    -- ** PathFormat
+    pathFormat_objectPrefixes,
+
+    -- ** PlainTextMessage
+    plainTextMessage_value,
+
+    -- ** PostDialogCodeHookInvocationSpecification
+    postDialogCodeHookInvocationSpecification_failureConditional,
+    postDialogCodeHookInvocationSpecification_failureNextStep,
+    postDialogCodeHookInvocationSpecification_failureResponse,
+    postDialogCodeHookInvocationSpecification_successConditional,
+    postDialogCodeHookInvocationSpecification_successNextStep,
+    postDialogCodeHookInvocationSpecification_successResponse,
+    postDialogCodeHookInvocationSpecification_timeoutConditional,
+    postDialogCodeHookInvocationSpecification_timeoutNextStep,
+    postDialogCodeHookInvocationSpecification_timeoutResponse,
+
+    -- ** PostFulfillmentStatusSpecification
+    postFulfillmentStatusSpecification_failureConditional,
+    postFulfillmentStatusSpecification_failureNextStep,
+    postFulfillmentStatusSpecification_failureResponse,
+    postFulfillmentStatusSpecification_successConditional,
+    postFulfillmentStatusSpecification_successNextStep,
+    postFulfillmentStatusSpecification_successResponse,
+    postFulfillmentStatusSpecification_timeoutConditional,
+    postFulfillmentStatusSpecification_timeoutNextStep,
+    postFulfillmentStatusSpecification_timeoutResponse,
+
+    -- ** Principal
+    principal_arn,
+    principal_service,
+
+    -- ** PromptAttemptSpecification
+    promptAttemptSpecification_allowInterrupt,
+    promptAttemptSpecification_audioAndDTMFInputSpecification,
+    promptAttemptSpecification_textInputSpecification,
+    promptAttemptSpecification_allowedInputTypes,
+
+    -- ** PromptSpecification
+    promptSpecification_allowInterrupt,
+    promptSpecification_messageSelectionStrategy,
+    promptSpecification_promptAttemptsSpecification,
+    promptSpecification_messageGroups,
+    promptSpecification_maxRetries,
+
+    -- ** RecommendedIntentSummary
+    recommendedIntentSummary_intentId,
+    recommendedIntentSummary_intentName,
+    recommendedIntentSummary_sampleUtterancesCount,
+
+    -- ** RelativeAggregationDuration
+    relativeAggregationDuration_timeDimension,
+    relativeAggregationDuration_timeValue,
+
+    -- ** ResponseSpecification
+    responseSpecification_allowInterrupt,
+    responseSpecification_messageGroups,
+
+    -- ** S3BucketLogDestination
+    s3BucketLogDestination_kmsKeyArn,
+    s3BucketLogDestination_s3BucketArn,
+    s3BucketLogDestination_logPrefix,
+
+    -- ** S3BucketTranscriptSource
+    s3BucketTranscriptSource_kmsKeyArn,
+    s3BucketTranscriptSource_pathFormat,
+    s3BucketTranscriptSource_transcriptFilter,
+    s3BucketTranscriptSource_s3BucketName,
+    s3BucketTranscriptSource_transcriptFormat,
+
+    -- ** SSMLMessage
+    sSMLMessage_value,
+
+    -- ** SampleUtterance
+    sampleUtterance_utterance,
+
+    -- ** SampleValue
+    sampleValue_value,
+
+    -- ** SentimentAnalysisSettings
+    sentimentAnalysisSettings_detectSentiment,
+
+    -- ** SlotCaptureSetting
+    slotCaptureSetting_captureConditional,
+    slotCaptureSetting_captureNextStep,
+    slotCaptureSetting_captureResponse,
+    slotCaptureSetting_codeHook,
+    slotCaptureSetting_elicitationCodeHook,
+    slotCaptureSetting_failureConditional,
+    slotCaptureSetting_failureNextStep,
+    slotCaptureSetting_failureResponse,
+
+    -- ** SlotDefaultValue
+    slotDefaultValue_defaultValue,
+
+    -- ** SlotDefaultValueSpecification
+    slotDefaultValueSpecification_defaultValueList,
+
+    -- ** SlotFilter
+    slotFilter_name,
+    slotFilter_values,
+    slotFilter_operator,
+
+    -- ** SlotPriority
+    slotPriority_priority,
+    slotPriority_slotId,
+
+    -- ** SlotSortBy
+    slotSortBy_attribute,
+    slotSortBy_order,
+
+    -- ** SlotSummary
+    slotSummary_description,
+    slotSummary_lastUpdatedDateTime,
+    slotSummary_slotConstraint,
+    slotSummary_slotId,
+    slotSummary_slotName,
+    slotSummary_slotTypeId,
+    slotSummary_valueElicitationPromptSpecification,
+
+    -- ** SlotTypeFilter
+    slotTypeFilter_name,
+    slotTypeFilter_values,
+    slotTypeFilter_operator,
+
+    -- ** SlotTypeSortBy
+    slotTypeSortBy_attribute,
+    slotTypeSortBy_order,
+
+    -- ** SlotTypeStatistics
+    slotTypeStatistics_discoveredSlotTypeCount,
+
+    -- ** SlotTypeSummary
+    slotTypeSummary_description,
+    slotTypeSummary_lastUpdatedDateTime,
+    slotTypeSummary_parentSlotTypeSignature,
+    slotTypeSummary_slotTypeCategory,
+    slotTypeSummary_slotTypeId,
+    slotTypeSummary_slotTypeName,
+
+    -- ** SlotTypeValue
+    slotTypeValue_sampleValue,
+    slotTypeValue_synonyms,
+
+    -- ** SlotValue
+    slotValue_interpretedValue,
+
+    -- ** SlotValueElicitationSetting
+    slotValueElicitationSetting_defaultValueSpecification,
+    slotValueElicitationSetting_promptSpecification,
+    slotValueElicitationSetting_sampleUtterances,
+    slotValueElicitationSetting_slotCaptureSetting,
+    slotValueElicitationSetting_waitAndContinueSpecification,
+    slotValueElicitationSetting_slotConstraint,
+
+    -- ** SlotValueOverride
+    slotValueOverride_shape,
+    slotValueOverride_value,
+    slotValueOverride_values,
+
+    -- ** SlotValueRegexFilter
+    slotValueRegexFilter_pattern,
+
+    -- ** SlotValueSelectionSetting
+    slotValueSelectionSetting_advancedRecognitionSetting,
+    slotValueSelectionSetting_regexFilter,
+    slotValueSelectionSetting_resolutionStrategy,
+
+    -- ** Specifications
+    specifications_slotTypeId,
+    specifications_valueElicitationSetting,
+
+    -- ** StillWaitingResponseSpecification
+    stillWaitingResponseSpecification_allowInterrupt,
+    stillWaitingResponseSpecification_messageGroups,
+    stillWaitingResponseSpecification_frequencyInSeconds,
+    stillWaitingResponseSpecification_timeoutInSeconds,
+
+    -- ** SubSlotSetting
+    subSlotSetting_expression,
+    subSlotSetting_slotSpecifications,
+
+    -- ** SubSlotTypeComposition
+    subSlotTypeComposition_name,
+    subSlotTypeComposition_slotTypeId,
+
+    -- ** SubSlotValueElicitationSetting
+    subSlotValueElicitationSetting_defaultValueSpecification,
+    subSlotValueElicitationSetting_sampleUtterances,
+    subSlotValueElicitationSetting_waitAndContinueSpecification,
+    subSlotValueElicitationSetting_promptSpecification,
+
+    -- ** TextInputSpecification
+    textInputSpecification_startTimeoutMs,
+
+    -- ** TextLogDestination
+    textLogDestination_cloudWatch,
+
+    -- ** TextLogSetting
+    textLogSetting_enabled,
+    textLogSetting_destination,
+
+    -- ** TranscriptFilter
+    transcriptFilter_lexTranscriptFilter,
+
+    -- ** TranscriptSourceSetting
+    transcriptSourceSetting_s3BucketTranscriptSource,
+
+    -- ** UtteranceAggregationDuration
+    utteranceAggregationDuration_relativeAggregationDuration,
+
+    -- ** VoiceSettings
+    voiceSettings_engine,
+    voiceSettings_voiceId,
+
+    -- ** WaitAndContinueSpecification
+    waitAndContinueSpecification_active,
+    waitAndContinueSpecification_stillWaitingResponse,
+    waitAndContinueSpecification_waitingResponse,
+    waitAndContinueSpecification_continueResponse,
+  )
+where
+
+import Amazonka.LexV2Models.BatchCreateCustomVocabularyItem
+import Amazonka.LexV2Models.BatchDeleteCustomVocabularyItem
+import Amazonka.LexV2Models.BatchUpdateCustomVocabularyItem
+import Amazonka.LexV2Models.BuildBotLocale
+import Amazonka.LexV2Models.CreateBot
+import Amazonka.LexV2Models.CreateBotAlias
+import Amazonka.LexV2Models.CreateBotLocale
+import Amazonka.LexV2Models.CreateBotVersion
+import Amazonka.LexV2Models.CreateExport
+import Amazonka.LexV2Models.CreateIntent
+import Amazonka.LexV2Models.CreateResourcePolicy
+import Amazonka.LexV2Models.CreateResourcePolicyStatement
+import Amazonka.LexV2Models.CreateSlot
+import Amazonka.LexV2Models.CreateSlotType
+import Amazonka.LexV2Models.CreateUploadUrl
+import Amazonka.LexV2Models.DeleteBot
+import Amazonka.LexV2Models.DeleteBotAlias
+import Amazonka.LexV2Models.DeleteBotLocale
+import Amazonka.LexV2Models.DeleteBotVersion
+import Amazonka.LexV2Models.DeleteCustomVocabulary
+import Amazonka.LexV2Models.DeleteExport
+import Amazonka.LexV2Models.DeleteImport
+import Amazonka.LexV2Models.DeleteIntent
+import Amazonka.LexV2Models.DeleteResourcePolicy
+import Amazonka.LexV2Models.DeleteResourcePolicyStatement
+import Amazonka.LexV2Models.DeleteSlot
+import Amazonka.LexV2Models.DeleteSlotType
+import Amazonka.LexV2Models.DeleteUtterances
+import Amazonka.LexV2Models.DescribeBot
+import Amazonka.LexV2Models.DescribeBotAlias
+import Amazonka.LexV2Models.DescribeBotLocale
+import Amazonka.LexV2Models.DescribeBotRecommendation
+import Amazonka.LexV2Models.DescribeBotVersion
+import Amazonka.LexV2Models.DescribeCustomVocabularyMetadata
+import Amazonka.LexV2Models.DescribeExport
+import Amazonka.LexV2Models.DescribeImport
+import Amazonka.LexV2Models.DescribeIntent
+import Amazonka.LexV2Models.DescribeResourcePolicy
+import Amazonka.LexV2Models.DescribeSlot
+import Amazonka.LexV2Models.DescribeSlotType
+import Amazonka.LexV2Models.ListAggregatedUtterances
+import Amazonka.LexV2Models.ListBotAliases
+import Amazonka.LexV2Models.ListBotLocales
+import Amazonka.LexV2Models.ListBotRecommendations
+import Amazonka.LexV2Models.ListBotVersions
+import Amazonka.LexV2Models.ListBots
+import Amazonka.LexV2Models.ListBuiltInIntents
+import Amazonka.LexV2Models.ListBuiltInSlotTypes
+import Amazonka.LexV2Models.ListCustomVocabularyItems
+import Amazonka.LexV2Models.ListExports
+import Amazonka.LexV2Models.ListImports
+import Amazonka.LexV2Models.ListIntents
+import Amazonka.LexV2Models.ListRecommendedIntents
+import Amazonka.LexV2Models.ListSlotTypes
+import Amazonka.LexV2Models.ListSlots
+import Amazonka.LexV2Models.ListTagsForResource
+import Amazonka.LexV2Models.SearchAssociatedTranscripts
+import Amazonka.LexV2Models.StartBotRecommendation
+import Amazonka.LexV2Models.StartImport
+import Amazonka.LexV2Models.StopBotRecommendation
+import Amazonka.LexV2Models.TagResource
+import Amazonka.LexV2Models.Types.AdvancedRecognitionSetting
+import Amazonka.LexV2Models.Types.AggregatedUtterancesFilter
+import Amazonka.LexV2Models.Types.AggregatedUtterancesSortBy
+import Amazonka.LexV2Models.Types.AggregatedUtterancesSummary
+import Amazonka.LexV2Models.Types.AllowedInputTypes
+import Amazonka.LexV2Models.Types.AssociatedTranscript
+import Amazonka.LexV2Models.Types.AssociatedTranscriptFilter
+import Amazonka.LexV2Models.Types.AudioAndDTMFInputSpecification
+import Amazonka.LexV2Models.Types.AudioLogDestination
+import Amazonka.LexV2Models.Types.AudioLogSetting
+import Amazonka.LexV2Models.Types.AudioSpecification
+import Amazonka.LexV2Models.Types.BotAliasHistoryEvent
+import Amazonka.LexV2Models.Types.BotAliasLocaleSettings
+import Amazonka.LexV2Models.Types.BotAliasSummary
+import Amazonka.LexV2Models.Types.BotExportSpecification
+import Amazonka.LexV2Models.Types.BotFilter
+import Amazonka.LexV2Models.Types.BotImportSpecification
+import Amazonka.LexV2Models.Types.BotLocaleExportSpecification
+import Amazonka.LexV2Models.Types.BotLocaleFilter
+import Amazonka.LexV2Models.Types.BotLocaleHistoryEvent
+import Amazonka.LexV2Models.Types.BotLocaleImportSpecification
+import Amazonka.LexV2Models.Types.BotLocaleSortBy
+import Amazonka.LexV2Models.Types.BotLocaleSummary
+import Amazonka.LexV2Models.Types.BotRecommendationResultStatistics
+import Amazonka.LexV2Models.Types.BotRecommendationResults
+import Amazonka.LexV2Models.Types.BotRecommendationSummary
+import Amazonka.LexV2Models.Types.BotSortBy
+import Amazonka.LexV2Models.Types.BotSummary
+import Amazonka.LexV2Models.Types.BotVersionLocaleDetails
+import Amazonka.LexV2Models.Types.BotVersionSortBy
+import Amazonka.LexV2Models.Types.BotVersionSummary
+import Amazonka.LexV2Models.Types.BuiltInIntentSortBy
+import Amazonka.LexV2Models.Types.BuiltInIntentSummary
+import Amazonka.LexV2Models.Types.BuiltInSlotTypeSortBy
+import Amazonka.LexV2Models.Types.BuiltInSlotTypeSummary
+import Amazonka.LexV2Models.Types.Button
+import Amazonka.LexV2Models.Types.CloudWatchLogGroupLogDestination
+import Amazonka.LexV2Models.Types.CodeHookSpecification
+import Amazonka.LexV2Models.Types.CompositeSlotTypeSetting
+import Amazonka.LexV2Models.Types.Condition
+import Amazonka.LexV2Models.Types.ConditionalBranch
+import Amazonka.LexV2Models.Types.ConditionalSpecification
+import Amazonka.LexV2Models.Types.ConversationLogSettings
+import Amazonka.LexV2Models.Types.CustomPayload
+import Amazonka.LexV2Models.Types.CustomVocabularyEntryId
+import Amazonka.LexV2Models.Types.CustomVocabularyExportSpecification
+import Amazonka.LexV2Models.Types.CustomVocabularyImportSpecification
+import Amazonka.LexV2Models.Types.CustomVocabularyItem
+import Amazonka.LexV2Models.Types.DTMFSpecification
+import Amazonka.LexV2Models.Types.DataPrivacy
+import Amazonka.LexV2Models.Types.DateRangeFilter
+import Amazonka.LexV2Models.Types.DefaultConditionalBranch
+import Amazonka.LexV2Models.Types.DialogAction
+import Amazonka.LexV2Models.Types.DialogCodeHookInvocationSetting
+import Amazonka.LexV2Models.Types.DialogCodeHookSettings
+import Amazonka.LexV2Models.Types.DialogState
+import Amazonka.LexV2Models.Types.ElicitationCodeHookInvocationSetting
+import Amazonka.LexV2Models.Types.EncryptionSetting
+import Amazonka.LexV2Models.Types.ExportFilter
+import Amazonka.LexV2Models.Types.ExportResourceSpecification
+import Amazonka.LexV2Models.Types.ExportSortBy
+import Amazonka.LexV2Models.Types.ExportSummary
+import Amazonka.LexV2Models.Types.ExternalSourceSetting
+import Amazonka.LexV2Models.Types.FailedCustomVocabularyItem
+import Amazonka.LexV2Models.Types.FulfillmentCodeHookSettings
+import Amazonka.LexV2Models.Types.FulfillmentStartResponseSpecification
+import Amazonka.LexV2Models.Types.FulfillmentUpdateResponseSpecification
+import Amazonka.LexV2Models.Types.FulfillmentUpdatesSpecification
+import Amazonka.LexV2Models.Types.GrammarSlotTypeSetting
+import Amazonka.LexV2Models.Types.GrammarSlotTypeSource
+import Amazonka.LexV2Models.Types.ImageResponseCard
+import Amazonka.LexV2Models.Types.ImportFilter
+import Amazonka.LexV2Models.Types.ImportResourceSpecification
+import Amazonka.LexV2Models.Types.ImportSortBy
+import Amazonka.LexV2Models.Types.ImportSummary
+import Amazonka.LexV2Models.Types.InitialResponseSetting
+import Amazonka.LexV2Models.Types.InputContext
+import Amazonka.LexV2Models.Types.IntentClosingSetting
+import Amazonka.LexV2Models.Types.IntentConfirmationSetting
+import Amazonka.LexV2Models.Types.IntentFilter
+import Amazonka.LexV2Models.Types.IntentOverride
+import Amazonka.LexV2Models.Types.IntentSortBy
+import Amazonka.LexV2Models.Types.IntentStatistics
+import Amazonka.LexV2Models.Types.IntentSummary
+import Amazonka.LexV2Models.Types.KendraConfiguration
+import Amazonka.LexV2Models.Types.LambdaCodeHook
+import Amazonka.LexV2Models.Types.LexTranscriptFilter
+import Amazonka.LexV2Models.Types.Message
+import Amazonka.LexV2Models.Types.MessageGroup
+import Amazonka.LexV2Models.Types.MultipleValuesSetting
+import Amazonka.LexV2Models.Types.NewCustomVocabularyItem
+import Amazonka.LexV2Models.Types.ObfuscationSetting
+import Amazonka.LexV2Models.Types.OutputContext
+import Amazonka.LexV2Models.Types.PathFormat
+import Amazonka.LexV2Models.Types.PlainTextMessage
+import Amazonka.LexV2Models.Types.PostDialogCodeHookInvocationSpecification
+import Amazonka.LexV2Models.Types.PostFulfillmentStatusSpecification
+import Amazonka.LexV2Models.Types.Principal
+import Amazonka.LexV2Models.Types.PromptAttemptSpecification
+import Amazonka.LexV2Models.Types.PromptSpecification
+import Amazonka.LexV2Models.Types.RecommendedIntentSummary
+import Amazonka.LexV2Models.Types.RelativeAggregationDuration
+import Amazonka.LexV2Models.Types.ResponseSpecification
+import Amazonka.LexV2Models.Types.S3BucketLogDestination
+import Amazonka.LexV2Models.Types.S3BucketTranscriptSource
+import Amazonka.LexV2Models.Types.SSMLMessage
+import Amazonka.LexV2Models.Types.SampleUtterance
+import Amazonka.LexV2Models.Types.SampleValue
+import Amazonka.LexV2Models.Types.SentimentAnalysisSettings
+import Amazonka.LexV2Models.Types.SlotCaptureSetting
+import Amazonka.LexV2Models.Types.SlotDefaultValue
+import Amazonka.LexV2Models.Types.SlotDefaultValueSpecification
+import Amazonka.LexV2Models.Types.SlotFilter
+import Amazonka.LexV2Models.Types.SlotPriority
+import Amazonka.LexV2Models.Types.SlotSortBy
+import Amazonka.LexV2Models.Types.SlotSummary
+import Amazonka.LexV2Models.Types.SlotTypeFilter
+import Amazonka.LexV2Models.Types.SlotTypeSortBy
+import Amazonka.LexV2Models.Types.SlotTypeStatistics
+import Amazonka.LexV2Models.Types.SlotTypeSummary
+import Amazonka.LexV2Models.Types.SlotTypeValue
+import Amazonka.LexV2Models.Types.SlotValue
+import Amazonka.LexV2Models.Types.SlotValueElicitationSetting
+import Amazonka.LexV2Models.Types.SlotValueOverride
+import Amazonka.LexV2Models.Types.SlotValueRegexFilter
+import Amazonka.LexV2Models.Types.SlotValueSelectionSetting
+import Amazonka.LexV2Models.Types.Specifications
+import Amazonka.LexV2Models.Types.StillWaitingResponseSpecification
+import Amazonka.LexV2Models.Types.SubSlotSetting
+import Amazonka.LexV2Models.Types.SubSlotTypeComposition
+import Amazonka.LexV2Models.Types.SubSlotValueElicitationSetting
+import Amazonka.LexV2Models.Types.TextInputSpecification
+import Amazonka.LexV2Models.Types.TextLogDestination
+import Amazonka.LexV2Models.Types.TextLogSetting
+import Amazonka.LexV2Models.Types.TranscriptFilter
+import Amazonka.LexV2Models.Types.TranscriptSourceSetting
+import Amazonka.LexV2Models.Types.UtteranceAggregationDuration
+import Amazonka.LexV2Models.Types.VoiceSettings
+import Amazonka.LexV2Models.Types.WaitAndContinueSpecification
+import Amazonka.LexV2Models.UntagResource
+import Amazonka.LexV2Models.UpdateBot
+import Amazonka.LexV2Models.UpdateBotAlias
+import Amazonka.LexV2Models.UpdateBotLocale
+import Amazonka.LexV2Models.UpdateBotRecommendation
+import Amazonka.LexV2Models.UpdateExport
+import Amazonka.LexV2Models.UpdateIntent
+import Amazonka.LexV2Models.UpdateResourcePolicy
+import Amazonka.LexV2Models.UpdateSlot
+import Amazonka.LexV2Models.UpdateSlotType
diff --git a/gen/Amazonka/LexV2Models/ListAggregatedUtterances.hs b/gen/Amazonka/LexV2Models/ListAggregatedUtterances.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/ListAggregatedUtterances.hs
@@ -0,0 +1,525 @@
+{-# 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.LexV2Models.ListAggregatedUtterances
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Provides a list of utterances that users have sent to the bot.
+--
+-- Utterances are aggregated by the text of the utterance. For example, all
+-- instances where customers used the phrase \"I want to order pizza\" are
+-- aggregated into the same line in the response.
+--
+-- You can see both detected utterances and missed utterances. A detected
+-- utterance is where the bot properly recognized the utterance and
+-- activated the associated intent. A missed utterance was not recognized
+-- by the bot and didn\'t activate an intent.
+--
+-- Utterances can be aggregated for a bot alias or for a bot version, but
+-- not both at the same time.
+--
+-- Utterances statistics are not generated under the following conditions:
+--
+-- -   The @childDirected@ field was set to true when the bot was created.
+--
+-- -   You are using slot obfuscation with one or more slots.
+--
+-- -   You opted out of participating in improving Amazon Lex.
+module Amazonka.LexV2Models.ListAggregatedUtterances
+  ( -- * Creating a Request
+    ListAggregatedUtterances (..),
+    newListAggregatedUtterances,
+
+    -- * Request Lenses
+    listAggregatedUtterances_botAliasId,
+    listAggregatedUtterances_botVersion,
+    listAggregatedUtterances_filters,
+    listAggregatedUtterances_maxResults,
+    listAggregatedUtterances_nextToken,
+    listAggregatedUtterances_sortBy,
+    listAggregatedUtterances_botId,
+    listAggregatedUtterances_localeId,
+    listAggregatedUtterances_aggregationDuration,
+
+    -- * Destructuring the Response
+    ListAggregatedUtterancesResponse (..),
+    newListAggregatedUtterancesResponse,
+
+    -- * Response Lenses
+    listAggregatedUtterancesResponse_aggregatedUtterancesSummaries,
+    listAggregatedUtterancesResponse_aggregationDuration,
+    listAggregatedUtterancesResponse_aggregationLastRefreshedDateTime,
+    listAggregatedUtterancesResponse_aggregationWindowEndTime,
+    listAggregatedUtterancesResponse_aggregationWindowStartTime,
+    listAggregatedUtterancesResponse_botAliasId,
+    listAggregatedUtterancesResponse_botId,
+    listAggregatedUtterancesResponse_botVersion,
+    listAggregatedUtterancesResponse_localeId,
+    listAggregatedUtterancesResponse_nextToken,
+    listAggregatedUtterancesResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LexV2Models.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListAggregatedUtterances' smart constructor.
+data ListAggregatedUtterances = ListAggregatedUtterances'
+  { -- | The identifier of the bot alias associated with this request. If you
+    -- specify the bot alias, you can\'t specify the bot version.
+    botAliasId :: Prelude.Maybe Prelude.Text,
+    -- | The identifier of the bot version associated with this request. If you
+    -- specify the bot version, you can\'t specify the bot alias.
+    botVersion :: Prelude.Maybe Prelude.Text,
+    -- | Provides the specification of a filter used to limit the utterances in
+    -- the response to only those that match the filter specification. You can
+    -- only specify one filter and one string to filter on.
+    filters :: Prelude.Maybe (Prelude.NonEmpty AggregatedUtterancesFilter),
+    -- | The maximum number of utterances to return in each page of results. If
+    -- there are fewer results than the maximum page size, only the actual
+    -- number of results are returned. If you don\'t specify the @maxResults@
+    -- parameter, 1,000 results are returned.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | If the response from the @ListAggregatedUtterances@ operation contains
+    -- more results that specified in the @maxResults@ parameter, a token is
+    -- returned in the response. Use that token in the @nextToken@ parameter to
+    -- return the next page of results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | Specifies sorting parameters for the list of utterances. You can sort by
+    -- the hit count, the missed count, or the number of distinct sessions the
+    -- utterance appeared in.
+    sortBy :: Prelude.Maybe AggregatedUtterancesSortBy,
+    -- | The unique identifier of the bot associated with this request.
+    botId :: Prelude.Text,
+    -- | The identifier of the language and locale where the utterances were
+    -- collected. For more information, see
+    -- <https://docs.aws.amazon.com/lexv2/latest/dg/how-languages.html Supported languages>.
+    localeId :: Prelude.Text,
+    -- | The time window for aggregating the utterance information. You can
+    -- specify a time between one hour and two weeks.
+    aggregationDuration :: UtteranceAggregationDuration
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListAggregatedUtterances' 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:
+--
+-- 'botAliasId', 'listAggregatedUtterances_botAliasId' - The identifier of the bot alias associated with this request. If you
+-- specify the bot alias, you can\'t specify the bot version.
+--
+-- 'botVersion', 'listAggregatedUtterances_botVersion' - The identifier of the bot version associated with this request. If you
+-- specify the bot version, you can\'t specify the bot alias.
+--
+-- 'filters', 'listAggregatedUtterances_filters' - Provides the specification of a filter used to limit the utterances in
+-- the response to only those that match the filter specification. You can
+-- only specify one filter and one string to filter on.
+--
+-- 'maxResults', 'listAggregatedUtterances_maxResults' - The maximum number of utterances to return in each page of results. If
+-- there are fewer results than the maximum page size, only the actual
+-- number of results are returned. If you don\'t specify the @maxResults@
+-- parameter, 1,000 results are returned.
+--
+-- 'nextToken', 'listAggregatedUtterances_nextToken' - If the response from the @ListAggregatedUtterances@ operation contains
+-- more results that specified in the @maxResults@ parameter, a token is
+-- returned in the response. Use that token in the @nextToken@ parameter to
+-- return the next page of results.
+--
+-- 'sortBy', 'listAggregatedUtterances_sortBy' - Specifies sorting parameters for the list of utterances. You can sort by
+-- the hit count, the missed count, or the number of distinct sessions the
+-- utterance appeared in.
+--
+-- 'botId', 'listAggregatedUtterances_botId' - The unique identifier of the bot associated with this request.
+--
+-- 'localeId', 'listAggregatedUtterances_localeId' - The identifier of the language and locale where the utterances were
+-- collected. For more information, see
+-- <https://docs.aws.amazon.com/lexv2/latest/dg/how-languages.html Supported languages>.
+--
+-- 'aggregationDuration', 'listAggregatedUtterances_aggregationDuration' - The time window for aggregating the utterance information. You can
+-- specify a time between one hour and two weeks.
+newListAggregatedUtterances ::
+  -- | 'botId'
+  Prelude.Text ->
+  -- | 'localeId'
+  Prelude.Text ->
+  -- | 'aggregationDuration'
+  UtteranceAggregationDuration ->
+  ListAggregatedUtterances
+newListAggregatedUtterances
+  pBotId_
+  pLocaleId_
+  pAggregationDuration_ =
+    ListAggregatedUtterances'
+      { botAliasId =
+          Prelude.Nothing,
+        botVersion = Prelude.Nothing,
+        filters = Prelude.Nothing,
+        maxResults = Prelude.Nothing,
+        nextToken = Prelude.Nothing,
+        sortBy = Prelude.Nothing,
+        botId = pBotId_,
+        localeId = pLocaleId_,
+        aggregationDuration = pAggregationDuration_
+      }
+
+-- | The identifier of the bot alias associated with this request. If you
+-- specify the bot alias, you can\'t specify the bot version.
+listAggregatedUtterances_botAliasId :: Lens.Lens' ListAggregatedUtterances (Prelude.Maybe Prelude.Text)
+listAggregatedUtterances_botAliasId = Lens.lens (\ListAggregatedUtterances' {botAliasId} -> botAliasId) (\s@ListAggregatedUtterances' {} a -> s {botAliasId = a} :: ListAggregatedUtterances)
+
+-- | The identifier of the bot version associated with this request. If you
+-- specify the bot version, you can\'t specify the bot alias.
+listAggregatedUtterances_botVersion :: Lens.Lens' ListAggregatedUtterances (Prelude.Maybe Prelude.Text)
+listAggregatedUtterances_botVersion = Lens.lens (\ListAggregatedUtterances' {botVersion} -> botVersion) (\s@ListAggregatedUtterances' {} a -> s {botVersion = a} :: ListAggregatedUtterances)
+
+-- | Provides the specification of a filter used to limit the utterances in
+-- the response to only those that match the filter specification. You can
+-- only specify one filter and one string to filter on.
+listAggregatedUtterances_filters :: Lens.Lens' ListAggregatedUtterances (Prelude.Maybe (Prelude.NonEmpty AggregatedUtterancesFilter))
+listAggregatedUtterances_filters = Lens.lens (\ListAggregatedUtterances' {filters} -> filters) (\s@ListAggregatedUtterances' {} a -> s {filters = a} :: ListAggregatedUtterances) Prelude.. Lens.mapping Lens.coerced
+
+-- | The maximum number of utterances to return in each page of results. If
+-- there are fewer results than the maximum page size, only the actual
+-- number of results are returned. If you don\'t specify the @maxResults@
+-- parameter, 1,000 results are returned.
+listAggregatedUtterances_maxResults :: Lens.Lens' ListAggregatedUtterances (Prelude.Maybe Prelude.Natural)
+listAggregatedUtterances_maxResults = Lens.lens (\ListAggregatedUtterances' {maxResults} -> maxResults) (\s@ListAggregatedUtterances' {} a -> s {maxResults = a} :: ListAggregatedUtterances)
+
+-- | If the response from the @ListAggregatedUtterances@ operation contains
+-- more results that specified in the @maxResults@ parameter, a token is
+-- returned in the response. Use that token in the @nextToken@ parameter to
+-- return the next page of results.
+listAggregatedUtterances_nextToken :: Lens.Lens' ListAggregatedUtterances (Prelude.Maybe Prelude.Text)
+listAggregatedUtterances_nextToken = Lens.lens (\ListAggregatedUtterances' {nextToken} -> nextToken) (\s@ListAggregatedUtterances' {} a -> s {nextToken = a} :: ListAggregatedUtterances)
+
+-- | Specifies sorting parameters for the list of utterances. You can sort by
+-- the hit count, the missed count, or the number of distinct sessions the
+-- utterance appeared in.
+listAggregatedUtterances_sortBy :: Lens.Lens' ListAggregatedUtterances (Prelude.Maybe AggregatedUtterancesSortBy)
+listAggregatedUtterances_sortBy = Lens.lens (\ListAggregatedUtterances' {sortBy} -> sortBy) (\s@ListAggregatedUtterances' {} a -> s {sortBy = a} :: ListAggregatedUtterances)
+
+-- | The unique identifier of the bot associated with this request.
+listAggregatedUtterances_botId :: Lens.Lens' ListAggregatedUtterances Prelude.Text
+listAggregatedUtterances_botId = Lens.lens (\ListAggregatedUtterances' {botId} -> botId) (\s@ListAggregatedUtterances' {} a -> s {botId = a} :: ListAggregatedUtterances)
+
+-- | The identifier of the language and locale where the utterances were
+-- collected. For more information, see
+-- <https://docs.aws.amazon.com/lexv2/latest/dg/how-languages.html Supported languages>.
+listAggregatedUtterances_localeId :: Lens.Lens' ListAggregatedUtterances Prelude.Text
+listAggregatedUtterances_localeId = Lens.lens (\ListAggregatedUtterances' {localeId} -> localeId) (\s@ListAggregatedUtterances' {} a -> s {localeId = a} :: ListAggregatedUtterances)
+
+-- | The time window for aggregating the utterance information. You can
+-- specify a time between one hour and two weeks.
+listAggregatedUtterances_aggregationDuration :: Lens.Lens' ListAggregatedUtterances UtteranceAggregationDuration
+listAggregatedUtterances_aggregationDuration = Lens.lens (\ListAggregatedUtterances' {aggregationDuration} -> aggregationDuration) (\s@ListAggregatedUtterances' {} a -> s {aggregationDuration = a} :: ListAggregatedUtterances)
+
+instance Core.AWSRequest ListAggregatedUtterances where
+  type
+    AWSResponse ListAggregatedUtterances =
+      ListAggregatedUtterancesResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListAggregatedUtterancesResponse'
+            Prelude.<$> ( x
+                            Data..?> "aggregatedUtterancesSummaries"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (x Data..?> "aggregationDuration")
+            Prelude.<*> (x Data..?> "aggregationLastRefreshedDateTime")
+            Prelude.<*> (x Data..?> "aggregationWindowEndTime")
+            Prelude.<*> (x Data..?> "aggregationWindowStartTime")
+            Prelude.<*> (x Data..?> "botAliasId")
+            Prelude.<*> (x Data..?> "botId")
+            Prelude.<*> (x Data..?> "botVersion")
+            Prelude.<*> (x Data..?> "localeId")
+            Prelude.<*> (x Data..?> "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListAggregatedUtterances where
+  hashWithSalt _salt ListAggregatedUtterances' {..} =
+    _salt
+      `Prelude.hashWithSalt` botAliasId
+      `Prelude.hashWithSalt` botVersion
+      `Prelude.hashWithSalt` filters
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` sortBy
+      `Prelude.hashWithSalt` botId
+      `Prelude.hashWithSalt` localeId
+      `Prelude.hashWithSalt` aggregationDuration
+
+instance Prelude.NFData ListAggregatedUtterances where
+  rnf ListAggregatedUtterances' {..} =
+    Prelude.rnf botAliasId
+      `Prelude.seq` Prelude.rnf botVersion
+      `Prelude.seq` Prelude.rnf filters
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf sortBy
+      `Prelude.seq` Prelude.rnf botId
+      `Prelude.seq` Prelude.rnf localeId
+      `Prelude.seq` Prelude.rnf aggregationDuration
+
+instance Data.ToHeaders ListAggregatedUtterances where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ListAggregatedUtterances where
+  toJSON ListAggregatedUtterances' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("botAliasId" Data..=) Prelude.<$> botAliasId,
+            ("botVersion" Data..=) Prelude.<$> botVersion,
+            ("filters" Data..=) Prelude.<$> filters,
+            ("maxResults" Data..=) Prelude.<$> maxResults,
+            ("nextToken" Data..=) Prelude.<$> nextToken,
+            ("sortBy" Data..=) Prelude.<$> sortBy,
+            Prelude.Just ("localeId" Data..= localeId),
+            Prelude.Just
+              ("aggregationDuration" Data..= aggregationDuration)
+          ]
+      )
+
+instance Data.ToPath ListAggregatedUtterances where
+  toPath ListAggregatedUtterances' {..} =
+    Prelude.mconcat
+      ["/bots/", Data.toBS botId, "/aggregatedutterances/"]
+
+instance Data.ToQuery ListAggregatedUtterances where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListAggregatedUtterancesResponse' smart constructor.
+data ListAggregatedUtterancesResponse = ListAggregatedUtterancesResponse'
+  { -- | Summaries of the aggregated utterance data. Each response contains
+    -- information about the number of times that the utterance was seen during
+    -- the time period, whether it was detected or missed, and when it was seen
+    -- during the time period.
+    aggregatedUtterancesSummaries :: Prelude.Maybe [AggregatedUtterancesSummary],
+    -- | The time period used to aggregate the utterance data.
+    aggregationDuration :: Prelude.Maybe UtteranceAggregationDuration,
+    -- | The last date and time that the aggregated data was collected. The time
+    -- period depends on the length of the aggregation window.
+    --
+    -- -   __Hours__ - for 1 hour time window, every half hour; otherwise every
+    --     hour.
+    --
+    -- -   __Days__ - every 6 hours
+    --
+    -- -   __Weeks__ - for a one week time window, every 12 hours; otherwise,
+    --     every day
+    aggregationLastRefreshedDateTime :: Prelude.Maybe Data.POSIX,
+    -- | The date and time that the aggregation window ends. Only data collected
+    -- between the start time and the end time are returned in the results.
+    aggregationWindowEndTime :: Prelude.Maybe Data.POSIX,
+    -- | The date and time that the aggregation window begins. Only data
+    -- collected after this time is returned in the results.
+    aggregationWindowStartTime :: Prelude.Maybe Data.POSIX,
+    -- | The identifier of the bot alias that contains the utterances. If you
+    -- specified the bot version, the bot alias ID isn\'t returned.
+    botAliasId :: Prelude.Maybe Prelude.Text,
+    -- | The identifier of the bot that contains the utterances.
+    botId :: Prelude.Maybe Prelude.Text,
+    -- | The identifier of the bot version that contains the utterances. If you
+    -- specified the bot alias, the bot version isn\'t returned.
+    botVersion :: Prelude.Maybe Prelude.Text,
+    -- | The identifier of the language and locale that the utterances are in.
+    localeId :: Prelude.Maybe Prelude.Text,
+    -- | A token that indicates whether there are more results to return in a
+    -- response to the @ListAggregatedUtterances@ operation. If the @nextToken@
+    -- field is present, you send the contents as the @nextToken@ parameter of
+    -- a @ListAggregatedUtterances@ operation request to get the next page of
+    -- results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListAggregatedUtterancesResponse' 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:
+--
+-- 'aggregatedUtterancesSummaries', 'listAggregatedUtterancesResponse_aggregatedUtterancesSummaries' - Summaries of the aggregated utterance data. Each response contains
+-- information about the number of times that the utterance was seen during
+-- the time period, whether it was detected or missed, and when it was seen
+-- during the time period.
+--
+-- 'aggregationDuration', 'listAggregatedUtterancesResponse_aggregationDuration' - The time period used to aggregate the utterance data.
+--
+-- 'aggregationLastRefreshedDateTime', 'listAggregatedUtterancesResponse_aggregationLastRefreshedDateTime' - The last date and time that the aggregated data was collected. The time
+-- period depends on the length of the aggregation window.
+--
+-- -   __Hours__ - for 1 hour time window, every half hour; otherwise every
+--     hour.
+--
+-- -   __Days__ - every 6 hours
+--
+-- -   __Weeks__ - for a one week time window, every 12 hours; otherwise,
+--     every day
+--
+-- 'aggregationWindowEndTime', 'listAggregatedUtterancesResponse_aggregationWindowEndTime' - The date and time that the aggregation window ends. Only data collected
+-- between the start time and the end time are returned in the results.
+--
+-- 'aggregationWindowStartTime', 'listAggregatedUtterancesResponse_aggregationWindowStartTime' - The date and time that the aggregation window begins. Only data
+-- collected after this time is returned in the results.
+--
+-- 'botAliasId', 'listAggregatedUtterancesResponse_botAliasId' - The identifier of the bot alias that contains the utterances. If you
+-- specified the bot version, the bot alias ID isn\'t returned.
+--
+-- 'botId', 'listAggregatedUtterancesResponse_botId' - The identifier of the bot that contains the utterances.
+--
+-- 'botVersion', 'listAggregatedUtterancesResponse_botVersion' - The identifier of the bot version that contains the utterances. If you
+-- specified the bot alias, the bot version isn\'t returned.
+--
+-- 'localeId', 'listAggregatedUtterancesResponse_localeId' - The identifier of the language and locale that the utterances are in.
+--
+-- 'nextToken', 'listAggregatedUtterancesResponse_nextToken' - A token that indicates whether there are more results to return in a
+-- response to the @ListAggregatedUtterances@ operation. If the @nextToken@
+-- field is present, you send the contents as the @nextToken@ parameter of
+-- a @ListAggregatedUtterances@ operation request to get the next page of
+-- results.
+--
+-- 'httpStatus', 'listAggregatedUtterancesResponse_httpStatus' - The response's http status code.
+newListAggregatedUtterancesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListAggregatedUtterancesResponse
+newListAggregatedUtterancesResponse pHttpStatus_ =
+  ListAggregatedUtterancesResponse'
+    { aggregatedUtterancesSummaries =
+        Prelude.Nothing,
+      aggregationDuration = Prelude.Nothing,
+      aggregationLastRefreshedDateTime =
+        Prelude.Nothing,
+      aggregationWindowEndTime =
+        Prelude.Nothing,
+      aggregationWindowStartTime =
+        Prelude.Nothing,
+      botAliasId = Prelude.Nothing,
+      botId = Prelude.Nothing,
+      botVersion = Prelude.Nothing,
+      localeId = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Summaries of the aggregated utterance data. Each response contains
+-- information about the number of times that the utterance was seen during
+-- the time period, whether it was detected or missed, and when it was seen
+-- during the time period.
+listAggregatedUtterancesResponse_aggregatedUtterancesSummaries :: Lens.Lens' ListAggregatedUtterancesResponse (Prelude.Maybe [AggregatedUtterancesSummary])
+listAggregatedUtterancesResponse_aggregatedUtterancesSummaries = Lens.lens (\ListAggregatedUtterancesResponse' {aggregatedUtterancesSummaries} -> aggregatedUtterancesSummaries) (\s@ListAggregatedUtterancesResponse' {} a -> s {aggregatedUtterancesSummaries = a} :: ListAggregatedUtterancesResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The time period used to aggregate the utterance data.
+listAggregatedUtterancesResponse_aggregationDuration :: Lens.Lens' ListAggregatedUtterancesResponse (Prelude.Maybe UtteranceAggregationDuration)
+listAggregatedUtterancesResponse_aggregationDuration = Lens.lens (\ListAggregatedUtterancesResponse' {aggregationDuration} -> aggregationDuration) (\s@ListAggregatedUtterancesResponse' {} a -> s {aggregationDuration = a} :: ListAggregatedUtterancesResponse)
+
+-- | The last date and time that the aggregated data was collected. The time
+-- period depends on the length of the aggregation window.
+--
+-- -   __Hours__ - for 1 hour time window, every half hour; otherwise every
+--     hour.
+--
+-- -   __Days__ - every 6 hours
+--
+-- -   __Weeks__ - for a one week time window, every 12 hours; otherwise,
+--     every day
+listAggregatedUtterancesResponse_aggregationLastRefreshedDateTime :: Lens.Lens' ListAggregatedUtterancesResponse (Prelude.Maybe Prelude.UTCTime)
+listAggregatedUtterancesResponse_aggregationLastRefreshedDateTime = Lens.lens (\ListAggregatedUtterancesResponse' {aggregationLastRefreshedDateTime} -> aggregationLastRefreshedDateTime) (\s@ListAggregatedUtterancesResponse' {} a -> s {aggregationLastRefreshedDateTime = a} :: ListAggregatedUtterancesResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The date and time that the aggregation window ends. Only data collected
+-- between the start time and the end time are returned in the results.
+listAggregatedUtterancesResponse_aggregationWindowEndTime :: Lens.Lens' ListAggregatedUtterancesResponse (Prelude.Maybe Prelude.UTCTime)
+listAggregatedUtterancesResponse_aggregationWindowEndTime = Lens.lens (\ListAggregatedUtterancesResponse' {aggregationWindowEndTime} -> aggregationWindowEndTime) (\s@ListAggregatedUtterancesResponse' {} a -> s {aggregationWindowEndTime = a} :: ListAggregatedUtterancesResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The date and time that the aggregation window begins. Only data
+-- collected after this time is returned in the results.
+listAggregatedUtterancesResponse_aggregationWindowStartTime :: Lens.Lens' ListAggregatedUtterancesResponse (Prelude.Maybe Prelude.UTCTime)
+listAggregatedUtterancesResponse_aggregationWindowStartTime = Lens.lens (\ListAggregatedUtterancesResponse' {aggregationWindowStartTime} -> aggregationWindowStartTime) (\s@ListAggregatedUtterancesResponse' {} a -> s {aggregationWindowStartTime = a} :: ListAggregatedUtterancesResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The identifier of the bot alias that contains the utterances. If you
+-- specified the bot version, the bot alias ID isn\'t returned.
+listAggregatedUtterancesResponse_botAliasId :: Lens.Lens' ListAggregatedUtterancesResponse (Prelude.Maybe Prelude.Text)
+listAggregatedUtterancesResponse_botAliasId = Lens.lens (\ListAggregatedUtterancesResponse' {botAliasId} -> botAliasId) (\s@ListAggregatedUtterancesResponse' {} a -> s {botAliasId = a} :: ListAggregatedUtterancesResponse)
+
+-- | The identifier of the bot that contains the utterances.
+listAggregatedUtterancesResponse_botId :: Lens.Lens' ListAggregatedUtterancesResponse (Prelude.Maybe Prelude.Text)
+listAggregatedUtterancesResponse_botId = Lens.lens (\ListAggregatedUtterancesResponse' {botId} -> botId) (\s@ListAggregatedUtterancesResponse' {} a -> s {botId = a} :: ListAggregatedUtterancesResponse)
+
+-- | The identifier of the bot version that contains the utterances. If you
+-- specified the bot alias, the bot version isn\'t returned.
+listAggregatedUtterancesResponse_botVersion :: Lens.Lens' ListAggregatedUtterancesResponse (Prelude.Maybe Prelude.Text)
+listAggregatedUtterancesResponse_botVersion = Lens.lens (\ListAggregatedUtterancesResponse' {botVersion} -> botVersion) (\s@ListAggregatedUtterancesResponse' {} a -> s {botVersion = a} :: ListAggregatedUtterancesResponse)
+
+-- | The identifier of the language and locale that the utterances are in.
+listAggregatedUtterancesResponse_localeId :: Lens.Lens' ListAggregatedUtterancesResponse (Prelude.Maybe Prelude.Text)
+listAggregatedUtterancesResponse_localeId = Lens.lens (\ListAggregatedUtterancesResponse' {localeId} -> localeId) (\s@ListAggregatedUtterancesResponse' {} a -> s {localeId = a} :: ListAggregatedUtterancesResponse)
+
+-- | A token that indicates whether there are more results to return in a
+-- response to the @ListAggregatedUtterances@ operation. If the @nextToken@
+-- field is present, you send the contents as the @nextToken@ parameter of
+-- a @ListAggregatedUtterances@ operation request to get the next page of
+-- results.
+listAggregatedUtterancesResponse_nextToken :: Lens.Lens' ListAggregatedUtterancesResponse (Prelude.Maybe Prelude.Text)
+listAggregatedUtterancesResponse_nextToken = Lens.lens (\ListAggregatedUtterancesResponse' {nextToken} -> nextToken) (\s@ListAggregatedUtterancesResponse' {} a -> s {nextToken = a} :: ListAggregatedUtterancesResponse)
+
+-- | The response's http status code.
+listAggregatedUtterancesResponse_httpStatus :: Lens.Lens' ListAggregatedUtterancesResponse Prelude.Int
+listAggregatedUtterancesResponse_httpStatus = Lens.lens (\ListAggregatedUtterancesResponse' {httpStatus} -> httpStatus) (\s@ListAggregatedUtterancesResponse' {} a -> s {httpStatus = a} :: ListAggregatedUtterancesResponse)
+
+instance
+  Prelude.NFData
+    ListAggregatedUtterancesResponse
+  where
+  rnf ListAggregatedUtterancesResponse' {..} =
+    Prelude.rnf aggregatedUtterancesSummaries
+      `Prelude.seq` Prelude.rnf aggregationDuration
+      `Prelude.seq` Prelude.rnf aggregationLastRefreshedDateTime
+      `Prelude.seq` Prelude.rnf aggregationWindowEndTime
+      `Prelude.seq` Prelude.rnf aggregationWindowStartTime
+      `Prelude.seq` Prelude.rnf botAliasId
+      `Prelude.seq` Prelude.rnf botId
+      `Prelude.seq` Prelude.rnf botVersion
+      `Prelude.seq` Prelude.rnf localeId
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/LexV2Models/ListBotAliases.hs b/gen/Amazonka/LexV2Models/ListBotAliases.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/ListBotAliases.hs
@@ -0,0 +1,259 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.LexV2Models.ListBotAliases
+-- 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 a list of aliases for the specified bot.
+module Amazonka.LexV2Models.ListBotAliases
+  ( -- * Creating a Request
+    ListBotAliases (..),
+    newListBotAliases,
+
+    -- * Request Lenses
+    listBotAliases_maxResults,
+    listBotAliases_nextToken,
+    listBotAliases_botId,
+
+    -- * Destructuring the Response
+    ListBotAliasesResponse (..),
+    newListBotAliasesResponse,
+
+    -- * Response Lenses
+    listBotAliasesResponse_botAliasSummaries,
+    listBotAliasesResponse_botId,
+    listBotAliasesResponse_nextToken,
+    listBotAliasesResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LexV2Models.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListBotAliases' smart constructor.
+data ListBotAliases = ListBotAliases'
+  { -- | The maximum number of aliases to return in each page of results. If
+    -- there are fewer results than the max page size, only the actual number
+    -- of results are returned.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | If the response from the @ListBotAliases@ operation contains more
+    -- results than specified in the @maxResults@ parameter, a token is
+    -- returned in the response. Use that token in the @nextToken@ parameter to
+    -- return the next page of results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The identifier of the bot to list aliases for.
+    botId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListBotAliases' 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', 'listBotAliases_maxResults' - The maximum number of aliases to return in each page of results. If
+-- there are fewer results than the max page size, only the actual number
+-- of results are returned.
+--
+-- 'nextToken', 'listBotAliases_nextToken' - If the response from the @ListBotAliases@ operation contains more
+-- results than specified in the @maxResults@ parameter, a token is
+-- returned in the response. Use that token in the @nextToken@ parameter to
+-- return the next page of results.
+--
+-- 'botId', 'listBotAliases_botId' - The identifier of the bot to list aliases for.
+newListBotAliases ::
+  -- | 'botId'
+  Prelude.Text ->
+  ListBotAliases
+newListBotAliases pBotId_ =
+  ListBotAliases'
+    { maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      botId = pBotId_
+    }
+
+-- | The maximum number of aliases to return in each page of results. If
+-- there are fewer results than the max page size, only the actual number
+-- of results are returned.
+listBotAliases_maxResults :: Lens.Lens' ListBotAliases (Prelude.Maybe Prelude.Natural)
+listBotAliases_maxResults = Lens.lens (\ListBotAliases' {maxResults} -> maxResults) (\s@ListBotAliases' {} a -> s {maxResults = a} :: ListBotAliases)
+
+-- | If the response from the @ListBotAliases@ operation contains more
+-- results than specified in the @maxResults@ parameter, a token is
+-- returned in the response. Use that token in the @nextToken@ parameter to
+-- return the next page of results.
+listBotAliases_nextToken :: Lens.Lens' ListBotAliases (Prelude.Maybe Prelude.Text)
+listBotAliases_nextToken = Lens.lens (\ListBotAliases' {nextToken} -> nextToken) (\s@ListBotAliases' {} a -> s {nextToken = a} :: ListBotAliases)
+
+-- | The identifier of the bot to list aliases for.
+listBotAliases_botId :: Lens.Lens' ListBotAliases Prelude.Text
+listBotAliases_botId = Lens.lens (\ListBotAliases' {botId} -> botId) (\s@ListBotAliases' {} a -> s {botId = a} :: ListBotAliases)
+
+instance Core.AWSRequest ListBotAliases where
+  type
+    AWSResponse ListBotAliases =
+      ListBotAliasesResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListBotAliasesResponse'
+            Prelude.<$> ( x
+                            Data..?> "botAliasSummaries"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (x Data..?> "botId")
+            Prelude.<*> (x Data..?> "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListBotAliases where
+  hashWithSalt _salt ListBotAliases' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` botId
+
+instance Prelude.NFData ListBotAliases where
+  rnf ListBotAliases' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf botId
+
+instance Data.ToHeaders ListBotAliases where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ListBotAliases where
+  toJSON ListBotAliases' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("maxResults" Data..=) Prelude.<$> maxResults,
+            ("nextToken" Data..=) Prelude.<$> nextToken
+          ]
+      )
+
+instance Data.ToPath ListBotAliases where
+  toPath ListBotAliases' {..} =
+    Prelude.mconcat
+      ["/bots/", Data.toBS botId, "/botaliases/"]
+
+instance Data.ToQuery ListBotAliases where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListBotAliasesResponse' smart constructor.
+data ListBotAliasesResponse = ListBotAliasesResponse'
+  { -- | Summary information for the bot aliases that meet the filter criteria
+    -- specified in the request. The length of the list is specified in the
+    -- @maxResults@ parameter of the request. If there are more aliases
+    -- available, the @nextToken@ field contains a token to get the next page
+    -- of results.
+    botAliasSummaries :: Prelude.Maybe [BotAliasSummary],
+    -- | The identifier of the bot associated with the aliases.
+    botId :: Prelude.Maybe Prelude.Text,
+    -- | A token that indicates whether there are more results to return in a
+    -- response to the @ListBotAliases@ operation. If the @nextToken@ field is
+    -- present, you send the contents as the @nextToken@ parameter of a
+    -- @ListBotAliases@ operation request to get the next page of results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListBotAliasesResponse' 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:
+--
+-- 'botAliasSummaries', 'listBotAliasesResponse_botAliasSummaries' - Summary information for the bot aliases that meet the filter criteria
+-- specified in the request. The length of the list is specified in the
+-- @maxResults@ parameter of the request. If there are more aliases
+-- available, the @nextToken@ field contains a token to get the next page
+-- of results.
+--
+-- 'botId', 'listBotAliasesResponse_botId' - The identifier of the bot associated with the aliases.
+--
+-- 'nextToken', 'listBotAliasesResponse_nextToken' - A token that indicates whether there are more results to return in a
+-- response to the @ListBotAliases@ operation. If the @nextToken@ field is
+-- present, you send the contents as the @nextToken@ parameter of a
+-- @ListBotAliases@ operation request to get the next page of results.
+--
+-- 'httpStatus', 'listBotAliasesResponse_httpStatus' - The response's http status code.
+newListBotAliasesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListBotAliasesResponse
+newListBotAliasesResponse pHttpStatus_ =
+  ListBotAliasesResponse'
+    { botAliasSummaries =
+        Prelude.Nothing,
+      botId = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Summary information for the bot aliases that meet the filter criteria
+-- specified in the request. The length of the list is specified in the
+-- @maxResults@ parameter of the request. If there are more aliases
+-- available, the @nextToken@ field contains a token to get the next page
+-- of results.
+listBotAliasesResponse_botAliasSummaries :: Lens.Lens' ListBotAliasesResponse (Prelude.Maybe [BotAliasSummary])
+listBotAliasesResponse_botAliasSummaries = Lens.lens (\ListBotAliasesResponse' {botAliasSummaries} -> botAliasSummaries) (\s@ListBotAliasesResponse' {} a -> s {botAliasSummaries = a} :: ListBotAliasesResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The identifier of the bot associated with the aliases.
+listBotAliasesResponse_botId :: Lens.Lens' ListBotAliasesResponse (Prelude.Maybe Prelude.Text)
+listBotAliasesResponse_botId = Lens.lens (\ListBotAliasesResponse' {botId} -> botId) (\s@ListBotAliasesResponse' {} a -> s {botId = a} :: ListBotAliasesResponse)
+
+-- | A token that indicates whether there are more results to return in a
+-- response to the @ListBotAliases@ operation. If the @nextToken@ field is
+-- present, you send the contents as the @nextToken@ parameter of a
+-- @ListBotAliases@ operation request to get the next page of results.
+listBotAliasesResponse_nextToken :: Lens.Lens' ListBotAliasesResponse (Prelude.Maybe Prelude.Text)
+listBotAliasesResponse_nextToken = Lens.lens (\ListBotAliasesResponse' {nextToken} -> nextToken) (\s@ListBotAliasesResponse' {} a -> s {nextToken = a} :: ListBotAliasesResponse)
+
+-- | The response's http status code.
+listBotAliasesResponse_httpStatus :: Lens.Lens' ListBotAliasesResponse Prelude.Int
+listBotAliasesResponse_httpStatus = Lens.lens (\ListBotAliasesResponse' {httpStatus} -> httpStatus) (\s@ListBotAliasesResponse' {} a -> s {httpStatus = a} :: ListBotAliasesResponse)
+
+instance Prelude.NFData ListBotAliasesResponse where
+  rnf ListBotAliasesResponse' {..} =
+    Prelude.rnf botAliasSummaries
+      `Prelude.seq` Prelude.rnf botId
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/LexV2Models/ListBotLocales.hs b/gen/Amazonka/LexV2Models/ListBotLocales.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/ListBotLocales.hs
@@ -0,0 +1,324 @@
+{-# 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.LexV2Models.ListBotLocales
+-- 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 a list of locales for the specified bot.
+module Amazonka.LexV2Models.ListBotLocales
+  ( -- * Creating a Request
+    ListBotLocales (..),
+    newListBotLocales,
+
+    -- * Request Lenses
+    listBotLocales_filters,
+    listBotLocales_maxResults,
+    listBotLocales_nextToken,
+    listBotLocales_sortBy,
+    listBotLocales_botId,
+    listBotLocales_botVersion,
+
+    -- * Destructuring the Response
+    ListBotLocalesResponse (..),
+    newListBotLocalesResponse,
+
+    -- * Response Lenses
+    listBotLocalesResponse_botId,
+    listBotLocalesResponse_botLocaleSummaries,
+    listBotLocalesResponse_botVersion,
+    listBotLocalesResponse_nextToken,
+    listBotLocalesResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LexV2Models.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListBotLocales' smart constructor.
+data ListBotLocales = ListBotLocales'
+  { -- | Provides the specification for a filter used to limit the response to
+    -- only those locales that match the filter specification. You can only
+    -- specify one filter and one value to filter on.
+    filters :: Prelude.Maybe (Prelude.NonEmpty BotLocaleFilter),
+    -- | The maximum number of aliases to return in each page of results. If
+    -- there are fewer results than the max page size, only the actual number
+    -- of results are returned.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | If the response from the @ListBotLocales@ operation contains more
+    -- results than specified in the @maxResults@ parameter, a token is
+    -- returned in the response. Use that token as the @nextToken@ parameter to
+    -- return the next page of results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | Specifies sorting parameters for the list of locales. You can sort by
+    -- locale name in ascending or descending order.
+    sortBy :: Prelude.Maybe BotLocaleSortBy,
+    -- | The identifier of the bot to list locales for.
+    botId :: Prelude.Text,
+    -- | The version of the bot to list locales for.
+    botVersion :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListBotLocales' 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:
+--
+-- 'filters', 'listBotLocales_filters' - Provides the specification for a filter used to limit the response to
+-- only those locales that match the filter specification. You can only
+-- specify one filter and one value to filter on.
+--
+-- 'maxResults', 'listBotLocales_maxResults' - The maximum number of aliases to return in each page of results. If
+-- there are fewer results than the max page size, only the actual number
+-- of results are returned.
+--
+-- 'nextToken', 'listBotLocales_nextToken' - If the response from the @ListBotLocales@ operation contains more
+-- results than specified in the @maxResults@ parameter, a token is
+-- returned in the response. Use that token as the @nextToken@ parameter to
+-- return the next page of results.
+--
+-- 'sortBy', 'listBotLocales_sortBy' - Specifies sorting parameters for the list of locales. You can sort by
+-- locale name in ascending or descending order.
+--
+-- 'botId', 'listBotLocales_botId' - The identifier of the bot to list locales for.
+--
+-- 'botVersion', 'listBotLocales_botVersion' - The version of the bot to list locales for.
+newListBotLocales ::
+  -- | 'botId'
+  Prelude.Text ->
+  -- | 'botVersion'
+  Prelude.Text ->
+  ListBotLocales
+newListBotLocales pBotId_ pBotVersion_ =
+  ListBotLocales'
+    { filters = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      sortBy = Prelude.Nothing,
+      botId = pBotId_,
+      botVersion = pBotVersion_
+    }
+
+-- | Provides the specification for a filter used to limit the response to
+-- only those locales that match the filter specification. You can only
+-- specify one filter and one value to filter on.
+listBotLocales_filters :: Lens.Lens' ListBotLocales (Prelude.Maybe (Prelude.NonEmpty BotLocaleFilter))
+listBotLocales_filters = Lens.lens (\ListBotLocales' {filters} -> filters) (\s@ListBotLocales' {} a -> s {filters = a} :: ListBotLocales) Prelude.. Lens.mapping Lens.coerced
+
+-- | The maximum number of aliases to return in each page of results. If
+-- there are fewer results than the max page size, only the actual number
+-- of results are returned.
+listBotLocales_maxResults :: Lens.Lens' ListBotLocales (Prelude.Maybe Prelude.Natural)
+listBotLocales_maxResults = Lens.lens (\ListBotLocales' {maxResults} -> maxResults) (\s@ListBotLocales' {} a -> s {maxResults = a} :: ListBotLocales)
+
+-- | If the response from the @ListBotLocales@ operation contains more
+-- results than specified in the @maxResults@ parameter, a token is
+-- returned in the response. Use that token as the @nextToken@ parameter to
+-- return the next page of results.
+listBotLocales_nextToken :: Lens.Lens' ListBotLocales (Prelude.Maybe Prelude.Text)
+listBotLocales_nextToken = Lens.lens (\ListBotLocales' {nextToken} -> nextToken) (\s@ListBotLocales' {} a -> s {nextToken = a} :: ListBotLocales)
+
+-- | Specifies sorting parameters for the list of locales. You can sort by
+-- locale name in ascending or descending order.
+listBotLocales_sortBy :: Lens.Lens' ListBotLocales (Prelude.Maybe BotLocaleSortBy)
+listBotLocales_sortBy = Lens.lens (\ListBotLocales' {sortBy} -> sortBy) (\s@ListBotLocales' {} a -> s {sortBy = a} :: ListBotLocales)
+
+-- | The identifier of the bot to list locales for.
+listBotLocales_botId :: Lens.Lens' ListBotLocales Prelude.Text
+listBotLocales_botId = Lens.lens (\ListBotLocales' {botId} -> botId) (\s@ListBotLocales' {} a -> s {botId = a} :: ListBotLocales)
+
+-- | The version of the bot to list locales for.
+listBotLocales_botVersion :: Lens.Lens' ListBotLocales Prelude.Text
+listBotLocales_botVersion = Lens.lens (\ListBotLocales' {botVersion} -> botVersion) (\s@ListBotLocales' {} a -> s {botVersion = a} :: ListBotLocales)
+
+instance Core.AWSRequest ListBotLocales where
+  type
+    AWSResponse ListBotLocales =
+      ListBotLocalesResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListBotLocalesResponse'
+            Prelude.<$> (x Data..?> "botId")
+            Prelude.<*> ( x
+                            Data..?> "botLocaleSummaries"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (x Data..?> "botVersion")
+            Prelude.<*> (x Data..?> "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListBotLocales where
+  hashWithSalt _salt ListBotLocales' {..} =
+    _salt
+      `Prelude.hashWithSalt` filters
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` sortBy
+      `Prelude.hashWithSalt` botId
+      `Prelude.hashWithSalt` botVersion
+
+instance Prelude.NFData ListBotLocales where
+  rnf ListBotLocales' {..} =
+    Prelude.rnf filters
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf sortBy
+      `Prelude.seq` Prelude.rnf botId
+      `Prelude.seq` Prelude.rnf botVersion
+
+instance Data.ToHeaders ListBotLocales where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ListBotLocales where
+  toJSON ListBotLocales' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("filters" Data..=) Prelude.<$> filters,
+            ("maxResults" Data..=) Prelude.<$> maxResults,
+            ("nextToken" Data..=) Prelude.<$> nextToken,
+            ("sortBy" Data..=) Prelude.<$> sortBy
+          ]
+      )
+
+instance Data.ToPath ListBotLocales where
+  toPath ListBotLocales' {..} =
+    Prelude.mconcat
+      [ "/bots/",
+        Data.toBS botId,
+        "/botversions/",
+        Data.toBS botVersion,
+        "/botlocales/"
+      ]
+
+instance Data.ToQuery ListBotLocales where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListBotLocalesResponse' smart constructor.
+data ListBotLocalesResponse = ListBotLocalesResponse'
+  { -- | The identifier of the bot to list locales for.
+    botId :: Prelude.Maybe Prelude.Text,
+    -- | Summary information for the locales that meet the filter criteria
+    -- specified in the request. The length of the list is specified in the
+    -- @maxResults@ parameter of the request. If there are more locales
+    -- available, the @nextToken@ field contains a token to get the next page
+    -- of results.
+    botLocaleSummaries :: Prelude.Maybe [BotLocaleSummary],
+    -- | The version of the bot.
+    botVersion :: Prelude.Maybe Prelude.Text,
+    -- | A token that indicates whether there are more results to return in a
+    -- response to the @ListBotLocales@ operation. If the @nextToken@ field is
+    -- present, you send the contents as the @nextToken@ parameter of a
+    -- @ListBotLocales@ operation request to get the next page of results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListBotLocalesResponse' 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:
+--
+-- 'botId', 'listBotLocalesResponse_botId' - The identifier of the bot to list locales for.
+--
+-- 'botLocaleSummaries', 'listBotLocalesResponse_botLocaleSummaries' - Summary information for the locales that meet the filter criteria
+-- specified in the request. The length of the list is specified in the
+-- @maxResults@ parameter of the request. If there are more locales
+-- available, the @nextToken@ field contains a token to get the next page
+-- of results.
+--
+-- 'botVersion', 'listBotLocalesResponse_botVersion' - The version of the bot.
+--
+-- 'nextToken', 'listBotLocalesResponse_nextToken' - A token that indicates whether there are more results to return in a
+-- response to the @ListBotLocales@ operation. If the @nextToken@ field is
+-- present, you send the contents as the @nextToken@ parameter of a
+-- @ListBotLocales@ operation request to get the next page of results.
+--
+-- 'httpStatus', 'listBotLocalesResponse_httpStatus' - The response's http status code.
+newListBotLocalesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListBotLocalesResponse
+newListBotLocalesResponse pHttpStatus_ =
+  ListBotLocalesResponse'
+    { botId = Prelude.Nothing,
+      botLocaleSummaries = Prelude.Nothing,
+      botVersion = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The identifier of the bot to list locales for.
+listBotLocalesResponse_botId :: Lens.Lens' ListBotLocalesResponse (Prelude.Maybe Prelude.Text)
+listBotLocalesResponse_botId = Lens.lens (\ListBotLocalesResponse' {botId} -> botId) (\s@ListBotLocalesResponse' {} a -> s {botId = a} :: ListBotLocalesResponse)
+
+-- | Summary information for the locales that meet the filter criteria
+-- specified in the request. The length of the list is specified in the
+-- @maxResults@ parameter of the request. If there are more locales
+-- available, the @nextToken@ field contains a token to get the next page
+-- of results.
+listBotLocalesResponse_botLocaleSummaries :: Lens.Lens' ListBotLocalesResponse (Prelude.Maybe [BotLocaleSummary])
+listBotLocalesResponse_botLocaleSummaries = Lens.lens (\ListBotLocalesResponse' {botLocaleSummaries} -> botLocaleSummaries) (\s@ListBotLocalesResponse' {} a -> s {botLocaleSummaries = a} :: ListBotLocalesResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The version of the bot.
+listBotLocalesResponse_botVersion :: Lens.Lens' ListBotLocalesResponse (Prelude.Maybe Prelude.Text)
+listBotLocalesResponse_botVersion = Lens.lens (\ListBotLocalesResponse' {botVersion} -> botVersion) (\s@ListBotLocalesResponse' {} a -> s {botVersion = a} :: ListBotLocalesResponse)
+
+-- | A token that indicates whether there are more results to return in a
+-- response to the @ListBotLocales@ operation. If the @nextToken@ field is
+-- present, you send the contents as the @nextToken@ parameter of a
+-- @ListBotLocales@ operation request to get the next page of results.
+listBotLocalesResponse_nextToken :: Lens.Lens' ListBotLocalesResponse (Prelude.Maybe Prelude.Text)
+listBotLocalesResponse_nextToken = Lens.lens (\ListBotLocalesResponse' {nextToken} -> nextToken) (\s@ListBotLocalesResponse' {} a -> s {nextToken = a} :: ListBotLocalesResponse)
+
+-- | The response's http status code.
+listBotLocalesResponse_httpStatus :: Lens.Lens' ListBotLocalesResponse Prelude.Int
+listBotLocalesResponse_httpStatus = Lens.lens (\ListBotLocalesResponse' {httpStatus} -> httpStatus) (\s@ListBotLocalesResponse' {} a -> s {httpStatus = a} :: ListBotLocalesResponse)
+
+instance Prelude.NFData ListBotLocalesResponse where
+  rnf ListBotLocalesResponse' {..} =
+    Prelude.rnf botId
+      `Prelude.seq` Prelude.rnf botLocaleSummaries
+      `Prelude.seq` Prelude.rnf botVersion
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/LexV2Models/ListBotRecommendations.hs b/gen/Amazonka/LexV2Models/ListBotRecommendations.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/ListBotRecommendations.hs
@@ -0,0 +1,341 @@
+{-# 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.LexV2Models.ListBotRecommendations
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Get a list of bot recommendations that meet the specified criteria.
+module Amazonka.LexV2Models.ListBotRecommendations
+  ( -- * Creating a Request
+    ListBotRecommendations (..),
+    newListBotRecommendations,
+
+    -- * Request Lenses
+    listBotRecommendations_maxResults,
+    listBotRecommendations_nextToken,
+    listBotRecommendations_botId,
+    listBotRecommendations_botVersion,
+    listBotRecommendations_localeId,
+
+    -- * Destructuring the Response
+    ListBotRecommendationsResponse (..),
+    newListBotRecommendationsResponse,
+
+    -- * Response Lenses
+    listBotRecommendationsResponse_botId,
+    listBotRecommendationsResponse_botRecommendationSummaries,
+    listBotRecommendationsResponse_botVersion,
+    listBotRecommendationsResponse_localeId,
+    listBotRecommendationsResponse_nextToken,
+    listBotRecommendationsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LexV2Models.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListBotRecommendations' smart constructor.
+data ListBotRecommendations = ListBotRecommendations'
+  { -- | The maximum number of bot recommendations to return in each page of
+    -- results. If there are fewer results than the max page size, only the
+    -- actual number of results are returned.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | If the response from the ListBotRecommendation operation contains more
+    -- results than specified in the maxResults parameter, a token is returned
+    -- in the response. Use that token in the nextToken parameter to return the
+    -- next page of results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The unique identifier of the bot that contains the bot recommendation
+    -- list.
+    botId :: Prelude.Text,
+    -- | The version of the bot that contains the bot recommendation list.
+    botVersion :: Prelude.Text,
+    -- | The identifier of the language and locale of the bot recommendation
+    -- list.
+    localeId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListBotRecommendations' 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', 'listBotRecommendations_maxResults' - The maximum number of bot recommendations to return in each page of
+-- results. If there are fewer results than the max page size, only the
+-- actual number of results are returned.
+--
+-- 'nextToken', 'listBotRecommendations_nextToken' - If the response from the ListBotRecommendation operation contains more
+-- results than specified in the maxResults parameter, a token is returned
+-- in the response. Use that token in the nextToken parameter to return the
+-- next page of results.
+--
+-- 'botId', 'listBotRecommendations_botId' - The unique identifier of the bot that contains the bot recommendation
+-- list.
+--
+-- 'botVersion', 'listBotRecommendations_botVersion' - The version of the bot that contains the bot recommendation list.
+--
+-- 'localeId', 'listBotRecommendations_localeId' - The identifier of the language and locale of the bot recommendation
+-- list.
+newListBotRecommendations ::
+  -- | 'botId'
+  Prelude.Text ->
+  -- | 'botVersion'
+  Prelude.Text ->
+  -- | 'localeId'
+  Prelude.Text ->
+  ListBotRecommendations
+newListBotRecommendations
+  pBotId_
+  pBotVersion_
+  pLocaleId_ =
+    ListBotRecommendations'
+      { maxResults =
+          Prelude.Nothing,
+        nextToken = Prelude.Nothing,
+        botId = pBotId_,
+        botVersion = pBotVersion_,
+        localeId = pLocaleId_
+      }
+
+-- | The maximum number of bot recommendations to return in each page of
+-- results. If there are fewer results than the max page size, only the
+-- actual number of results are returned.
+listBotRecommendations_maxResults :: Lens.Lens' ListBotRecommendations (Prelude.Maybe Prelude.Natural)
+listBotRecommendations_maxResults = Lens.lens (\ListBotRecommendations' {maxResults} -> maxResults) (\s@ListBotRecommendations' {} a -> s {maxResults = a} :: ListBotRecommendations)
+
+-- | If the response from the ListBotRecommendation operation contains more
+-- results than specified in the maxResults parameter, a token is returned
+-- in the response. Use that token in the nextToken parameter to return the
+-- next page of results.
+listBotRecommendations_nextToken :: Lens.Lens' ListBotRecommendations (Prelude.Maybe Prelude.Text)
+listBotRecommendations_nextToken = Lens.lens (\ListBotRecommendations' {nextToken} -> nextToken) (\s@ListBotRecommendations' {} a -> s {nextToken = a} :: ListBotRecommendations)
+
+-- | The unique identifier of the bot that contains the bot recommendation
+-- list.
+listBotRecommendations_botId :: Lens.Lens' ListBotRecommendations Prelude.Text
+listBotRecommendations_botId = Lens.lens (\ListBotRecommendations' {botId} -> botId) (\s@ListBotRecommendations' {} a -> s {botId = a} :: ListBotRecommendations)
+
+-- | The version of the bot that contains the bot recommendation list.
+listBotRecommendations_botVersion :: Lens.Lens' ListBotRecommendations Prelude.Text
+listBotRecommendations_botVersion = Lens.lens (\ListBotRecommendations' {botVersion} -> botVersion) (\s@ListBotRecommendations' {} a -> s {botVersion = a} :: ListBotRecommendations)
+
+-- | The identifier of the language and locale of the bot recommendation
+-- list.
+listBotRecommendations_localeId :: Lens.Lens' ListBotRecommendations Prelude.Text
+listBotRecommendations_localeId = Lens.lens (\ListBotRecommendations' {localeId} -> localeId) (\s@ListBotRecommendations' {} a -> s {localeId = a} :: ListBotRecommendations)
+
+instance Core.AWSRequest ListBotRecommendations where
+  type
+    AWSResponse ListBotRecommendations =
+      ListBotRecommendationsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListBotRecommendationsResponse'
+            Prelude.<$> (x Data..?> "botId")
+            Prelude.<*> ( x
+                            Data..?> "botRecommendationSummaries"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (x Data..?> "botVersion")
+            Prelude.<*> (x Data..?> "localeId")
+            Prelude.<*> (x Data..?> "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListBotRecommendations where
+  hashWithSalt _salt ListBotRecommendations' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` botId
+      `Prelude.hashWithSalt` botVersion
+      `Prelude.hashWithSalt` localeId
+
+instance Prelude.NFData ListBotRecommendations where
+  rnf ListBotRecommendations' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf botId
+      `Prelude.seq` Prelude.rnf botVersion
+      `Prelude.seq` Prelude.rnf localeId
+
+instance Data.ToHeaders ListBotRecommendations where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ListBotRecommendations where
+  toJSON ListBotRecommendations' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("maxResults" Data..=) Prelude.<$> maxResults,
+            ("nextToken" Data..=) Prelude.<$> nextToken
+          ]
+      )
+
+instance Data.ToPath ListBotRecommendations where
+  toPath ListBotRecommendations' {..} =
+    Prelude.mconcat
+      [ "/bots/",
+        Data.toBS botId,
+        "/botversions/",
+        Data.toBS botVersion,
+        "/botlocales/",
+        Data.toBS localeId,
+        "/botrecommendations/"
+      ]
+
+instance Data.ToQuery ListBotRecommendations where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListBotRecommendationsResponse' smart constructor.
+data ListBotRecommendationsResponse = ListBotRecommendationsResponse'
+  { -- | The unique identifier of the bot that contains the bot recommendation
+    -- list.
+    botId :: Prelude.Maybe Prelude.Text,
+    -- | Summary information for the bot recommendations that meet the filter
+    -- specified in this request. The length of the list is specified in the
+    -- maxResults parameter of the request. If there are more bot
+    -- recommendations available, the nextToken field contains a token to get
+    -- the next page of results.
+    botRecommendationSummaries :: Prelude.Maybe [BotRecommendationSummary],
+    -- | The version of the bot that contains the bot recommendation list.
+    botVersion :: Prelude.Maybe Prelude.Text,
+    -- | The identifier of the language and locale of the bot recommendation
+    -- list.
+    localeId :: Prelude.Maybe Prelude.Text,
+    -- | A token that indicates whether there are more results to return in a
+    -- response to the ListBotRecommendations operation. If the nextToken field
+    -- is present, you send the contents as the nextToken parameter of a
+    -- ListBotRecommendations operation request to get the next page of
+    -- results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListBotRecommendationsResponse' 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:
+--
+-- 'botId', 'listBotRecommendationsResponse_botId' - The unique identifier of the bot that contains the bot recommendation
+-- list.
+--
+-- 'botRecommendationSummaries', 'listBotRecommendationsResponse_botRecommendationSummaries' - Summary information for the bot recommendations that meet the filter
+-- specified in this request. The length of the list is specified in the
+-- maxResults parameter of the request. If there are more bot
+-- recommendations available, the nextToken field contains a token to get
+-- the next page of results.
+--
+-- 'botVersion', 'listBotRecommendationsResponse_botVersion' - The version of the bot that contains the bot recommendation list.
+--
+-- 'localeId', 'listBotRecommendationsResponse_localeId' - The identifier of the language and locale of the bot recommendation
+-- list.
+--
+-- 'nextToken', 'listBotRecommendationsResponse_nextToken' - A token that indicates whether there are more results to return in a
+-- response to the ListBotRecommendations operation. If the nextToken field
+-- is present, you send the contents as the nextToken parameter of a
+-- ListBotRecommendations operation request to get the next page of
+-- results.
+--
+-- 'httpStatus', 'listBotRecommendationsResponse_httpStatus' - The response's http status code.
+newListBotRecommendationsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListBotRecommendationsResponse
+newListBotRecommendationsResponse pHttpStatus_ =
+  ListBotRecommendationsResponse'
+    { botId =
+        Prelude.Nothing,
+      botRecommendationSummaries =
+        Prelude.Nothing,
+      botVersion = Prelude.Nothing,
+      localeId = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The unique identifier of the bot that contains the bot recommendation
+-- list.
+listBotRecommendationsResponse_botId :: Lens.Lens' ListBotRecommendationsResponse (Prelude.Maybe Prelude.Text)
+listBotRecommendationsResponse_botId = Lens.lens (\ListBotRecommendationsResponse' {botId} -> botId) (\s@ListBotRecommendationsResponse' {} a -> s {botId = a} :: ListBotRecommendationsResponse)
+
+-- | Summary information for the bot recommendations that meet the filter
+-- specified in this request. The length of the list is specified in the
+-- maxResults parameter of the request. If there are more bot
+-- recommendations available, the nextToken field contains a token to get
+-- the next page of results.
+listBotRecommendationsResponse_botRecommendationSummaries :: Lens.Lens' ListBotRecommendationsResponse (Prelude.Maybe [BotRecommendationSummary])
+listBotRecommendationsResponse_botRecommendationSummaries = Lens.lens (\ListBotRecommendationsResponse' {botRecommendationSummaries} -> botRecommendationSummaries) (\s@ListBotRecommendationsResponse' {} a -> s {botRecommendationSummaries = a} :: ListBotRecommendationsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The version of the bot that contains the bot recommendation list.
+listBotRecommendationsResponse_botVersion :: Lens.Lens' ListBotRecommendationsResponse (Prelude.Maybe Prelude.Text)
+listBotRecommendationsResponse_botVersion = Lens.lens (\ListBotRecommendationsResponse' {botVersion} -> botVersion) (\s@ListBotRecommendationsResponse' {} a -> s {botVersion = a} :: ListBotRecommendationsResponse)
+
+-- | The identifier of the language and locale of the bot recommendation
+-- list.
+listBotRecommendationsResponse_localeId :: Lens.Lens' ListBotRecommendationsResponse (Prelude.Maybe Prelude.Text)
+listBotRecommendationsResponse_localeId = Lens.lens (\ListBotRecommendationsResponse' {localeId} -> localeId) (\s@ListBotRecommendationsResponse' {} a -> s {localeId = a} :: ListBotRecommendationsResponse)
+
+-- | A token that indicates whether there are more results to return in a
+-- response to the ListBotRecommendations operation. If the nextToken field
+-- is present, you send the contents as the nextToken parameter of a
+-- ListBotRecommendations operation request to get the next page of
+-- results.
+listBotRecommendationsResponse_nextToken :: Lens.Lens' ListBotRecommendationsResponse (Prelude.Maybe Prelude.Text)
+listBotRecommendationsResponse_nextToken = Lens.lens (\ListBotRecommendationsResponse' {nextToken} -> nextToken) (\s@ListBotRecommendationsResponse' {} a -> s {nextToken = a} :: ListBotRecommendationsResponse)
+
+-- | The response's http status code.
+listBotRecommendationsResponse_httpStatus :: Lens.Lens' ListBotRecommendationsResponse Prelude.Int
+listBotRecommendationsResponse_httpStatus = Lens.lens (\ListBotRecommendationsResponse' {httpStatus} -> httpStatus) (\s@ListBotRecommendationsResponse' {} a -> s {httpStatus = a} :: ListBotRecommendationsResponse)
+
+instance
+  Prelude.NFData
+    ListBotRecommendationsResponse
+  where
+  rnf ListBotRecommendationsResponse' {..} =
+    Prelude.rnf botId
+      `Prelude.seq` Prelude.rnf botRecommendationSummaries
+      `Prelude.seq` Prelude.rnf botVersion
+      `Prelude.seq` Prelude.rnf localeId
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/LexV2Models/ListBotVersions.hs b/gen/Amazonka/LexV2Models/ListBotVersions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/ListBotVersions.hs
@@ -0,0 +1,285 @@
+{-# 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.LexV2Models.ListBotVersions
+-- 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 information about all of the versions of a bot.
+--
+-- The @ListBotVersions@ operation returns a summary of each version of a
+-- bot. For example, if a bot has three numbered versions, the
+-- @ListBotVersions@ operation returns for summaries, one for each numbered
+-- version and one for the @DRAFT@ version.
+--
+-- The @ListBotVersions@ operation always returns at least one version, the
+-- @DRAFT@ version.
+module Amazonka.LexV2Models.ListBotVersions
+  ( -- * Creating a Request
+    ListBotVersions (..),
+    newListBotVersions,
+
+    -- * Request Lenses
+    listBotVersions_maxResults,
+    listBotVersions_nextToken,
+    listBotVersions_sortBy,
+    listBotVersions_botId,
+
+    -- * Destructuring the Response
+    ListBotVersionsResponse (..),
+    newListBotVersionsResponse,
+
+    -- * Response Lenses
+    listBotVersionsResponse_botId,
+    listBotVersionsResponse_botVersionSummaries,
+    listBotVersionsResponse_nextToken,
+    listBotVersionsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LexV2Models.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListBotVersions' smart constructor.
+data ListBotVersions = ListBotVersions'
+  { -- | The maximum number of versions to return in each page of results. If
+    -- there are fewer results than the max page size, only the actual number
+    -- of results are returned.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | If the response to the @ListBotVersion@ operation contains more results
+    -- than specified in the @maxResults@ parameter, a token is returned in the
+    -- response. Use that token in the @nextToken@ parameter to return the next
+    -- page of results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | Specifies sorting parameters for the list of versions. You can specify
+    -- that the list be sorted by version name in either ascending or
+    -- descending order.
+    sortBy :: Prelude.Maybe BotVersionSortBy,
+    -- | The identifier of the bot to list versions for.
+    botId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListBotVersions' 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', 'listBotVersions_maxResults' - The maximum number of versions to return in each page of results. If
+-- there are fewer results than the max page size, only the actual number
+-- of results are returned.
+--
+-- 'nextToken', 'listBotVersions_nextToken' - If the response to the @ListBotVersion@ operation contains more results
+-- than specified in the @maxResults@ parameter, a token is returned in the
+-- response. Use that token in the @nextToken@ parameter to return the next
+-- page of results.
+--
+-- 'sortBy', 'listBotVersions_sortBy' - Specifies sorting parameters for the list of versions. You can specify
+-- that the list be sorted by version name in either ascending or
+-- descending order.
+--
+-- 'botId', 'listBotVersions_botId' - The identifier of the bot to list versions for.
+newListBotVersions ::
+  -- | 'botId'
+  Prelude.Text ->
+  ListBotVersions
+newListBotVersions pBotId_ =
+  ListBotVersions'
+    { maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      sortBy = Prelude.Nothing,
+      botId = pBotId_
+    }
+
+-- | The maximum number of versions to return in each page of results. If
+-- there are fewer results than the max page size, only the actual number
+-- of results are returned.
+listBotVersions_maxResults :: Lens.Lens' ListBotVersions (Prelude.Maybe Prelude.Natural)
+listBotVersions_maxResults = Lens.lens (\ListBotVersions' {maxResults} -> maxResults) (\s@ListBotVersions' {} a -> s {maxResults = a} :: ListBotVersions)
+
+-- | If the response to the @ListBotVersion@ operation contains more results
+-- than specified in the @maxResults@ parameter, a token is returned in the
+-- response. Use that token in the @nextToken@ parameter to return the next
+-- page of results.
+listBotVersions_nextToken :: Lens.Lens' ListBotVersions (Prelude.Maybe Prelude.Text)
+listBotVersions_nextToken = Lens.lens (\ListBotVersions' {nextToken} -> nextToken) (\s@ListBotVersions' {} a -> s {nextToken = a} :: ListBotVersions)
+
+-- | Specifies sorting parameters for the list of versions. You can specify
+-- that the list be sorted by version name in either ascending or
+-- descending order.
+listBotVersions_sortBy :: Lens.Lens' ListBotVersions (Prelude.Maybe BotVersionSortBy)
+listBotVersions_sortBy = Lens.lens (\ListBotVersions' {sortBy} -> sortBy) (\s@ListBotVersions' {} a -> s {sortBy = a} :: ListBotVersions)
+
+-- | The identifier of the bot to list versions for.
+listBotVersions_botId :: Lens.Lens' ListBotVersions Prelude.Text
+listBotVersions_botId = Lens.lens (\ListBotVersions' {botId} -> botId) (\s@ListBotVersions' {} a -> s {botId = a} :: ListBotVersions)
+
+instance Core.AWSRequest ListBotVersions where
+  type
+    AWSResponse ListBotVersions =
+      ListBotVersionsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListBotVersionsResponse'
+            Prelude.<$> (x Data..?> "botId")
+            Prelude.<*> ( x
+                            Data..?> "botVersionSummaries"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (x Data..?> "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListBotVersions where
+  hashWithSalt _salt ListBotVersions' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` sortBy
+      `Prelude.hashWithSalt` botId
+
+instance Prelude.NFData ListBotVersions where
+  rnf ListBotVersions' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf sortBy
+      `Prelude.seq` Prelude.rnf botId
+
+instance Data.ToHeaders ListBotVersions where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ListBotVersions where
+  toJSON ListBotVersions' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("maxResults" Data..=) Prelude.<$> maxResults,
+            ("nextToken" Data..=) Prelude.<$> nextToken,
+            ("sortBy" Data..=) Prelude.<$> sortBy
+          ]
+      )
+
+instance Data.ToPath ListBotVersions where
+  toPath ListBotVersions' {..} =
+    Prelude.mconcat
+      ["/bots/", Data.toBS botId, "/botversions/"]
+
+instance Data.ToQuery ListBotVersions where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListBotVersionsResponse' smart constructor.
+data ListBotVersionsResponse = ListBotVersionsResponse'
+  { -- | The identifier of the bot to list versions for.
+    botId :: Prelude.Maybe Prelude.Text,
+    -- | Summary information for the bot versions that meet the filter criteria
+    -- specified in the request. The length of the list is specified in the
+    -- @maxResults@ parameter of the request. If there are more versions
+    -- available, the @nextToken@ field contains a token to get the next page
+    -- of results.
+    botVersionSummaries :: Prelude.Maybe [BotVersionSummary],
+    -- | A token that indicates whether there are more results to return in a
+    -- response to the @ListBotVersions@ operation. If the @nextToken@ field is
+    -- present, you send the contents as the @nextToken@ parameter of a
+    -- @ListBotAliases@ operation request to get the next page of results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListBotVersionsResponse' 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:
+--
+-- 'botId', 'listBotVersionsResponse_botId' - The identifier of the bot to list versions for.
+--
+-- 'botVersionSummaries', 'listBotVersionsResponse_botVersionSummaries' - Summary information for the bot versions that meet the filter criteria
+-- specified in the request. The length of the list is specified in the
+-- @maxResults@ parameter of the request. If there are more versions
+-- available, the @nextToken@ field contains a token to get the next page
+-- of results.
+--
+-- 'nextToken', 'listBotVersionsResponse_nextToken' - A token that indicates whether there are more results to return in a
+-- response to the @ListBotVersions@ operation. If the @nextToken@ field is
+-- present, you send the contents as the @nextToken@ parameter of a
+-- @ListBotAliases@ operation request to get the next page of results.
+--
+-- 'httpStatus', 'listBotVersionsResponse_httpStatus' - The response's http status code.
+newListBotVersionsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListBotVersionsResponse
+newListBotVersionsResponse pHttpStatus_ =
+  ListBotVersionsResponse'
+    { botId = Prelude.Nothing,
+      botVersionSummaries = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The identifier of the bot to list versions for.
+listBotVersionsResponse_botId :: Lens.Lens' ListBotVersionsResponse (Prelude.Maybe Prelude.Text)
+listBotVersionsResponse_botId = Lens.lens (\ListBotVersionsResponse' {botId} -> botId) (\s@ListBotVersionsResponse' {} a -> s {botId = a} :: ListBotVersionsResponse)
+
+-- | Summary information for the bot versions that meet the filter criteria
+-- specified in the request. The length of the list is specified in the
+-- @maxResults@ parameter of the request. If there are more versions
+-- available, the @nextToken@ field contains a token to get the next page
+-- of results.
+listBotVersionsResponse_botVersionSummaries :: Lens.Lens' ListBotVersionsResponse (Prelude.Maybe [BotVersionSummary])
+listBotVersionsResponse_botVersionSummaries = Lens.lens (\ListBotVersionsResponse' {botVersionSummaries} -> botVersionSummaries) (\s@ListBotVersionsResponse' {} a -> s {botVersionSummaries = a} :: ListBotVersionsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | A token that indicates whether there are more results to return in a
+-- response to the @ListBotVersions@ operation. If the @nextToken@ field is
+-- present, you send the contents as the @nextToken@ parameter of a
+-- @ListBotAliases@ operation request to get the next page of results.
+listBotVersionsResponse_nextToken :: Lens.Lens' ListBotVersionsResponse (Prelude.Maybe Prelude.Text)
+listBotVersionsResponse_nextToken = Lens.lens (\ListBotVersionsResponse' {nextToken} -> nextToken) (\s@ListBotVersionsResponse' {} a -> s {nextToken = a} :: ListBotVersionsResponse)
+
+-- | The response's http status code.
+listBotVersionsResponse_httpStatus :: Lens.Lens' ListBotVersionsResponse Prelude.Int
+listBotVersionsResponse_httpStatus = Lens.lens (\ListBotVersionsResponse' {httpStatus} -> httpStatus) (\s@ListBotVersionsResponse' {} a -> s {httpStatus = a} :: ListBotVersionsResponse)
+
+instance Prelude.NFData ListBotVersionsResponse where
+  rnf ListBotVersionsResponse' {..} =
+    Prelude.rnf botId
+      `Prelude.seq` Prelude.rnf botVersionSummaries
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/LexV2Models/ListBots.hs b/gen/Amazonka/LexV2Models/ListBots.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/ListBots.hs
@@ -0,0 +1,269 @@
+{-# 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.LexV2Models.ListBots
+-- 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 a list of available bots.
+module Amazonka.LexV2Models.ListBots
+  ( -- * Creating a Request
+    ListBots (..),
+    newListBots,
+
+    -- * Request Lenses
+    listBots_filters,
+    listBots_maxResults,
+    listBots_nextToken,
+    listBots_sortBy,
+
+    -- * Destructuring the Response
+    ListBotsResponse (..),
+    newListBotsResponse,
+
+    -- * Response Lenses
+    listBotsResponse_botSummaries,
+    listBotsResponse_nextToken,
+    listBotsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LexV2Models.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListBots' smart constructor.
+data ListBots = ListBots'
+  { -- | Provides the specification of a filter used to limit the bots in the
+    -- response to only those that match the filter specification. You can only
+    -- specify one filter and one string to filter on.
+    filters :: Prelude.Maybe (Prelude.NonEmpty BotFilter),
+    -- | The maximum number of bots to return in each page of results. If there
+    -- are fewer results than the maximum page size, only the actual number of
+    -- results are returned.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | If the response from the @ListBots@ operation contains more results than
+    -- specified in the @maxResults@ parameter, a token is returned in the
+    -- response.
+    --
+    -- Use the returned token in the @nextToken@ parameter of a @ListBots@
+    -- request to return the next page of results. For a complete set of
+    -- results, call the @ListBots@ operation until the @nextToken@ returned in
+    -- the response is null.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | Specifies sorting parameters for the list of bots. You can specify that
+    -- the list be sorted by bot name in ascending or descending order.
+    sortBy :: Prelude.Maybe BotSortBy
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListBots' 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:
+--
+-- 'filters', 'listBots_filters' - Provides the specification of a filter used to limit the bots in the
+-- response to only those that match the filter specification. You can only
+-- specify one filter and one string to filter on.
+--
+-- 'maxResults', 'listBots_maxResults' - The maximum number of bots to return in each page of results. If there
+-- are fewer results than the maximum page size, only the actual number of
+-- results are returned.
+--
+-- 'nextToken', 'listBots_nextToken' - If the response from the @ListBots@ operation contains more results than
+-- specified in the @maxResults@ parameter, a token is returned in the
+-- response.
+--
+-- Use the returned token in the @nextToken@ parameter of a @ListBots@
+-- request to return the next page of results. For a complete set of
+-- results, call the @ListBots@ operation until the @nextToken@ returned in
+-- the response is null.
+--
+-- 'sortBy', 'listBots_sortBy' - Specifies sorting parameters for the list of bots. You can specify that
+-- the list be sorted by bot name in ascending or descending order.
+newListBots ::
+  ListBots
+newListBots =
+  ListBots'
+    { filters = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      sortBy = Prelude.Nothing
+    }
+
+-- | Provides the specification of a filter used to limit the bots in the
+-- response to only those that match the filter specification. You can only
+-- specify one filter and one string to filter on.
+listBots_filters :: Lens.Lens' ListBots (Prelude.Maybe (Prelude.NonEmpty BotFilter))
+listBots_filters = Lens.lens (\ListBots' {filters} -> filters) (\s@ListBots' {} a -> s {filters = a} :: ListBots) Prelude.. Lens.mapping Lens.coerced
+
+-- | The maximum number of bots to return in each page of results. If there
+-- are fewer results than the maximum page size, only the actual number of
+-- results are returned.
+listBots_maxResults :: Lens.Lens' ListBots (Prelude.Maybe Prelude.Natural)
+listBots_maxResults = Lens.lens (\ListBots' {maxResults} -> maxResults) (\s@ListBots' {} a -> s {maxResults = a} :: ListBots)
+
+-- | If the response from the @ListBots@ operation contains more results than
+-- specified in the @maxResults@ parameter, a token is returned in the
+-- response.
+--
+-- Use the returned token in the @nextToken@ parameter of a @ListBots@
+-- request to return the next page of results. For a complete set of
+-- results, call the @ListBots@ operation until the @nextToken@ returned in
+-- the response is null.
+listBots_nextToken :: Lens.Lens' ListBots (Prelude.Maybe Prelude.Text)
+listBots_nextToken = Lens.lens (\ListBots' {nextToken} -> nextToken) (\s@ListBots' {} a -> s {nextToken = a} :: ListBots)
+
+-- | Specifies sorting parameters for the list of bots. You can specify that
+-- the list be sorted by bot name in ascending or descending order.
+listBots_sortBy :: Lens.Lens' ListBots (Prelude.Maybe BotSortBy)
+listBots_sortBy = Lens.lens (\ListBots' {sortBy} -> sortBy) (\s@ListBots' {} a -> s {sortBy = a} :: ListBots)
+
+instance Core.AWSRequest ListBots where
+  type AWSResponse ListBots = ListBotsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListBotsResponse'
+            Prelude.<$> (x Data..?> "botSummaries" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListBots where
+  hashWithSalt _salt ListBots' {..} =
+    _salt
+      `Prelude.hashWithSalt` filters
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` sortBy
+
+instance Prelude.NFData ListBots where
+  rnf ListBots' {..} =
+    Prelude.rnf filters
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf sortBy
+
+instance Data.ToHeaders ListBots where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ListBots where
+  toJSON ListBots' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("filters" Data..=) Prelude.<$> filters,
+            ("maxResults" Data..=) Prelude.<$> maxResults,
+            ("nextToken" Data..=) Prelude.<$> nextToken,
+            ("sortBy" Data..=) Prelude.<$> sortBy
+          ]
+      )
+
+instance Data.ToPath ListBots where
+  toPath = Prelude.const "/bots/"
+
+instance Data.ToQuery ListBots where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListBotsResponse' smart constructor.
+data ListBotsResponse = ListBotsResponse'
+  { -- | Summary information for the bots that meet the filter criteria specified
+    -- in the request. The length of the list is specified in the @maxResults@
+    -- parameter of the request. If there are more bots available, the
+    -- @nextToken@ field contains a token to the next page of results.
+    botSummaries :: Prelude.Maybe [BotSummary],
+    -- | A token that indicates whether there are more results to return in a
+    -- response to the @ListBots@ operation. If the @nextToken@ field is
+    -- present, you send the contents as the @nextToken@ parameter of a
+    -- @ListBots@ operation request to get the next page of results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListBotsResponse' 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:
+--
+-- 'botSummaries', 'listBotsResponse_botSummaries' - Summary information for the bots that meet the filter criteria specified
+-- in the request. The length of the list is specified in the @maxResults@
+-- parameter of the request. If there are more bots available, the
+-- @nextToken@ field contains a token to the next page of results.
+--
+-- 'nextToken', 'listBotsResponse_nextToken' - A token that indicates whether there are more results to return in a
+-- response to the @ListBots@ operation. If the @nextToken@ field is
+-- present, you send the contents as the @nextToken@ parameter of a
+-- @ListBots@ operation request to get the next page of results.
+--
+-- 'httpStatus', 'listBotsResponse_httpStatus' - The response's http status code.
+newListBotsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListBotsResponse
+newListBotsResponse pHttpStatus_ =
+  ListBotsResponse'
+    { botSummaries = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Summary information for the bots that meet the filter criteria specified
+-- in the request. The length of the list is specified in the @maxResults@
+-- parameter of the request. If there are more bots available, the
+-- @nextToken@ field contains a token to the next page of results.
+listBotsResponse_botSummaries :: Lens.Lens' ListBotsResponse (Prelude.Maybe [BotSummary])
+listBotsResponse_botSummaries = Lens.lens (\ListBotsResponse' {botSummaries} -> botSummaries) (\s@ListBotsResponse' {} a -> s {botSummaries = a} :: ListBotsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | A token that indicates whether there are more results to return in a
+-- response to the @ListBots@ operation. If the @nextToken@ field is
+-- present, you send the contents as the @nextToken@ parameter of a
+-- @ListBots@ operation request to get the next page of results.
+listBotsResponse_nextToken :: Lens.Lens' ListBotsResponse (Prelude.Maybe Prelude.Text)
+listBotsResponse_nextToken = Lens.lens (\ListBotsResponse' {nextToken} -> nextToken) (\s@ListBotsResponse' {} a -> s {nextToken = a} :: ListBotsResponse)
+
+-- | The response's http status code.
+listBotsResponse_httpStatus :: Lens.Lens' ListBotsResponse Prelude.Int
+listBotsResponse_httpStatus = Lens.lens (\ListBotsResponse' {httpStatus} -> httpStatus) (\s@ListBotsResponse' {} a -> s {httpStatus = a} :: ListBotsResponse)
+
+instance Prelude.NFData ListBotsResponse where
+  rnf ListBotsResponse' {..} =
+    Prelude.rnf botSummaries
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/LexV2Models/ListBuiltInIntents.hs b/gen/Amazonka/LexV2Models/ListBuiltInIntents.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/ListBuiltInIntents.hs
@@ -0,0 +1,296 @@
+{-# 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.LexV2Models.ListBuiltInIntents
+-- 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 a list of built-in intents provided by Amazon Lex that you can use
+-- in your bot.
+--
+-- To use a built-in intent as a the base for your own intent, include the
+-- built-in intent signature in the @parentIntentSignature@ parameter when
+-- you call the @CreateIntent@ operation. For more information, see
+-- <https://docs.aws.amazon.com/lexv2/latest/dg/API_CreateIntent.html CreateIntent>.
+module Amazonka.LexV2Models.ListBuiltInIntents
+  ( -- * Creating a Request
+    ListBuiltInIntents (..),
+    newListBuiltInIntents,
+
+    -- * Request Lenses
+    listBuiltInIntents_maxResults,
+    listBuiltInIntents_nextToken,
+    listBuiltInIntents_sortBy,
+    listBuiltInIntents_localeId,
+
+    -- * Destructuring the Response
+    ListBuiltInIntentsResponse (..),
+    newListBuiltInIntentsResponse,
+
+    -- * Response Lenses
+    listBuiltInIntentsResponse_builtInIntentSummaries,
+    listBuiltInIntentsResponse_localeId,
+    listBuiltInIntentsResponse_nextToken,
+    listBuiltInIntentsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LexV2Models.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListBuiltInIntents' smart constructor.
+data ListBuiltInIntents = ListBuiltInIntents'
+  { -- | The maximum number of built-in intents to return in each page of
+    -- results. If there are fewer results than the max page size, only the
+    -- actual number of results are returned.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | If the response from the @ListBuiltInIntents@ operation contains more
+    -- results than specified in the @maxResults@ parameter, a token is
+    -- returned in the response. Use that token in the @nextToken@ parameter to
+    -- return the next page of results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | Specifies sorting parameters for the list of built-in intents. You can
+    -- specify that the list be sorted by the built-in intent signature in
+    -- either ascending or descending order.
+    sortBy :: Prelude.Maybe BuiltInIntentSortBy,
+    -- | The identifier of the language and locale of the intents to list. The
+    -- string must match one of the supported locales. For more information,
+    -- see
+    -- <https://docs.aws.amazon.com/lexv2/latest/dg/how-languages.html Supported languages>.
+    localeId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListBuiltInIntents' 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', 'listBuiltInIntents_maxResults' - The maximum number of built-in intents to return in each page of
+-- results. If there are fewer results than the max page size, only the
+-- actual number of results are returned.
+--
+-- 'nextToken', 'listBuiltInIntents_nextToken' - If the response from the @ListBuiltInIntents@ operation contains more
+-- results than specified in the @maxResults@ parameter, a token is
+-- returned in the response. Use that token in the @nextToken@ parameter to
+-- return the next page of results.
+--
+-- 'sortBy', 'listBuiltInIntents_sortBy' - Specifies sorting parameters for the list of built-in intents. You can
+-- specify that the list be sorted by the built-in intent signature in
+-- either ascending or descending order.
+--
+-- 'localeId', 'listBuiltInIntents_localeId' - The identifier of the language and locale of the intents to list. The
+-- string must match one of the supported locales. For more information,
+-- see
+-- <https://docs.aws.amazon.com/lexv2/latest/dg/how-languages.html Supported languages>.
+newListBuiltInIntents ::
+  -- | 'localeId'
+  Prelude.Text ->
+  ListBuiltInIntents
+newListBuiltInIntents pLocaleId_ =
+  ListBuiltInIntents'
+    { maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      sortBy = Prelude.Nothing,
+      localeId = pLocaleId_
+    }
+
+-- | The maximum number of built-in intents to return in each page of
+-- results. If there are fewer results than the max page size, only the
+-- actual number of results are returned.
+listBuiltInIntents_maxResults :: Lens.Lens' ListBuiltInIntents (Prelude.Maybe Prelude.Natural)
+listBuiltInIntents_maxResults = Lens.lens (\ListBuiltInIntents' {maxResults} -> maxResults) (\s@ListBuiltInIntents' {} a -> s {maxResults = a} :: ListBuiltInIntents)
+
+-- | If the response from the @ListBuiltInIntents@ operation contains more
+-- results than specified in the @maxResults@ parameter, a token is
+-- returned in the response. Use that token in the @nextToken@ parameter to
+-- return the next page of results.
+listBuiltInIntents_nextToken :: Lens.Lens' ListBuiltInIntents (Prelude.Maybe Prelude.Text)
+listBuiltInIntents_nextToken = Lens.lens (\ListBuiltInIntents' {nextToken} -> nextToken) (\s@ListBuiltInIntents' {} a -> s {nextToken = a} :: ListBuiltInIntents)
+
+-- | Specifies sorting parameters for the list of built-in intents. You can
+-- specify that the list be sorted by the built-in intent signature in
+-- either ascending or descending order.
+listBuiltInIntents_sortBy :: Lens.Lens' ListBuiltInIntents (Prelude.Maybe BuiltInIntentSortBy)
+listBuiltInIntents_sortBy = Lens.lens (\ListBuiltInIntents' {sortBy} -> sortBy) (\s@ListBuiltInIntents' {} a -> s {sortBy = a} :: ListBuiltInIntents)
+
+-- | The identifier of the language and locale of the intents to list. The
+-- string must match one of the supported locales. For more information,
+-- see
+-- <https://docs.aws.amazon.com/lexv2/latest/dg/how-languages.html Supported languages>.
+listBuiltInIntents_localeId :: Lens.Lens' ListBuiltInIntents Prelude.Text
+listBuiltInIntents_localeId = Lens.lens (\ListBuiltInIntents' {localeId} -> localeId) (\s@ListBuiltInIntents' {} a -> s {localeId = a} :: ListBuiltInIntents)
+
+instance Core.AWSRequest ListBuiltInIntents where
+  type
+    AWSResponse ListBuiltInIntents =
+      ListBuiltInIntentsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListBuiltInIntentsResponse'
+            Prelude.<$> ( x
+                            Data..?> "builtInIntentSummaries"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (x Data..?> "localeId")
+            Prelude.<*> (x Data..?> "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListBuiltInIntents where
+  hashWithSalt _salt ListBuiltInIntents' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` sortBy
+      `Prelude.hashWithSalt` localeId
+
+instance Prelude.NFData ListBuiltInIntents where
+  rnf ListBuiltInIntents' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf sortBy
+      `Prelude.seq` Prelude.rnf localeId
+
+instance Data.ToHeaders ListBuiltInIntents where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ListBuiltInIntents where
+  toJSON ListBuiltInIntents' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("maxResults" Data..=) Prelude.<$> maxResults,
+            ("nextToken" Data..=) Prelude.<$> nextToken,
+            ("sortBy" Data..=) Prelude.<$> sortBy
+          ]
+      )
+
+instance Data.ToPath ListBuiltInIntents where
+  toPath ListBuiltInIntents' {..} =
+    Prelude.mconcat
+      [ "/builtins/locales/",
+        Data.toBS localeId,
+        "/intents/"
+      ]
+
+instance Data.ToQuery ListBuiltInIntents where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListBuiltInIntentsResponse' smart constructor.
+data ListBuiltInIntentsResponse = ListBuiltInIntentsResponse'
+  { -- | Summary information for the built-in intents that meet the filter
+    -- criteria specified in the request. The length of the list is specified
+    -- in the @maxResults@ parameter of the request. If there are more intents
+    -- available, the @nextToken@ field contains a token to get the next page
+    -- of results.
+    builtInIntentSummaries :: Prelude.Maybe [BuiltInIntentSummary],
+    -- | The language and locale of the intents in the list.
+    localeId :: Prelude.Maybe Prelude.Text,
+    -- | A token that indicates whether there are more results to return in a
+    -- response to the @ListBuiltInIntents@ operation. If the @nextToken@ field
+    -- is present, you send the contents as the @nextToken@ parameter of a
+    -- @ListBotAliases@ operation request to get the next page of results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListBuiltInIntentsResponse' 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:
+--
+-- 'builtInIntentSummaries', 'listBuiltInIntentsResponse_builtInIntentSummaries' - Summary information for the built-in intents that meet the filter
+-- criteria specified in the request. The length of the list is specified
+-- in the @maxResults@ parameter of the request. If there are more intents
+-- available, the @nextToken@ field contains a token to get the next page
+-- of results.
+--
+-- 'localeId', 'listBuiltInIntentsResponse_localeId' - The language and locale of the intents in the list.
+--
+-- 'nextToken', 'listBuiltInIntentsResponse_nextToken' - A token that indicates whether there are more results to return in a
+-- response to the @ListBuiltInIntents@ operation. If the @nextToken@ field
+-- is present, you send the contents as the @nextToken@ parameter of a
+-- @ListBotAliases@ operation request to get the next page of results.
+--
+-- 'httpStatus', 'listBuiltInIntentsResponse_httpStatus' - The response's http status code.
+newListBuiltInIntentsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListBuiltInIntentsResponse
+newListBuiltInIntentsResponse pHttpStatus_ =
+  ListBuiltInIntentsResponse'
+    { builtInIntentSummaries =
+        Prelude.Nothing,
+      localeId = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Summary information for the built-in intents that meet the filter
+-- criteria specified in the request. The length of the list is specified
+-- in the @maxResults@ parameter of the request. If there are more intents
+-- available, the @nextToken@ field contains a token to get the next page
+-- of results.
+listBuiltInIntentsResponse_builtInIntentSummaries :: Lens.Lens' ListBuiltInIntentsResponse (Prelude.Maybe [BuiltInIntentSummary])
+listBuiltInIntentsResponse_builtInIntentSummaries = Lens.lens (\ListBuiltInIntentsResponse' {builtInIntentSummaries} -> builtInIntentSummaries) (\s@ListBuiltInIntentsResponse' {} a -> s {builtInIntentSummaries = a} :: ListBuiltInIntentsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The language and locale of the intents in the list.
+listBuiltInIntentsResponse_localeId :: Lens.Lens' ListBuiltInIntentsResponse (Prelude.Maybe Prelude.Text)
+listBuiltInIntentsResponse_localeId = Lens.lens (\ListBuiltInIntentsResponse' {localeId} -> localeId) (\s@ListBuiltInIntentsResponse' {} a -> s {localeId = a} :: ListBuiltInIntentsResponse)
+
+-- | A token that indicates whether there are more results to return in a
+-- response to the @ListBuiltInIntents@ operation. If the @nextToken@ field
+-- is present, you send the contents as the @nextToken@ parameter of a
+-- @ListBotAliases@ operation request to get the next page of results.
+listBuiltInIntentsResponse_nextToken :: Lens.Lens' ListBuiltInIntentsResponse (Prelude.Maybe Prelude.Text)
+listBuiltInIntentsResponse_nextToken = Lens.lens (\ListBuiltInIntentsResponse' {nextToken} -> nextToken) (\s@ListBuiltInIntentsResponse' {} a -> s {nextToken = a} :: ListBuiltInIntentsResponse)
+
+-- | The response's http status code.
+listBuiltInIntentsResponse_httpStatus :: Lens.Lens' ListBuiltInIntentsResponse Prelude.Int
+listBuiltInIntentsResponse_httpStatus = Lens.lens (\ListBuiltInIntentsResponse' {httpStatus} -> httpStatus) (\s@ListBuiltInIntentsResponse' {} a -> s {httpStatus = a} :: ListBuiltInIntentsResponse)
+
+instance Prelude.NFData ListBuiltInIntentsResponse where
+  rnf ListBuiltInIntentsResponse' {..} =
+    Prelude.rnf builtInIntentSummaries
+      `Prelude.seq` Prelude.rnf localeId
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/LexV2Models/ListBuiltInSlotTypes.hs b/gen/Amazonka/LexV2Models/ListBuiltInSlotTypes.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/ListBuiltInSlotTypes.hs
@@ -0,0 +1,293 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.LexV2Models.ListBuiltInSlotTypes
+-- 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 a list of built-in slot types that meet the specified criteria.
+module Amazonka.LexV2Models.ListBuiltInSlotTypes
+  ( -- * Creating a Request
+    ListBuiltInSlotTypes (..),
+    newListBuiltInSlotTypes,
+
+    -- * Request Lenses
+    listBuiltInSlotTypes_maxResults,
+    listBuiltInSlotTypes_nextToken,
+    listBuiltInSlotTypes_sortBy,
+    listBuiltInSlotTypes_localeId,
+
+    -- * Destructuring the Response
+    ListBuiltInSlotTypesResponse (..),
+    newListBuiltInSlotTypesResponse,
+
+    -- * Response Lenses
+    listBuiltInSlotTypesResponse_builtInSlotTypeSummaries,
+    listBuiltInSlotTypesResponse_localeId,
+    listBuiltInSlotTypesResponse_nextToken,
+    listBuiltInSlotTypesResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LexV2Models.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListBuiltInSlotTypes' smart constructor.
+data ListBuiltInSlotTypes = ListBuiltInSlotTypes'
+  { -- | The maximum number of built-in slot types to return in each page of
+    -- results. If there are fewer results than the max page size, only the
+    -- actual number of results are returned.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | If the response from the @ListBuiltInSlotTypes@ operation contains more
+    -- results than specified in the @maxResults@ parameter, a token is
+    -- returned in the response. Use that token in the @nextToken@ parameter to
+    -- return the next page of results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | Determines the sort order for the response from the
+    -- @ListBuiltInSlotTypes@ operation. You can choose to sort by the slot
+    -- type signature in either ascending or descending order.
+    sortBy :: Prelude.Maybe BuiltInSlotTypeSortBy,
+    -- | The identifier of the language and locale of the slot types to list. The
+    -- string must match one of the supported locales. For more information,
+    -- see
+    -- <https://docs.aws.amazon.com/lexv2/latest/dg/how-languages.html Supported languages>.
+    localeId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListBuiltInSlotTypes' 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', 'listBuiltInSlotTypes_maxResults' - The maximum number of built-in slot types to return in each page of
+-- results. If there are fewer results than the max page size, only the
+-- actual number of results are returned.
+--
+-- 'nextToken', 'listBuiltInSlotTypes_nextToken' - If the response from the @ListBuiltInSlotTypes@ operation contains more
+-- results than specified in the @maxResults@ parameter, a token is
+-- returned in the response. Use that token in the @nextToken@ parameter to
+-- return the next page of results.
+--
+-- 'sortBy', 'listBuiltInSlotTypes_sortBy' - Determines the sort order for the response from the
+-- @ListBuiltInSlotTypes@ operation. You can choose to sort by the slot
+-- type signature in either ascending or descending order.
+--
+-- 'localeId', 'listBuiltInSlotTypes_localeId' - The identifier of the language and locale of the slot types to list. The
+-- string must match one of the supported locales. For more information,
+-- see
+-- <https://docs.aws.amazon.com/lexv2/latest/dg/how-languages.html Supported languages>.
+newListBuiltInSlotTypes ::
+  -- | 'localeId'
+  Prelude.Text ->
+  ListBuiltInSlotTypes
+newListBuiltInSlotTypes pLocaleId_ =
+  ListBuiltInSlotTypes'
+    { maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      sortBy = Prelude.Nothing,
+      localeId = pLocaleId_
+    }
+
+-- | The maximum number of built-in slot types to return in each page of
+-- results. If there are fewer results than the max page size, only the
+-- actual number of results are returned.
+listBuiltInSlotTypes_maxResults :: Lens.Lens' ListBuiltInSlotTypes (Prelude.Maybe Prelude.Natural)
+listBuiltInSlotTypes_maxResults = Lens.lens (\ListBuiltInSlotTypes' {maxResults} -> maxResults) (\s@ListBuiltInSlotTypes' {} a -> s {maxResults = a} :: ListBuiltInSlotTypes)
+
+-- | If the response from the @ListBuiltInSlotTypes@ operation contains more
+-- results than specified in the @maxResults@ parameter, a token is
+-- returned in the response. Use that token in the @nextToken@ parameter to
+-- return the next page of results.
+listBuiltInSlotTypes_nextToken :: Lens.Lens' ListBuiltInSlotTypes (Prelude.Maybe Prelude.Text)
+listBuiltInSlotTypes_nextToken = Lens.lens (\ListBuiltInSlotTypes' {nextToken} -> nextToken) (\s@ListBuiltInSlotTypes' {} a -> s {nextToken = a} :: ListBuiltInSlotTypes)
+
+-- | Determines the sort order for the response from the
+-- @ListBuiltInSlotTypes@ operation. You can choose to sort by the slot
+-- type signature in either ascending or descending order.
+listBuiltInSlotTypes_sortBy :: Lens.Lens' ListBuiltInSlotTypes (Prelude.Maybe BuiltInSlotTypeSortBy)
+listBuiltInSlotTypes_sortBy = Lens.lens (\ListBuiltInSlotTypes' {sortBy} -> sortBy) (\s@ListBuiltInSlotTypes' {} a -> s {sortBy = a} :: ListBuiltInSlotTypes)
+
+-- | The identifier of the language and locale of the slot types to list. The
+-- string must match one of the supported locales. For more information,
+-- see
+-- <https://docs.aws.amazon.com/lexv2/latest/dg/how-languages.html Supported languages>.
+listBuiltInSlotTypes_localeId :: Lens.Lens' ListBuiltInSlotTypes Prelude.Text
+listBuiltInSlotTypes_localeId = Lens.lens (\ListBuiltInSlotTypes' {localeId} -> localeId) (\s@ListBuiltInSlotTypes' {} a -> s {localeId = a} :: ListBuiltInSlotTypes)
+
+instance Core.AWSRequest ListBuiltInSlotTypes where
+  type
+    AWSResponse ListBuiltInSlotTypes =
+      ListBuiltInSlotTypesResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListBuiltInSlotTypesResponse'
+            Prelude.<$> ( x
+                            Data..?> "builtInSlotTypeSummaries"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (x Data..?> "localeId")
+            Prelude.<*> (x Data..?> "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListBuiltInSlotTypes where
+  hashWithSalt _salt ListBuiltInSlotTypes' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` sortBy
+      `Prelude.hashWithSalt` localeId
+
+instance Prelude.NFData ListBuiltInSlotTypes where
+  rnf ListBuiltInSlotTypes' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf sortBy
+      `Prelude.seq` Prelude.rnf localeId
+
+instance Data.ToHeaders ListBuiltInSlotTypes where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ListBuiltInSlotTypes where
+  toJSON ListBuiltInSlotTypes' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("maxResults" Data..=) Prelude.<$> maxResults,
+            ("nextToken" Data..=) Prelude.<$> nextToken,
+            ("sortBy" Data..=) Prelude.<$> sortBy
+          ]
+      )
+
+instance Data.ToPath ListBuiltInSlotTypes where
+  toPath ListBuiltInSlotTypes' {..} =
+    Prelude.mconcat
+      [ "/builtins/locales/",
+        Data.toBS localeId,
+        "/slottypes/"
+      ]
+
+instance Data.ToQuery ListBuiltInSlotTypes where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListBuiltInSlotTypesResponse' smart constructor.
+data ListBuiltInSlotTypesResponse = ListBuiltInSlotTypesResponse'
+  { -- | Summary information for the built-in slot types that meet the filter
+    -- criteria specified in the request. The length of the list is specified
+    -- in the @maxResults@ parameter of the request. If there are more slot
+    -- types available, the @nextToken@ field contains a token to get the next
+    -- page of results.
+    builtInSlotTypeSummaries :: Prelude.Maybe [BuiltInSlotTypeSummary],
+    -- | The language and locale of the slot types in the list.
+    localeId :: Prelude.Maybe Prelude.Text,
+    -- | A token that indicates whether there are more results to return in a
+    -- response to the @ListBuiltInSlotTypes@ operation. If the @nextToken@
+    -- field is present, you send the contents as the @nextToken@ parameter of
+    -- a @LIstBuiltInSlotTypes@ operation request to get the next page of
+    -- results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListBuiltInSlotTypesResponse' 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:
+--
+-- 'builtInSlotTypeSummaries', 'listBuiltInSlotTypesResponse_builtInSlotTypeSummaries' - Summary information for the built-in slot types that meet the filter
+-- criteria specified in the request. The length of the list is specified
+-- in the @maxResults@ parameter of the request. If there are more slot
+-- types available, the @nextToken@ field contains a token to get the next
+-- page of results.
+--
+-- 'localeId', 'listBuiltInSlotTypesResponse_localeId' - The language and locale of the slot types in the list.
+--
+-- 'nextToken', 'listBuiltInSlotTypesResponse_nextToken' - A token that indicates whether there are more results to return in a
+-- response to the @ListBuiltInSlotTypes@ operation. If the @nextToken@
+-- field is present, you send the contents as the @nextToken@ parameter of
+-- a @LIstBuiltInSlotTypes@ operation request to get the next page of
+-- results.
+--
+-- 'httpStatus', 'listBuiltInSlotTypesResponse_httpStatus' - The response's http status code.
+newListBuiltInSlotTypesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListBuiltInSlotTypesResponse
+newListBuiltInSlotTypesResponse pHttpStatus_ =
+  ListBuiltInSlotTypesResponse'
+    { builtInSlotTypeSummaries =
+        Prelude.Nothing,
+      localeId = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Summary information for the built-in slot types that meet the filter
+-- criteria specified in the request. The length of the list is specified
+-- in the @maxResults@ parameter of the request. If there are more slot
+-- types available, the @nextToken@ field contains a token to get the next
+-- page of results.
+listBuiltInSlotTypesResponse_builtInSlotTypeSummaries :: Lens.Lens' ListBuiltInSlotTypesResponse (Prelude.Maybe [BuiltInSlotTypeSummary])
+listBuiltInSlotTypesResponse_builtInSlotTypeSummaries = Lens.lens (\ListBuiltInSlotTypesResponse' {builtInSlotTypeSummaries} -> builtInSlotTypeSummaries) (\s@ListBuiltInSlotTypesResponse' {} a -> s {builtInSlotTypeSummaries = a} :: ListBuiltInSlotTypesResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The language and locale of the slot types in the list.
+listBuiltInSlotTypesResponse_localeId :: Lens.Lens' ListBuiltInSlotTypesResponse (Prelude.Maybe Prelude.Text)
+listBuiltInSlotTypesResponse_localeId = Lens.lens (\ListBuiltInSlotTypesResponse' {localeId} -> localeId) (\s@ListBuiltInSlotTypesResponse' {} a -> s {localeId = a} :: ListBuiltInSlotTypesResponse)
+
+-- | A token that indicates whether there are more results to return in a
+-- response to the @ListBuiltInSlotTypes@ operation. If the @nextToken@
+-- field is present, you send the contents as the @nextToken@ parameter of
+-- a @LIstBuiltInSlotTypes@ operation request to get the next page of
+-- results.
+listBuiltInSlotTypesResponse_nextToken :: Lens.Lens' ListBuiltInSlotTypesResponse (Prelude.Maybe Prelude.Text)
+listBuiltInSlotTypesResponse_nextToken = Lens.lens (\ListBuiltInSlotTypesResponse' {nextToken} -> nextToken) (\s@ListBuiltInSlotTypesResponse' {} a -> s {nextToken = a} :: ListBuiltInSlotTypesResponse)
+
+-- | The response's http status code.
+listBuiltInSlotTypesResponse_httpStatus :: Lens.Lens' ListBuiltInSlotTypesResponse Prelude.Int
+listBuiltInSlotTypesResponse_httpStatus = Lens.lens (\ListBuiltInSlotTypesResponse' {httpStatus} -> httpStatus) (\s@ListBuiltInSlotTypesResponse' {} a -> s {httpStatus = a} :: ListBuiltInSlotTypesResponse)
+
+instance Prelude.NFData ListBuiltInSlotTypesResponse where
+  rnf ListBuiltInSlotTypesResponse' {..} =
+    Prelude.rnf builtInSlotTypeSummaries
+      `Prelude.seq` Prelude.rnf localeId
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/LexV2Models/ListCustomVocabularyItems.hs b/gen/Amazonka/LexV2Models/ListCustomVocabularyItems.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/ListCustomVocabularyItems.hs
@@ -0,0 +1,290 @@
+{-# 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.LexV2Models.ListCustomVocabularyItems
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- List custom vocabulary items for the specified locale in the specified
+-- bot.
+module Amazonka.LexV2Models.ListCustomVocabularyItems
+  ( -- * Creating a Request
+    ListCustomVocabularyItems (..),
+    newListCustomVocabularyItems,
+
+    -- * Request Lenses
+    listCustomVocabularyItems_maxResults,
+    listCustomVocabularyItems_nextToken,
+    listCustomVocabularyItems_botId,
+    listCustomVocabularyItems_botVersion,
+    listCustomVocabularyItems_localeId,
+
+    -- * Destructuring the Response
+    ListCustomVocabularyItemsResponse (..),
+    newListCustomVocabularyItemsResponse,
+
+    -- * Response Lenses
+    listCustomVocabularyItemsResponse_botId,
+    listCustomVocabularyItemsResponse_botVersion,
+    listCustomVocabularyItemsResponse_customVocabularyItems,
+    listCustomVocabularyItemsResponse_localeId,
+    listCustomVocabularyItemsResponse_nextToken,
+    listCustomVocabularyItemsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LexV2Models.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListCustomVocabularyItems' smart constructor.
+data ListCustomVocabularyItems = ListCustomVocabularyItems'
+  { -- | The maximum results to the list custom vocabulary request.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The nextToken identifier to the list custom vocabulary request.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The unique identifier of the bot to the list custom vocabulary request.
+    botId :: Prelude.Text,
+    -- | The bot version of the bot to the list custom vocabulary request.
+    botVersion :: Prelude.Text,
+    -- | The locale identifier of the bot to the list custom vocabulary request.
+    localeId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListCustomVocabularyItems' 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', 'listCustomVocabularyItems_maxResults' - The maximum results to the list custom vocabulary request.
+--
+-- 'nextToken', 'listCustomVocabularyItems_nextToken' - The nextToken identifier to the list custom vocabulary request.
+--
+-- 'botId', 'listCustomVocabularyItems_botId' - The unique identifier of the bot to the list custom vocabulary request.
+--
+-- 'botVersion', 'listCustomVocabularyItems_botVersion' - The bot version of the bot to the list custom vocabulary request.
+--
+-- 'localeId', 'listCustomVocabularyItems_localeId' - The locale identifier of the bot to the list custom vocabulary request.
+newListCustomVocabularyItems ::
+  -- | 'botId'
+  Prelude.Text ->
+  -- | 'botVersion'
+  Prelude.Text ->
+  -- | 'localeId'
+  Prelude.Text ->
+  ListCustomVocabularyItems
+newListCustomVocabularyItems
+  pBotId_
+  pBotVersion_
+  pLocaleId_ =
+    ListCustomVocabularyItems'
+      { maxResults =
+          Prelude.Nothing,
+        nextToken = Prelude.Nothing,
+        botId = pBotId_,
+        botVersion = pBotVersion_,
+        localeId = pLocaleId_
+      }
+
+-- | The maximum results to the list custom vocabulary request.
+listCustomVocabularyItems_maxResults :: Lens.Lens' ListCustomVocabularyItems (Prelude.Maybe Prelude.Natural)
+listCustomVocabularyItems_maxResults = Lens.lens (\ListCustomVocabularyItems' {maxResults} -> maxResults) (\s@ListCustomVocabularyItems' {} a -> s {maxResults = a} :: ListCustomVocabularyItems)
+
+-- | The nextToken identifier to the list custom vocabulary request.
+listCustomVocabularyItems_nextToken :: Lens.Lens' ListCustomVocabularyItems (Prelude.Maybe Prelude.Text)
+listCustomVocabularyItems_nextToken = Lens.lens (\ListCustomVocabularyItems' {nextToken} -> nextToken) (\s@ListCustomVocabularyItems' {} a -> s {nextToken = a} :: ListCustomVocabularyItems)
+
+-- | The unique identifier of the bot to the list custom vocabulary request.
+listCustomVocabularyItems_botId :: Lens.Lens' ListCustomVocabularyItems Prelude.Text
+listCustomVocabularyItems_botId = Lens.lens (\ListCustomVocabularyItems' {botId} -> botId) (\s@ListCustomVocabularyItems' {} a -> s {botId = a} :: ListCustomVocabularyItems)
+
+-- | The bot version of the bot to the list custom vocabulary request.
+listCustomVocabularyItems_botVersion :: Lens.Lens' ListCustomVocabularyItems Prelude.Text
+listCustomVocabularyItems_botVersion = Lens.lens (\ListCustomVocabularyItems' {botVersion} -> botVersion) (\s@ListCustomVocabularyItems' {} a -> s {botVersion = a} :: ListCustomVocabularyItems)
+
+-- | The locale identifier of the bot to the list custom vocabulary request.
+listCustomVocabularyItems_localeId :: Lens.Lens' ListCustomVocabularyItems Prelude.Text
+listCustomVocabularyItems_localeId = Lens.lens (\ListCustomVocabularyItems' {localeId} -> localeId) (\s@ListCustomVocabularyItems' {} a -> s {localeId = a} :: ListCustomVocabularyItems)
+
+instance Core.AWSRequest ListCustomVocabularyItems where
+  type
+    AWSResponse ListCustomVocabularyItems =
+      ListCustomVocabularyItemsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListCustomVocabularyItemsResponse'
+            Prelude.<$> (x Data..?> "botId")
+            Prelude.<*> (x Data..?> "botVersion")
+            Prelude.<*> ( x
+                            Data..?> "customVocabularyItems"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (x Data..?> "localeId")
+            Prelude.<*> (x Data..?> "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListCustomVocabularyItems where
+  hashWithSalt _salt ListCustomVocabularyItems' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` botId
+      `Prelude.hashWithSalt` botVersion
+      `Prelude.hashWithSalt` localeId
+
+instance Prelude.NFData ListCustomVocabularyItems where
+  rnf ListCustomVocabularyItems' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf botId
+      `Prelude.seq` Prelude.rnf botVersion
+      `Prelude.seq` Prelude.rnf localeId
+
+instance Data.ToHeaders ListCustomVocabularyItems where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ListCustomVocabularyItems where
+  toJSON ListCustomVocabularyItems' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("maxResults" Data..=) Prelude.<$> maxResults,
+            ("nextToken" Data..=) Prelude.<$> nextToken
+          ]
+      )
+
+instance Data.ToPath ListCustomVocabularyItems where
+  toPath ListCustomVocabularyItems' {..} =
+    Prelude.mconcat
+      [ "/bots/",
+        Data.toBS botId,
+        "/botversions/",
+        Data.toBS botVersion,
+        "/botlocales/",
+        Data.toBS localeId,
+        "/customvocabulary/DEFAULT/list"
+      ]
+
+instance Data.ToQuery ListCustomVocabularyItems where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListCustomVocabularyItemsResponse' smart constructor.
+data ListCustomVocabularyItemsResponse = ListCustomVocabularyItemsResponse'
+  { -- | The unique identifier of the bot to the list custom vocabulary response.
+    botId :: Prelude.Maybe Prelude.Text,
+    -- | The bot version of the bot to the list custom vocabulary response.
+    botVersion :: Prelude.Maybe Prelude.Text,
+    -- | The custom vocabulary items from the list custom vocabulary response.
+    customVocabularyItems :: Prelude.Maybe [CustomVocabularyItem],
+    -- | The locale identifier of the bot to the list custom vocabulary response.
+    localeId :: Prelude.Maybe Prelude.Text,
+    -- | The nextToken identifier to the list custom vocabulary response.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListCustomVocabularyItemsResponse' 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:
+--
+-- 'botId', 'listCustomVocabularyItemsResponse_botId' - The unique identifier of the bot to the list custom vocabulary response.
+--
+-- 'botVersion', 'listCustomVocabularyItemsResponse_botVersion' - The bot version of the bot to the list custom vocabulary response.
+--
+-- 'customVocabularyItems', 'listCustomVocabularyItemsResponse_customVocabularyItems' - The custom vocabulary items from the list custom vocabulary response.
+--
+-- 'localeId', 'listCustomVocabularyItemsResponse_localeId' - The locale identifier of the bot to the list custom vocabulary response.
+--
+-- 'nextToken', 'listCustomVocabularyItemsResponse_nextToken' - The nextToken identifier to the list custom vocabulary response.
+--
+-- 'httpStatus', 'listCustomVocabularyItemsResponse_httpStatus' - The response's http status code.
+newListCustomVocabularyItemsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListCustomVocabularyItemsResponse
+newListCustomVocabularyItemsResponse pHttpStatus_ =
+  ListCustomVocabularyItemsResponse'
+    { botId =
+        Prelude.Nothing,
+      botVersion = Prelude.Nothing,
+      customVocabularyItems = Prelude.Nothing,
+      localeId = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The unique identifier of the bot to the list custom vocabulary response.
+listCustomVocabularyItemsResponse_botId :: Lens.Lens' ListCustomVocabularyItemsResponse (Prelude.Maybe Prelude.Text)
+listCustomVocabularyItemsResponse_botId = Lens.lens (\ListCustomVocabularyItemsResponse' {botId} -> botId) (\s@ListCustomVocabularyItemsResponse' {} a -> s {botId = a} :: ListCustomVocabularyItemsResponse)
+
+-- | The bot version of the bot to the list custom vocabulary response.
+listCustomVocabularyItemsResponse_botVersion :: Lens.Lens' ListCustomVocabularyItemsResponse (Prelude.Maybe Prelude.Text)
+listCustomVocabularyItemsResponse_botVersion = Lens.lens (\ListCustomVocabularyItemsResponse' {botVersion} -> botVersion) (\s@ListCustomVocabularyItemsResponse' {} a -> s {botVersion = a} :: ListCustomVocabularyItemsResponse)
+
+-- | The custom vocabulary items from the list custom vocabulary response.
+listCustomVocabularyItemsResponse_customVocabularyItems :: Lens.Lens' ListCustomVocabularyItemsResponse (Prelude.Maybe [CustomVocabularyItem])
+listCustomVocabularyItemsResponse_customVocabularyItems = Lens.lens (\ListCustomVocabularyItemsResponse' {customVocabularyItems} -> customVocabularyItems) (\s@ListCustomVocabularyItemsResponse' {} a -> s {customVocabularyItems = a} :: ListCustomVocabularyItemsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The locale identifier of the bot to the list custom vocabulary response.
+listCustomVocabularyItemsResponse_localeId :: Lens.Lens' ListCustomVocabularyItemsResponse (Prelude.Maybe Prelude.Text)
+listCustomVocabularyItemsResponse_localeId = Lens.lens (\ListCustomVocabularyItemsResponse' {localeId} -> localeId) (\s@ListCustomVocabularyItemsResponse' {} a -> s {localeId = a} :: ListCustomVocabularyItemsResponse)
+
+-- | The nextToken identifier to the list custom vocabulary response.
+listCustomVocabularyItemsResponse_nextToken :: Lens.Lens' ListCustomVocabularyItemsResponse (Prelude.Maybe Prelude.Text)
+listCustomVocabularyItemsResponse_nextToken = Lens.lens (\ListCustomVocabularyItemsResponse' {nextToken} -> nextToken) (\s@ListCustomVocabularyItemsResponse' {} a -> s {nextToken = a} :: ListCustomVocabularyItemsResponse)
+
+-- | The response's http status code.
+listCustomVocabularyItemsResponse_httpStatus :: Lens.Lens' ListCustomVocabularyItemsResponse Prelude.Int
+listCustomVocabularyItemsResponse_httpStatus = Lens.lens (\ListCustomVocabularyItemsResponse' {httpStatus} -> httpStatus) (\s@ListCustomVocabularyItemsResponse' {} a -> s {httpStatus = a} :: ListCustomVocabularyItemsResponse)
+
+instance
+  Prelude.NFData
+    ListCustomVocabularyItemsResponse
+  where
+  rnf ListCustomVocabularyItemsResponse' {..} =
+    Prelude.rnf botId
+      `Prelude.seq` Prelude.rnf botVersion
+      `Prelude.seq` Prelude.rnf customVocabularyItems
+      `Prelude.seq` Prelude.rnf localeId
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/LexV2Models/ListExports.hs b/gen/Amazonka/LexV2Models/ListExports.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/ListExports.hs
@@ -0,0 +1,354 @@
+{-# 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.LexV2Models.ListExports
+-- 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 exports for a bot, bot locale, or custom vocabulary. Exports
+-- are kept in the list for 7 days.
+module Amazonka.LexV2Models.ListExports
+  ( -- * Creating a Request
+    ListExports (..),
+    newListExports,
+
+    -- * Request Lenses
+    listExports_botId,
+    listExports_botVersion,
+    listExports_filters,
+    listExports_localeId,
+    listExports_maxResults,
+    listExports_nextToken,
+    listExports_sortBy,
+
+    -- * Destructuring the Response
+    ListExportsResponse (..),
+    newListExportsResponse,
+
+    -- * Response Lenses
+    listExportsResponse_botId,
+    listExportsResponse_botVersion,
+    listExportsResponse_exportSummaries,
+    listExportsResponse_localeId,
+    listExportsResponse_nextToken,
+    listExportsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LexV2Models.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListExports' smart constructor.
+data ListExports = ListExports'
+  { -- | The unique identifier that Amazon Lex assigned to the bot.
+    botId :: Prelude.Maybe Prelude.Text,
+    -- | The version of the bot to list exports for.
+    botVersion :: Prelude.Maybe Prelude.Text,
+    -- | Provides the specification of a filter used to limit the exports in the
+    -- response to only those that match the filter specification. You can only
+    -- specify one filter and one string to filter on.
+    filters :: Prelude.Maybe (Prelude.NonEmpty ExportFilter),
+    -- | Specifies the resources that should be exported. If you don\'t specify a
+    -- resource type in the @filters@ parameter, both bot locales and custom
+    -- vocabularies are exported.
+    localeId :: Prelude.Maybe Prelude.Text,
+    -- | The maximum number of exports to return in each page of results. If
+    -- there are fewer results than the max page size, only the actual number
+    -- of results are returned.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | If the response from the @ListExports@ operation contains more results
+    -- that specified in the @maxResults@ parameter, a token is returned in the
+    -- response.
+    --
+    -- Use the returned token in the @nextToken@ parameter of a @ListExports@
+    -- request to return the next page of results. For a complete set of
+    -- results, call the @ListExports@ operation until the @nextToken@ returned
+    -- in the response is null.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | Determines the field that the list of exports is sorted by. You can sort
+    -- by the @LastUpdatedDateTime@ field in ascending or descending order.
+    sortBy :: Prelude.Maybe ExportSortBy
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListExports' 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:
+--
+-- 'botId', 'listExports_botId' - The unique identifier that Amazon Lex assigned to the bot.
+--
+-- 'botVersion', 'listExports_botVersion' - The version of the bot to list exports for.
+--
+-- 'filters', 'listExports_filters' - Provides the specification of a filter used to limit the exports in the
+-- response to only those that match the filter specification. You can only
+-- specify one filter and one string to filter on.
+--
+-- 'localeId', 'listExports_localeId' - Specifies the resources that should be exported. If you don\'t specify a
+-- resource type in the @filters@ parameter, both bot locales and custom
+-- vocabularies are exported.
+--
+-- 'maxResults', 'listExports_maxResults' - The maximum number of exports to return in each page of results. If
+-- there are fewer results than the max page size, only the actual number
+-- of results are returned.
+--
+-- 'nextToken', 'listExports_nextToken' - If the response from the @ListExports@ operation contains more results
+-- that specified in the @maxResults@ parameter, a token is returned in the
+-- response.
+--
+-- Use the returned token in the @nextToken@ parameter of a @ListExports@
+-- request to return the next page of results. For a complete set of
+-- results, call the @ListExports@ operation until the @nextToken@ returned
+-- in the response is null.
+--
+-- 'sortBy', 'listExports_sortBy' - Determines the field that the list of exports is sorted by. You can sort
+-- by the @LastUpdatedDateTime@ field in ascending or descending order.
+newListExports ::
+  ListExports
+newListExports =
+  ListExports'
+    { botId = Prelude.Nothing,
+      botVersion = Prelude.Nothing,
+      filters = Prelude.Nothing,
+      localeId = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      sortBy = Prelude.Nothing
+    }
+
+-- | The unique identifier that Amazon Lex assigned to the bot.
+listExports_botId :: Lens.Lens' ListExports (Prelude.Maybe Prelude.Text)
+listExports_botId = Lens.lens (\ListExports' {botId} -> botId) (\s@ListExports' {} a -> s {botId = a} :: ListExports)
+
+-- | The version of the bot to list exports for.
+listExports_botVersion :: Lens.Lens' ListExports (Prelude.Maybe Prelude.Text)
+listExports_botVersion = Lens.lens (\ListExports' {botVersion} -> botVersion) (\s@ListExports' {} a -> s {botVersion = a} :: ListExports)
+
+-- | Provides the specification of a filter used to limit the exports in the
+-- response to only those that match the filter specification. You can only
+-- specify one filter and one string to filter on.
+listExports_filters :: Lens.Lens' ListExports (Prelude.Maybe (Prelude.NonEmpty ExportFilter))
+listExports_filters = Lens.lens (\ListExports' {filters} -> filters) (\s@ListExports' {} a -> s {filters = a} :: ListExports) Prelude.. Lens.mapping Lens.coerced
+
+-- | Specifies the resources that should be exported. If you don\'t specify a
+-- resource type in the @filters@ parameter, both bot locales and custom
+-- vocabularies are exported.
+listExports_localeId :: Lens.Lens' ListExports (Prelude.Maybe Prelude.Text)
+listExports_localeId = Lens.lens (\ListExports' {localeId} -> localeId) (\s@ListExports' {} a -> s {localeId = a} :: ListExports)
+
+-- | The maximum number of exports to return in each page of results. If
+-- there are fewer results than the max page size, only the actual number
+-- of results are returned.
+listExports_maxResults :: Lens.Lens' ListExports (Prelude.Maybe Prelude.Natural)
+listExports_maxResults = Lens.lens (\ListExports' {maxResults} -> maxResults) (\s@ListExports' {} a -> s {maxResults = a} :: ListExports)
+
+-- | If the response from the @ListExports@ operation contains more results
+-- that specified in the @maxResults@ parameter, a token is returned in the
+-- response.
+--
+-- Use the returned token in the @nextToken@ parameter of a @ListExports@
+-- request to return the next page of results. For a complete set of
+-- results, call the @ListExports@ operation until the @nextToken@ returned
+-- in the response is null.
+listExports_nextToken :: Lens.Lens' ListExports (Prelude.Maybe Prelude.Text)
+listExports_nextToken = Lens.lens (\ListExports' {nextToken} -> nextToken) (\s@ListExports' {} a -> s {nextToken = a} :: ListExports)
+
+-- | Determines the field that the list of exports is sorted by. You can sort
+-- by the @LastUpdatedDateTime@ field in ascending or descending order.
+listExports_sortBy :: Lens.Lens' ListExports (Prelude.Maybe ExportSortBy)
+listExports_sortBy = Lens.lens (\ListExports' {sortBy} -> sortBy) (\s@ListExports' {} a -> s {sortBy = a} :: ListExports)
+
+instance Core.AWSRequest ListExports where
+  type AWSResponse ListExports = ListExportsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListExportsResponse'
+            Prelude.<$> (x Data..?> "botId")
+            Prelude.<*> (x Data..?> "botVersion")
+            Prelude.<*> ( x
+                            Data..?> "exportSummaries"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (x Data..?> "localeId")
+            Prelude.<*> (x Data..?> "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListExports where
+  hashWithSalt _salt ListExports' {..} =
+    _salt
+      `Prelude.hashWithSalt` botId
+      `Prelude.hashWithSalt` botVersion
+      `Prelude.hashWithSalt` filters
+      `Prelude.hashWithSalt` localeId
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` sortBy
+
+instance Prelude.NFData ListExports where
+  rnf ListExports' {..} =
+    Prelude.rnf botId
+      `Prelude.seq` Prelude.rnf botVersion
+      `Prelude.seq` Prelude.rnf filters
+      `Prelude.seq` Prelude.rnf localeId
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf sortBy
+
+instance Data.ToHeaders ListExports where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ListExports where
+  toJSON ListExports' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("botId" Data..=) Prelude.<$> botId,
+            ("botVersion" Data..=) Prelude.<$> botVersion,
+            ("filters" Data..=) Prelude.<$> filters,
+            ("localeId" Data..=) Prelude.<$> localeId,
+            ("maxResults" Data..=) Prelude.<$> maxResults,
+            ("nextToken" Data..=) Prelude.<$> nextToken,
+            ("sortBy" Data..=) Prelude.<$> sortBy
+          ]
+      )
+
+instance Data.ToPath ListExports where
+  toPath = Prelude.const "/exports/"
+
+instance Data.ToQuery ListExports where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListExportsResponse' smart constructor.
+data ListExportsResponse = ListExportsResponse'
+  { -- | The unique identifier assigned to the bot by Amazon Lex.
+    botId :: Prelude.Maybe Prelude.Text,
+    -- | The version of the bot that was exported.
+    botVersion :: Prelude.Maybe Prelude.Text,
+    -- | Summary information for the exports that meet the filter criteria
+    -- specified in the request. The length of the list is specified in the
+    -- @maxResults@ parameter. If there are more exports available, the
+    -- @nextToken@ field contains a token to get the next page of results.
+    exportSummaries :: Prelude.Maybe [ExportSummary],
+    -- | The locale specified in the request.
+    localeId :: Prelude.Maybe Prelude.Text,
+    -- | A token that indicates whether there are more results to return in a
+    -- response to the @ListExports@ operation. If the @nextToken@ field is
+    -- present, you send the contents as the @nextToken@ parameter of a
+    -- @ListExports@ operation request to get the next page of results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListExportsResponse' 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:
+--
+-- 'botId', 'listExportsResponse_botId' - The unique identifier assigned to the bot by Amazon Lex.
+--
+-- 'botVersion', 'listExportsResponse_botVersion' - The version of the bot that was exported.
+--
+-- 'exportSummaries', 'listExportsResponse_exportSummaries' - Summary information for the exports that meet the filter criteria
+-- specified in the request. The length of the list is specified in the
+-- @maxResults@ parameter. If there are more exports available, the
+-- @nextToken@ field contains a token to get the next page of results.
+--
+-- 'localeId', 'listExportsResponse_localeId' - The locale specified in the request.
+--
+-- 'nextToken', 'listExportsResponse_nextToken' - A token that indicates whether there are more results to return in a
+-- response to the @ListExports@ operation. If the @nextToken@ field is
+-- present, you send the contents as the @nextToken@ parameter of a
+-- @ListExports@ operation request to get the next page of results.
+--
+-- 'httpStatus', 'listExportsResponse_httpStatus' - The response's http status code.
+newListExportsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListExportsResponse
+newListExportsResponse pHttpStatus_ =
+  ListExportsResponse'
+    { botId = Prelude.Nothing,
+      botVersion = Prelude.Nothing,
+      exportSummaries = Prelude.Nothing,
+      localeId = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The unique identifier assigned to the bot by Amazon Lex.
+listExportsResponse_botId :: Lens.Lens' ListExportsResponse (Prelude.Maybe Prelude.Text)
+listExportsResponse_botId = Lens.lens (\ListExportsResponse' {botId} -> botId) (\s@ListExportsResponse' {} a -> s {botId = a} :: ListExportsResponse)
+
+-- | The version of the bot that was exported.
+listExportsResponse_botVersion :: Lens.Lens' ListExportsResponse (Prelude.Maybe Prelude.Text)
+listExportsResponse_botVersion = Lens.lens (\ListExportsResponse' {botVersion} -> botVersion) (\s@ListExportsResponse' {} a -> s {botVersion = a} :: ListExportsResponse)
+
+-- | Summary information for the exports that meet the filter criteria
+-- specified in the request. The length of the list is specified in the
+-- @maxResults@ parameter. If there are more exports available, the
+-- @nextToken@ field contains a token to get the next page of results.
+listExportsResponse_exportSummaries :: Lens.Lens' ListExportsResponse (Prelude.Maybe [ExportSummary])
+listExportsResponse_exportSummaries = Lens.lens (\ListExportsResponse' {exportSummaries} -> exportSummaries) (\s@ListExportsResponse' {} a -> s {exportSummaries = a} :: ListExportsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The locale specified in the request.
+listExportsResponse_localeId :: Lens.Lens' ListExportsResponse (Prelude.Maybe Prelude.Text)
+listExportsResponse_localeId = Lens.lens (\ListExportsResponse' {localeId} -> localeId) (\s@ListExportsResponse' {} a -> s {localeId = a} :: ListExportsResponse)
+
+-- | A token that indicates whether there are more results to return in a
+-- response to the @ListExports@ operation. If the @nextToken@ field is
+-- present, you send the contents as the @nextToken@ parameter of a
+-- @ListExports@ operation request to get the next page of results.
+listExportsResponse_nextToken :: Lens.Lens' ListExportsResponse (Prelude.Maybe Prelude.Text)
+listExportsResponse_nextToken = Lens.lens (\ListExportsResponse' {nextToken} -> nextToken) (\s@ListExportsResponse' {} a -> s {nextToken = a} :: ListExportsResponse)
+
+-- | The response's http status code.
+listExportsResponse_httpStatus :: Lens.Lens' ListExportsResponse Prelude.Int
+listExportsResponse_httpStatus = Lens.lens (\ListExportsResponse' {httpStatus} -> httpStatus) (\s@ListExportsResponse' {} a -> s {httpStatus = a} :: ListExportsResponse)
+
+instance Prelude.NFData ListExportsResponse where
+  rnf ListExportsResponse' {..} =
+    Prelude.rnf botId
+      `Prelude.seq` Prelude.rnf botVersion
+      `Prelude.seq` Prelude.rnf exportSummaries
+      `Prelude.seq` Prelude.rnf localeId
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/LexV2Models/ListImports.hs b/gen/Amazonka/LexV2Models/ListImports.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/ListImports.hs
@@ -0,0 +1,354 @@
+{-# 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.LexV2Models.ListImports
+-- 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 imports for a bot, bot locale, or custom vocabulary. Imports
+-- are kept in the list for 7 days.
+module Amazonka.LexV2Models.ListImports
+  ( -- * Creating a Request
+    ListImports (..),
+    newListImports,
+
+    -- * Request Lenses
+    listImports_botId,
+    listImports_botVersion,
+    listImports_filters,
+    listImports_localeId,
+    listImports_maxResults,
+    listImports_nextToken,
+    listImports_sortBy,
+
+    -- * Destructuring the Response
+    ListImportsResponse (..),
+    newListImportsResponse,
+
+    -- * Response Lenses
+    listImportsResponse_botId,
+    listImportsResponse_botVersion,
+    listImportsResponse_importSummaries,
+    listImportsResponse_localeId,
+    listImportsResponse_nextToken,
+    listImportsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LexV2Models.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListImports' smart constructor.
+data ListImports = ListImports'
+  { -- | The unique identifier that Amazon Lex assigned to the bot.
+    botId :: Prelude.Maybe Prelude.Text,
+    -- | The version of the bot to list imports for.
+    botVersion :: Prelude.Maybe Prelude.Text,
+    -- | Provides the specification of a filter used to limit the bots in the
+    -- response to only those that match the filter specification. You can only
+    -- specify one filter and one string to filter on.
+    filters :: Prelude.Maybe (Prelude.NonEmpty ImportFilter),
+    -- | Specifies the locale that should be present in the list. If you don\'t
+    -- specify a resource type in the @filters@ parameter, the list contains
+    -- both bot locales and custom vocabularies.
+    localeId :: Prelude.Maybe Prelude.Text,
+    -- | The maximum number of imports to return in each page of results. If
+    -- there are fewer results than the max page size, only the actual number
+    -- of results are returned.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | If the response from the @ListImports@ operation contains more results
+    -- than specified in the @maxResults@ parameter, a token is returned in the
+    -- response.
+    --
+    -- Use the returned token in the @nextToken@ parameter of a @ListImports@
+    -- request to return the next page of results. For a complete set of
+    -- results, call the @ListImports@ operation until the @nextToken@ returned
+    -- in the response is null.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | Determines the field that the list of imports is sorted by. You can sort
+    -- by the @LastUpdatedDateTime@ field in ascending or descending order.
+    sortBy :: Prelude.Maybe ImportSortBy
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListImports' 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:
+--
+-- 'botId', 'listImports_botId' - The unique identifier that Amazon Lex assigned to the bot.
+--
+-- 'botVersion', 'listImports_botVersion' - The version of the bot to list imports for.
+--
+-- 'filters', 'listImports_filters' - Provides the specification of a filter used to limit the bots in the
+-- response to only those that match the filter specification. You can only
+-- specify one filter and one string to filter on.
+--
+-- 'localeId', 'listImports_localeId' - Specifies the locale that should be present in the list. If you don\'t
+-- specify a resource type in the @filters@ parameter, the list contains
+-- both bot locales and custom vocabularies.
+--
+-- 'maxResults', 'listImports_maxResults' - The maximum number of imports to return in each page of results. If
+-- there are fewer results than the max page size, only the actual number
+-- of results are returned.
+--
+-- 'nextToken', 'listImports_nextToken' - If the response from the @ListImports@ operation contains more results
+-- than specified in the @maxResults@ parameter, a token is returned in the
+-- response.
+--
+-- Use the returned token in the @nextToken@ parameter of a @ListImports@
+-- request to return the next page of results. For a complete set of
+-- results, call the @ListImports@ operation until the @nextToken@ returned
+-- in the response is null.
+--
+-- 'sortBy', 'listImports_sortBy' - Determines the field that the list of imports is sorted by. You can sort
+-- by the @LastUpdatedDateTime@ field in ascending or descending order.
+newListImports ::
+  ListImports
+newListImports =
+  ListImports'
+    { botId = Prelude.Nothing,
+      botVersion = Prelude.Nothing,
+      filters = Prelude.Nothing,
+      localeId = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      sortBy = Prelude.Nothing
+    }
+
+-- | The unique identifier that Amazon Lex assigned to the bot.
+listImports_botId :: Lens.Lens' ListImports (Prelude.Maybe Prelude.Text)
+listImports_botId = Lens.lens (\ListImports' {botId} -> botId) (\s@ListImports' {} a -> s {botId = a} :: ListImports)
+
+-- | The version of the bot to list imports for.
+listImports_botVersion :: Lens.Lens' ListImports (Prelude.Maybe Prelude.Text)
+listImports_botVersion = Lens.lens (\ListImports' {botVersion} -> botVersion) (\s@ListImports' {} a -> s {botVersion = a} :: ListImports)
+
+-- | Provides the specification of a filter used to limit the bots in the
+-- response to only those that match the filter specification. You can only
+-- specify one filter and one string to filter on.
+listImports_filters :: Lens.Lens' ListImports (Prelude.Maybe (Prelude.NonEmpty ImportFilter))
+listImports_filters = Lens.lens (\ListImports' {filters} -> filters) (\s@ListImports' {} a -> s {filters = a} :: ListImports) Prelude.. Lens.mapping Lens.coerced
+
+-- | Specifies the locale that should be present in the list. If you don\'t
+-- specify a resource type in the @filters@ parameter, the list contains
+-- both bot locales and custom vocabularies.
+listImports_localeId :: Lens.Lens' ListImports (Prelude.Maybe Prelude.Text)
+listImports_localeId = Lens.lens (\ListImports' {localeId} -> localeId) (\s@ListImports' {} a -> s {localeId = a} :: ListImports)
+
+-- | The maximum number of imports to return in each page of results. If
+-- there are fewer results than the max page size, only the actual number
+-- of results are returned.
+listImports_maxResults :: Lens.Lens' ListImports (Prelude.Maybe Prelude.Natural)
+listImports_maxResults = Lens.lens (\ListImports' {maxResults} -> maxResults) (\s@ListImports' {} a -> s {maxResults = a} :: ListImports)
+
+-- | If the response from the @ListImports@ operation contains more results
+-- than specified in the @maxResults@ parameter, a token is returned in the
+-- response.
+--
+-- Use the returned token in the @nextToken@ parameter of a @ListImports@
+-- request to return the next page of results. For a complete set of
+-- results, call the @ListImports@ operation until the @nextToken@ returned
+-- in the response is null.
+listImports_nextToken :: Lens.Lens' ListImports (Prelude.Maybe Prelude.Text)
+listImports_nextToken = Lens.lens (\ListImports' {nextToken} -> nextToken) (\s@ListImports' {} a -> s {nextToken = a} :: ListImports)
+
+-- | Determines the field that the list of imports is sorted by. You can sort
+-- by the @LastUpdatedDateTime@ field in ascending or descending order.
+listImports_sortBy :: Lens.Lens' ListImports (Prelude.Maybe ImportSortBy)
+listImports_sortBy = Lens.lens (\ListImports' {sortBy} -> sortBy) (\s@ListImports' {} a -> s {sortBy = a} :: ListImports)
+
+instance Core.AWSRequest ListImports where
+  type AWSResponse ListImports = ListImportsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListImportsResponse'
+            Prelude.<$> (x Data..?> "botId")
+            Prelude.<*> (x Data..?> "botVersion")
+            Prelude.<*> ( x
+                            Data..?> "importSummaries"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (x Data..?> "localeId")
+            Prelude.<*> (x Data..?> "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListImports where
+  hashWithSalt _salt ListImports' {..} =
+    _salt
+      `Prelude.hashWithSalt` botId
+      `Prelude.hashWithSalt` botVersion
+      `Prelude.hashWithSalt` filters
+      `Prelude.hashWithSalt` localeId
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` sortBy
+
+instance Prelude.NFData ListImports where
+  rnf ListImports' {..} =
+    Prelude.rnf botId
+      `Prelude.seq` Prelude.rnf botVersion
+      `Prelude.seq` Prelude.rnf filters
+      `Prelude.seq` Prelude.rnf localeId
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf sortBy
+
+instance Data.ToHeaders ListImports where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ListImports where
+  toJSON ListImports' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("botId" Data..=) Prelude.<$> botId,
+            ("botVersion" Data..=) Prelude.<$> botVersion,
+            ("filters" Data..=) Prelude.<$> filters,
+            ("localeId" Data..=) Prelude.<$> localeId,
+            ("maxResults" Data..=) Prelude.<$> maxResults,
+            ("nextToken" Data..=) Prelude.<$> nextToken,
+            ("sortBy" Data..=) Prelude.<$> sortBy
+          ]
+      )
+
+instance Data.ToPath ListImports where
+  toPath = Prelude.const "/imports/"
+
+instance Data.ToQuery ListImports where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListImportsResponse' smart constructor.
+data ListImportsResponse = ListImportsResponse'
+  { -- | The unique identifier assigned by Amazon Lex to the bot.
+    botId :: Prelude.Maybe Prelude.Text,
+    -- | The version of the bot that was imported. It will always be @DRAFT@.
+    botVersion :: Prelude.Maybe Prelude.Text,
+    -- | Summary information for the imports that meet the filter criteria
+    -- specified in the request. The length of the list is specified in the
+    -- @maxResults@ parameter. If there are more imports available, the
+    -- @nextToken@ field contains a token to get the next page of results.
+    importSummaries :: Prelude.Maybe [ImportSummary],
+    -- | The locale specified in the request.
+    localeId :: Prelude.Maybe Prelude.Text,
+    -- | A token that indicates whether there are more results to return in a
+    -- response to the @ListImports@ operation. If the @nextToken@ field is
+    -- present, you send the contents as the @nextToken@ parameter of a
+    -- @ListImports@ operation request to get the next page of results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListImportsResponse' 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:
+--
+-- 'botId', 'listImportsResponse_botId' - The unique identifier assigned by Amazon Lex to the bot.
+--
+-- 'botVersion', 'listImportsResponse_botVersion' - The version of the bot that was imported. It will always be @DRAFT@.
+--
+-- 'importSummaries', 'listImportsResponse_importSummaries' - Summary information for the imports that meet the filter criteria
+-- specified in the request. The length of the list is specified in the
+-- @maxResults@ parameter. If there are more imports available, the
+-- @nextToken@ field contains a token to get the next page of results.
+--
+-- 'localeId', 'listImportsResponse_localeId' - The locale specified in the request.
+--
+-- 'nextToken', 'listImportsResponse_nextToken' - A token that indicates whether there are more results to return in a
+-- response to the @ListImports@ operation. If the @nextToken@ field is
+-- present, you send the contents as the @nextToken@ parameter of a
+-- @ListImports@ operation request to get the next page of results.
+--
+-- 'httpStatus', 'listImportsResponse_httpStatus' - The response's http status code.
+newListImportsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListImportsResponse
+newListImportsResponse pHttpStatus_ =
+  ListImportsResponse'
+    { botId = Prelude.Nothing,
+      botVersion = Prelude.Nothing,
+      importSummaries = Prelude.Nothing,
+      localeId = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The unique identifier assigned by Amazon Lex to the bot.
+listImportsResponse_botId :: Lens.Lens' ListImportsResponse (Prelude.Maybe Prelude.Text)
+listImportsResponse_botId = Lens.lens (\ListImportsResponse' {botId} -> botId) (\s@ListImportsResponse' {} a -> s {botId = a} :: ListImportsResponse)
+
+-- | The version of the bot that was imported. It will always be @DRAFT@.
+listImportsResponse_botVersion :: Lens.Lens' ListImportsResponse (Prelude.Maybe Prelude.Text)
+listImportsResponse_botVersion = Lens.lens (\ListImportsResponse' {botVersion} -> botVersion) (\s@ListImportsResponse' {} a -> s {botVersion = a} :: ListImportsResponse)
+
+-- | Summary information for the imports that meet the filter criteria
+-- specified in the request. The length of the list is specified in the
+-- @maxResults@ parameter. If there are more imports available, the
+-- @nextToken@ field contains a token to get the next page of results.
+listImportsResponse_importSummaries :: Lens.Lens' ListImportsResponse (Prelude.Maybe [ImportSummary])
+listImportsResponse_importSummaries = Lens.lens (\ListImportsResponse' {importSummaries} -> importSummaries) (\s@ListImportsResponse' {} a -> s {importSummaries = a} :: ListImportsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The locale specified in the request.
+listImportsResponse_localeId :: Lens.Lens' ListImportsResponse (Prelude.Maybe Prelude.Text)
+listImportsResponse_localeId = Lens.lens (\ListImportsResponse' {localeId} -> localeId) (\s@ListImportsResponse' {} a -> s {localeId = a} :: ListImportsResponse)
+
+-- | A token that indicates whether there are more results to return in a
+-- response to the @ListImports@ operation. If the @nextToken@ field is
+-- present, you send the contents as the @nextToken@ parameter of a
+-- @ListImports@ operation request to get the next page of results.
+listImportsResponse_nextToken :: Lens.Lens' ListImportsResponse (Prelude.Maybe Prelude.Text)
+listImportsResponse_nextToken = Lens.lens (\ListImportsResponse' {nextToken} -> nextToken) (\s@ListImportsResponse' {} a -> s {nextToken = a} :: ListImportsResponse)
+
+-- | The response's http status code.
+listImportsResponse_httpStatus :: Lens.Lens' ListImportsResponse Prelude.Int
+listImportsResponse_httpStatus = Lens.lens (\ListImportsResponse' {httpStatus} -> httpStatus) (\s@ListImportsResponse' {} a -> s {httpStatus = a} :: ListImportsResponse)
+
+instance Prelude.NFData ListImportsResponse where
+  rnf ListImportsResponse' {..} =
+    Prelude.rnf botId
+      `Prelude.seq` Prelude.rnf botVersion
+      `Prelude.seq` Prelude.rnf importSummaries
+      `Prelude.seq` Prelude.rnf localeId
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/LexV2Models/ListIntents.hs b/gen/Amazonka/LexV2Models/ListIntents.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/ListIntents.hs
@@ -0,0 +1,374 @@
+{-# 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.LexV2Models.ListIntents
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Get a list of intents that meet the specified criteria.
+module Amazonka.LexV2Models.ListIntents
+  ( -- * Creating a Request
+    ListIntents (..),
+    newListIntents,
+
+    -- * Request Lenses
+    listIntents_filters,
+    listIntents_maxResults,
+    listIntents_nextToken,
+    listIntents_sortBy,
+    listIntents_botId,
+    listIntents_botVersion,
+    listIntents_localeId,
+
+    -- * Destructuring the Response
+    ListIntentsResponse (..),
+    newListIntentsResponse,
+
+    -- * Response Lenses
+    listIntentsResponse_botId,
+    listIntentsResponse_botVersion,
+    listIntentsResponse_intentSummaries,
+    listIntentsResponse_localeId,
+    listIntentsResponse_nextToken,
+    listIntentsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LexV2Models.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListIntents' smart constructor.
+data ListIntents = ListIntents'
+  { -- | Provides the specification of a filter used to limit the intents in the
+    -- response to only those that match the filter specification. You can only
+    -- specify one filter and only one string to filter on.
+    filters :: Prelude.Maybe (Prelude.NonEmpty IntentFilter),
+    -- | The maximum number of intents to return in each page of results. If
+    -- there are fewer results than the max page size, only the actual number
+    -- of results are returned.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | If the response from the @ListIntents@ operation contains more results
+    -- than specified in the @maxResults@ parameter, a token is returned in the
+    -- response.
+    --
+    -- Use the returned token in the @nextToken@ parameter of a @ListIntents@
+    -- request to return the next page of results. For a complete set of
+    -- results, call the @ListIntents@ operation until the @nextToken@ returned
+    -- in the response is null.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | Determines the sort order for the response from the @ListIntents@
+    -- operation. You can choose to sort by the intent name or last updated
+    -- date in either ascending or descending order.
+    sortBy :: Prelude.Maybe IntentSortBy,
+    -- | The unique identifier of the bot that contains the intent.
+    botId :: Prelude.Text,
+    -- | The version of the bot that contains the intent.
+    botVersion :: Prelude.Text,
+    -- | The identifier of the language and locale of the intents to list. The
+    -- string must match one of the supported locales. For more information,
+    -- see
+    -- <https://docs.aws.amazon.com/lexv2/latest/dg/how-languages.html Supported languages>.
+    localeId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListIntents' 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:
+--
+-- 'filters', 'listIntents_filters' - Provides the specification of a filter used to limit the intents in the
+-- response to only those that match the filter specification. You can only
+-- specify one filter and only one string to filter on.
+--
+-- 'maxResults', 'listIntents_maxResults' - The maximum number of intents to return in each page of results. If
+-- there are fewer results than the max page size, only the actual number
+-- of results are returned.
+--
+-- 'nextToken', 'listIntents_nextToken' - If the response from the @ListIntents@ operation contains more results
+-- than specified in the @maxResults@ parameter, a token is returned in the
+-- response.
+--
+-- Use the returned token in the @nextToken@ parameter of a @ListIntents@
+-- request to return the next page of results. For a complete set of
+-- results, call the @ListIntents@ operation until the @nextToken@ returned
+-- in the response is null.
+--
+-- 'sortBy', 'listIntents_sortBy' - Determines the sort order for the response from the @ListIntents@
+-- operation. You can choose to sort by the intent name or last updated
+-- date in either ascending or descending order.
+--
+-- 'botId', 'listIntents_botId' - The unique identifier of the bot that contains the intent.
+--
+-- 'botVersion', 'listIntents_botVersion' - The version of the bot that contains the intent.
+--
+-- 'localeId', 'listIntents_localeId' - The identifier of the language and locale of the intents to list. The
+-- string must match one of the supported locales. For more information,
+-- see
+-- <https://docs.aws.amazon.com/lexv2/latest/dg/how-languages.html Supported languages>.
+newListIntents ::
+  -- | 'botId'
+  Prelude.Text ->
+  -- | 'botVersion'
+  Prelude.Text ->
+  -- | 'localeId'
+  Prelude.Text ->
+  ListIntents
+newListIntents pBotId_ pBotVersion_ pLocaleId_ =
+  ListIntents'
+    { filters = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      sortBy = Prelude.Nothing,
+      botId = pBotId_,
+      botVersion = pBotVersion_,
+      localeId = pLocaleId_
+    }
+
+-- | Provides the specification of a filter used to limit the intents in the
+-- response to only those that match the filter specification. You can only
+-- specify one filter and only one string to filter on.
+listIntents_filters :: Lens.Lens' ListIntents (Prelude.Maybe (Prelude.NonEmpty IntentFilter))
+listIntents_filters = Lens.lens (\ListIntents' {filters} -> filters) (\s@ListIntents' {} a -> s {filters = a} :: ListIntents) Prelude.. Lens.mapping Lens.coerced
+
+-- | The maximum number of intents to return in each page of results. If
+-- there are fewer results than the max page size, only the actual number
+-- of results are returned.
+listIntents_maxResults :: Lens.Lens' ListIntents (Prelude.Maybe Prelude.Natural)
+listIntents_maxResults = Lens.lens (\ListIntents' {maxResults} -> maxResults) (\s@ListIntents' {} a -> s {maxResults = a} :: ListIntents)
+
+-- | If the response from the @ListIntents@ operation contains more results
+-- than specified in the @maxResults@ parameter, a token is returned in the
+-- response.
+--
+-- Use the returned token in the @nextToken@ parameter of a @ListIntents@
+-- request to return the next page of results. For a complete set of
+-- results, call the @ListIntents@ operation until the @nextToken@ returned
+-- in the response is null.
+listIntents_nextToken :: Lens.Lens' ListIntents (Prelude.Maybe Prelude.Text)
+listIntents_nextToken = Lens.lens (\ListIntents' {nextToken} -> nextToken) (\s@ListIntents' {} a -> s {nextToken = a} :: ListIntents)
+
+-- | Determines the sort order for the response from the @ListIntents@
+-- operation. You can choose to sort by the intent name or last updated
+-- date in either ascending or descending order.
+listIntents_sortBy :: Lens.Lens' ListIntents (Prelude.Maybe IntentSortBy)
+listIntents_sortBy = Lens.lens (\ListIntents' {sortBy} -> sortBy) (\s@ListIntents' {} a -> s {sortBy = a} :: ListIntents)
+
+-- | The unique identifier of the bot that contains the intent.
+listIntents_botId :: Lens.Lens' ListIntents Prelude.Text
+listIntents_botId = Lens.lens (\ListIntents' {botId} -> botId) (\s@ListIntents' {} a -> s {botId = a} :: ListIntents)
+
+-- | The version of the bot that contains the intent.
+listIntents_botVersion :: Lens.Lens' ListIntents Prelude.Text
+listIntents_botVersion = Lens.lens (\ListIntents' {botVersion} -> botVersion) (\s@ListIntents' {} a -> s {botVersion = a} :: ListIntents)
+
+-- | The identifier of the language and locale of the intents to list. The
+-- string must match one of the supported locales. For more information,
+-- see
+-- <https://docs.aws.amazon.com/lexv2/latest/dg/how-languages.html Supported languages>.
+listIntents_localeId :: Lens.Lens' ListIntents Prelude.Text
+listIntents_localeId = Lens.lens (\ListIntents' {localeId} -> localeId) (\s@ListIntents' {} a -> s {localeId = a} :: ListIntents)
+
+instance Core.AWSRequest ListIntents where
+  type AWSResponse ListIntents = ListIntentsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListIntentsResponse'
+            Prelude.<$> (x Data..?> "botId")
+            Prelude.<*> (x Data..?> "botVersion")
+            Prelude.<*> ( x
+                            Data..?> "intentSummaries"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (x Data..?> "localeId")
+            Prelude.<*> (x Data..?> "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListIntents where
+  hashWithSalt _salt ListIntents' {..} =
+    _salt
+      `Prelude.hashWithSalt` filters
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` sortBy
+      `Prelude.hashWithSalt` botId
+      `Prelude.hashWithSalt` botVersion
+      `Prelude.hashWithSalt` localeId
+
+instance Prelude.NFData ListIntents where
+  rnf ListIntents' {..} =
+    Prelude.rnf filters
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf sortBy
+      `Prelude.seq` Prelude.rnf botId
+      `Prelude.seq` Prelude.rnf botVersion
+      `Prelude.seq` Prelude.rnf localeId
+
+instance Data.ToHeaders ListIntents where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ListIntents where
+  toJSON ListIntents' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("filters" Data..=) Prelude.<$> filters,
+            ("maxResults" Data..=) Prelude.<$> maxResults,
+            ("nextToken" Data..=) Prelude.<$> nextToken,
+            ("sortBy" Data..=) Prelude.<$> sortBy
+          ]
+      )
+
+instance Data.ToPath ListIntents where
+  toPath ListIntents' {..} =
+    Prelude.mconcat
+      [ "/bots/",
+        Data.toBS botId,
+        "/botversions/",
+        Data.toBS botVersion,
+        "/botlocales/",
+        Data.toBS localeId,
+        "/intents/"
+      ]
+
+instance Data.ToQuery ListIntents where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListIntentsResponse' smart constructor.
+data ListIntentsResponse = ListIntentsResponse'
+  { -- | The identifier of the bot that contains the intent.
+    botId :: Prelude.Maybe Prelude.Text,
+    -- | The version of the bot that contains the intent.
+    botVersion :: Prelude.Maybe Prelude.Text,
+    -- | Summary information for the intents that meet the filter criteria
+    -- specified in the request. The length of the list is specified in the
+    -- @maxResults@ parameter of the request. If there are more intents
+    -- available, the @nextToken@ field contains a token to get the next page
+    -- of results.
+    intentSummaries :: Prelude.Maybe [IntentSummary],
+    -- | The language and locale of the intents in the list.
+    localeId :: Prelude.Maybe Prelude.Text,
+    -- | A token that indicates whether there are more results to return in a
+    -- response to the @ListIntents@ operation. If the @nextToken@ field is
+    -- present, you send the contents as the @nextToken@ parameter of a
+    -- @ListIntents@ operation request to get the next page of results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListIntentsResponse' 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:
+--
+-- 'botId', 'listIntentsResponse_botId' - The identifier of the bot that contains the intent.
+--
+-- 'botVersion', 'listIntentsResponse_botVersion' - The version of the bot that contains the intent.
+--
+-- 'intentSummaries', 'listIntentsResponse_intentSummaries' - Summary information for the intents that meet the filter criteria
+-- specified in the request. The length of the list is specified in the
+-- @maxResults@ parameter of the request. If there are more intents
+-- available, the @nextToken@ field contains a token to get the next page
+-- of results.
+--
+-- 'localeId', 'listIntentsResponse_localeId' - The language and locale of the intents in the list.
+--
+-- 'nextToken', 'listIntentsResponse_nextToken' - A token that indicates whether there are more results to return in a
+-- response to the @ListIntents@ operation. If the @nextToken@ field is
+-- present, you send the contents as the @nextToken@ parameter of a
+-- @ListIntents@ operation request to get the next page of results.
+--
+-- 'httpStatus', 'listIntentsResponse_httpStatus' - The response's http status code.
+newListIntentsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListIntentsResponse
+newListIntentsResponse pHttpStatus_ =
+  ListIntentsResponse'
+    { botId = Prelude.Nothing,
+      botVersion = Prelude.Nothing,
+      intentSummaries = Prelude.Nothing,
+      localeId = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The identifier of the bot that contains the intent.
+listIntentsResponse_botId :: Lens.Lens' ListIntentsResponse (Prelude.Maybe Prelude.Text)
+listIntentsResponse_botId = Lens.lens (\ListIntentsResponse' {botId} -> botId) (\s@ListIntentsResponse' {} a -> s {botId = a} :: ListIntentsResponse)
+
+-- | The version of the bot that contains the intent.
+listIntentsResponse_botVersion :: Lens.Lens' ListIntentsResponse (Prelude.Maybe Prelude.Text)
+listIntentsResponse_botVersion = Lens.lens (\ListIntentsResponse' {botVersion} -> botVersion) (\s@ListIntentsResponse' {} a -> s {botVersion = a} :: ListIntentsResponse)
+
+-- | Summary information for the intents that meet the filter criteria
+-- specified in the request. The length of the list is specified in the
+-- @maxResults@ parameter of the request. If there are more intents
+-- available, the @nextToken@ field contains a token to get the next page
+-- of results.
+listIntentsResponse_intentSummaries :: Lens.Lens' ListIntentsResponse (Prelude.Maybe [IntentSummary])
+listIntentsResponse_intentSummaries = Lens.lens (\ListIntentsResponse' {intentSummaries} -> intentSummaries) (\s@ListIntentsResponse' {} a -> s {intentSummaries = a} :: ListIntentsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The language and locale of the intents in the list.
+listIntentsResponse_localeId :: Lens.Lens' ListIntentsResponse (Prelude.Maybe Prelude.Text)
+listIntentsResponse_localeId = Lens.lens (\ListIntentsResponse' {localeId} -> localeId) (\s@ListIntentsResponse' {} a -> s {localeId = a} :: ListIntentsResponse)
+
+-- | A token that indicates whether there are more results to return in a
+-- response to the @ListIntents@ operation. If the @nextToken@ field is
+-- present, you send the contents as the @nextToken@ parameter of a
+-- @ListIntents@ operation request to get the next page of results.
+listIntentsResponse_nextToken :: Lens.Lens' ListIntentsResponse (Prelude.Maybe Prelude.Text)
+listIntentsResponse_nextToken = Lens.lens (\ListIntentsResponse' {nextToken} -> nextToken) (\s@ListIntentsResponse' {} a -> s {nextToken = a} :: ListIntentsResponse)
+
+-- | The response's http status code.
+listIntentsResponse_httpStatus :: Lens.Lens' ListIntentsResponse Prelude.Int
+listIntentsResponse_httpStatus = Lens.lens (\ListIntentsResponse' {httpStatus} -> httpStatus) (\s@ListIntentsResponse' {} a -> s {httpStatus = a} :: ListIntentsResponse)
+
+instance Prelude.NFData ListIntentsResponse where
+  rnf ListIntentsResponse' {..} =
+    Prelude.rnf botId
+      `Prelude.seq` Prelude.rnf botVersion
+      `Prelude.seq` Prelude.rnf intentSummaries
+      `Prelude.seq` Prelude.rnf localeId
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/LexV2Models/ListRecommendedIntents.hs b/gen/Amazonka/LexV2Models/ListRecommendedIntents.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/ListRecommendedIntents.hs
@@ -0,0 +1,374 @@
+{-# 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.LexV2Models.ListRecommendedIntents
+-- 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 a list of recommended intents provided by the bot recommendation
+-- that you can use in your bot. Intents in the response are ordered by
+-- relevance.
+module Amazonka.LexV2Models.ListRecommendedIntents
+  ( -- * Creating a Request
+    ListRecommendedIntents (..),
+    newListRecommendedIntents,
+
+    -- * Request Lenses
+    listRecommendedIntents_maxResults,
+    listRecommendedIntents_nextToken,
+    listRecommendedIntents_botId,
+    listRecommendedIntents_botVersion,
+    listRecommendedIntents_localeId,
+    listRecommendedIntents_botRecommendationId,
+
+    -- * Destructuring the Response
+    ListRecommendedIntentsResponse (..),
+    newListRecommendedIntentsResponse,
+
+    -- * Response Lenses
+    listRecommendedIntentsResponse_botId,
+    listRecommendedIntentsResponse_botRecommendationId,
+    listRecommendedIntentsResponse_botVersion,
+    listRecommendedIntentsResponse_localeId,
+    listRecommendedIntentsResponse_nextToken,
+    listRecommendedIntentsResponse_summaryList,
+    listRecommendedIntentsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LexV2Models.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListRecommendedIntents' smart constructor.
+data ListRecommendedIntents = ListRecommendedIntents'
+  { -- | The maximum number of bot recommendations to return in each page of
+    -- results. If there are fewer results than the max page size, only the
+    -- actual number of results are returned.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | If the response from the ListRecommendedIntents operation contains more
+    -- results than specified in the maxResults parameter, a token is returned
+    -- in the response. Use that token in the nextToken parameter to return the
+    -- next page of results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The unique identifier of the bot associated with the recommended
+    -- intents.
+    botId :: Prelude.Text,
+    -- | The version of the bot that contains the recommended intents.
+    botVersion :: Prelude.Text,
+    -- | The identifier of the language and locale of the recommended intents.
+    localeId :: Prelude.Text,
+    -- | The identifier of the bot recommendation that contains the recommended
+    -- intents.
+    botRecommendationId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListRecommendedIntents' 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', 'listRecommendedIntents_maxResults' - The maximum number of bot recommendations to return in each page of
+-- results. If there are fewer results than the max page size, only the
+-- actual number of results are returned.
+--
+-- 'nextToken', 'listRecommendedIntents_nextToken' - If the response from the ListRecommendedIntents operation contains more
+-- results than specified in the maxResults parameter, a token is returned
+-- in the response. Use that token in the nextToken parameter to return the
+-- next page of results.
+--
+-- 'botId', 'listRecommendedIntents_botId' - The unique identifier of the bot associated with the recommended
+-- intents.
+--
+-- 'botVersion', 'listRecommendedIntents_botVersion' - The version of the bot that contains the recommended intents.
+--
+-- 'localeId', 'listRecommendedIntents_localeId' - The identifier of the language and locale of the recommended intents.
+--
+-- 'botRecommendationId', 'listRecommendedIntents_botRecommendationId' - The identifier of the bot recommendation that contains the recommended
+-- intents.
+newListRecommendedIntents ::
+  -- | 'botId'
+  Prelude.Text ->
+  -- | 'botVersion'
+  Prelude.Text ->
+  -- | 'localeId'
+  Prelude.Text ->
+  -- | 'botRecommendationId'
+  Prelude.Text ->
+  ListRecommendedIntents
+newListRecommendedIntents
+  pBotId_
+  pBotVersion_
+  pLocaleId_
+  pBotRecommendationId_ =
+    ListRecommendedIntents'
+      { maxResults =
+          Prelude.Nothing,
+        nextToken = Prelude.Nothing,
+        botId = pBotId_,
+        botVersion = pBotVersion_,
+        localeId = pLocaleId_,
+        botRecommendationId = pBotRecommendationId_
+      }
+
+-- | The maximum number of bot recommendations to return in each page of
+-- results. If there are fewer results than the max page size, only the
+-- actual number of results are returned.
+listRecommendedIntents_maxResults :: Lens.Lens' ListRecommendedIntents (Prelude.Maybe Prelude.Natural)
+listRecommendedIntents_maxResults = Lens.lens (\ListRecommendedIntents' {maxResults} -> maxResults) (\s@ListRecommendedIntents' {} a -> s {maxResults = a} :: ListRecommendedIntents)
+
+-- | If the response from the ListRecommendedIntents operation contains more
+-- results than specified in the maxResults parameter, a token is returned
+-- in the response. Use that token in the nextToken parameter to return the
+-- next page of results.
+listRecommendedIntents_nextToken :: Lens.Lens' ListRecommendedIntents (Prelude.Maybe Prelude.Text)
+listRecommendedIntents_nextToken = Lens.lens (\ListRecommendedIntents' {nextToken} -> nextToken) (\s@ListRecommendedIntents' {} a -> s {nextToken = a} :: ListRecommendedIntents)
+
+-- | The unique identifier of the bot associated with the recommended
+-- intents.
+listRecommendedIntents_botId :: Lens.Lens' ListRecommendedIntents Prelude.Text
+listRecommendedIntents_botId = Lens.lens (\ListRecommendedIntents' {botId} -> botId) (\s@ListRecommendedIntents' {} a -> s {botId = a} :: ListRecommendedIntents)
+
+-- | The version of the bot that contains the recommended intents.
+listRecommendedIntents_botVersion :: Lens.Lens' ListRecommendedIntents Prelude.Text
+listRecommendedIntents_botVersion = Lens.lens (\ListRecommendedIntents' {botVersion} -> botVersion) (\s@ListRecommendedIntents' {} a -> s {botVersion = a} :: ListRecommendedIntents)
+
+-- | The identifier of the language and locale of the recommended intents.
+listRecommendedIntents_localeId :: Lens.Lens' ListRecommendedIntents Prelude.Text
+listRecommendedIntents_localeId = Lens.lens (\ListRecommendedIntents' {localeId} -> localeId) (\s@ListRecommendedIntents' {} a -> s {localeId = a} :: ListRecommendedIntents)
+
+-- | The identifier of the bot recommendation that contains the recommended
+-- intents.
+listRecommendedIntents_botRecommendationId :: Lens.Lens' ListRecommendedIntents Prelude.Text
+listRecommendedIntents_botRecommendationId = Lens.lens (\ListRecommendedIntents' {botRecommendationId} -> botRecommendationId) (\s@ListRecommendedIntents' {} a -> s {botRecommendationId = a} :: ListRecommendedIntents)
+
+instance Core.AWSRequest ListRecommendedIntents where
+  type
+    AWSResponse ListRecommendedIntents =
+      ListRecommendedIntentsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListRecommendedIntentsResponse'
+            Prelude.<$> (x Data..?> "botId")
+            Prelude.<*> (x Data..?> "botRecommendationId")
+            Prelude.<*> (x Data..?> "botVersion")
+            Prelude.<*> (x Data..?> "localeId")
+            Prelude.<*> (x Data..?> "nextToken")
+            Prelude.<*> (x Data..?> "summaryList" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListRecommendedIntents where
+  hashWithSalt _salt ListRecommendedIntents' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` botId
+      `Prelude.hashWithSalt` botVersion
+      `Prelude.hashWithSalt` localeId
+      `Prelude.hashWithSalt` botRecommendationId
+
+instance Prelude.NFData ListRecommendedIntents where
+  rnf ListRecommendedIntents' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf botId
+      `Prelude.seq` Prelude.rnf botVersion
+      `Prelude.seq` Prelude.rnf localeId
+      `Prelude.seq` Prelude.rnf botRecommendationId
+
+instance Data.ToHeaders ListRecommendedIntents where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ListRecommendedIntents where
+  toJSON ListRecommendedIntents' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("maxResults" Data..=) Prelude.<$> maxResults,
+            ("nextToken" Data..=) Prelude.<$> nextToken
+          ]
+      )
+
+instance Data.ToPath ListRecommendedIntents where
+  toPath ListRecommendedIntents' {..} =
+    Prelude.mconcat
+      [ "/bots/",
+        Data.toBS botId,
+        "/botversions/",
+        Data.toBS botVersion,
+        "/botlocales/",
+        Data.toBS localeId,
+        "/botrecommendations/",
+        Data.toBS botRecommendationId,
+        "/intents"
+      ]
+
+instance Data.ToQuery ListRecommendedIntents where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListRecommendedIntentsResponse' smart constructor.
+data ListRecommendedIntentsResponse = ListRecommendedIntentsResponse'
+  { -- | The unique identifier of the bot associated with the recommended intent.
+    botId :: Prelude.Maybe Prelude.Text,
+    -- | The identifier of the bot recommendation that contains the recommended
+    -- intent.
+    botRecommendationId :: Prelude.Maybe Prelude.Text,
+    -- | The version of the bot that contains the intent.
+    botVersion :: Prelude.Maybe Prelude.Text,
+    -- | The identifier of the language and locale of the intents to list. The
+    -- string must match one of the supported locales. For more information,
+    -- see
+    -- <https://docs.aws.amazon.com/lexv2/latest/dg/how-languages.html Supported languages>.
+    localeId :: Prelude.Maybe Prelude.Text,
+    -- | A token that indicates whether there are more results to return in a
+    -- response to the ListRecommendedIntents operation. If the nextToken field
+    -- is present, you send the contents as the nextToken parameter of a
+    -- ListRecommendedIntents operation request to get the next page of
+    -- results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | Summary information for the intents that meet the filter criteria
+    -- specified in the request. The length of the list is specified in the
+    -- maxResults parameter of the request. If there are more intents
+    -- available, the nextToken field contains a token to get the next page of
+    -- results.
+    summaryList :: Prelude.Maybe [RecommendedIntentSummary],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListRecommendedIntentsResponse' 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:
+--
+-- 'botId', 'listRecommendedIntentsResponse_botId' - The unique identifier of the bot associated with the recommended intent.
+--
+-- 'botRecommendationId', 'listRecommendedIntentsResponse_botRecommendationId' - The identifier of the bot recommendation that contains the recommended
+-- intent.
+--
+-- 'botVersion', 'listRecommendedIntentsResponse_botVersion' - The version of the bot that contains the intent.
+--
+-- 'localeId', 'listRecommendedIntentsResponse_localeId' - The identifier of the language and locale of the intents to list. The
+-- string must match one of the supported locales. For more information,
+-- see
+-- <https://docs.aws.amazon.com/lexv2/latest/dg/how-languages.html Supported languages>.
+--
+-- 'nextToken', 'listRecommendedIntentsResponse_nextToken' - A token that indicates whether there are more results to return in a
+-- response to the ListRecommendedIntents operation. If the nextToken field
+-- is present, you send the contents as the nextToken parameter of a
+-- ListRecommendedIntents operation request to get the next page of
+-- results.
+--
+-- 'summaryList', 'listRecommendedIntentsResponse_summaryList' - Summary information for the intents that meet the filter criteria
+-- specified in the request. The length of the list is specified in the
+-- maxResults parameter of the request. If there are more intents
+-- available, the nextToken field contains a token to get the next page of
+-- results.
+--
+-- 'httpStatus', 'listRecommendedIntentsResponse_httpStatus' - The response's http status code.
+newListRecommendedIntentsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListRecommendedIntentsResponse
+newListRecommendedIntentsResponse pHttpStatus_ =
+  ListRecommendedIntentsResponse'
+    { botId =
+        Prelude.Nothing,
+      botRecommendationId = Prelude.Nothing,
+      botVersion = Prelude.Nothing,
+      localeId = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      summaryList = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The unique identifier of the bot associated with the recommended intent.
+listRecommendedIntentsResponse_botId :: Lens.Lens' ListRecommendedIntentsResponse (Prelude.Maybe Prelude.Text)
+listRecommendedIntentsResponse_botId = Lens.lens (\ListRecommendedIntentsResponse' {botId} -> botId) (\s@ListRecommendedIntentsResponse' {} a -> s {botId = a} :: ListRecommendedIntentsResponse)
+
+-- | The identifier of the bot recommendation that contains the recommended
+-- intent.
+listRecommendedIntentsResponse_botRecommendationId :: Lens.Lens' ListRecommendedIntentsResponse (Prelude.Maybe Prelude.Text)
+listRecommendedIntentsResponse_botRecommendationId = Lens.lens (\ListRecommendedIntentsResponse' {botRecommendationId} -> botRecommendationId) (\s@ListRecommendedIntentsResponse' {} a -> s {botRecommendationId = a} :: ListRecommendedIntentsResponse)
+
+-- | The version of the bot that contains the intent.
+listRecommendedIntentsResponse_botVersion :: Lens.Lens' ListRecommendedIntentsResponse (Prelude.Maybe Prelude.Text)
+listRecommendedIntentsResponse_botVersion = Lens.lens (\ListRecommendedIntentsResponse' {botVersion} -> botVersion) (\s@ListRecommendedIntentsResponse' {} a -> s {botVersion = a} :: ListRecommendedIntentsResponse)
+
+-- | The identifier of the language and locale of the intents to list. The
+-- string must match one of the supported locales. For more information,
+-- see
+-- <https://docs.aws.amazon.com/lexv2/latest/dg/how-languages.html Supported languages>.
+listRecommendedIntentsResponse_localeId :: Lens.Lens' ListRecommendedIntentsResponse (Prelude.Maybe Prelude.Text)
+listRecommendedIntentsResponse_localeId = Lens.lens (\ListRecommendedIntentsResponse' {localeId} -> localeId) (\s@ListRecommendedIntentsResponse' {} a -> s {localeId = a} :: ListRecommendedIntentsResponse)
+
+-- | A token that indicates whether there are more results to return in a
+-- response to the ListRecommendedIntents operation. If the nextToken field
+-- is present, you send the contents as the nextToken parameter of a
+-- ListRecommendedIntents operation request to get the next page of
+-- results.
+listRecommendedIntentsResponse_nextToken :: Lens.Lens' ListRecommendedIntentsResponse (Prelude.Maybe Prelude.Text)
+listRecommendedIntentsResponse_nextToken = Lens.lens (\ListRecommendedIntentsResponse' {nextToken} -> nextToken) (\s@ListRecommendedIntentsResponse' {} a -> s {nextToken = a} :: ListRecommendedIntentsResponse)
+
+-- | Summary information for the intents that meet the filter criteria
+-- specified in the request. The length of the list is specified in the
+-- maxResults parameter of the request. If there are more intents
+-- available, the nextToken field contains a token to get the next page of
+-- results.
+listRecommendedIntentsResponse_summaryList :: Lens.Lens' ListRecommendedIntentsResponse (Prelude.Maybe [RecommendedIntentSummary])
+listRecommendedIntentsResponse_summaryList = Lens.lens (\ListRecommendedIntentsResponse' {summaryList} -> summaryList) (\s@ListRecommendedIntentsResponse' {} a -> s {summaryList = a} :: ListRecommendedIntentsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+listRecommendedIntentsResponse_httpStatus :: Lens.Lens' ListRecommendedIntentsResponse Prelude.Int
+listRecommendedIntentsResponse_httpStatus = Lens.lens (\ListRecommendedIntentsResponse' {httpStatus} -> httpStatus) (\s@ListRecommendedIntentsResponse' {} a -> s {httpStatus = a} :: ListRecommendedIntentsResponse)
+
+instance
+  Prelude.NFData
+    ListRecommendedIntentsResponse
+  where
+  rnf ListRecommendedIntentsResponse' {..} =
+    Prelude.rnf botId
+      `Prelude.seq` Prelude.rnf botRecommendationId
+      `Prelude.seq` Prelude.rnf botVersion
+      `Prelude.seq` Prelude.rnf localeId
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf summaryList
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/LexV2Models/ListSlotTypes.hs b/gen/Amazonka/LexV2Models/ListSlotTypes.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/ListSlotTypes.hs
@@ -0,0 +1,364 @@
+{-# 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.LexV2Models.ListSlotTypes
+-- 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 a list of slot types that match the specified criteria.
+module Amazonka.LexV2Models.ListSlotTypes
+  ( -- * Creating a Request
+    ListSlotTypes (..),
+    newListSlotTypes,
+
+    -- * Request Lenses
+    listSlotTypes_filters,
+    listSlotTypes_maxResults,
+    listSlotTypes_nextToken,
+    listSlotTypes_sortBy,
+    listSlotTypes_botId,
+    listSlotTypes_botVersion,
+    listSlotTypes_localeId,
+
+    -- * Destructuring the Response
+    ListSlotTypesResponse (..),
+    newListSlotTypesResponse,
+
+    -- * Response Lenses
+    listSlotTypesResponse_botId,
+    listSlotTypesResponse_botVersion,
+    listSlotTypesResponse_localeId,
+    listSlotTypesResponse_nextToken,
+    listSlotTypesResponse_slotTypeSummaries,
+    listSlotTypesResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LexV2Models.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListSlotTypes' smart constructor.
+data ListSlotTypes = ListSlotTypes'
+  { -- | Provides the specification of a filter used to limit the slot types in
+    -- the response to only those that match the filter specification. You can
+    -- only specify one filter and only one string to filter on.
+    filters :: Prelude.Maybe (Prelude.NonEmpty SlotTypeFilter),
+    -- | The maximum number of slot types to return in each page of results. If
+    -- there are fewer results than the max page size, only the actual number
+    -- of results are returned.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | If the response from the @ListSlotTypes@ operation contains more results
+    -- than specified in the @maxResults@ parameter, a token is returned in the
+    -- response. Use that token in the @nextToken@ parameter to return the next
+    -- page of results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | Determines the sort order for the response from the @ListSlotTypes@
+    -- operation. You can choose to sort by the slot type name or last updated
+    -- date in either ascending or descending order.
+    sortBy :: Prelude.Maybe SlotTypeSortBy,
+    -- | The unique identifier of the bot that contains the slot types.
+    botId :: Prelude.Text,
+    -- | The version of the bot that contains the slot type.
+    botVersion :: Prelude.Text,
+    -- | The identifier of the language and locale of the slot types to list. The
+    -- string must match one of the supported locales. For more information,
+    -- see
+    -- <https://docs.aws.amazon.com/lexv2/latest/dg/how-languages.html Supported languages>.
+    localeId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListSlotTypes' 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:
+--
+-- 'filters', 'listSlotTypes_filters' - Provides the specification of a filter used to limit the slot types in
+-- the response to only those that match the filter specification. You can
+-- only specify one filter and only one string to filter on.
+--
+-- 'maxResults', 'listSlotTypes_maxResults' - The maximum number of slot types to return in each page of results. If
+-- there are fewer results than the max page size, only the actual number
+-- of results are returned.
+--
+-- 'nextToken', 'listSlotTypes_nextToken' - If the response from the @ListSlotTypes@ operation contains more results
+-- than specified in the @maxResults@ parameter, a token is returned in the
+-- response. Use that token in the @nextToken@ parameter to return the next
+-- page of results.
+--
+-- 'sortBy', 'listSlotTypes_sortBy' - Determines the sort order for the response from the @ListSlotTypes@
+-- operation. You can choose to sort by the slot type name or last updated
+-- date in either ascending or descending order.
+--
+-- 'botId', 'listSlotTypes_botId' - The unique identifier of the bot that contains the slot types.
+--
+-- 'botVersion', 'listSlotTypes_botVersion' - The version of the bot that contains the slot type.
+--
+-- 'localeId', 'listSlotTypes_localeId' - The identifier of the language and locale of the slot types to list. The
+-- string must match one of the supported locales. For more information,
+-- see
+-- <https://docs.aws.amazon.com/lexv2/latest/dg/how-languages.html Supported languages>.
+newListSlotTypes ::
+  -- | 'botId'
+  Prelude.Text ->
+  -- | 'botVersion'
+  Prelude.Text ->
+  -- | 'localeId'
+  Prelude.Text ->
+  ListSlotTypes
+newListSlotTypes pBotId_ pBotVersion_ pLocaleId_ =
+  ListSlotTypes'
+    { filters = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      sortBy = Prelude.Nothing,
+      botId = pBotId_,
+      botVersion = pBotVersion_,
+      localeId = pLocaleId_
+    }
+
+-- | Provides the specification of a filter used to limit the slot types in
+-- the response to only those that match the filter specification. You can
+-- only specify one filter and only one string to filter on.
+listSlotTypes_filters :: Lens.Lens' ListSlotTypes (Prelude.Maybe (Prelude.NonEmpty SlotTypeFilter))
+listSlotTypes_filters = Lens.lens (\ListSlotTypes' {filters} -> filters) (\s@ListSlotTypes' {} a -> s {filters = a} :: ListSlotTypes) Prelude.. Lens.mapping Lens.coerced
+
+-- | The maximum number of slot types to return in each page of results. If
+-- there are fewer results than the max page size, only the actual number
+-- of results are returned.
+listSlotTypes_maxResults :: Lens.Lens' ListSlotTypes (Prelude.Maybe Prelude.Natural)
+listSlotTypes_maxResults = Lens.lens (\ListSlotTypes' {maxResults} -> maxResults) (\s@ListSlotTypes' {} a -> s {maxResults = a} :: ListSlotTypes)
+
+-- | If the response from the @ListSlotTypes@ operation contains more results
+-- than specified in the @maxResults@ parameter, a token is returned in the
+-- response. Use that token in the @nextToken@ parameter to return the next
+-- page of results.
+listSlotTypes_nextToken :: Lens.Lens' ListSlotTypes (Prelude.Maybe Prelude.Text)
+listSlotTypes_nextToken = Lens.lens (\ListSlotTypes' {nextToken} -> nextToken) (\s@ListSlotTypes' {} a -> s {nextToken = a} :: ListSlotTypes)
+
+-- | Determines the sort order for the response from the @ListSlotTypes@
+-- operation. You can choose to sort by the slot type name or last updated
+-- date in either ascending or descending order.
+listSlotTypes_sortBy :: Lens.Lens' ListSlotTypes (Prelude.Maybe SlotTypeSortBy)
+listSlotTypes_sortBy = Lens.lens (\ListSlotTypes' {sortBy} -> sortBy) (\s@ListSlotTypes' {} a -> s {sortBy = a} :: ListSlotTypes)
+
+-- | The unique identifier of the bot that contains the slot types.
+listSlotTypes_botId :: Lens.Lens' ListSlotTypes Prelude.Text
+listSlotTypes_botId = Lens.lens (\ListSlotTypes' {botId} -> botId) (\s@ListSlotTypes' {} a -> s {botId = a} :: ListSlotTypes)
+
+-- | The version of the bot that contains the slot type.
+listSlotTypes_botVersion :: Lens.Lens' ListSlotTypes Prelude.Text
+listSlotTypes_botVersion = Lens.lens (\ListSlotTypes' {botVersion} -> botVersion) (\s@ListSlotTypes' {} a -> s {botVersion = a} :: ListSlotTypes)
+
+-- | The identifier of the language and locale of the slot types to list. The
+-- string must match one of the supported locales. For more information,
+-- see
+-- <https://docs.aws.amazon.com/lexv2/latest/dg/how-languages.html Supported languages>.
+listSlotTypes_localeId :: Lens.Lens' ListSlotTypes Prelude.Text
+listSlotTypes_localeId = Lens.lens (\ListSlotTypes' {localeId} -> localeId) (\s@ListSlotTypes' {} a -> s {localeId = a} :: ListSlotTypes)
+
+instance Core.AWSRequest ListSlotTypes where
+  type
+    AWSResponse ListSlotTypes =
+      ListSlotTypesResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListSlotTypesResponse'
+            Prelude.<$> (x Data..?> "botId")
+            Prelude.<*> (x Data..?> "botVersion")
+            Prelude.<*> (x Data..?> "localeId")
+            Prelude.<*> (x Data..?> "nextToken")
+            Prelude.<*> ( x
+                            Data..?> "slotTypeSummaries"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListSlotTypes where
+  hashWithSalt _salt ListSlotTypes' {..} =
+    _salt
+      `Prelude.hashWithSalt` filters
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` sortBy
+      `Prelude.hashWithSalt` botId
+      `Prelude.hashWithSalt` botVersion
+      `Prelude.hashWithSalt` localeId
+
+instance Prelude.NFData ListSlotTypes where
+  rnf ListSlotTypes' {..} =
+    Prelude.rnf filters
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf sortBy
+      `Prelude.seq` Prelude.rnf botId
+      `Prelude.seq` Prelude.rnf botVersion
+      `Prelude.seq` Prelude.rnf localeId
+
+instance Data.ToHeaders ListSlotTypes where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ListSlotTypes where
+  toJSON ListSlotTypes' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("filters" Data..=) Prelude.<$> filters,
+            ("maxResults" Data..=) Prelude.<$> maxResults,
+            ("nextToken" Data..=) Prelude.<$> nextToken,
+            ("sortBy" Data..=) Prelude.<$> sortBy
+          ]
+      )
+
+instance Data.ToPath ListSlotTypes where
+  toPath ListSlotTypes' {..} =
+    Prelude.mconcat
+      [ "/bots/",
+        Data.toBS botId,
+        "/botversions/",
+        Data.toBS botVersion,
+        "/botlocales/",
+        Data.toBS localeId,
+        "/slottypes/"
+      ]
+
+instance Data.ToQuery ListSlotTypes where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListSlotTypesResponse' smart constructor.
+data ListSlotTypesResponse = ListSlotTypesResponse'
+  { -- | The identifier of the bot that contains the slot types.
+    botId :: Prelude.Maybe Prelude.Text,
+    -- | The version of the bot that contains the slot types.
+    botVersion :: Prelude.Maybe Prelude.Text,
+    -- | The language and local of the slot types in the list.
+    localeId :: Prelude.Maybe Prelude.Text,
+    -- | A token that indicates whether there are more results to return in a
+    -- response to the @ListSlotTypes@ operation. If the @nextToken@ field is
+    -- present, you send the contents as the @nextToken@ parameter of a
+    -- @ListSlotTypes@ operation request to get the next page of results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | Summary information for the slot types that meet the filter criteria
+    -- specified in the request. The length of the list is specified in the
+    -- @maxResults@ parameter of the request. If there are more slot types
+    -- available, the @nextToken@ field contains a token to get the next page
+    -- of results.
+    slotTypeSummaries :: Prelude.Maybe [SlotTypeSummary],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListSlotTypesResponse' 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:
+--
+-- 'botId', 'listSlotTypesResponse_botId' - The identifier of the bot that contains the slot types.
+--
+-- 'botVersion', 'listSlotTypesResponse_botVersion' - The version of the bot that contains the slot types.
+--
+-- 'localeId', 'listSlotTypesResponse_localeId' - The language and local of the slot types in the list.
+--
+-- 'nextToken', 'listSlotTypesResponse_nextToken' - A token that indicates whether there are more results to return in a
+-- response to the @ListSlotTypes@ operation. If the @nextToken@ field is
+-- present, you send the contents as the @nextToken@ parameter of a
+-- @ListSlotTypes@ operation request to get the next page of results.
+--
+-- 'slotTypeSummaries', 'listSlotTypesResponse_slotTypeSummaries' - Summary information for the slot types that meet the filter criteria
+-- specified in the request. The length of the list is specified in the
+-- @maxResults@ parameter of the request. If there are more slot types
+-- available, the @nextToken@ field contains a token to get the next page
+-- of results.
+--
+-- 'httpStatus', 'listSlotTypesResponse_httpStatus' - The response's http status code.
+newListSlotTypesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListSlotTypesResponse
+newListSlotTypesResponse pHttpStatus_ =
+  ListSlotTypesResponse'
+    { botId = Prelude.Nothing,
+      botVersion = Prelude.Nothing,
+      localeId = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      slotTypeSummaries = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The identifier of the bot that contains the slot types.
+listSlotTypesResponse_botId :: Lens.Lens' ListSlotTypesResponse (Prelude.Maybe Prelude.Text)
+listSlotTypesResponse_botId = Lens.lens (\ListSlotTypesResponse' {botId} -> botId) (\s@ListSlotTypesResponse' {} a -> s {botId = a} :: ListSlotTypesResponse)
+
+-- | The version of the bot that contains the slot types.
+listSlotTypesResponse_botVersion :: Lens.Lens' ListSlotTypesResponse (Prelude.Maybe Prelude.Text)
+listSlotTypesResponse_botVersion = Lens.lens (\ListSlotTypesResponse' {botVersion} -> botVersion) (\s@ListSlotTypesResponse' {} a -> s {botVersion = a} :: ListSlotTypesResponse)
+
+-- | The language and local of the slot types in the list.
+listSlotTypesResponse_localeId :: Lens.Lens' ListSlotTypesResponse (Prelude.Maybe Prelude.Text)
+listSlotTypesResponse_localeId = Lens.lens (\ListSlotTypesResponse' {localeId} -> localeId) (\s@ListSlotTypesResponse' {} a -> s {localeId = a} :: ListSlotTypesResponse)
+
+-- | A token that indicates whether there are more results to return in a
+-- response to the @ListSlotTypes@ operation. If the @nextToken@ field is
+-- present, you send the contents as the @nextToken@ parameter of a
+-- @ListSlotTypes@ operation request to get the next page of results.
+listSlotTypesResponse_nextToken :: Lens.Lens' ListSlotTypesResponse (Prelude.Maybe Prelude.Text)
+listSlotTypesResponse_nextToken = Lens.lens (\ListSlotTypesResponse' {nextToken} -> nextToken) (\s@ListSlotTypesResponse' {} a -> s {nextToken = a} :: ListSlotTypesResponse)
+
+-- | Summary information for the slot types that meet the filter criteria
+-- specified in the request. The length of the list is specified in the
+-- @maxResults@ parameter of the request. If there are more slot types
+-- available, the @nextToken@ field contains a token to get the next page
+-- of results.
+listSlotTypesResponse_slotTypeSummaries :: Lens.Lens' ListSlotTypesResponse (Prelude.Maybe [SlotTypeSummary])
+listSlotTypesResponse_slotTypeSummaries = Lens.lens (\ListSlotTypesResponse' {slotTypeSummaries} -> slotTypeSummaries) (\s@ListSlotTypesResponse' {} a -> s {slotTypeSummaries = a} :: ListSlotTypesResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+listSlotTypesResponse_httpStatus :: Lens.Lens' ListSlotTypesResponse Prelude.Int
+listSlotTypesResponse_httpStatus = Lens.lens (\ListSlotTypesResponse' {httpStatus} -> httpStatus) (\s@ListSlotTypesResponse' {} a -> s {httpStatus = a} :: ListSlotTypesResponse)
+
+instance Prelude.NFData ListSlotTypesResponse where
+  rnf ListSlotTypesResponse' {..} =
+    Prelude.rnf botId
+      `Prelude.seq` Prelude.rnf botVersion
+      `Prelude.seq` Prelude.rnf localeId
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf slotTypeSummaries
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/LexV2Models/ListSlots.hs b/gen/Amazonka/LexV2Models/ListSlots.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/ListSlots.hs
@@ -0,0 +1,391 @@
+{-# 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.LexV2Models.ListSlots
+-- 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 a list of slots that match the specified criteria.
+module Amazonka.LexV2Models.ListSlots
+  ( -- * Creating a Request
+    ListSlots (..),
+    newListSlots,
+
+    -- * Request Lenses
+    listSlots_filters,
+    listSlots_maxResults,
+    listSlots_nextToken,
+    listSlots_sortBy,
+    listSlots_botId,
+    listSlots_botVersion,
+    listSlots_localeId,
+    listSlots_intentId,
+
+    -- * Destructuring the Response
+    ListSlotsResponse (..),
+    newListSlotsResponse,
+
+    -- * Response Lenses
+    listSlotsResponse_botId,
+    listSlotsResponse_botVersion,
+    listSlotsResponse_intentId,
+    listSlotsResponse_localeId,
+    listSlotsResponse_nextToken,
+    listSlotsResponse_slotSummaries,
+    listSlotsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LexV2Models.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListSlots' smart constructor.
+data ListSlots = ListSlots'
+  { -- | Provides the specification of a filter used to limit the slots in the
+    -- response to only those that match the filter specification. You can only
+    -- specify one filter and only one string to filter on.
+    filters :: Prelude.Maybe (Prelude.NonEmpty SlotFilter),
+    -- | The maximum number of slots to return in each page of results. If there
+    -- are fewer results than the max page size, only the actual number of
+    -- results are returned.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | If the response from the @ListSlots@ operation contains more results
+    -- than specified in the @maxResults@ parameter, a token is returned in the
+    -- response. Use that token in the @nextToken@ parameter to return the next
+    -- page of results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | Determines the sort order for the response from the @ListSlots@
+    -- operation. You can choose to sort by the slot name or last updated date
+    -- in either ascending or descending order.
+    sortBy :: Prelude.Maybe SlotSortBy,
+    -- | The identifier of the bot that contains the slot.
+    botId :: Prelude.Text,
+    -- | The version of the bot that contains the slot.
+    botVersion :: Prelude.Text,
+    -- | The identifier of the language and locale of the slots to list. The
+    -- string must match one of the supported locales. For more information,
+    -- see
+    -- <https://docs.aws.amazon.com/lexv2/latest/dg/how-languages.html Supported languages>.
+    localeId :: Prelude.Text,
+    -- | The unique identifier of the intent that contains the slot.
+    intentId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListSlots' 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:
+--
+-- 'filters', 'listSlots_filters' - Provides the specification of a filter used to limit the slots in the
+-- response to only those that match the filter specification. You can only
+-- specify one filter and only one string to filter on.
+--
+-- 'maxResults', 'listSlots_maxResults' - The maximum number of slots to return in each page of results. If there
+-- are fewer results than the max page size, only the actual number of
+-- results are returned.
+--
+-- 'nextToken', 'listSlots_nextToken' - If the response from the @ListSlots@ operation contains more results
+-- than specified in the @maxResults@ parameter, a token is returned in the
+-- response. Use that token in the @nextToken@ parameter to return the next
+-- page of results.
+--
+-- 'sortBy', 'listSlots_sortBy' - Determines the sort order for the response from the @ListSlots@
+-- operation. You can choose to sort by the slot name or last updated date
+-- in either ascending or descending order.
+--
+-- 'botId', 'listSlots_botId' - The identifier of the bot that contains the slot.
+--
+-- 'botVersion', 'listSlots_botVersion' - The version of the bot that contains the slot.
+--
+-- 'localeId', 'listSlots_localeId' - The identifier of the language and locale of the slots to list. The
+-- string must match one of the supported locales. For more information,
+-- see
+-- <https://docs.aws.amazon.com/lexv2/latest/dg/how-languages.html Supported languages>.
+--
+-- 'intentId', 'listSlots_intentId' - The unique identifier of the intent that contains the slot.
+newListSlots ::
+  -- | 'botId'
+  Prelude.Text ->
+  -- | 'botVersion'
+  Prelude.Text ->
+  -- | 'localeId'
+  Prelude.Text ->
+  -- | 'intentId'
+  Prelude.Text ->
+  ListSlots
+newListSlots
+  pBotId_
+  pBotVersion_
+  pLocaleId_
+  pIntentId_ =
+    ListSlots'
+      { filters = Prelude.Nothing,
+        maxResults = Prelude.Nothing,
+        nextToken = Prelude.Nothing,
+        sortBy = Prelude.Nothing,
+        botId = pBotId_,
+        botVersion = pBotVersion_,
+        localeId = pLocaleId_,
+        intentId = pIntentId_
+      }
+
+-- | Provides the specification of a filter used to limit the slots in the
+-- response to only those that match the filter specification. You can only
+-- specify one filter and only one string to filter on.
+listSlots_filters :: Lens.Lens' ListSlots (Prelude.Maybe (Prelude.NonEmpty SlotFilter))
+listSlots_filters = Lens.lens (\ListSlots' {filters} -> filters) (\s@ListSlots' {} a -> s {filters = a} :: ListSlots) Prelude.. Lens.mapping Lens.coerced
+
+-- | The maximum number of slots to return in each page of results. If there
+-- are fewer results than the max page size, only the actual number of
+-- results are returned.
+listSlots_maxResults :: Lens.Lens' ListSlots (Prelude.Maybe Prelude.Natural)
+listSlots_maxResults = Lens.lens (\ListSlots' {maxResults} -> maxResults) (\s@ListSlots' {} a -> s {maxResults = a} :: ListSlots)
+
+-- | If the response from the @ListSlots@ operation contains more results
+-- than specified in the @maxResults@ parameter, a token is returned in the
+-- response. Use that token in the @nextToken@ parameter to return the next
+-- page of results.
+listSlots_nextToken :: Lens.Lens' ListSlots (Prelude.Maybe Prelude.Text)
+listSlots_nextToken = Lens.lens (\ListSlots' {nextToken} -> nextToken) (\s@ListSlots' {} a -> s {nextToken = a} :: ListSlots)
+
+-- | Determines the sort order for the response from the @ListSlots@
+-- operation. You can choose to sort by the slot name or last updated date
+-- in either ascending or descending order.
+listSlots_sortBy :: Lens.Lens' ListSlots (Prelude.Maybe SlotSortBy)
+listSlots_sortBy = Lens.lens (\ListSlots' {sortBy} -> sortBy) (\s@ListSlots' {} a -> s {sortBy = a} :: ListSlots)
+
+-- | The identifier of the bot that contains the slot.
+listSlots_botId :: Lens.Lens' ListSlots Prelude.Text
+listSlots_botId = Lens.lens (\ListSlots' {botId} -> botId) (\s@ListSlots' {} a -> s {botId = a} :: ListSlots)
+
+-- | The version of the bot that contains the slot.
+listSlots_botVersion :: Lens.Lens' ListSlots Prelude.Text
+listSlots_botVersion = Lens.lens (\ListSlots' {botVersion} -> botVersion) (\s@ListSlots' {} a -> s {botVersion = a} :: ListSlots)
+
+-- | The identifier of the language and locale of the slots to list. The
+-- string must match one of the supported locales. For more information,
+-- see
+-- <https://docs.aws.amazon.com/lexv2/latest/dg/how-languages.html Supported languages>.
+listSlots_localeId :: Lens.Lens' ListSlots Prelude.Text
+listSlots_localeId = Lens.lens (\ListSlots' {localeId} -> localeId) (\s@ListSlots' {} a -> s {localeId = a} :: ListSlots)
+
+-- | The unique identifier of the intent that contains the slot.
+listSlots_intentId :: Lens.Lens' ListSlots Prelude.Text
+listSlots_intentId = Lens.lens (\ListSlots' {intentId} -> intentId) (\s@ListSlots' {} a -> s {intentId = a} :: ListSlots)
+
+instance Core.AWSRequest ListSlots where
+  type AWSResponse ListSlots = ListSlotsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListSlotsResponse'
+            Prelude.<$> (x Data..?> "botId")
+            Prelude.<*> (x Data..?> "botVersion")
+            Prelude.<*> (x Data..?> "intentId")
+            Prelude.<*> (x Data..?> "localeId")
+            Prelude.<*> (x Data..?> "nextToken")
+            Prelude.<*> (x Data..?> "slotSummaries" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListSlots where
+  hashWithSalt _salt ListSlots' {..} =
+    _salt
+      `Prelude.hashWithSalt` filters
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` sortBy
+      `Prelude.hashWithSalt` botId
+      `Prelude.hashWithSalt` botVersion
+      `Prelude.hashWithSalt` localeId
+      `Prelude.hashWithSalt` intentId
+
+instance Prelude.NFData ListSlots where
+  rnf ListSlots' {..} =
+    Prelude.rnf filters
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf sortBy
+      `Prelude.seq` Prelude.rnf botId
+      `Prelude.seq` Prelude.rnf botVersion
+      `Prelude.seq` Prelude.rnf localeId
+      `Prelude.seq` Prelude.rnf intentId
+
+instance Data.ToHeaders ListSlots where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ListSlots where
+  toJSON ListSlots' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("filters" Data..=) Prelude.<$> filters,
+            ("maxResults" Data..=) Prelude.<$> maxResults,
+            ("nextToken" Data..=) Prelude.<$> nextToken,
+            ("sortBy" Data..=) Prelude.<$> sortBy
+          ]
+      )
+
+instance Data.ToPath ListSlots where
+  toPath ListSlots' {..} =
+    Prelude.mconcat
+      [ "/bots/",
+        Data.toBS botId,
+        "/botversions/",
+        Data.toBS botVersion,
+        "/botlocales/",
+        Data.toBS localeId,
+        "/intents/",
+        Data.toBS intentId,
+        "/slots/"
+      ]
+
+instance Data.ToQuery ListSlots where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListSlotsResponse' smart constructor.
+data ListSlotsResponse = ListSlotsResponse'
+  { -- | The identifier of the bot that contains the slots.
+    botId :: Prelude.Maybe Prelude.Text,
+    -- | The version of the bot that contains the slots.
+    botVersion :: Prelude.Maybe Prelude.Text,
+    -- | The identifier of the intent that contains the slots.
+    intentId :: Prelude.Maybe Prelude.Text,
+    -- | The language and locale of the slots in the list.
+    localeId :: Prelude.Maybe Prelude.Text,
+    -- | A token that indicates whether there are more results to return in a
+    -- response to the @ListSlots@ operation. If the @nextToken@ field is
+    -- present, you send the contents as the @nextToken@ parameter of a
+    -- @ListSlots@ operation request to get the next page of results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | Summary information for the slots that meet the filter criteria
+    -- specified in the request. The length of the list is specified in the
+    -- @maxResults@ parameter of the request. If there are more slots
+    -- available, the @nextToken@ field contains a token to get the next page
+    -- of results.
+    slotSummaries :: Prelude.Maybe [SlotSummary],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListSlotsResponse' 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:
+--
+-- 'botId', 'listSlotsResponse_botId' - The identifier of the bot that contains the slots.
+--
+-- 'botVersion', 'listSlotsResponse_botVersion' - The version of the bot that contains the slots.
+--
+-- 'intentId', 'listSlotsResponse_intentId' - The identifier of the intent that contains the slots.
+--
+-- 'localeId', 'listSlotsResponse_localeId' - The language and locale of the slots in the list.
+--
+-- 'nextToken', 'listSlotsResponse_nextToken' - A token that indicates whether there are more results to return in a
+-- response to the @ListSlots@ operation. If the @nextToken@ field is
+-- present, you send the contents as the @nextToken@ parameter of a
+-- @ListSlots@ operation request to get the next page of results.
+--
+-- 'slotSummaries', 'listSlotsResponse_slotSummaries' - Summary information for the slots that meet the filter criteria
+-- specified in the request. The length of the list is specified in the
+-- @maxResults@ parameter of the request. If there are more slots
+-- available, the @nextToken@ field contains a token to get the next page
+-- of results.
+--
+-- 'httpStatus', 'listSlotsResponse_httpStatus' - The response's http status code.
+newListSlotsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListSlotsResponse
+newListSlotsResponse pHttpStatus_ =
+  ListSlotsResponse'
+    { botId = Prelude.Nothing,
+      botVersion = Prelude.Nothing,
+      intentId = Prelude.Nothing,
+      localeId = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      slotSummaries = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The identifier of the bot that contains the slots.
+listSlotsResponse_botId :: Lens.Lens' ListSlotsResponse (Prelude.Maybe Prelude.Text)
+listSlotsResponse_botId = Lens.lens (\ListSlotsResponse' {botId} -> botId) (\s@ListSlotsResponse' {} a -> s {botId = a} :: ListSlotsResponse)
+
+-- | The version of the bot that contains the slots.
+listSlotsResponse_botVersion :: Lens.Lens' ListSlotsResponse (Prelude.Maybe Prelude.Text)
+listSlotsResponse_botVersion = Lens.lens (\ListSlotsResponse' {botVersion} -> botVersion) (\s@ListSlotsResponse' {} a -> s {botVersion = a} :: ListSlotsResponse)
+
+-- | The identifier of the intent that contains the slots.
+listSlotsResponse_intentId :: Lens.Lens' ListSlotsResponse (Prelude.Maybe Prelude.Text)
+listSlotsResponse_intentId = Lens.lens (\ListSlotsResponse' {intentId} -> intentId) (\s@ListSlotsResponse' {} a -> s {intentId = a} :: ListSlotsResponse)
+
+-- | The language and locale of the slots in the list.
+listSlotsResponse_localeId :: Lens.Lens' ListSlotsResponse (Prelude.Maybe Prelude.Text)
+listSlotsResponse_localeId = Lens.lens (\ListSlotsResponse' {localeId} -> localeId) (\s@ListSlotsResponse' {} a -> s {localeId = a} :: ListSlotsResponse)
+
+-- | A token that indicates whether there are more results to return in a
+-- response to the @ListSlots@ operation. If the @nextToken@ field is
+-- present, you send the contents as the @nextToken@ parameter of a
+-- @ListSlots@ operation request to get the next page of results.
+listSlotsResponse_nextToken :: Lens.Lens' ListSlotsResponse (Prelude.Maybe Prelude.Text)
+listSlotsResponse_nextToken = Lens.lens (\ListSlotsResponse' {nextToken} -> nextToken) (\s@ListSlotsResponse' {} a -> s {nextToken = a} :: ListSlotsResponse)
+
+-- | Summary information for the slots that meet the filter criteria
+-- specified in the request. The length of the list is specified in the
+-- @maxResults@ parameter of the request. If there are more slots
+-- available, the @nextToken@ field contains a token to get the next page
+-- of results.
+listSlotsResponse_slotSummaries :: Lens.Lens' ListSlotsResponse (Prelude.Maybe [SlotSummary])
+listSlotsResponse_slotSummaries = Lens.lens (\ListSlotsResponse' {slotSummaries} -> slotSummaries) (\s@ListSlotsResponse' {} a -> s {slotSummaries = a} :: ListSlotsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+listSlotsResponse_httpStatus :: Lens.Lens' ListSlotsResponse Prelude.Int
+listSlotsResponse_httpStatus = Lens.lens (\ListSlotsResponse' {httpStatus} -> httpStatus) (\s@ListSlotsResponse' {} a -> s {httpStatus = a} :: ListSlotsResponse)
+
+instance Prelude.NFData ListSlotsResponse where
+  rnf ListSlotsResponse' {..} =
+    Prelude.rnf botId
+      `Prelude.seq` Prelude.rnf botVersion
+      `Prelude.seq` Prelude.rnf intentId
+      `Prelude.seq` Prelude.rnf localeId
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf slotSummaries
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/LexV2Models/ListTagsForResource.hs b/gen/Amazonka/LexV2Models/ListTagsForResource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/ListTagsForResource.hs
@@ -0,0 +1,163 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.LexV2Models.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)
+--
+-- Gets a list of tags associated with a resource. Only bots, bot aliases,
+-- and bot channels can have tags associated with them.
+module Amazonka.LexV2Models.ListTagsForResource
+  ( -- * Creating a Request
+    ListTagsForResource (..),
+    newListTagsForResource,
+
+    -- * Request Lenses
+    listTagsForResource_resourceARN,
+
+    -- * Destructuring the Response
+    ListTagsForResourceResponse (..),
+    newListTagsForResourceResponse,
+
+    -- * Response Lenses
+    listTagsForResourceResponse_tags,
+    listTagsForResourceResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LexV2Models.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListTagsForResource' smart constructor.
+data ListTagsForResource = ListTagsForResource'
+  { -- | The Amazon Resource Name (ARN) of the resource to get a list of tags
+    -- for.
+    resourceARN :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListTagsForResource' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'resourceARN', 'listTagsForResource_resourceARN' - The Amazon Resource Name (ARN) of the resource to get a list of tags
+-- for.
+newListTagsForResource ::
+  -- | 'resourceARN'
+  Prelude.Text ->
+  ListTagsForResource
+newListTagsForResource pResourceARN_ =
+  ListTagsForResource' {resourceARN = pResourceARN_}
+
+-- | The Amazon Resource Name (ARN) of the resource to get a list of tags
+-- for.
+listTagsForResource_resourceARN :: Lens.Lens' ListTagsForResource Prelude.Text
+listTagsForResource_resourceARN = Lens.lens (\ListTagsForResource' {resourceARN} -> resourceARN) (\s@ListTagsForResource' {} a -> s {resourceARN = a} :: ListTagsForResource)
+
+instance Core.AWSRequest ListTagsForResource where
+  type
+    AWSResponse ListTagsForResource =
+      ListTagsForResourceResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListTagsForResourceResponse'
+            Prelude.<$> (x Data..?> "tags" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListTagsForResource where
+  hashWithSalt _salt ListTagsForResource' {..} =
+    _salt `Prelude.hashWithSalt` resourceARN
+
+instance Prelude.NFData ListTagsForResource where
+  rnf ListTagsForResource' {..} =
+    Prelude.rnf resourceARN
+
+instance Data.ToHeaders ListTagsForResource where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath ListTagsForResource where
+  toPath ListTagsForResource' {..} =
+    Prelude.mconcat ["/tags/", Data.toBS resourceARN]
+
+instance Data.ToQuery ListTagsForResource where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListTagsForResourceResponse' smart constructor.
+data ListTagsForResourceResponse = ListTagsForResourceResponse'
+  { -- | The tags associated with a resource.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListTagsForResourceResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'tags', 'listTagsForResourceResponse_tags' - The tags associated with a 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 associated with a resource.
+listTagsForResourceResponse_tags :: Lens.Lens' ListTagsForResourceResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+listTagsForResourceResponse_tags = Lens.lens (\ListTagsForResourceResponse' {tags} -> tags) (\s@ListTagsForResourceResponse' {} a -> s {tags = a} :: ListTagsForResourceResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+listTagsForResourceResponse_httpStatus :: Lens.Lens' ListTagsForResourceResponse Prelude.Int
+listTagsForResourceResponse_httpStatus = Lens.lens (\ListTagsForResourceResponse' {httpStatus} -> httpStatus) (\s@ListTagsForResourceResponse' {} a -> s {httpStatus = a} :: ListTagsForResourceResponse)
+
+instance Prelude.NFData ListTagsForResourceResponse where
+  rnf ListTagsForResourceResponse' {..} =
+    Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/LexV2Models/SearchAssociatedTranscripts.hs b/gen/Amazonka/LexV2Models/SearchAssociatedTranscripts.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/SearchAssociatedTranscripts.hs
@@ -0,0 +1,428 @@
+{-# 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.LexV2Models.SearchAssociatedTranscripts
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Search for associated transcripts that meet the specified criteria.
+module Amazonka.LexV2Models.SearchAssociatedTranscripts
+  ( -- * Creating a Request
+    SearchAssociatedTranscripts (..),
+    newSearchAssociatedTranscripts,
+
+    -- * Request Lenses
+    searchAssociatedTranscripts_maxResults,
+    searchAssociatedTranscripts_nextIndex,
+    searchAssociatedTranscripts_searchOrder,
+    searchAssociatedTranscripts_botId,
+    searchAssociatedTranscripts_botVersion,
+    searchAssociatedTranscripts_localeId,
+    searchAssociatedTranscripts_botRecommendationId,
+    searchAssociatedTranscripts_filters,
+
+    -- * Destructuring the Response
+    SearchAssociatedTranscriptsResponse (..),
+    newSearchAssociatedTranscriptsResponse,
+
+    -- * Response Lenses
+    searchAssociatedTranscriptsResponse_associatedTranscripts,
+    searchAssociatedTranscriptsResponse_botId,
+    searchAssociatedTranscriptsResponse_botRecommendationId,
+    searchAssociatedTranscriptsResponse_botVersion,
+    searchAssociatedTranscriptsResponse_localeId,
+    searchAssociatedTranscriptsResponse_nextIndex,
+    searchAssociatedTranscriptsResponse_totalResults,
+    searchAssociatedTranscriptsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LexV2Models.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newSearchAssociatedTranscripts' smart constructor.
+data SearchAssociatedTranscripts = SearchAssociatedTranscripts'
+  { -- | The maximum number of bot recommendations to return in each page of
+    -- results. If there are fewer results than the max page size, only the
+    -- actual number of results are returned.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | If the response from the SearchAssociatedTranscriptsRequest operation
+    -- contains more results than specified in the maxResults parameter, an
+    -- index is returned in the response. Use that index in the nextIndex
+    -- parameter to return the next page of results.
+    nextIndex :: Prelude.Maybe Prelude.Natural,
+    -- | How SearchResults are ordered. Valid values are Ascending or Descending.
+    -- The default is Descending.
+    searchOrder :: Prelude.Maybe SearchOrder,
+    -- | The unique identifier of the bot associated with the transcripts that
+    -- you are searching.
+    botId :: Prelude.Text,
+    -- | The version of the bot containing the transcripts that you are
+    -- searching.
+    botVersion :: Prelude.Text,
+    -- | The identifier of the language and locale of the transcripts to search.
+    -- The string must match one of the supported locales. For more
+    -- information, see
+    -- <https://docs.aws.amazon.com/lexv2/latest/dg/how-languages.html Supported languages>
+    localeId :: Prelude.Text,
+    -- | The unique identifier of the bot recommendation associated with the
+    -- transcripts to search.
+    botRecommendationId :: Prelude.Text,
+    -- | A list of filter objects.
+    filters :: Prelude.NonEmpty AssociatedTranscriptFilter
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SearchAssociatedTranscripts' 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', 'searchAssociatedTranscripts_maxResults' - The maximum number of bot recommendations to return in each page of
+-- results. If there are fewer results than the max page size, only the
+-- actual number of results are returned.
+--
+-- 'nextIndex', 'searchAssociatedTranscripts_nextIndex' - If the response from the SearchAssociatedTranscriptsRequest operation
+-- contains more results than specified in the maxResults parameter, an
+-- index is returned in the response. Use that index in the nextIndex
+-- parameter to return the next page of results.
+--
+-- 'searchOrder', 'searchAssociatedTranscripts_searchOrder' - How SearchResults are ordered. Valid values are Ascending or Descending.
+-- The default is Descending.
+--
+-- 'botId', 'searchAssociatedTranscripts_botId' - The unique identifier of the bot associated with the transcripts that
+-- you are searching.
+--
+-- 'botVersion', 'searchAssociatedTranscripts_botVersion' - The version of the bot containing the transcripts that you are
+-- searching.
+--
+-- 'localeId', 'searchAssociatedTranscripts_localeId' - The identifier of the language and locale of the transcripts to search.
+-- The string must match one of the supported locales. For more
+-- information, see
+-- <https://docs.aws.amazon.com/lexv2/latest/dg/how-languages.html Supported languages>
+--
+-- 'botRecommendationId', 'searchAssociatedTranscripts_botRecommendationId' - The unique identifier of the bot recommendation associated with the
+-- transcripts to search.
+--
+-- 'filters', 'searchAssociatedTranscripts_filters' - A list of filter objects.
+newSearchAssociatedTranscripts ::
+  -- | 'botId'
+  Prelude.Text ->
+  -- | 'botVersion'
+  Prelude.Text ->
+  -- | 'localeId'
+  Prelude.Text ->
+  -- | 'botRecommendationId'
+  Prelude.Text ->
+  -- | 'filters'
+  Prelude.NonEmpty AssociatedTranscriptFilter ->
+  SearchAssociatedTranscripts
+newSearchAssociatedTranscripts
+  pBotId_
+  pBotVersion_
+  pLocaleId_
+  pBotRecommendationId_
+  pFilters_ =
+    SearchAssociatedTranscripts'
+      { maxResults =
+          Prelude.Nothing,
+        nextIndex = Prelude.Nothing,
+        searchOrder = Prelude.Nothing,
+        botId = pBotId_,
+        botVersion = pBotVersion_,
+        localeId = pLocaleId_,
+        botRecommendationId = pBotRecommendationId_,
+        filters = Lens.coerced Lens.# pFilters_
+      }
+
+-- | The maximum number of bot recommendations to return in each page of
+-- results. If there are fewer results than the max page size, only the
+-- actual number of results are returned.
+searchAssociatedTranscripts_maxResults :: Lens.Lens' SearchAssociatedTranscripts (Prelude.Maybe Prelude.Natural)
+searchAssociatedTranscripts_maxResults = Lens.lens (\SearchAssociatedTranscripts' {maxResults} -> maxResults) (\s@SearchAssociatedTranscripts' {} a -> s {maxResults = a} :: SearchAssociatedTranscripts)
+
+-- | If the response from the SearchAssociatedTranscriptsRequest operation
+-- contains more results than specified in the maxResults parameter, an
+-- index is returned in the response. Use that index in the nextIndex
+-- parameter to return the next page of results.
+searchAssociatedTranscripts_nextIndex :: Lens.Lens' SearchAssociatedTranscripts (Prelude.Maybe Prelude.Natural)
+searchAssociatedTranscripts_nextIndex = Lens.lens (\SearchAssociatedTranscripts' {nextIndex} -> nextIndex) (\s@SearchAssociatedTranscripts' {} a -> s {nextIndex = a} :: SearchAssociatedTranscripts)
+
+-- | How SearchResults are ordered. Valid values are Ascending or Descending.
+-- The default is Descending.
+searchAssociatedTranscripts_searchOrder :: Lens.Lens' SearchAssociatedTranscripts (Prelude.Maybe SearchOrder)
+searchAssociatedTranscripts_searchOrder = Lens.lens (\SearchAssociatedTranscripts' {searchOrder} -> searchOrder) (\s@SearchAssociatedTranscripts' {} a -> s {searchOrder = a} :: SearchAssociatedTranscripts)
+
+-- | The unique identifier of the bot associated with the transcripts that
+-- you are searching.
+searchAssociatedTranscripts_botId :: Lens.Lens' SearchAssociatedTranscripts Prelude.Text
+searchAssociatedTranscripts_botId = Lens.lens (\SearchAssociatedTranscripts' {botId} -> botId) (\s@SearchAssociatedTranscripts' {} a -> s {botId = a} :: SearchAssociatedTranscripts)
+
+-- | The version of the bot containing the transcripts that you are
+-- searching.
+searchAssociatedTranscripts_botVersion :: Lens.Lens' SearchAssociatedTranscripts Prelude.Text
+searchAssociatedTranscripts_botVersion = Lens.lens (\SearchAssociatedTranscripts' {botVersion} -> botVersion) (\s@SearchAssociatedTranscripts' {} a -> s {botVersion = a} :: SearchAssociatedTranscripts)
+
+-- | The identifier of the language and locale of the transcripts to search.
+-- The string must match one of the supported locales. For more
+-- information, see
+-- <https://docs.aws.amazon.com/lexv2/latest/dg/how-languages.html Supported languages>
+searchAssociatedTranscripts_localeId :: Lens.Lens' SearchAssociatedTranscripts Prelude.Text
+searchAssociatedTranscripts_localeId = Lens.lens (\SearchAssociatedTranscripts' {localeId} -> localeId) (\s@SearchAssociatedTranscripts' {} a -> s {localeId = a} :: SearchAssociatedTranscripts)
+
+-- | The unique identifier of the bot recommendation associated with the
+-- transcripts to search.
+searchAssociatedTranscripts_botRecommendationId :: Lens.Lens' SearchAssociatedTranscripts Prelude.Text
+searchAssociatedTranscripts_botRecommendationId = Lens.lens (\SearchAssociatedTranscripts' {botRecommendationId} -> botRecommendationId) (\s@SearchAssociatedTranscripts' {} a -> s {botRecommendationId = a} :: SearchAssociatedTranscripts)
+
+-- | A list of filter objects.
+searchAssociatedTranscripts_filters :: Lens.Lens' SearchAssociatedTranscripts (Prelude.NonEmpty AssociatedTranscriptFilter)
+searchAssociatedTranscripts_filters = Lens.lens (\SearchAssociatedTranscripts' {filters} -> filters) (\s@SearchAssociatedTranscripts' {} a -> s {filters = a} :: SearchAssociatedTranscripts) Prelude.. Lens.coerced
+
+instance Core.AWSRequest SearchAssociatedTranscripts where
+  type
+    AWSResponse SearchAssociatedTranscripts =
+      SearchAssociatedTranscriptsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          SearchAssociatedTranscriptsResponse'
+            Prelude.<$> ( x
+                            Data..?> "associatedTranscripts"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (x Data..?> "botId")
+            Prelude.<*> (x Data..?> "botRecommendationId")
+            Prelude.<*> (x Data..?> "botVersion")
+            Prelude.<*> (x Data..?> "localeId")
+            Prelude.<*> (x Data..?> "nextIndex")
+            Prelude.<*> (x Data..?> "totalResults")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable SearchAssociatedTranscripts where
+  hashWithSalt _salt SearchAssociatedTranscripts' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextIndex
+      `Prelude.hashWithSalt` searchOrder
+      `Prelude.hashWithSalt` botId
+      `Prelude.hashWithSalt` botVersion
+      `Prelude.hashWithSalt` localeId
+      `Prelude.hashWithSalt` botRecommendationId
+      `Prelude.hashWithSalt` filters
+
+instance Prelude.NFData SearchAssociatedTranscripts where
+  rnf SearchAssociatedTranscripts' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextIndex
+      `Prelude.seq` Prelude.rnf searchOrder
+      `Prelude.seq` Prelude.rnf botId
+      `Prelude.seq` Prelude.rnf botVersion
+      `Prelude.seq` Prelude.rnf localeId
+      `Prelude.seq` Prelude.rnf botRecommendationId
+      `Prelude.seq` Prelude.rnf filters
+
+instance Data.ToHeaders SearchAssociatedTranscripts where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON SearchAssociatedTranscripts where
+  toJSON SearchAssociatedTranscripts' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("maxResults" Data..=) Prelude.<$> maxResults,
+            ("nextIndex" Data..=) Prelude.<$> nextIndex,
+            ("searchOrder" Data..=) Prelude.<$> searchOrder,
+            Prelude.Just ("filters" Data..= filters)
+          ]
+      )
+
+instance Data.ToPath SearchAssociatedTranscripts where
+  toPath SearchAssociatedTranscripts' {..} =
+    Prelude.mconcat
+      [ "/bots/",
+        Data.toBS botId,
+        "/botversions/",
+        Data.toBS botVersion,
+        "/botlocales/",
+        Data.toBS localeId,
+        "/botrecommendations/",
+        Data.toBS botRecommendationId,
+        "/associatedtranscripts"
+      ]
+
+instance Data.ToQuery SearchAssociatedTranscripts where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newSearchAssociatedTranscriptsResponse' smart constructor.
+data SearchAssociatedTranscriptsResponse = SearchAssociatedTranscriptsResponse'
+  { -- | The object that contains the associated transcript that meet the
+    -- criteria you specified.
+    associatedTranscripts :: Prelude.Maybe [AssociatedTranscript],
+    -- | The unique identifier of the bot associated with the transcripts that
+    -- you are searching.
+    botId :: Prelude.Maybe Prelude.Text,
+    -- | The unique identifier of the bot recommendation associated with the
+    -- transcripts to search.
+    botRecommendationId :: Prelude.Maybe Prelude.Text,
+    -- | The version of the bot containing the transcripts that you are
+    -- searching.
+    botVersion :: Prelude.Maybe Prelude.Text,
+    -- | The identifier of the language and locale of the transcripts to search.
+    -- The string must match one of the supported locales. For more
+    -- information, see
+    -- <https://docs.aws.amazon.com/lexv2/latest/dg/how-languages.html Supported languages>
+    localeId :: Prelude.Maybe Prelude.Text,
+    -- | A index that indicates whether there are more results to return in a
+    -- response to the SearchAssociatedTranscripts operation. If the nextIndex
+    -- field is present, you send the contents as the nextIndex parameter of a
+    -- SearchAssociatedTranscriptsRequest operation to get the next page of
+    -- results.
+    nextIndex :: Prelude.Maybe Prelude.Natural,
+    -- | The total number of transcripts returned by the search.
+    totalResults :: Prelude.Maybe Prelude.Natural,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SearchAssociatedTranscriptsResponse' 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:
+--
+-- 'associatedTranscripts', 'searchAssociatedTranscriptsResponse_associatedTranscripts' - The object that contains the associated transcript that meet the
+-- criteria you specified.
+--
+-- 'botId', 'searchAssociatedTranscriptsResponse_botId' - The unique identifier of the bot associated with the transcripts that
+-- you are searching.
+--
+-- 'botRecommendationId', 'searchAssociatedTranscriptsResponse_botRecommendationId' - The unique identifier of the bot recommendation associated with the
+-- transcripts to search.
+--
+-- 'botVersion', 'searchAssociatedTranscriptsResponse_botVersion' - The version of the bot containing the transcripts that you are
+-- searching.
+--
+-- 'localeId', 'searchAssociatedTranscriptsResponse_localeId' - The identifier of the language and locale of the transcripts to search.
+-- The string must match one of the supported locales. For more
+-- information, see
+-- <https://docs.aws.amazon.com/lexv2/latest/dg/how-languages.html Supported languages>
+--
+-- 'nextIndex', 'searchAssociatedTranscriptsResponse_nextIndex' - A index that indicates whether there are more results to return in a
+-- response to the SearchAssociatedTranscripts operation. If the nextIndex
+-- field is present, you send the contents as the nextIndex parameter of a
+-- SearchAssociatedTranscriptsRequest operation to get the next page of
+-- results.
+--
+-- 'totalResults', 'searchAssociatedTranscriptsResponse_totalResults' - The total number of transcripts returned by the search.
+--
+-- 'httpStatus', 'searchAssociatedTranscriptsResponse_httpStatus' - The response's http status code.
+newSearchAssociatedTranscriptsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  SearchAssociatedTranscriptsResponse
+newSearchAssociatedTranscriptsResponse pHttpStatus_ =
+  SearchAssociatedTranscriptsResponse'
+    { associatedTranscripts =
+        Prelude.Nothing,
+      botId = Prelude.Nothing,
+      botRecommendationId = Prelude.Nothing,
+      botVersion = Prelude.Nothing,
+      localeId = Prelude.Nothing,
+      nextIndex = Prelude.Nothing,
+      totalResults = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The object that contains the associated transcript that meet the
+-- criteria you specified.
+searchAssociatedTranscriptsResponse_associatedTranscripts :: Lens.Lens' SearchAssociatedTranscriptsResponse (Prelude.Maybe [AssociatedTranscript])
+searchAssociatedTranscriptsResponse_associatedTranscripts = Lens.lens (\SearchAssociatedTranscriptsResponse' {associatedTranscripts} -> associatedTranscripts) (\s@SearchAssociatedTranscriptsResponse' {} a -> s {associatedTranscripts = a} :: SearchAssociatedTranscriptsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The unique identifier of the bot associated with the transcripts that
+-- you are searching.
+searchAssociatedTranscriptsResponse_botId :: Lens.Lens' SearchAssociatedTranscriptsResponse (Prelude.Maybe Prelude.Text)
+searchAssociatedTranscriptsResponse_botId = Lens.lens (\SearchAssociatedTranscriptsResponse' {botId} -> botId) (\s@SearchAssociatedTranscriptsResponse' {} a -> s {botId = a} :: SearchAssociatedTranscriptsResponse)
+
+-- | The unique identifier of the bot recommendation associated with the
+-- transcripts to search.
+searchAssociatedTranscriptsResponse_botRecommendationId :: Lens.Lens' SearchAssociatedTranscriptsResponse (Prelude.Maybe Prelude.Text)
+searchAssociatedTranscriptsResponse_botRecommendationId = Lens.lens (\SearchAssociatedTranscriptsResponse' {botRecommendationId} -> botRecommendationId) (\s@SearchAssociatedTranscriptsResponse' {} a -> s {botRecommendationId = a} :: SearchAssociatedTranscriptsResponse)
+
+-- | The version of the bot containing the transcripts that you are
+-- searching.
+searchAssociatedTranscriptsResponse_botVersion :: Lens.Lens' SearchAssociatedTranscriptsResponse (Prelude.Maybe Prelude.Text)
+searchAssociatedTranscriptsResponse_botVersion = Lens.lens (\SearchAssociatedTranscriptsResponse' {botVersion} -> botVersion) (\s@SearchAssociatedTranscriptsResponse' {} a -> s {botVersion = a} :: SearchAssociatedTranscriptsResponse)
+
+-- | The identifier of the language and locale of the transcripts to search.
+-- The string must match one of the supported locales. For more
+-- information, see
+-- <https://docs.aws.amazon.com/lexv2/latest/dg/how-languages.html Supported languages>
+searchAssociatedTranscriptsResponse_localeId :: Lens.Lens' SearchAssociatedTranscriptsResponse (Prelude.Maybe Prelude.Text)
+searchAssociatedTranscriptsResponse_localeId = Lens.lens (\SearchAssociatedTranscriptsResponse' {localeId} -> localeId) (\s@SearchAssociatedTranscriptsResponse' {} a -> s {localeId = a} :: SearchAssociatedTranscriptsResponse)
+
+-- | A index that indicates whether there are more results to return in a
+-- response to the SearchAssociatedTranscripts operation. If the nextIndex
+-- field is present, you send the contents as the nextIndex parameter of a
+-- SearchAssociatedTranscriptsRequest operation to get the next page of
+-- results.
+searchAssociatedTranscriptsResponse_nextIndex :: Lens.Lens' SearchAssociatedTranscriptsResponse (Prelude.Maybe Prelude.Natural)
+searchAssociatedTranscriptsResponse_nextIndex = Lens.lens (\SearchAssociatedTranscriptsResponse' {nextIndex} -> nextIndex) (\s@SearchAssociatedTranscriptsResponse' {} a -> s {nextIndex = a} :: SearchAssociatedTranscriptsResponse)
+
+-- | The total number of transcripts returned by the search.
+searchAssociatedTranscriptsResponse_totalResults :: Lens.Lens' SearchAssociatedTranscriptsResponse (Prelude.Maybe Prelude.Natural)
+searchAssociatedTranscriptsResponse_totalResults = Lens.lens (\SearchAssociatedTranscriptsResponse' {totalResults} -> totalResults) (\s@SearchAssociatedTranscriptsResponse' {} a -> s {totalResults = a} :: SearchAssociatedTranscriptsResponse)
+
+-- | The response's http status code.
+searchAssociatedTranscriptsResponse_httpStatus :: Lens.Lens' SearchAssociatedTranscriptsResponse Prelude.Int
+searchAssociatedTranscriptsResponse_httpStatus = Lens.lens (\SearchAssociatedTranscriptsResponse' {httpStatus} -> httpStatus) (\s@SearchAssociatedTranscriptsResponse' {} a -> s {httpStatus = a} :: SearchAssociatedTranscriptsResponse)
+
+instance
+  Prelude.NFData
+    SearchAssociatedTranscriptsResponse
+  where
+  rnf SearchAssociatedTranscriptsResponse' {..} =
+    Prelude.rnf associatedTranscripts
+      `Prelude.seq` Prelude.rnf botId
+      `Prelude.seq` Prelude.rnf botRecommendationId
+      `Prelude.seq` Prelude.rnf botVersion
+      `Prelude.seq` Prelude.rnf localeId
+      `Prelude.seq` Prelude.rnf nextIndex
+      `Prelude.seq` Prelude.rnf totalResults
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/LexV2Models/StartBotRecommendation.hs b/gen/Amazonka/LexV2Models/StartBotRecommendation.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/StartBotRecommendation.hs
@@ -0,0 +1,378 @@
+{-# 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.LexV2Models.StartBotRecommendation
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Use this to provide your transcript data, and to start the bot
+-- recommendation process.
+module Amazonka.LexV2Models.StartBotRecommendation
+  ( -- * Creating a Request
+    StartBotRecommendation (..),
+    newStartBotRecommendation,
+
+    -- * Request Lenses
+    startBotRecommendation_encryptionSetting,
+    startBotRecommendation_botId,
+    startBotRecommendation_botVersion,
+    startBotRecommendation_localeId,
+    startBotRecommendation_transcriptSourceSetting,
+
+    -- * Destructuring the Response
+    StartBotRecommendationResponse (..),
+    newStartBotRecommendationResponse,
+
+    -- * Response Lenses
+    startBotRecommendationResponse_botId,
+    startBotRecommendationResponse_botRecommendationId,
+    startBotRecommendationResponse_botRecommendationStatus,
+    startBotRecommendationResponse_botVersion,
+    startBotRecommendationResponse_creationDateTime,
+    startBotRecommendationResponse_encryptionSetting,
+    startBotRecommendationResponse_localeId,
+    startBotRecommendationResponse_transcriptSourceSetting,
+    startBotRecommendationResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LexV2Models.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newStartBotRecommendation' smart constructor.
+data StartBotRecommendation = StartBotRecommendation'
+  { -- | The object representing the passwords that will be used to encrypt the
+    -- data related to the bot recommendation results, as well as the KMS key
+    -- ARN used to encrypt the associated metadata.
+    encryptionSetting :: Prelude.Maybe EncryptionSetting,
+    -- | The unique identifier of the bot containing the bot recommendation.
+    botId :: Prelude.Text,
+    -- | The version of the bot containing the bot recommendation.
+    botVersion :: Prelude.Text,
+    -- | The identifier of the language and locale of the bot recommendation to
+    -- start. The string must match one of the supported locales. For more
+    -- information, see
+    -- <https://docs.aws.amazon.com/lexv2/latest/dg/how-languages.html Supported languages>
+    localeId :: Prelude.Text,
+    -- | The object representing the Amazon S3 bucket containing the transcript,
+    -- as well as the associated metadata.
+    transcriptSourceSetting :: TranscriptSourceSetting
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StartBotRecommendation' 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:
+--
+-- 'encryptionSetting', 'startBotRecommendation_encryptionSetting' - The object representing the passwords that will be used to encrypt the
+-- data related to the bot recommendation results, as well as the KMS key
+-- ARN used to encrypt the associated metadata.
+--
+-- 'botId', 'startBotRecommendation_botId' - The unique identifier of the bot containing the bot recommendation.
+--
+-- 'botVersion', 'startBotRecommendation_botVersion' - The version of the bot containing the bot recommendation.
+--
+-- 'localeId', 'startBotRecommendation_localeId' - The identifier of the language and locale of the bot recommendation to
+-- start. The string must match one of the supported locales. For more
+-- information, see
+-- <https://docs.aws.amazon.com/lexv2/latest/dg/how-languages.html Supported languages>
+--
+-- 'transcriptSourceSetting', 'startBotRecommendation_transcriptSourceSetting' - The object representing the Amazon S3 bucket containing the transcript,
+-- as well as the associated metadata.
+newStartBotRecommendation ::
+  -- | 'botId'
+  Prelude.Text ->
+  -- | 'botVersion'
+  Prelude.Text ->
+  -- | 'localeId'
+  Prelude.Text ->
+  -- | 'transcriptSourceSetting'
+  TranscriptSourceSetting ->
+  StartBotRecommendation
+newStartBotRecommendation
+  pBotId_
+  pBotVersion_
+  pLocaleId_
+  pTranscriptSourceSetting_ =
+    StartBotRecommendation'
+      { encryptionSetting =
+          Prelude.Nothing,
+        botId = pBotId_,
+        botVersion = pBotVersion_,
+        localeId = pLocaleId_,
+        transcriptSourceSetting = pTranscriptSourceSetting_
+      }
+
+-- | The object representing the passwords that will be used to encrypt the
+-- data related to the bot recommendation results, as well as the KMS key
+-- ARN used to encrypt the associated metadata.
+startBotRecommendation_encryptionSetting :: Lens.Lens' StartBotRecommendation (Prelude.Maybe EncryptionSetting)
+startBotRecommendation_encryptionSetting = Lens.lens (\StartBotRecommendation' {encryptionSetting} -> encryptionSetting) (\s@StartBotRecommendation' {} a -> s {encryptionSetting = a} :: StartBotRecommendation)
+
+-- | The unique identifier of the bot containing the bot recommendation.
+startBotRecommendation_botId :: Lens.Lens' StartBotRecommendation Prelude.Text
+startBotRecommendation_botId = Lens.lens (\StartBotRecommendation' {botId} -> botId) (\s@StartBotRecommendation' {} a -> s {botId = a} :: StartBotRecommendation)
+
+-- | The version of the bot containing the bot recommendation.
+startBotRecommendation_botVersion :: Lens.Lens' StartBotRecommendation Prelude.Text
+startBotRecommendation_botVersion = Lens.lens (\StartBotRecommendation' {botVersion} -> botVersion) (\s@StartBotRecommendation' {} a -> s {botVersion = a} :: StartBotRecommendation)
+
+-- | The identifier of the language and locale of the bot recommendation to
+-- start. The string must match one of the supported locales. For more
+-- information, see
+-- <https://docs.aws.amazon.com/lexv2/latest/dg/how-languages.html Supported languages>
+startBotRecommendation_localeId :: Lens.Lens' StartBotRecommendation Prelude.Text
+startBotRecommendation_localeId = Lens.lens (\StartBotRecommendation' {localeId} -> localeId) (\s@StartBotRecommendation' {} a -> s {localeId = a} :: StartBotRecommendation)
+
+-- | The object representing the Amazon S3 bucket containing the transcript,
+-- as well as the associated metadata.
+startBotRecommendation_transcriptSourceSetting :: Lens.Lens' StartBotRecommendation TranscriptSourceSetting
+startBotRecommendation_transcriptSourceSetting = Lens.lens (\StartBotRecommendation' {transcriptSourceSetting} -> transcriptSourceSetting) (\s@StartBotRecommendation' {} a -> s {transcriptSourceSetting = a} :: StartBotRecommendation)
+
+instance Core.AWSRequest StartBotRecommendation where
+  type
+    AWSResponse StartBotRecommendation =
+      StartBotRecommendationResponse
+  request overrides =
+    Request.putJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          StartBotRecommendationResponse'
+            Prelude.<$> (x Data..?> "botId")
+            Prelude.<*> (x Data..?> "botRecommendationId")
+            Prelude.<*> (x Data..?> "botRecommendationStatus")
+            Prelude.<*> (x Data..?> "botVersion")
+            Prelude.<*> (x Data..?> "creationDateTime")
+            Prelude.<*> (x Data..?> "encryptionSetting")
+            Prelude.<*> (x Data..?> "localeId")
+            Prelude.<*> (x Data..?> "transcriptSourceSetting")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable StartBotRecommendation where
+  hashWithSalt _salt StartBotRecommendation' {..} =
+    _salt
+      `Prelude.hashWithSalt` encryptionSetting
+      `Prelude.hashWithSalt` botId
+      `Prelude.hashWithSalt` botVersion
+      `Prelude.hashWithSalt` localeId
+      `Prelude.hashWithSalt` transcriptSourceSetting
+
+instance Prelude.NFData StartBotRecommendation where
+  rnf StartBotRecommendation' {..} =
+    Prelude.rnf encryptionSetting
+      `Prelude.seq` Prelude.rnf botId
+      `Prelude.seq` Prelude.rnf botVersion
+      `Prelude.seq` Prelude.rnf localeId
+      `Prelude.seq` Prelude.rnf transcriptSourceSetting
+
+instance Data.ToHeaders StartBotRecommendation where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON StartBotRecommendation where
+  toJSON StartBotRecommendation' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("encryptionSetting" Data..=)
+              Prelude.<$> encryptionSetting,
+            Prelude.Just
+              ( "transcriptSourceSetting"
+                  Data..= transcriptSourceSetting
+              )
+          ]
+      )
+
+instance Data.ToPath StartBotRecommendation where
+  toPath StartBotRecommendation' {..} =
+    Prelude.mconcat
+      [ "/bots/",
+        Data.toBS botId,
+        "/botversions/",
+        Data.toBS botVersion,
+        "/botlocales/",
+        Data.toBS localeId,
+        "/botrecommendations/"
+      ]
+
+instance Data.ToQuery StartBotRecommendation where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newStartBotRecommendationResponse' smart constructor.
+data StartBotRecommendationResponse = StartBotRecommendationResponse'
+  { -- | The unique identifier of the bot containing the bot recommendation.
+    botId :: Prelude.Maybe Prelude.Text,
+    -- | The identifier of the bot recommendation that you have created.
+    botRecommendationId :: Prelude.Maybe Prelude.Text,
+    -- | The status of the bot recommendation.
+    --
+    -- If the status is Failed, then the reasons for the failure are listed in
+    -- the failureReasons field.
+    botRecommendationStatus :: Prelude.Maybe BotRecommendationStatus,
+    -- | The version of the bot containing the bot recommendation.
+    botVersion :: Prelude.Maybe Prelude.Text,
+    -- | A timestamp of the date and time that the bot recommendation was
+    -- created.
+    creationDateTime :: Prelude.Maybe Data.POSIX,
+    -- | The object representing the passwords that were used to encrypt the data
+    -- related to the bot recommendation results, as well as the KMS key ARN
+    -- used to encrypt the associated metadata.
+    encryptionSetting :: Prelude.Maybe EncryptionSetting,
+    -- | The identifier of the language and locale of the bot recommendation to
+    -- start. The string must match one of the supported locales. For more
+    -- information, see
+    -- <https://docs.aws.amazon.com/lexv2/latest/dg/how-languages.html Supported languages>
+    localeId :: Prelude.Maybe Prelude.Text,
+    -- | The object representing the Amazon S3 bucket containing the transcript,
+    -- as well as the associated metadata.
+    transcriptSourceSetting :: Prelude.Maybe TranscriptSourceSetting,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StartBotRecommendationResponse' 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:
+--
+-- 'botId', 'startBotRecommendationResponse_botId' - The unique identifier of the bot containing the bot recommendation.
+--
+-- 'botRecommendationId', 'startBotRecommendationResponse_botRecommendationId' - The identifier of the bot recommendation that you have created.
+--
+-- 'botRecommendationStatus', 'startBotRecommendationResponse_botRecommendationStatus' - The status of the bot recommendation.
+--
+-- If the status is Failed, then the reasons for the failure are listed in
+-- the failureReasons field.
+--
+-- 'botVersion', 'startBotRecommendationResponse_botVersion' - The version of the bot containing the bot recommendation.
+--
+-- 'creationDateTime', 'startBotRecommendationResponse_creationDateTime' - A timestamp of the date and time that the bot recommendation was
+-- created.
+--
+-- 'encryptionSetting', 'startBotRecommendationResponse_encryptionSetting' - The object representing the passwords that were used to encrypt the data
+-- related to the bot recommendation results, as well as the KMS key ARN
+-- used to encrypt the associated metadata.
+--
+-- 'localeId', 'startBotRecommendationResponse_localeId' - The identifier of the language and locale of the bot recommendation to
+-- start. The string must match one of the supported locales. For more
+-- information, see
+-- <https://docs.aws.amazon.com/lexv2/latest/dg/how-languages.html Supported languages>
+--
+-- 'transcriptSourceSetting', 'startBotRecommendationResponse_transcriptSourceSetting' - The object representing the Amazon S3 bucket containing the transcript,
+-- as well as the associated metadata.
+--
+-- 'httpStatus', 'startBotRecommendationResponse_httpStatus' - The response's http status code.
+newStartBotRecommendationResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  StartBotRecommendationResponse
+newStartBotRecommendationResponse pHttpStatus_ =
+  StartBotRecommendationResponse'
+    { botId =
+        Prelude.Nothing,
+      botRecommendationId = Prelude.Nothing,
+      botRecommendationStatus = Prelude.Nothing,
+      botVersion = Prelude.Nothing,
+      creationDateTime = Prelude.Nothing,
+      encryptionSetting = Prelude.Nothing,
+      localeId = Prelude.Nothing,
+      transcriptSourceSetting = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The unique identifier of the bot containing the bot recommendation.
+startBotRecommendationResponse_botId :: Lens.Lens' StartBotRecommendationResponse (Prelude.Maybe Prelude.Text)
+startBotRecommendationResponse_botId = Lens.lens (\StartBotRecommendationResponse' {botId} -> botId) (\s@StartBotRecommendationResponse' {} a -> s {botId = a} :: StartBotRecommendationResponse)
+
+-- | The identifier of the bot recommendation that you have created.
+startBotRecommendationResponse_botRecommendationId :: Lens.Lens' StartBotRecommendationResponse (Prelude.Maybe Prelude.Text)
+startBotRecommendationResponse_botRecommendationId = Lens.lens (\StartBotRecommendationResponse' {botRecommendationId} -> botRecommendationId) (\s@StartBotRecommendationResponse' {} a -> s {botRecommendationId = a} :: StartBotRecommendationResponse)
+
+-- | The status of the bot recommendation.
+--
+-- If the status is Failed, then the reasons for the failure are listed in
+-- the failureReasons field.
+startBotRecommendationResponse_botRecommendationStatus :: Lens.Lens' StartBotRecommendationResponse (Prelude.Maybe BotRecommendationStatus)
+startBotRecommendationResponse_botRecommendationStatus = Lens.lens (\StartBotRecommendationResponse' {botRecommendationStatus} -> botRecommendationStatus) (\s@StartBotRecommendationResponse' {} a -> s {botRecommendationStatus = a} :: StartBotRecommendationResponse)
+
+-- | The version of the bot containing the bot recommendation.
+startBotRecommendationResponse_botVersion :: Lens.Lens' StartBotRecommendationResponse (Prelude.Maybe Prelude.Text)
+startBotRecommendationResponse_botVersion = Lens.lens (\StartBotRecommendationResponse' {botVersion} -> botVersion) (\s@StartBotRecommendationResponse' {} a -> s {botVersion = a} :: StartBotRecommendationResponse)
+
+-- | A timestamp of the date and time that the bot recommendation was
+-- created.
+startBotRecommendationResponse_creationDateTime :: Lens.Lens' StartBotRecommendationResponse (Prelude.Maybe Prelude.UTCTime)
+startBotRecommendationResponse_creationDateTime = Lens.lens (\StartBotRecommendationResponse' {creationDateTime} -> creationDateTime) (\s@StartBotRecommendationResponse' {} a -> s {creationDateTime = a} :: StartBotRecommendationResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The object representing the passwords that were used to encrypt the data
+-- related to the bot recommendation results, as well as the KMS key ARN
+-- used to encrypt the associated metadata.
+startBotRecommendationResponse_encryptionSetting :: Lens.Lens' StartBotRecommendationResponse (Prelude.Maybe EncryptionSetting)
+startBotRecommendationResponse_encryptionSetting = Lens.lens (\StartBotRecommendationResponse' {encryptionSetting} -> encryptionSetting) (\s@StartBotRecommendationResponse' {} a -> s {encryptionSetting = a} :: StartBotRecommendationResponse)
+
+-- | The identifier of the language and locale of the bot recommendation to
+-- start. The string must match one of the supported locales. For more
+-- information, see
+-- <https://docs.aws.amazon.com/lexv2/latest/dg/how-languages.html Supported languages>
+startBotRecommendationResponse_localeId :: Lens.Lens' StartBotRecommendationResponse (Prelude.Maybe Prelude.Text)
+startBotRecommendationResponse_localeId = Lens.lens (\StartBotRecommendationResponse' {localeId} -> localeId) (\s@StartBotRecommendationResponse' {} a -> s {localeId = a} :: StartBotRecommendationResponse)
+
+-- | The object representing the Amazon S3 bucket containing the transcript,
+-- as well as the associated metadata.
+startBotRecommendationResponse_transcriptSourceSetting :: Lens.Lens' StartBotRecommendationResponse (Prelude.Maybe TranscriptSourceSetting)
+startBotRecommendationResponse_transcriptSourceSetting = Lens.lens (\StartBotRecommendationResponse' {transcriptSourceSetting} -> transcriptSourceSetting) (\s@StartBotRecommendationResponse' {} a -> s {transcriptSourceSetting = a} :: StartBotRecommendationResponse)
+
+-- | The response's http status code.
+startBotRecommendationResponse_httpStatus :: Lens.Lens' StartBotRecommendationResponse Prelude.Int
+startBotRecommendationResponse_httpStatus = Lens.lens (\StartBotRecommendationResponse' {httpStatus} -> httpStatus) (\s@StartBotRecommendationResponse' {} a -> s {httpStatus = a} :: StartBotRecommendationResponse)
+
+instance
+  Prelude.NFData
+    StartBotRecommendationResponse
+  where
+  rnf StartBotRecommendationResponse' {..} =
+    Prelude.rnf botId
+      `Prelude.seq` Prelude.rnf botRecommendationId
+      `Prelude.seq` Prelude.rnf botRecommendationStatus
+      `Prelude.seq` Prelude.rnf botVersion
+      `Prelude.seq` Prelude.rnf creationDateTime
+      `Prelude.seq` Prelude.rnf encryptionSetting
+      `Prelude.seq` Prelude.rnf localeId
+      `Prelude.seq` Prelude.rnf transcriptSourceSetting
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/LexV2Models/StartImport.hs b/gen/Amazonka/LexV2Models/StartImport.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/StartImport.hs
@@ -0,0 +1,302 @@
+{-# 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.LexV2Models.StartImport
+-- 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 importing a bot, bot locale, or custom vocabulary from a zip
+-- archive that you uploaded to an S3 bucket.
+module Amazonka.LexV2Models.StartImport
+  ( -- * Creating a Request
+    StartImport (..),
+    newStartImport,
+
+    -- * Request Lenses
+    startImport_filePassword,
+    startImport_importId,
+    startImport_resourceSpecification,
+    startImport_mergeStrategy,
+
+    -- * Destructuring the Response
+    StartImportResponse (..),
+    newStartImportResponse,
+
+    -- * Response Lenses
+    startImportResponse_creationDateTime,
+    startImportResponse_importId,
+    startImportResponse_importStatus,
+    startImportResponse_mergeStrategy,
+    startImportResponse_resourceSpecification,
+    startImportResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LexV2Models.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newStartImport' smart constructor.
+data StartImport = StartImport'
+  { -- | The password used to encrypt the zip archive that contains the resource
+    -- definition. You should always encrypt the zip archive to protect it
+    -- during transit between your site and Amazon Lex.
+    filePassword :: Prelude.Maybe (Data.Sensitive Prelude.Text),
+    -- | The unique identifier for the import. It is included in the response
+    -- from the
+    -- <https://docs.aws.amazon.com/lexv2/latest/dg/API_CreateUploadUrl.html CreateUploadUrl>
+    -- operation.
+    importId :: Prelude.Text,
+    -- | Parameters for creating the bot, bot locale or custom vocabulary.
+    resourceSpecification :: ImportResourceSpecification,
+    -- | The strategy to use when there is a name conflict between the imported
+    -- resource and an existing resource. When the merge strategy is
+    -- @FailOnConflict@ existing resources are not overwritten and the import
+    -- fails.
+    mergeStrategy :: MergeStrategy
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StartImport' 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:
+--
+-- 'filePassword', 'startImport_filePassword' - The password used to encrypt the zip archive that contains the resource
+-- definition. You should always encrypt the zip archive to protect it
+-- during transit between your site and Amazon Lex.
+--
+-- 'importId', 'startImport_importId' - The unique identifier for the import. It is included in the response
+-- from the
+-- <https://docs.aws.amazon.com/lexv2/latest/dg/API_CreateUploadUrl.html CreateUploadUrl>
+-- operation.
+--
+-- 'resourceSpecification', 'startImport_resourceSpecification' - Parameters for creating the bot, bot locale or custom vocabulary.
+--
+-- 'mergeStrategy', 'startImport_mergeStrategy' - The strategy to use when there is a name conflict between the imported
+-- resource and an existing resource. When the merge strategy is
+-- @FailOnConflict@ existing resources are not overwritten and the import
+-- fails.
+newStartImport ::
+  -- | 'importId'
+  Prelude.Text ->
+  -- | 'resourceSpecification'
+  ImportResourceSpecification ->
+  -- | 'mergeStrategy'
+  MergeStrategy ->
+  StartImport
+newStartImport
+  pImportId_
+  pResourceSpecification_
+  pMergeStrategy_ =
+    StartImport'
+      { filePassword = Prelude.Nothing,
+        importId = pImportId_,
+        resourceSpecification = pResourceSpecification_,
+        mergeStrategy = pMergeStrategy_
+      }
+
+-- | The password used to encrypt the zip archive that contains the resource
+-- definition. You should always encrypt the zip archive to protect it
+-- during transit between your site and Amazon Lex.
+startImport_filePassword :: Lens.Lens' StartImport (Prelude.Maybe Prelude.Text)
+startImport_filePassword = Lens.lens (\StartImport' {filePassword} -> filePassword) (\s@StartImport' {} a -> s {filePassword = a} :: StartImport) Prelude.. Lens.mapping Data._Sensitive
+
+-- | The unique identifier for the import. It is included in the response
+-- from the
+-- <https://docs.aws.amazon.com/lexv2/latest/dg/API_CreateUploadUrl.html CreateUploadUrl>
+-- operation.
+startImport_importId :: Lens.Lens' StartImport Prelude.Text
+startImport_importId = Lens.lens (\StartImport' {importId} -> importId) (\s@StartImport' {} a -> s {importId = a} :: StartImport)
+
+-- | Parameters for creating the bot, bot locale or custom vocabulary.
+startImport_resourceSpecification :: Lens.Lens' StartImport ImportResourceSpecification
+startImport_resourceSpecification = Lens.lens (\StartImport' {resourceSpecification} -> resourceSpecification) (\s@StartImport' {} a -> s {resourceSpecification = a} :: StartImport)
+
+-- | The strategy to use when there is a name conflict between the imported
+-- resource and an existing resource. When the merge strategy is
+-- @FailOnConflict@ existing resources are not overwritten and the import
+-- fails.
+startImport_mergeStrategy :: Lens.Lens' StartImport MergeStrategy
+startImport_mergeStrategy = Lens.lens (\StartImport' {mergeStrategy} -> mergeStrategy) (\s@StartImport' {} a -> s {mergeStrategy = a} :: StartImport)
+
+instance Core.AWSRequest StartImport where
+  type AWSResponse StartImport = StartImportResponse
+  request overrides =
+    Request.putJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          StartImportResponse'
+            Prelude.<$> (x Data..?> "creationDateTime")
+            Prelude.<*> (x Data..?> "importId")
+            Prelude.<*> (x Data..?> "importStatus")
+            Prelude.<*> (x Data..?> "mergeStrategy")
+            Prelude.<*> (x Data..?> "resourceSpecification")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable StartImport where
+  hashWithSalt _salt StartImport' {..} =
+    _salt
+      `Prelude.hashWithSalt` filePassword
+      `Prelude.hashWithSalt` importId
+      `Prelude.hashWithSalt` resourceSpecification
+      `Prelude.hashWithSalt` mergeStrategy
+
+instance Prelude.NFData StartImport where
+  rnf StartImport' {..} =
+    Prelude.rnf filePassword
+      `Prelude.seq` Prelude.rnf importId
+      `Prelude.seq` Prelude.rnf resourceSpecification
+      `Prelude.seq` Prelude.rnf mergeStrategy
+
+instance Data.ToHeaders StartImport where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON StartImport where
+  toJSON StartImport' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("filePassword" Data..=) Prelude.<$> filePassword,
+            Prelude.Just ("importId" Data..= importId),
+            Prelude.Just
+              ( "resourceSpecification"
+                  Data..= resourceSpecification
+              ),
+            Prelude.Just
+              ("mergeStrategy" Data..= mergeStrategy)
+          ]
+      )
+
+instance Data.ToPath StartImport where
+  toPath = Prelude.const "/imports/"
+
+instance Data.ToQuery StartImport where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newStartImportResponse' smart constructor.
+data StartImportResponse = StartImportResponse'
+  { -- | The date and time that the import request was created.
+    creationDateTime :: Prelude.Maybe Data.POSIX,
+    -- | A unique identifier for the import.
+    importId :: Prelude.Maybe Prelude.Text,
+    -- | The current status of the import. When the status is @Complete@ the bot,
+    -- bot alias, or custom vocabulary is ready to use.
+    importStatus :: Prelude.Maybe ImportStatus,
+    -- | The strategy used when there was a name conflict between the imported
+    -- resource and an existing resource. When the merge strategy is
+    -- @FailOnConflict@ existing resources are not overwritten and the import
+    -- fails.
+    mergeStrategy :: Prelude.Maybe MergeStrategy,
+    -- | The parameters used when importing the resource.
+    resourceSpecification :: Prelude.Maybe ImportResourceSpecification,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StartImportResponse' 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:
+--
+-- 'creationDateTime', 'startImportResponse_creationDateTime' - The date and time that the import request was created.
+--
+-- 'importId', 'startImportResponse_importId' - A unique identifier for the import.
+--
+-- 'importStatus', 'startImportResponse_importStatus' - The current status of the import. When the status is @Complete@ the bot,
+-- bot alias, or custom vocabulary is ready to use.
+--
+-- 'mergeStrategy', 'startImportResponse_mergeStrategy' - The strategy used when there was a name conflict between the imported
+-- resource and an existing resource. When the merge strategy is
+-- @FailOnConflict@ existing resources are not overwritten and the import
+-- fails.
+--
+-- 'resourceSpecification', 'startImportResponse_resourceSpecification' - The parameters used when importing the resource.
+--
+-- 'httpStatus', 'startImportResponse_httpStatus' - The response's http status code.
+newStartImportResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  StartImportResponse
+newStartImportResponse pHttpStatus_ =
+  StartImportResponse'
+    { creationDateTime =
+        Prelude.Nothing,
+      importId = Prelude.Nothing,
+      importStatus = Prelude.Nothing,
+      mergeStrategy = Prelude.Nothing,
+      resourceSpecification = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The date and time that the import request was created.
+startImportResponse_creationDateTime :: Lens.Lens' StartImportResponse (Prelude.Maybe Prelude.UTCTime)
+startImportResponse_creationDateTime = Lens.lens (\StartImportResponse' {creationDateTime} -> creationDateTime) (\s@StartImportResponse' {} a -> s {creationDateTime = a} :: StartImportResponse) Prelude.. Lens.mapping Data._Time
+
+-- | A unique identifier for the import.
+startImportResponse_importId :: Lens.Lens' StartImportResponse (Prelude.Maybe Prelude.Text)
+startImportResponse_importId = Lens.lens (\StartImportResponse' {importId} -> importId) (\s@StartImportResponse' {} a -> s {importId = a} :: StartImportResponse)
+
+-- | The current status of the import. When the status is @Complete@ the bot,
+-- bot alias, or custom vocabulary is ready to use.
+startImportResponse_importStatus :: Lens.Lens' StartImportResponse (Prelude.Maybe ImportStatus)
+startImportResponse_importStatus = Lens.lens (\StartImportResponse' {importStatus} -> importStatus) (\s@StartImportResponse' {} a -> s {importStatus = a} :: StartImportResponse)
+
+-- | The strategy used when there was a name conflict between the imported
+-- resource and an existing resource. When the merge strategy is
+-- @FailOnConflict@ existing resources are not overwritten and the import
+-- fails.
+startImportResponse_mergeStrategy :: Lens.Lens' StartImportResponse (Prelude.Maybe MergeStrategy)
+startImportResponse_mergeStrategy = Lens.lens (\StartImportResponse' {mergeStrategy} -> mergeStrategy) (\s@StartImportResponse' {} a -> s {mergeStrategy = a} :: StartImportResponse)
+
+-- | The parameters used when importing the resource.
+startImportResponse_resourceSpecification :: Lens.Lens' StartImportResponse (Prelude.Maybe ImportResourceSpecification)
+startImportResponse_resourceSpecification = Lens.lens (\StartImportResponse' {resourceSpecification} -> resourceSpecification) (\s@StartImportResponse' {} a -> s {resourceSpecification = a} :: StartImportResponse)
+
+-- | The response's http status code.
+startImportResponse_httpStatus :: Lens.Lens' StartImportResponse Prelude.Int
+startImportResponse_httpStatus = Lens.lens (\StartImportResponse' {httpStatus} -> httpStatus) (\s@StartImportResponse' {} a -> s {httpStatus = a} :: StartImportResponse)
+
+instance Prelude.NFData StartImportResponse where
+  rnf StartImportResponse' {..} =
+    Prelude.rnf creationDateTime
+      `Prelude.seq` Prelude.rnf importId
+      `Prelude.seq` Prelude.rnf importStatus
+      `Prelude.seq` Prelude.rnf mergeStrategy
+      `Prelude.seq` Prelude.rnf resourceSpecification
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/LexV2Models/StopBotRecommendation.hs b/gen/Amazonka/LexV2Models/StopBotRecommendation.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/StopBotRecommendation.hs
@@ -0,0 +1,299 @@
+{-# 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.LexV2Models.StopBotRecommendation
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Stop an already running Bot Recommendation request.
+module Amazonka.LexV2Models.StopBotRecommendation
+  ( -- * Creating a Request
+    StopBotRecommendation (..),
+    newStopBotRecommendation,
+
+    -- * Request Lenses
+    stopBotRecommendation_botId,
+    stopBotRecommendation_botVersion,
+    stopBotRecommendation_localeId,
+    stopBotRecommendation_botRecommendationId,
+
+    -- * Destructuring the Response
+    StopBotRecommendationResponse (..),
+    newStopBotRecommendationResponse,
+
+    -- * Response Lenses
+    stopBotRecommendationResponse_botId,
+    stopBotRecommendationResponse_botRecommendationId,
+    stopBotRecommendationResponse_botRecommendationStatus,
+    stopBotRecommendationResponse_botVersion,
+    stopBotRecommendationResponse_localeId,
+    stopBotRecommendationResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LexV2Models.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newStopBotRecommendation' smart constructor.
+data StopBotRecommendation = StopBotRecommendation'
+  { -- | The unique identifier of the bot containing the bot recommendation to be
+    -- stopped.
+    botId :: Prelude.Text,
+    -- | The version of the bot containing the bot recommendation.
+    botVersion :: Prelude.Text,
+    -- | The identifier of the language and locale of the bot recommendation to
+    -- stop. The string must match one of the supported locales. For more
+    -- information, see
+    -- <https://docs.aws.amazon.com/lexv2/latest/dg/how-languages.html Supported languages>
+    localeId :: Prelude.Text,
+    -- | The unique identifier of the bot recommendation to be stopped.
+    botRecommendationId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StopBotRecommendation' 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:
+--
+-- 'botId', 'stopBotRecommendation_botId' - The unique identifier of the bot containing the bot recommendation to be
+-- stopped.
+--
+-- 'botVersion', 'stopBotRecommendation_botVersion' - The version of the bot containing the bot recommendation.
+--
+-- 'localeId', 'stopBotRecommendation_localeId' - The identifier of the language and locale of the bot recommendation to
+-- stop. The string must match one of the supported locales. For more
+-- information, see
+-- <https://docs.aws.amazon.com/lexv2/latest/dg/how-languages.html Supported languages>
+--
+-- 'botRecommendationId', 'stopBotRecommendation_botRecommendationId' - The unique identifier of the bot recommendation to be stopped.
+newStopBotRecommendation ::
+  -- | 'botId'
+  Prelude.Text ->
+  -- | 'botVersion'
+  Prelude.Text ->
+  -- | 'localeId'
+  Prelude.Text ->
+  -- | 'botRecommendationId'
+  Prelude.Text ->
+  StopBotRecommendation
+newStopBotRecommendation
+  pBotId_
+  pBotVersion_
+  pLocaleId_
+  pBotRecommendationId_ =
+    StopBotRecommendation'
+      { botId = pBotId_,
+        botVersion = pBotVersion_,
+        localeId = pLocaleId_,
+        botRecommendationId = pBotRecommendationId_
+      }
+
+-- | The unique identifier of the bot containing the bot recommendation to be
+-- stopped.
+stopBotRecommendation_botId :: Lens.Lens' StopBotRecommendation Prelude.Text
+stopBotRecommendation_botId = Lens.lens (\StopBotRecommendation' {botId} -> botId) (\s@StopBotRecommendation' {} a -> s {botId = a} :: StopBotRecommendation)
+
+-- | The version of the bot containing the bot recommendation.
+stopBotRecommendation_botVersion :: Lens.Lens' StopBotRecommendation Prelude.Text
+stopBotRecommendation_botVersion = Lens.lens (\StopBotRecommendation' {botVersion} -> botVersion) (\s@StopBotRecommendation' {} a -> s {botVersion = a} :: StopBotRecommendation)
+
+-- | The identifier of the language and locale of the bot recommendation to
+-- stop. The string must match one of the supported locales. For more
+-- information, see
+-- <https://docs.aws.amazon.com/lexv2/latest/dg/how-languages.html Supported languages>
+stopBotRecommendation_localeId :: Lens.Lens' StopBotRecommendation Prelude.Text
+stopBotRecommendation_localeId = Lens.lens (\StopBotRecommendation' {localeId} -> localeId) (\s@StopBotRecommendation' {} a -> s {localeId = a} :: StopBotRecommendation)
+
+-- | The unique identifier of the bot recommendation to be stopped.
+stopBotRecommendation_botRecommendationId :: Lens.Lens' StopBotRecommendation Prelude.Text
+stopBotRecommendation_botRecommendationId = Lens.lens (\StopBotRecommendation' {botRecommendationId} -> botRecommendationId) (\s@StopBotRecommendation' {} a -> s {botRecommendationId = a} :: StopBotRecommendation)
+
+instance Core.AWSRequest StopBotRecommendation where
+  type
+    AWSResponse StopBotRecommendation =
+      StopBotRecommendationResponse
+  request overrides =
+    Request.putJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          StopBotRecommendationResponse'
+            Prelude.<$> (x Data..?> "botId")
+            Prelude.<*> (x Data..?> "botRecommendationId")
+            Prelude.<*> (x Data..?> "botRecommendationStatus")
+            Prelude.<*> (x Data..?> "botVersion")
+            Prelude.<*> (x Data..?> "localeId")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable StopBotRecommendation where
+  hashWithSalt _salt StopBotRecommendation' {..} =
+    _salt
+      `Prelude.hashWithSalt` botId
+      `Prelude.hashWithSalt` botVersion
+      `Prelude.hashWithSalt` localeId
+      `Prelude.hashWithSalt` botRecommendationId
+
+instance Prelude.NFData StopBotRecommendation where
+  rnf StopBotRecommendation' {..} =
+    Prelude.rnf botId
+      `Prelude.seq` Prelude.rnf botVersion
+      `Prelude.seq` Prelude.rnf localeId
+      `Prelude.seq` Prelude.rnf botRecommendationId
+
+instance Data.ToHeaders StopBotRecommendation where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON StopBotRecommendation where
+  toJSON = Prelude.const (Data.Object Prelude.mempty)
+
+instance Data.ToPath StopBotRecommendation where
+  toPath StopBotRecommendation' {..} =
+    Prelude.mconcat
+      [ "/bots/",
+        Data.toBS botId,
+        "/botversions/",
+        Data.toBS botVersion,
+        "/botlocales/",
+        Data.toBS localeId,
+        "/botrecommendations/",
+        Data.toBS botRecommendationId,
+        "/stopbotrecommendation"
+      ]
+
+instance Data.ToQuery StopBotRecommendation where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newStopBotRecommendationResponse' smart constructor.
+data StopBotRecommendationResponse = StopBotRecommendationResponse'
+  { -- | The unique identifier of the bot containing the bot recommendation that
+    -- is being stopped.
+    botId :: Prelude.Maybe Prelude.Text,
+    -- | The unique identifier of the bot recommendation that is being stopped.
+    botRecommendationId :: Prelude.Maybe Prelude.Text,
+    -- | The status of the bot recommendation. If the status is Failed, then the
+    -- reasons for the failure are listed in the failureReasons field.
+    botRecommendationStatus :: Prelude.Maybe BotRecommendationStatus,
+    -- | The version of the bot containing the recommendation that is being
+    -- stopped.
+    botVersion :: Prelude.Maybe Prelude.Text,
+    -- | The identifier of the language and locale of the bot response to stop.
+    -- The string must match one of the supported locales. For more
+    -- information, see
+    -- <https://docs.aws.amazon.com/lexv2/latest/dg/how-languages.html Supported languages>
+    localeId :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StopBotRecommendationResponse' 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:
+--
+-- 'botId', 'stopBotRecommendationResponse_botId' - The unique identifier of the bot containing the bot recommendation that
+-- is being stopped.
+--
+-- 'botRecommendationId', 'stopBotRecommendationResponse_botRecommendationId' - The unique identifier of the bot recommendation that is being stopped.
+--
+-- 'botRecommendationStatus', 'stopBotRecommendationResponse_botRecommendationStatus' - The status of the bot recommendation. If the status is Failed, then the
+-- reasons for the failure are listed in the failureReasons field.
+--
+-- 'botVersion', 'stopBotRecommendationResponse_botVersion' - The version of the bot containing the recommendation that is being
+-- stopped.
+--
+-- 'localeId', 'stopBotRecommendationResponse_localeId' - The identifier of the language and locale of the bot response to stop.
+-- The string must match one of the supported locales. For more
+-- information, see
+-- <https://docs.aws.amazon.com/lexv2/latest/dg/how-languages.html Supported languages>
+--
+-- 'httpStatus', 'stopBotRecommendationResponse_httpStatus' - The response's http status code.
+newStopBotRecommendationResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  StopBotRecommendationResponse
+newStopBotRecommendationResponse pHttpStatus_ =
+  StopBotRecommendationResponse'
+    { botId =
+        Prelude.Nothing,
+      botRecommendationId = Prelude.Nothing,
+      botRecommendationStatus = Prelude.Nothing,
+      botVersion = Prelude.Nothing,
+      localeId = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The unique identifier of the bot containing the bot recommendation that
+-- is being stopped.
+stopBotRecommendationResponse_botId :: Lens.Lens' StopBotRecommendationResponse (Prelude.Maybe Prelude.Text)
+stopBotRecommendationResponse_botId = Lens.lens (\StopBotRecommendationResponse' {botId} -> botId) (\s@StopBotRecommendationResponse' {} a -> s {botId = a} :: StopBotRecommendationResponse)
+
+-- | The unique identifier of the bot recommendation that is being stopped.
+stopBotRecommendationResponse_botRecommendationId :: Lens.Lens' StopBotRecommendationResponse (Prelude.Maybe Prelude.Text)
+stopBotRecommendationResponse_botRecommendationId = Lens.lens (\StopBotRecommendationResponse' {botRecommendationId} -> botRecommendationId) (\s@StopBotRecommendationResponse' {} a -> s {botRecommendationId = a} :: StopBotRecommendationResponse)
+
+-- | The status of the bot recommendation. If the status is Failed, then the
+-- reasons for the failure are listed in the failureReasons field.
+stopBotRecommendationResponse_botRecommendationStatus :: Lens.Lens' StopBotRecommendationResponse (Prelude.Maybe BotRecommendationStatus)
+stopBotRecommendationResponse_botRecommendationStatus = Lens.lens (\StopBotRecommendationResponse' {botRecommendationStatus} -> botRecommendationStatus) (\s@StopBotRecommendationResponse' {} a -> s {botRecommendationStatus = a} :: StopBotRecommendationResponse)
+
+-- | The version of the bot containing the recommendation that is being
+-- stopped.
+stopBotRecommendationResponse_botVersion :: Lens.Lens' StopBotRecommendationResponse (Prelude.Maybe Prelude.Text)
+stopBotRecommendationResponse_botVersion = Lens.lens (\StopBotRecommendationResponse' {botVersion} -> botVersion) (\s@StopBotRecommendationResponse' {} a -> s {botVersion = a} :: StopBotRecommendationResponse)
+
+-- | The identifier of the language and locale of the bot response to stop.
+-- The string must match one of the supported locales. For more
+-- information, see
+-- <https://docs.aws.amazon.com/lexv2/latest/dg/how-languages.html Supported languages>
+stopBotRecommendationResponse_localeId :: Lens.Lens' StopBotRecommendationResponse (Prelude.Maybe Prelude.Text)
+stopBotRecommendationResponse_localeId = Lens.lens (\StopBotRecommendationResponse' {localeId} -> localeId) (\s@StopBotRecommendationResponse' {} a -> s {localeId = a} :: StopBotRecommendationResponse)
+
+-- | The response's http status code.
+stopBotRecommendationResponse_httpStatus :: Lens.Lens' StopBotRecommendationResponse Prelude.Int
+stopBotRecommendationResponse_httpStatus = Lens.lens (\StopBotRecommendationResponse' {httpStatus} -> httpStatus) (\s@StopBotRecommendationResponse' {} a -> s {httpStatus = a} :: StopBotRecommendationResponse)
+
+instance Prelude.NFData StopBotRecommendationResponse where
+  rnf StopBotRecommendationResponse' {..} =
+    Prelude.rnf botId
+      `Prelude.seq` Prelude.rnf botRecommendationId
+      `Prelude.seq` Prelude.rnf botRecommendationStatus
+      `Prelude.seq` Prelude.rnf botVersion
+      `Prelude.seq` Prelude.rnf localeId
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/LexV2Models/TagResource.hs b/gen/Amazonka/LexV2Models/TagResource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/TagResource.hs
@@ -0,0 +1,170 @@
+{-# 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.LexV2Models.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)
+--
+-- Adds the specified tags to the specified resource. If a tag key already
+-- exists, the existing value is replaced with the new value.
+module Amazonka.LexV2Models.TagResource
+  ( -- * Creating a Request
+    TagResource (..),
+    newTagResource,
+
+    -- * Request Lenses
+    tagResource_resourceARN,
+    tagResource_tags,
+
+    -- * Destructuring the Response
+    TagResourceResponse (..),
+    newTagResourceResponse,
+
+    -- * Response Lenses
+    tagResourceResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LexV2Models.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newTagResource' smart constructor.
+data TagResource = TagResource'
+  { -- | The Amazon Resource Name (ARN) of the bot, bot alias, or bot channel to
+    -- tag.
+    resourceARN :: Prelude.Text,
+    -- | A list of tag keys to add to the resource. If a tag key already exists,
+    -- the existing value is replaced with the new value.
+    tags :: Prelude.HashMap Prelude.Text Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TagResource' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'resourceARN', 'tagResource_resourceARN' - The Amazon Resource Name (ARN) of the bot, bot alias, or bot channel to
+-- tag.
+--
+-- 'tags', 'tagResource_tags' - A list of tag keys to add to the resource. If a tag key already exists,
+-- the existing value is replaced with the new value.
+newTagResource ::
+  -- | 'resourceARN'
+  Prelude.Text ->
+  TagResource
+newTagResource pResourceARN_ =
+  TagResource'
+    { resourceARN = pResourceARN_,
+      tags = Prelude.mempty
+    }
+
+-- | The Amazon Resource Name (ARN) of the bot, bot alias, or bot channel to
+-- tag.
+tagResource_resourceARN :: Lens.Lens' TagResource Prelude.Text
+tagResource_resourceARN = Lens.lens (\TagResource' {resourceARN} -> resourceARN) (\s@TagResource' {} a -> s {resourceARN = a} :: TagResource)
+
+-- | A list of tag keys to add to the resource. If a tag key already exists,
+-- the existing value is replaced with the new value.
+tagResource_tags :: Lens.Lens' TagResource (Prelude.HashMap Prelude.Text Prelude.Text)
+tagResource_tags = Lens.lens (\TagResource' {tags} -> tags) (\s@TagResource' {} a -> s {tags = a} :: TagResource) Prelude.. Lens.coerced
+
+instance Core.AWSRequest TagResource where
+  type AWSResponse TagResource = TagResourceResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          TagResourceResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable TagResource where
+  hashWithSalt _salt TagResource' {..} =
+    _salt
+      `Prelude.hashWithSalt` resourceARN
+      `Prelude.hashWithSalt` tags
+
+instance Prelude.NFData TagResource where
+  rnf TagResource' {..} =
+    Prelude.rnf resourceARN
+      `Prelude.seq` Prelude.rnf tags
+
+instance Data.ToHeaders TagResource where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON TagResource where
+  toJSON TagResource' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("tags" Data..= tags)]
+      )
+
+instance Data.ToPath TagResource where
+  toPath TagResource' {..} =
+    Prelude.mconcat ["/tags/", Data.toBS resourceARN]
+
+instance Data.ToQuery TagResource where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newTagResourceResponse' smart constructor.
+data TagResourceResponse = TagResourceResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TagResourceResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'tagResourceResponse_httpStatus' - The response's http status code.
+newTagResourceResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  TagResourceResponse
+newTagResourceResponse pHttpStatus_ =
+  TagResourceResponse' {httpStatus = pHttpStatus_}
+
+-- | The response's http status code.
+tagResourceResponse_httpStatus :: Lens.Lens' TagResourceResponse Prelude.Int
+tagResourceResponse_httpStatus = Lens.lens (\TagResourceResponse' {httpStatus} -> httpStatus) (\s@TagResourceResponse' {} a -> s {httpStatus = a} :: TagResourceResponse)
+
+instance Prelude.NFData TagResourceResponse where
+  rnf TagResourceResponse' {..} = Prelude.rnf httpStatus
diff --git a/gen/Amazonka/LexV2Models/Types.hs b/gen/Amazonka/LexV2Models/Types.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/Types.hs
@@ -0,0 +1,1473 @@
+{-# 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.LexV2Models.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.LexV2Models.Types
+  ( -- * Service Configuration
+    defaultService,
+
+    -- * Errors
+    _ConflictException,
+    _InternalServerException,
+    _PreconditionFailedException,
+    _ResourceNotFoundException,
+    _ServiceQuotaExceededException,
+    _ThrottlingException,
+    _ValidationException,
+
+    -- * AggregatedUtterancesFilterName
+    AggregatedUtterancesFilterName (..),
+
+    -- * AggregatedUtterancesFilterOperator
+    AggregatedUtterancesFilterOperator (..),
+
+    -- * AggregatedUtterancesSortAttribute
+    AggregatedUtterancesSortAttribute (..),
+
+    -- * AssociatedTranscriptFilterName
+    AssociatedTranscriptFilterName (..),
+
+    -- * AudioRecognitionStrategy
+    AudioRecognitionStrategy (..),
+
+    -- * BotAliasStatus
+    BotAliasStatus (..),
+
+    -- * BotFilterName
+    BotFilterName (..),
+
+    -- * BotFilterOperator
+    BotFilterOperator (..),
+
+    -- * BotLocaleFilterName
+    BotLocaleFilterName (..),
+
+    -- * BotLocaleFilterOperator
+    BotLocaleFilterOperator (..),
+
+    -- * BotLocaleSortAttribute
+    BotLocaleSortAttribute (..),
+
+    -- * BotLocaleStatus
+    BotLocaleStatus (..),
+
+    -- * BotRecommendationStatus
+    BotRecommendationStatus (..),
+
+    -- * BotSortAttribute
+    BotSortAttribute (..),
+
+    -- * BotStatus
+    BotStatus (..),
+
+    -- * BotVersionSortAttribute
+    BotVersionSortAttribute (..),
+
+    -- * BuiltInIntentSortAttribute
+    BuiltInIntentSortAttribute (..),
+
+    -- * BuiltInSlotTypeSortAttribute
+    BuiltInSlotTypeSortAttribute (..),
+
+    -- * CustomVocabularyStatus
+    CustomVocabularyStatus (..),
+
+    -- * DialogActionType
+    DialogActionType (..),
+
+    -- * Effect
+    Effect (..),
+
+    -- * ErrorCode
+    ErrorCode (..),
+
+    -- * ExportFilterName
+    ExportFilterName (..),
+
+    -- * ExportFilterOperator
+    ExportFilterOperator (..),
+
+    -- * ExportSortAttribute
+    ExportSortAttribute (..),
+
+    -- * ExportStatus
+    ExportStatus (..),
+
+    -- * ImportExportFileFormat
+    ImportExportFileFormat (..),
+
+    -- * ImportFilterName
+    ImportFilterName (..),
+
+    -- * ImportFilterOperator
+    ImportFilterOperator (..),
+
+    -- * ImportResourceType
+    ImportResourceType (..),
+
+    -- * ImportSortAttribute
+    ImportSortAttribute (..),
+
+    -- * ImportStatus
+    ImportStatus (..),
+
+    -- * IntentFilterName
+    IntentFilterName (..),
+
+    -- * IntentFilterOperator
+    IntentFilterOperator (..),
+
+    -- * IntentSortAttribute
+    IntentSortAttribute (..),
+
+    -- * MergeStrategy
+    MergeStrategy (..),
+
+    -- * MessageSelectionStrategy
+    MessageSelectionStrategy (..),
+
+    -- * ObfuscationSettingType
+    ObfuscationSettingType (..),
+
+    -- * PromptAttempt
+    PromptAttempt (..),
+
+    -- * SearchOrder
+    SearchOrder (..),
+
+    -- * SlotConstraint
+    SlotConstraint (..),
+
+    -- * SlotFilterName
+    SlotFilterName (..),
+
+    -- * SlotFilterOperator
+    SlotFilterOperator (..),
+
+    -- * SlotShape
+    SlotShape (..),
+
+    -- * SlotSortAttribute
+    SlotSortAttribute (..),
+
+    -- * SlotTypeCategory
+    SlotTypeCategory (..),
+
+    -- * SlotTypeFilterName
+    SlotTypeFilterName (..),
+
+    -- * SlotTypeFilterOperator
+    SlotTypeFilterOperator (..),
+
+    -- * SlotTypeSortAttribute
+    SlotTypeSortAttribute (..),
+
+    -- * SlotValueResolutionStrategy
+    SlotValueResolutionStrategy (..),
+
+    -- * SortOrder
+    SortOrder (..),
+
+    -- * TimeDimension
+    TimeDimension (..),
+
+    -- * TranscriptFormat
+    TranscriptFormat (..),
+
+    -- * VoiceEngine
+    VoiceEngine (..),
+
+    -- * AdvancedRecognitionSetting
+    AdvancedRecognitionSetting (..),
+    newAdvancedRecognitionSetting,
+    advancedRecognitionSetting_audioRecognitionStrategy,
+
+    -- * AggregatedUtterancesFilter
+    AggregatedUtterancesFilter (..),
+    newAggregatedUtterancesFilter,
+    aggregatedUtterancesFilter_name,
+    aggregatedUtterancesFilter_values,
+    aggregatedUtterancesFilter_operator,
+
+    -- * AggregatedUtterancesSortBy
+    AggregatedUtterancesSortBy (..),
+    newAggregatedUtterancesSortBy,
+    aggregatedUtterancesSortBy_attribute,
+    aggregatedUtterancesSortBy_order,
+
+    -- * AggregatedUtterancesSummary
+    AggregatedUtterancesSummary (..),
+    newAggregatedUtterancesSummary,
+    aggregatedUtterancesSummary_containsDataFromDeletedResources,
+    aggregatedUtterancesSummary_hitCount,
+    aggregatedUtterancesSummary_missedCount,
+    aggregatedUtterancesSummary_utterance,
+    aggregatedUtterancesSummary_utteranceFirstRecordedInAggregationDuration,
+    aggregatedUtterancesSummary_utteranceLastRecordedInAggregationDuration,
+
+    -- * AllowedInputTypes
+    AllowedInputTypes (..),
+    newAllowedInputTypes,
+    allowedInputTypes_allowAudioInput,
+    allowedInputTypes_allowDTMFInput,
+
+    -- * AssociatedTranscript
+    AssociatedTranscript (..),
+    newAssociatedTranscript,
+    associatedTranscript_transcript,
+
+    -- * AssociatedTranscriptFilter
+    AssociatedTranscriptFilter (..),
+    newAssociatedTranscriptFilter,
+    associatedTranscriptFilter_name,
+    associatedTranscriptFilter_values,
+
+    -- * AudioAndDTMFInputSpecification
+    AudioAndDTMFInputSpecification (..),
+    newAudioAndDTMFInputSpecification,
+    audioAndDTMFInputSpecification_audioSpecification,
+    audioAndDTMFInputSpecification_dtmfSpecification,
+    audioAndDTMFInputSpecification_startTimeoutMs,
+
+    -- * AudioLogDestination
+    AudioLogDestination (..),
+    newAudioLogDestination,
+    audioLogDestination_s3Bucket,
+
+    -- * AudioLogSetting
+    AudioLogSetting (..),
+    newAudioLogSetting,
+    audioLogSetting_enabled,
+    audioLogSetting_destination,
+
+    -- * AudioSpecification
+    AudioSpecification (..),
+    newAudioSpecification,
+    audioSpecification_maxLengthMs,
+    audioSpecification_endTimeoutMs,
+
+    -- * BotAliasHistoryEvent
+    BotAliasHistoryEvent (..),
+    newBotAliasHistoryEvent,
+    botAliasHistoryEvent_botVersion,
+    botAliasHistoryEvent_endDate,
+    botAliasHistoryEvent_startDate,
+
+    -- * BotAliasLocaleSettings
+    BotAliasLocaleSettings (..),
+    newBotAliasLocaleSettings,
+    botAliasLocaleSettings_codeHookSpecification,
+    botAliasLocaleSettings_enabled,
+
+    -- * BotAliasSummary
+    BotAliasSummary (..),
+    newBotAliasSummary,
+    botAliasSummary_botAliasId,
+    botAliasSummary_botAliasName,
+    botAliasSummary_botAliasStatus,
+    botAliasSummary_botVersion,
+    botAliasSummary_creationDateTime,
+    botAliasSummary_description,
+    botAliasSummary_lastUpdatedDateTime,
+
+    -- * BotExportSpecification
+    BotExportSpecification (..),
+    newBotExportSpecification,
+    botExportSpecification_botId,
+    botExportSpecification_botVersion,
+
+    -- * BotFilter
+    BotFilter (..),
+    newBotFilter,
+    botFilter_name,
+    botFilter_values,
+    botFilter_operator,
+
+    -- * BotImportSpecification
+    BotImportSpecification (..),
+    newBotImportSpecification,
+    botImportSpecification_botTags,
+    botImportSpecification_idleSessionTTLInSeconds,
+    botImportSpecification_testBotAliasTags,
+    botImportSpecification_botName,
+    botImportSpecification_roleArn,
+    botImportSpecification_dataPrivacy,
+
+    -- * BotLocaleExportSpecification
+    BotLocaleExportSpecification (..),
+    newBotLocaleExportSpecification,
+    botLocaleExportSpecification_botId,
+    botLocaleExportSpecification_botVersion,
+    botLocaleExportSpecification_localeId,
+
+    -- * BotLocaleFilter
+    BotLocaleFilter (..),
+    newBotLocaleFilter,
+    botLocaleFilter_name,
+    botLocaleFilter_values,
+    botLocaleFilter_operator,
+
+    -- * BotLocaleHistoryEvent
+    BotLocaleHistoryEvent (..),
+    newBotLocaleHistoryEvent,
+    botLocaleHistoryEvent_event,
+    botLocaleHistoryEvent_eventDate,
+
+    -- * BotLocaleImportSpecification
+    BotLocaleImportSpecification (..),
+    newBotLocaleImportSpecification,
+    botLocaleImportSpecification_nluIntentConfidenceThreshold,
+    botLocaleImportSpecification_voiceSettings,
+    botLocaleImportSpecification_botId,
+    botLocaleImportSpecification_botVersion,
+    botLocaleImportSpecification_localeId,
+
+    -- * BotLocaleSortBy
+    BotLocaleSortBy (..),
+    newBotLocaleSortBy,
+    botLocaleSortBy_attribute,
+    botLocaleSortBy_order,
+
+    -- * BotLocaleSummary
+    BotLocaleSummary (..),
+    newBotLocaleSummary,
+    botLocaleSummary_botLocaleStatus,
+    botLocaleSummary_description,
+    botLocaleSummary_lastBuildSubmittedDateTime,
+    botLocaleSummary_lastUpdatedDateTime,
+    botLocaleSummary_localeId,
+    botLocaleSummary_localeName,
+
+    -- * BotRecommendationResultStatistics
+    BotRecommendationResultStatistics (..),
+    newBotRecommendationResultStatistics,
+    botRecommendationResultStatistics_intents,
+    botRecommendationResultStatistics_slotTypes,
+
+    -- * BotRecommendationResults
+    BotRecommendationResults (..),
+    newBotRecommendationResults,
+    botRecommendationResults_associatedTranscriptsUrl,
+    botRecommendationResults_botLocaleExportUrl,
+    botRecommendationResults_statistics,
+
+    -- * BotRecommendationSummary
+    BotRecommendationSummary (..),
+    newBotRecommendationSummary,
+    botRecommendationSummary_creationDateTime,
+    botRecommendationSummary_lastUpdatedDateTime,
+    botRecommendationSummary_botRecommendationStatus,
+    botRecommendationSummary_botRecommendationId,
+
+    -- * BotSortBy
+    BotSortBy (..),
+    newBotSortBy,
+    botSortBy_attribute,
+    botSortBy_order,
+
+    -- * BotSummary
+    BotSummary (..),
+    newBotSummary,
+    botSummary_botId,
+    botSummary_botName,
+    botSummary_botStatus,
+    botSummary_description,
+    botSummary_lastUpdatedDateTime,
+    botSummary_latestBotVersion,
+
+    -- * BotVersionLocaleDetails
+    BotVersionLocaleDetails (..),
+    newBotVersionLocaleDetails,
+    botVersionLocaleDetails_sourceBotVersion,
+
+    -- * BotVersionSortBy
+    BotVersionSortBy (..),
+    newBotVersionSortBy,
+    botVersionSortBy_attribute,
+    botVersionSortBy_order,
+
+    -- * BotVersionSummary
+    BotVersionSummary (..),
+    newBotVersionSummary,
+    botVersionSummary_botName,
+    botVersionSummary_botStatus,
+    botVersionSummary_botVersion,
+    botVersionSummary_creationDateTime,
+    botVersionSummary_description,
+
+    -- * BuiltInIntentSortBy
+    BuiltInIntentSortBy (..),
+    newBuiltInIntentSortBy,
+    builtInIntentSortBy_attribute,
+    builtInIntentSortBy_order,
+
+    -- * BuiltInIntentSummary
+    BuiltInIntentSummary (..),
+    newBuiltInIntentSummary,
+    builtInIntentSummary_description,
+    builtInIntentSummary_intentSignature,
+
+    -- * BuiltInSlotTypeSortBy
+    BuiltInSlotTypeSortBy (..),
+    newBuiltInSlotTypeSortBy,
+    builtInSlotTypeSortBy_attribute,
+    builtInSlotTypeSortBy_order,
+
+    -- * BuiltInSlotTypeSummary
+    BuiltInSlotTypeSummary (..),
+    newBuiltInSlotTypeSummary,
+    builtInSlotTypeSummary_description,
+    builtInSlotTypeSummary_slotTypeSignature,
+
+    -- * Button
+    Button (..),
+    newButton,
+    button_text,
+    button_value,
+
+    -- * CloudWatchLogGroupLogDestination
+    CloudWatchLogGroupLogDestination (..),
+    newCloudWatchLogGroupLogDestination,
+    cloudWatchLogGroupLogDestination_cloudWatchLogGroupArn,
+    cloudWatchLogGroupLogDestination_logPrefix,
+
+    -- * CodeHookSpecification
+    CodeHookSpecification (..),
+    newCodeHookSpecification,
+    codeHookSpecification_lambdaCodeHook,
+
+    -- * CompositeSlotTypeSetting
+    CompositeSlotTypeSetting (..),
+    newCompositeSlotTypeSetting,
+    compositeSlotTypeSetting_subSlots,
+
+    -- * Condition
+    Condition (..),
+    newCondition,
+    condition_expressionString,
+
+    -- * ConditionalBranch
+    ConditionalBranch (..),
+    newConditionalBranch,
+    conditionalBranch_response,
+    conditionalBranch_name,
+    conditionalBranch_condition,
+    conditionalBranch_nextStep,
+
+    -- * ConditionalSpecification
+    ConditionalSpecification (..),
+    newConditionalSpecification,
+    conditionalSpecification_active,
+    conditionalSpecification_conditionalBranches,
+    conditionalSpecification_defaultBranch,
+
+    -- * ConversationLogSettings
+    ConversationLogSettings (..),
+    newConversationLogSettings,
+    conversationLogSettings_audioLogSettings,
+    conversationLogSettings_textLogSettings,
+
+    -- * CustomPayload
+    CustomPayload (..),
+    newCustomPayload,
+    customPayload_value,
+
+    -- * CustomVocabularyEntryId
+    CustomVocabularyEntryId (..),
+    newCustomVocabularyEntryId,
+    customVocabularyEntryId_itemId,
+
+    -- * CustomVocabularyExportSpecification
+    CustomVocabularyExportSpecification (..),
+    newCustomVocabularyExportSpecification,
+    customVocabularyExportSpecification_botId,
+    customVocabularyExportSpecification_botVersion,
+    customVocabularyExportSpecification_localeId,
+
+    -- * CustomVocabularyImportSpecification
+    CustomVocabularyImportSpecification (..),
+    newCustomVocabularyImportSpecification,
+    customVocabularyImportSpecification_botId,
+    customVocabularyImportSpecification_botVersion,
+    customVocabularyImportSpecification_localeId,
+
+    -- * CustomVocabularyItem
+    CustomVocabularyItem (..),
+    newCustomVocabularyItem,
+    customVocabularyItem_displayAs,
+    customVocabularyItem_weight,
+    customVocabularyItem_itemId,
+    customVocabularyItem_phrase,
+
+    -- * DTMFSpecification
+    DTMFSpecification (..),
+    newDTMFSpecification,
+    dTMFSpecification_maxLength,
+    dTMFSpecification_endTimeoutMs,
+    dTMFSpecification_deletionCharacter,
+    dTMFSpecification_endCharacter,
+
+    -- * DataPrivacy
+    DataPrivacy (..),
+    newDataPrivacy,
+    dataPrivacy_childDirected,
+
+    -- * DateRangeFilter
+    DateRangeFilter (..),
+    newDateRangeFilter,
+    dateRangeFilter_startDateTime,
+    dateRangeFilter_endDateTime,
+
+    -- * DefaultConditionalBranch
+    DefaultConditionalBranch (..),
+    newDefaultConditionalBranch,
+    defaultConditionalBranch_nextStep,
+    defaultConditionalBranch_response,
+
+    -- * DialogAction
+    DialogAction (..),
+    newDialogAction,
+    dialogAction_slotToElicit,
+    dialogAction_suppressNextMessage,
+    dialogAction_type,
+
+    -- * DialogCodeHookInvocationSetting
+    DialogCodeHookInvocationSetting (..),
+    newDialogCodeHookInvocationSetting,
+    dialogCodeHookInvocationSetting_invocationLabel,
+    dialogCodeHookInvocationSetting_enableCodeHookInvocation,
+    dialogCodeHookInvocationSetting_active,
+    dialogCodeHookInvocationSetting_postCodeHookSpecification,
+
+    -- * DialogCodeHookSettings
+    DialogCodeHookSettings (..),
+    newDialogCodeHookSettings,
+    dialogCodeHookSettings_enabled,
+
+    -- * DialogState
+    DialogState (..),
+    newDialogState,
+    dialogState_dialogAction,
+    dialogState_intent,
+    dialogState_sessionAttributes,
+
+    -- * ElicitationCodeHookInvocationSetting
+    ElicitationCodeHookInvocationSetting (..),
+    newElicitationCodeHookInvocationSetting,
+    elicitationCodeHookInvocationSetting_invocationLabel,
+    elicitationCodeHookInvocationSetting_enableCodeHookInvocation,
+
+    -- * EncryptionSetting
+    EncryptionSetting (..),
+    newEncryptionSetting,
+    encryptionSetting_associatedTranscriptsPassword,
+    encryptionSetting_botLocaleExportPassword,
+    encryptionSetting_kmsKeyArn,
+
+    -- * ExportFilter
+    ExportFilter (..),
+    newExportFilter,
+    exportFilter_name,
+    exportFilter_values,
+    exportFilter_operator,
+
+    -- * ExportResourceSpecification
+    ExportResourceSpecification (..),
+    newExportResourceSpecification,
+    exportResourceSpecification_botExportSpecification,
+    exportResourceSpecification_botLocaleExportSpecification,
+    exportResourceSpecification_customVocabularyExportSpecification,
+
+    -- * ExportSortBy
+    ExportSortBy (..),
+    newExportSortBy,
+    exportSortBy_attribute,
+    exportSortBy_order,
+
+    -- * ExportSummary
+    ExportSummary (..),
+    newExportSummary,
+    exportSummary_creationDateTime,
+    exportSummary_exportId,
+    exportSummary_exportStatus,
+    exportSummary_fileFormat,
+    exportSummary_lastUpdatedDateTime,
+    exportSummary_resourceSpecification,
+
+    -- * ExternalSourceSetting
+    ExternalSourceSetting (..),
+    newExternalSourceSetting,
+    externalSourceSetting_grammarSlotTypeSetting,
+
+    -- * FailedCustomVocabularyItem
+    FailedCustomVocabularyItem (..),
+    newFailedCustomVocabularyItem,
+    failedCustomVocabularyItem_errorCode,
+    failedCustomVocabularyItem_errorMessage,
+    failedCustomVocabularyItem_itemId,
+
+    -- * FulfillmentCodeHookSettings
+    FulfillmentCodeHookSettings (..),
+    newFulfillmentCodeHookSettings,
+    fulfillmentCodeHookSettings_active,
+    fulfillmentCodeHookSettings_fulfillmentUpdatesSpecification,
+    fulfillmentCodeHookSettings_postFulfillmentStatusSpecification,
+    fulfillmentCodeHookSettings_enabled,
+
+    -- * FulfillmentStartResponseSpecification
+    FulfillmentStartResponseSpecification (..),
+    newFulfillmentStartResponseSpecification,
+    fulfillmentStartResponseSpecification_allowInterrupt,
+    fulfillmentStartResponseSpecification_delayInSeconds,
+    fulfillmentStartResponseSpecification_messageGroups,
+
+    -- * FulfillmentUpdateResponseSpecification
+    FulfillmentUpdateResponseSpecification (..),
+    newFulfillmentUpdateResponseSpecification,
+    fulfillmentUpdateResponseSpecification_allowInterrupt,
+    fulfillmentUpdateResponseSpecification_frequencyInSeconds,
+    fulfillmentUpdateResponseSpecification_messageGroups,
+
+    -- * FulfillmentUpdatesSpecification
+    FulfillmentUpdatesSpecification (..),
+    newFulfillmentUpdatesSpecification,
+    fulfillmentUpdatesSpecification_startResponse,
+    fulfillmentUpdatesSpecification_timeoutInSeconds,
+    fulfillmentUpdatesSpecification_updateResponse,
+    fulfillmentUpdatesSpecification_active,
+
+    -- * GrammarSlotTypeSetting
+    GrammarSlotTypeSetting (..),
+    newGrammarSlotTypeSetting,
+    grammarSlotTypeSetting_source,
+
+    -- * GrammarSlotTypeSource
+    GrammarSlotTypeSource (..),
+    newGrammarSlotTypeSource,
+    grammarSlotTypeSource_kmsKeyArn,
+    grammarSlotTypeSource_s3BucketName,
+    grammarSlotTypeSource_s3ObjectKey,
+
+    -- * ImageResponseCard
+    ImageResponseCard (..),
+    newImageResponseCard,
+    imageResponseCard_buttons,
+    imageResponseCard_imageUrl,
+    imageResponseCard_subtitle,
+    imageResponseCard_title,
+
+    -- * ImportFilter
+    ImportFilter (..),
+    newImportFilter,
+    importFilter_name,
+    importFilter_values,
+    importFilter_operator,
+
+    -- * ImportResourceSpecification
+    ImportResourceSpecification (..),
+    newImportResourceSpecification,
+    importResourceSpecification_botImportSpecification,
+    importResourceSpecification_botLocaleImportSpecification,
+    importResourceSpecification_customVocabularyImportSpecification,
+
+    -- * ImportSortBy
+    ImportSortBy (..),
+    newImportSortBy,
+    importSortBy_attribute,
+    importSortBy_order,
+
+    -- * ImportSummary
+    ImportSummary (..),
+    newImportSummary,
+    importSummary_creationDateTime,
+    importSummary_importId,
+    importSummary_importStatus,
+    importSummary_importedResourceId,
+    importSummary_importedResourceName,
+    importSummary_importedResourceType,
+    importSummary_lastUpdatedDateTime,
+    importSummary_mergeStrategy,
+
+    -- * InitialResponseSetting
+    InitialResponseSetting (..),
+    newInitialResponseSetting,
+    initialResponseSetting_codeHook,
+    initialResponseSetting_conditional,
+    initialResponseSetting_initialResponse,
+    initialResponseSetting_nextStep,
+
+    -- * InputContext
+    InputContext (..),
+    newInputContext,
+    inputContext_name,
+
+    -- * IntentClosingSetting
+    IntentClosingSetting (..),
+    newIntentClosingSetting,
+    intentClosingSetting_active,
+    intentClosingSetting_closingResponse,
+    intentClosingSetting_conditional,
+    intentClosingSetting_nextStep,
+
+    -- * IntentConfirmationSetting
+    IntentConfirmationSetting (..),
+    newIntentConfirmationSetting,
+    intentConfirmationSetting_active,
+    intentConfirmationSetting_codeHook,
+    intentConfirmationSetting_confirmationConditional,
+    intentConfirmationSetting_confirmationNextStep,
+    intentConfirmationSetting_confirmationResponse,
+    intentConfirmationSetting_declinationConditional,
+    intentConfirmationSetting_declinationNextStep,
+    intentConfirmationSetting_declinationResponse,
+    intentConfirmationSetting_elicitationCodeHook,
+    intentConfirmationSetting_failureConditional,
+    intentConfirmationSetting_failureNextStep,
+    intentConfirmationSetting_failureResponse,
+    intentConfirmationSetting_promptSpecification,
+
+    -- * IntentFilter
+    IntentFilter (..),
+    newIntentFilter,
+    intentFilter_name,
+    intentFilter_values,
+    intentFilter_operator,
+
+    -- * IntentOverride
+    IntentOverride (..),
+    newIntentOverride,
+    intentOverride_name,
+    intentOverride_slots,
+
+    -- * IntentSortBy
+    IntentSortBy (..),
+    newIntentSortBy,
+    intentSortBy_attribute,
+    intentSortBy_order,
+
+    -- * IntentStatistics
+    IntentStatistics (..),
+    newIntentStatistics,
+    intentStatistics_discoveredIntentCount,
+
+    -- * IntentSummary
+    IntentSummary (..),
+    newIntentSummary,
+    intentSummary_description,
+    intentSummary_inputContexts,
+    intentSummary_intentId,
+    intentSummary_intentName,
+    intentSummary_lastUpdatedDateTime,
+    intentSummary_outputContexts,
+    intentSummary_parentIntentSignature,
+
+    -- * KendraConfiguration
+    KendraConfiguration (..),
+    newKendraConfiguration,
+    kendraConfiguration_queryFilterString,
+    kendraConfiguration_queryFilterStringEnabled,
+    kendraConfiguration_kendraIndex,
+
+    -- * LambdaCodeHook
+    LambdaCodeHook (..),
+    newLambdaCodeHook,
+    lambdaCodeHook_lambdaARN,
+    lambdaCodeHook_codeHookInterfaceVersion,
+
+    -- * LexTranscriptFilter
+    LexTranscriptFilter (..),
+    newLexTranscriptFilter,
+    lexTranscriptFilter_dateRangeFilter,
+
+    -- * Message
+    Message (..),
+    newMessage,
+    message_customPayload,
+    message_imageResponseCard,
+    message_plainTextMessage,
+    message_ssmlMessage,
+
+    -- * MessageGroup
+    MessageGroup (..),
+    newMessageGroup,
+    messageGroup_variations,
+    messageGroup_message,
+
+    -- * MultipleValuesSetting
+    MultipleValuesSetting (..),
+    newMultipleValuesSetting,
+    multipleValuesSetting_allowMultipleValues,
+
+    -- * NewCustomVocabularyItem
+    NewCustomVocabularyItem (..),
+    newNewCustomVocabularyItem,
+    newCustomVocabularyItem_displayAs,
+    newCustomVocabularyItem_weight,
+    newCustomVocabularyItem_phrase,
+
+    -- * ObfuscationSetting
+    ObfuscationSetting (..),
+    newObfuscationSetting,
+    obfuscationSetting_obfuscationSettingType,
+
+    -- * OutputContext
+    OutputContext (..),
+    newOutputContext,
+    outputContext_name,
+    outputContext_timeToLiveInSeconds,
+    outputContext_turnsToLive,
+
+    -- * PathFormat
+    PathFormat (..),
+    newPathFormat,
+    pathFormat_objectPrefixes,
+
+    -- * PlainTextMessage
+    PlainTextMessage (..),
+    newPlainTextMessage,
+    plainTextMessage_value,
+
+    -- * PostDialogCodeHookInvocationSpecification
+    PostDialogCodeHookInvocationSpecification (..),
+    newPostDialogCodeHookInvocationSpecification,
+    postDialogCodeHookInvocationSpecification_failureConditional,
+    postDialogCodeHookInvocationSpecification_failureNextStep,
+    postDialogCodeHookInvocationSpecification_failureResponse,
+    postDialogCodeHookInvocationSpecification_successConditional,
+    postDialogCodeHookInvocationSpecification_successNextStep,
+    postDialogCodeHookInvocationSpecification_successResponse,
+    postDialogCodeHookInvocationSpecification_timeoutConditional,
+    postDialogCodeHookInvocationSpecification_timeoutNextStep,
+    postDialogCodeHookInvocationSpecification_timeoutResponse,
+
+    -- * PostFulfillmentStatusSpecification
+    PostFulfillmentStatusSpecification (..),
+    newPostFulfillmentStatusSpecification,
+    postFulfillmentStatusSpecification_failureConditional,
+    postFulfillmentStatusSpecification_failureNextStep,
+    postFulfillmentStatusSpecification_failureResponse,
+    postFulfillmentStatusSpecification_successConditional,
+    postFulfillmentStatusSpecification_successNextStep,
+    postFulfillmentStatusSpecification_successResponse,
+    postFulfillmentStatusSpecification_timeoutConditional,
+    postFulfillmentStatusSpecification_timeoutNextStep,
+    postFulfillmentStatusSpecification_timeoutResponse,
+
+    -- * Principal
+    Principal (..),
+    newPrincipal,
+    principal_arn,
+    principal_service,
+
+    -- * PromptAttemptSpecification
+    PromptAttemptSpecification (..),
+    newPromptAttemptSpecification,
+    promptAttemptSpecification_allowInterrupt,
+    promptAttemptSpecification_audioAndDTMFInputSpecification,
+    promptAttemptSpecification_textInputSpecification,
+    promptAttemptSpecification_allowedInputTypes,
+
+    -- * PromptSpecification
+    PromptSpecification (..),
+    newPromptSpecification,
+    promptSpecification_allowInterrupt,
+    promptSpecification_messageSelectionStrategy,
+    promptSpecification_promptAttemptsSpecification,
+    promptSpecification_messageGroups,
+    promptSpecification_maxRetries,
+
+    -- * RecommendedIntentSummary
+    RecommendedIntentSummary (..),
+    newRecommendedIntentSummary,
+    recommendedIntentSummary_intentId,
+    recommendedIntentSummary_intentName,
+    recommendedIntentSummary_sampleUtterancesCount,
+
+    -- * RelativeAggregationDuration
+    RelativeAggregationDuration (..),
+    newRelativeAggregationDuration,
+    relativeAggregationDuration_timeDimension,
+    relativeAggregationDuration_timeValue,
+
+    -- * ResponseSpecification
+    ResponseSpecification (..),
+    newResponseSpecification,
+    responseSpecification_allowInterrupt,
+    responseSpecification_messageGroups,
+
+    -- * S3BucketLogDestination
+    S3BucketLogDestination (..),
+    newS3BucketLogDestination,
+    s3BucketLogDestination_kmsKeyArn,
+    s3BucketLogDestination_s3BucketArn,
+    s3BucketLogDestination_logPrefix,
+
+    -- * S3BucketTranscriptSource
+    S3BucketTranscriptSource (..),
+    newS3BucketTranscriptSource,
+    s3BucketTranscriptSource_kmsKeyArn,
+    s3BucketTranscriptSource_pathFormat,
+    s3BucketTranscriptSource_transcriptFilter,
+    s3BucketTranscriptSource_s3BucketName,
+    s3BucketTranscriptSource_transcriptFormat,
+
+    -- * SSMLMessage
+    SSMLMessage (..),
+    newSSMLMessage,
+    sSMLMessage_value,
+
+    -- * SampleUtterance
+    SampleUtterance (..),
+    newSampleUtterance,
+    sampleUtterance_utterance,
+
+    -- * SampleValue
+    SampleValue (..),
+    newSampleValue,
+    sampleValue_value,
+
+    -- * SentimentAnalysisSettings
+    SentimentAnalysisSettings (..),
+    newSentimentAnalysisSettings,
+    sentimentAnalysisSettings_detectSentiment,
+
+    -- * SlotCaptureSetting
+    SlotCaptureSetting (..),
+    newSlotCaptureSetting,
+    slotCaptureSetting_captureConditional,
+    slotCaptureSetting_captureNextStep,
+    slotCaptureSetting_captureResponse,
+    slotCaptureSetting_codeHook,
+    slotCaptureSetting_elicitationCodeHook,
+    slotCaptureSetting_failureConditional,
+    slotCaptureSetting_failureNextStep,
+    slotCaptureSetting_failureResponse,
+
+    -- * SlotDefaultValue
+    SlotDefaultValue (..),
+    newSlotDefaultValue,
+    slotDefaultValue_defaultValue,
+
+    -- * SlotDefaultValueSpecification
+    SlotDefaultValueSpecification (..),
+    newSlotDefaultValueSpecification,
+    slotDefaultValueSpecification_defaultValueList,
+
+    -- * SlotFilter
+    SlotFilter (..),
+    newSlotFilter,
+    slotFilter_name,
+    slotFilter_values,
+    slotFilter_operator,
+
+    -- * SlotPriority
+    SlotPriority (..),
+    newSlotPriority,
+    slotPriority_priority,
+    slotPriority_slotId,
+
+    -- * SlotSortBy
+    SlotSortBy (..),
+    newSlotSortBy,
+    slotSortBy_attribute,
+    slotSortBy_order,
+
+    -- * SlotSummary
+    SlotSummary (..),
+    newSlotSummary,
+    slotSummary_description,
+    slotSummary_lastUpdatedDateTime,
+    slotSummary_slotConstraint,
+    slotSummary_slotId,
+    slotSummary_slotName,
+    slotSummary_slotTypeId,
+    slotSummary_valueElicitationPromptSpecification,
+
+    -- * SlotTypeFilter
+    SlotTypeFilter (..),
+    newSlotTypeFilter,
+    slotTypeFilter_name,
+    slotTypeFilter_values,
+    slotTypeFilter_operator,
+
+    -- * SlotTypeSortBy
+    SlotTypeSortBy (..),
+    newSlotTypeSortBy,
+    slotTypeSortBy_attribute,
+    slotTypeSortBy_order,
+
+    -- * SlotTypeStatistics
+    SlotTypeStatistics (..),
+    newSlotTypeStatistics,
+    slotTypeStatistics_discoveredSlotTypeCount,
+
+    -- * SlotTypeSummary
+    SlotTypeSummary (..),
+    newSlotTypeSummary,
+    slotTypeSummary_description,
+    slotTypeSummary_lastUpdatedDateTime,
+    slotTypeSummary_parentSlotTypeSignature,
+    slotTypeSummary_slotTypeCategory,
+    slotTypeSummary_slotTypeId,
+    slotTypeSummary_slotTypeName,
+
+    -- * SlotTypeValue
+    SlotTypeValue (..),
+    newSlotTypeValue,
+    slotTypeValue_sampleValue,
+    slotTypeValue_synonyms,
+
+    -- * SlotValue
+    SlotValue (..),
+    newSlotValue,
+    slotValue_interpretedValue,
+
+    -- * SlotValueElicitationSetting
+    SlotValueElicitationSetting (..),
+    newSlotValueElicitationSetting,
+    slotValueElicitationSetting_defaultValueSpecification,
+    slotValueElicitationSetting_promptSpecification,
+    slotValueElicitationSetting_sampleUtterances,
+    slotValueElicitationSetting_slotCaptureSetting,
+    slotValueElicitationSetting_waitAndContinueSpecification,
+    slotValueElicitationSetting_slotConstraint,
+
+    -- * SlotValueOverride
+    SlotValueOverride (..),
+    newSlotValueOverride,
+    slotValueOverride_shape,
+    slotValueOverride_value,
+    slotValueOverride_values,
+
+    -- * SlotValueRegexFilter
+    SlotValueRegexFilter (..),
+    newSlotValueRegexFilter,
+    slotValueRegexFilter_pattern,
+
+    -- * SlotValueSelectionSetting
+    SlotValueSelectionSetting (..),
+    newSlotValueSelectionSetting,
+    slotValueSelectionSetting_advancedRecognitionSetting,
+    slotValueSelectionSetting_regexFilter,
+    slotValueSelectionSetting_resolutionStrategy,
+
+    -- * Specifications
+    Specifications (..),
+    newSpecifications,
+    specifications_slotTypeId,
+    specifications_valueElicitationSetting,
+
+    -- * StillWaitingResponseSpecification
+    StillWaitingResponseSpecification (..),
+    newStillWaitingResponseSpecification,
+    stillWaitingResponseSpecification_allowInterrupt,
+    stillWaitingResponseSpecification_messageGroups,
+    stillWaitingResponseSpecification_frequencyInSeconds,
+    stillWaitingResponseSpecification_timeoutInSeconds,
+
+    -- * SubSlotSetting
+    SubSlotSetting (..),
+    newSubSlotSetting,
+    subSlotSetting_expression,
+    subSlotSetting_slotSpecifications,
+
+    -- * SubSlotTypeComposition
+    SubSlotTypeComposition (..),
+    newSubSlotTypeComposition,
+    subSlotTypeComposition_name,
+    subSlotTypeComposition_slotTypeId,
+
+    -- * SubSlotValueElicitationSetting
+    SubSlotValueElicitationSetting (..),
+    newSubSlotValueElicitationSetting,
+    subSlotValueElicitationSetting_defaultValueSpecification,
+    subSlotValueElicitationSetting_sampleUtterances,
+    subSlotValueElicitationSetting_waitAndContinueSpecification,
+    subSlotValueElicitationSetting_promptSpecification,
+
+    -- * TextInputSpecification
+    TextInputSpecification (..),
+    newTextInputSpecification,
+    textInputSpecification_startTimeoutMs,
+
+    -- * TextLogDestination
+    TextLogDestination (..),
+    newTextLogDestination,
+    textLogDestination_cloudWatch,
+
+    -- * TextLogSetting
+    TextLogSetting (..),
+    newTextLogSetting,
+    textLogSetting_enabled,
+    textLogSetting_destination,
+
+    -- * TranscriptFilter
+    TranscriptFilter (..),
+    newTranscriptFilter,
+    transcriptFilter_lexTranscriptFilter,
+
+    -- * TranscriptSourceSetting
+    TranscriptSourceSetting (..),
+    newTranscriptSourceSetting,
+    transcriptSourceSetting_s3BucketTranscriptSource,
+
+    -- * UtteranceAggregationDuration
+    UtteranceAggregationDuration (..),
+    newUtteranceAggregationDuration,
+    utteranceAggregationDuration_relativeAggregationDuration,
+
+    -- * VoiceSettings
+    VoiceSettings (..),
+    newVoiceSettings,
+    voiceSettings_engine,
+    voiceSettings_voiceId,
+
+    -- * WaitAndContinueSpecification
+    WaitAndContinueSpecification (..),
+    newWaitAndContinueSpecification,
+    waitAndContinueSpecification_active,
+    waitAndContinueSpecification_stillWaitingResponse,
+    waitAndContinueSpecification_waitingResponse,
+    waitAndContinueSpecification_continueResponse,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import Amazonka.LexV2Models.Types.AdvancedRecognitionSetting
+import Amazonka.LexV2Models.Types.AggregatedUtterancesFilter
+import Amazonka.LexV2Models.Types.AggregatedUtterancesFilterName
+import Amazonka.LexV2Models.Types.AggregatedUtterancesFilterOperator
+import Amazonka.LexV2Models.Types.AggregatedUtterancesSortAttribute
+import Amazonka.LexV2Models.Types.AggregatedUtterancesSortBy
+import Amazonka.LexV2Models.Types.AggregatedUtterancesSummary
+import Amazonka.LexV2Models.Types.AllowedInputTypes
+import Amazonka.LexV2Models.Types.AssociatedTranscript
+import Amazonka.LexV2Models.Types.AssociatedTranscriptFilter
+import Amazonka.LexV2Models.Types.AssociatedTranscriptFilterName
+import Amazonka.LexV2Models.Types.AudioAndDTMFInputSpecification
+import Amazonka.LexV2Models.Types.AudioLogDestination
+import Amazonka.LexV2Models.Types.AudioLogSetting
+import Amazonka.LexV2Models.Types.AudioRecognitionStrategy
+import Amazonka.LexV2Models.Types.AudioSpecification
+import Amazonka.LexV2Models.Types.BotAliasHistoryEvent
+import Amazonka.LexV2Models.Types.BotAliasLocaleSettings
+import Amazonka.LexV2Models.Types.BotAliasStatus
+import Amazonka.LexV2Models.Types.BotAliasSummary
+import Amazonka.LexV2Models.Types.BotExportSpecification
+import Amazonka.LexV2Models.Types.BotFilter
+import Amazonka.LexV2Models.Types.BotFilterName
+import Amazonka.LexV2Models.Types.BotFilterOperator
+import Amazonka.LexV2Models.Types.BotImportSpecification
+import Amazonka.LexV2Models.Types.BotLocaleExportSpecification
+import Amazonka.LexV2Models.Types.BotLocaleFilter
+import Amazonka.LexV2Models.Types.BotLocaleFilterName
+import Amazonka.LexV2Models.Types.BotLocaleFilterOperator
+import Amazonka.LexV2Models.Types.BotLocaleHistoryEvent
+import Amazonka.LexV2Models.Types.BotLocaleImportSpecification
+import Amazonka.LexV2Models.Types.BotLocaleSortAttribute
+import Amazonka.LexV2Models.Types.BotLocaleSortBy
+import Amazonka.LexV2Models.Types.BotLocaleStatus
+import Amazonka.LexV2Models.Types.BotLocaleSummary
+import Amazonka.LexV2Models.Types.BotRecommendationResultStatistics
+import Amazonka.LexV2Models.Types.BotRecommendationResults
+import Amazonka.LexV2Models.Types.BotRecommendationStatus
+import Amazonka.LexV2Models.Types.BotRecommendationSummary
+import Amazonka.LexV2Models.Types.BotSortAttribute
+import Amazonka.LexV2Models.Types.BotSortBy
+import Amazonka.LexV2Models.Types.BotStatus
+import Amazonka.LexV2Models.Types.BotSummary
+import Amazonka.LexV2Models.Types.BotVersionLocaleDetails
+import Amazonka.LexV2Models.Types.BotVersionSortAttribute
+import Amazonka.LexV2Models.Types.BotVersionSortBy
+import Amazonka.LexV2Models.Types.BotVersionSummary
+import Amazonka.LexV2Models.Types.BuiltInIntentSortAttribute
+import Amazonka.LexV2Models.Types.BuiltInIntentSortBy
+import Amazonka.LexV2Models.Types.BuiltInIntentSummary
+import Amazonka.LexV2Models.Types.BuiltInSlotTypeSortAttribute
+import Amazonka.LexV2Models.Types.BuiltInSlotTypeSortBy
+import Amazonka.LexV2Models.Types.BuiltInSlotTypeSummary
+import Amazonka.LexV2Models.Types.Button
+import Amazonka.LexV2Models.Types.CloudWatchLogGroupLogDestination
+import Amazonka.LexV2Models.Types.CodeHookSpecification
+import Amazonka.LexV2Models.Types.CompositeSlotTypeSetting
+import Amazonka.LexV2Models.Types.Condition
+import Amazonka.LexV2Models.Types.ConditionalBranch
+import Amazonka.LexV2Models.Types.ConditionalSpecification
+import Amazonka.LexV2Models.Types.ConversationLogSettings
+import Amazonka.LexV2Models.Types.CustomPayload
+import Amazonka.LexV2Models.Types.CustomVocabularyEntryId
+import Amazonka.LexV2Models.Types.CustomVocabularyExportSpecification
+import Amazonka.LexV2Models.Types.CustomVocabularyImportSpecification
+import Amazonka.LexV2Models.Types.CustomVocabularyItem
+import Amazonka.LexV2Models.Types.CustomVocabularyStatus
+import Amazonka.LexV2Models.Types.DTMFSpecification
+import Amazonka.LexV2Models.Types.DataPrivacy
+import Amazonka.LexV2Models.Types.DateRangeFilter
+import Amazonka.LexV2Models.Types.DefaultConditionalBranch
+import Amazonka.LexV2Models.Types.DialogAction
+import Amazonka.LexV2Models.Types.DialogActionType
+import Amazonka.LexV2Models.Types.DialogCodeHookInvocationSetting
+import Amazonka.LexV2Models.Types.DialogCodeHookSettings
+import Amazonka.LexV2Models.Types.DialogState
+import Amazonka.LexV2Models.Types.Effect
+import Amazonka.LexV2Models.Types.ElicitationCodeHookInvocationSetting
+import Amazonka.LexV2Models.Types.EncryptionSetting
+import Amazonka.LexV2Models.Types.ErrorCode
+import Amazonka.LexV2Models.Types.ExportFilter
+import Amazonka.LexV2Models.Types.ExportFilterName
+import Amazonka.LexV2Models.Types.ExportFilterOperator
+import Amazonka.LexV2Models.Types.ExportResourceSpecification
+import Amazonka.LexV2Models.Types.ExportSortAttribute
+import Amazonka.LexV2Models.Types.ExportSortBy
+import Amazonka.LexV2Models.Types.ExportStatus
+import Amazonka.LexV2Models.Types.ExportSummary
+import Amazonka.LexV2Models.Types.ExternalSourceSetting
+import Amazonka.LexV2Models.Types.FailedCustomVocabularyItem
+import Amazonka.LexV2Models.Types.FulfillmentCodeHookSettings
+import Amazonka.LexV2Models.Types.FulfillmentStartResponseSpecification
+import Amazonka.LexV2Models.Types.FulfillmentUpdateResponseSpecification
+import Amazonka.LexV2Models.Types.FulfillmentUpdatesSpecification
+import Amazonka.LexV2Models.Types.GrammarSlotTypeSetting
+import Amazonka.LexV2Models.Types.GrammarSlotTypeSource
+import Amazonka.LexV2Models.Types.ImageResponseCard
+import Amazonka.LexV2Models.Types.ImportExportFileFormat
+import Amazonka.LexV2Models.Types.ImportFilter
+import Amazonka.LexV2Models.Types.ImportFilterName
+import Amazonka.LexV2Models.Types.ImportFilterOperator
+import Amazonka.LexV2Models.Types.ImportResourceSpecification
+import Amazonka.LexV2Models.Types.ImportResourceType
+import Amazonka.LexV2Models.Types.ImportSortAttribute
+import Amazonka.LexV2Models.Types.ImportSortBy
+import Amazonka.LexV2Models.Types.ImportStatus
+import Amazonka.LexV2Models.Types.ImportSummary
+import Amazonka.LexV2Models.Types.InitialResponseSetting
+import Amazonka.LexV2Models.Types.InputContext
+import Amazonka.LexV2Models.Types.IntentClosingSetting
+import Amazonka.LexV2Models.Types.IntentConfirmationSetting
+import Amazonka.LexV2Models.Types.IntentFilter
+import Amazonka.LexV2Models.Types.IntentFilterName
+import Amazonka.LexV2Models.Types.IntentFilterOperator
+import Amazonka.LexV2Models.Types.IntentOverride
+import Amazonka.LexV2Models.Types.IntentSortAttribute
+import Amazonka.LexV2Models.Types.IntentSortBy
+import Amazonka.LexV2Models.Types.IntentStatistics
+import Amazonka.LexV2Models.Types.IntentSummary
+import Amazonka.LexV2Models.Types.KendraConfiguration
+import Amazonka.LexV2Models.Types.LambdaCodeHook
+import Amazonka.LexV2Models.Types.LexTranscriptFilter
+import Amazonka.LexV2Models.Types.MergeStrategy
+import Amazonka.LexV2Models.Types.Message
+import Amazonka.LexV2Models.Types.MessageGroup
+import Amazonka.LexV2Models.Types.MessageSelectionStrategy
+import Amazonka.LexV2Models.Types.MultipleValuesSetting
+import Amazonka.LexV2Models.Types.NewCustomVocabularyItem
+import Amazonka.LexV2Models.Types.ObfuscationSetting
+import Amazonka.LexV2Models.Types.ObfuscationSettingType
+import Amazonka.LexV2Models.Types.OutputContext
+import Amazonka.LexV2Models.Types.PathFormat
+import Amazonka.LexV2Models.Types.PlainTextMessage
+import Amazonka.LexV2Models.Types.PostDialogCodeHookInvocationSpecification
+import Amazonka.LexV2Models.Types.PostFulfillmentStatusSpecification
+import Amazonka.LexV2Models.Types.Principal
+import Amazonka.LexV2Models.Types.PromptAttempt
+import Amazonka.LexV2Models.Types.PromptAttemptSpecification
+import Amazonka.LexV2Models.Types.PromptSpecification
+import Amazonka.LexV2Models.Types.RecommendedIntentSummary
+import Amazonka.LexV2Models.Types.RelativeAggregationDuration
+import Amazonka.LexV2Models.Types.ResponseSpecification
+import Amazonka.LexV2Models.Types.S3BucketLogDestination
+import Amazonka.LexV2Models.Types.S3BucketTranscriptSource
+import Amazonka.LexV2Models.Types.SSMLMessage
+import Amazonka.LexV2Models.Types.SampleUtterance
+import Amazonka.LexV2Models.Types.SampleValue
+import Amazonka.LexV2Models.Types.SearchOrder
+import Amazonka.LexV2Models.Types.SentimentAnalysisSettings
+import Amazonka.LexV2Models.Types.SlotCaptureSetting
+import Amazonka.LexV2Models.Types.SlotConstraint
+import Amazonka.LexV2Models.Types.SlotDefaultValue
+import Amazonka.LexV2Models.Types.SlotDefaultValueSpecification
+import Amazonka.LexV2Models.Types.SlotFilter
+import Amazonka.LexV2Models.Types.SlotFilterName
+import Amazonka.LexV2Models.Types.SlotFilterOperator
+import Amazonka.LexV2Models.Types.SlotPriority
+import Amazonka.LexV2Models.Types.SlotShape
+import Amazonka.LexV2Models.Types.SlotSortAttribute
+import Amazonka.LexV2Models.Types.SlotSortBy
+import Amazonka.LexV2Models.Types.SlotSummary
+import Amazonka.LexV2Models.Types.SlotTypeCategory
+import Amazonka.LexV2Models.Types.SlotTypeFilter
+import Amazonka.LexV2Models.Types.SlotTypeFilterName
+import Amazonka.LexV2Models.Types.SlotTypeFilterOperator
+import Amazonka.LexV2Models.Types.SlotTypeSortAttribute
+import Amazonka.LexV2Models.Types.SlotTypeSortBy
+import Amazonka.LexV2Models.Types.SlotTypeStatistics
+import Amazonka.LexV2Models.Types.SlotTypeSummary
+import Amazonka.LexV2Models.Types.SlotTypeValue
+import Amazonka.LexV2Models.Types.SlotValue
+import Amazonka.LexV2Models.Types.SlotValueElicitationSetting
+import Amazonka.LexV2Models.Types.SlotValueOverride
+import Amazonka.LexV2Models.Types.SlotValueRegexFilter
+import Amazonka.LexV2Models.Types.SlotValueResolutionStrategy
+import Amazonka.LexV2Models.Types.SlotValueSelectionSetting
+import Amazonka.LexV2Models.Types.SortOrder
+import Amazonka.LexV2Models.Types.Specifications
+import Amazonka.LexV2Models.Types.StillWaitingResponseSpecification
+import Amazonka.LexV2Models.Types.SubSlotSetting
+import Amazonka.LexV2Models.Types.SubSlotTypeComposition
+import Amazonka.LexV2Models.Types.SubSlotValueElicitationSetting
+import Amazonka.LexV2Models.Types.TextInputSpecification
+import Amazonka.LexV2Models.Types.TextLogDestination
+import Amazonka.LexV2Models.Types.TextLogSetting
+import Amazonka.LexV2Models.Types.TimeDimension
+import Amazonka.LexV2Models.Types.TranscriptFilter
+import Amazonka.LexV2Models.Types.TranscriptFormat
+import Amazonka.LexV2Models.Types.TranscriptSourceSetting
+import Amazonka.LexV2Models.Types.UtteranceAggregationDuration
+import Amazonka.LexV2Models.Types.VoiceEngine
+import Amazonka.LexV2Models.Types.VoiceSettings
+import Amazonka.LexV2Models.Types.WaitAndContinueSpecification
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Sign.V4 as Sign
+
+-- | API version @2020-08-07@ of the Amazon Lex Model Building V2 SDK configuration.
+defaultService :: Core.Service
+defaultService =
+  Core.Service
+    { Core.abbrev = "LexV2Models",
+      Core.signer = Sign.v4,
+      Core.endpointPrefix = "models-v2-lex",
+      Core.signingName = "lex",
+      Core.version = "2020-08-07",
+      Core.s3AddressingStyle = Core.S3AddressingStyleAuto,
+      Core.endpoint = Core.defaultEndpoint defaultService,
+      Core.timeout = Prelude.Just 70,
+      Core.check = Core.statusSuccess,
+      Core.error = Core.parseJSONError "LexV2Models",
+      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 action that you tried to perform couldn\'t be completed because the
+-- resource is in a conflicting state. For example, deleting a bot that is
+-- in the CREATING state. Try your request again.
+_ConflictException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ConflictException =
+  Core._MatchServiceError
+    defaultService
+    "ConflictException"
+    Prelude.. Core.hasStatus 409
+
+-- | The service encountered an unexpected condition. Try your request again.
+_InternalServerException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_InternalServerException =
+  Core._MatchServiceError
+    defaultService
+    "InternalServerException"
+    Prelude.. Core.hasStatus 500
+
+-- | Your request couldn\'t be completed because one or more request fields
+-- aren\'t valid. Check the fields in your request and try again.
+_PreconditionFailedException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_PreconditionFailedException =
+  Core._MatchServiceError
+    defaultService
+    "PreconditionFailedException"
+    Prelude.. Core.hasStatus 412
+
+-- | You asked to describe a resource that doesn\'t exist. Check the resource
+-- that you are requesting and try again.
+_ResourceNotFoundException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ResourceNotFoundException =
+  Core._MatchServiceError
+    defaultService
+    "ResourceNotFoundException"
+    Prelude.. Core.hasStatus 404
+
+-- | You have reached a quota for your bot.
+_ServiceQuotaExceededException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ServiceQuotaExceededException =
+  Core._MatchServiceError
+    defaultService
+    "ServiceQuotaExceededException"
+    Prelude.. Core.hasStatus 402
+
+-- | Your request rate is too high. Reduce the frequency of requests.
+_ThrottlingException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ThrottlingException =
+  Core._MatchServiceError
+    defaultService
+    "ThrottlingException"
+    Prelude.. Core.hasStatus 429
+
+-- | One of the input parameters in your request isn\'t valid. Check the
+-- parameters and try your request again.
+_ValidationException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ValidationException =
+  Core._MatchServiceError
+    defaultService
+    "ValidationException"
+    Prelude.. Core.hasStatus 400
diff --git a/gen/Amazonka/LexV2Models/Types/AdvancedRecognitionSetting.hs b/gen/Amazonka/LexV2Models/Types/AdvancedRecognitionSetting.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/Types/AdvancedRecognitionSetting.hs
@@ -0,0 +1,87 @@
+{-# 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.LexV2Models.Types.AdvancedRecognitionSetting
+-- 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.LexV2Models.Types.AdvancedRecognitionSetting where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LexV2Models.Types.AudioRecognitionStrategy
+import qualified Amazonka.Prelude as Prelude
+
+-- | Provides settings that enable advanced recognition settings for slot
+-- values.
+--
+-- /See:/ 'newAdvancedRecognitionSetting' smart constructor.
+data AdvancedRecognitionSetting = AdvancedRecognitionSetting'
+  { -- | Enables using the slot values as a custom vocabulary for recognizing
+    -- user utterances.
+    audioRecognitionStrategy :: Prelude.Maybe AudioRecognitionStrategy
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AdvancedRecognitionSetting' 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:
+--
+-- 'audioRecognitionStrategy', 'advancedRecognitionSetting_audioRecognitionStrategy' - Enables using the slot values as a custom vocabulary for recognizing
+-- user utterances.
+newAdvancedRecognitionSetting ::
+  AdvancedRecognitionSetting
+newAdvancedRecognitionSetting =
+  AdvancedRecognitionSetting'
+    { audioRecognitionStrategy =
+        Prelude.Nothing
+    }
+
+-- | Enables using the slot values as a custom vocabulary for recognizing
+-- user utterances.
+advancedRecognitionSetting_audioRecognitionStrategy :: Lens.Lens' AdvancedRecognitionSetting (Prelude.Maybe AudioRecognitionStrategy)
+advancedRecognitionSetting_audioRecognitionStrategy = Lens.lens (\AdvancedRecognitionSetting' {audioRecognitionStrategy} -> audioRecognitionStrategy) (\s@AdvancedRecognitionSetting' {} a -> s {audioRecognitionStrategy = a} :: AdvancedRecognitionSetting)
+
+instance Data.FromJSON AdvancedRecognitionSetting where
+  parseJSON =
+    Data.withObject
+      "AdvancedRecognitionSetting"
+      ( \x ->
+          AdvancedRecognitionSetting'
+            Prelude.<$> (x Data..:? "audioRecognitionStrategy")
+      )
+
+instance Prelude.Hashable AdvancedRecognitionSetting where
+  hashWithSalt _salt AdvancedRecognitionSetting' {..} =
+    _salt
+      `Prelude.hashWithSalt` audioRecognitionStrategy
+
+instance Prelude.NFData AdvancedRecognitionSetting where
+  rnf AdvancedRecognitionSetting' {..} =
+    Prelude.rnf audioRecognitionStrategy
+
+instance Data.ToJSON AdvancedRecognitionSetting where
+  toJSON AdvancedRecognitionSetting' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("audioRecognitionStrategy" Data..=)
+              Prelude.<$> audioRecognitionStrategy
+          ]
+      )
diff --git a/gen/Amazonka/LexV2Models/Types/AggregatedUtterancesFilter.hs b/gen/Amazonka/LexV2Models/Types/AggregatedUtterancesFilter.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/Types/AggregatedUtterancesFilter.hs
@@ -0,0 +1,118 @@
+{-# 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.LexV2Models.Types.AggregatedUtterancesFilter
+-- 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.LexV2Models.Types.AggregatedUtterancesFilter where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LexV2Models.Types.AggregatedUtterancesFilterName
+import Amazonka.LexV2Models.Types.AggregatedUtterancesFilterOperator
+import qualified Amazonka.Prelude as Prelude
+
+-- | Filters responses returned by the @ListAggregatedUtterances@ operation.
+--
+-- /See:/ 'newAggregatedUtterancesFilter' smart constructor.
+data AggregatedUtterancesFilter = AggregatedUtterancesFilter'
+  { -- | The name of the field to filter the utterance list.
+    name :: AggregatedUtterancesFilterName,
+    -- | The value to use for filtering the list of bots.
+    values :: Prelude.NonEmpty Prelude.Text,
+    -- | The operator to use for the filter. Specify @EQ@ when the
+    -- @ListAggregatedUtterances@ operation should return only utterances that
+    -- equal the specified value. Specify @CO@ when the
+    -- @ListAggregatedUtterances@ operation should return utterances that
+    -- contain the specified value.
+    operator :: AggregatedUtterancesFilterOperator
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AggregatedUtterancesFilter' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'name', 'aggregatedUtterancesFilter_name' - The name of the field to filter the utterance list.
+--
+-- 'values', 'aggregatedUtterancesFilter_values' - The value to use for filtering the list of bots.
+--
+-- 'operator', 'aggregatedUtterancesFilter_operator' - The operator to use for the filter. Specify @EQ@ when the
+-- @ListAggregatedUtterances@ operation should return only utterances that
+-- equal the specified value. Specify @CO@ when the
+-- @ListAggregatedUtterances@ operation should return utterances that
+-- contain the specified value.
+newAggregatedUtterancesFilter ::
+  -- | 'name'
+  AggregatedUtterancesFilterName ->
+  -- | 'values'
+  Prelude.NonEmpty Prelude.Text ->
+  -- | 'operator'
+  AggregatedUtterancesFilterOperator ->
+  AggregatedUtterancesFilter
+newAggregatedUtterancesFilter
+  pName_
+  pValues_
+  pOperator_ =
+    AggregatedUtterancesFilter'
+      { name = pName_,
+        values = Lens.coerced Lens.# pValues_,
+        operator = pOperator_
+      }
+
+-- | The name of the field to filter the utterance list.
+aggregatedUtterancesFilter_name :: Lens.Lens' AggregatedUtterancesFilter AggregatedUtterancesFilterName
+aggregatedUtterancesFilter_name = Lens.lens (\AggregatedUtterancesFilter' {name} -> name) (\s@AggregatedUtterancesFilter' {} a -> s {name = a} :: AggregatedUtterancesFilter)
+
+-- | The value to use for filtering the list of bots.
+aggregatedUtterancesFilter_values :: Lens.Lens' AggregatedUtterancesFilter (Prelude.NonEmpty Prelude.Text)
+aggregatedUtterancesFilter_values = Lens.lens (\AggregatedUtterancesFilter' {values} -> values) (\s@AggregatedUtterancesFilter' {} a -> s {values = a} :: AggregatedUtterancesFilter) Prelude.. Lens.coerced
+
+-- | The operator to use for the filter. Specify @EQ@ when the
+-- @ListAggregatedUtterances@ operation should return only utterances that
+-- equal the specified value. Specify @CO@ when the
+-- @ListAggregatedUtterances@ operation should return utterances that
+-- contain the specified value.
+aggregatedUtterancesFilter_operator :: Lens.Lens' AggregatedUtterancesFilter AggregatedUtterancesFilterOperator
+aggregatedUtterancesFilter_operator = Lens.lens (\AggregatedUtterancesFilter' {operator} -> operator) (\s@AggregatedUtterancesFilter' {} a -> s {operator = a} :: AggregatedUtterancesFilter)
+
+instance Prelude.Hashable AggregatedUtterancesFilter where
+  hashWithSalt _salt AggregatedUtterancesFilter' {..} =
+    _salt
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` values
+      `Prelude.hashWithSalt` operator
+
+instance Prelude.NFData AggregatedUtterancesFilter where
+  rnf AggregatedUtterancesFilter' {..} =
+    Prelude.rnf name
+      `Prelude.seq` Prelude.rnf values
+      `Prelude.seq` Prelude.rnf operator
+
+instance Data.ToJSON AggregatedUtterancesFilter where
+  toJSON AggregatedUtterancesFilter' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("name" Data..= name),
+            Prelude.Just ("values" Data..= values),
+            Prelude.Just ("operator" Data..= operator)
+          ]
+      )
diff --git a/gen/Amazonka/LexV2Models/Types/AggregatedUtterancesFilterName.hs b/gen/Amazonka/LexV2Models/Types/AggregatedUtterancesFilterName.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/Types/AggregatedUtterancesFilterName.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.LexV2Models.Types.AggregatedUtterancesFilterName
+-- 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.LexV2Models.Types.AggregatedUtterancesFilterName
+  ( AggregatedUtterancesFilterName
+      ( ..,
+        AggregatedUtterancesFilterName_Utterance
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype AggregatedUtterancesFilterName = AggregatedUtterancesFilterName'
+  { fromAggregatedUtterancesFilterName ::
+      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 AggregatedUtterancesFilterName_Utterance :: AggregatedUtterancesFilterName
+pattern AggregatedUtterancesFilterName_Utterance = AggregatedUtterancesFilterName' "Utterance"
+
+{-# COMPLETE
+  AggregatedUtterancesFilterName_Utterance,
+  AggregatedUtterancesFilterName'
+  #-}
diff --git a/gen/Amazonka/LexV2Models/Types/AggregatedUtterancesFilterOperator.hs b/gen/Amazonka/LexV2Models/Types/AggregatedUtterancesFilterOperator.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/Types/AggregatedUtterancesFilterOperator.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.LexV2Models.Types.AggregatedUtterancesFilterOperator
+-- 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.LexV2Models.Types.AggregatedUtterancesFilterOperator
+  ( AggregatedUtterancesFilterOperator
+      ( ..,
+        AggregatedUtterancesFilterOperator_CO,
+        AggregatedUtterancesFilterOperator_EQ
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype AggregatedUtterancesFilterOperator = AggregatedUtterancesFilterOperator'
+  { fromAggregatedUtterancesFilterOperator ::
+      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 AggregatedUtterancesFilterOperator_CO :: AggregatedUtterancesFilterOperator
+pattern AggregatedUtterancesFilterOperator_CO = AggregatedUtterancesFilterOperator' "CO"
+
+pattern AggregatedUtterancesFilterOperator_EQ :: AggregatedUtterancesFilterOperator
+pattern AggregatedUtterancesFilterOperator_EQ = AggregatedUtterancesFilterOperator' "EQ"
+
+{-# COMPLETE
+  AggregatedUtterancesFilterOperator_CO,
+  AggregatedUtterancesFilterOperator_EQ,
+  AggregatedUtterancesFilterOperator'
+  #-}
diff --git a/gen/Amazonka/LexV2Models/Types/AggregatedUtterancesSortAttribute.hs b/gen/Amazonka/LexV2Models/Types/AggregatedUtterancesSortAttribute.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/Types/AggregatedUtterancesSortAttribute.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.LexV2Models.Types.AggregatedUtterancesSortAttribute
+-- 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.LexV2Models.Types.AggregatedUtterancesSortAttribute
+  ( AggregatedUtterancesSortAttribute
+      ( ..,
+        AggregatedUtterancesSortAttribute_HitCount,
+        AggregatedUtterancesSortAttribute_MissedCount
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype AggregatedUtterancesSortAttribute = AggregatedUtterancesSortAttribute'
+  { fromAggregatedUtterancesSortAttribute ::
+      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 AggregatedUtterancesSortAttribute_HitCount :: AggregatedUtterancesSortAttribute
+pattern AggregatedUtterancesSortAttribute_HitCount = AggregatedUtterancesSortAttribute' "HitCount"
+
+pattern AggregatedUtterancesSortAttribute_MissedCount :: AggregatedUtterancesSortAttribute
+pattern AggregatedUtterancesSortAttribute_MissedCount = AggregatedUtterancesSortAttribute' "MissedCount"
+
+{-# COMPLETE
+  AggregatedUtterancesSortAttribute_HitCount,
+  AggregatedUtterancesSortAttribute_MissedCount,
+  AggregatedUtterancesSortAttribute'
+  #-}
diff --git a/gen/Amazonka/LexV2Models/Types/AggregatedUtterancesSortBy.hs b/gen/Amazonka/LexV2Models/Types/AggregatedUtterancesSortBy.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/Types/AggregatedUtterancesSortBy.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.LexV2Models.Types.AggregatedUtterancesSortBy
+-- 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.LexV2Models.Types.AggregatedUtterancesSortBy where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LexV2Models.Types.AggregatedUtterancesSortAttribute
+import Amazonka.LexV2Models.Types.SortOrder
+import qualified Amazonka.Prelude as Prelude
+
+-- | Specifies attributes for sorting a list of utterances.
+--
+-- /See:/ 'newAggregatedUtterancesSortBy' smart constructor.
+data AggregatedUtterancesSortBy = AggregatedUtterancesSortBy'
+  { -- | The utterance attribute to sort by.
+    attribute :: AggregatedUtterancesSortAttribute,
+    -- | Specifies whether to sort the aggregated utterances in ascending or
+    -- descending order.
+    order :: SortOrder
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AggregatedUtterancesSortBy' 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:
+--
+-- 'attribute', 'aggregatedUtterancesSortBy_attribute' - The utterance attribute to sort by.
+--
+-- 'order', 'aggregatedUtterancesSortBy_order' - Specifies whether to sort the aggregated utterances in ascending or
+-- descending order.
+newAggregatedUtterancesSortBy ::
+  -- | 'attribute'
+  AggregatedUtterancesSortAttribute ->
+  -- | 'order'
+  SortOrder ->
+  AggregatedUtterancesSortBy
+newAggregatedUtterancesSortBy pAttribute_ pOrder_ =
+  AggregatedUtterancesSortBy'
+    { attribute =
+        pAttribute_,
+      order = pOrder_
+    }
+
+-- | The utterance attribute to sort by.
+aggregatedUtterancesSortBy_attribute :: Lens.Lens' AggregatedUtterancesSortBy AggregatedUtterancesSortAttribute
+aggregatedUtterancesSortBy_attribute = Lens.lens (\AggregatedUtterancesSortBy' {attribute} -> attribute) (\s@AggregatedUtterancesSortBy' {} a -> s {attribute = a} :: AggregatedUtterancesSortBy)
+
+-- | Specifies whether to sort the aggregated utterances in ascending or
+-- descending order.
+aggregatedUtterancesSortBy_order :: Lens.Lens' AggregatedUtterancesSortBy SortOrder
+aggregatedUtterancesSortBy_order = Lens.lens (\AggregatedUtterancesSortBy' {order} -> order) (\s@AggregatedUtterancesSortBy' {} a -> s {order = a} :: AggregatedUtterancesSortBy)
+
+instance Prelude.Hashable AggregatedUtterancesSortBy where
+  hashWithSalt _salt AggregatedUtterancesSortBy' {..} =
+    _salt
+      `Prelude.hashWithSalt` attribute
+      `Prelude.hashWithSalt` order
+
+instance Prelude.NFData AggregatedUtterancesSortBy where
+  rnf AggregatedUtterancesSortBy' {..} =
+    Prelude.rnf attribute
+      `Prelude.seq` Prelude.rnf order
+
+instance Data.ToJSON AggregatedUtterancesSortBy where
+  toJSON AggregatedUtterancesSortBy' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("attribute" Data..= attribute),
+            Prelude.Just ("order" Data..= order)
+          ]
+      )
diff --git a/gen/Amazonka/LexV2Models/Types/AggregatedUtterancesSummary.hs b/gen/Amazonka/LexV2Models/Types/AggregatedUtterancesSummary.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/Types/AggregatedUtterancesSummary.hs
@@ -0,0 +1,179 @@
+{-# 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.LexV2Models.Types.AggregatedUtterancesSummary
+-- 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.LexV2Models.Types.AggregatedUtterancesSummary 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
+
+-- | Provides summary information for aggregated utterances. The
+-- @ListAggregatedUtterances@ operations combines all instances of the same
+-- utterance into a single aggregated summary.
+--
+-- /See:/ 'newAggregatedUtterancesSummary' smart constructor.
+data AggregatedUtterancesSummary = AggregatedUtterancesSummary'
+  { -- | Aggregated utterance data may contain utterances from versions of your
+    -- bot that have since been deleted. When the aggregated contains this kind
+    -- of data, this field is set to true.
+    containsDataFromDeletedResources :: Prelude.Maybe Prelude.Bool,
+    -- | The number of times that the utterance was detected by Amazon Lex during
+    -- the time period. When an utterance is detected, it activates an intent
+    -- or a slot.
+    hitCount :: Prelude.Maybe Prelude.Int,
+    -- | The number of times that the utterance was missed by Amazon Lex An
+    -- utterance is missed when it doesn\'t activate an intent or slot.
+    missedCount :: Prelude.Maybe Prelude.Int,
+    -- | The text of the utterance. If the utterance was used with the
+    -- @RecognizeUtterance@ operation, the text is the transcription of the
+    -- audio utterance.
+    utterance :: Prelude.Maybe Prelude.Text,
+    -- | The date and time that the utterance was first recorded in the time
+    -- window for aggregation. An utterance may have been sent to Amazon Lex
+    -- before that time, but only utterances within the time window are
+    -- counted.
+    utteranceFirstRecordedInAggregationDuration :: Prelude.Maybe Data.POSIX,
+    -- | The last date and time that an utterance was recorded in the time window
+    -- for aggregation. An utterance may be sent to Amazon Lex after that time,
+    -- but only utterances within the time window are counted.
+    utteranceLastRecordedInAggregationDuration :: Prelude.Maybe Data.POSIX
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AggregatedUtterancesSummary' 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:
+--
+-- 'containsDataFromDeletedResources', 'aggregatedUtterancesSummary_containsDataFromDeletedResources' - Aggregated utterance data may contain utterances from versions of your
+-- bot that have since been deleted. When the aggregated contains this kind
+-- of data, this field is set to true.
+--
+-- 'hitCount', 'aggregatedUtterancesSummary_hitCount' - The number of times that the utterance was detected by Amazon Lex during
+-- the time period. When an utterance is detected, it activates an intent
+-- or a slot.
+--
+-- 'missedCount', 'aggregatedUtterancesSummary_missedCount' - The number of times that the utterance was missed by Amazon Lex An
+-- utterance is missed when it doesn\'t activate an intent or slot.
+--
+-- 'utterance', 'aggregatedUtterancesSummary_utterance' - The text of the utterance. If the utterance was used with the
+-- @RecognizeUtterance@ operation, the text is the transcription of the
+-- audio utterance.
+--
+-- 'utteranceFirstRecordedInAggregationDuration', 'aggregatedUtterancesSummary_utteranceFirstRecordedInAggregationDuration' - The date and time that the utterance was first recorded in the time
+-- window for aggregation. An utterance may have been sent to Amazon Lex
+-- before that time, but only utterances within the time window are
+-- counted.
+--
+-- 'utteranceLastRecordedInAggregationDuration', 'aggregatedUtterancesSummary_utteranceLastRecordedInAggregationDuration' - The last date and time that an utterance was recorded in the time window
+-- for aggregation. An utterance may be sent to Amazon Lex after that time,
+-- but only utterances within the time window are counted.
+newAggregatedUtterancesSummary ::
+  AggregatedUtterancesSummary
+newAggregatedUtterancesSummary =
+  AggregatedUtterancesSummary'
+    { containsDataFromDeletedResources =
+        Prelude.Nothing,
+      hitCount = Prelude.Nothing,
+      missedCount = Prelude.Nothing,
+      utterance = Prelude.Nothing,
+      utteranceFirstRecordedInAggregationDuration =
+        Prelude.Nothing,
+      utteranceLastRecordedInAggregationDuration =
+        Prelude.Nothing
+    }
+
+-- | Aggregated utterance data may contain utterances from versions of your
+-- bot that have since been deleted. When the aggregated contains this kind
+-- of data, this field is set to true.
+aggregatedUtterancesSummary_containsDataFromDeletedResources :: Lens.Lens' AggregatedUtterancesSummary (Prelude.Maybe Prelude.Bool)
+aggregatedUtterancesSummary_containsDataFromDeletedResources = Lens.lens (\AggregatedUtterancesSummary' {containsDataFromDeletedResources} -> containsDataFromDeletedResources) (\s@AggregatedUtterancesSummary' {} a -> s {containsDataFromDeletedResources = a} :: AggregatedUtterancesSummary)
+
+-- | The number of times that the utterance was detected by Amazon Lex during
+-- the time period. When an utterance is detected, it activates an intent
+-- or a slot.
+aggregatedUtterancesSummary_hitCount :: Lens.Lens' AggregatedUtterancesSummary (Prelude.Maybe Prelude.Int)
+aggregatedUtterancesSummary_hitCount = Lens.lens (\AggregatedUtterancesSummary' {hitCount} -> hitCount) (\s@AggregatedUtterancesSummary' {} a -> s {hitCount = a} :: AggregatedUtterancesSummary)
+
+-- | The number of times that the utterance was missed by Amazon Lex An
+-- utterance is missed when it doesn\'t activate an intent or slot.
+aggregatedUtterancesSummary_missedCount :: Lens.Lens' AggregatedUtterancesSummary (Prelude.Maybe Prelude.Int)
+aggregatedUtterancesSummary_missedCount = Lens.lens (\AggregatedUtterancesSummary' {missedCount} -> missedCount) (\s@AggregatedUtterancesSummary' {} a -> s {missedCount = a} :: AggregatedUtterancesSummary)
+
+-- | The text of the utterance. If the utterance was used with the
+-- @RecognizeUtterance@ operation, the text is the transcription of the
+-- audio utterance.
+aggregatedUtterancesSummary_utterance :: Lens.Lens' AggregatedUtterancesSummary (Prelude.Maybe Prelude.Text)
+aggregatedUtterancesSummary_utterance = Lens.lens (\AggregatedUtterancesSummary' {utterance} -> utterance) (\s@AggregatedUtterancesSummary' {} a -> s {utterance = a} :: AggregatedUtterancesSummary)
+
+-- | The date and time that the utterance was first recorded in the time
+-- window for aggregation. An utterance may have been sent to Amazon Lex
+-- before that time, but only utterances within the time window are
+-- counted.
+aggregatedUtterancesSummary_utteranceFirstRecordedInAggregationDuration :: Lens.Lens' AggregatedUtterancesSummary (Prelude.Maybe Prelude.UTCTime)
+aggregatedUtterancesSummary_utteranceFirstRecordedInAggregationDuration = Lens.lens (\AggregatedUtterancesSummary' {utteranceFirstRecordedInAggregationDuration} -> utteranceFirstRecordedInAggregationDuration) (\s@AggregatedUtterancesSummary' {} a -> s {utteranceFirstRecordedInAggregationDuration = a} :: AggregatedUtterancesSummary) Prelude.. Lens.mapping Data._Time
+
+-- | The last date and time that an utterance was recorded in the time window
+-- for aggregation. An utterance may be sent to Amazon Lex after that time,
+-- but only utterances within the time window are counted.
+aggregatedUtterancesSummary_utteranceLastRecordedInAggregationDuration :: Lens.Lens' AggregatedUtterancesSummary (Prelude.Maybe Prelude.UTCTime)
+aggregatedUtterancesSummary_utteranceLastRecordedInAggregationDuration = Lens.lens (\AggregatedUtterancesSummary' {utteranceLastRecordedInAggregationDuration} -> utteranceLastRecordedInAggregationDuration) (\s@AggregatedUtterancesSummary' {} a -> s {utteranceLastRecordedInAggregationDuration = a} :: AggregatedUtterancesSummary) Prelude.. Lens.mapping Data._Time
+
+instance Data.FromJSON AggregatedUtterancesSummary where
+  parseJSON =
+    Data.withObject
+      "AggregatedUtterancesSummary"
+      ( \x ->
+          AggregatedUtterancesSummary'
+            Prelude.<$> (x Data..:? "containsDataFromDeletedResources")
+            Prelude.<*> (x Data..:? "hitCount")
+            Prelude.<*> (x Data..:? "missedCount")
+            Prelude.<*> (x Data..:? "utterance")
+            Prelude.<*> ( x
+                            Data..:? "utteranceFirstRecordedInAggregationDuration"
+                        )
+            Prelude.<*> ( x
+                            Data..:? "utteranceLastRecordedInAggregationDuration"
+                        )
+      )
+
+instance Prelude.Hashable AggregatedUtterancesSummary where
+  hashWithSalt _salt AggregatedUtterancesSummary' {..} =
+    _salt
+      `Prelude.hashWithSalt` containsDataFromDeletedResources
+      `Prelude.hashWithSalt` hitCount
+      `Prelude.hashWithSalt` missedCount
+      `Prelude.hashWithSalt` utterance
+      `Prelude.hashWithSalt` utteranceFirstRecordedInAggregationDuration
+      `Prelude.hashWithSalt` utteranceLastRecordedInAggregationDuration
+
+instance Prelude.NFData AggregatedUtterancesSummary where
+  rnf AggregatedUtterancesSummary' {..} =
+    Prelude.rnf containsDataFromDeletedResources
+      `Prelude.seq` Prelude.rnf hitCount
+      `Prelude.seq` Prelude.rnf missedCount
+      `Prelude.seq` Prelude.rnf utterance
+      `Prelude.seq` Prelude.rnf
+        utteranceFirstRecordedInAggregationDuration
+      `Prelude.seq` Prelude.rnf
+        utteranceLastRecordedInAggregationDuration
diff --git a/gen/Amazonka/LexV2Models/Types/AllowedInputTypes.hs b/gen/Amazonka/LexV2Models/Types/AllowedInputTypes.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/Types/AllowedInputTypes.hs
@@ -0,0 +1,102 @@
+{-# 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.LexV2Models.Types.AllowedInputTypes
+-- 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.LexV2Models.Types.AllowedInputTypes 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
+
+-- | Specifies the allowed input types.
+--
+-- /See:/ 'newAllowedInputTypes' smart constructor.
+data AllowedInputTypes = AllowedInputTypes'
+  { -- | Indicates whether audio input is allowed.
+    allowAudioInput :: Prelude.Bool,
+    -- | Indicates whether DTMF input is allowed.
+    allowDTMFInput :: Prelude.Bool
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AllowedInputTypes' 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:
+--
+-- 'allowAudioInput', 'allowedInputTypes_allowAudioInput' - Indicates whether audio input is allowed.
+--
+-- 'allowDTMFInput', 'allowedInputTypes_allowDTMFInput' - Indicates whether DTMF input is allowed.
+newAllowedInputTypes ::
+  -- | 'allowAudioInput'
+  Prelude.Bool ->
+  -- | 'allowDTMFInput'
+  Prelude.Bool ->
+  AllowedInputTypes
+newAllowedInputTypes
+  pAllowAudioInput_
+  pAllowDTMFInput_ =
+    AllowedInputTypes'
+      { allowAudioInput =
+          pAllowAudioInput_,
+        allowDTMFInput = pAllowDTMFInput_
+      }
+
+-- | Indicates whether audio input is allowed.
+allowedInputTypes_allowAudioInput :: Lens.Lens' AllowedInputTypes Prelude.Bool
+allowedInputTypes_allowAudioInput = Lens.lens (\AllowedInputTypes' {allowAudioInput} -> allowAudioInput) (\s@AllowedInputTypes' {} a -> s {allowAudioInput = a} :: AllowedInputTypes)
+
+-- | Indicates whether DTMF input is allowed.
+allowedInputTypes_allowDTMFInput :: Lens.Lens' AllowedInputTypes Prelude.Bool
+allowedInputTypes_allowDTMFInput = Lens.lens (\AllowedInputTypes' {allowDTMFInput} -> allowDTMFInput) (\s@AllowedInputTypes' {} a -> s {allowDTMFInput = a} :: AllowedInputTypes)
+
+instance Data.FromJSON AllowedInputTypes where
+  parseJSON =
+    Data.withObject
+      "AllowedInputTypes"
+      ( \x ->
+          AllowedInputTypes'
+            Prelude.<$> (x Data..: "allowAudioInput")
+            Prelude.<*> (x Data..: "allowDTMFInput")
+      )
+
+instance Prelude.Hashable AllowedInputTypes where
+  hashWithSalt _salt AllowedInputTypes' {..} =
+    _salt
+      `Prelude.hashWithSalt` allowAudioInput
+      `Prelude.hashWithSalt` allowDTMFInput
+
+instance Prelude.NFData AllowedInputTypes where
+  rnf AllowedInputTypes' {..} =
+    Prelude.rnf allowAudioInput
+      `Prelude.seq` Prelude.rnf allowDTMFInput
+
+instance Data.ToJSON AllowedInputTypes where
+  toJSON AllowedInputTypes' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ("allowAudioInput" Data..= allowAudioInput),
+            Prelude.Just
+              ("allowDTMFInput" Data..= allowDTMFInput)
+          ]
+      )
diff --git a/gen/Amazonka/LexV2Models/Types/AssociatedTranscript.hs b/gen/Amazonka/LexV2Models/Types/AssociatedTranscript.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/Types/AssociatedTranscript.hs
@@ -0,0 +1,76 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.LexV2Models.Types.AssociatedTranscript
+-- 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.LexV2Models.Types.AssociatedTranscript 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 object containing information that associates the recommended
+-- intent\/slot type with a conversation.
+--
+-- /See:/ 'newAssociatedTranscript' smart constructor.
+data AssociatedTranscript = AssociatedTranscript'
+  { -- | The content of the transcript that meets the search filter criteria. For
+    -- the JSON format of the transcript, see
+    -- <https://docs.aws.amazon.com/lexv2/latest/dg/designing-output-format.html Output transcript format>.
+    transcript :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AssociatedTranscript' 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:
+--
+-- 'transcript', 'associatedTranscript_transcript' - The content of the transcript that meets the search filter criteria. For
+-- the JSON format of the transcript, see
+-- <https://docs.aws.amazon.com/lexv2/latest/dg/designing-output-format.html Output transcript format>.
+newAssociatedTranscript ::
+  AssociatedTranscript
+newAssociatedTranscript =
+  AssociatedTranscript' {transcript = Prelude.Nothing}
+
+-- | The content of the transcript that meets the search filter criteria. For
+-- the JSON format of the transcript, see
+-- <https://docs.aws.amazon.com/lexv2/latest/dg/designing-output-format.html Output transcript format>.
+associatedTranscript_transcript :: Lens.Lens' AssociatedTranscript (Prelude.Maybe Prelude.Text)
+associatedTranscript_transcript = Lens.lens (\AssociatedTranscript' {transcript} -> transcript) (\s@AssociatedTranscript' {} a -> s {transcript = a} :: AssociatedTranscript)
+
+instance Data.FromJSON AssociatedTranscript where
+  parseJSON =
+    Data.withObject
+      "AssociatedTranscript"
+      ( \x ->
+          AssociatedTranscript'
+            Prelude.<$> (x Data..:? "transcript")
+      )
+
+instance Prelude.Hashable AssociatedTranscript where
+  hashWithSalt _salt AssociatedTranscript' {..} =
+    _salt `Prelude.hashWithSalt` transcript
+
+instance Prelude.NFData AssociatedTranscript where
+  rnf AssociatedTranscript' {..} =
+    Prelude.rnf transcript
diff --git a/gen/Amazonka/LexV2Models/Types/AssociatedTranscriptFilter.hs b/gen/Amazonka/LexV2Models/Types/AssociatedTranscriptFilter.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/Types/AssociatedTranscriptFilter.hs
@@ -0,0 +1,90 @@
+{-# 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.LexV2Models.Types.AssociatedTranscriptFilter
+-- 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.LexV2Models.Types.AssociatedTranscriptFilter where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LexV2Models.Types.AssociatedTranscriptFilterName
+import qualified Amazonka.Prelude as Prelude
+
+-- | Filters to search for the associated transcript.
+--
+-- /See:/ 'newAssociatedTranscriptFilter' smart constructor.
+data AssociatedTranscriptFilter = AssociatedTranscriptFilter'
+  { -- | The name of the field to use for filtering. The allowed names are
+    -- IntentId and SlotTypeId.
+    name :: AssociatedTranscriptFilterName,
+    -- | The values to use to filter the transcript.
+    values :: Prelude.NonEmpty Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AssociatedTranscriptFilter' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'name', 'associatedTranscriptFilter_name' - The name of the field to use for filtering. The allowed names are
+-- IntentId and SlotTypeId.
+--
+-- 'values', 'associatedTranscriptFilter_values' - The values to use to filter the transcript.
+newAssociatedTranscriptFilter ::
+  -- | 'name'
+  AssociatedTranscriptFilterName ->
+  -- | 'values'
+  Prelude.NonEmpty Prelude.Text ->
+  AssociatedTranscriptFilter
+newAssociatedTranscriptFilter pName_ pValues_ =
+  AssociatedTranscriptFilter'
+    { name = pName_,
+      values = Lens.coerced Lens.# pValues_
+    }
+
+-- | The name of the field to use for filtering. The allowed names are
+-- IntentId and SlotTypeId.
+associatedTranscriptFilter_name :: Lens.Lens' AssociatedTranscriptFilter AssociatedTranscriptFilterName
+associatedTranscriptFilter_name = Lens.lens (\AssociatedTranscriptFilter' {name} -> name) (\s@AssociatedTranscriptFilter' {} a -> s {name = a} :: AssociatedTranscriptFilter)
+
+-- | The values to use to filter the transcript.
+associatedTranscriptFilter_values :: Lens.Lens' AssociatedTranscriptFilter (Prelude.NonEmpty Prelude.Text)
+associatedTranscriptFilter_values = Lens.lens (\AssociatedTranscriptFilter' {values} -> values) (\s@AssociatedTranscriptFilter' {} a -> s {values = a} :: AssociatedTranscriptFilter) Prelude.. Lens.coerced
+
+instance Prelude.Hashable AssociatedTranscriptFilter where
+  hashWithSalt _salt AssociatedTranscriptFilter' {..} =
+    _salt
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` values
+
+instance Prelude.NFData AssociatedTranscriptFilter where
+  rnf AssociatedTranscriptFilter' {..} =
+    Prelude.rnf name `Prelude.seq` Prelude.rnf values
+
+instance Data.ToJSON AssociatedTranscriptFilter where
+  toJSON AssociatedTranscriptFilter' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("name" Data..= name),
+            Prelude.Just ("values" Data..= values)
+          ]
+      )
diff --git a/gen/Amazonka/LexV2Models/Types/AssociatedTranscriptFilterName.hs b/gen/Amazonka/LexV2Models/Types/AssociatedTranscriptFilterName.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/Types/AssociatedTranscriptFilterName.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.LexV2Models.Types.AssociatedTranscriptFilterName
+-- 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.LexV2Models.Types.AssociatedTranscriptFilterName
+  ( AssociatedTranscriptFilterName
+      ( ..,
+        AssociatedTranscriptFilterName_IntentId,
+        AssociatedTranscriptFilterName_SlotTypeId
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype AssociatedTranscriptFilterName = AssociatedTranscriptFilterName'
+  { fromAssociatedTranscriptFilterName ::
+      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 AssociatedTranscriptFilterName_IntentId :: AssociatedTranscriptFilterName
+pattern AssociatedTranscriptFilterName_IntentId = AssociatedTranscriptFilterName' "IntentId"
+
+pattern AssociatedTranscriptFilterName_SlotTypeId :: AssociatedTranscriptFilterName
+pattern AssociatedTranscriptFilterName_SlotTypeId = AssociatedTranscriptFilterName' "SlotTypeId"
+
+{-# COMPLETE
+  AssociatedTranscriptFilterName_IntentId,
+  AssociatedTranscriptFilterName_SlotTypeId,
+  AssociatedTranscriptFilterName'
+  #-}
diff --git a/gen/Amazonka/LexV2Models/Types/AudioAndDTMFInputSpecification.hs b/gen/Amazonka/LexV2Models/Types/AudioAndDTMFInputSpecification.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/Types/AudioAndDTMFInputSpecification.hs
@@ -0,0 +1,128 @@
+{-# 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.LexV2Models.Types.AudioAndDTMFInputSpecification
+-- 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.LexV2Models.Types.AudioAndDTMFInputSpecification where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LexV2Models.Types.AudioSpecification
+import Amazonka.LexV2Models.Types.DTMFSpecification
+import qualified Amazonka.Prelude as Prelude
+
+-- | Specifies the audio and DTMF input specification.
+--
+-- /See:/ 'newAudioAndDTMFInputSpecification' smart constructor.
+data AudioAndDTMFInputSpecification = AudioAndDTMFInputSpecification'
+  { -- | Specifies the settings on audio input.
+    audioSpecification :: Prelude.Maybe AudioSpecification,
+    -- | Specifies the settings on DTMF input.
+    dtmfSpecification :: Prelude.Maybe DTMFSpecification,
+    -- | Time for which a bot waits before assuming that the customer isn\'t
+    -- going to speak or press a key. This timeout is shared between Audio and
+    -- DTMF inputs.
+    startTimeoutMs :: Prelude.Natural
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AudioAndDTMFInputSpecification' 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:
+--
+-- 'audioSpecification', 'audioAndDTMFInputSpecification_audioSpecification' - Specifies the settings on audio input.
+--
+-- 'dtmfSpecification', 'audioAndDTMFInputSpecification_dtmfSpecification' - Specifies the settings on DTMF input.
+--
+-- 'startTimeoutMs', 'audioAndDTMFInputSpecification_startTimeoutMs' - Time for which a bot waits before assuming that the customer isn\'t
+-- going to speak or press a key. This timeout is shared between Audio and
+-- DTMF inputs.
+newAudioAndDTMFInputSpecification ::
+  -- | 'startTimeoutMs'
+  Prelude.Natural ->
+  AudioAndDTMFInputSpecification
+newAudioAndDTMFInputSpecification pStartTimeoutMs_ =
+  AudioAndDTMFInputSpecification'
+    { audioSpecification =
+        Prelude.Nothing,
+      dtmfSpecification = Prelude.Nothing,
+      startTimeoutMs = pStartTimeoutMs_
+    }
+
+-- | Specifies the settings on audio input.
+audioAndDTMFInputSpecification_audioSpecification :: Lens.Lens' AudioAndDTMFInputSpecification (Prelude.Maybe AudioSpecification)
+audioAndDTMFInputSpecification_audioSpecification = Lens.lens (\AudioAndDTMFInputSpecification' {audioSpecification} -> audioSpecification) (\s@AudioAndDTMFInputSpecification' {} a -> s {audioSpecification = a} :: AudioAndDTMFInputSpecification)
+
+-- | Specifies the settings on DTMF input.
+audioAndDTMFInputSpecification_dtmfSpecification :: Lens.Lens' AudioAndDTMFInputSpecification (Prelude.Maybe DTMFSpecification)
+audioAndDTMFInputSpecification_dtmfSpecification = Lens.lens (\AudioAndDTMFInputSpecification' {dtmfSpecification} -> dtmfSpecification) (\s@AudioAndDTMFInputSpecification' {} a -> s {dtmfSpecification = a} :: AudioAndDTMFInputSpecification)
+
+-- | Time for which a bot waits before assuming that the customer isn\'t
+-- going to speak or press a key. This timeout is shared between Audio and
+-- DTMF inputs.
+audioAndDTMFInputSpecification_startTimeoutMs :: Lens.Lens' AudioAndDTMFInputSpecification Prelude.Natural
+audioAndDTMFInputSpecification_startTimeoutMs = Lens.lens (\AudioAndDTMFInputSpecification' {startTimeoutMs} -> startTimeoutMs) (\s@AudioAndDTMFInputSpecification' {} a -> s {startTimeoutMs = a} :: AudioAndDTMFInputSpecification)
+
+instance Data.FromJSON AudioAndDTMFInputSpecification where
+  parseJSON =
+    Data.withObject
+      "AudioAndDTMFInputSpecification"
+      ( \x ->
+          AudioAndDTMFInputSpecification'
+            Prelude.<$> (x Data..:? "audioSpecification")
+            Prelude.<*> (x Data..:? "dtmfSpecification")
+            Prelude.<*> (x Data..: "startTimeoutMs")
+      )
+
+instance
+  Prelude.Hashable
+    AudioAndDTMFInputSpecification
+  where
+  hashWithSalt
+    _salt
+    AudioAndDTMFInputSpecification' {..} =
+      _salt
+        `Prelude.hashWithSalt` audioSpecification
+        `Prelude.hashWithSalt` dtmfSpecification
+        `Prelude.hashWithSalt` startTimeoutMs
+
+instance
+  Prelude.NFData
+    AudioAndDTMFInputSpecification
+  where
+  rnf AudioAndDTMFInputSpecification' {..} =
+    Prelude.rnf audioSpecification
+      `Prelude.seq` Prelude.rnf dtmfSpecification
+      `Prelude.seq` Prelude.rnf startTimeoutMs
+
+instance Data.ToJSON AudioAndDTMFInputSpecification where
+  toJSON AudioAndDTMFInputSpecification' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("audioSpecification" Data..=)
+              Prelude.<$> audioSpecification,
+            ("dtmfSpecification" Data..=)
+              Prelude.<$> dtmfSpecification,
+            Prelude.Just
+              ("startTimeoutMs" Data..= startTimeoutMs)
+          ]
+      )
diff --git a/gen/Amazonka/LexV2Models/Types/AudioLogDestination.hs b/gen/Amazonka/LexV2Models/Types/AudioLogDestination.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/Types/AudioLogDestination.hs
@@ -0,0 +1,88 @@
+{-# 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.LexV2Models.Types.AudioLogDestination
+-- 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.LexV2Models.Types.AudioLogDestination where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LexV2Models.Types.S3BucketLogDestination
+import qualified Amazonka.Prelude as Prelude
+
+-- | The location of audio log files collected when conversation logging is
+-- enabled for a bot.
+--
+-- /See:/ 'newAudioLogDestination' smart constructor.
+data AudioLogDestination = AudioLogDestination'
+  { -- | The Amazon S3 bucket where the audio log files are stored. The IAM role
+    -- specified in the @roleArn@ parameter of the
+    -- <https://docs.aws.amazon.com/lexv2/latest/dg/API_CreateBot.html CreateBot>
+    -- operation must have permission to write to this bucket.
+    s3Bucket :: S3BucketLogDestination
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AudioLogDestination' 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:
+--
+-- 's3Bucket', 'audioLogDestination_s3Bucket' - The Amazon S3 bucket where the audio log files are stored. The IAM role
+-- specified in the @roleArn@ parameter of the
+-- <https://docs.aws.amazon.com/lexv2/latest/dg/API_CreateBot.html CreateBot>
+-- operation must have permission to write to this bucket.
+newAudioLogDestination ::
+  -- | 's3Bucket'
+  S3BucketLogDestination ->
+  AudioLogDestination
+newAudioLogDestination pS3Bucket_ =
+  AudioLogDestination' {s3Bucket = pS3Bucket_}
+
+-- | The Amazon S3 bucket where the audio log files are stored. The IAM role
+-- specified in the @roleArn@ parameter of the
+-- <https://docs.aws.amazon.com/lexv2/latest/dg/API_CreateBot.html CreateBot>
+-- operation must have permission to write to this bucket.
+audioLogDestination_s3Bucket :: Lens.Lens' AudioLogDestination S3BucketLogDestination
+audioLogDestination_s3Bucket = Lens.lens (\AudioLogDestination' {s3Bucket} -> s3Bucket) (\s@AudioLogDestination' {} a -> s {s3Bucket = a} :: AudioLogDestination)
+
+instance Data.FromJSON AudioLogDestination where
+  parseJSON =
+    Data.withObject
+      "AudioLogDestination"
+      ( \x ->
+          AudioLogDestination'
+            Prelude.<$> (x Data..: "s3Bucket")
+      )
+
+instance Prelude.Hashable AudioLogDestination where
+  hashWithSalt _salt AudioLogDestination' {..} =
+    _salt `Prelude.hashWithSalt` s3Bucket
+
+instance Prelude.NFData AudioLogDestination where
+  rnf AudioLogDestination' {..} = Prelude.rnf s3Bucket
+
+instance Data.ToJSON AudioLogDestination where
+  toJSON AudioLogDestination' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("s3Bucket" Data..= s3Bucket)]
+      )
diff --git a/gen/Amazonka/LexV2Models/Types/AudioLogSetting.hs b/gen/Amazonka/LexV2Models/Types/AudioLogSetting.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/Types/AudioLogSetting.hs
@@ -0,0 +1,99 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.LexV2Models.Types.AudioLogSetting
+-- 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.LexV2Models.Types.AudioLogSetting where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LexV2Models.Types.AudioLogDestination
+import qualified Amazonka.Prelude as Prelude
+
+-- | Settings for logging audio of conversations between Amazon Lex and a
+-- user. You specify whether to log audio and the Amazon S3 bucket where
+-- the audio file is stored.
+--
+-- /See:/ 'newAudioLogSetting' smart constructor.
+data AudioLogSetting = AudioLogSetting'
+  { -- | Determines whether audio logging in enabled for the bot.
+    enabled :: Prelude.Bool,
+    destination :: AudioLogDestination
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AudioLogSetting' 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:
+--
+-- 'enabled', 'audioLogSetting_enabled' - Determines whether audio logging in enabled for the bot.
+--
+-- 'destination', 'audioLogSetting_destination' - Undocumented member.
+newAudioLogSetting ::
+  -- | 'enabled'
+  Prelude.Bool ->
+  -- | 'destination'
+  AudioLogDestination ->
+  AudioLogSetting
+newAudioLogSetting pEnabled_ pDestination_ =
+  AudioLogSetting'
+    { enabled = pEnabled_,
+      destination = pDestination_
+    }
+
+-- | Determines whether audio logging in enabled for the bot.
+audioLogSetting_enabled :: Lens.Lens' AudioLogSetting Prelude.Bool
+audioLogSetting_enabled = Lens.lens (\AudioLogSetting' {enabled} -> enabled) (\s@AudioLogSetting' {} a -> s {enabled = a} :: AudioLogSetting)
+
+-- | Undocumented member.
+audioLogSetting_destination :: Lens.Lens' AudioLogSetting AudioLogDestination
+audioLogSetting_destination = Lens.lens (\AudioLogSetting' {destination} -> destination) (\s@AudioLogSetting' {} a -> s {destination = a} :: AudioLogSetting)
+
+instance Data.FromJSON AudioLogSetting where
+  parseJSON =
+    Data.withObject
+      "AudioLogSetting"
+      ( \x ->
+          AudioLogSetting'
+            Prelude.<$> (x Data..: "enabled")
+            Prelude.<*> (x Data..: "destination")
+      )
+
+instance Prelude.Hashable AudioLogSetting where
+  hashWithSalt _salt AudioLogSetting' {..} =
+    _salt
+      `Prelude.hashWithSalt` enabled
+      `Prelude.hashWithSalt` destination
+
+instance Prelude.NFData AudioLogSetting where
+  rnf AudioLogSetting' {..} =
+    Prelude.rnf enabled
+      `Prelude.seq` Prelude.rnf destination
+
+instance Data.ToJSON AudioLogSetting where
+  toJSON AudioLogSetting' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("enabled" Data..= enabled),
+            Prelude.Just ("destination" Data..= destination)
+          ]
+      )
diff --git a/gen/Amazonka/LexV2Models/Types/AudioRecognitionStrategy.hs b/gen/Amazonka/LexV2Models/Types/AudioRecognitionStrategy.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/Types/AudioRecognitionStrategy.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.LexV2Models.Types.AudioRecognitionStrategy
+-- 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.LexV2Models.Types.AudioRecognitionStrategy
+  ( AudioRecognitionStrategy
+      ( ..,
+        AudioRecognitionStrategy_UseSlotValuesAsCustomVocabulary
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype AudioRecognitionStrategy = AudioRecognitionStrategy'
+  { fromAudioRecognitionStrategy ::
+      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 AudioRecognitionStrategy_UseSlotValuesAsCustomVocabulary :: AudioRecognitionStrategy
+pattern AudioRecognitionStrategy_UseSlotValuesAsCustomVocabulary = AudioRecognitionStrategy' "UseSlotValuesAsCustomVocabulary"
+
+{-# COMPLETE
+  AudioRecognitionStrategy_UseSlotValuesAsCustomVocabulary,
+  AudioRecognitionStrategy'
+  #-}
diff --git a/gen/Amazonka/LexV2Models/Types/AudioSpecification.hs b/gen/Amazonka/LexV2Models/Types/AudioSpecification.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/Types/AudioSpecification.hs
@@ -0,0 +1,103 @@
+{-# 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.LexV2Models.Types.AudioSpecification
+-- 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.LexV2Models.Types.AudioSpecification 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
+
+-- | Specifies the audio input specifications.
+--
+-- /See:/ 'newAudioSpecification' smart constructor.
+data AudioSpecification = AudioSpecification'
+  { -- | Time for how long Amazon Lex waits before speech input is truncated and
+    -- the speech is returned to application.
+    maxLengthMs :: Prelude.Natural,
+    -- | Time for which a bot waits after the customer stops speaking to assume
+    -- the utterance is finished.
+    endTimeoutMs :: Prelude.Natural
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AudioSpecification' 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:
+--
+-- 'maxLengthMs', 'audioSpecification_maxLengthMs' - Time for how long Amazon Lex waits before speech input is truncated and
+-- the speech is returned to application.
+--
+-- 'endTimeoutMs', 'audioSpecification_endTimeoutMs' - Time for which a bot waits after the customer stops speaking to assume
+-- the utterance is finished.
+newAudioSpecification ::
+  -- | 'maxLengthMs'
+  Prelude.Natural ->
+  -- | 'endTimeoutMs'
+  Prelude.Natural ->
+  AudioSpecification
+newAudioSpecification pMaxLengthMs_ pEndTimeoutMs_ =
+  AudioSpecification'
+    { maxLengthMs = pMaxLengthMs_,
+      endTimeoutMs = pEndTimeoutMs_
+    }
+
+-- | Time for how long Amazon Lex waits before speech input is truncated and
+-- the speech is returned to application.
+audioSpecification_maxLengthMs :: Lens.Lens' AudioSpecification Prelude.Natural
+audioSpecification_maxLengthMs = Lens.lens (\AudioSpecification' {maxLengthMs} -> maxLengthMs) (\s@AudioSpecification' {} a -> s {maxLengthMs = a} :: AudioSpecification)
+
+-- | Time for which a bot waits after the customer stops speaking to assume
+-- the utterance is finished.
+audioSpecification_endTimeoutMs :: Lens.Lens' AudioSpecification Prelude.Natural
+audioSpecification_endTimeoutMs = Lens.lens (\AudioSpecification' {endTimeoutMs} -> endTimeoutMs) (\s@AudioSpecification' {} a -> s {endTimeoutMs = a} :: AudioSpecification)
+
+instance Data.FromJSON AudioSpecification where
+  parseJSON =
+    Data.withObject
+      "AudioSpecification"
+      ( \x ->
+          AudioSpecification'
+            Prelude.<$> (x Data..: "maxLengthMs")
+            Prelude.<*> (x Data..: "endTimeoutMs")
+      )
+
+instance Prelude.Hashable AudioSpecification where
+  hashWithSalt _salt AudioSpecification' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxLengthMs
+      `Prelude.hashWithSalt` endTimeoutMs
+
+instance Prelude.NFData AudioSpecification where
+  rnf AudioSpecification' {..} =
+    Prelude.rnf maxLengthMs
+      `Prelude.seq` Prelude.rnf endTimeoutMs
+
+instance Data.ToJSON AudioSpecification where
+  toJSON AudioSpecification' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("maxLengthMs" Data..= maxLengthMs),
+            Prelude.Just ("endTimeoutMs" Data..= endTimeoutMs)
+          ]
+      )
diff --git a/gen/Amazonka/LexV2Models/Types/BotAliasHistoryEvent.hs b/gen/Amazonka/LexV2Models/Types/BotAliasHistoryEvent.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/Types/BotAliasHistoryEvent.hs
@@ -0,0 +1,97 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.LexV2Models.Types.BotAliasHistoryEvent
+-- 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.LexV2Models.Types.BotAliasHistoryEvent 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
+
+-- | Provides a record of an event that affects a bot alias. For example,
+-- when the version of a bot that the alias points to changes.
+--
+-- /See:/ 'newBotAliasHistoryEvent' smart constructor.
+data BotAliasHistoryEvent = BotAliasHistoryEvent'
+  { -- | The version of the bot that was used in the event.
+    botVersion :: Prelude.Maybe Prelude.Text,
+    -- | The date and time that the event ended.
+    endDate :: Prelude.Maybe Data.POSIX,
+    -- | The date and time that the event started.
+    startDate :: Prelude.Maybe Data.POSIX
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'BotAliasHistoryEvent' 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:
+--
+-- 'botVersion', 'botAliasHistoryEvent_botVersion' - The version of the bot that was used in the event.
+--
+-- 'endDate', 'botAliasHistoryEvent_endDate' - The date and time that the event ended.
+--
+-- 'startDate', 'botAliasHistoryEvent_startDate' - The date and time that the event started.
+newBotAliasHistoryEvent ::
+  BotAliasHistoryEvent
+newBotAliasHistoryEvent =
+  BotAliasHistoryEvent'
+    { botVersion = Prelude.Nothing,
+      endDate = Prelude.Nothing,
+      startDate = Prelude.Nothing
+    }
+
+-- | The version of the bot that was used in the event.
+botAliasHistoryEvent_botVersion :: Lens.Lens' BotAliasHistoryEvent (Prelude.Maybe Prelude.Text)
+botAliasHistoryEvent_botVersion = Lens.lens (\BotAliasHistoryEvent' {botVersion} -> botVersion) (\s@BotAliasHistoryEvent' {} a -> s {botVersion = a} :: BotAliasHistoryEvent)
+
+-- | The date and time that the event ended.
+botAliasHistoryEvent_endDate :: Lens.Lens' BotAliasHistoryEvent (Prelude.Maybe Prelude.UTCTime)
+botAliasHistoryEvent_endDate = Lens.lens (\BotAliasHistoryEvent' {endDate} -> endDate) (\s@BotAliasHistoryEvent' {} a -> s {endDate = a} :: BotAliasHistoryEvent) Prelude.. Lens.mapping Data._Time
+
+-- | The date and time that the event started.
+botAliasHistoryEvent_startDate :: Lens.Lens' BotAliasHistoryEvent (Prelude.Maybe Prelude.UTCTime)
+botAliasHistoryEvent_startDate = Lens.lens (\BotAliasHistoryEvent' {startDate} -> startDate) (\s@BotAliasHistoryEvent' {} a -> s {startDate = a} :: BotAliasHistoryEvent) Prelude.. Lens.mapping Data._Time
+
+instance Data.FromJSON BotAliasHistoryEvent where
+  parseJSON =
+    Data.withObject
+      "BotAliasHistoryEvent"
+      ( \x ->
+          BotAliasHistoryEvent'
+            Prelude.<$> (x Data..:? "botVersion")
+            Prelude.<*> (x Data..:? "endDate")
+            Prelude.<*> (x Data..:? "startDate")
+      )
+
+instance Prelude.Hashable BotAliasHistoryEvent where
+  hashWithSalt _salt BotAliasHistoryEvent' {..} =
+    _salt
+      `Prelude.hashWithSalt` botVersion
+      `Prelude.hashWithSalt` endDate
+      `Prelude.hashWithSalt` startDate
+
+instance Prelude.NFData BotAliasHistoryEvent where
+  rnf BotAliasHistoryEvent' {..} =
+    Prelude.rnf botVersion
+      `Prelude.seq` Prelude.rnf endDate
+      `Prelude.seq` Prelude.rnf startDate
diff --git a/gen/Amazonka/LexV2Models/Types/BotAliasLocaleSettings.hs b/gen/Amazonka/LexV2Models/Types/BotAliasLocaleSettings.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/Types/BotAliasLocaleSettings.hs
@@ -0,0 +1,102 @@
+{-# 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.LexV2Models.Types.BotAliasLocaleSettings
+-- 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.LexV2Models.Types.BotAliasLocaleSettings where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LexV2Models.Types.CodeHookSpecification
+import qualified Amazonka.Prelude as Prelude
+
+-- | Specifies settings that are unique to a locale. For example, you can use
+-- different Lambda function depending on the bot\'s locale.
+--
+-- /See:/ 'newBotAliasLocaleSettings' smart constructor.
+data BotAliasLocaleSettings = BotAliasLocaleSettings'
+  { -- | Specifies the Lambda function that should be used in the locale.
+    codeHookSpecification :: Prelude.Maybe CodeHookSpecification,
+    -- | Determines whether the locale is enabled for the bot. If the value is
+    -- @false@, the locale isn\'t available for use.
+    enabled :: Prelude.Bool
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'BotAliasLocaleSettings' 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:
+--
+-- 'codeHookSpecification', 'botAliasLocaleSettings_codeHookSpecification' - Specifies the Lambda function that should be used in the locale.
+--
+-- 'enabled', 'botAliasLocaleSettings_enabled' - Determines whether the locale is enabled for the bot. If the value is
+-- @false@, the locale isn\'t available for use.
+newBotAliasLocaleSettings ::
+  -- | 'enabled'
+  Prelude.Bool ->
+  BotAliasLocaleSettings
+newBotAliasLocaleSettings pEnabled_ =
+  BotAliasLocaleSettings'
+    { codeHookSpecification =
+        Prelude.Nothing,
+      enabled = pEnabled_
+    }
+
+-- | Specifies the Lambda function that should be used in the locale.
+botAliasLocaleSettings_codeHookSpecification :: Lens.Lens' BotAliasLocaleSettings (Prelude.Maybe CodeHookSpecification)
+botAliasLocaleSettings_codeHookSpecification = Lens.lens (\BotAliasLocaleSettings' {codeHookSpecification} -> codeHookSpecification) (\s@BotAliasLocaleSettings' {} a -> s {codeHookSpecification = a} :: BotAliasLocaleSettings)
+
+-- | Determines whether the locale is enabled for the bot. If the value is
+-- @false@, the locale isn\'t available for use.
+botAliasLocaleSettings_enabled :: Lens.Lens' BotAliasLocaleSettings Prelude.Bool
+botAliasLocaleSettings_enabled = Lens.lens (\BotAliasLocaleSettings' {enabled} -> enabled) (\s@BotAliasLocaleSettings' {} a -> s {enabled = a} :: BotAliasLocaleSettings)
+
+instance Data.FromJSON BotAliasLocaleSettings where
+  parseJSON =
+    Data.withObject
+      "BotAliasLocaleSettings"
+      ( \x ->
+          BotAliasLocaleSettings'
+            Prelude.<$> (x Data..:? "codeHookSpecification")
+            Prelude.<*> (x Data..: "enabled")
+      )
+
+instance Prelude.Hashable BotAliasLocaleSettings where
+  hashWithSalt _salt BotAliasLocaleSettings' {..} =
+    _salt
+      `Prelude.hashWithSalt` codeHookSpecification
+      `Prelude.hashWithSalt` enabled
+
+instance Prelude.NFData BotAliasLocaleSettings where
+  rnf BotAliasLocaleSettings' {..} =
+    Prelude.rnf codeHookSpecification
+      `Prelude.seq` Prelude.rnf enabled
+
+instance Data.ToJSON BotAliasLocaleSettings where
+  toJSON BotAliasLocaleSettings' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("codeHookSpecification" Data..=)
+              Prelude.<$> codeHookSpecification,
+            Prelude.Just ("enabled" Data..= enabled)
+          ]
+      )
diff --git a/gen/Amazonka/LexV2Models/Types/BotAliasStatus.hs b/gen/Amazonka/LexV2Models/Types/BotAliasStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/Types/BotAliasStatus.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.LexV2Models.Types.BotAliasStatus
+-- 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.LexV2Models.Types.BotAliasStatus
+  ( BotAliasStatus
+      ( ..,
+        BotAliasStatus_Available,
+        BotAliasStatus_Creating,
+        BotAliasStatus_Deleting,
+        BotAliasStatus_Failed
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype BotAliasStatus = BotAliasStatus'
+  { fromBotAliasStatus ::
+      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 BotAliasStatus_Available :: BotAliasStatus
+pattern BotAliasStatus_Available = BotAliasStatus' "Available"
+
+pattern BotAliasStatus_Creating :: BotAliasStatus
+pattern BotAliasStatus_Creating = BotAliasStatus' "Creating"
+
+pattern BotAliasStatus_Deleting :: BotAliasStatus
+pattern BotAliasStatus_Deleting = BotAliasStatus' "Deleting"
+
+pattern BotAliasStatus_Failed :: BotAliasStatus
+pattern BotAliasStatus_Failed = BotAliasStatus' "Failed"
+
+{-# COMPLETE
+  BotAliasStatus_Available,
+  BotAliasStatus_Creating,
+  BotAliasStatus_Deleting,
+  BotAliasStatus_Failed,
+  BotAliasStatus'
+  #-}
diff --git a/gen/Amazonka/LexV2Models/Types/BotAliasSummary.hs b/gen/Amazonka/LexV2Models/Types/BotAliasSummary.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/Types/BotAliasSummary.hs
@@ -0,0 +1,159 @@
+{-# 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.LexV2Models.Types.BotAliasSummary
+-- 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.LexV2Models.Types.BotAliasSummary where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LexV2Models.Types.BotAliasStatus
+import qualified Amazonka.Prelude as Prelude
+
+-- | Summary information about bot aliases returned from the
+-- <https://docs.aws.amazon.com/lexv2/latest/dg/API_ListBotAliases.html ListBotAliases>
+-- operation.
+--
+-- /See:/ 'newBotAliasSummary' smart constructor.
+data BotAliasSummary = BotAliasSummary'
+  { -- | The unique identifier assigned to the bot alias. You can use this ID to
+    -- get detailed information about the alias using the
+    -- <https://docs.aws.amazon.com/lexv2/latest/dg/API_DescribeBotAlias.html DescribeBotAlias>
+    -- operation.
+    botAliasId :: Prelude.Maybe Prelude.Text,
+    -- | The name of the bot alias.
+    botAliasName :: Prelude.Maybe Prelude.Text,
+    -- | The current state of the bot alias. If the status is @Available@, the
+    -- alias is ready for use.
+    botAliasStatus :: Prelude.Maybe BotAliasStatus,
+    -- | The version of the bot that the bot alias references.
+    botVersion :: Prelude.Maybe Prelude.Text,
+    -- | A timestamp of the date and time that the bot alias was created.
+    creationDateTime :: Prelude.Maybe Data.POSIX,
+    -- | The description of the bot alias.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | A timestamp of the date and time that the bot alias was last updated.
+    lastUpdatedDateTime :: Prelude.Maybe Data.POSIX
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'BotAliasSummary' 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:
+--
+-- 'botAliasId', 'botAliasSummary_botAliasId' - The unique identifier assigned to the bot alias. You can use this ID to
+-- get detailed information about the alias using the
+-- <https://docs.aws.amazon.com/lexv2/latest/dg/API_DescribeBotAlias.html DescribeBotAlias>
+-- operation.
+--
+-- 'botAliasName', 'botAliasSummary_botAliasName' - The name of the bot alias.
+--
+-- 'botAliasStatus', 'botAliasSummary_botAliasStatus' - The current state of the bot alias. If the status is @Available@, the
+-- alias is ready for use.
+--
+-- 'botVersion', 'botAliasSummary_botVersion' - The version of the bot that the bot alias references.
+--
+-- 'creationDateTime', 'botAliasSummary_creationDateTime' - A timestamp of the date and time that the bot alias was created.
+--
+-- 'description', 'botAliasSummary_description' - The description of the bot alias.
+--
+-- 'lastUpdatedDateTime', 'botAliasSummary_lastUpdatedDateTime' - A timestamp of the date and time that the bot alias was last updated.
+newBotAliasSummary ::
+  BotAliasSummary
+newBotAliasSummary =
+  BotAliasSummary'
+    { botAliasId = Prelude.Nothing,
+      botAliasName = Prelude.Nothing,
+      botAliasStatus = Prelude.Nothing,
+      botVersion = Prelude.Nothing,
+      creationDateTime = Prelude.Nothing,
+      description = Prelude.Nothing,
+      lastUpdatedDateTime = Prelude.Nothing
+    }
+
+-- | The unique identifier assigned to the bot alias. You can use this ID to
+-- get detailed information about the alias using the
+-- <https://docs.aws.amazon.com/lexv2/latest/dg/API_DescribeBotAlias.html DescribeBotAlias>
+-- operation.
+botAliasSummary_botAliasId :: Lens.Lens' BotAliasSummary (Prelude.Maybe Prelude.Text)
+botAliasSummary_botAliasId = Lens.lens (\BotAliasSummary' {botAliasId} -> botAliasId) (\s@BotAliasSummary' {} a -> s {botAliasId = a} :: BotAliasSummary)
+
+-- | The name of the bot alias.
+botAliasSummary_botAliasName :: Lens.Lens' BotAliasSummary (Prelude.Maybe Prelude.Text)
+botAliasSummary_botAliasName = Lens.lens (\BotAliasSummary' {botAliasName} -> botAliasName) (\s@BotAliasSummary' {} a -> s {botAliasName = a} :: BotAliasSummary)
+
+-- | The current state of the bot alias. If the status is @Available@, the
+-- alias is ready for use.
+botAliasSummary_botAliasStatus :: Lens.Lens' BotAliasSummary (Prelude.Maybe BotAliasStatus)
+botAliasSummary_botAliasStatus = Lens.lens (\BotAliasSummary' {botAliasStatus} -> botAliasStatus) (\s@BotAliasSummary' {} a -> s {botAliasStatus = a} :: BotAliasSummary)
+
+-- | The version of the bot that the bot alias references.
+botAliasSummary_botVersion :: Lens.Lens' BotAliasSummary (Prelude.Maybe Prelude.Text)
+botAliasSummary_botVersion = Lens.lens (\BotAliasSummary' {botVersion} -> botVersion) (\s@BotAliasSummary' {} a -> s {botVersion = a} :: BotAliasSummary)
+
+-- | A timestamp of the date and time that the bot alias was created.
+botAliasSummary_creationDateTime :: Lens.Lens' BotAliasSummary (Prelude.Maybe Prelude.UTCTime)
+botAliasSummary_creationDateTime = Lens.lens (\BotAliasSummary' {creationDateTime} -> creationDateTime) (\s@BotAliasSummary' {} a -> s {creationDateTime = a} :: BotAliasSummary) Prelude.. Lens.mapping Data._Time
+
+-- | The description of the bot alias.
+botAliasSummary_description :: Lens.Lens' BotAliasSummary (Prelude.Maybe Prelude.Text)
+botAliasSummary_description = Lens.lens (\BotAliasSummary' {description} -> description) (\s@BotAliasSummary' {} a -> s {description = a} :: BotAliasSummary)
+
+-- | A timestamp of the date and time that the bot alias was last updated.
+botAliasSummary_lastUpdatedDateTime :: Lens.Lens' BotAliasSummary (Prelude.Maybe Prelude.UTCTime)
+botAliasSummary_lastUpdatedDateTime = Lens.lens (\BotAliasSummary' {lastUpdatedDateTime} -> lastUpdatedDateTime) (\s@BotAliasSummary' {} a -> s {lastUpdatedDateTime = a} :: BotAliasSummary) Prelude.. Lens.mapping Data._Time
+
+instance Data.FromJSON BotAliasSummary where
+  parseJSON =
+    Data.withObject
+      "BotAliasSummary"
+      ( \x ->
+          BotAliasSummary'
+            Prelude.<$> (x Data..:? "botAliasId")
+            Prelude.<*> (x Data..:? "botAliasName")
+            Prelude.<*> (x Data..:? "botAliasStatus")
+            Prelude.<*> (x Data..:? "botVersion")
+            Prelude.<*> (x Data..:? "creationDateTime")
+            Prelude.<*> (x Data..:? "description")
+            Prelude.<*> (x Data..:? "lastUpdatedDateTime")
+      )
+
+instance Prelude.Hashable BotAliasSummary where
+  hashWithSalt _salt BotAliasSummary' {..} =
+    _salt
+      `Prelude.hashWithSalt` botAliasId
+      `Prelude.hashWithSalt` botAliasName
+      `Prelude.hashWithSalt` botAliasStatus
+      `Prelude.hashWithSalt` botVersion
+      `Prelude.hashWithSalt` creationDateTime
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` lastUpdatedDateTime
+
+instance Prelude.NFData BotAliasSummary where
+  rnf BotAliasSummary' {..} =
+    Prelude.rnf botAliasId
+      `Prelude.seq` Prelude.rnf botAliasName
+      `Prelude.seq` Prelude.rnf botAliasStatus
+      `Prelude.seq` Prelude.rnf botVersion
+      `Prelude.seq` Prelude.rnf creationDateTime
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf lastUpdatedDateTime
diff --git a/gen/Amazonka/LexV2Models/Types/BotExportSpecification.hs b/gen/Amazonka/LexV2Models/Types/BotExportSpecification.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/Types/BotExportSpecification.hs
@@ -0,0 +1,100 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.LexV2Models.Types.BotExportSpecification
+-- 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.LexV2Models.Types.BotExportSpecification 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
+
+-- | Provides the identity of a the bot that was exported.
+--
+-- /See:/ 'newBotExportSpecification' smart constructor.
+data BotExportSpecification = BotExportSpecification'
+  { -- | The identifier of the bot assigned by Amazon Lex.
+    botId :: Prelude.Text,
+    -- | The version of the bot that was exported. This will be either @DRAFT@ or
+    -- the version number.
+    botVersion :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'BotExportSpecification' 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:
+--
+-- 'botId', 'botExportSpecification_botId' - The identifier of the bot assigned by Amazon Lex.
+--
+-- 'botVersion', 'botExportSpecification_botVersion' - The version of the bot that was exported. This will be either @DRAFT@ or
+-- the version number.
+newBotExportSpecification ::
+  -- | 'botId'
+  Prelude.Text ->
+  -- | 'botVersion'
+  Prelude.Text ->
+  BotExportSpecification
+newBotExportSpecification pBotId_ pBotVersion_ =
+  BotExportSpecification'
+    { botId = pBotId_,
+      botVersion = pBotVersion_
+    }
+
+-- | The identifier of the bot assigned by Amazon Lex.
+botExportSpecification_botId :: Lens.Lens' BotExportSpecification Prelude.Text
+botExportSpecification_botId = Lens.lens (\BotExportSpecification' {botId} -> botId) (\s@BotExportSpecification' {} a -> s {botId = a} :: BotExportSpecification)
+
+-- | The version of the bot that was exported. This will be either @DRAFT@ or
+-- the version number.
+botExportSpecification_botVersion :: Lens.Lens' BotExportSpecification Prelude.Text
+botExportSpecification_botVersion = Lens.lens (\BotExportSpecification' {botVersion} -> botVersion) (\s@BotExportSpecification' {} a -> s {botVersion = a} :: BotExportSpecification)
+
+instance Data.FromJSON BotExportSpecification where
+  parseJSON =
+    Data.withObject
+      "BotExportSpecification"
+      ( \x ->
+          BotExportSpecification'
+            Prelude.<$> (x Data..: "botId")
+            Prelude.<*> (x Data..: "botVersion")
+      )
+
+instance Prelude.Hashable BotExportSpecification where
+  hashWithSalt _salt BotExportSpecification' {..} =
+    _salt
+      `Prelude.hashWithSalt` botId
+      `Prelude.hashWithSalt` botVersion
+
+instance Prelude.NFData BotExportSpecification where
+  rnf BotExportSpecification' {..} =
+    Prelude.rnf botId
+      `Prelude.seq` Prelude.rnf botVersion
+
+instance Data.ToJSON BotExportSpecification where
+  toJSON BotExportSpecification' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("botId" Data..= botId),
+            Prelude.Just ("botVersion" Data..= botVersion)
+          ]
+      )
diff --git a/gen/Amazonka/LexV2Models/Types/BotFilter.hs b/gen/Amazonka/LexV2Models/Types/BotFilter.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/Types/BotFilter.hs
@@ -0,0 +1,112 @@
+{-# 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.LexV2Models.Types.BotFilter
+-- 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.LexV2Models.Types.BotFilter where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LexV2Models.Types.BotFilterName
+import Amazonka.LexV2Models.Types.BotFilterOperator
+import qualified Amazonka.Prelude as Prelude
+
+-- | Filters the responses returned by the @ListBots@ operation.
+--
+-- /See:/ 'newBotFilter' smart constructor.
+data BotFilter = BotFilter'
+  { -- | The name of the field to filter the list of bots.
+    name :: BotFilterName,
+    -- | The value to use for filtering the list of bots.
+    values :: Prelude.NonEmpty Prelude.Text,
+    -- | The operator to use for the filter. Specify @EQ@ when the @ListBots@
+    -- operation should return only aliases that equal the specified value.
+    -- Specify @CO@ when the @ListBots@ operation should return aliases that
+    -- contain the specified value.
+    operator :: BotFilterOperator
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'BotFilter' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'name', 'botFilter_name' - The name of the field to filter the list of bots.
+--
+-- 'values', 'botFilter_values' - The value to use for filtering the list of bots.
+--
+-- 'operator', 'botFilter_operator' - The operator to use for the filter. Specify @EQ@ when the @ListBots@
+-- operation should return only aliases that equal the specified value.
+-- Specify @CO@ when the @ListBots@ operation should return aliases that
+-- contain the specified value.
+newBotFilter ::
+  -- | 'name'
+  BotFilterName ->
+  -- | 'values'
+  Prelude.NonEmpty Prelude.Text ->
+  -- | 'operator'
+  BotFilterOperator ->
+  BotFilter
+newBotFilter pName_ pValues_ pOperator_ =
+  BotFilter'
+    { name = pName_,
+      values = Lens.coerced Lens.# pValues_,
+      operator = pOperator_
+    }
+
+-- | The name of the field to filter the list of bots.
+botFilter_name :: Lens.Lens' BotFilter BotFilterName
+botFilter_name = Lens.lens (\BotFilter' {name} -> name) (\s@BotFilter' {} a -> s {name = a} :: BotFilter)
+
+-- | The value to use for filtering the list of bots.
+botFilter_values :: Lens.Lens' BotFilter (Prelude.NonEmpty Prelude.Text)
+botFilter_values = Lens.lens (\BotFilter' {values} -> values) (\s@BotFilter' {} a -> s {values = a} :: BotFilter) Prelude.. Lens.coerced
+
+-- | The operator to use for the filter. Specify @EQ@ when the @ListBots@
+-- operation should return only aliases that equal the specified value.
+-- Specify @CO@ when the @ListBots@ operation should return aliases that
+-- contain the specified value.
+botFilter_operator :: Lens.Lens' BotFilter BotFilterOperator
+botFilter_operator = Lens.lens (\BotFilter' {operator} -> operator) (\s@BotFilter' {} a -> s {operator = a} :: BotFilter)
+
+instance Prelude.Hashable BotFilter where
+  hashWithSalt _salt BotFilter' {..} =
+    _salt
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` values
+      `Prelude.hashWithSalt` operator
+
+instance Prelude.NFData BotFilter where
+  rnf BotFilter' {..} =
+    Prelude.rnf name
+      `Prelude.seq` Prelude.rnf values
+      `Prelude.seq` Prelude.rnf operator
+
+instance Data.ToJSON BotFilter where
+  toJSON BotFilter' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("name" Data..= name),
+            Prelude.Just ("values" Data..= values),
+            Prelude.Just ("operator" Data..= operator)
+          ]
+      )
diff --git a/gen/Amazonka/LexV2Models/Types/BotFilterName.hs b/gen/Amazonka/LexV2Models/Types/BotFilterName.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/Types/BotFilterName.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.LexV2Models.Types.BotFilterName
+-- 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.LexV2Models.Types.BotFilterName
+  ( BotFilterName
+      ( ..,
+        BotFilterName_BotName
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype BotFilterName = BotFilterName'
+  { fromBotFilterName ::
+      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 BotFilterName_BotName :: BotFilterName
+pattern BotFilterName_BotName = BotFilterName' "BotName"
+
+{-# COMPLETE
+  BotFilterName_BotName,
+  BotFilterName'
+  #-}
diff --git a/gen/Amazonka/LexV2Models/Types/BotFilterOperator.hs b/gen/Amazonka/LexV2Models/Types/BotFilterOperator.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/Types/BotFilterOperator.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.LexV2Models.Types.BotFilterOperator
+-- 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.LexV2Models.Types.BotFilterOperator
+  ( BotFilterOperator
+      ( ..,
+        BotFilterOperator_CO,
+        BotFilterOperator_EQ
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype BotFilterOperator = BotFilterOperator'
+  { fromBotFilterOperator ::
+      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 BotFilterOperator_CO :: BotFilterOperator
+pattern BotFilterOperator_CO = BotFilterOperator' "CO"
+
+pattern BotFilterOperator_EQ :: BotFilterOperator
+pattern BotFilterOperator_EQ = BotFilterOperator' "EQ"
+
+{-# COMPLETE
+  BotFilterOperator_CO,
+  BotFilterOperator_EQ,
+  BotFilterOperator'
+  #-}
diff --git a/gen/Amazonka/LexV2Models/Types/BotImportSpecification.hs b/gen/Amazonka/LexV2Models/Types/BotImportSpecification.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/Types/BotImportSpecification.hs
@@ -0,0 +1,198 @@
+{-# 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.LexV2Models.Types.BotImportSpecification
+-- 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.LexV2Models.Types.BotImportSpecification where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LexV2Models.Types.DataPrivacy
+import qualified Amazonka.Prelude as Prelude
+
+-- | Provides the bot parameters required for importing a bot.
+--
+-- /See:/ 'newBotImportSpecification' smart constructor.
+data BotImportSpecification = BotImportSpecification'
+  { -- | A list of tags to add to the bot. You can only add tags when you import
+    -- a bot. You can\'t use the @UpdateBot@ operation to update tags. To
+    -- update tags, use the @TagResource@ operation.
+    botTags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The time, in seconds, that Amazon Lex should keep information about a
+    -- user\'s conversation with the bot.
+    --
+    -- A user interaction remains active for the amount of time specified. If
+    -- no conversation occurs during this time, the session expires and Amazon
+    -- Lex deletes any data provided before the timeout.
+    --
+    -- You can specify between 60 (1 minute) and 86,400 (24 hours) seconds.
+    idleSessionTTLInSeconds :: Prelude.Maybe Prelude.Natural,
+    -- | A list of tags to add to the test alias for a bot. You can only add tags
+    -- when you import a bot. You can\'t use the @UpdateAlias@ operation to
+    -- update tags. To update tags on the test alias, use the @TagResource@
+    -- operation.
+    testBotAliasTags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The name that Amazon Lex should use for the bot.
+    botName :: Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the IAM role used to build and run the
+    -- bot.
+    roleArn :: Prelude.Text,
+    dataPrivacy :: DataPrivacy
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'BotImportSpecification' 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:
+--
+-- 'botTags', 'botImportSpecification_botTags' - A list of tags to add to the bot. You can only add tags when you import
+-- a bot. You can\'t use the @UpdateBot@ operation to update tags. To
+-- update tags, use the @TagResource@ operation.
+--
+-- 'idleSessionTTLInSeconds', 'botImportSpecification_idleSessionTTLInSeconds' - The time, in seconds, that Amazon Lex should keep information about a
+-- user\'s conversation with the bot.
+--
+-- A user interaction remains active for the amount of time specified. If
+-- no conversation occurs during this time, the session expires and Amazon
+-- Lex deletes any data provided before the timeout.
+--
+-- You can specify between 60 (1 minute) and 86,400 (24 hours) seconds.
+--
+-- 'testBotAliasTags', 'botImportSpecification_testBotAliasTags' - A list of tags to add to the test alias for a bot. You can only add tags
+-- when you import a bot. You can\'t use the @UpdateAlias@ operation to
+-- update tags. To update tags on the test alias, use the @TagResource@
+-- operation.
+--
+-- 'botName', 'botImportSpecification_botName' - The name that Amazon Lex should use for the bot.
+--
+-- 'roleArn', 'botImportSpecification_roleArn' - The Amazon Resource Name (ARN) of the IAM role used to build and run the
+-- bot.
+--
+-- 'dataPrivacy', 'botImportSpecification_dataPrivacy' - Undocumented member.
+newBotImportSpecification ::
+  -- | 'botName'
+  Prelude.Text ->
+  -- | 'roleArn'
+  Prelude.Text ->
+  -- | 'dataPrivacy'
+  DataPrivacy ->
+  BotImportSpecification
+newBotImportSpecification
+  pBotName_
+  pRoleArn_
+  pDataPrivacy_ =
+    BotImportSpecification'
+      { botTags = Prelude.Nothing,
+        idleSessionTTLInSeconds = Prelude.Nothing,
+        testBotAliasTags = Prelude.Nothing,
+        botName = pBotName_,
+        roleArn = pRoleArn_,
+        dataPrivacy = pDataPrivacy_
+      }
+
+-- | A list of tags to add to the bot. You can only add tags when you import
+-- a bot. You can\'t use the @UpdateBot@ operation to update tags. To
+-- update tags, use the @TagResource@ operation.
+botImportSpecification_botTags :: Lens.Lens' BotImportSpecification (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+botImportSpecification_botTags = Lens.lens (\BotImportSpecification' {botTags} -> botTags) (\s@BotImportSpecification' {} a -> s {botTags = a} :: BotImportSpecification) Prelude.. Lens.mapping Lens.coerced
+
+-- | The time, in seconds, that Amazon Lex should keep information about a
+-- user\'s conversation with the bot.
+--
+-- A user interaction remains active for the amount of time specified. If
+-- no conversation occurs during this time, the session expires and Amazon
+-- Lex deletes any data provided before the timeout.
+--
+-- You can specify between 60 (1 minute) and 86,400 (24 hours) seconds.
+botImportSpecification_idleSessionTTLInSeconds :: Lens.Lens' BotImportSpecification (Prelude.Maybe Prelude.Natural)
+botImportSpecification_idleSessionTTLInSeconds = Lens.lens (\BotImportSpecification' {idleSessionTTLInSeconds} -> idleSessionTTLInSeconds) (\s@BotImportSpecification' {} a -> s {idleSessionTTLInSeconds = a} :: BotImportSpecification)
+
+-- | A list of tags to add to the test alias for a bot. You can only add tags
+-- when you import a bot. You can\'t use the @UpdateAlias@ operation to
+-- update tags. To update tags on the test alias, use the @TagResource@
+-- operation.
+botImportSpecification_testBotAliasTags :: Lens.Lens' BotImportSpecification (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+botImportSpecification_testBotAliasTags = Lens.lens (\BotImportSpecification' {testBotAliasTags} -> testBotAliasTags) (\s@BotImportSpecification' {} a -> s {testBotAliasTags = a} :: BotImportSpecification) Prelude.. Lens.mapping Lens.coerced
+
+-- | The name that Amazon Lex should use for the bot.
+botImportSpecification_botName :: Lens.Lens' BotImportSpecification Prelude.Text
+botImportSpecification_botName = Lens.lens (\BotImportSpecification' {botName} -> botName) (\s@BotImportSpecification' {} a -> s {botName = a} :: BotImportSpecification)
+
+-- | The Amazon Resource Name (ARN) of the IAM role used to build and run the
+-- bot.
+botImportSpecification_roleArn :: Lens.Lens' BotImportSpecification Prelude.Text
+botImportSpecification_roleArn = Lens.lens (\BotImportSpecification' {roleArn} -> roleArn) (\s@BotImportSpecification' {} a -> s {roleArn = a} :: BotImportSpecification)
+
+-- | Undocumented member.
+botImportSpecification_dataPrivacy :: Lens.Lens' BotImportSpecification DataPrivacy
+botImportSpecification_dataPrivacy = Lens.lens (\BotImportSpecification' {dataPrivacy} -> dataPrivacy) (\s@BotImportSpecification' {} a -> s {dataPrivacy = a} :: BotImportSpecification)
+
+instance Data.FromJSON BotImportSpecification where
+  parseJSON =
+    Data.withObject
+      "BotImportSpecification"
+      ( \x ->
+          BotImportSpecification'
+            Prelude.<$> (x Data..:? "botTags" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "idleSessionTTLInSeconds")
+            Prelude.<*> ( x
+                            Data..:? "testBotAliasTags"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> (x Data..: "botName")
+            Prelude.<*> (x Data..: "roleArn")
+            Prelude.<*> (x Data..: "dataPrivacy")
+      )
+
+instance Prelude.Hashable BotImportSpecification where
+  hashWithSalt _salt BotImportSpecification' {..} =
+    _salt
+      `Prelude.hashWithSalt` botTags
+      `Prelude.hashWithSalt` idleSessionTTLInSeconds
+      `Prelude.hashWithSalt` testBotAliasTags
+      `Prelude.hashWithSalt` botName
+      `Prelude.hashWithSalt` roleArn
+      `Prelude.hashWithSalt` dataPrivacy
+
+instance Prelude.NFData BotImportSpecification where
+  rnf BotImportSpecification' {..} =
+    Prelude.rnf botTags
+      `Prelude.seq` Prelude.rnf idleSessionTTLInSeconds
+      `Prelude.seq` Prelude.rnf testBotAliasTags
+      `Prelude.seq` Prelude.rnf botName
+      `Prelude.seq` Prelude.rnf roleArn
+      `Prelude.seq` Prelude.rnf dataPrivacy
+
+instance Data.ToJSON BotImportSpecification where
+  toJSON BotImportSpecification' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("botTags" Data..=) Prelude.<$> botTags,
+            ("idleSessionTTLInSeconds" Data..=)
+              Prelude.<$> idleSessionTTLInSeconds,
+            ("testBotAliasTags" Data..=)
+              Prelude.<$> testBotAliasTags,
+            Prelude.Just ("botName" Data..= botName),
+            Prelude.Just ("roleArn" Data..= roleArn),
+            Prelude.Just ("dataPrivacy" Data..= dataPrivacy)
+          ]
+      )
diff --git a/gen/Amazonka/LexV2Models/Types/BotLocaleExportSpecification.hs b/gen/Amazonka/LexV2Models/Types/BotLocaleExportSpecification.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/Types/BotLocaleExportSpecification.hs
@@ -0,0 +1,121 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.LexV2Models.Types.BotLocaleExportSpecification
+-- 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.LexV2Models.Types.BotLocaleExportSpecification 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
+
+-- | Provides the bot locale parameters required for exporting a bot locale.
+--
+-- /See:/ 'newBotLocaleExportSpecification' smart constructor.
+data BotLocaleExportSpecification = BotLocaleExportSpecification'
+  { -- | The identifier of the bot to create the locale for.
+    botId :: Prelude.Text,
+    -- | The version of the bot to export.
+    botVersion :: Prelude.Text,
+    -- | The identifier of the language and locale to export. The string must
+    -- match one of the locales in the bot.
+    localeId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'BotLocaleExportSpecification' 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:
+--
+-- 'botId', 'botLocaleExportSpecification_botId' - The identifier of the bot to create the locale for.
+--
+-- 'botVersion', 'botLocaleExportSpecification_botVersion' - The version of the bot to export.
+--
+-- 'localeId', 'botLocaleExportSpecification_localeId' - The identifier of the language and locale to export. The string must
+-- match one of the locales in the bot.
+newBotLocaleExportSpecification ::
+  -- | 'botId'
+  Prelude.Text ->
+  -- | 'botVersion'
+  Prelude.Text ->
+  -- | 'localeId'
+  Prelude.Text ->
+  BotLocaleExportSpecification
+newBotLocaleExportSpecification
+  pBotId_
+  pBotVersion_
+  pLocaleId_ =
+    BotLocaleExportSpecification'
+      { botId = pBotId_,
+        botVersion = pBotVersion_,
+        localeId = pLocaleId_
+      }
+
+-- | The identifier of the bot to create the locale for.
+botLocaleExportSpecification_botId :: Lens.Lens' BotLocaleExportSpecification Prelude.Text
+botLocaleExportSpecification_botId = Lens.lens (\BotLocaleExportSpecification' {botId} -> botId) (\s@BotLocaleExportSpecification' {} a -> s {botId = a} :: BotLocaleExportSpecification)
+
+-- | The version of the bot to export.
+botLocaleExportSpecification_botVersion :: Lens.Lens' BotLocaleExportSpecification Prelude.Text
+botLocaleExportSpecification_botVersion = Lens.lens (\BotLocaleExportSpecification' {botVersion} -> botVersion) (\s@BotLocaleExportSpecification' {} a -> s {botVersion = a} :: BotLocaleExportSpecification)
+
+-- | The identifier of the language and locale to export. The string must
+-- match one of the locales in the bot.
+botLocaleExportSpecification_localeId :: Lens.Lens' BotLocaleExportSpecification Prelude.Text
+botLocaleExportSpecification_localeId = Lens.lens (\BotLocaleExportSpecification' {localeId} -> localeId) (\s@BotLocaleExportSpecification' {} a -> s {localeId = a} :: BotLocaleExportSpecification)
+
+instance Data.FromJSON BotLocaleExportSpecification where
+  parseJSON =
+    Data.withObject
+      "BotLocaleExportSpecification"
+      ( \x ->
+          BotLocaleExportSpecification'
+            Prelude.<$> (x Data..: "botId")
+            Prelude.<*> (x Data..: "botVersion")
+            Prelude.<*> (x Data..: "localeId")
+      )
+
+instance
+  Prelude.Hashable
+    BotLocaleExportSpecification
+  where
+  hashWithSalt _salt BotLocaleExportSpecification' {..} =
+    _salt
+      `Prelude.hashWithSalt` botId
+      `Prelude.hashWithSalt` botVersion
+      `Prelude.hashWithSalt` localeId
+
+instance Prelude.NFData BotLocaleExportSpecification where
+  rnf BotLocaleExportSpecification' {..} =
+    Prelude.rnf botId
+      `Prelude.seq` Prelude.rnf botVersion
+      `Prelude.seq` Prelude.rnf localeId
+
+instance Data.ToJSON BotLocaleExportSpecification where
+  toJSON BotLocaleExportSpecification' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("botId" Data..= botId),
+            Prelude.Just ("botVersion" Data..= botVersion),
+            Prelude.Just ("localeId" Data..= localeId)
+          ]
+      )
diff --git a/gen/Amazonka/LexV2Models/Types/BotLocaleFilter.hs b/gen/Amazonka/LexV2Models/Types/BotLocaleFilter.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/Types/BotLocaleFilter.hs
@@ -0,0 +1,112 @@
+{-# 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.LexV2Models.Types.BotLocaleFilter
+-- 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.LexV2Models.Types.BotLocaleFilter where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LexV2Models.Types.BotLocaleFilterName
+import Amazonka.LexV2Models.Types.BotLocaleFilterOperator
+import qualified Amazonka.Prelude as Prelude
+
+-- | Filters responses returned by the @ListBotLocales@ operation.
+--
+-- /See:/ 'newBotLocaleFilter' smart constructor.
+data BotLocaleFilter = BotLocaleFilter'
+  { -- | The name of the field to filter the list of bots.
+    name :: BotLocaleFilterName,
+    -- | The value to use for filtering the list of bots.
+    values :: Prelude.NonEmpty Prelude.Text,
+    -- | The operator to use for the filter. Specify @EQ@ when the
+    -- @ListBotLocales@ operation should return only aliases that equal the
+    -- specified value. Specify @CO@ when the @ListBotLocales@ operation should
+    -- return aliases that contain the specified value.
+    operator :: BotLocaleFilterOperator
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'BotLocaleFilter' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'name', 'botLocaleFilter_name' - The name of the field to filter the list of bots.
+--
+-- 'values', 'botLocaleFilter_values' - The value to use for filtering the list of bots.
+--
+-- 'operator', 'botLocaleFilter_operator' - The operator to use for the filter. Specify @EQ@ when the
+-- @ListBotLocales@ operation should return only aliases that equal the
+-- specified value. Specify @CO@ when the @ListBotLocales@ operation should
+-- return aliases that contain the specified value.
+newBotLocaleFilter ::
+  -- | 'name'
+  BotLocaleFilterName ->
+  -- | 'values'
+  Prelude.NonEmpty Prelude.Text ->
+  -- | 'operator'
+  BotLocaleFilterOperator ->
+  BotLocaleFilter
+newBotLocaleFilter pName_ pValues_ pOperator_ =
+  BotLocaleFilter'
+    { name = pName_,
+      values = Lens.coerced Lens.# pValues_,
+      operator = pOperator_
+    }
+
+-- | The name of the field to filter the list of bots.
+botLocaleFilter_name :: Lens.Lens' BotLocaleFilter BotLocaleFilterName
+botLocaleFilter_name = Lens.lens (\BotLocaleFilter' {name} -> name) (\s@BotLocaleFilter' {} a -> s {name = a} :: BotLocaleFilter)
+
+-- | The value to use for filtering the list of bots.
+botLocaleFilter_values :: Lens.Lens' BotLocaleFilter (Prelude.NonEmpty Prelude.Text)
+botLocaleFilter_values = Lens.lens (\BotLocaleFilter' {values} -> values) (\s@BotLocaleFilter' {} a -> s {values = a} :: BotLocaleFilter) Prelude.. Lens.coerced
+
+-- | The operator to use for the filter. Specify @EQ@ when the
+-- @ListBotLocales@ operation should return only aliases that equal the
+-- specified value. Specify @CO@ when the @ListBotLocales@ operation should
+-- return aliases that contain the specified value.
+botLocaleFilter_operator :: Lens.Lens' BotLocaleFilter BotLocaleFilterOperator
+botLocaleFilter_operator = Lens.lens (\BotLocaleFilter' {operator} -> operator) (\s@BotLocaleFilter' {} a -> s {operator = a} :: BotLocaleFilter)
+
+instance Prelude.Hashable BotLocaleFilter where
+  hashWithSalt _salt BotLocaleFilter' {..} =
+    _salt
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` values
+      `Prelude.hashWithSalt` operator
+
+instance Prelude.NFData BotLocaleFilter where
+  rnf BotLocaleFilter' {..} =
+    Prelude.rnf name
+      `Prelude.seq` Prelude.rnf values
+      `Prelude.seq` Prelude.rnf operator
+
+instance Data.ToJSON BotLocaleFilter where
+  toJSON BotLocaleFilter' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("name" Data..= name),
+            Prelude.Just ("values" Data..= values),
+            Prelude.Just ("operator" Data..= operator)
+          ]
+      )
diff --git a/gen/Amazonka/LexV2Models/Types/BotLocaleFilterName.hs b/gen/Amazonka/LexV2Models/Types/BotLocaleFilterName.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/Types/BotLocaleFilterName.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.LexV2Models.Types.BotLocaleFilterName
+-- 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.LexV2Models.Types.BotLocaleFilterName
+  ( BotLocaleFilterName
+      ( ..,
+        BotLocaleFilterName_BotLocaleName
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype BotLocaleFilterName = BotLocaleFilterName'
+  { fromBotLocaleFilterName ::
+      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 BotLocaleFilterName_BotLocaleName :: BotLocaleFilterName
+pattern BotLocaleFilterName_BotLocaleName = BotLocaleFilterName' "BotLocaleName"
+
+{-# COMPLETE
+  BotLocaleFilterName_BotLocaleName,
+  BotLocaleFilterName'
+  #-}
diff --git a/gen/Amazonka/LexV2Models/Types/BotLocaleFilterOperator.hs b/gen/Amazonka/LexV2Models/Types/BotLocaleFilterOperator.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/Types/BotLocaleFilterOperator.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.LexV2Models.Types.BotLocaleFilterOperator
+-- 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.LexV2Models.Types.BotLocaleFilterOperator
+  ( BotLocaleFilterOperator
+      ( ..,
+        BotLocaleFilterOperator_CO,
+        BotLocaleFilterOperator_EQ
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype BotLocaleFilterOperator = BotLocaleFilterOperator'
+  { fromBotLocaleFilterOperator ::
+      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 BotLocaleFilterOperator_CO :: BotLocaleFilterOperator
+pattern BotLocaleFilterOperator_CO = BotLocaleFilterOperator' "CO"
+
+pattern BotLocaleFilterOperator_EQ :: BotLocaleFilterOperator
+pattern BotLocaleFilterOperator_EQ = BotLocaleFilterOperator' "EQ"
+
+{-# COMPLETE
+  BotLocaleFilterOperator_CO,
+  BotLocaleFilterOperator_EQ,
+  BotLocaleFilterOperator'
+  #-}
diff --git a/gen/Amazonka/LexV2Models/Types/BotLocaleHistoryEvent.hs b/gen/Amazonka/LexV2Models/Types/BotLocaleHistoryEvent.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/Types/BotLocaleHistoryEvent.hs
@@ -0,0 +1,89 @@
+{-# 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.LexV2Models.Types.BotLocaleHistoryEvent
+-- 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.LexV2Models.Types.BotLocaleHistoryEvent 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
+
+-- | Provides information about an event that occurred affecting the bot
+-- locale.
+--
+-- /See:/ 'newBotLocaleHistoryEvent' smart constructor.
+data BotLocaleHistoryEvent = BotLocaleHistoryEvent'
+  { -- | A description of the event that occurred.
+    event :: Prelude.Text,
+    -- | A timestamp of the date and time that the event occurred.
+    eventDate :: Data.POSIX
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'BotLocaleHistoryEvent' 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:
+--
+-- 'event', 'botLocaleHistoryEvent_event' - A description of the event that occurred.
+--
+-- 'eventDate', 'botLocaleHistoryEvent_eventDate' - A timestamp of the date and time that the event occurred.
+newBotLocaleHistoryEvent ::
+  -- | 'event'
+  Prelude.Text ->
+  -- | 'eventDate'
+  Prelude.UTCTime ->
+  BotLocaleHistoryEvent
+newBotLocaleHistoryEvent pEvent_ pEventDate_ =
+  BotLocaleHistoryEvent'
+    { event = pEvent_,
+      eventDate = Data._Time Lens.# pEventDate_
+    }
+
+-- | A description of the event that occurred.
+botLocaleHistoryEvent_event :: Lens.Lens' BotLocaleHistoryEvent Prelude.Text
+botLocaleHistoryEvent_event = Lens.lens (\BotLocaleHistoryEvent' {event} -> event) (\s@BotLocaleHistoryEvent' {} a -> s {event = a} :: BotLocaleHistoryEvent)
+
+-- | A timestamp of the date and time that the event occurred.
+botLocaleHistoryEvent_eventDate :: Lens.Lens' BotLocaleHistoryEvent Prelude.UTCTime
+botLocaleHistoryEvent_eventDate = Lens.lens (\BotLocaleHistoryEvent' {eventDate} -> eventDate) (\s@BotLocaleHistoryEvent' {} a -> s {eventDate = a} :: BotLocaleHistoryEvent) Prelude.. Data._Time
+
+instance Data.FromJSON BotLocaleHistoryEvent where
+  parseJSON =
+    Data.withObject
+      "BotLocaleHistoryEvent"
+      ( \x ->
+          BotLocaleHistoryEvent'
+            Prelude.<$> (x Data..: "event")
+            Prelude.<*> (x Data..: "eventDate")
+      )
+
+instance Prelude.Hashable BotLocaleHistoryEvent where
+  hashWithSalt _salt BotLocaleHistoryEvent' {..} =
+    _salt
+      `Prelude.hashWithSalt` event
+      `Prelude.hashWithSalt` eventDate
+
+instance Prelude.NFData BotLocaleHistoryEvent where
+  rnf BotLocaleHistoryEvent' {..} =
+    Prelude.rnf event
+      `Prelude.seq` Prelude.rnf eventDate
diff --git a/gen/Amazonka/LexV2Models/Types/BotLocaleImportSpecification.hs b/gen/Amazonka/LexV2Models/Types/BotLocaleImportSpecification.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/Types/BotLocaleImportSpecification.hs
@@ -0,0 +1,215 @@
+{-# 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.LexV2Models.Types.BotLocaleImportSpecification
+-- 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.LexV2Models.Types.BotLocaleImportSpecification where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LexV2Models.Types.VoiceSettings
+import qualified Amazonka.Prelude as Prelude
+
+-- | Provides the bot locale parameters required for importing a bot locale.
+--
+-- /See:/ 'newBotLocaleImportSpecification' smart constructor.
+data BotLocaleImportSpecification = BotLocaleImportSpecification'
+  { -- | Determines the threshold where Amazon Lex will insert the
+    -- @AMAZON.FallbackIntent@, @AMAZON.KendraSearchIntent@, or both when
+    -- returning alternative intents. @AMAZON.FallbackIntent@ and
+    -- @AMAZON.KendraSearchIntent@ are only inserted if they are configured for
+    -- the bot.
+    --
+    -- For example, suppose a bot is configured with the confidence threshold
+    -- of 0.80 and the @AMAZON.FallbackIntent@. Amazon Lex returns three
+    -- alternative intents with the following confidence scores: IntentA
+    -- (0.70), IntentB (0.60), IntentC (0.50). The response from the @PostText@
+    -- operation would be:
+    --
+    -- -   @AMAZON.FallbackIntent@
+    --
+    -- -   @IntentA@
+    --
+    -- -   @IntentB@
+    --
+    -- -   @IntentC@
+    nluIntentConfidenceThreshold :: Prelude.Maybe Prelude.Double,
+    voiceSettings :: Prelude.Maybe VoiceSettings,
+    -- | The identifier of the bot to import the locale to.
+    botId :: Prelude.Text,
+    -- | The version of the bot to import the locale to. This can only be the
+    -- @DRAFT@ version of the bot.
+    botVersion :: Prelude.Text,
+    -- | The identifier of the language and locale that the bot will be used in.
+    -- The string must match one of the supported locales. All of the intents,
+    -- slot types, and slots used in the bot must have the same locale. For
+    -- more information, see
+    -- <https://docs.aws.amazon.com/lexv2/latest/dg/how-languages.html Supported languages>.
+    localeId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'BotLocaleImportSpecification' 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:
+--
+-- 'nluIntentConfidenceThreshold', 'botLocaleImportSpecification_nluIntentConfidenceThreshold' - Determines the threshold where Amazon Lex will insert the
+-- @AMAZON.FallbackIntent@, @AMAZON.KendraSearchIntent@, or both when
+-- returning alternative intents. @AMAZON.FallbackIntent@ and
+-- @AMAZON.KendraSearchIntent@ are only inserted if they are configured for
+-- the bot.
+--
+-- For example, suppose a bot is configured with the confidence threshold
+-- of 0.80 and the @AMAZON.FallbackIntent@. Amazon Lex returns three
+-- alternative intents with the following confidence scores: IntentA
+-- (0.70), IntentB (0.60), IntentC (0.50). The response from the @PostText@
+-- operation would be:
+--
+-- -   @AMAZON.FallbackIntent@
+--
+-- -   @IntentA@
+--
+-- -   @IntentB@
+--
+-- -   @IntentC@
+--
+-- 'voiceSettings', 'botLocaleImportSpecification_voiceSettings' - Undocumented member.
+--
+-- 'botId', 'botLocaleImportSpecification_botId' - The identifier of the bot to import the locale to.
+--
+-- 'botVersion', 'botLocaleImportSpecification_botVersion' - The version of the bot to import the locale to. This can only be the
+-- @DRAFT@ version of the bot.
+--
+-- 'localeId', 'botLocaleImportSpecification_localeId' - The identifier of the language and locale that the bot will be used in.
+-- The string must match one of the supported locales. All of the intents,
+-- slot types, and slots used in the bot must have the same locale. For
+-- more information, see
+-- <https://docs.aws.amazon.com/lexv2/latest/dg/how-languages.html Supported languages>.
+newBotLocaleImportSpecification ::
+  -- | 'botId'
+  Prelude.Text ->
+  -- | 'botVersion'
+  Prelude.Text ->
+  -- | 'localeId'
+  Prelude.Text ->
+  BotLocaleImportSpecification
+newBotLocaleImportSpecification
+  pBotId_
+  pBotVersion_
+  pLocaleId_ =
+    BotLocaleImportSpecification'
+      { nluIntentConfidenceThreshold =
+          Prelude.Nothing,
+        voiceSettings = Prelude.Nothing,
+        botId = pBotId_,
+        botVersion = pBotVersion_,
+        localeId = pLocaleId_
+      }
+
+-- | Determines the threshold where Amazon Lex will insert the
+-- @AMAZON.FallbackIntent@, @AMAZON.KendraSearchIntent@, or both when
+-- returning alternative intents. @AMAZON.FallbackIntent@ and
+-- @AMAZON.KendraSearchIntent@ are only inserted if they are configured for
+-- the bot.
+--
+-- For example, suppose a bot is configured with the confidence threshold
+-- of 0.80 and the @AMAZON.FallbackIntent@. Amazon Lex returns three
+-- alternative intents with the following confidence scores: IntentA
+-- (0.70), IntentB (0.60), IntentC (0.50). The response from the @PostText@
+-- operation would be:
+--
+-- -   @AMAZON.FallbackIntent@
+--
+-- -   @IntentA@
+--
+-- -   @IntentB@
+--
+-- -   @IntentC@
+botLocaleImportSpecification_nluIntentConfidenceThreshold :: Lens.Lens' BotLocaleImportSpecification (Prelude.Maybe Prelude.Double)
+botLocaleImportSpecification_nluIntentConfidenceThreshold = Lens.lens (\BotLocaleImportSpecification' {nluIntentConfidenceThreshold} -> nluIntentConfidenceThreshold) (\s@BotLocaleImportSpecification' {} a -> s {nluIntentConfidenceThreshold = a} :: BotLocaleImportSpecification)
+
+-- | Undocumented member.
+botLocaleImportSpecification_voiceSettings :: Lens.Lens' BotLocaleImportSpecification (Prelude.Maybe VoiceSettings)
+botLocaleImportSpecification_voiceSettings = Lens.lens (\BotLocaleImportSpecification' {voiceSettings} -> voiceSettings) (\s@BotLocaleImportSpecification' {} a -> s {voiceSettings = a} :: BotLocaleImportSpecification)
+
+-- | The identifier of the bot to import the locale to.
+botLocaleImportSpecification_botId :: Lens.Lens' BotLocaleImportSpecification Prelude.Text
+botLocaleImportSpecification_botId = Lens.lens (\BotLocaleImportSpecification' {botId} -> botId) (\s@BotLocaleImportSpecification' {} a -> s {botId = a} :: BotLocaleImportSpecification)
+
+-- | The version of the bot to import the locale to. This can only be the
+-- @DRAFT@ version of the bot.
+botLocaleImportSpecification_botVersion :: Lens.Lens' BotLocaleImportSpecification Prelude.Text
+botLocaleImportSpecification_botVersion = Lens.lens (\BotLocaleImportSpecification' {botVersion} -> botVersion) (\s@BotLocaleImportSpecification' {} a -> s {botVersion = a} :: BotLocaleImportSpecification)
+
+-- | The identifier of the language and locale that the bot will be used in.
+-- The string must match one of the supported locales. All of the intents,
+-- slot types, and slots used in the bot must have the same locale. For
+-- more information, see
+-- <https://docs.aws.amazon.com/lexv2/latest/dg/how-languages.html Supported languages>.
+botLocaleImportSpecification_localeId :: Lens.Lens' BotLocaleImportSpecification Prelude.Text
+botLocaleImportSpecification_localeId = Lens.lens (\BotLocaleImportSpecification' {localeId} -> localeId) (\s@BotLocaleImportSpecification' {} a -> s {localeId = a} :: BotLocaleImportSpecification)
+
+instance Data.FromJSON BotLocaleImportSpecification where
+  parseJSON =
+    Data.withObject
+      "BotLocaleImportSpecification"
+      ( \x ->
+          BotLocaleImportSpecification'
+            Prelude.<$> (x Data..:? "nluIntentConfidenceThreshold")
+            Prelude.<*> (x Data..:? "voiceSettings")
+            Prelude.<*> (x Data..: "botId")
+            Prelude.<*> (x Data..: "botVersion")
+            Prelude.<*> (x Data..: "localeId")
+      )
+
+instance
+  Prelude.Hashable
+    BotLocaleImportSpecification
+  where
+  hashWithSalt _salt BotLocaleImportSpecification' {..} =
+    _salt
+      `Prelude.hashWithSalt` nluIntentConfidenceThreshold
+      `Prelude.hashWithSalt` voiceSettings
+      `Prelude.hashWithSalt` botId
+      `Prelude.hashWithSalt` botVersion
+      `Prelude.hashWithSalt` localeId
+
+instance Prelude.NFData BotLocaleImportSpecification where
+  rnf BotLocaleImportSpecification' {..} =
+    Prelude.rnf nluIntentConfidenceThreshold
+      `Prelude.seq` Prelude.rnf voiceSettings
+      `Prelude.seq` Prelude.rnf botId
+      `Prelude.seq` Prelude.rnf botVersion
+      `Prelude.seq` Prelude.rnf localeId
+
+instance Data.ToJSON BotLocaleImportSpecification where
+  toJSON BotLocaleImportSpecification' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("nluIntentConfidenceThreshold" Data..=)
+              Prelude.<$> nluIntentConfidenceThreshold,
+            ("voiceSettings" Data..=) Prelude.<$> voiceSettings,
+            Prelude.Just ("botId" Data..= botId),
+            Prelude.Just ("botVersion" Data..= botVersion),
+            Prelude.Just ("localeId" Data..= localeId)
+          ]
+      )
diff --git a/gen/Amazonka/LexV2Models/Types/BotLocaleSortAttribute.hs b/gen/Amazonka/LexV2Models/Types/BotLocaleSortAttribute.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/Types/BotLocaleSortAttribute.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.LexV2Models.Types.BotLocaleSortAttribute
+-- 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.LexV2Models.Types.BotLocaleSortAttribute
+  ( BotLocaleSortAttribute
+      ( ..,
+        BotLocaleSortAttribute_BotLocaleName
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype BotLocaleSortAttribute = BotLocaleSortAttribute'
+  { fromBotLocaleSortAttribute ::
+      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 BotLocaleSortAttribute_BotLocaleName :: BotLocaleSortAttribute
+pattern BotLocaleSortAttribute_BotLocaleName = BotLocaleSortAttribute' "BotLocaleName"
+
+{-# COMPLETE
+  BotLocaleSortAttribute_BotLocaleName,
+  BotLocaleSortAttribute'
+  #-}
diff --git a/gen/Amazonka/LexV2Models/Types/BotLocaleSortBy.hs b/gen/Amazonka/LexV2Models/Types/BotLocaleSortBy.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/Types/BotLocaleSortBy.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.LexV2Models.Types.BotLocaleSortBy
+-- 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.LexV2Models.Types.BotLocaleSortBy where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LexV2Models.Types.BotLocaleSortAttribute
+import Amazonka.LexV2Models.Types.SortOrder
+import qualified Amazonka.Prelude as Prelude
+
+-- | Specifies attributes for sorting a list of bot locales.
+--
+-- /See:/ 'newBotLocaleSortBy' smart constructor.
+data BotLocaleSortBy = BotLocaleSortBy'
+  { -- | The bot locale attribute to sort by.
+    attribute :: BotLocaleSortAttribute,
+    -- | Specifies whether to sort the bot locales in ascending or descending
+    -- order.
+    order :: SortOrder
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'BotLocaleSortBy' 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:
+--
+-- 'attribute', 'botLocaleSortBy_attribute' - The bot locale attribute to sort by.
+--
+-- 'order', 'botLocaleSortBy_order' - Specifies whether to sort the bot locales in ascending or descending
+-- order.
+newBotLocaleSortBy ::
+  -- | 'attribute'
+  BotLocaleSortAttribute ->
+  -- | 'order'
+  SortOrder ->
+  BotLocaleSortBy
+newBotLocaleSortBy pAttribute_ pOrder_ =
+  BotLocaleSortBy'
+    { attribute = pAttribute_,
+      order = pOrder_
+    }
+
+-- | The bot locale attribute to sort by.
+botLocaleSortBy_attribute :: Lens.Lens' BotLocaleSortBy BotLocaleSortAttribute
+botLocaleSortBy_attribute = Lens.lens (\BotLocaleSortBy' {attribute} -> attribute) (\s@BotLocaleSortBy' {} a -> s {attribute = a} :: BotLocaleSortBy)
+
+-- | Specifies whether to sort the bot locales in ascending or descending
+-- order.
+botLocaleSortBy_order :: Lens.Lens' BotLocaleSortBy SortOrder
+botLocaleSortBy_order = Lens.lens (\BotLocaleSortBy' {order} -> order) (\s@BotLocaleSortBy' {} a -> s {order = a} :: BotLocaleSortBy)
+
+instance Prelude.Hashable BotLocaleSortBy where
+  hashWithSalt _salt BotLocaleSortBy' {..} =
+    _salt
+      `Prelude.hashWithSalt` attribute
+      `Prelude.hashWithSalt` order
+
+instance Prelude.NFData BotLocaleSortBy where
+  rnf BotLocaleSortBy' {..} =
+    Prelude.rnf attribute
+      `Prelude.seq` Prelude.rnf order
+
+instance Data.ToJSON BotLocaleSortBy where
+  toJSON BotLocaleSortBy' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("attribute" Data..= attribute),
+            Prelude.Just ("order" Data..= order)
+          ]
+      )
diff --git a/gen/Amazonka/LexV2Models/Types/BotLocaleStatus.hs b/gen/Amazonka/LexV2Models/Types/BotLocaleStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/Types/BotLocaleStatus.hs
@@ -0,0 +1,106 @@
+{-# 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.LexV2Models.Types.BotLocaleStatus
+-- 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.LexV2Models.Types.BotLocaleStatus
+  ( BotLocaleStatus
+      ( ..,
+        BotLocaleStatus_Building,
+        BotLocaleStatus_Built,
+        BotLocaleStatus_Creating,
+        BotLocaleStatus_Deleting,
+        BotLocaleStatus_Failed,
+        BotLocaleStatus_Importing,
+        BotLocaleStatus_NotBuilt,
+        BotLocaleStatus_Processing,
+        BotLocaleStatus_ReadyExpressTesting
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype BotLocaleStatus = BotLocaleStatus'
+  { fromBotLocaleStatus ::
+      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 BotLocaleStatus_Building :: BotLocaleStatus
+pattern BotLocaleStatus_Building = BotLocaleStatus' "Building"
+
+pattern BotLocaleStatus_Built :: BotLocaleStatus
+pattern BotLocaleStatus_Built = BotLocaleStatus' "Built"
+
+pattern BotLocaleStatus_Creating :: BotLocaleStatus
+pattern BotLocaleStatus_Creating = BotLocaleStatus' "Creating"
+
+pattern BotLocaleStatus_Deleting :: BotLocaleStatus
+pattern BotLocaleStatus_Deleting = BotLocaleStatus' "Deleting"
+
+pattern BotLocaleStatus_Failed :: BotLocaleStatus
+pattern BotLocaleStatus_Failed = BotLocaleStatus' "Failed"
+
+pattern BotLocaleStatus_Importing :: BotLocaleStatus
+pattern BotLocaleStatus_Importing = BotLocaleStatus' "Importing"
+
+pattern BotLocaleStatus_NotBuilt :: BotLocaleStatus
+pattern BotLocaleStatus_NotBuilt = BotLocaleStatus' "NotBuilt"
+
+pattern BotLocaleStatus_Processing :: BotLocaleStatus
+pattern BotLocaleStatus_Processing = BotLocaleStatus' "Processing"
+
+pattern BotLocaleStatus_ReadyExpressTesting :: BotLocaleStatus
+pattern BotLocaleStatus_ReadyExpressTesting = BotLocaleStatus' "ReadyExpressTesting"
+
+{-# COMPLETE
+  BotLocaleStatus_Building,
+  BotLocaleStatus_Built,
+  BotLocaleStatus_Creating,
+  BotLocaleStatus_Deleting,
+  BotLocaleStatus_Failed,
+  BotLocaleStatus_Importing,
+  BotLocaleStatus_NotBuilt,
+  BotLocaleStatus_Processing,
+  BotLocaleStatus_ReadyExpressTesting,
+  BotLocaleStatus'
+  #-}
diff --git a/gen/Amazonka/LexV2Models/Types/BotLocaleSummary.hs b/gen/Amazonka/LexV2Models/Types/BotLocaleSummary.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/Types/BotLocaleSummary.hs
@@ -0,0 +1,139 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.LexV2Models.Types.BotLocaleSummary
+-- 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.LexV2Models.Types.BotLocaleSummary where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LexV2Models.Types.BotLocaleStatus
+import qualified Amazonka.Prelude as Prelude
+
+-- | Summary information about bot locales returned by the
+-- <https://docs.aws.amazon.com/lexv2/latest/dg/API_ListBotLocales.html ListBotLocales>
+-- operation.
+--
+-- /See:/ 'newBotLocaleSummary' smart constructor.
+data BotLocaleSummary = BotLocaleSummary'
+  { -- | The current status of the bot locale. When the status is @Built@ the
+    -- locale is ready for use.
+    botLocaleStatus :: Prelude.Maybe BotLocaleStatus,
+    -- | The description of the bot locale.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | A timestamp of the date and time that the bot locale was last built.
+    lastBuildSubmittedDateTime :: Prelude.Maybe Data.POSIX,
+    -- | A timestamp of the date and time that the bot locale was last updated.
+    lastUpdatedDateTime :: Prelude.Maybe Data.POSIX,
+    -- | The language and locale of the bot locale.
+    localeId :: Prelude.Maybe Prelude.Text,
+    -- | The name of the bot locale.
+    localeName :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'BotLocaleSummary' 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:
+--
+-- 'botLocaleStatus', 'botLocaleSummary_botLocaleStatus' - The current status of the bot locale. When the status is @Built@ the
+-- locale is ready for use.
+--
+-- 'description', 'botLocaleSummary_description' - The description of the bot locale.
+--
+-- 'lastBuildSubmittedDateTime', 'botLocaleSummary_lastBuildSubmittedDateTime' - A timestamp of the date and time that the bot locale was last built.
+--
+-- 'lastUpdatedDateTime', 'botLocaleSummary_lastUpdatedDateTime' - A timestamp of the date and time that the bot locale was last updated.
+--
+-- 'localeId', 'botLocaleSummary_localeId' - The language and locale of the bot locale.
+--
+-- 'localeName', 'botLocaleSummary_localeName' - The name of the bot locale.
+newBotLocaleSummary ::
+  BotLocaleSummary
+newBotLocaleSummary =
+  BotLocaleSummary'
+    { botLocaleStatus =
+        Prelude.Nothing,
+      description = Prelude.Nothing,
+      lastBuildSubmittedDateTime = Prelude.Nothing,
+      lastUpdatedDateTime = Prelude.Nothing,
+      localeId = Prelude.Nothing,
+      localeName = Prelude.Nothing
+    }
+
+-- | The current status of the bot locale. When the status is @Built@ the
+-- locale is ready for use.
+botLocaleSummary_botLocaleStatus :: Lens.Lens' BotLocaleSummary (Prelude.Maybe BotLocaleStatus)
+botLocaleSummary_botLocaleStatus = Lens.lens (\BotLocaleSummary' {botLocaleStatus} -> botLocaleStatus) (\s@BotLocaleSummary' {} a -> s {botLocaleStatus = a} :: BotLocaleSummary)
+
+-- | The description of the bot locale.
+botLocaleSummary_description :: Lens.Lens' BotLocaleSummary (Prelude.Maybe Prelude.Text)
+botLocaleSummary_description = Lens.lens (\BotLocaleSummary' {description} -> description) (\s@BotLocaleSummary' {} a -> s {description = a} :: BotLocaleSummary)
+
+-- | A timestamp of the date and time that the bot locale was last built.
+botLocaleSummary_lastBuildSubmittedDateTime :: Lens.Lens' BotLocaleSummary (Prelude.Maybe Prelude.UTCTime)
+botLocaleSummary_lastBuildSubmittedDateTime = Lens.lens (\BotLocaleSummary' {lastBuildSubmittedDateTime} -> lastBuildSubmittedDateTime) (\s@BotLocaleSummary' {} a -> s {lastBuildSubmittedDateTime = a} :: BotLocaleSummary) Prelude.. Lens.mapping Data._Time
+
+-- | A timestamp of the date and time that the bot locale was last updated.
+botLocaleSummary_lastUpdatedDateTime :: Lens.Lens' BotLocaleSummary (Prelude.Maybe Prelude.UTCTime)
+botLocaleSummary_lastUpdatedDateTime = Lens.lens (\BotLocaleSummary' {lastUpdatedDateTime} -> lastUpdatedDateTime) (\s@BotLocaleSummary' {} a -> s {lastUpdatedDateTime = a} :: BotLocaleSummary) Prelude.. Lens.mapping Data._Time
+
+-- | The language and locale of the bot locale.
+botLocaleSummary_localeId :: Lens.Lens' BotLocaleSummary (Prelude.Maybe Prelude.Text)
+botLocaleSummary_localeId = Lens.lens (\BotLocaleSummary' {localeId} -> localeId) (\s@BotLocaleSummary' {} a -> s {localeId = a} :: BotLocaleSummary)
+
+-- | The name of the bot locale.
+botLocaleSummary_localeName :: Lens.Lens' BotLocaleSummary (Prelude.Maybe Prelude.Text)
+botLocaleSummary_localeName = Lens.lens (\BotLocaleSummary' {localeName} -> localeName) (\s@BotLocaleSummary' {} a -> s {localeName = a} :: BotLocaleSummary)
+
+instance Data.FromJSON BotLocaleSummary where
+  parseJSON =
+    Data.withObject
+      "BotLocaleSummary"
+      ( \x ->
+          BotLocaleSummary'
+            Prelude.<$> (x Data..:? "botLocaleStatus")
+            Prelude.<*> (x Data..:? "description")
+            Prelude.<*> (x Data..:? "lastBuildSubmittedDateTime")
+            Prelude.<*> (x Data..:? "lastUpdatedDateTime")
+            Prelude.<*> (x Data..:? "localeId")
+            Prelude.<*> (x Data..:? "localeName")
+      )
+
+instance Prelude.Hashable BotLocaleSummary where
+  hashWithSalt _salt BotLocaleSummary' {..} =
+    _salt
+      `Prelude.hashWithSalt` botLocaleStatus
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` lastBuildSubmittedDateTime
+      `Prelude.hashWithSalt` lastUpdatedDateTime
+      `Prelude.hashWithSalt` localeId
+      `Prelude.hashWithSalt` localeName
+
+instance Prelude.NFData BotLocaleSummary where
+  rnf BotLocaleSummary' {..} =
+    Prelude.rnf botLocaleStatus
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf lastBuildSubmittedDateTime
+      `Prelude.seq` Prelude.rnf lastUpdatedDateTime
+      `Prelude.seq` Prelude.rnf localeId
+      `Prelude.seq` Prelude.rnf localeName
diff --git a/gen/Amazonka/LexV2Models/Types/BotRecommendationResultStatistics.hs b/gen/Amazonka/LexV2Models/Types/BotRecommendationResultStatistics.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/Types/BotRecommendationResultStatistics.hs
@@ -0,0 +1,104 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.LexV2Models.Types.BotRecommendationResultStatistics
+-- 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.LexV2Models.Types.BotRecommendationResultStatistics where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LexV2Models.Types.IntentStatistics
+import Amazonka.LexV2Models.Types.SlotTypeStatistics
+import qualified Amazonka.Prelude as Prelude
+
+-- | A statistical summary of the bot recommendation results.
+--
+-- /See:/ 'newBotRecommendationResultStatistics' smart constructor.
+data BotRecommendationResultStatistics = BotRecommendationResultStatistics'
+  { -- | Statistical information about about the intents associated with the bot
+    -- recommendation results.
+    intents :: Prelude.Maybe IntentStatistics,
+    -- | Statistical information about the slot types associated with the bot
+    -- recommendation results.
+    slotTypes :: Prelude.Maybe SlotTypeStatistics
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'BotRecommendationResultStatistics' 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:
+--
+-- 'intents', 'botRecommendationResultStatistics_intents' - Statistical information about about the intents associated with the bot
+-- recommendation results.
+--
+-- 'slotTypes', 'botRecommendationResultStatistics_slotTypes' - Statistical information about the slot types associated with the bot
+-- recommendation results.
+newBotRecommendationResultStatistics ::
+  BotRecommendationResultStatistics
+newBotRecommendationResultStatistics =
+  BotRecommendationResultStatistics'
+    { intents =
+        Prelude.Nothing,
+      slotTypes = Prelude.Nothing
+    }
+
+-- | Statistical information about about the intents associated with the bot
+-- recommendation results.
+botRecommendationResultStatistics_intents :: Lens.Lens' BotRecommendationResultStatistics (Prelude.Maybe IntentStatistics)
+botRecommendationResultStatistics_intents = Lens.lens (\BotRecommendationResultStatistics' {intents} -> intents) (\s@BotRecommendationResultStatistics' {} a -> s {intents = a} :: BotRecommendationResultStatistics)
+
+-- | Statistical information about the slot types associated with the bot
+-- recommendation results.
+botRecommendationResultStatistics_slotTypes :: Lens.Lens' BotRecommendationResultStatistics (Prelude.Maybe SlotTypeStatistics)
+botRecommendationResultStatistics_slotTypes = Lens.lens (\BotRecommendationResultStatistics' {slotTypes} -> slotTypes) (\s@BotRecommendationResultStatistics' {} a -> s {slotTypes = a} :: BotRecommendationResultStatistics)
+
+instance
+  Data.FromJSON
+    BotRecommendationResultStatistics
+  where
+  parseJSON =
+    Data.withObject
+      "BotRecommendationResultStatistics"
+      ( \x ->
+          BotRecommendationResultStatistics'
+            Prelude.<$> (x Data..:? "intents")
+            Prelude.<*> (x Data..:? "slotTypes")
+      )
+
+instance
+  Prelude.Hashable
+    BotRecommendationResultStatistics
+  where
+  hashWithSalt
+    _salt
+    BotRecommendationResultStatistics' {..} =
+      _salt
+        `Prelude.hashWithSalt` intents
+        `Prelude.hashWithSalt` slotTypes
+
+instance
+  Prelude.NFData
+    BotRecommendationResultStatistics
+  where
+  rnf BotRecommendationResultStatistics' {..} =
+    Prelude.rnf intents
+      `Prelude.seq` Prelude.rnf slotTypes
diff --git a/gen/Amazonka/LexV2Models/Types/BotRecommendationResults.hs b/gen/Amazonka/LexV2Models/Types/BotRecommendationResults.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/Types/BotRecommendationResults.hs
@@ -0,0 +1,100 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.LexV2Models.Types.BotRecommendationResults
+-- 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.LexV2Models.Types.BotRecommendationResults where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LexV2Models.Types.BotRecommendationResultStatistics
+import qualified Amazonka.Prelude as Prelude
+
+-- | The object representing the URL of the bot definition, the URL of the
+-- associated transcript, and a statistical summary of the bot
+-- recommendation results.
+--
+-- /See:/ 'newBotRecommendationResults' smart constructor.
+data BotRecommendationResults = BotRecommendationResults'
+  { -- | The presigned url link of the associated transcript.
+    associatedTranscriptsUrl :: Prelude.Maybe Prelude.Text,
+    -- | The presigned URL link of the recommended bot definition.
+    botLocaleExportUrl :: Prelude.Maybe Prelude.Text,
+    -- | The statistical summary of the bot recommendation results.
+    statistics :: Prelude.Maybe BotRecommendationResultStatistics
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'BotRecommendationResults' 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:
+--
+-- 'associatedTranscriptsUrl', 'botRecommendationResults_associatedTranscriptsUrl' - The presigned url link of the associated transcript.
+--
+-- 'botLocaleExportUrl', 'botRecommendationResults_botLocaleExportUrl' - The presigned URL link of the recommended bot definition.
+--
+-- 'statistics', 'botRecommendationResults_statistics' - The statistical summary of the bot recommendation results.
+newBotRecommendationResults ::
+  BotRecommendationResults
+newBotRecommendationResults =
+  BotRecommendationResults'
+    { associatedTranscriptsUrl =
+        Prelude.Nothing,
+      botLocaleExportUrl = Prelude.Nothing,
+      statistics = Prelude.Nothing
+    }
+
+-- | The presigned url link of the associated transcript.
+botRecommendationResults_associatedTranscriptsUrl :: Lens.Lens' BotRecommendationResults (Prelude.Maybe Prelude.Text)
+botRecommendationResults_associatedTranscriptsUrl = Lens.lens (\BotRecommendationResults' {associatedTranscriptsUrl} -> associatedTranscriptsUrl) (\s@BotRecommendationResults' {} a -> s {associatedTranscriptsUrl = a} :: BotRecommendationResults)
+
+-- | The presigned URL link of the recommended bot definition.
+botRecommendationResults_botLocaleExportUrl :: Lens.Lens' BotRecommendationResults (Prelude.Maybe Prelude.Text)
+botRecommendationResults_botLocaleExportUrl = Lens.lens (\BotRecommendationResults' {botLocaleExportUrl} -> botLocaleExportUrl) (\s@BotRecommendationResults' {} a -> s {botLocaleExportUrl = a} :: BotRecommendationResults)
+
+-- | The statistical summary of the bot recommendation results.
+botRecommendationResults_statistics :: Lens.Lens' BotRecommendationResults (Prelude.Maybe BotRecommendationResultStatistics)
+botRecommendationResults_statistics = Lens.lens (\BotRecommendationResults' {statistics} -> statistics) (\s@BotRecommendationResults' {} a -> s {statistics = a} :: BotRecommendationResults)
+
+instance Data.FromJSON BotRecommendationResults where
+  parseJSON =
+    Data.withObject
+      "BotRecommendationResults"
+      ( \x ->
+          BotRecommendationResults'
+            Prelude.<$> (x Data..:? "associatedTranscriptsUrl")
+            Prelude.<*> (x Data..:? "botLocaleExportUrl")
+            Prelude.<*> (x Data..:? "statistics")
+      )
+
+instance Prelude.Hashable BotRecommendationResults where
+  hashWithSalt _salt BotRecommendationResults' {..} =
+    _salt
+      `Prelude.hashWithSalt` associatedTranscriptsUrl
+      `Prelude.hashWithSalt` botLocaleExportUrl
+      `Prelude.hashWithSalt` statistics
+
+instance Prelude.NFData BotRecommendationResults where
+  rnf BotRecommendationResults' {..} =
+    Prelude.rnf associatedTranscriptsUrl
+      `Prelude.seq` Prelude.rnf botLocaleExportUrl
+      `Prelude.seq` Prelude.rnf statistics
diff --git a/gen/Amazonka/LexV2Models/Types/BotRecommendationStatus.hs b/gen/Amazonka/LexV2Models/Types/BotRecommendationStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/Types/BotRecommendationStatus.hs
@@ -0,0 +1,106 @@
+{-# 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.LexV2Models.Types.BotRecommendationStatus
+-- 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.LexV2Models.Types.BotRecommendationStatus
+  ( BotRecommendationStatus
+      ( ..,
+        BotRecommendationStatus_Available,
+        BotRecommendationStatus_Deleted,
+        BotRecommendationStatus_Deleting,
+        BotRecommendationStatus_Downloading,
+        BotRecommendationStatus_Failed,
+        BotRecommendationStatus_Processing,
+        BotRecommendationStatus_Stopped,
+        BotRecommendationStatus_Stopping,
+        BotRecommendationStatus_Updating
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype BotRecommendationStatus = BotRecommendationStatus'
+  { fromBotRecommendationStatus ::
+      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 BotRecommendationStatus_Available :: BotRecommendationStatus
+pattern BotRecommendationStatus_Available = BotRecommendationStatus' "Available"
+
+pattern BotRecommendationStatus_Deleted :: BotRecommendationStatus
+pattern BotRecommendationStatus_Deleted = BotRecommendationStatus' "Deleted"
+
+pattern BotRecommendationStatus_Deleting :: BotRecommendationStatus
+pattern BotRecommendationStatus_Deleting = BotRecommendationStatus' "Deleting"
+
+pattern BotRecommendationStatus_Downloading :: BotRecommendationStatus
+pattern BotRecommendationStatus_Downloading = BotRecommendationStatus' "Downloading"
+
+pattern BotRecommendationStatus_Failed :: BotRecommendationStatus
+pattern BotRecommendationStatus_Failed = BotRecommendationStatus' "Failed"
+
+pattern BotRecommendationStatus_Processing :: BotRecommendationStatus
+pattern BotRecommendationStatus_Processing = BotRecommendationStatus' "Processing"
+
+pattern BotRecommendationStatus_Stopped :: BotRecommendationStatus
+pattern BotRecommendationStatus_Stopped = BotRecommendationStatus' "Stopped"
+
+pattern BotRecommendationStatus_Stopping :: BotRecommendationStatus
+pattern BotRecommendationStatus_Stopping = BotRecommendationStatus' "Stopping"
+
+pattern BotRecommendationStatus_Updating :: BotRecommendationStatus
+pattern BotRecommendationStatus_Updating = BotRecommendationStatus' "Updating"
+
+{-# COMPLETE
+  BotRecommendationStatus_Available,
+  BotRecommendationStatus_Deleted,
+  BotRecommendationStatus_Deleting,
+  BotRecommendationStatus_Downloading,
+  BotRecommendationStatus_Failed,
+  BotRecommendationStatus_Processing,
+  BotRecommendationStatus_Stopped,
+  BotRecommendationStatus_Stopping,
+  BotRecommendationStatus_Updating,
+  BotRecommendationStatus'
+  #-}
diff --git a/gen/Amazonka/LexV2Models/Types/BotRecommendationSummary.hs b/gen/Amazonka/LexV2Models/Types/BotRecommendationSummary.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/Types/BotRecommendationSummary.hs
@@ -0,0 +1,132 @@
+{-# 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.LexV2Models.Types.BotRecommendationSummary
+-- 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.LexV2Models.Types.BotRecommendationSummary where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LexV2Models.Types.BotRecommendationStatus
+import qualified Amazonka.Prelude as Prelude
+
+-- | A summary of the bot recommendation.
+--
+-- /See:/ 'newBotRecommendationSummary' smart constructor.
+data BotRecommendationSummary = BotRecommendationSummary'
+  { -- | A timestamp of the date and time that the bot recommendation was
+    -- created.
+    creationDateTime :: Prelude.Maybe Data.POSIX,
+    -- | A timestamp of the date and time that the bot recommendation was last
+    -- updated.
+    lastUpdatedDateTime :: Prelude.Maybe Data.POSIX,
+    -- | The status of the bot recommendation.
+    --
+    -- If the status is Failed, then the reasons for the failure are listed in
+    -- the failureReasons field.
+    botRecommendationStatus :: BotRecommendationStatus,
+    -- | The unique identifier of the bot recommendation to be updated.
+    botRecommendationId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'BotRecommendationSummary' 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:
+--
+-- 'creationDateTime', 'botRecommendationSummary_creationDateTime' - A timestamp of the date and time that the bot recommendation was
+-- created.
+--
+-- 'lastUpdatedDateTime', 'botRecommendationSummary_lastUpdatedDateTime' - A timestamp of the date and time that the bot recommendation was last
+-- updated.
+--
+-- 'botRecommendationStatus', 'botRecommendationSummary_botRecommendationStatus' - The status of the bot recommendation.
+--
+-- If the status is Failed, then the reasons for the failure are listed in
+-- the failureReasons field.
+--
+-- 'botRecommendationId', 'botRecommendationSummary_botRecommendationId' - The unique identifier of the bot recommendation to be updated.
+newBotRecommendationSummary ::
+  -- | 'botRecommendationStatus'
+  BotRecommendationStatus ->
+  -- | 'botRecommendationId'
+  Prelude.Text ->
+  BotRecommendationSummary
+newBotRecommendationSummary
+  pBotRecommendationStatus_
+  pBotRecommendationId_ =
+    BotRecommendationSummary'
+      { creationDateTime =
+          Prelude.Nothing,
+        lastUpdatedDateTime = Prelude.Nothing,
+        botRecommendationStatus =
+          pBotRecommendationStatus_,
+        botRecommendationId = pBotRecommendationId_
+      }
+
+-- | A timestamp of the date and time that the bot recommendation was
+-- created.
+botRecommendationSummary_creationDateTime :: Lens.Lens' BotRecommendationSummary (Prelude.Maybe Prelude.UTCTime)
+botRecommendationSummary_creationDateTime = Lens.lens (\BotRecommendationSummary' {creationDateTime} -> creationDateTime) (\s@BotRecommendationSummary' {} a -> s {creationDateTime = a} :: BotRecommendationSummary) Prelude.. Lens.mapping Data._Time
+
+-- | A timestamp of the date and time that the bot recommendation was last
+-- updated.
+botRecommendationSummary_lastUpdatedDateTime :: Lens.Lens' BotRecommendationSummary (Prelude.Maybe Prelude.UTCTime)
+botRecommendationSummary_lastUpdatedDateTime = Lens.lens (\BotRecommendationSummary' {lastUpdatedDateTime} -> lastUpdatedDateTime) (\s@BotRecommendationSummary' {} a -> s {lastUpdatedDateTime = a} :: BotRecommendationSummary) Prelude.. Lens.mapping Data._Time
+
+-- | The status of the bot recommendation.
+--
+-- If the status is Failed, then the reasons for the failure are listed in
+-- the failureReasons field.
+botRecommendationSummary_botRecommendationStatus :: Lens.Lens' BotRecommendationSummary BotRecommendationStatus
+botRecommendationSummary_botRecommendationStatus = Lens.lens (\BotRecommendationSummary' {botRecommendationStatus} -> botRecommendationStatus) (\s@BotRecommendationSummary' {} a -> s {botRecommendationStatus = a} :: BotRecommendationSummary)
+
+-- | The unique identifier of the bot recommendation to be updated.
+botRecommendationSummary_botRecommendationId :: Lens.Lens' BotRecommendationSummary Prelude.Text
+botRecommendationSummary_botRecommendationId = Lens.lens (\BotRecommendationSummary' {botRecommendationId} -> botRecommendationId) (\s@BotRecommendationSummary' {} a -> s {botRecommendationId = a} :: BotRecommendationSummary)
+
+instance Data.FromJSON BotRecommendationSummary where
+  parseJSON =
+    Data.withObject
+      "BotRecommendationSummary"
+      ( \x ->
+          BotRecommendationSummary'
+            Prelude.<$> (x Data..:? "creationDateTime")
+            Prelude.<*> (x Data..:? "lastUpdatedDateTime")
+            Prelude.<*> (x Data..: "botRecommendationStatus")
+            Prelude.<*> (x Data..: "botRecommendationId")
+      )
+
+instance Prelude.Hashable BotRecommendationSummary where
+  hashWithSalt _salt BotRecommendationSummary' {..} =
+    _salt
+      `Prelude.hashWithSalt` creationDateTime
+      `Prelude.hashWithSalt` lastUpdatedDateTime
+      `Prelude.hashWithSalt` botRecommendationStatus
+      `Prelude.hashWithSalt` botRecommendationId
+
+instance Prelude.NFData BotRecommendationSummary where
+  rnf BotRecommendationSummary' {..} =
+    Prelude.rnf creationDateTime
+      `Prelude.seq` Prelude.rnf lastUpdatedDateTime
+      `Prelude.seq` Prelude.rnf botRecommendationStatus
+      `Prelude.seq` Prelude.rnf botRecommendationId
diff --git a/gen/Amazonka/LexV2Models/Types/BotSortAttribute.hs b/gen/Amazonka/LexV2Models/Types/BotSortAttribute.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/Types/BotSortAttribute.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.LexV2Models.Types.BotSortAttribute
+-- 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.LexV2Models.Types.BotSortAttribute
+  ( BotSortAttribute
+      ( ..,
+        BotSortAttribute_BotName
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype BotSortAttribute = BotSortAttribute'
+  { fromBotSortAttribute ::
+      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 BotSortAttribute_BotName :: BotSortAttribute
+pattern BotSortAttribute_BotName = BotSortAttribute' "BotName"
+
+{-# COMPLETE
+  BotSortAttribute_BotName,
+  BotSortAttribute'
+  #-}
diff --git a/gen/Amazonka/LexV2Models/Types/BotSortBy.hs b/gen/Amazonka/LexV2Models/Types/BotSortBy.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/Types/BotSortBy.hs
@@ -0,0 +1,89 @@
+{-# 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.LexV2Models.Types.BotSortBy
+-- 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.LexV2Models.Types.BotSortBy where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LexV2Models.Types.BotSortAttribute
+import Amazonka.LexV2Models.Types.SortOrder
+import qualified Amazonka.Prelude as Prelude
+
+-- | Specifies attributes for sorting a list of bots.
+--
+-- /See:/ 'newBotSortBy' smart constructor.
+data BotSortBy = BotSortBy'
+  { -- | The attribute to use to sort the list of bots.
+    attribute :: BotSortAttribute,
+    -- | The order to sort the list. You can choose ascending or descending.
+    order :: SortOrder
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'BotSortBy' 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:
+--
+-- 'attribute', 'botSortBy_attribute' - The attribute to use to sort the list of bots.
+--
+-- 'order', 'botSortBy_order' - The order to sort the list. You can choose ascending or descending.
+newBotSortBy ::
+  -- | 'attribute'
+  BotSortAttribute ->
+  -- | 'order'
+  SortOrder ->
+  BotSortBy
+newBotSortBy pAttribute_ pOrder_ =
+  BotSortBy'
+    { attribute = pAttribute_,
+      order = pOrder_
+    }
+
+-- | The attribute to use to sort the list of bots.
+botSortBy_attribute :: Lens.Lens' BotSortBy BotSortAttribute
+botSortBy_attribute = Lens.lens (\BotSortBy' {attribute} -> attribute) (\s@BotSortBy' {} a -> s {attribute = a} :: BotSortBy)
+
+-- | The order to sort the list. You can choose ascending or descending.
+botSortBy_order :: Lens.Lens' BotSortBy SortOrder
+botSortBy_order = Lens.lens (\BotSortBy' {order} -> order) (\s@BotSortBy' {} a -> s {order = a} :: BotSortBy)
+
+instance Prelude.Hashable BotSortBy where
+  hashWithSalt _salt BotSortBy' {..} =
+    _salt
+      `Prelude.hashWithSalt` attribute
+      `Prelude.hashWithSalt` order
+
+instance Prelude.NFData BotSortBy where
+  rnf BotSortBy' {..} =
+    Prelude.rnf attribute
+      `Prelude.seq` Prelude.rnf order
+
+instance Data.ToJSON BotSortBy where
+  toJSON BotSortBy' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("attribute" Data..= attribute),
+            Prelude.Just ("order" Data..= order)
+          ]
+      )
diff --git a/gen/Amazonka/LexV2Models/Types/BotStatus.hs b/gen/Amazonka/LexV2Models/Types/BotStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/Types/BotStatus.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.LexV2Models.Types.BotStatus
+-- 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.LexV2Models.Types.BotStatus
+  ( BotStatus
+      ( ..,
+        BotStatus_Available,
+        BotStatus_Creating,
+        BotStatus_Deleting,
+        BotStatus_Failed,
+        BotStatus_Importing,
+        BotStatus_Inactive,
+        BotStatus_Versioning
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype BotStatus = BotStatus'
+  { fromBotStatus ::
+      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 BotStatus_Available :: BotStatus
+pattern BotStatus_Available = BotStatus' "Available"
+
+pattern BotStatus_Creating :: BotStatus
+pattern BotStatus_Creating = BotStatus' "Creating"
+
+pattern BotStatus_Deleting :: BotStatus
+pattern BotStatus_Deleting = BotStatus' "Deleting"
+
+pattern BotStatus_Failed :: BotStatus
+pattern BotStatus_Failed = BotStatus' "Failed"
+
+pattern BotStatus_Importing :: BotStatus
+pattern BotStatus_Importing = BotStatus' "Importing"
+
+pattern BotStatus_Inactive :: BotStatus
+pattern BotStatus_Inactive = BotStatus' "Inactive"
+
+pattern BotStatus_Versioning :: BotStatus
+pattern BotStatus_Versioning = BotStatus' "Versioning"
+
+{-# COMPLETE
+  BotStatus_Available,
+  BotStatus_Creating,
+  BotStatus_Deleting,
+  BotStatus_Failed,
+  BotStatus_Importing,
+  BotStatus_Inactive,
+  BotStatus_Versioning,
+  BotStatus'
+  #-}
diff --git a/gen/Amazonka/LexV2Models/Types/BotSummary.hs b/gen/Amazonka/LexV2Models/Types/BotSummary.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/Types/BotSummary.hs
@@ -0,0 +1,147 @@
+{-# 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.LexV2Models.Types.BotSummary
+-- 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.LexV2Models.Types.BotSummary where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LexV2Models.Types.BotStatus
+import qualified Amazonka.Prelude as Prelude
+
+-- | Summary information about a bot returned by the
+-- <https://docs.aws.amazon.com/lexv2/latest/dg/API_ListBots.html ListBots>
+-- operation.
+--
+-- /See:/ 'newBotSummary' smart constructor.
+data BotSummary = BotSummary'
+  { -- | The unique identifier assigned to the bot. Use this ID to get detailed
+    -- information about the bot with the
+    -- <https://docs.aws.amazon.com/lexv2/latest/dg/API_DescribeBot.html DescribeBot>
+    -- operation.
+    botId :: Prelude.Maybe Prelude.Text,
+    -- | The name of the bot.
+    botName :: Prelude.Maybe Prelude.Text,
+    -- | The current status of the bot. When the status is @Available@ the bot is
+    -- ready for use.
+    botStatus :: Prelude.Maybe BotStatus,
+    -- | The description of the bot.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The date and time that the bot was last updated.
+    lastUpdatedDateTime :: Prelude.Maybe Data.POSIX,
+    -- | The latest numerical version in use for the bot.
+    latestBotVersion :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'BotSummary' 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:
+--
+-- 'botId', 'botSummary_botId' - The unique identifier assigned to the bot. Use this ID to get detailed
+-- information about the bot with the
+-- <https://docs.aws.amazon.com/lexv2/latest/dg/API_DescribeBot.html DescribeBot>
+-- operation.
+--
+-- 'botName', 'botSummary_botName' - The name of the bot.
+--
+-- 'botStatus', 'botSummary_botStatus' - The current status of the bot. When the status is @Available@ the bot is
+-- ready for use.
+--
+-- 'description', 'botSummary_description' - The description of the bot.
+--
+-- 'lastUpdatedDateTime', 'botSummary_lastUpdatedDateTime' - The date and time that the bot was last updated.
+--
+-- 'latestBotVersion', 'botSummary_latestBotVersion' - The latest numerical version in use for the bot.
+newBotSummary ::
+  BotSummary
+newBotSummary =
+  BotSummary'
+    { botId = Prelude.Nothing,
+      botName = Prelude.Nothing,
+      botStatus = Prelude.Nothing,
+      description = Prelude.Nothing,
+      lastUpdatedDateTime = Prelude.Nothing,
+      latestBotVersion = Prelude.Nothing
+    }
+
+-- | The unique identifier assigned to the bot. Use this ID to get detailed
+-- information about the bot with the
+-- <https://docs.aws.amazon.com/lexv2/latest/dg/API_DescribeBot.html DescribeBot>
+-- operation.
+botSummary_botId :: Lens.Lens' BotSummary (Prelude.Maybe Prelude.Text)
+botSummary_botId = Lens.lens (\BotSummary' {botId} -> botId) (\s@BotSummary' {} a -> s {botId = a} :: BotSummary)
+
+-- | The name of the bot.
+botSummary_botName :: Lens.Lens' BotSummary (Prelude.Maybe Prelude.Text)
+botSummary_botName = Lens.lens (\BotSummary' {botName} -> botName) (\s@BotSummary' {} a -> s {botName = a} :: BotSummary)
+
+-- | The current status of the bot. When the status is @Available@ the bot is
+-- ready for use.
+botSummary_botStatus :: Lens.Lens' BotSummary (Prelude.Maybe BotStatus)
+botSummary_botStatus = Lens.lens (\BotSummary' {botStatus} -> botStatus) (\s@BotSummary' {} a -> s {botStatus = a} :: BotSummary)
+
+-- | The description of the bot.
+botSummary_description :: Lens.Lens' BotSummary (Prelude.Maybe Prelude.Text)
+botSummary_description = Lens.lens (\BotSummary' {description} -> description) (\s@BotSummary' {} a -> s {description = a} :: BotSummary)
+
+-- | The date and time that the bot was last updated.
+botSummary_lastUpdatedDateTime :: Lens.Lens' BotSummary (Prelude.Maybe Prelude.UTCTime)
+botSummary_lastUpdatedDateTime = Lens.lens (\BotSummary' {lastUpdatedDateTime} -> lastUpdatedDateTime) (\s@BotSummary' {} a -> s {lastUpdatedDateTime = a} :: BotSummary) Prelude.. Lens.mapping Data._Time
+
+-- | The latest numerical version in use for the bot.
+botSummary_latestBotVersion :: Lens.Lens' BotSummary (Prelude.Maybe Prelude.Text)
+botSummary_latestBotVersion = Lens.lens (\BotSummary' {latestBotVersion} -> latestBotVersion) (\s@BotSummary' {} a -> s {latestBotVersion = a} :: BotSummary)
+
+instance Data.FromJSON BotSummary where
+  parseJSON =
+    Data.withObject
+      "BotSummary"
+      ( \x ->
+          BotSummary'
+            Prelude.<$> (x Data..:? "botId")
+            Prelude.<*> (x Data..:? "botName")
+            Prelude.<*> (x Data..:? "botStatus")
+            Prelude.<*> (x Data..:? "description")
+            Prelude.<*> (x Data..:? "lastUpdatedDateTime")
+            Prelude.<*> (x Data..:? "latestBotVersion")
+      )
+
+instance Prelude.Hashable BotSummary where
+  hashWithSalt _salt BotSummary' {..} =
+    _salt
+      `Prelude.hashWithSalt` botId
+      `Prelude.hashWithSalt` botName
+      `Prelude.hashWithSalt` botStatus
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` lastUpdatedDateTime
+      `Prelude.hashWithSalt` latestBotVersion
+
+instance Prelude.NFData BotSummary where
+  rnf BotSummary' {..} =
+    Prelude.rnf botId
+      `Prelude.seq` Prelude.rnf botName
+      `Prelude.seq` Prelude.rnf botStatus
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf lastUpdatedDateTime
+      `Prelude.seq` Prelude.rnf latestBotVersion
diff --git a/gen/Amazonka/LexV2Models/Types/BotVersionLocaleDetails.hs b/gen/Amazonka/LexV2Models/Types/BotVersionLocaleDetails.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/Types/BotVersionLocaleDetails.hs
@@ -0,0 +1,83 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.LexV2Models.Types.BotVersionLocaleDetails
+-- 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.LexV2Models.Types.BotVersionLocaleDetails 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 version of a bot used for a bot locale.
+--
+-- /See:/ 'newBotVersionLocaleDetails' smart constructor.
+data BotVersionLocaleDetails = BotVersionLocaleDetails'
+  { -- | The version of a bot used for a bot locale.
+    sourceBotVersion :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'BotVersionLocaleDetails' 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:
+--
+-- 'sourceBotVersion', 'botVersionLocaleDetails_sourceBotVersion' - The version of a bot used for a bot locale.
+newBotVersionLocaleDetails ::
+  -- | 'sourceBotVersion'
+  Prelude.Text ->
+  BotVersionLocaleDetails
+newBotVersionLocaleDetails pSourceBotVersion_ =
+  BotVersionLocaleDetails'
+    { sourceBotVersion =
+        pSourceBotVersion_
+    }
+
+-- | The version of a bot used for a bot locale.
+botVersionLocaleDetails_sourceBotVersion :: Lens.Lens' BotVersionLocaleDetails Prelude.Text
+botVersionLocaleDetails_sourceBotVersion = Lens.lens (\BotVersionLocaleDetails' {sourceBotVersion} -> sourceBotVersion) (\s@BotVersionLocaleDetails' {} a -> s {sourceBotVersion = a} :: BotVersionLocaleDetails)
+
+instance Data.FromJSON BotVersionLocaleDetails where
+  parseJSON =
+    Data.withObject
+      "BotVersionLocaleDetails"
+      ( \x ->
+          BotVersionLocaleDetails'
+            Prelude.<$> (x Data..: "sourceBotVersion")
+      )
+
+instance Prelude.Hashable BotVersionLocaleDetails where
+  hashWithSalt _salt BotVersionLocaleDetails' {..} =
+    _salt `Prelude.hashWithSalt` sourceBotVersion
+
+instance Prelude.NFData BotVersionLocaleDetails where
+  rnf BotVersionLocaleDetails' {..} =
+    Prelude.rnf sourceBotVersion
+
+instance Data.ToJSON BotVersionLocaleDetails where
+  toJSON BotVersionLocaleDetails' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ("sourceBotVersion" Data..= sourceBotVersion)
+          ]
+      )
diff --git a/gen/Amazonka/LexV2Models/Types/BotVersionSortAttribute.hs b/gen/Amazonka/LexV2Models/Types/BotVersionSortAttribute.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/Types/BotVersionSortAttribute.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.LexV2Models.Types.BotVersionSortAttribute
+-- 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.LexV2Models.Types.BotVersionSortAttribute
+  ( BotVersionSortAttribute
+      ( ..,
+        BotVersionSortAttribute_BotVersion
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype BotVersionSortAttribute = BotVersionSortAttribute'
+  { fromBotVersionSortAttribute ::
+      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 BotVersionSortAttribute_BotVersion :: BotVersionSortAttribute
+pattern BotVersionSortAttribute_BotVersion = BotVersionSortAttribute' "BotVersion"
+
+{-# COMPLETE
+  BotVersionSortAttribute_BotVersion,
+  BotVersionSortAttribute'
+  #-}
diff --git a/gen/Amazonka/LexV2Models/Types/BotVersionSortBy.hs b/gen/Amazonka/LexV2Models/Types/BotVersionSortBy.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/Types/BotVersionSortBy.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.LexV2Models.Types.BotVersionSortBy
+-- 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.LexV2Models.Types.BotVersionSortBy where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LexV2Models.Types.BotVersionSortAttribute
+import Amazonka.LexV2Models.Types.SortOrder
+import qualified Amazonka.Prelude as Prelude
+
+-- | Specifies attributes for sorting a list of bot versions.
+--
+-- /See:/ 'newBotVersionSortBy' smart constructor.
+data BotVersionSortBy = BotVersionSortBy'
+  { -- | The attribute to use to sort the list of versions.
+    attribute :: BotVersionSortAttribute,
+    -- | The order to sort the list. You can specify ascending or descending
+    -- order.
+    order :: SortOrder
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'BotVersionSortBy' 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:
+--
+-- 'attribute', 'botVersionSortBy_attribute' - The attribute to use to sort the list of versions.
+--
+-- 'order', 'botVersionSortBy_order' - The order to sort the list. You can specify ascending or descending
+-- order.
+newBotVersionSortBy ::
+  -- | 'attribute'
+  BotVersionSortAttribute ->
+  -- | 'order'
+  SortOrder ->
+  BotVersionSortBy
+newBotVersionSortBy pAttribute_ pOrder_ =
+  BotVersionSortBy'
+    { attribute = pAttribute_,
+      order = pOrder_
+    }
+
+-- | The attribute to use to sort the list of versions.
+botVersionSortBy_attribute :: Lens.Lens' BotVersionSortBy BotVersionSortAttribute
+botVersionSortBy_attribute = Lens.lens (\BotVersionSortBy' {attribute} -> attribute) (\s@BotVersionSortBy' {} a -> s {attribute = a} :: BotVersionSortBy)
+
+-- | The order to sort the list. You can specify ascending or descending
+-- order.
+botVersionSortBy_order :: Lens.Lens' BotVersionSortBy SortOrder
+botVersionSortBy_order = Lens.lens (\BotVersionSortBy' {order} -> order) (\s@BotVersionSortBy' {} a -> s {order = a} :: BotVersionSortBy)
+
+instance Prelude.Hashable BotVersionSortBy where
+  hashWithSalt _salt BotVersionSortBy' {..} =
+    _salt
+      `Prelude.hashWithSalt` attribute
+      `Prelude.hashWithSalt` order
+
+instance Prelude.NFData BotVersionSortBy where
+  rnf BotVersionSortBy' {..} =
+    Prelude.rnf attribute
+      `Prelude.seq` Prelude.rnf order
+
+instance Data.ToJSON BotVersionSortBy where
+  toJSON BotVersionSortBy' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("attribute" Data..= attribute),
+            Prelude.Just ("order" Data..= order)
+          ]
+      )
diff --git a/gen/Amazonka/LexV2Models/Types/BotVersionSummary.hs b/gen/Amazonka/LexV2Models/Types/BotVersionSummary.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/Types/BotVersionSummary.hs
@@ -0,0 +1,129 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.LexV2Models.Types.BotVersionSummary
+-- 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.LexV2Models.Types.BotVersionSummary where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LexV2Models.Types.BotStatus
+import qualified Amazonka.Prelude as Prelude
+
+-- | Summary information about a bot version returned by the
+-- <https://docs.aws.amazon.com/lexv2/latest/dg/API_ListBotVersions.html ListBotVersions>
+-- operation.
+--
+-- /See:/ 'newBotVersionSummary' smart constructor.
+data BotVersionSummary = BotVersionSummary'
+  { -- | The name of the bot associated with the version.
+    botName :: Prelude.Maybe Prelude.Text,
+    -- | The status of the bot. When the status is available, the version of the
+    -- bot is ready for use.
+    botStatus :: Prelude.Maybe BotStatus,
+    -- | The numeric version of the bot, or @DRAFT@ to indicate that this is the
+    -- version of the bot that can be updated..
+    botVersion :: Prelude.Maybe Prelude.Text,
+    -- | A timestamp of the date and time that the version was created.
+    creationDateTime :: Prelude.Maybe Data.POSIX,
+    -- | The description of the version.
+    description :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'BotVersionSummary' 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:
+--
+-- 'botName', 'botVersionSummary_botName' - The name of the bot associated with the version.
+--
+-- 'botStatus', 'botVersionSummary_botStatus' - The status of the bot. When the status is available, the version of the
+-- bot is ready for use.
+--
+-- 'botVersion', 'botVersionSummary_botVersion' - The numeric version of the bot, or @DRAFT@ to indicate that this is the
+-- version of the bot that can be updated..
+--
+-- 'creationDateTime', 'botVersionSummary_creationDateTime' - A timestamp of the date and time that the version was created.
+--
+-- 'description', 'botVersionSummary_description' - The description of the version.
+newBotVersionSummary ::
+  BotVersionSummary
+newBotVersionSummary =
+  BotVersionSummary'
+    { botName = Prelude.Nothing,
+      botStatus = Prelude.Nothing,
+      botVersion = Prelude.Nothing,
+      creationDateTime = Prelude.Nothing,
+      description = Prelude.Nothing
+    }
+
+-- | The name of the bot associated with the version.
+botVersionSummary_botName :: Lens.Lens' BotVersionSummary (Prelude.Maybe Prelude.Text)
+botVersionSummary_botName = Lens.lens (\BotVersionSummary' {botName} -> botName) (\s@BotVersionSummary' {} a -> s {botName = a} :: BotVersionSummary)
+
+-- | The status of the bot. When the status is available, the version of the
+-- bot is ready for use.
+botVersionSummary_botStatus :: Lens.Lens' BotVersionSummary (Prelude.Maybe BotStatus)
+botVersionSummary_botStatus = Lens.lens (\BotVersionSummary' {botStatus} -> botStatus) (\s@BotVersionSummary' {} a -> s {botStatus = a} :: BotVersionSummary)
+
+-- | The numeric version of the bot, or @DRAFT@ to indicate that this is the
+-- version of the bot that can be updated..
+botVersionSummary_botVersion :: Lens.Lens' BotVersionSummary (Prelude.Maybe Prelude.Text)
+botVersionSummary_botVersion = Lens.lens (\BotVersionSummary' {botVersion} -> botVersion) (\s@BotVersionSummary' {} a -> s {botVersion = a} :: BotVersionSummary)
+
+-- | A timestamp of the date and time that the version was created.
+botVersionSummary_creationDateTime :: Lens.Lens' BotVersionSummary (Prelude.Maybe Prelude.UTCTime)
+botVersionSummary_creationDateTime = Lens.lens (\BotVersionSummary' {creationDateTime} -> creationDateTime) (\s@BotVersionSummary' {} a -> s {creationDateTime = a} :: BotVersionSummary) Prelude.. Lens.mapping Data._Time
+
+-- | The description of the version.
+botVersionSummary_description :: Lens.Lens' BotVersionSummary (Prelude.Maybe Prelude.Text)
+botVersionSummary_description = Lens.lens (\BotVersionSummary' {description} -> description) (\s@BotVersionSummary' {} a -> s {description = a} :: BotVersionSummary)
+
+instance Data.FromJSON BotVersionSummary where
+  parseJSON =
+    Data.withObject
+      "BotVersionSummary"
+      ( \x ->
+          BotVersionSummary'
+            Prelude.<$> (x Data..:? "botName")
+            Prelude.<*> (x Data..:? "botStatus")
+            Prelude.<*> (x Data..:? "botVersion")
+            Prelude.<*> (x Data..:? "creationDateTime")
+            Prelude.<*> (x Data..:? "description")
+      )
+
+instance Prelude.Hashable BotVersionSummary where
+  hashWithSalt _salt BotVersionSummary' {..} =
+    _salt
+      `Prelude.hashWithSalt` botName
+      `Prelude.hashWithSalt` botStatus
+      `Prelude.hashWithSalt` botVersion
+      `Prelude.hashWithSalt` creationDateTime
+      `Prelude.hashWithSalt` description
+
+instance Prelude.NFData BotVersionSummary where
+  rnf BotVersionSummary' {..} =
+    Prelude.rnf botName
+      `Prelude.seq` Prelude.rnf botStatus
+      `Prelude.seq` Prelude.rnf botVersion
+      `Prelude.seq` Prelude.rnf creationDateTime
+      `Prelude.seq` Prelude.rnf description
diff --git a/gen/Amazonka/LexV2Models/Types/BuiltInIntentSortAttribute.hs b/gen/Amazonka/LexV2Models/Types/BuiltInIntentSortAttribute.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/Types/BuiltInIntentSortAttribute.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.LexV2Models.Types.BuiltInIntentSortAttribute
+-- 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.LexV2Models.Types.BuiltInIntentSortAttribute
+  ( BuiltInIntentSortAttribute
+      ( ..,
+        BuiltInIntentSortAttribute_IntentSignature
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype BuiltInIntentSortAttribute = BuiltInIntentSortAttribute'
+  { fromBuiltInIntentSortAttribute ::
+      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 BuiltInIntentSortAttribute_IntentSignature :: BuiltInIntentSortAttribute
+pattern BuiltInIntentSortAttribute_IntentSignature = BuiltInIntentSortAttribute' "IntentSignature"
+
+{-# COMPLETE
+  BuiltInIntentSortAttribute_IntentSignature,
+  BuiltInIntentSortAttribute'
+  #-}
diff --git a/gen/Amazonka/LexV2Models/Types/BuiltInIntentSortBy.hs b/gen/Amazonka/LexV2Models/Types/BuiltInIntentSortBy.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/Types/BuiltInIntentSortBy.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.LexV2Models.Types.BuiltInIntentSortBy
+-- 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.LexV2Models.Types.BuiltInIntentSortBy where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LexV2Models.Types.BuiltInIntentSortAttribute
+import Amazonka.LexV2Models.Types.SortOrder
+import qualified Amazonka.Prelude as Prelude
+
+-- | Specifies attributes for sorting a list of built-in intents.
+--
+-- /See:/ 'newBuiltInIntentSortBy' smart constructor.
+data BuiltInIntentSortBy = BuiltInIntentSortBy'
+  { -- | The attribute to use to sort the list of built-in intents.
+    attribute :: BuiltInIntentSortAttribute,
+    -- | The order to sort the list. You can specify ascending or descending
+    -- order.
+    order :: SortOrder
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'BuiltInIntentSortBy' 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:
+--
+-- 'attribute', 'builtInIntentSortBy_attribute' - The attribute to use to sort the list of built-in intents.
+--
+-- 'order', 'builtInIntentSortBy_order' - The order to sort the list. You can specify ascending or descending
+-- order.
+newBuiltInIntentSortBy ::
+  -- | 'attribute'
+  BuiltInIntentSortAttribute ->
+  -- | 'order'
+  SortOrder ->
+  BuiltInIntentSortBy
+newBuiltInIntentSortBy pAttribute_ pOrder_ =
+  BuiltInIntentSortBy'
+    { attribute = pAttribute_,
+      order = pOrder_
+    }
+
+-- | The attribute to use to sort the list of built-in intents.
+builtInIntentSortBy_attribute :: Lens.Lens' BuiltInIntentSortBy BuiltInIntentSortAttribute
+builtInIntentSortBy_attribute = Lens.lens (\BuiltInIntentSortBy' {attribute} -> attribute) (\s@BuiltInIntentSortBy' {} a -> s {attribute = a} :: BuiltInIntentSortBy)
+
+-- | The order to sort the list. You can specify ascending or descending
+-- order.
+builtInIntentSortBy_order :: Lens.Lens' BuiltInIntentSortBy SortOrder
+builtInIntentSortBy_order = Lens.lens (\BuiltInIntentSortBy' {order} -> order) (\s@BuiltInIntentSortBy' {} a -> s {order = a} :: BuiltInIntentSortBy)
+
+instance Prelude.Hashable BuiltInIntentSortBy where
+  hashWithSalt _salt BuiltInIntentSortBy' {..} =
+    _salt
+      `Prelude.hashWithSalt` attribute
+      `Prelude.hashWithSalt` order
+
+instance Prelude.NFData BuiltInIntentSortBy where
+  rnf BuiltInIntentSortBy' {..} =
+    Prelude.rnf attribute
+      `Prelude.seq` Prelude.rnf order
+
+instance Data.ToJSON BuiltInIntentSortBy where
+  toJSON BuiltInIntentSortBy' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("attribute" Data..= attribute),
+            Prelude.Just ("order" Data..= order)
+          ]
+      )
diff --git a/gen/Amazonka/LexV2Models/Types/BuiltInIntentSummary.hs b/gen/Amazonka/LexV2Models/Types/BuiltInIntentSummary.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/Types/BuiltInIntentSummary.hs
@@ -0,0 +1,90 @@
+{-# 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.LexV2Models.Types.BuiltInIntentSummary
+-- 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.LexV2Models.Types.BuiltInIntentSummary 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
+
+-- | Provides summary information about a built-in intent for the
+-- <https://docs.aws.amazon.com/lexv2/latest/dg/API_ListBuiltInIntents.html ListBuiltInIntents>
+-- operation.
+--
+-- /See:/ 'newBuiltInIntentSummary' smart constructor.
+data BuiltInIntentSummary = BuiltInIntentSummary'
+  { -- | The description of the intent.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The signature of the built-in intent. Use this to specify the parent
+    -- intent of a derived intent.
+    intentSignature :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'BuiltInIntentSummary' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'description', 'builtInIntentSummary_description' - The description of the intent.
+--
+-- 'intentSignature', 'builtInIntentSummary_intentSignature' - The signature of the built-in intent. Use this to specify the parent
+-- intent of a derived intent.
+newBuiltInIntentSummary ::
+  BuiltInIntentSummary
+newBuiltInIntentSummary =
+  BuiltInIntentSummary'
+    { description =
+        Prelude.Nothing,
+      intentSignature = Prelude.Nothing
+    }
+
+-- | The description of the intent.
+builtInIntentSummary_description :: Lens.Lens' BuiltInIntentSummary (Prelude.Maybe Prelude.Text)
+builtInIntentSummary_description = Lens.lens (\BuiltInIntentSummary' {description} -> description) (\s@BuiltInIntentSummary' {} a -> s {description = a} :: BuiltInIntentSummary)
+
+-- | The signature of the built-in intent. Use this to specify the parent
+-- intent of a derived intent.
+builtInIntentSummary_intentSignature :: Lens.Lens' BuiltInIntentSummary (Prelude.Maybe Prelude.Text)
+builtInIntentSummary_intentSignature = Lens.lens (\BuiltInIntentSummary' {intentSignature} -> intentSignature) (\s@BuiltInIntentSummary' {} a -> s {intentSignature = a} :: BuiltInIntentSummary)
+
+instance Data.FromJSON BuiltInIntentSummary where
+  parseJSON =
+    Data.withObject
+      "BuiltInIntentSummary"
+      ( \x ->
+          BuiltInIntentSummary'
+            Prelude.<$> (x Data..:? "description")
+            Prelude.<*> (x Data..:? "intentSignature")
+      )
+
+instance Prelude.Hashable BuiltInIntentSummary where
+  hashWithSalt _salt BuiltInIntentSummary' {..} =
+    _salt
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` intentSignature
+
+instance Prelude.NFData BuiltInIntentSummary where
+  rnf BuiltInIntentSummary' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf intentSignature
diff --git a/gen/Amazonka/LexV2Models/Types/BuiltInSlotTypeSortAttribute.hs b/gen/Amazonka/LexV2Models/Types/BuiltInSlotTypeSortAttribute.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/Types/BuiltInSlotTypeSortAttribute.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.LexV2Models.Types.BuiltInSlotTypeSortAttribute
+-- 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.LexV2Models.Types.BuiltInSlotTypeSortAttribute
+  ( BuiltInSlotTypeSortAttribute
+      ( ..,
+        BuiltInSlotTypeSortAttribute_SlotTypeSignature
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype BuiltInSlotTypeSortAttribute = BuiltInSlotTypeSortAttribute'
+  { fromBuiltInSlotTypeSortAttribute ::
+      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 BuiltInSlotTypeSortAttribute_SlotTypeSignature :: BuiltInSlotTypeSortAttribute
+pattern BuiltInSlotTypeSortAttribute_SlotTypeSignature = BuiltInSlotTypeSortAttribute' "SlotTypeSignature"
+
+{-# COMPLETE
+  BuiltInSlotTypeSortAttribute_SlotTypeSignature,
+  BuiltInSlotTypeSortAttribute'
+  #-}
diff --git a/gen/Amazonka/LexV2Models/Types/BuiltInSlotTypeSortBy.hs b/gen/Amazonka/LexV2Models/Types/BuiltInSlotTypeSortBy.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/Types/BuiltInSlotTypeSortBy.hs
@@ -0,0 +1,89 @@
+{-# 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.LexV2Models.Types.BuiltInSlotTypeSortBy
+-- 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.LexV2Models.Types.BuiltInSlotTypeSortBy where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LexV2Models.Types.BuiltInSlotTypeSortAttribute
+import Amazonka.LexV2Models.Types.SortOrder
+import qualified Amazonka.Prelude as Prelude
+
+-- | Specifies attributes for sorting a list of built-in slot types.
+--
+-- /See:/ 'newBuiltInSlotTypeSortBy' smart constructor.
+data BuiltInSlotTypeSortBy = BuiltInSlotTypeSortBy'
+  { -- | The attribute to use to sort the list of built-in intents.
+    attribute :: BuiltInSlotTypeSortAttribute,
+    -- | The order to sort the list. You can choose ascending or descending.
+    order :: SortOrder
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'BuiltInSlotTypeSortBy' 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:
+--
+-- 'attribute', 'builtInSlotTypeSortBy_attribute' - The attribute to use to sort the list of built-in intents.
+--
+-- 'order', 'builtInSlotTypeSortBy_order' - The order to sort the list. You can choose ascending or descending.
+newBuiltInSlotTypeSortBy ::
+  -- | 'attribute'
+  BuiltInSlotTypeSortAttribute ->
+  -- | 'order'
+  SortOrder ->
+  BuiltInSlotTypeSortBy
+newBuiltInSlotTypeSortBy pAttribute_ pOrder_ =
+  BuiltInSlotTypeSortBy'
+    { attribute = pAttribute_,
+      order = pOrder_
+    }
+
+-- | The attribute to use to sort the list of built-in intents.
+builtInSlotTypeSortBy_attribute :: Lens.Lens' BuiltInSlotTypeSortBy BuiltInSlotTypeSortAttribute
+builtInSlotTypeSortBy_attribute = Lens.lens (\BuiltInSlotTypeSortBy' {attribute} -> attribute) (\s@BuiltInSlotTypeSortBy' {} a -> s {attribute = a} :: BuiltInSlotTypeSortBy)
+
+-- | The order to sort the list. You can choose ascending or descending.
+builtInSlotTypeSortBy_order :: Lens.Lens' BuiltInSlotTypeSortBy SortOrder
+builtInSlotTypeSortBy_order = Lens.lens (\BuiltInSlotTypeSortBy' {order} -> order) (\s@BuiltInSlotTypeSortBy' {} a -> s {order = a} :: BuiltInSlotTypeSortBy)
+
+instance Prelude.Hashable BuiltInSlotTypeSortBy where
+  hashWithSalt _salt BuiltInSlotTypeSortBy' {..} =
+    _salt
+      `Prelude.hashWithSalt` attribute
+      `Prelude.hashWithSalt` order
+
+instance Prelude.NFData BuiltInSlotTypeSortBy where
+  rnf BuiltInSlotTypeSortBy' {..} =
+    Prelude.rnf attribute
+      `Prelude.seq` Prelude.rnf order
+
+instance Data.ToJSON BuiltInSlotTypeSortBy where
+  toJSON BuiltInSlotTypeSortBy' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("attribute" Data..= attribute),
+            Prelude.Just ("order" Data..= order)
+          ]
+      )
diff --git a/gen/Amazonka/LexV2Models/Types/BuiltInSlotTypeSummary.hs b/gen/Amazonka/LexV2Models/Types/BuiltInSlotTypeSummary.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/Types/BuiltInSlotTypeSummary.hs
@@ -0,0 +1,90 @@
+{-# 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.LexV2Models.Types.BuiltInSlotTypeSummary
+-- 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.LexV2Models.Types.BuiltInSlotTypeSummary 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
+
+-- | Provides summary information about a built-in slot type for the
+-- <https://docs.aws.amazon.com/lexv2/latest/dg/API_ListBuiltInSlotTypes.html ListBuiltInSlotTypes>
+-- operation.
+--
+-- /See:/ 'newBuiltInSlotTypeSummary' smart constructor.
+data BuiltInSlotTypeSummary = BuiltInSlotTypeSummary'
+  { -- | The description of the built-in slot type.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The signature of the built-in slot type. Use this to specify the parent
+    -- slot type of a derived slot type.
+    slotTypeSignature :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'BuiltInSlotTypeSummary' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'description', 'builtInSlotTypeSummary_description' - The description of the built-in slot type.
+--
+-- 'slotTypeSignature', 'builtInSlotTypeSummary_slotTypeSignature' - The signature of the built-in slot type. Use this to specify the parent
+-- slot type of a derived slot type.
+newBuiltInSlotTypeSummary ::
+  BuiltInSlotTypeSummary
+newBuiltInSlotTypeSummary =
+  BuiltInSlotTypeSummary'
+    { description =
+        Prelude.Nothing,
+      slotTypeSignature = Prelude.Nothing
+    }
+
+-- | The description of the built-in slot type.
+builtInSlotTypeSummary_description :: Lens.Lens' BuiltInSlotTypeSummary (Prelude.Maybe Prelude.Text)
+builtInSlotTypeSummary_description = Lens.lens (\BuiltInSlotTypeSummary' {description} -> description) (\s@BuiltInSlotTypeSummary' {} a -> s {description = a} :: BuiltInSlotTypeSummary)
+
+-- | The signature of the built-in slot type. Use this to specify the parent
+-- slot type of a derived slot type.
+builtInSlotTypeSummary_slotTypeSignature :: Lens.Lens' BuiltInSlotTypeSummary (Prelude.Maybe Prelude.Text)
+builtInSlotTypeSummary_slotTypeSignature = Lens.lens (\BuiltInSlotTypeSummary' {slotTypeSignature} -> slotTypeSignature) (\s@BuiltInSlotTypeSummary' {} a -> s {slotTypeSignature = a} :: BuiltInSlotTypeSummary)
+
+instance Data.FromJSON BuiltInSlotTypeSummary where
+  parseJSON =
+    Data.withObject
+      "BuiltInSlotTypeSummary"
+      ( \x ->
+          BuiltInSlotTypeSummary'
+            Prelude.<$> (x Data..:? "description")
+            Prelude.<*> (x Data..:? "slotTypeSignature")
+      )
+
+instance Prelude.Hashable BuiltInSlotTypeSummary where
+  hashWithSalt _salt BuiltInSlotTypeSummary' {..} =
+    _salt
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` slotTypeSignature
+
+instance Prelude.NFData BuiltInSlotTypeSummary where
+  rnf BuiltInSlotTypeSummary' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf slotTypeSignature
diff --git a/gen/Amazonka/LexV2Models/Types/Button.hs b/gen/Amazonka/LexV2Models/Types/Button.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/Types/Button.hs
@@ -0,0 +1,100 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.LexV2Models.Types.Button
+-- 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.LexV2Models.Types.Button 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
+
+-- | Describes a button to use on a response card used to gather slot values
+-- from a user.
+--
+-- /See:/ 'newButton' smart constructor.
+data Button = Button'
+  { -- | The text that appears on the button. Use this to tell the user what
+    -- value is returned when they choose this button.
+    text :: Prelude.Text,
+    -- | The value returned to Amazon Lex when the user chooses this button. This
+    -- must be one of the slot values configured for the slot.
+    value :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Button' 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:
+--
+-- 'text', 'button_text' - The text that appears on the button. Use this to tell the user what
+-- value is returned when they choose this button.
+--
+-- 'value', 'button_value' - The value returned to Amazon Lex when the user chooses this button. This
+-- must be one of the slot values configured for the slot.
+newButton ::
+  -- | 'text'
+  Prelude.Text ->
+  -- | 'value'
+  Prelude.Text ->
+  Button
+newButton pText_ pValue_ =
+  Button' {text = pText_, value = pValue_}
+
+-- | The text that appears on the button. Use this to tell the user what
+-- value is returned when they choose this button.
+button_text :: Lens.Lens' Button Prelude.Text
+button_text = Lens.lens (\Button' {text} -> text) (\s@Button' {} a -> s {text = a} :: Button)
+
+-- | The value returned to Amazon Lex when the user chooses this button. This
+-- must be one of the slot values configured for the slot.
+button_value :: Lens.Lens' Button Prelude.Text
+button_value = Lens.lens (\Button' {value} -> value) (\s@Button' {} a -> s {value = a} :: Button)
+
+instance Data.FromJSON Button where
+  parseJSON =
+    Data.withObject
+      "Button"
+      ( \x ->
+          Button'
+            Prelude.<$> (x Data..: "text")
+            Prelude.<*> (x Data..: "value")
+      )
+
+instance Prelude.Hashable Button where
+  hashWithSalt _salt Button' {..} =
+    _salt
+      `Prelude.hashWithSalt` text
+      `Prelude.hashWithSalt` value
+
+instance Prelude.NFData Button where
+  rnf Button' {..} =
+    Prelude.rnf text `Prelude.seq` Prelude.rnf value
+
+instance Data.ToJSON Button where
+  toJSON Button' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("text" Data..= text),
+            Prelude.Just ("value" Data..= value)
+          ]
+      )
diff --git a/gen/Amazonka/LexV2Models/Types/CloudWatchLogGroupLogDestination.hs b/gen/Amazonka/LexV2Models/Types/CloudWatchLogGroupLogDestination.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/Types/CloudWatchLogGroupLogDestination.hs
@@ -0,0 +1,121 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.LexV2Models.Types.CloudWatchLogGroupLogDestination
+-- 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.LexV2Models.Types.CloudWatchLogGroupLogDestination 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 Amazon CloudWatch Logs log group where the text and metadata logs
+-- are delivered. The log group must exist before you enable logging.
+--
+-- /See:/ 'newCloudWatchLogGroupLogDestination' smart constructor.
+data CloudWatchLogGroupLogDestination = CloudWatchLogGroupLogDestination'
+  { -- | The Amazon Resource Name (ARN) of the log group where text and metadata
+    -- logs are delivered.
+    cloudWatchLogGroupArn :: Prelude.Text,
+    -- | The prefix of the log stream name within the log group that you
+    -- specified
+    logPrefix :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CloudWatchLogGroupLogDestination' 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:
+--
+-- 'cloudWatchLogGroupArn', 'cloudWatchLogGroupLogDestination_cloudWatchLogGroupArn' - The Amazon Resource Name (ARN) of the log group where text and metadata
+-- logs are delivered.
+--
+-- 'logPrefix', 'cloudWatchLogGroupLogDestination_logPrefix' - The prefix of the log stream name within the log group that you
+-- specified
+newCloudWatchLogGroupLogDestination ::
+  -- | 'cloudWatchLogGroupArn'
+  Prelude.Text ->
+  -- | 'logPrefix'
+  Prelude.Text ->
+  CloudWatchLogGroupLogDestination
+newCloudWatchLogGroupLogDestination
+  pCloudWatchLogGroupArn_
+  pLogPrefix_ =
+    CloudWatchLogGroupLogDestination'
+      { cloudWatchLogGroupArn =
+          pCloudWatchLogGroupArn_,
+        logPrefix = pLogPrefix_
+      }
+
+-- | The Amazon Resource Name (ARN) of the log group where text and metadata
+-- logs are delivered.
+cloudWatchLogGroupLogDestination_cloudWatchLogGroupArn :: Lens.Lens' CloudWatchLogGroupLogDestination Prelude.Text
+cloudWatchLogGroupLogDestination_cloudWatchLogGroupArn = Lens.lens (\CloudWatchLogGroupLogDestination' {cloudWatchLogGroupArn} -> cloudWatchLogGroupArn) (\s@CloudWatchLogGroupLogDestination' {} a -> s {cloudWatchLogGroupArn = a} :: CloudWatchLogGroupLogDestination)
+
+-- | The prefix of the log stream name within the log group that you
+-- specified
+cloudWatchLogGroupLogDestination_logPrefix :: Lens.Lens' CloudWatchLogGroupLogDestination Prelude.Text
+cloudWatchLogGroupLogDestination_logPrefix = Lens.lens (\CloudWatchLogGroupLogDestination' {logPrefix} -> logPrefix) (\s@CloudWatchLogGroupLogDestination' {} a -> s {logPrefix = a} :: CloudWatchLogGroupLogDestination)
+
+instance
+  Data.FromJSON
+    CloudWatchLogGroupLogDestination
+  where
+  parseJSON =
+    Data.withObject
+      "CloudWatchLogGroupLogDestination"
+      ( \x ->
+          CloudWatchLogGroupLogDestination'
+            Prelude.<$> (x Data..: "cloudWatchLogGroupArn")
+            Prelude.<*> (x Data..: "logPrefix")
+      )
+
+instance
+  Prelude.Hashable
+    CloudWatchLogGroupLogDestination
+  where
+  hashWithSalt
+    _salt
+    CloudWatchLogGroupLogDestination' {..} =
+      _salt
+        `Prelude.hashWithSalt` cloudWatchLogGroupArn
+        `Prelude.hashWithSalt` logPrefix
+
+instance
+  Prelude.NFData
+    CloudWatchLogGroupLogDestination
+  where
+  rnf CloudWatchLogGroupLogDestination' {..} =
+    Prelude.rnf cloudWatchLogGroupArn
+      `Prelude.seq` Prelude.rnf logPrefix
+
+instance Data.ToJSON CloudWatchLogGroupLogDestination where
+  toJSON CloudWatchLogGroupLogDestination' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ( "cloudWatchLogGroupArn"
+                  Data..= cloudWatchLogGroupArn
+              ),
+            Prelude.Just ("logPrefix" Data..= logPrefix)
+          ]
+      )
diff --git a/gen/Amazonka/LexV2Models/Types/CodeHookSpecification.hs b/gen/Amazonka/LexV2Models/Types/CodeHookSpecification.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/Types/CodeHookSpecification.hs
@@ -0,0 +1,84 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.LexV2Models.Types.CodeHookSpecification
+-- 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.LexV2Models.Types.CodeHookSpecification where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LexV2Models.Types.LambdaCodeHook
+import qualified Amazonka.Prelude as Prelude
+
+-- | Contains information about code hooks that Amazon Lex calls during a
+-- conversation.
+--
+-- /See:/ 'newCodeHookSpecification' smart constructor.
+data CodeHookSpecification = CodeHookSpecification'
+  { lambdaCodeHook :: LambdaCodeHook
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CodeHookSpecification' 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:
+--
+-- 'lambdaCodeHook', 'codeHookSpecification_lambdaCodeHook' - Undocumented member.
+newCodeHookSpecification ::
+  -- | 'lambdaCodeHook'
+  LambdaCodeHook ->
+  CodeHookSpecification
+newCodeHookSpecification pLambdaCodeHook_ =
+  CodeHookSpecification'
+    { lambdaCodeHook =
+        pLambdaCodeHook_
+    }
+
+-- | Undocumented member.
+codeHookSpecification_lambdaCodeHook :: Lens.Lens' CodeHookSpecification LambdaCodeHook
+codeHookSpecification_lambdaCodeHook = Lens.lens (\CodeHookSpecification' {lambdaCodeHook} -> lambdaCodeHook) (\s@CodeHookSpecification' {} a -> s {lambdaCodeHook = a} :: CodeHookSpecification)
+
+instance Data.FromJSON CodeHookSpecification where
+  parseJSON =
+    Data.withObject
+      "CodeHookSpecification"
+      ( \x ->
+          CodeHookSpecification'
+            Prelude.<$> (x Data..: "lambdaCodeHook")
+      )
+
+instance Prelude.Hashable CodeHookSpecification where
+  hashWithSalt _salt CodeHookSpecification' {..} =
+    _salt `Prelude.hashWithSalt` lambdaCodeHook
+
+instance Prelude.NFData CodeHookSpecification where
+  rnf CodeHookSpecification' {..} =
+    Prelude.rnf lambdaCodeHook
+
+instance Data.ToJSON CodeHookSpecification where
+  toJSON CodeHookSpecification' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ("lambdaCodeHook" Data..= lambdaCodeHook)
+          ]
+      )
diff --git a/gen/Amazonka/LexV2Models/Types/CompositeSlotTypeSetting.hs b/gen/Amazonka/LexV2Models/Types/CompositeSlotTypeSetting.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/Types/CompositeSlotTypeSetting.hs
@@ -0,0 +1,81 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.LexV2Models.Types.CompositeSlotTypeSetting
+-- 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.LexV2Models.Types.CompositeSlotTypeSetting where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LexV2Models.Types.SubSlotTypeComposition
+import qualified Amazonka.Prelude as Prelude
+
+-- | A composite slot is a combination of two or more slots that capture
+-- multiple pieces of information in a single user input.
+--
+-- /See:/ 'newCompositeSlotTypeSetting' smart constructor.
+data CompositeSlotTypeSetting = CompositeSlotTypeSetting'
+  { -- | Subslots in the composite slot.
+    subSlots :: Prelude.Maybe [SubSlotTypeComposition]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CompositeSlotTypeSetting' 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:
+--
+-- 'subSlots', 'compositeSlotTypeSetting_subSlots' - Subslots in the composite slot.
+newCompositeSlotTypeSetting ::
+  CompositeSlotTypeSetting
+newCompositeSlotTypeSetting =
+  CompositeSlotTypeSetting'
+    { subSlots =
+        Prelude.Nothing
+    }
+
+-- | Subslots in the composite slot.
+compositeSlotTypeSetting_subSlots :: Lens.Lens' CompositeSlotTypeSetting (Prelude.Maybe [SubSlotTypeComposition])
+compositeSlotTypeSetting_subSlots = Lens.lens (\CompositeSlotTypeSetting' {subSlots} -> subSlots) (\s@CompositeSlotTypeSetting' {} a -> s {subSlots = a} :: CompositeSlotTypeSetting) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromJSON CompositeSlotTypeSetting where
+  parseJSON =
+    Data.withObject
+      "CompositeSlotTypeSetting"
+      ( \x ->
+          CompositeSlotTypeSetting'
+            Prelude.<$> (x Data..:? "subSlots" Data..!= Prelude.mempty)
+      )
+
+instance Prelude.Hashable CompositeSlotTypeSetting where
+  hashWithSalt _salt CompositeSlotTypeSetting' {..} =
+    _salt `Prelude.hashWithSalt` subSlots
+
+instance Prelude.NFData CompositeSlotTypeSetting where
+  rnf CompositeSlotTypeSetting' {..} =
+    Prelude.rnf subSlots
+
+instance Data.ToJSON CompositeSlotTypeSetting where
+  toJSON CompositeSlotTypeSetting' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [("subSlots" Data..=) Prelude.<$> subSlots]
+      )
diff --git a/gen/Amazonka/LexV2Models/Types/Condition.hs b/gen/Amazonka/LexV2Models/Types/Condition.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/Types/Condition.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.LexV2Models.Types.Condition
+-- 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.LexV2Models.Types.Condition 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
+
+-- | Provides an expression that evaluates to true or false.
+--
+-- /See:/ 'newCondition' smart constructor.
+data Condition = Condition'
+  { -- | The expression string that is evaluated.
+    expressionString :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Condition' 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:
+--
+-- 'expressionString', 'condition_expressionString' - The expression string that is evaluated.
+newCondition ::
+  -- | 'expressionString'
+  Prelude.Text ->
+  Condition
+newCondition pExpressionString_ =
+  Condition' {expressionString = pExpressionString_}
+
+-- | The expression string that is evaluated.
+condition_expressionString :: Lens.Lens' Condition Prelude.Text
+condition_expressionString = Lens.lens (\Condition' {expressionString} -> expressionString) (\s@Condition' {} a -> s {expressionString = a} :: Condition)
+
+instance Data.FromJSON Condition where
+  parseJSON =
+    Data.withObject
+      "Condition"
+      ( \x ->
+          Condition'
+            Prelude.<$> (x Data..: "expressionString")
+      )
+
+instance Prelude.Hashable Condition where
+  hashWithSalt _salt Condition' {..} =
+    _salt `Prelude.hashWithSalt` expressionString
+
+instance Prelude.NFData Condition where
+  rnf Condition' {..} = Prelude.rnf expressionString
+
+instance Data.ToJSON Condition where
+  toJSON Condition' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ("expressionString" Data..= expressionString)
+          ]
+      )
diff --git a/gen/Amazonka/LexV2Models/Types/ConditionalBranch.hs b/gen/Amazonka/LexV2Models/Types/ConditionalBranch.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/Types/ConditionalBranch.hs
@@ -0,0 +1,130 @@
+{-# 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.LexV2Models.Types.ConditionalBranch
+-- 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.LexV2Models.Types.ConditionalBranch where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LexV2Models.Types.Condition
+import Amazonka.LexV2Models.Types.DialogState
+import Amazonka.LexV2Models.Types.ResponseSpecification
+import qualified Amazonka.Prelude as Prelude
+
+-- | A set of actions that Amazon Lex should run if the condition is matched.
+--
+-- /See:/ 'newConditionalBranch' smart constructor.
+data ConditionalBranch = ConditionalBranch'
+  { response :: Prelude.Maybe ResponseSpecification,
+    -- | The name of the branch.
+    name :: Prelude.Text,
+    -- | Contains the expression to evaluate. If the condition is true, the
+    -- branch\'s actions are taken.
+    condition :: Condition,
+    -- | The next step in the conversation.
+    nextStep :: DialogState
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ConditionalBranch' 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:
+--
+-- 'response', 'conditionalBranch_response' - Undocumented member.
+--
+-- 'name', 'conditionalBranch_name' - The name of the branch.
+--
+-- 'condition', 'conditionalBranch_condition' - Contains the expression to evaluate. If the condition is true, the
+-- branch\'s actions are taken.
+--
+-- 'nextStep', 'conditionalBranch_nextStep' - The next step in the conversation.
+newConditionalBranch ::
+  -- | 'name'
+  Prelude.Text ->
+  -- | 'condition'
+  Condition ->
+  -- | 'nextStep'
+  DialogState ->
+  ConditionalBranch
+newConditionalBranch pName_ pCondition_ pNextStep_ =
+  ConditionalBranch'
+    { response = Prelude.Nothing,
+      name = pName_,
+      condition = pCondition_,
+      nextStep = pNextStep_
+    }
+
+-- | Undocumented member.
+conditionalBranch_response :: Lens.Lens' ConditionalBranch (Prelude.Maybe ResponseSpecification)
+conditionalBranch_response = Lens.lens (\ConditionalBranch' {response} -> response) (\s@ConditionalBranch' {} a -> s {response = a} :: ConditionalBranch)
+
+-- | The name of the branch.
+conditionalBranch_name :: Lens.Lens' ConditionalBranch Prelude.Text
+conditionalBranch_name = Lens.lens (\ConditionalBranch' {name} -> name) (\s@ConditionalBranch' {} a -> s {name = a} :: ConditionalBranch)
+
+-- | Contains the expression to evaluate. If the condition is true, the
+-- branch\'s actions are taken.
+conditionalBranch_condition :: Lens.Lens' ConditionalBranch Condition
+conditionalBranch_condition = Lens.lens (\ConditionalBranch' {condition} -> condition) (\s@ConditionalBranch' {} a -> s {condition = a} :: ConditionalBranch)
+
+-- | The next step in the conversation.
+conditionalBranch_nextStep :: Lens.Lens' ConditionalBranch DialogState
+conditionalBranch_nextStep = Lens.lens (\ConditionalBranch' {nextStep} -> nextStep) (\s@ConditionalBranch' {} a -> s {nextStep = a} :: ConditionalBranch)
+
+instance Data.FromJSON ConditionalBranch where
+  parseJSON =
+    Data.withObject
+      "ConditionalBranch"
+      ( \x ->
+          ConditionalBranch'
+            Prelude.<$> (x Data..:? "response")
+            Prelude.<*> (x Data..: "name")
+            Prelude.<*> (x Data..: "condition")
+            Prelude.<*> (x Data..: "nextStep")
+      )
+
+instance Prelude.Hashable ConditionalBranch where
+  hashWithSalt _salt ConditionalBranch' {..} =
+    _salt
+      `Prelude.hashWithSalt` response
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` condition
+      `Prelude.hashWithSalt` nextStep
+
+instance Prelude.NFData ConditionalBranch where
+  rnf ConditionalBranch' {..} =
+    Prelude.rnf response
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf condition
+      `Prelude.seq` Prelude.rnf nextStep
+
+instance Data.ToJSON ConditionalBranch where
+  toJSON ConditionalBranch' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("response" Data..=) Prelude.<$> response,
+            Prelude.Just ("name" Data..= name),
+            Prelude.Just ("condition" Data..= condition),
+            Prelude.Just ("nextStep" Data..= nextStep)
+          ]
+      )
diff --git a/gen/Amazonka/LexV2Models/Types/ConditionalSpecification.hs b/gen/Amazonka/LexV2Models/Types/ConditionalSpecification.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/Types/ConditionalSpecification.hs
@@ -0,0 +1,140 @@
+{-# 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.LexV2Models.Types.ConditionalSpecification
+-- 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.LexV2Models.Types.ConditionalSpecification where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LexV2Models.Types.ConditionalBranch
+import Amazonka.LexV2Models.Types.DefaultConditionalBranch
+import qualified Amazonka.Prelude as Prelude
+
+-- | Provides a list of conditional branches. Branches are evaluated in the
+-- order that they are entered in the list. The first branch with a
+-- condition that evaluates to true is executed. The last branch in the
+-- list is the default branch. The default branch should not have any
+-- condition expression. The default branch is executed if no other branch
+-- has a matching condition.
+--
+-- /See:/ 'newConditionalSpecification' smart constructor.
+data ConditionalSpecification = ConditionalSpecification'
+  { -- | Determines whether a conditional branch is active. When @active@ is
+    -- false, the conditions are not evaluated.
+    active :: Prelude.Bool,
+    -- | A list of conditional branches. A conditional branch is made up of a
+    -- condition, a response and a next step. The response and next step are
+    -- executed when the condition is true.
+    conditionalBranches :: Prelude.NonEmpty ConditionalBranch,
+    -- | The conditional branch that should be followed when the conditions for
+    -- other branches are not satisfied. A conditional branch is made up of a
+    -- condition, a response and a next step.
+    defaultBranch :: DefaultConditionalBranch
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ConditionalSpecification' 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:
+--
+-- 'active', 'conditionalSpecification_active' - Determines whether a conditional branch is active. When @active@ is
+-- false, the conditions are not evaluated.
+--
+-- 'conditionalBranches', 'conditionalSpecification_conditionalBranches' - A list of conditional branches. A conditional branch is made up of a
+-- condition, a response and a next step. The response and next step are
+-- executed when the condition is true.
+--
+-- 'defaultBranch', 'conditionalSpecification_defaultBranch' - The conditional branch that should be followed when the conditions for
+-- other branches are not satisfied. A conditional branch is made up of a
+-- condition, a response and a next step.
+newConditionalSpecification ::
+  -- | 'active'
+  Prelude.Bool ->
+  -- | 'conditionalBranches'
+  Prelude.NonEmpty ConditionalBranch ->
+  -- | 'defaultBranch'
+  DefaultConditionalBranch ->
+  ConditionalSpecification
+newConditionalSpecification
+  pActive_
+  pConditionalBranches_
+  pDefaultBranch_ =
+    ConditionalSpecification'
+      { active = pActive_,
+        conditionalBranches =
+          Lens.coerced Lens.# pConditionalBranches_,
+        defaultBranch = pDefaultBranch_
+      }
+
+-- | Determines whether a conditional branch is active. When @active@ is
+-- false, the conditions are not evaluated.
+conditionalSpecification_active :: Lens.Lens' ConditionalSpecification Prelude.Bool
+conditionalSpecification_active = Lens.lens (\ConditionalSpecification' {active} -> active) (\s@ConditionalSpecification' {} a -> s {active = a} :: ConditionalSpecification)
+
+-- | A list of conditional branches. A conditional branch is made up of a
+-- condition, a response and a next step. The response and next step are
+-- executed when the condition is true.
+conditionalSpecification_conditionalBranches :: Lens.Lens' ConditionalSpecification (Prelude.NonEmpty ConditionalBranch)
+conditionalSpecification_conditionalBranches = Lens.lens (\ConditionalSpecification' {conditionalBranches} -> conditionalBranches) (\s@ConditionalSpecification' {} a -> s {conditionalBranches = a} :: ConditionalSpecification) Prelude.. Lens.coerced
+
+-- | The conditional branch that should be followed when the conditions for
+-- other branches are not satisfied. A conditional branch is made up of a
+-- condition, a response and a next step.
+conditionalSpecification_defaultBranch :: Lens.Lens' ConditionalSpecification DefaultConditionalBranch
+conditionalSpecification_defaultBranch = Lens.lens (\ConditionalSpecification' {defaultBranch} -> defaultBranch) (\s@ConditionalSpecification' {} a -> s {defaultBranch = a} :: ConditionalSpecification)
+
+instance Data.FromJSON ConditionalSpecification where
+  parseJSON =
+    Data.withObject
+      "ConditionalSpecification"
+      ( \x ->
+          ConditionalSpecification'
+            Prelude.<$> (x Data..: "active")
+            Prelude.<*> (x Data..: "conditionalBranches")
+            Prelude.<*> (x Data..: "defaultBranch")
+      )
+
+instance Prelude.Hashable ConditionalSpecification where
+  hashWithSalt _salt ConditionalSpecification' {..} =
+    _salt
+      `Prelude.hashWithSalt` active
+      `Prelude.hashWithSalt` conditionalBranches
+      `Prelude.hashWithSalt` defaultBranch
+
+instance Prelude.NFData ConditionalSpecification where
+  rnf ConditionalSpecification' {..} =
+    Prelude.rnf active
+      `Prelude.seq` Prelude.rnf conditionalBranches
+      `Prelude.seq` Prelude.rnf defaultBranch
+
+instance Data.ToJSON ConditionalSpecification where
+  toJSON ConditionalSpecification' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("active" Data..= active),
+            Prelude.Just
+              ("conditionalBranches" Data..= conditionalBranches),
+            Prelude.Just
+              ("defaultBranch" Data..= defaultBranch)
+          ]
+      )
diff --git a/gen/Amazonka/LexV2Models/Types/ConversationLogSettings.hs b/gen/Amazonka/LexV2Models/Types/ConversationLogSettings.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/Types/ConversationLogSettings.hs
@@ -0,0 +1,99 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.LexV2Models.Types.ConversationLogSettings
+-- 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.LexV2Models.Types.ConversationLogSettings where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LexV2Models.Types.AudioLogSetting
+import Amazonka.LexV2Models.Types.TextLogSetting
+import qualified Amazonka.Prelude as Prelude
+
+-- | Configures conversation logging that saves audio, text, and metadata for
+-- the conversations with your users.
+--
+-- /See:/ 'newConversationLogSettings' smart constructor.
+data ConversationLogSettings = ConversationLogSettings'
+  { -- | The Amazon S3 settings for logging audio to an S3 bucket.
+    audioLogSettings :: Prelude.Maybe (Prelude.NonEmpty AudioLogSetting),
+    -- | The Amazon CloudWatch Logs settings for logging text and metadata.
+    textLogSettings :: Prelude.Maybe (Prelude.NonEmpty TextLogSetting)
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ConversationLogSettings' 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:
+--
+-- 'audioLogSettings', 'conversationLogSettings_audioLogSettings' - The Amazon S3 settings for logging audio to an S3 bucket.
+--
+-- 'textLogSettings', 'conversationLogSettings_textLogSettings' - The Amazon CloudWatch Logs settings for logging text and metadata.
+newConversationLogSettings ::
+  ConversationLogSettings
+newConversationLogSettings =
+  ConversationLogSettings'
+    { audioLogSettings =
+        Prelude.Nothing,
+      textLogSettings = Prelude.Nothing
+    }
+
+-- | The Amazon S3 settings for logging audio to an S3 bucket.
+conversationLogSettings_audioLogSettings :: Lens.Lens' ConversationLogSettings (Prelude.Maybe (Prelude.NonEmpty AudioLogSetting))
+conversationLogSettings_audioLogSettings = Lens.lens (\ConversationLogSettings' {audioLogSettings} -> audioLogSettings) (\s@ConversationLogSettings' {} a -> s {audioLogSettings = a} :: ConversationLogSettings) Prelude.. Lens.mapping Lens.coerced
+
+-- | The Amazon CloudWatch Logs settings for logging text and metadata.
+conversationLogSettings_textLogSettings :: Lens.Lens' ConversationLogSettings (Prelude.Maybe (Prelude.NonEmpty TextLogSetting))
+conversationLogSettings_textLogSettings = Lens.lens (\ConversationLogSettings' {textLogSettings} -> textLogSettings) (\s@ConversationLogSettings' {} a -> s {textLogSettings = a} :: ConversationLogSettings) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromJSON ConversationLogSettings where
+  parseJSON =
+    Data.withObject
+      "ConversationLogSettings"
+      ( \x ->
+          ConversationLogSettings'
+            Prelude.<$> (x Data..:? "audioLogSettings")
+            Prelude.<*> (x Data..:? "textLogSettings")
+      )
+
+instance Prelude.Hashable ConversationLogSettings where
+  hashWithSalt _salt ConversationLogSettings' {..} =
+    _salt
+      `Prelude.hashWithSalt` audioLogSettings
+      `Prelude.hashWithSalt` textLogSettings
+
+instance Prelude.NFData ConversationLogSettings where
+  rnf ConversationLogSettings' {..} =
+    Prelude.rnf audioLogSettings
+      `Prelude.seq` Prelude.rnf textLogSettings
+
+instance Data.ToJSON ConversationLogSettings where
+  toJSON ConversationLogSettings' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("audioLogSettings" Data..=)
+              Prelude.<$> audioLogSettings,
+            ("textLogSettings" Data..=)
+              Prelude.<$> textLogSettings
+          ]
+      )
diff --git a/gen/Amazonka/LexV2Models/Types/CustomPayload.hs b/gen/Amazonka/LexV2Models/Types/CustomPayload.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/Types/CustomPayload.hs
@@ -0,0 +1,77 @@
+{-# 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.LexV2Models.Types.CustomPayload
+-- 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.LexV2Models.Types.CustomPayload 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 custom response string that Amazon Lex sends to your application. You
+-- define the content and structure the string.
+--
+-- /See:/ 'newCustomPayload' smart constructor.
+data CustomPayload = CustomPayload'
+  { -- | The string that is sent to your application.
+    value :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CustomPayload' 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:
+--
+-- 'value', 'customPayload_value' - The string that is sent to your application.
+newCustomPayload ::
+  -- | 'value'
+  Prelude.Text ->
+  CustomPayload
+newCustomPayload pValue_ =
+  CustomPayload' {value = pValue_}
+
+-- | The string that is sent to your application.
+customPayload_value :: Lens.Lens' CustomPayload Prelude.Text
+customPayload_value = Lens.lens (\CustomPayload' {value} -> value) (\s@CustomPayload' {} a -> s {value = a} :: CustomPayload)
+
+instance Data.FromJSON CustomPayload where
+  parseJSON =
+    Data.withObject
+      "CustomPayload"
+      ( \x ->
+          CustomPayload' Prelude.<$> (x Data..: "value")
+      )
+
+instance Prelude.Hashable CustomPayload where
+  hashWithSalt _salt CustomPayload' {..} =
+    _salt `Prelude.hashWithSalt` value
+
+instance Prelude.NFData CustomPayload where
+  rnf CustomPayload' {..} = Prelude.rnf value
+
+instance Data.ToJSON CustomPayload where
+  toJSON CustomPayload' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("value" Data..= value)]
+      )
diff --git a/gen/Amazonka/LexV2Models/Types/CustomVocabularyEntryId.hs b/gen/Amazonka/LexV2Models/Types/CustomVocabularyEntryId.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/Types/CustomVocabularyEntryId.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.LexV2Models.Types.CustomVocabularyEntryId
+-- 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.LexV2Models.Types.CustomVocabularyEntryId 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 unique entry identifier for the custom vocabulary items.
+--
+-- /See:/ 'newCustomVocabularyEntryId' smart constructor.
+data CustomVocabularyEntryId = CustomVocabularyEntryId'
+  { -- | The unique item identifier for the custom vocabulary items.
+    itemId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CustomVocabularyEntryId' 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:
+--
+-- 'itemId', 'customVocabularyEntryId_itemId' - The unique item identifier for the custom vocabulary items.
+newCustomVocabularyEntryId ::
+  -- | 'itemId'
+  Prelude.Text ->
+  CustomVocabularyEntryId
+newCustomVocabularyEntryId pItemId_ =
+  CustomVocabularyEntryId' {itemId = pItemId_}
+
+-- | The unique item identifier for the custom vocabulary items.
+customVocabularyEntryId_itemId :: Lens.Lens' CustomVocabularyEntryId Prelude.Text
+customVocabularyEntryId_itemId = Lens.lens (\CustomVocabularyEntryId' {itemId} -> itemId) (\s@CustomVocabularyEntryId' {} a -> s {itemId = a} :: CustomVocabularyEntryId)
+
+instance Prelude.Hashable CustomVocabularyEntryId where
+  hashWithSalt _salt CustomVocabularyEntryId' {..} =
+    _salt `Prelude.hashWithSalt` itemId
+
+instance Prelude.NFData CustomVocabularyEntryId where
+  rnf CustomVocabularyEntryId' {..} = Prelude.rnf itemId
+
+instance Data.ToJSON CustomVocabularyEntryId where
+  toJSON CustomVocabularyEntryId' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("itemId" Data..= itemId)]
+      )
diff --git a/gen/Amazonka/LexV2Models/Types/CustomVocabularyExportSpecification.hs b/gen/Amazonka/LexV2Models/Types/CustomVocabularyExportSpecification.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/Types/CustomVocabularyExportSpecification.hs
@@ -0,0 +1,130 @@
+{-# 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.LexV2Models.Types.CustomVocabularyExportSpecification
+-- 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.LexV2Models.Types.CustomVocabularyExportSpecification 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
+
+-- | Provides the parameters required for exporting a custom vocabulary.
+--
+-- /See:/ 'newCustomVocabularyExportSpecification' smart constructor.
+data CustomVocabularyExportSpecification = CustomVocabularyExportSpecification'
+  { -- | The identifier of the bot that contains the custom vocabulary to export.
+    botId :: Prelude.Text,
+    -- | The version of the bot that contains the custom vocabulary to export.
+    botVersion :: Prelude.Text,
+    -- | The locale of the bot that contains the custom vocabulary to export.
+    localeId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CustomVocabularyExportSpecification' 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:
+--
+-- 'botId', 'customVocabularyExportSpecification_botId' - The identifier of the bot that contains the custom vocabulary to export.
+--
+-- 'botVersion', 'customVocabularyExportSpecification_botVersion' - The version of the bot that contains the custom vocabulary to export.
+--
+-- 'localeId', 'customVocabularyExportSpecification_localeId' - The locale of the bot that contains the custom vocabulary to export.
+newCustomVocabularyExportSpecification ::
+  -- | 'botId'
+  Prelude.Text ->
+  -- | 'botVersion'
+  Prelude.Text ->
+  -- | 'localeId'
+  Prelude.Text ->
+  CustomVocabularyExportSpecification
+newCustomVocabularyExportSpecification
+  pBotId_
+  pBotVersion_
+  pLocaleId_ =
+    CustomVocabularyExportSpecification'
+      { botId =
+          pBotId_,
+        botVersion = pBotVersion_,
+        localeId = pLocaleId_
+      }
+
+-- | The identifier of the bot that contains the custom vocabulary to export.
+customVocabularyExportSpecification_botId :: Lens.Lens' CustomVocabularyExportSpecification Prelude.Text
+customVocabularyExportSpecification_botId = Lens.lens (\CustomVocabularyExportSpecification' {botId} -> botId) (\s@CustomVocabularyExportSpecification' {} a -> s {botId = a} :: CustomVocabularyExportSpecification)
+
+-- | The version of the bot that contains the custom vocabulary to export.
+customVocabularyExportSpecification_botVersion :: Lens.Lens' CustomVocabularyExportSpecification Prelude.Text
+customVocabularyExportSpecification_botVersion = Lens.lens (\CustomVocabularyExportSpecification' {botVersion} -> botVersion) (\s@CustomVocabularyExportSpecification' {} a -> s {botVersion = a} :: CustomVocabularyExportSpecification)
+
+-- | The locale of the bot that contains the custom vocabulary to export.
+customVocabularyExportSpecification_localeId :: Lens.Lens' CustomVocabularyExportSpecification Prelude.Text
+customVocabularyExportSpecification_localeId = Lens.lens (\CustomVocabularyExportSpecification' {localeId} -> localeId) (\s@CustomVocabularyExportSpecification' {} a -> s {localeId = a} :: CustomVocabularyExportSpecification)
+
+instance
+  Data.FromJSON
+    CustomVocabularyExportSpecification
+  where
+  parseJSON =
+    Data.withObject
+      "CustomVocabularyExportSpecification"
+      ( \x ->
+          CustomVocabularyExportSpecification'
+            Prelude.<$> (x Data..: "botId")
+            Prelude.<*> (x Data..: "botVersion")
+            Prelude.<*> (x Data..: "localeId")
+      )
+
+instance
+  Prelude.Hashable
+    CustomVocabularyExportSpecification
+  where
+  hashWithSalt
+    _salt
+    CustomVocabularyExportSpecification' {..} =
+      _salt
+        `Prelude.hashWithSalt` botId
+        `Prelude.hashWithSalt` botVersion
+        `Prelude.hashWithSalt` localeId
+
+instance
+  Prelude.NFData
+    CustomVocabularyExportSpecification
+  where
+  rnf CustomVocabularyExportSpecification' {..} =
+    Prelude.rnf botId
+      `Prelude.seq` Prelude.rnf botVersion
+      `Prelude.seq` Prelude.rnf localeId
+
+instance
+  Data.ToJSON
+    CustomVocabularyExportSpecification
+  where
+  toJSON CustomVocabularyExportSpecification' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("botId" Data..= botId),
+            Prelude.Just ("botVersion" Data..= botVersion),
+            Prelude.Just ("localeId" Data..= localeId)
+          ]
+      )
diff --git a/gen/Amazonka/LexV2Models/Types/CustomVocabularyImportSpecification.hs b/gen/Amazonka/LexV2Models/Types/CustomVocabularyImportSpecification.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/Types/CustomVocabularyImportSpecification.hs
@@ -0,0 +1,133 @@
+{-# 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.LexV2Models.Types.CustomVocabularyImportSpecification
+-- 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.LexV2Models.Types.CustomVocabularyImportSpecification 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
+
+-- | Provides the parameters required for importing a custom vocabulary.
+--
+-- /See:/ 'newCustomVocabularyImportSpecification' smart constructor.
+data CustomVocabularyImportSpecification = CustomVocabularyImportSpecification'
+  { -- | The identifier of the bot to import the custom vocabulary to.
+    botId :: Prelude.Text,
+    -- | The version of the bot to import the custom vocabulary to.
+    botVersion :: Prelude.Text,
+    -- | The identifier of the local to import the custom vocabulary to. The
+    -- value must be @en_GB@.
+    localeId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CustomVocabularyImportSpecification' 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:
+--
+-- 'botId', 'customVocabularyImportSpecification_botId' - The identifier of the bot to import the custom vocabulary to.
+--
+-- 'botVersion', 'customVocabularyImportSpecification_botVersion' - The version of the bot to import the custom vocabulary to.
+--
+-- 'localeId', 'customVocabularyImportSpecification_localeId' - The identifier of the local to import the custom vocabulary to. The
+-- value must be @en_GB@.
+newCustomVocabularyImportSpecification ::
+  -- | 'botId'
+  Prelude.Text ->
+  -- | 'botVersion'
+  Prelude.Text ->
+  -- | 'localeId'
+  Prelude.Text ->
+  CustomVocabularyImportSpecification
+newCustomVocabularyImportSpecification
+  pBotId_
+  pBotVersion_
+  pLocaleId_ =
+    CustomVocabularyImportSpecification'
+      { botId =
+          pBotId_,
+        botVersion = pBotVersion_,
+        localeId = pLocaleId_
+      }
+
+-- | The identifier of the bot to import the custom vocabulary to.
+customVocabularyImportSpecification_botId :: Lens.Lens' CustomVocabularyImportSpecification Prelude.Text
+customVocabularyImportSpecification_botId = Lens.lens (\CustomVocabularyImportSpecification' {botId} -> botId) (\s@CustomVocabularyImportSpecification' {} a -> s {botId = a} :: CustomVocabularyImportSpecification)
+
+-- | The version of the bot to import the custom vocabulary to.
+customVocabularyImportSpecification_botVersion :: Lens.Lens' CustomVocabularyImportSpecification Prelude.Text
+customVocabularyImportSpecification_botVersion = Lens.lens (\CustomVocabularyImportSpecification' {botVersion} -> botVersion) (\s@CustomVocabularyImportSpecification' {} a -> s {botVersion = a} :: CustomVocabularyImportSpecification)
+
+-- | The identifier of the local to import the custom vocabulary to. The
+-- value must be @en_GB@.
+customVocabularyImportSpecification_localeId :: Lens.Lens' CustomVocabularyImportSpecification Prelude.Text
+customVocabularyImportSpecification_localeId = Lens.lens (\CustomVocabularyImportSpecification' {localeId} -> localeId) (\s@CustomVocabularyImportSpecification' {} a -> s {localeId = a} :: CustomVocabularyImportSpecification)
+
+instance
+  Data.FromJSON
+    CustomVocabularyImportSpecification
+  where
+  parseJSON =
+    Data.withObject
+      "CustomVocabularyImportSpecification"
+      ( \x ->
+          CustomVocabularyImportSpecification'
+            Prelude.<$> (x Data..: "botId")
+            Prelude.<*> (x Data..: "botVersion")
+            Prelude.<*> (x Data..: "localeId")
+      )
+
+instance
+  Prelude.Hashable
+    CustomVocabularyImportSpecification
+  where
+  hashWithSalt
+    _salt
+    CustomVocabularyImportSpecification' {..} =
+      _salt
+        `Prelude.hashWithSalt` botId
+        `Prelude.hashWithSalt` botVersion
+        `Prelude.hashWithSalt` localeId
+
+instance
+  Prelude.NFData
+    CustomVocabularyImportSpecification
+  where
+  rnf CustomVocabularyImportSpecification' {..} =
+    Prelude.rnf botId
+      `Prelude.seq` Prelude.rnf botVersion
+      `Prelude.seq` Prelude.rnf localeId
+
+instance
+  Data.ToJSON
+    CustomVocabularyImportSpecification
+  where
+  toJSON CustomVocabularyImportSpecification' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("botId" Data..= botId),
+            Prelude.Just ("botVersion" Data..= botVersion),
+            Prelude.Just ("localeId" Data..= localeId)
+          ]
+      )
diff --git a/gen/Amazonka/LexV2Models/Types/CustomVocabularyItem.hs b/gen/Amazonka/LexV2Models/Types/CustomVocabularyItem.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/Types/CustomVocabularyItem.hs
@@ -0,0 +1,135 @@
+{-# 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.LexV2Models.Types.CustomVocabularyItem
+-- 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.LexV2Models.Types.CustomVocabularyItem 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 unique custom vocabulary item from the custom vocabulary list.
+--
+-- /See:/ 'newCustomVocabularyItem' smart constructor.
+data CustomVocabularyItem = CustomVocabularyItem'
+  { -- | The display as value for the custom vocabulary item from the custom
+    -- vocabulary list.
+    displayAs :: Prelude.Maybe Prelude.Text,
+    -- | The weight assigned for the custom vocabulary item from the custom
+    -- vocabulary list.
+    weight :: Prelude.Maybe Prelude.Natural,
+    -- | The unique item identifer for the custom vocabulary item from the custom
+    -- vocabulary list.
+    itemId :: Prelude.Text,
+    -- | The unique phrase for the custom vocabulary item from the custom
+    -- vocabulary list.
+    phrase :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CustomVocabularyItem' 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:
+--
+-- 'displayAs', 'customVocabularyItem_displayAs' - The display as value for the custom vocabulary item from the custom
+-- vocabulary list.
+--
+-- 'weight', 'customVocabularyItem_weight' - The weight assigned for the custom vocabulary item from the custom
+-- vocabulary list.
+--
+-- 'itemId', 'customVocabularyItem_itemId' - The unique item identifer for the custom vocabulary item from the custom
+-- vocabulary list.
+--
+-- 'phrase', 'customVocabularyItem_phrase' - The unique phrase for the custom vocabulary item from the custom
+-- vocabulary list.
+newCustomVocabularyItem ::
+  -- | 'itemId'
+  Prelude.Text ->
+  -- | 'phrase'
+  Prelude.Text ->
+  CustomVocabularyItem
+newCustomVocabularyItem pItemId_ pPhrase_ =
+  CustomVocabularyItem'
+    { displayAs = Prelude.Nothing,
+      weight = Prelude.Nothing,
+      itemId = pItemId_,
+      phrase = pPhrase_
+    }
+
+-- | The display as value for the custom vocabulary item from the custom
+-- vocabulary list.
+customVocabularyItem_displayAs :: Lens.Lens' CustomVocabularyItem (Prelude.Maybe Prelude.Text)
+customVocabularyItem_displayAs = Lens.lens (\CustomVocabularyItem' {displayAs} -> displayAs) (\s@CustomVocabularyItem' {} a -> s {displayAs = a} :: CustomVocabularyItem)
+
+-- | The weight assigned for the custom vocabulary item from the custom
+-- vocabulary list.
+customVocabularyItem_weight :: Lens.Lens' CustomVocabularyItem (Prelude.Maybe Prelude.Natural)
+customVocabularyItem_weight = Lens.lens (\CustomVocabularyItem' {weight} -> weight) (\s@CustomVocabularyItem' {} a -> s {weight = a} :: CustomVocabularyItem)
+
+-- | The unique item identifer for the custom vocabulary item from the custom
+-- vocabulary list.
+customVocabularyItem_itemId :: Lens.Lens' CustomVocabularyItem Prelude.Text
+customVocabularyItem_itemId = Lens.lens (\CustomVocabularyItem' {itemId} -> itemId) (\s@CustomVocabularyItem' {} a -> s {itemId = a} :: CustomVocabularyItem)
+
+-- | The unique phrase for the custom vocabulary item from the custom
+-- vocabulary list.
+customVocabularyItem_phrase :: Lens.Lens' CustomVocabularyItem Prelude.Text
+customVocabularyItem_phrase = Lens.lens (\CustomVocabularyItem' {phrase} -> phrase) (\s@CustomVocabularyItem' {} a -> s {phrase = a} :: CustomVocabularyItem)
+
+instance Data.FromJSON CustomVocabularyItem where
+  parseJSON =
+    Data.withObject
+      "CustomVocabularyItem"
+      ( \x ->
+          CustomVocabularyItem'
+            Prelude.<$> (x Data..:? "displayAs")
+            Prelude.<*> (x Data..:? "weight")
+            Prelude.<*> (x Data..: "itemId")
+            Prelude.<*> (x Data..: "phrase")
+      )
+
+instance Prelude.Hashable CustomVocabularyItem where
+  hashWithSalt _salt CustomVocabularyItem' {..} =
+    _salt
+      `Prelude.hashWithSalt` displayAs
+      `Prelude.hashWithSalt` weight
+      `Prelude.hashWithSalt` itemId
+      `Prelude.hashWithSalt` phrase
+
+instance Prelude.NFData CustomVocabularyItem where
+  rnf CustomVocabularyItem' {..} =
+    Prelude.rnf displayAs
+      `Prelude.seq` Prelude.rnf weight
+      `Prelude.seq` Prelude.rnf itemId
+      `Prelude.seq` Prelude.rnf phrase
+
+instance Data.ToJSON CustomVocabularyItem where
+  toJSON CustomVocabularyItem' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("displayAs" Data..=) Prelude.<$> displayAs,
+            ("weight" Data..=) Prelude.<$> weight,
+            Prelude.Just ("itemId" Data..= itemId),
+            Prelude.Just ("phrase" Data..= phrase)
+          ]
+      )
diff --git a/gen/Amazonka/LexV2Models/Types/CustomVocabularyStatus.hs b/gen/Amazonka/LexV2Models/Types/CustomVocabularyStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/Types/CustomVocabularyStatus.hs
@@ -0,0 +1,86 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.LexV2Models.Types.CustomVocabularyStatus
+-- 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.LexV2Models.Types.CustomVocabularyStatus
+  ( CustomVocabularyStatus
+      ( ..,
+        CustomVocabularyStatus_Creating,
+        CustomVocabularyStatus_Deleting,
+        CustomVocabularyStatus_Exporting,
+        CustomVocabularyStatus_Importing,
+        CustomVocabularyStatus_Ready
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype CustomVocabularyStatus = CustomVocabularyStatus'
+  { fromCustomVocabularyStatus ::
+      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 CustomVocabularyStatus_Creating :: CustomVocabularyStatus
+pattern CustomVocabularyStatus_Creating = CustomVocabularyStatus' "Creating"
+
+pattern CustomVocabularyStatus_Deleting :: CustomVocabularyStatus
+pattern CustomVocabularyStatus_Deleting = CustomVocabularyStatus' "Deleting"
+
+pattern CustomVocabularyStatus_Exporting :: CustomVocabularyStatus
+pattern CustomVocabularyStatus_Exporting = CustomVocabularyStatus' "Exporting"
+
+pattern CustomVocabularyStatus_Importing :: CustomVocabularyStatus
+pattern CustomVocabularyStatus_Importing = CustomVocabularyStatus' "Importing"
+
+pattern CustomVocabularyStatus_Ready :: CustomVocabularyStatus
+pattern CustomVocabularyStatus_Ready = CustomVocabularyStatus' "Ready"
+
+{-# COMPLETE
+  CustomVocabularyStatus_Creating,
+  CustomVocabularyStatus_Deleting,
+  CustomVocabularyStatus_Exporting,
+  CustomVocabularyStatus_Importing,
+  CustomVocabularyStatus_Ready,
+  CustomVocabularyStatus'
+  #-}
diff --git a/gen/Amazonka/LexV2Models/Types/DTMFSpecification.hs b/gen/Amazonka/LexV2Models/Types/DTMFSpecification.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/Types/DTMFSpecification.hs
@@ -0,0 +1,141 @@
+{-# 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.LexV2Models.Types.DTMFSpecification
+-- 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.LexV2Models.Types.DTMFSpecification 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
+
+-- | Specifies the DTMF input specifications.
+--
+-- /See:/ 'newDTMFSpecification' smart constructor.
+data DTMFSpecification = DTMFSpecification'
+  { -- | The maximum number of DTMF digits allowed in an utterance.
+    maxLength :: Prelude.Natural,
+    -- | How long the bot should wait after the last DTMF character input before
+    -- assuming that the input has concluded.
+    endTimeoutMs :: Prelude.Natural,
+    -- | The DTMF character that clears the accumulated DTMF digits and
+    -- immediately ends the input.
+    deletionCharacter :: Prelude.Text,
+    -- | The DTMF character that immediately ends input. If the user does not
+    -- press this character, the input ends after the end timeout.
+    endCharacter :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DTMFSpecification' 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:
+--
+-- 'maxLength', 'dTMFSpecification_maxLength' - The maximum number of DTMF digits allowed in an utterance.
+--
+-- 'endTimeoutMs', 'dTMFSpecification_endTimeoutMs' - How long the bot should wait after the last DTMF character input before
+-- assuming that the input has concluded.
+--
+-- 'deletionCharacter', 'dTMFSpecification_deletionCharacter' - The DTMF character that clears the accumulated DTMF digits and
+-- immediately ends the input.
+--
+-- 'endCharacter', 'dTMFSpecification_endCharacter' - The DTMF character that immediately ends input. If the user does not
+-- press this character, the input ends after the end timeout.
+newDTMFSpecification ::
+  -- | 'maxLength'
+  Prelude.Natural ->
+  -- | 'endTimeoutMs'
+  Prelude.Natural ->
+  -- | 'deletionCharacter'
+  Prelude.Text ->
+  -- | 'endCharacter'
+  Prelude.Text ->
+  DTMFSpecification
+newDTMFSpecification
+  pMaxLength_
+  pEndTimeoutMs_
+  pDeletionCharacter_
+  pEndCharacter_ =
+    DTMFSpecification'
+      { maxLength = pMaxLength_,
+        endTimeoutMs = pEndTimeoutMs_,
+        deletionCharacter = pDeletionCharacter_,
+        endCharacter = pEndCharacter_
+      }
+
+-- | The maximum number of DTMF digits allowed in an utterance.
+dTMFSpecification_maxLength :: Lens.Lens' DTMFSpecification Prelude.Natural
+dTMFSpecification_maxLength = Lens.lens (\DTMFSpecification' {maxLength} -> maxLength) (\s@DTMFSpecification' {} a -> s {maxLength = a} :: DTMFSpecification)
+
+-- | How long the bot should wait after the last DTMF character input before
+-- assuming that the input has concluded.
+dTMFSpecification_endTimeoutMs :: Lens.Lens' DTMFSpecification Prelude.Natural
+dTMFSpecification_endTimeoutMs = Lens.lens (\DTMFSpecification' {endTimeoutMs} -> endTimeoutMs) (\s@DTMFSpecification' {} a -> s {endTimeoutMs = a} :: DTMFSpecification)
+
+-- | The DTMF character that clears the accumulated DTMF digits and
+-- immediately ends the input.
+dTMFSpecification_deletionCharacter :: Lens.Lens' DTMFSpecification Prelude.Text
+dTMFSpecification_deletionCharacter = Lens.lens (\DTMFSpecification' {deletionCharacter} -> deletionCharacter) (\s@DTMFSpecification' {} a -> s {deletionCharacter = a} :: DTMFSpecification)
+
+-- | The DTMF character that immediately ends input. If the user does not
+-- press this character, the input ends after the end timeout.
+dTMFSpecification_endCharacter :: Lens.Lens' DTMFSpecification Prelude.Text
+dTMFSpecification_endCharacter = Lens.lens (\DTMFSpecification' {endCharacter} -> endCharacter) (\s@DTMFSpecification' {} a -> s {endCharacter = a} :: DTMFSpecification)
+
+instance Data.FromJSON DTMFSpecification where
+  parseJSON =
+    Data.withObject
+      "DTMFSpecification"
+      ( \x ->
+          DTMFSpecification'
+            Prelude.<$> (x Data..: "maxLength")
+            Prelude.<*> (x Data..: "endTimeoutMs")
+            Prelude.<*> (x Data..: "deletionCharacter")
+            Prelude.<*> (x Data..: "endCharacter")
+      )
+
+instance Prelude.Hashable DTMFSpecification where
+  hashWithSalt _salt DTMFSpecification' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxLength
+      `Prelude.hashWithSalt` endTimeoutMs
+      `Prelude.hashWithSalt` deletionCharacter
+      `Prelude.hashWithSalt` endCharacter
+
+instance Prelude.NFData DTMFSpecification where
+  rnf DTMFSpecification' {..} =
+    Prelude.rnf maxLength
+      `Prelude.seq` Prelude.rnf endTimeoutMs
+      `Prelude.seq` Prelude.rnf deletionCharacter
+      `Prelude.seq` Prelude.rnf endCharacter
+
+instance Data.ToJSON DTMFSpecification where
+  toJSON DTMFSpecification' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("maxLength" Data..= maxLength),
+            Prelude.Just ("endTimeoutMs" Data..= endTimeoutMs),
+            Prelude.Just
+              ("deletionCharacter" Data..= deletionCharacter),
+            Prelude.Just ("endCharacter" Data..= endCharacter)
+          ]
+      )
diff --git a/gen/Amazonka/LexV2Models/Types/DataPrivacy.hs b/gen/Amazonka/LexV2Models/Types/DataPrivacy.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/Types/DataPrivacy.hs
@@ -0,0 +1,149 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.LexV2Models.Types.DataPrivacy
+-- 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.LexV2Models.Types.DataPrivacy 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
+
+-- | By default, data stored by Amazon Lex is encrypted. The @DataPrivacy@
+-- structure provides settings that determine how Amazon Lex handles
+-- special cases of securing the data for your bot.
+--
+-- /See:/ 'newDataPrivacy' smart constructor.
+data DataPrivacy = DataPrivacy'
+  { -- | For each Amazon Lex bot created with the Amazon Lex Model Building
+    -- Service, you must specify whether your use of Amazon Lex is related to a
+    -- website, program, or other application that is directed or targeted, in
+    -- whole or in part, to children under age 13 and subject to the
+    -- Children\'s Online Privacy Protection Act (COPPA) by specifying @true@
+    -- or @false@ in the @childDirected@ field. By specifying @true@ in the
+    -- @childDirected@ field, you confirm that your use of Amazon Lex __is__
+    -- related to a website, program, or other application that is directed or
+    -- targeted, in whole or in part, to children under age 13 and subject to
+    -- COPPA. By specifying @false@ in the @childDirected@ field, you confirm
+    -- that your use of Amazon Lex __is not__ related to a website, program, or
+    -- other application that is directed or targeted, in whole or in part, to
+    -- children under age 13 and subject to COPPA. You may not specify a
+    -- default value for the @childDirected@ field that does not accurately
+    -- reflect whether your use of Amazon Lex is related to a website, program,
+    -- or other application that is directed or targeted, in whole or in part,
+    -- to children under age 13 and subject to COPPA. If your use of Amazon Lex
+    -- relates to a website, program, or other application that is directed in
+    -- whole or in part, to children under age 13, you must obtain any required
+    -- verifiable parental consent under COPPA. For information regarding the
+    -- use of Amazon Lex in connection with websites, programs, or other
+    -- applications that are directed or targeted, in whole or in part, to
+    -- children under age 13, see the
+    -- <https://aws.amazon.com/lex/faqs#data-security Amazon Lex FAQ>.
+    childDirected :: Prelude.Bool
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DataPrivacy' 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:
+--
+-- 'childDirected', 'dataPrivacy_childDirected' - For each Amazon Lex bot created with the Amazon Lex Model Building
+-- Service, you must specify whether your use of Amazon Lex is related to a
+-- website, program, or other application that is directed or targeted, in
+-- whole or in part, to children under age 13 and subject to the
+-- Children\'s Online Privacy Protection Act (COPPA) by specifying @true@
+-- or @false@ in the @childDirected@ field. By specifying @true@ in the
+-- @childDirected@ field, you confirm that your use of Amazon Lex __is__
+-- related to a website, program, or other application that is directed or
+-- targeted, in whole or in part, to children under age 13 and subject to
+-- COPPA. By specifying @false@ in the @childDirected@ field, you confirm
+-- that your use of Amazon Lex __is not__ related to a website, program, or
+-- other application that is directed or targeted, in whole or in part, to
+-- children under age 13 and subject to COPPA. You may not specify a
+-- default value for the @childDirected@ field that does not accurately
+-- reflect whether your use of Amazon Lex is related to a website, program,
+-- or other application that is directed or targeted, in whole or in part,
+-- to children under age 13 and subject to COPPA. If your use of Amazon Lex
+-- relates to a website, program, or other application that is directed in
+-- whole or in part, to children under age 13, you must obtain any required
+-- verifiable parental consent under COPPA. For information regarding the
+-- use of Amazon Lex in connection with websites, programs, or other
+-- applications that are directed or targeted, in whole or in part, to
+-- children under age 13, see the
+-- <https://aws.amazon.com/lex/faqs#data-security Amazon Lex FAQ>.
+newDataPrivacy ::
+  -- | 'childDirected'
+  Prelude.Bool ->
+  DataPrivacy
+newDataPrivacy pChildDirected_ =
+  DataPrivacy' {childDirected = pChildDirected_}
+
+-- | For each Amazon Lex bot created with the Amazon Lex Model Building
+-- Service, you must specify whether your use of Amazon Lex is related to a
+-- website, program, or other application that is directed or targeted, in
+-- whole or in part, to children under age 13 and subject to the
+-- Children\'s Online Privacy Protection Act (COPPA) by specifying @true@
+-- or @false@ in the @childDirected@ field. By specifying @true@ in the
+-- @childDirected@ field, you confirm that your use of Amazon Lex __is__
+-- related to a website, program, or other application that is directed or
+-- targeted, in whole or in part, to children under age 13 and subject to
+-- COPPA. By specifying @false@ in the @childDirected@ field, you confirm
+-- that your use of Amazon Lex __is not__ related to a website, program, or
+-- other application that is directed or targeted, in whole or in part, to
+-- children under age 13 and subject to COPPA. You may not specify a
+-- default value for the @childDirected@ field that does not accurately
+-- reflect whether your use of Amazon Lex is related to a website, program,
+-- or other application that is directed or targeted, in whole or in part,
+-- to children under age 13 and subject to COPPA. If your use of Amazon Lex
+-- relates to a website, program, or other application that is directed in
+-- whole or in part, to children under age 13, you must obtain any required
+-- verifiable parental consent under COPPA. For information regarding the
+-- use of Amazon Lex in connection with websites, programs, or other
+-- applications that are directed or targeted, in whole or in part, to
+-- children under age 13, see the
+-- <https://aws.amazon.com/lex/faqs#data-security Amazon Lex FAQ>.
+dataPrivacy_childDirected :: Lens.Lens' DataPrivacy Prelude.Bool
+dataPrivacy_childDirected = Lens.lens (\DataPrivacy' {childDirected} -> childDirected) (\s@DataPrivacy' {} a -> s {childDirected = a} :: DataPrivacy)
+
+instance Data.FromJSON DataPrivacy where
+  parseJSON =
+    Data.withObject
+      "DataPrivacy"
+      ( \x ->
+          DataPrivacy' Prelude.<$> (x Data..: "childDirected")
+      )
+
+instance Prelude.Hashable DataPrivacy where
+  hashWithSalt _salt DataPrivacy' {..} =
+    _salt `Prelude.hashWithSalt` childDirected
+
+instance Prelude.NFData DataPrivacy where
+  rnf DataPrivacy' {..} = Prelude.rnf childDirected
+
+instance Data.ToJSON DataPrivacy where
+  toJSON DataPrivacy' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ("childDirected" Data..= childDirected)
+          ]
+      )
diff --git a/gen/Amazonka/LexV2Models/Types/DateRangeFilter.hs b/gen/Amazonka/LexV2Models/Types/DateRangeFilter.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/Types/DateRangeFilter.hs
@@ -0,0 +1,100 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.LexV2Models.Types.DateRangeFilter
+-- 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.LexV2Models.Types.DateRangeFilter 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 object used for specifying the data range that the customer wants
+-- Amazon Lex to read through in the input transcripts.
+--
+-- /See:/ 'newDateRangeFilter' smart constructor.
+data DateRangeFilter = DateRangeFilter'
+  { -- | A timestamp indicating the start date for the date range filter.
+    startDateTime :: Data.POSIX,
+    -- | A timestamp indicating the end date for the date range filter.
+    endDateTime :: Data.POSIX
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DateRangeFilter' 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:
+--
+-- 'startDateTime', 'dateRangeFilter_startDateTime' - A timestamp indicating the start date for the date range filter.
+--
+-- 'endDateTime', 'dateRangeFilter_endDateTime' - A timestamp indicating the end date for the date range filter.
+newDateRangeFilter ::
+  -- | 'startDateTime'
+  Prelude.UTCTime ->
+  -- | 'endDateTime'
+  Prelude.UTCTime ->
+  DateRangeFilter
+newDateRangeFilter pStartDateTime_ pEndDateTime_ =
+  DateRangeFilter'
+    { startDateTime =
+        Data._Time Lens.# pStartDateTime_,
+      endDateTime = Data._Time Lens.# pEndDateTime_
+    }
+
+-- | A timestamp indicating the start date for the date range filter.
+dateRangeFilter_startDateTime :: Lens.Lens' DateRangeFilter Prelude.UTCTime
+dateRangeFilter_startDateTime = Lens.lens (\DateRangeFilter' {startDateTime} -> startDateTime) (\s@DateRangeFilter' {} a -> s {startDateTime = a} :: DateRangeFilter) Prelude.. Data._Time
+
+-- | A timestamp indicating the end date for the date range filter.
+dateRangeFilter_endDateTime :: Lens.Lens' DateRangeFilter Prelude.UTCTime
+dateRangeFilter_endDateTime = Lens.lens (\DateRangeFilter' {endDateTime} -> endDateTime) (\s@DateRangeFilter' {} a -> s {endDateTime = a} :: DateRangeFilter) Prelude.. Data._Time
+
+instance Data.FromJSON DateRangeFilter where
+  parseJSON =
+    Data.withObject
+      "DateRangeFilter"
+      ( \x ->
+          DateRangeFilter'
+            Prelude.<$> (x Data..: "startDateTime")
+            Prelude.<*> (x Data..: "endDateTime")
+      )
+
+instance Prelude.Hashable DateRangeFilter where
+  hashWithSalt _salt DateRangeFilter' {..} =
+    _salt
+      `Prelude.hashWithSalt` startDateTime
+      `Prelude.hashWithSalt` endDateTime
+
+instance Prelude.NFData DateRangeFilter where
+  rnf DateRangeFilter' {..} =
+    Prelude.rnf startDateTime
+      `Prelude.seq` Prelude.rnf endDateTime
+
+instance Data.ToJSON DateRangeFilter where
+  toJSON DateRangeFilter' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ("startDateTime" Data..= startDateTime),
+            Prelude.Just ("endDateTime" Data..= endDateTime)
+          ]
+      )
diff --git a/gen/Amazonka/LexV2Models/Types/DefaultConditionalBranch.hs b/gen/Amazonka/LexV2Models/Types/DefaultConditionalBranch.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/Types/DefaultConditionalBranch.hs
@@ -0,0 +1,96 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.LexV2Models.Types.DefaultConditionalBranch
+-- 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.LexV2Models.Types.DefaultConditionalBranch where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LexV2Models.Types.DialogState
+import Amazonka.LexV2Models.Types.ResponseSpecification
+import qualified Amazonka.Prelude as Prelude
+
+-- | A set of actions that Amazon Lex should run if none of the other
+-- conditions are met.
+--
+-- /See:/ 'newDefaultConditionalBranch' smart constructor.
+data DefaultConditionalBranch = DefaultConditionalBranch'
+  { -- | The next step in the conversation.
+    nextStep :: Prelude.Maybe DialogState,
+    response :: Prelude.Maybe ResponseSpecification
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DefaultConditionalBranch' 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:
+--
+-- 'nextStep', 'defaultConditionalBranch_nextStep' - The next step in the conversation.
+--
+-- 'response', 'defaultConditionalBranch_response' - Undocumented member.
+newDefaultConditionalBranch ::
+  DefaultConditionalBranch
+newDefaultConditionalBranch =
+  DefaultConditionalBranch'
+    { nextStep =
+        Prelude.Nothing,
+      response = Prelude.Nothing
+    }
+
+-- | The next step in the conversation.
+defaultConditionalBranch_nextStep :: Lens.Lens' DefaultConditionalBranch (Prelude.Maybe DialogState)
+defaultConditionalBranch_nextStep = Lens.lens (\DefaultConditionalBranch' {nextStep} -> nextStep) (\s@DefaultConditionalBranch' {} a -> s {nextStep = a} :: DefaultConditionalBranch)
+
+-- | Undocumented member.
+defaultConditionalBranch_response :: Lens.Lens' DefaultConditionalBranch (Prelude.Maybe ResponseSpecification)
+defaultConditionalBranch_response = Lens.lens (\DefaultConditionalBranch' {response} -> response) (\s@DefaultConditionalBranch' {} a -> s {response = a} :: DefaultConditionalBranch)
+
+instance Data.FromJSON DefaultConditionalBranch where
+  parseJSON =
+    Data.withObject
+      "DefaultConditionalBranch"
+      ( \x ->
+          DefaultConditionalBranch'
+            Prelude.<$> (x Data..:? "nextStep")
+            Prelude.<*> (x Data..:? "response")
+      )
+
+instance Prelude.Hashable DefaultConditionalBranch where
+  hashWithSalt _salt DefaultConditionalBranch' {..} =
+    _salt
+      `Prelude.hashWithSalt` nextStep
+      `Prelude.hashWithSalt` response
+
+instance Prelude.NFData DefaultConditionalBranch where
+  rnf DefaultConditionalBranch' {..} =
+    Prelude.rnf nextStep
+      `Prelude.seq` Prelude.rnf response
+
+instance Data.ToJSON DefaultConditionalBranch where
+  toJSON DefaultConditionalBranch' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("nextStep" Data..=) Prelude.<$> nextStep,
+            ("response" Data..=) Prelude.<$> response
+          ]
+      )
diff --git a/gen/Amazonka/LexV2Models/Types/DialogAction.hs b/gen/Amazonka/LexV2Models/Types/DialogAction.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/Types/DialogAction.hs
@@ -0,0 +1,114 @@
+{-# 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.LexV2Models.Types.DialogAction
+-- 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.LexV2Models.Types.DialogAction where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LexV2Models.Types.DialogActionType
+import qualified Amazonka.Prelude as Prelude
+
+-- | Defines the action that the bot executes at runtime when the
+-- conversation reaches this step.
+--
+-- /See:/ 'newDialogAction' smart constructor.
+data DialogAction = DialogAction'
+  { -- | If the dialog action is @ElicitSlot@, defines the slot to elicit from
+    -- the user.
+    slotToElicit :: Prelude.Maybe Prelude.Text,
+    -- | When true the next message for the intent is not used.
+    suppressNextMessage :: Prelude.Maybe Prelude.Bool,
+    -- | The action that the bot should execute.
+    type' :: DialogActionType
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DialogAction' 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:
+--
+-- 'slotToElicit', 'dialogAction_slotToElicit' - If the dialog action is @ElicitSlot@, defines the slot to elicit from
+-- the user.
+--
+-- 'suppressNextMessage', 'dialogAction_suppressNextMessage' - When true the next message for the intent is not used.
+--
+-- 'type'', 'dialogAction_type' - The action that the bot should execute.
+newDialogAction ::
+  -- | 'type''
+  DialogActionType ->
+  DialogAction
+newDialogAction pType_ =
+  DialogAction'
+    { slotToElicit = Prelude.Nothing,
+      suppressNextMessage = Prelude.Nothing,
+      type' = pType_
+    }
+
+-- | If the dialog action is @ElicitSlot@, defines the slot to elicit from
+-- the user.
+dialogAction_slotToElicit :: Lens.Lens' DialogAction (Prelude.Maybe Prelude.Text)
+dialogAction_slotToElicit = Lens.lens (\DialogAction' {slotToElicit} -> slotToElicit) (\s@DialogAction' {} a -> s {slotToElicit = a} :: DialogAction)
+
+-- | When true the next message for the intent is not used.
+dialogAction_suppressNextMessage :: Lens.Lens' DialogAction (Prelude.Maybe Prelude.Bool)
+dialogAction_suppressNextMessage = Lens.lens (\DialogAction' {suppressNextMessage} -> suppressNextMessage) (\s@DialogAction' {} a -> s {suppressNextMessage = a} :: DialogAction)
+
+-- | The action that the bot should execute.
+dialogAction_type :: Lens.Lens' DialogAction DialogActionType
+dialogAction_type = Lens.lens (\DialogAction' {type'} -> type') (\s@DialogAction' {} a -> s {type' = a} :: DialogAction)
+
+instance Data.FromJSON DialogAction where
+  parseJSON =
+    Data.withObject
+      "DialogAction"
+      ( \x ->
+          DialogAction'
+            Prelude.<$> (x Data..:? "slotToElicit")
+            Prelude.<*> (x Data..:? "suppressNextMessage")
+            Prelude.<*> (x Data..: "type")
+      )
+
+instance Prelude.Hashable DialogAction where
+  hashWithSalt _salt DialogAction' {..} =
+    _salt
+      `Prelude.hashWithSalt` slotToElicit
+      `Prelude.hashWithSalt` suppressNextMessage
+      `Prelude.hashWithSalt` type'
+
+instance Prelude.NFData DialogAction where
+  rnf DialogAction' {..} =
+    Prelude.rnf slotToElicit
+      `Prelude.seq` Prelude.rnf suppressNextMessage
+      `Prelude.seq` Prelude.rnf type'
+
+instance Data.ToJSON DialogAction where
+  toJSON DialogAction' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("slotToElicit" Data..=) Prelude.<$> slotToElicit,
+            ("suppressNextMessage" Data..=)
+              Prelude.<$> suppressNextMessage,
+            Prelude.Just ("type" Data..= type')
+          ]
+      )
diff --git a/gen/Amazonka/LexV2Models/Types/DialogActionType.hs b/gen/Amazonka/LexV2Models/Types/DialogActionType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/Types/DialogActionType.hs
@@ -0,0 +1,106 @@
+{-# 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.LexV2Models.Types.DialogActionType
+-- 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.LexV2Models.Types.DialogActionType
+  ( DialogActionType
+      ( ..,
+        DialogActionType_CloseIntent,
+        DialogActionType_ConfirmIntent,
+        DialogActionType_ElicitIntent,
+        DialogActionType_ElicitSlot,
+        DialogActionType_EndConversation,
+        DialogActionType_EvaluateConditional,
+        DialogActionType_FulfillIntent,
+        DialogActionType_InvokeDialogCodeHook,
+        DialogActionType_StartIntent
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype DialogActionType = DialogActionType'
+  { fromDialogActionType ::
+      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 DialogActionType_CloseIntent :: DialogActionType
+pattern DialogActionType_CloseIntent = DialogActionType' "CloseIntent"
+
+pattern DialogActionType_ConfirmIntent :: DialogActionType
+pattern DialogActionType_ConfirmIntent = DialogActionType' "ConfirmIntent"
+
+pattern DialogActionType_ElicitIntent :: DialogActionType
+pattern DialogActionType_ElicitIntent = DialogActionType' "ElicitIntent"
+
+pattern DialogActionType_ElicitSlot :: DialogActionType
+pattern DialogActionType_ElicitSlot = DialogActionType' "ElicitSlot"
+
+pattern DialogActionType_EndConversation :: DialogActionType
+pattern DialogActionType_EndConversation = DialogActionType' "EndConversation"
+
+pattern DialogActionType_EvaluateConditional :: DialogActionType
+pattern DialogActionType_EvaluateConditional = DialogActionType' "EvaluateConditional"
+
+pattern DialogActionType_FulfillIntent :: DialogActionType
+pattern DialogActionType_FulfillIntent = DialogActionType' "FulfillIntent"
+
+pattern DialogActionType_InvokeDialogCodeHook :: DialogActionType
+pattern DialogActionType_InvokeDialogCodeHook = DialogActionType' "InvokeDialogCodeHook"
+
+pattern DialogActionType_StartIntent :: DialogActionType
+pattern DialogActionType_StartIntent = DialogActionType' "StartIntent"
+
+{-# COMPLETE
+  DialogActionType_CloseIntent,
+  DialogActionType_ConfirmIntent,
+  DialogActionType_ElicitIntent,
+  DialogActionType_ElicitSlot,
+  DialogActionType_EndConversation,
+  DialogActionType_EvaluateConditional,
+  DialogActionType_FulfillIntent,
+  DialogActionType_InvokeDialogCodeHook,
+  DialogActionType_StartIntent,
+  DialogActionType'
+  #-}
diff --git a/gen/Amazonka/LexV2Models/Types/DialogCodeHookInvocationSetting.hs b/gen/Amazonka/LexV2Models/Types/DialogCodeHookInvocationSetting.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/Types/DialogCodeHookInvocationSetting.hs
@@ -0,0 +1,160 @@
+{-# 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.LexV2Models.Types.DialogCodeHookInvocationSetting
+-- 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.LexV2Models.Types.DialogCodeHookInvocationSetting where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LexV2Models.Types.PostDialogCodeHookInvocationSpecification
+import qualified Amazonka.Prelude as Prelude
+
+-- | Settings that specify the dialog code hook that is called by Amazon Lex
+-- at a step of the conversation.
+--
+-- /See:/ 'newDialogCodeHookInvocationSetting' smart constructor.
+data DialogCodeHookInvocationSetting = DialogCodeHookInvocationSetting'
+  { -- | A label that indicates the dialog step from which the dialog code hook
+    -- is happening.
+    invocationLabel :: Prelude.Maybe Prelude.Text,
+    -- | Indicates whether a Lambda function should be invoked for the dialog.
+    enableCodeHookInvocation :: Prelude.Bool,
+    -- | Determines whether a dialog code hook is used when the intent is
+    -- activated.
+    active :: Prelude.Bool,
+    -- | Contains the responses and actions that Amazon Lex takes after the
+    -- Lambda function is complete.
+    postCodeHookSpecification :: PostDialogCodeHookInvocationSpecification
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DialogCodeHookInvocationSetting' 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:
+--
+-- 'invocationLabel', 'dialogCodeHookInvocationSetting_invocationLabel' - A label that indicates the dialog step from which the dialog code hook
+-- is happening.
+--
+-- 'enableCodeHookInvocation', 'dialogCodeHookInvocationSetting_enableCodeHookInvocation' - Indicates whether a Lambda function should be invoked for the dialog.
+--
+-- 'active', 'dialogCodeHookInvocationSetting_active' - Determines whether a dialog code hook is used when the intent is
+-- activated.
+--
+-- 'postCodeHookSpecification', 'dialogCodeHookInvocationSetting_postCodeHookSpecification' - Contains the responses and actions that Amazon Lex takes after the
+-- Lambda function is complete.
+newDialogCodeHookInvocationSetting ::
+  -- | 'enableCodeHookInvocation'
+  Prelude.Bool ->
+  -- | 'active'
+  Prelude.Bool ->
+  -- | 'postCodeHookSpecification'
+  PostDialogCodeHookInvocationSpecification ->
+  DialogCodeHookInvocationSetting
+newDialogCodeHookInvocationSetting
+  pEnableCodeHookInvocation_
+  pActive_
+  pPostCodeHookSpecification_ =
+    DialogCodeHookInvocationSetting'
+      { invocationLabel =
+          Prelude.Nothing,
+        enableCodeHookInvocation =
+          pEnableCodeHookInvocation_,
+        active = pActive_,
+        postCodeHookSpecification =
+          pPostCodeHookSpecification_
+      }
+
+-- | A label that indicates the dialog step from which the dialog code hook
+-- is happening.
+dialogCodeHookInvocationSetting_invocationLabel :: Lens.Lens' DialogCodeHookInvocationSetting (Prelude.Maybe Prelude.Text)
+dialogCodeHookInvocationSetting_invocationLabel = Lens.lens (\DialogCodeHookInvocationSetting' {invocationLabel} -> invocationLabel) (\s@DialogCodeHookInvocationSetting' {} a -> s {invocationLabel = a} :: DialogCodeHookInvocationSetting)
+
+-- | Indicates whether a Lambda function should be invoked for the dialog.
+dialogCodeHookInvocationSetting_enableCodeHookInvocation :: Lens.Lens' DialogCodeHookInvocationSetting Prelude.Bool
+dialogCodeHookInvocationSetting_enableCodeHookInvocation = Lens.lens (\DialogCodeHookInvocationSetting' {enableCodeHookInvocation} -> enableCodeHookInvocation) (\s@DialogCodeHookInvocationSetting' {} a -> s {enableCodeHookInvocation = a} :: DialogCodeHookInvocationSetting)
+
+-- | Determines whether a dialog code hook is used when the intent is
+-- activated.
+dialogCodeHookInvocationSetting_active :: Lens.Lens' DialogCodeHookInvocationSetting Prelude.Bool
+dialogCodeHookInvocationSetting_active = Lens.lens (\DialogCodeHookInvocationSetting' {active} -> active) (\s@DialogCodeHookInvocationSetting' {} a -> s {active = a} :: DialogCodeHookInvocationSetting)
+
+-- | Contains the responses and actions that Amazon Lex takes after the
+-- Lambda function is complete.
+dialogCodeHookInvocationSetting_postCodeHookSpecification :: Lens.Lens' DialogCodeHookInvocationSetting PostDialogCodeHookInvocationSpecification
+dialogCodeHookInvocationSetting_postCodeHookSpecification = Lens.lens (\DialogCodeHookInvocationSetting' {postCodeHookSpecification} -> postCodeHookSpecification) (\s@DialogCodeHookInvocationSetting' {} a -> s {postCodeHookSpecification = a} :: DialogCodeHookInvocationSetting)
+
+instance
+  Data.FromJSON
+    DialogCodeHookInvocationSetting
+  where
+  parseJSON =
+    Data.withObject
+      "DialogCodeHookInvocationSetting"
+      ( \x ->
+          DialogCodeHookInvocationSetting'
+            Prelude.<$> (x Data..:? "invocationLabel")
+            Prelude.<*> (x Data..: "enableCodeHookInvocation")
+            Prelude.<*> (x Data..: "active")
+            Prelude.<*> (x Data..: "postCodeHookSpecification")
+      )
+
+instance
+  Prelude.Hashable
+    DialogCodeHookInvocationSetting
+  where
+  hashWithSalt
+    _salt
+    DialogCodeHookInvocationSetting' {..} =
+      _salt
+        `Prelude.hashWithSalt` invocationLabel
+        `Prelude.hashWithSalt` enableCodeHookInvocation
+        `Prelude.hashWithSalt` active
+        `Prelude.hashWithSalt` postCodeHookSpecification
+
+instance
+  Prelude.NFData
+    DialogCodeHookInvocationSetting
+  where
+  rnf DialogCodeHookInvocationSetting' {..} =
+    Prelude.rnf invocationLabel
+      `Prelude.seq` Prelude.rnf enableCodeHookInvocation
+      `Prelude.seq` Prelude.rnf active
+      `Prelude.seq` Prelude.rnf postCodeHookSpecification
+
+instance Data.ToJSON DialogCodeHookInvocationSetting where
+  toJSON DialogCodeHookInvocationSetting' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("invocationLabel" Data..=)
+              Prelude.<$> invocationLabel,
+            Prelude.Just
+              ( "enableCodeHookInvocation"
+                  Data..= enableCodeHookInvocation
+              ),
+            Prelude.Just ("active" Data..= active),
+            Prelude.Just
+              ( "postCodeHookSpecification"
+                  Data..= postCodeHookSpecification
+              )
+          ]
+      )
diff --git a/gen/Amazonka/LexV2Models/Types/DialogCodeHookSettings.hs b/gen/Amazonka/LexV2Models/Types/DialogCodeHookSettings.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/Types/DialogCodeHookSettings.hs
@@ -0,0 +1,78 @@
+{-# 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.LexV2Models.Types.DialogCodeHookSettings
+-- 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.LexV2Models.Types.DialogCodeHookSettings 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
+
+-- | Settings that determine the Lambda function that Amazon Lex uses for
+-- processing user responses.
+--
+-- /See:/ 'newDialogCodeHookSettings' smart constructor.
+data DialogCodeHookSettings = DialogCodeHookSettings'
+  { -- | Enables the dialog code hook so that it processes user requests.
+    enabled :: Prelude.Bool
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DialogCodeHookSettings' 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:
+--
+-- 'enabled', 'dialogCodeHookSettings_enabled' - Enables the dialog code hook so that it processes user requests.
+newDialogCodeHookSettings ::
+  -- | 'enabled'
+  Prelude.Bool ->
+  DialogCodeHookSettings
+newDialogCodeHookSettings pEnabled_ =
+  DialogCodeHookSettings' {enabled = pEnabled_}
+
+-- | Enables the dialog code hook so that it processes user requests.
+dialogCodeHookSettings_enabled :: Lens.Lens' DialogCodeHookSettings Prelude.Bool
+dialogCodeHookSettings_enabled = Lens.lens (\DialogCodeHookSettings' {enabled} -> enabled) (\s@DialogCodeHookSettings' {} a -> s {enabled = a} :: DialogCodeHookSettings)
+
+instance Data.FromJSON DialogCodeHookSettings where
+  parseJSON =
+    Data.withObject
+      "DialogCodeHookSettings"
+      ( \x ->
+          DialogCodeHookSettings'
+            Prelude.<$> (x Data..: "enabled")
+      )
+
+instance Prelude.Hashable DialogCodeHookSettings where
+  hashWithSalt _salt DialogCodeHookSettings' {..} =
+    _salt `Prelude.hashWithSalt` enabled
+
+instance Prelude.NFData DialogCodeHookSettings where
+  rnf DialogCodeHookSettings' {..} = Prelude.rnf enabled
+
+instance Data.ToJSON DialogCodeHookSettings where
+  toJSON DialogCodeHookSettings' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("enabled" Data..= enabled)]
+      )
diff --git a/gen/Amazonka/LexV2Models/Types/DialogState.hs b/gen/Amazonka/LexV2Models/Types/DialogState.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/Types/DialogState.hs
@@ -0,0 +1,116 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.LexV2Models.Types.DialogState
+-- 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.LexV2Models.Types.DialogState where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LexV2Models.Types.DialogAction
+import Amazonka.LexV2Models.Types.IntentOverride
+import qualified Amazonka.Prelude as Prelude
+
+-- | The current state of the conversation with the user.
+--
+-- /See:/ 'newDialogState' smart constructor.
+data DialogState = DialogState'
+  { dialogAction :: Prelude.Maybe DialogAction,
+    intent :: Prelude.Maybe IntentOverride,
+    -- | Map of key\/value pairs representing session-specific context
+    -- information. It contains application information passed between Amazon
+    -- Lex and a client application.
+    sessionAttributes :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text)
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DialogState' 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:
+--
+-- 'dialogAction', 'dialogState_dialogAction' - Undocumented member.
+--
+-- 'intent', 'dialogState_intent' - Undocumented member.
+--
+-- 'sessionAttributes', 'dialogState_sessionAttributes' - Map of key\/value pairs representing session-specific context
+-- information. It contains application information passed between Amazon
+-- Lex and a client application.
+newDialogState ::
+  DialogState
+newDialogState =
+  DialogState'
+    { dialogAction = Prelude.Nothing,
+      intent = Prelude.Nothing,
+      sessionAttributes = Prelude.Nothing
+    }
+
+-- | Undocumented member.
+dialogState_dialogAction :: Lens.Lens' DialogState (Prelude.Maybe DialogAction)
+dialogState_dialogAction = Lens.lens (\DialogState' {dialogAction} -> dialogAction) (\s@DialogState' {} a -> s {dialogAction = a} :: DialogState)
+
+-- | Undocumented member.
+dialogState_intent :: Lens.Lens' DialogState (Prelude.Maybe IntentOverride)
+dialogState_intent = Lens.lens (\DialogState' {intent} -> intent) (\s@DialogState' {} a -> s {intent = a} :: DialogState)
+
+-- | Map of key\/value pairs representing session-specific context
+-- information. It contains application information passed between Amazon
+-- Lex and a client application.
+dialogState_sessionAttributes :: Lens.Lens' DialogState (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+dialogState_sessionAttributes = Lens.lens (\DialogState' {sessionAttributes} -> sessionAttributes) (\s@DialogState' {} a -> s {sessionAttributes = a} :: DialogState) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromJSON DialogState where
+  parseJSON =
+    Data.withObject
+      "DialogState"
+      ( \x ->
+          DialogState'
+            Prelude.<$> (x Data..:? "dialogAction")
+            Prelude.<*> (x Data..:? "intent")
+            Prelude.<*> ( x
+                            Data..:? "sessionAttributes"
+                            Data..!= Prelude.mempty
+                        )
+      )
+
+instance Prelude.Hashable DialogState where
+  hashWithSalt _salt DialogState' {..} =
+    _salt
+      `Prelude.hashWithSalt` dialogAction
+      `Prelude.hashWithSalt` intent
+      `Prelude.hashWithSalt` sessionAttributes
+
+instance Prelude.NFData DialogState where
+  rnf DialogState' {..} =
+    Prelude.rnf dialogAction
+      `Prelude.seq` Prelude.rnf intent
+      `Prelude.seq` Prelude.rnf sessionAttributes
+
+instance Data.ToJSON DialogState where
+  toJSON DialogState' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("dialogAction" Data..=) Prelude.<$> dialogAction,
+            ("intent" Data..=) Prelude.<$> intent,
+            ("sessionAttributes" Data..=)
+              Prelude.<$> sessionAttributes
+          ]
+      )
diff --git a/gen/Amazonka/LexV2Models/Types/Effect.hs b/gen/Amazonka/LexV2Models/Types/Effect.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/Types/Effect.hs
@@ -0,0 +1,68 @@
+{-# 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.LexV2Models.Types.Effect
+-- 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.LexV2Models.Types.Effect
+  ( Effect
+      ( ..,
+        Effect_Allow,
+        Effect_Deny
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype Effect = Effect' {fromEffect :: 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 Effect_Allow :: Effect
+pattern Effect_Allow = Effect' "Allow"
+
+pattern Effect_Deny :: Effect
+pattern Effect_Deny = Effect' "Deny"
+
+{-# COMPLETE
+  Effect_Allow,
+  Effect_Deny,
+  Effect'
+  #-}
diff --git a/gen/Amazonka/LexV2Models/Types/ElicitationCodeHookInvocationSetting.hs b/gen/Amazonka/LexV2Models/Types/ElicitationCodeHookInvocationSetting.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/Types/ElicitationCodeHookInvocationSetting.hs
@@ -0,0 +1,120 @@
+{-# 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.LexV2Models.Types.ElicitationCodeHookInvocationSetting
+-- 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.LexV2Models.Types.ElicitationCodeHookInvocationSetting 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
+
+-- | Settings that specify the dialog code hook that is called by Amazon Lex
+-- between eliciting slot values.
+--
+-- /See:/ 'newElicitationCodeHookInvocationSetting' smart constructor.
+data ElicitationCodeHookInvocationSetting = ElicitationCodeHookInvocationSetting'
+  { -- | A label that indicates the dialog step from which the dialog code hook
+    -- is happening.
+    invocationLabel :: Prelude.Maybe Prelude.Text,
+    -- | Indicates whether a Lambda function should be invoked for the dialog.
+    enableCodeHookInvocation :: Prelude.Bool
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ElicitationCodeHookInvocationSetting' 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:
+--
+-- 'invocationLabel', 'elicitationCodeHookInvocationSetting_invocationLabel' - A label that indicates the dialog step from which the dialog code hook
+-- is happening.
+--
+-- 'enableCodeHookInvocation', 'elicitationCodeHookInvocationSetting_enableCodeHookInvocation' - Indicates whether a Lambda function should be invoked for the dialog.
+newElicitationCodeHookInvocationSetting ::
+  -- | 'enableCodeHookInvocation'
+  Prelude.Bool ->
+  ElicitationCodeHookInvocationSetting
+newElicitationCodeHookInvocationSetting
+  pEnableCodeHookInvocation_ =
+    ElicitationCodeHookInvocationSetting'
+      { invocationLabel =
+          Prelude.Nothing,
+        enableCodeHookInvocation =
+          pEnableCodeHookInvocation_
+      }
+
+-- | A label that indicates the dialog step from which the dialog code hook
+-- is happening.
+elicitationCodeHookInvocationSetting_invocationLabel :: Lens.Lens' ElicitationCodeHookInvocationSetting (Prelude.Maybe Prelude.Text)
+elicitationCodeHookInvocationSetting_invocationLabel = Lens.lens (\ElicitationCodeHookInvocationSetting' {invocationLabel} -> invocationLabel) (\s@ElicitationCodeHookInvocationSetting' {} a -> s {invocationLabel = a} :: ElicitationCodeHookInvocationSetting)
+
+-- | Indicates whether a Lambda function should be invoked for the dialog.
+elicitationCodeHookInvocationSetting_enableCodeHookInvocation :: Lens.Lens' ElicitationCodeHookInvocationSetting Prelude.Bool
+elicitationCodeHookInvocationSetting_enableCodeHookInvocation = Lens.lens (\ElicitationCodeHookInvocationSetting' {enableCodeHookInvocation} -> enableCodeHookInvocation) (\s@ElicitationCodeHookInvocationSetting' {} a -> s {enableCodeHookInvocation = a} :: ElicitationCodeHookInvocationSetting)
+
+instance
+  Data.FromJSON
+    ElicitationCodeHookInvocationSetting
+  where
+  parseJSON =
+    Data.withObject
+      "ElicitationCodeHookInvocationSetting"
+      ( \x ->
+          ElicitationCodeHookInvocationSetting'
+            Prelude.<$> (x Data..:? "invocationLabel")
+            Prelude.<*> (x Data..: "enableCodeHookInvocation")
+      )
+
+instance
+  Prelude.Hashable
+    ElicitationCodeHookInvocationSetting
+  where
+  hashWithSalt
+    _salt
+    ElicitationCodeHookInvocationSetting' {..} =
+      _salt
+        `Prelude.hashWithSalt` invocationLabel
+        `Prelude.hashWithSalt` enableCodeHookInvocation
+
+instance
+  Prelude.NFData
+    ElicitationCodeHookInvocationSetting
+  where
+  rnf ElicitationCodeHookInvocationSetting' {..} =
+    Prelude.rnf invocationLabel
+      `Prelude.seq` Prelude.rnf enableCodeHookInvocation
+
+instance
+  Data.ToJSON
+    ElicitationCodeHookInvocationSetting
+  where
+  toJSON ElicitationCodeHookInvocationSetting' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("invocationLabel" Data..=)
+              Prelude.<$> invocationLabel,
+            Prelude.Just
+              ( "enableCodeHookInvocation"
+                  Data..= enableCodeHookInvocation
+              )
+          ]
+      )
diff --git a/gen/Amazonka/LexV2Models/Types/EncryptionSetting.hs b/gen/Amazonka/LexV2Models/Types/EncryptionSetting.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/Types/EncryptionSetting.hs
@@ -0,0 +1,114 @@
+{-# 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.LexV2Models.Types.EncryptionSetting
+-- 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.LexV2Models.Types.EncryptionSetting 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 object representing the passwords that were used to encrypt the data
+-- related to the bot recommendation, as well as the KMS key ARN used to
+-- encrypt the associated metadata.
+--
+-- /See:/ 'newEncryptionSetting' smart constructor.
+data EncryptionSetting = EncryptionSetting'
+  { -- | The password used to encrypt the associated transcript file.
+    associatedTranscriptsPassword :: Prelude.Maybe (Data.Sensitive Prelude.Text),
+    -- | The password used to encrypt the recommended bot recommendation file.
+    botLocaleExportPassword :: Prelude.Maybe (Data.Sensitive Prelude.Text),
+    -- | The KMS key ARN used to encrypt the metadata associated with the bot
+    -- recommendation.
+    kmsKeyArn :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'EncryptionSetting' 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:
+--
+-- 'associatedTranscriptsPassword', 'encryptionSetting_associatedTranscriptsPassword' - The password used to encrypt the associated transcript file.
+--
+-- 'botLocaleExportPassword', 'encryptionSetting_botLocaleExportPassword' - The password used to encrypt the recommended bot recommendation file.
+--
+-- 'kmsKeyArn', 'encryptionSetting_kmsKeyArn' - The KMS key ARN used to encrypt the metadata associated with the bot
+-- recommendation.
+newEncryptionSetting ::
+  EncryptionSetting
+newEncryptionSetting =
+  EncryptionSetting'
+    { associatedTranscriptsPassword =
+        Prelude.Nothing,
+      botLocaleExportPassword = Prelude.Nothing,
+      kmsKeyArn = Prelude.Nothing
+    }
+
+-- | The password used to encrypt the associated transcript file.
+encryptionSetting_associatedTranscriptsPassword :: Lens.Lens' EncryptionSetting (Prelude.Maybe Prelude.Text)
+encryptionSetting_associatedTranscriptsPassword = Lens.lens (\EncryptionSetting' {associatedTranscriptsPassword} -> associatedTranscriptsPassword) (\s@EncryptionSetting' {} a -> s {associatedTranscriptsPassword = a} :: EncryptionSetting) Prelude.. Lens.mapping Data._Sensitive
+
+-- | The password used to encrypt the recommended bot recommendation file.
+encryptionSetting_botLocaleExportPassword :: Lens.Lens' EncryptionSetting (Prelude.Maybe Prelude.Text)
+encryptionSetting_botLocaleExportPassword = Lens.lens (\EncryptionSetting' {botLocaleExportPassword} -> botLocaleExportPassword) (\s@EncryptionSetting' {} a -> s {botLocaleExportPassword = a} :: EncryptionSetting) Prelude.. Lens.mapping Data._Sensitive
+
+-- | The KMS key ARN used to encrypt the metadata associated with the bot
+-- recommendation.
+encryptionSetting_kmsKeyArn :: Lens.Lens' EncryptionSetting (Prelude.Maybe Prelude.Text)
+encryptionSetting_kmsKeyArn = Lens.lens (\EncryptionSetting' {kmsKeyArn} -> kmsKeyArn) (\s@EncryptionSetting' {} a -> s {kmsKeyArn = a} :: EncryptionSetting)
+
+instance Data.FromJSON EncryptionSetting where
+  parseJSON =
+    Data.withObject
+      "EncryptionSetting"
+      ( \x ->
+          EncryptionSetting'
+            Prelude.<$> (x Data..:? "associatedTranscriptsPassword")
+            Prelude.<*> (x Data..:? "botLocaleExportPassword")
+            Prelude.<*> (x Data..:? "kmsKeyArn")
+      )
+
+instance Prelude.Hashable EncryptionSetting where
+  hashWithSalt _salt EncryptionSetting' {..} =
+    _salt
+      `Prelude.hashWithSalt` associatedTranscriptsPassword
+      `Prelude.hashWithSalt` botLocaleExportPassword
+      `Prelude.hashWithSalt` kmsKeyArn
+
+instance Prelude.NFData EncryptionSetting where
+  rnf EncryptionSetting' {..} =
+    Prelude.rnf associatedTranscriptsPassword
+      `Prelude.seq` Prelude.rnf botLocaleExportPassword
+      `Prelude.seq` Prelude.rnf kmsKeyArn
+
+instance Data.ToJSON EncryptionSetting where
+  toJSON EncryptionSetting' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("associatedTranscriptsPassword" Data..=)
+              Prelude.<$> associatedTranscriptsPassword,
+            ("botLocaleExportPassword" Data..=)
+              Prelude.<$> botLocaleExportPassword,
+            ("kmsKeyArn" Data..=) Prelude.<$> kmsKeyArn
+          ]
+      )
diff --git a/gen/Amazonka/LexV2Models/Types/ErrorCode.hs b/gen/Amazonka/LexV2Models/Types/ErrorCode.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/Types/ErrorCode.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.LexV2Models.Types.ErrorCode
+-- 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.LexV2Models.Types.ErrorCode
+  ( ErrorCode
+      ( ..,
+        ErrorCode_DUPLICATE_INPUT,
+        ErrorCode_INTERNAL_SERVER_FAILURE,
+        ErrorCode_RESOURCE_ALREADY_EXISTS,
+        ErrorCode_RESOURCE_DOES_NOT_EXIST
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype ErrorCode = ErrorCode'
+  { fromErrorCode ::
+      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 ErrorCode_DUPLICATE_INPUT :: ErrorCode
+pattern ErrorCode_DUPLICATE_INPUT = ErrorCode' "DUPLICATE_INPUT"
+
+pattern ErrorCode_INTERNAL_SERVER_FAILURE :: ErrorCode
+pattern ErrorCode_INTERNAL_SERVER_FAILURE = ErrorCode' "INTERNAL_SERVER_FAILURE"
+
+pattern ErrorCode_RESOURCE_ALREADY_EXISTS :: ErrorCode
+pattern ErrorCode_RESOURCE_ALREADY_EXISTS = ErrorCode' "RESOURCE_ALREADY_EXISTS"
+
+pattern ErrorCode_RESOURCE_DOES_NOT_EXIST :: ErrorCode
+pattern ErrorCode_RESOURCE_DOES_NOT_EXIST = ErrorCode' "RESOURCE_DOES_NOT_EXIST"
+
+{-# COMPLETE
+  ErrorCode_DUPLICATE_INPUT,
+  ErrorCode_INTERNAL_SERVER_FAILURE,
+  ErrorCode_RESOURCE_ALREADY_EXISTS,
+  ErrorCode_RESOURCE_DOES_NOT_EXIST,
+  ErrorCode'
+  #-}
diff --git a/gen/Amazonka/LexV2Models/Types/ExportFilter.hs b/gen/Amazonka/LexV2Models/Types/ExportFilter.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/Types/ExportFilter.hs
@@ -0,0 +1,117 @@
+{-# 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.LexV2Models.Types.ExportFilter
+-- 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.LexV2Models.Types.ExportFilter where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LexV2Models.Types.ExportFilterName
+import Amazonka.LexV2Models.Types.ExportFilterOperator
+import qualified Amazonka.Prelude as Prelude
+
+-- | Filters the response form the
+-- <https://docs.aws.amazon.com/lexv2/latest/dg/API_ListExports.html ListExports>
+-- operation
+--
+-- /See:/ 'newExportFilter' smart constructor.
+data ExportFilter = ExportFilter'
+  { -- | The name of the field to use for filtering.
+    name :: ExportFilterName,
+    -- | The values to use to filter the response. The values must be @Bot@,
+    -- @BotLocale@, or @CustomVocabulary@.
+    values :: Prelude.NonEmpty Prelude.Text,
+    -- | The operator to use for the filter. Specify EQ when the @ListExports@
+    -- operation should return only resource types that equal the specified
+    -- value. Specify CO when the @ListExports@ operation should return
+    -- resource types that contain the specified value.
+    operator :: ExportFilterOperator
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ExportFilter' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'name', 'exportFilter_name' - The name of the field to use for filtering.
+--
+-- 'values', 'exportFilter_values' - The values to use to filter the response. The values must be @Bot@,
+-- @BotLocale@, or @CustomVocabulary@.
+--
+-- 'operator', 'exportFilter_operator' - The operator to use for the filter. Specify EQ when the @ListExports@
+-- operation should return only resource types that equal the specified
+-- value. Specify CO when the @ListExports@ operation should return
+-- resource types that contain the specified value.
+newExportFilter ::
+  -- | 'name'
+  ExportFilterName ->
+  -- | 'values'
+  Prelude.NonEmpty Prelude.Text ->
+  -- | 'operator'
+  ExportFilterOperator ->
+  ExportFilter
+newExportFilter pName_ pValues_ pOperator_ =
+  ExportFilter'
+    { name = pName_,
+      values = Lens.coerced Lens.# pValues_,
+      operator = pOperator_
+    }
+
+-- | The name of the field to use for filtering.
+exportFilter_name :: Lens.Lens' ExportFilter ExportFilterName
+exportFilter_name = Lens.lens (\ExportFilter' {name} -> name) (\s@ExportFilter' {} a -> s {name = a} :: ExportFilter)
+
+-- | The values to use to filter the response. The values must be @Bot@,
+-- @BotLocale@, or @CustomVocabulary@.
+exportFilter_values :: Lens.Lens' ExportFilter (Prelude.NonEmpty Prelude.Text)
+exportFilter_values = Lens.lens (\ExportFilter' {values} -> values) (\s@ExportFilter' {} a -> s {values = a} :: ExportFilter) Prelude.. Lens.coerced
+
+-- | The operator to use for the filter. Specify EQ when the @ListExports@
+-- operation should return only resource types that equal the specified
+-- value. Specify CO when the @ListExports@ operation should return
+-- resource types that contain the specified value.
+exportFilter_operator :: Lens.Lens' ExportFilter ExportFilterOperator
+exportFilter_operator = Lens.lens (\ExportFilter' {operator} -> operator) (\s@ExportFilter' {} a -> s {operator = a} :: ExportFilter)
+
+instance Prelude.Hashable ExportFilter where
+  hashWithSalt _salt ExportFilter' {..} =
+    _salt
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` values
+      `Prelude.hashWithSalt` operator
+
+instance Prelude.NFData ExportFilter where
+  rnf ExportFilter' {..} =
+    Prelude.rnf name
+      `Prelude.seq` Prelude.rnf values
+      `Prelude.seq` Prelude.rnf operator
+
+instance Data.ToJSON ExportFilter where
+  toJSON ExportFilter' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("name" Data..= name),
+            Prelude.Just ("values" Data..= values),
+            Prelude.Just ("operator" Data..= operator)
+          ]
+      )
diff --git a/gen/Amazonka/LexV2Models/Types/ExportFilterName.hs b/gen/Amazonka/LexV2Models/Types/ExportFilterName.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/Types/ExportFilterName.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.LexV2Models.Types.ExportFilterName
+-- 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.LexV2Models.Types.ExportFilterName
+  ( ExportFilterName
+      ( ..,
+        ExportFilterName_ExportResourceType
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype ExportFilterName = ExportFilterName'
+  { fromExportFilterName ::
+      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 ExportFilterName_ExportResourceType :: ExportFilterName
+pattern ExportFilterName_ExportResourceType = ExportFilterName' "ExportResourceType"
+
+{-# COMPLETE
+  ExportFilterName_ExportResourceType,
+  ExportFilterName'
+  #-}
diff --git a/gen/Amazonka/LexV2Models/Types/ExportFilterOperator.hs b/gen/Amazonka/LexV2Models/Types/ExportFilterOperator.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/Types/ExportFilterOperator.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.LexV2Models.Types.ExportFilterOperator
+-- 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.LexV2Models.Types.ExportFilterOperator
+  ( ExportFilterOperator
+      ( ..,
+        ExportFilterOperator_CO,
+        ExportFilterOperator_EQ
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype ExportFilterOperator = ExportFilterOperator'
+  { fromExportFilterOperator ::
+      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 ExportFilterOperator_CO :: ExportFilterOperator
+pattern ExportFilterOperator_CO = ExportFilterOperator' "CO"
+
+pattern ExportFilterOperator_EQ :: ExportFilterOperator
+pattern ExportFilterOperator_EQ = ExportFilterOperator' "EQ"
+
+{-# COMPLETE
+  ExportFilterOperator_CO,
+  ExportFilterOperator_EQ,
+  ExportFilterOperator'
+  #-}
diff --git a/gen/Amazonka/LexV2Models/Types/ExportResourceSpecification.hs b/gen/Amazonka/LexV2Models/Types/ExportResourceSpecification.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/Types/ExportResourceSpecification.hs
@@ -0,0 +1,116 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.LexV2Models.Types.ExportResourceSpecification
+-- 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.LexV2Models.Types.ExportResourceSpecification where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LexV2Models.Types.BotExportSpecification
+import Amazonka.LexV2Models.Types.BotLocaleExportSpecification
+import Amazonka.LexV2Models.Types.CustomVocabularyExportSpecification
+import qualified Amazonka.Prelude as Prelude
+
+-- | Provides information about the bot or bot locale that you want to
+-- export. You can specify the @botExportSpecification@ or the
+-- @botLocaleExportSpecification@, but not both.
+--
+-- /See:/ 'newExportResourceSpecification' smart constructor.
+data ExportResourceSpecification = ExportResourceSpecification'
+  { -- | Parameters for exporting a bot.
+    botExportSpecification :: Prelude.Maybe BotExportSpecification,
+    -- | Parameters for exporting a bot locale.
+    botLocaleExportSpecification :: Prelude.Maybe BotLocaleExportSpecification,
+    -- | The parameters required to export a custom vocabulary.
+    customVocabularyExportSpecification :: Prelude.Maybe CustomVocabularyExportSpecification
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ExportResourceSpecification' 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:
+--
+-- 'botExportSpecification', 'exportResourceSpecification_botExportSpecification' - Parameters for exporting a bot.
+--
+-- 'botLocaleExportSpecification', 'exportResourceSpecification_botLocaleExportSpecification' - Parameters for exporting a bot locale.
+--
+-- 'customVocabularyExportSpecification', 'exportResourceSpecification_customVocabularyExportSpecification' - The parameters required to export a custom vocabulary.
+newExportResourceSpecification ::
+  ExportResourceSpecification
+newExportResourceSpecification =
+  ExportResourceSpecification'
+    { botExportSpecification =
+        Prelude.Nothing,
+      botLocaleExportSpecification = Prelude.Nothing,
+      customVocabularyExportSpecification =
+        Prelude.Nothing
+    }
+
+-- | Parameters for exporting a bot.
+exportResourceSpecification_botExportSpecification :: Lens.Lens' ExportResourceSpecification (Prelude.Maybe BotExportSpecification)
+exportResourceSpecification_botExportSpecification = Lens.lens (\ExportResourceSpecification' {botExportSpecification} -> botExportSpecification) (\s@ExportResourceSpecification' {} a -> s {botExportSpecification = a} :: ExportResourceSpecification)
+
+-- | Parameters for exporting a bot locale.
+exportResourceSpecification_botLocaleExportSpecification :: Lens.Lens' ExportResourceSpecification (Prelude.Maybe BotLocaleExportSpecification)
+exportResourceSpecification_botLocaleExportSpecification = Lens.lens (\ExportResourceSpecification' {botLocaleExportSpecification} -> botLocaleExportSpecification) (\s@ExportResourceSpecification' {} a -> s {botLocaleExportSpecification = a} :: ExportResourceSpecification)
+
+-- | The parameters required to export a custom vocabulary.
+exportResourceSpecification_customVocabularyExportSpecification :: Lens.Lens' ExportResourceSpecification (Prelude.Maybe CustomVocabularyExportSpecification)
+exportResourceSpecification_customVocabularyExportSpecification = Lens.lens (\ExportResourceSpecification' {customVocabularyExportSpecification} -> customVocabularyExportSpecification) (\s@ExportResourceSpecification' {} a -> s {customVocabularyExportSpecification = a} :: ExportResourceSpecification)
+
+instance Data.FromJSON ExportResourceSpecification where
+  parseJSON =
+    Data.withObject
+      "ExportResourceSpecification"
+      ( \x ->
+          ExportResourceSpecification'
+            Prelude.<$> (x Data..:? "botExportSpecification")
+            Prelude.<*> (x Data..:? "botLocaleExportSpecification")
+            Prelude.<*> (x Data..:? "customVocabularyExportSpecification")
+      )
+
+instance Prelude.Hashable ExportResourceSpecification where
+  hashWithSalt _salt ExportResourceSpecification' {..} =
+    _salt
+      `Prelude.hashWithSalt` botExportSpecification
+      `Prelude.hashWithSalt` botLocaleExportSpecification
+      `Prelude.hashWithSalt` customVocabularyExportSpecification
+
+instance Prelude.NFData ExportResourceSpecification where
+  rnf ExportResourceSpecification' {..} =
+    Prelude.rnf botExportSpecification
+      `Prelude.seq` Prelude.rnf botLocaleExportSpecification
+      `Prelude.seq` Prelude.rnf customVocabularyExportSpecification
+
+instance Data.ToJSON ExportResourceSpecification where
+  toJSON ExportResourceSpecification' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("botExportSpecification" Data..=)
+              Prelude.<$> botExportSpecification,
+            ("botLocaleExportSpecification" Data..=)
+              Prelude.<$> botLocaleExportSpecification,
+            ("customVocabularyExportSpecification" Data..=)
+              Prelude.<$> customVocabularyExportSpecification
+          ]
+      )
diff --git a/gen/Amazonka/LexV2Models/Types/ExportSortAttribute.hs b/gen/Amazonka/LexV2Models/Types/ExportSortAttribute.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/Types/ExportSortAttribute.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.LexV2Models.Types.ExportSortAttribute
+-- 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.LexV2Models.Types.ExportSortAttribute
+  ( ExportSortAttribute
+      ( ..,
+        ExportSortAttribute_LastUpdatedDateTime
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype ExportSortAttribute = ExportSortAttribute'
+  { fromExportSortAttribute ::
+      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 ExportSortAttribute_LastUpdatedDateTime :: ExportSortAttribute
+pattern ExportSortAttribute_LastUpdatedDateTime = ExportSortAttribute' "LastUpdatedDateTime"
+
+{-# COMPLETE
+  ExportSortAttribute_LastUpdatedDateTime,
+  ExportSortAttribute'
+  #-}
diff --git a/gen/Amazonka/LexV2Models/Types/ExportSortBy.hs b/gen/Amazonka/LexV2Models/Types/ExportSortBy.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/Types/ExportSortBy.hs
@@ -0,0 +1,89 @@
+{-# 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.LexV2Models.Types.ExportSortBy
+-- 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.LexV2Models.Types.ExportSortBy where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LexV2Models.Types.ExportSortAttribute
+import Amazonka.LexV2Models.Types.SortOrder
+import qualified Amazonka.Prelude as Prelude
+
+-- | Provides information about sorting a list of exports.
+--
+-- /See:/ 'newExportSortBy' smart constructor.
+data ExportSortBy = ExportSortBy'
+  { -- | The export field to use for sorting.
+    attribute :: ExportSortAttribute,
+    -- | The order to sort the list.
+    order :: SortOrder
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ExportSortBy' 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:
+--
+-- 'attribute', 'exportSortBy_attribute' - The export field to use for sorting.
+--
+-- 'order', 'exportSortBy_order' - The order to sort the list.
+newExportSortBy ::
+  -- | 'attribute'
+  ExportSortAttribute ->
+  -- | 'order'
+  SortOrder ->
+  ExportSortBy
+newExportSortBy pAttribute_ pOrder_ =
+  ExportSortBy'
+    { attribute = pAttribute_,
+      order = pOrder_
+    }
+
+-- | The export field to use for sorting.
+exportSortBy_attribute :: Lens.Lens' ExportSortBy ExportSortAttribute
+exportSortBy_attribute = Lens.lens (\ExportSortBy' {attribute} -> attribute) (\s@ExportSortBy' {} a -> s {attribute = a} :: ExportSortBy)
+
+-- | The order to sort the list.
+exportSortBy_order :: Lens.Lens' ExportSortBy SortOrder
+exportSortBy_order = Lens.lens (\ExportSortBy' {order} -> order) (\s@ExportSortBy' {} a -> s {order = a} :: ExportSortBy)
+
+instance Prelude.Hashable ExportSortBy where
+  hashWithSalt _salt ExportSortBy' {..} =
+    _salt
+      `Prelude.hashWithSalt` attribute
+      `Prelude.hashWithSalt` order
+
+instance Prelude.NFData ExportSortBy where
+  rnf ExportSortBy' {..} =
+    Prelude.rnf attribute
+      `Prelude.seq` Prelude.rnf order
+
+instance Data.ToJSON ExportSortBy where
+  toJSON ExportSortBy' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("attribute" Data..= attribute),
+            Prelude.Just ("order" Data..= order)
+          ]
+      )
diff --git a/gen/Amazonka/LexV2Models/Types/ExportStatus.hs b/gen/Amazonka/LexV2Models/Types/ExportStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/Types/ExportStatus.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.LexV2Models.Types.ExportStatus
+-- 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.LexV2Models.Types.ExportStatus
+  ( ExportStatus
+      ( ..,
+        ExportStatus_Completed,
+        ExportStatus_Deleting,
+        ExportStatus_Failed,
+        ExportStatus_InProgress
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype ExportStatus = ExportStatus'
+  { fromExportStatus ::
+      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 ExportStatus_Completed :: ExportStatus
+pattern ExportStatus_Completed = ExportStatus' "Completed"
+
+pattern ExportStatus_Deleting :: ExportStatus
+pattern ExportStatus_Deleting = ExportStatus' "Deleting"
+
+pattern ExportStatus_Failed :: ExportStatus
+pattern ExportStatus_Failed = ExportStatus' "Failed"
+
+pattern ExportStatus_InProgress :: ExportStatus
+pattern ExportStatus_InProgress = ExportStatus' "InProgress"
+
+{-# COMPLETE
+  ExportStatus_Completed,
+  ExportStatus_Deleting,
+  ExportStatus_Failed,
+  ExportStatus_InProgress,
+  ExportStatus'
+  #-}
diff --git a/gen/Amazonka/LexV2Models/Types/ExportSummary.hs b/gen/Amazonka/LexV2Models/Types/ExportSummary.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/Types/ExportSummary.hs
@@ -0,0 +1,138 @@
+{-# 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.LexV2Models.Types.ExportSummary
+-- 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.LexV2Models.Types.ExportSummary where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LexV2Models.Types.ExportResourceSpecification
+import Amazonka.LexV2Models.Types.ExportStatus
+import Amazonka.LexV2Models.Types.ImportExportFileFormat
+import qualified Amazonka.Prelude as Prelude
+
+-- | Provides summary information about an export in an export list.
+--
+-- /See:/ 'newExportSummary' smart constructor.
+data ExportSummary = ExportSummary'
+  { -- | The date and time that the export was created.
+    creationDateTime :: Prelude.Maybe Data.POSIX,
+    -- | The unique identifier that Amazon Lex assigned to the export.
+    exportId :: Prelude.Maybe Prelude.Text,
+    -- | The status of the export. When the status is @Completed@ the export is
+    -- ready to download.
+    exportStatus :: Prelude.Maybe ExportStatus,
+    -- | The file format used in the export files.
+    fileFormat :: Prelude.Maybe ImportExportFileFormat,
+    -- | The date and time that the export was last updated.
+    lastUpdatedDateTime :: Prelude.Maybe Data.POSIX,
+    -- | Information about the bot or bot locale that was exported.
+    resourceSpecification :: Prelude.Maybe ExportResourceSpecification
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ExportSummary' 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:
+--
+-- 'creationDateTime', 'exportSummary_creationDateTime' - The date and time that the export was created.
+--
+-- 'exportId', 'exportSummary_exportId' - The unique identifier that Amazon Lex assigned to the export.
+--
+-- 'exportStatus', 'exportSummary_exportStatus' - The status of the export. When the status is @Completed@ the export is
+-- ready to download.
+--
+-- 'fileFormat', 'exportSummary_fileFormat' - The file format used in the export files.
+--
+-- 'lastUpdatedDateTime', 'exportSummary_lastUpdatedDateTime' - The date and time that the export was last updated.
+--
+-- 'resourceSpecification', 'exportSummary_resourceSpecification' - Information about the bot or bot locale that was exported.
+newExportSummary ::
+  ExportSummary
+newExportSummary =
+  ExportSummary'
+    { creationDateTime = Prelude.Nothing,
+      exportId = Prelude.Nothing,
+      exportStatus = Prelude.Nothing,
+      fileFormat = Prelude.Nothing,
+      lastUpdatedDateTime = Prelude.Nothing,
+      resourceSpecification = Prelude.Nothing
+    }
+
+-- | The date and time that the export was created.
+exportSummary_creationDateTime :: Lens.Lens' ExportSummary (Prelude.Maybe Prelude.UTCTime)
+exportSummary_creationDateTime = Lens.lens (\ExportSummary' {creationDateTime} -> creationDateTime) (\s@ExportSummary' {} a -> s {creationDateTime = a} :: ExportSummary) Prelude.. Lens.mapping Data._Time
+
+-- | The unique identifier that Amazon Lex assigned to the export.
+exportSummary_exportId :: Lens.Lens' ExportSummary (Prelude.Maybe Prelude.Text)
+exportSummary_exportId = Lens.lens (\ExportSummary' {exportId} -> exportId) (\s@ExportSummary' {} a -> s {exportId = a} :: ExportSummary)
+
+-- | The status of the export. When the status is @Completed@ the export is
+-- ready to download.
+exportSummary_exportStatus :: Lens.Lens' ExportSummary (Prelude.Maybe ExportStatus)
+exportSummary_exportStatus = Lens.lens (\ExportSummary' {exportStatus} -> exportStatus) (\s@ExportSummary' {} a -> s {exportStatus = a} :: ExportSummary)
+
+-- | The file format used in the export files.
+exportSummary_fileFormat :: Lens.Lens' ExportSummary (Prelude.Maybe ImportExportFileFormat)
+exportSummary_fileFormat = Lens.lens (\ExportSummary' {fileFormat} -> fileFormat) (\s@ExportSummary' {} a -> s {fileFormat = a} :: ExportSummary)
+
+-- | The date and time that the export was last updated.
+exportSummary_lastUpdatedDateTime :: Lens.Lens' ExportSummary (Prelude.Maybe Prelude.UTCTime)
+exportSummary_lastUpdatedDateTime = Lens.lens (\ExportSummary' {lastUpdatedDateTime} -> lastUpdatedDateTime) (\s@ExportSummary' {} a -> s {lastUpdatedDateTime = a} :: ExportSummary) Prelude.. Lens.mapping Data._Time
+
+-- | Information about the bot or bot locale that was exported.
+exportSummary_resourceSpecification :: Lens.Lens' ExportSummary (Prelude.Maybe ExportResourceSpecification)
+exportSummary_resourceSpecification = Lens.lens (\ExportSummary' {resourceSpecification} -> resourceSpecification) (\s@ExportSummary' {} a -> s {resourceSpecification = a} :: ExportSummary)
+
+instance Data.FromJSON ExportSummary where
+  parseJSON =
+    Data.withObject
+      "ExportSummary"
+      ( \x ->
+          ExportSummary'
+            Prelude.<$> (x Data..:? "creationDateTime")
+            Prelude.<*> (x Data..:? "exportId")
+            Prelude.<*> (x Data..:? "exportStatus")
+            Prelude.<*> (x Data..:? "fileFormat")
+            Prelude.<*> (x Data..:? "lastUpdatedDateTime")
+            Prelude.<*> (x Data..:? "resourceSpecification")
+      )
+
+instance Prelude.Hashable ExportSummary where
+  hashWithSalt _salt ExportSummary' {..} =
+    _salt
+      `Prelude.hashWithSalt` creationDateTime
+      `Prelude.hashWithSalt` exportId
+      `Prelude.hashWithSalt` exportStatus
+      `Prelude.hashWithSalt` fileFormat
+      `Prelude.hashWithSalt` lastUpdatedDateTime
+      `Prelude.hashWithSalt` resourceSpecification
+
+instance Prelude.NFData ExportSummary where
+  rnf ExportSummary' {..} =
+    Prelude.rnf creationDateTime
+      `Prelude.seq` Prelude.rnf exportId
+      `Prelude.seq` Prelude.rnf exportStatus
+      `Prelude.seq` Prelude.rnf fileFormat
+      `Prelude.seq` Prelude.rnf lastUpdatedDateTime
+      `Prelude.seq` Prelude.rnf resourceSpecification
diff --git a/gen/Amazonka/LexV2Models/Types/ExternalSourceSetting.hs b/gen/Amazonka/LexV2Models/Types/ExternalSourceSetting.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/Types/ExternalSourceSetting.hs
@@ -0,0 +1,83 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.LexV2Models.Types.ExternalSourceSetting
+-- 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.LexV2Models.Types.ExternalSourceSetting where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LexV2Models.Types.GrammarSlotTypeSetting
+import qualified Amazonka.Prelude as Prelude
+
+-- | Provides information about the external source of the slot type\'s
+-- definition.
+--
+-- /See:/ 'newExternalSourceSetting' smart constructor.
+data ExternalSourceSetting = ExternalSourceSetting'
+  { -- | Settings required for a slot type based on a grammar that you provide.
+    grammarSlotTypeSetting :: Prelude.Maybe GrammarSlotTypeSetting
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ExternalSourceSetting' 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:
+--
+-- 'grammarSlotTypeSetting', 'externalSourceSetting_grammarSlotTypeSetting' - Settings required for a slot type based on a grammar that you provide.
+newExternalSourceSetting ::
+  ExternalSourceSetting
+newExternalSourceSetting =
+  ExternalSourceSetting'
+    { grammarSlotTypeSetting =
+        Prelude.Nothing
+    }
+
+-- | Settings required for a slot type based on a grammar that you provide.
+externalSourceSetting_grammarSlotTypeSetting :: Lens.Lens' ExternalSourceSetting (Prelude.Maybe GrammarSlotTypeSetting)
+externalSourceSetting_grammarSlotTypeSetting = Lens.lens (\ExternalSourceSetting' {grammarSlotTypeSetting} -> grammarSlotTypeSetting) (\s@ExternalSourceSetting' {} a -> s {grammarSlotTypeSetting = a} :: ExternalSourceSetting)
+
+instance Data.FromJSON ExternalSourceSetting where
+  parseJSON =
+    Data.withObject
+      "ExternalSourceSetting"
+      ( \x ->
+          ExternalSourceSetting'
+            Prelude.<$> (x Data..:? "grammarSlotTypeSetting")
+      )
+
+instance Prelude.Hashable ExternalSourceSetting where
+  hashWithSalt _salt ExternalSourceSetting' {..} =
+    _salt `Prelude.hashWithSalt` grammarSlotTypeSetting
+
+instance Prelude.NFData ExternalSourceSetting where
+  rnf ExternalSourceSetting' {..} =
+    Prelude.rnf grammarSlotTypeSetting
+
+instance Data.ToJSON ExternalSourceSetting where
+  toJSON ExternalSourceSetting' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("grammarSlotTypeSetting" Data..=)
+              Prelude.<$> grammarSlotTypeSetting
+          ]
+      )
diff --git a/gen/Amazonka/LexV2Models/Types/FailedCustomVocabularyItem.hs b/gen/Amazonka/LexV2Models/Types/FailedCustomVocabularyItem.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/Types/FailedCustomVocabularyItem.hs
@@ -0,0 +1,108 @@
+{-# 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.LexV2Models.Types.FailedCustomVocabularyItem
+-- 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.LexV2Models.Types.FailedCustomVocabularyItem where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LexV2Models.Types.ErrorCode
+import qualified Amazonka.Prelude as Prelude
+
+-- | The unique failed custom vocabulary item from the custom vocabulary
+-- list.
+--
+-- /See:/ 'newFailedCustomVocabularyItem' smart constructor.
+data FailedCustomVocabularyItem = FailedCustomVocabularyItem'
+  { -- | The unique error code for the failed custom vocabulary item from the
+    -- custom vocabulary list.
+    errorCode :: Prelude.Maybe ErrorCode,
+    -- | The error message for the failed custom vocabulary item from the custom
+    -- vocabulary list.
+    errorMessage :: Prelude.Maybe Prelude.Text,
+    -- | The unique item identifer for the failed custom vocabulary item from the
+    -- custom vocabulary list.
+    itemId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'FailedCustomVocabularyItem' 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', 'failedCustomVocabularyItem_errorCode' - The unique error code for the failed custom vocabulary item from the
+-- custom vocabulary list.
+--
+-- 'errorMessage', 'failedCustomVocabularyItem_errorMessage' - The error message for the failed custom vocabulary item from the custom
+-- vocabulary list.
+--
+-- 'itemId', 'failedCustomVocabularyItem_itemId' - The unique item identifer for the failed custom vocabulary item from the
+-- custom vocabulary list.
+newFailedCustomVocabularyItem ::
+  FailedCustomVocabularyItem
+newFailedCustomVocabularyItem =
+  FailedCustomVocabularyItem'
+    { errorCode =
+        Prelude.Nothing,
+      errorMessage = Prelude.Nothing,
+      itemId = Prelude.Nothing
+    }
+
+-- | The unique error code for the failed custom vocabulary item from the
+-- custom vocabulary list.
+failedCustomVocabularyItem_errorCode :: Lens.Lens' FailedCustomVocabularyItem (Prelude.Maybe ErrorCode)
+failedCustomVocabularyItem_errorCode = Lens.lens (\FailedCustomVocabularyItem' {errorCode} -> errorCode) (\s@FailedCustomVocabularyItem' {} a -> s {errorCode = a} :: FailedCustomVocabularyItem)
+
+-- | The error message for the failed custom vocabulary item from the custom
+-- vocabulary list.
+failedCustomVocabularyItem_errorMessage :: Lens.Lens' FailedCustomVocabularyItem (Prelude.Maybe Prelude.Text)
+failedCustomVocabularyItem_errorMessage = Lens.lens (\FailedCustomVocabularyItem' {errorMessage} -> errorMessage) (\s@FailedCustomVocabularyItem' {} a -> s {errorMessage = a} :: FailedCustomVocabularyItem)
+
+-- | The unique item identifer for the failed custom vocabulary item from the
+-- custom vocabulary list.
+failedCustomVocabularyItem_itemId :: Lens.Lens' FailedCustomVocabularyItem (Prelude.Maybe Prelude.Text)
+failedCustomVocabularyItem_itemId = Lens.lens (\FailedCustomVocabularyItem' {itemId} -> itemId) (\s@FailedCustomVocabularyItem' {} a -> s {itemId = a} :: FailedCustomVocabularyItem)
+
+instance Data.FromJSON FailedCustomVocabularyItem where
+  parseJSON =
+    Data.withObject
+      "FailedCustomVocabularyItem"
+      ( \x ->
+          FailedCustomVocabularyItem'
+            Prelude.<$> (x Data..:? "errorCode")
+            Prelude.<*> (x Data..:? "errorMessage")
+            Prelude.<*> (x Data..:? "itemId")
+      )
+
+instance Prelude.Hashable FailedCustomVocabularyItem where
+  hashWithSalt _salt FailedCustomVocabularyItem' {..} =
+    _salt
+      `Prelude.hashWithSalt` errorCode
+      `Prelude.hashWithSalt` errorMessage
+      `Prelude.hashWithSalt` itemId
+
+instance Prelude.NFData FailedCustomVocabularyItem where
+  rnf FailedCustomVocabularyItem' {..} =
+    Prelude.rnf errorCode
+      `Prelude.seq` Prelude.rnf errorMessage
+      `Prelude.seq` Prelude.rnf itemId
diff --git a/gen/Amazonka/LexV2Models/Types/FulfillmentCodeHookSettings.hs b/gen/Amazonka/LexV2Models/Types/FulfillmentCodeHookSettings.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/Types/FulfillmentCodeHookSettings.hs
@@ -0,0 +1,146 @@
+{-# 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.LexV2Models.Types.FulfillmentCodeHookSettings
+-- 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.LexV2Models.Types.FulfillmentCodeHookSettings where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LexV2Models.Types.FulfillmentUpdatesSpecification
+import Amazonka.LexV2Models.Types.PostFulfillmentStatusSpecification
+import qualified Amazonka.Prelude as Prelude
+
+-- | Determines if a Lambda function should be invoked for a specific intent.
+--
+-- /See:/ 'newFulfillmentCodeHookSettings' smart constructor.
+data FulfillmentCodeHookSettings = FulfillmentCodeHookSettings'
+  { -- | Determines whether the fulfillment code hook is used. When @active@ is
+    -- false, the code hook doesn\'t run.
+    active :: Prelude.Maybe Prelude.Bool,
+    -- | Provides settings for update messages sent to the user for long-running
+    -- Lambda fulfillment functions. Fulfillment updates can be used only with
+    -- streaming conversations.
+    fulfillmentUpdatesSpecification :: Prelude.Maybe FulfillmentUpdatesSpecification,
+    -- | Provides settings for messages sent to the user for after the Lambda
+    -- fulfillment function completes. Post-fulfillment messages can be sent
+    -- for both streaming and non-streaming conversations.
+    postFulfillmentStatusSpecification :: Prelude.Maybe PostFulfillmentStatusSpecification,
+    -- | Indicates whether a Lambda function should be invoked to fulfill a
+    -- specific intent.
+    enabled :: Prelude.Bool
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'FulfillmentCodeHookSettings' 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:
+--
+-- 'active', 'fulfillmentCodeHookSettings_active' - Determines whether the fulfillment code hook is used. When @active@ is
+-- false, the code hook doesn\'t run.
+--
+-- 'fulfillmentUpdatesSpecification', 'fulfillmentCodeHookSettings_fulfillmentUpdatesSpecification' - Provides settings for update messages sent to the user for long-running
+-- Lambda fulfillment functions. Fulfillment updates can be used only with
+-- streaming conversations.
+--
+-- 'postFulfillmentStatusSpecification', 'fulfillmentCodeHookSettings_postFulfillmentStatusSpecification' - Provides settings for messages sent to the user for after the Lambda
+-- fulfillment function completes. Post-fulfillment messages can be sent
+-- for both streaming and non-streaming conversations.
+--
+-- 'enabled', 'fulfillmentCodeHookSettings_enabled' - Indicates whether a Lambda function should be invoked to fulfill a
+-- specific intent.
+newFulfillmentCodeHookSettings ::
+  -- | 'enabled'
+  Prelude.Bool ->
+  FulfillmentCodeHookSettings
+newFulfillmentCodeHookSettings pEnabled_ =
+  FulfillmentCodeHookSettings'
+    { active =
+        Prelude.Nothing,
+      fulfillmentUpdatesSpecification =
+        Prelude.Nothing,
+      postFulfillmentStatusSpecification =
+        Prelude.Nothing,
+      enabled = pEnabled_
+    }
+
+-- | Determines whether the fulfillment code hook is used. When @active@ is
+-- false, the code hook doesn\'t run.
+fulfillmentCodeHookSettings_active :: Lens.Lens' FulfillmentCodeHookSettings (Prelude.Maybe Prelude.Bool)
+fulfillmentCodeHookSettings_active = Lens.lens (\FulfillmentCodeHookSettings' {active} -> active) (\s@FulfillmentCodeHookSettings' {} a -> s {active = a} :: FulfillmentCodeHookSettings)
+
+-- | Provides settings for update messages sent to the user for long-running
+-- Lambda fulfillment functions. Fulfillment updates can be used only with
+-- streaming conversations.
+fulfillmentCodeHookSettings_fulfillmentUpdatesSpecification :: Lens.Lens' FulfillmentCodeHookSettings (Prelude.Maybe FulfillmentUpdatesSpecification)
+fulfillmentCodeHookSettings_fulfillmentUpdatesSpecification = Lens.lens (\FulfillmentCodeHookSettings' {fulfillmentUpdatesSpecification} -> fulfillmentUpdatesSpecification) (\s@FulfillmentCodeHookSettings' {} a -> s {fulfillmentUpdatesSpecification = a} :: FulfillmentCodeHookSettings)
+
+-- | Provides settings for messages sent to the user for after the Lambda
+-- fulfillment function completes. Post-fulfillment messages can be sent
+-- for both streaming and non-streaming conversations.
+fulfillmentCodeHookSettings_postFulfillmentStatusSpecification :: Lens.Lens' FulfillmentCodeHookSettings (Prelude.Maybe PostFulfillmentStatusSpecification)
+fulfillmentCodeHookSettings_postFulfillmentStatusSpecification = Lens.lens (\FulfillmentCodeHookSettings' {postFulfillmentStatusSpecification} -> postFulfillmentStatusSpecification) (\s@FulfillmentCodeHookSettings' {} a -> s {postFulfillmentStatusSpecification = a} :: FulfillmentCodeHookSettings)
+
+-- | Indicates whether a Lambda function should be invoked to fulfill a
+-- specific intent.
+fulfillmentCodeHookSettings_enabled :: Lens.Lens' FulfillmentCodeHookSettings Prelude.Bool
+fulfillmentCodeHookSettings_enabled = Lens.lens (\FulfillmentCodeHookSettings' {enabled} -> enabled) (\s@FulfillmentCodeHookSettings' {} a -> s {enabled = a} :: FulfillmentCodeHookSettings)
+
+instance Data.FromJSON FulfillmentCodeHookSettings where
+  parseJSON =
+    Data.withObject
+      "FulfillmentCodeHookSettings"
+      ( \x ->
+          FulfillmentCodeHookSettings'
+            Prelude.<$> (x Data..:? "active")
+            Prelude.<*> (x Data..:? "fulfillmentUpdatesSpecification")
+            Prelude.<*> (x Data..:? "postFulfillmentStatusSpecification")
+            Prelude.<*> (x Data..: "enabled")
+      )
+
+instance Prelude.Hashable FulfillmentCodeHookSettings where
+  hashWithSalt _salt FulfillmentCodeHookSettings' {..} =
+    _salt
+      `Prelude.hashWithSalt` active
+      `Prelude.hashWithSalt` fulfillmentUpdatesSpecification
+      `Prelude.hashWithSalt` postFulfillmentStatusSpecification
+      `Prelude.hashWithSalt` enabled
+
+instance Prelude.NFData FulfillmentCodeHookSettings where
+  rnf FulfillmentCodeHookSettings' {..} =
+    Prelude.rnf active
+      `Prelude.seq` Prelude.rnf fulfillmentUpdatesSpecification
+      `Prelude.seq` Prelude.rnf postFulfillmentStatusSpecification
+      `Prelude.seq` Prelude.rnf enabled
+
+instance Data.ToJSON FulfillmentCodeHookSettings where
+  toJSON FulfillmentCodeHookSettings' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("active" Data..=) Prelude.<$> active,
+            ("fulfillmentUpdatesSpecification" Data..=)
+              Prelude.<$> fulfillmentUpdatesSpecification,
+            ("postFulfillmentStatusSpecification" Data..=)
+              Prelude.<$> postFulfillmentStatusSpecification,
+            Prelude.Just ("enabled" Data..= enabled)
+          ]
+      )
diff --git a/gen/Amazonka/LexV2Models/Types/FulfillmentStartResponseSpecification.hs b/gen/Amazonka/LexV2Models/Types/FulfillmentStartResponseSpecification.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/Types/FulfillmentStartResponseSpecification.hs
@@ -0,0 +1,146 @@
+{-# 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.LexV2Models.Types.FulfillmentStartResponseSpecification
+-- 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.LexV2Models.Types.FulfillmentStartResponseSpecification where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LexV2Models.Types.MessageGroup
+import qualified Amazonka.Prelude as Prelude
+
+-- | Provides settings for a message that is sent to the user when a
+-- fulfillment Lambda function starts running.
+--
+-- /See:/ 'newFulfillmentStartResponseSpecification' smart constructor.
+data FulfillmentStartResponseSpecification = FulfillmentStartResponseSpecification'
+  { -- | Determines whether the user can interrupt the start message while it is
+    -- playing.
+    allowInterrupt :: Prelude.Maybe Prelude.Bool,
+    -- | The delay between when the Lambda fulfillment function starts running
+    -- and the start message is played. If the Lambda function returns before
+    -- the delay is over, the start message isn\'t played.
+    delayInSeconds :: Prelude.Natural,
+    -- | One to 5 message groups that contain start messages. Amazon Lex chooses
+    -- one of the messages to play to the user.
+    messageGroups :: Prelude.NonEmpty MessageGroup
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'FulfillmentStartResponseSpecification' 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:
+--
+-- 'allowInterrupt', 'fulfillmentStartResponseSpecification_allowInterrupt' - Determines whether the user can interrupt the start message while it is
+-- playing.
+--
+-- 'delayInSeconds', 'fulfillmentStartResponseSpecification_delayInSeconds' - The delay between when the Lambda fulfillment function starts running
+-- and the start message is played. If the Lambda function returns before
+-- the delay is over, the start message isn\'t played.
+--
+-- 'messageGroups', 'fulfillmentStartResponseSpecification_messageGroups' - One to 5 message groups that contain start messages. Amazon Lex chooses
+-- one of the messages to play to the user.
+newFulfillmentStartResponseSpecification ::
+  -- | 'delayInSeconds'
+  Prelude.Natural ->
+  -- | 'messageGroups'
+  Prelude.NonEmpty MessageGroup ->
+  FulfillmentStartResponseSpecification
+newFulfillmentStartResponseSpecification
+  pDelayInSeconds_
+  pMessageGroups_ =
+    FulfillmentStartResponseSpecification'
+      { allowInterrupt =
+          Prelude.Nothing,
+        delayInSeconds = pDelayInSeconds_,
+        messageGroups =
+          Lens.coerced
+            Lens.# pMessageGroups_
+      }
+
+-- | Determines whether the user can interrupt the start message while it is
+-- playing.
+fulfillmentStartResponseSpecification_allowInterrupt :: Lens.Lens' FulfillmentStartResponseSpecification (Prelude.Maybe Prelude.Bool)
+fulfillmentStartResponseSpecification_allowInterrupt = Lens.lens (\FulfillmentStartResponseSpecification' {allowInterrupt} -> allowInterrupt) (\s@FulfillmentStartResponseSpecification' {} a -> s {allowInterrupt = a} :: FulfillmentStartResponseSpecification)
+
+-- | The delay between when the Lambda fulfillment function starts running
+-- and the start message is played. If the Lambda function returns before
+-- the delay is over, the start message isn\'t played.
+fulfillmentStartResponseSpecification_delayInSeconds :: Lens.Lens' FulfillmentStartResponseSpecification Prelude.Natural
+fulfillmentStartResponseSpecification_delayInSeconds = Lens.lens (\FulfillmentStartResponseSpecification' {delayInSeconds} -> delayInSeconds) (\s@FulfillmentStartResponseSpecification' {} a -> s {delayInSeconds = a} :: FulfillmentStartResponseSpecification)
+
+-- | One to 5 message groups that contain start messages. Amazon Lex chooses
+-- one of the messages to play to the user.
+fulfillmentStartResponseSpecification_messageGroups :: Lens.Lens' FulfillmentStartResponseSpecification (Prelude.NonEmpty MessageGroup)
+fulfillmentStartResponseSpecification_messageGroups = Lens.lens (\FulfillmentStartResponseSpecification' {messageGroups} -> messageGroups) (\s@FulfillmentStartResponseSpecification' {} a -> s {messageGroups = a} :: FulfillmentStartResponseSpecification) Prelude.. Lens.coerced
+
+instance
+  Data.FromJSON
+    FulfillmentStartResponseSpecification
+  where
+  parseJSON =
+    Data.withObject
+      "FulfillmentStartResponseSpecification"
+      ( \x ->
+          FulfillmentStartResponseSpecification'
+            Prelude.<$> (x Data..:? "allowInterrupt")
+            Prelude.<*> (x Data..: "delayInSeconds")
+            Prelude.<*> (x Data..: "messageGroups")
+      )
+
+instance
+  Prelude.Hashable
+    FulfillmentStartResponseSpecification
+  where
+  hashWithSalt
+    _salt
+    FulfillmentStartResponseSpecification' {..} =
+      _salt
+        `Prelude.hashWithSalt` allowInterrupt
+        `Prelude.hashWithSalt` delayInSeconds
+        `Prelude.hashWithSalt` messageGroups
+
+instance
+  Prelude.NFData
+    FulfillmentStartResponseSpecification
+  where
+  rnf FulfillmentStartResponseSpecification' {..} =
+    Prelude.rnf allowInterrupt
+      `Prelude.seq` Prelude.rnf delayInSeconds
+      `Prelude.seq` Prelude.rnf messageGroups
+
+instance
+  Data.ToJSON
+    FulfillmentStartResponseSpecification
+  where
+  toJSON FulfillmentStartResponseSpecification' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("allowInterrupt" Data..=)
+              Prelude.<$> allowInterrupt,
+            Prelude.Just
+              ("delayInSeconds" Data..= delayInSeconds),
+            Prelude.Just
+              ("messageGroups" Data..= messageGroups)
+          ]
+      )
diff --git a/gen/Amazonka/LexV2Models/Types/FulfillmentUpdateResponseSpecification.hs b/gen/Amazonka/LexV2Models/Types/FulfillmentUpdateResponseSpecification.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/Types/FulfillmentUpdateResponseSpecification.hs
@@ -0,0 +1,150 @@
+{-# 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.LexV2Models.Types.FulfillmentUpdateResponseSpecification
+-- 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.LexV2Models.Types.FulfillmentUpdateResponseSpecification where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LexV2Models.Types.MessageGroup
+import qualified Amazonka.Prelude as Prelude
+
+-- | Provides settings for a message that is sent periodically to the user
+-- while a fulfillment Lambda function is running.
+--
+-- /See:/ 'newFulfillmentUpdateResponseSpecification' smart constructor.
+data FulfillmentUpdateResponseSpecification = FulfillmentUpdateResponseSpecification'
+  { -- | Determines whether the user can interrupt an update message while it is
+    -- playing.
+    allowInterrupt :: Prelude.Maybe Prelude.Bool,
+    -- | The frequency that a message is sent to the user. When the period ends,
+    -- Amazon Lex chooses a message from the message groups and plays it to the
+    -- user. If the fulfillment Lambda returns before the first period ends, an
+    -- update message is not played to the user.
+    frequencyInSeconds :: Prelude.Natural,
+    -- | One to 5 message groups that contain update messages. Amazon Lex chooses
+    -- one of the messages to play to the user.
+    messageGroups :: Prelude.NonEmpty MessageGroup
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'FulfillmentUpdateResponseSpecification' 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:
+--
+-- 'allowInterrupt', 'fulfillmentUpdateResponseSpecification_allowInterrupt' - Determines whether the user can interrupt an update message while it is
+-- playing.
+--
+-- 'frequencyInSeconds', 'fulfillmentUpdateResponseSpecification_frequencyInSeconds' - The frequency that a message is sent to the user. When the period ends,
+-- Amazon Lex chooses a message from the message groups and plays it to the
+-- user. If the fulfillment Lambda returns before the first period ends, an
+-- update message is not played to the user.
+--
+-- 'messageGroups', 'fulfillmentUpdateResponseSpecification_messageGroups' - One to 5 message groups that contain update messages. Amazon Lex chooses
+-- one of the messages to play to the user.
+newFulfillmentUpdateResponseSpecification ::
+  -- | 'frequencyInSeconds'
+  Prelude.Natural ->
+  -- | 'messageGroups'
+  Prelude.NonEmpty MessageGroup ->
+  FulfillmentUpdateResponseSpecification
+newFulfillmentUpdateResponseSpecification
+  pFrequencyInSeconds_
+  pMessageGroups_ =
+    FulfillmentUpdateResponseSpecification'
+      { allowInterrupt =
+          Prelude.Nothing,
+        frequencyInSeconds =
+          pFrequencyInSeconds_,
+        messageGroups =
+          Lens.coerced
+            Lens.# pMessageGroups_
+      }
+
+-- | Determines whether the user can interrupt an update message while it is
+-- playing.
+fulfillmentUpdateResponseSpecification_allowInterrupt :: Lens.Lens' FulfillmentUpdateResponseSpecification (Prelude.Maybe Prelude.Bool)
+fulfillmentUpdateResponseSpecification_allowInterrupt = Lens.lens (\FulfillmentUpdateResponseSpecification' {allowInterrupt} -> allowInterrupt) (\s@FulfillmentUpdateResponseSpecification' {} a -> s {allowInterrupt = a} :: FulfillmentUpdateResponseSpecification)
+
+-- | The frequency that a message is sent to the user. When the period ends,
+-- Amazon Lex chooses a message from the message groups and plays it to the
+-- user. If the fulfillment Lambda returns before the first period ends, an
+-- update message is not played to the user.
+fulfillmentUpdateResponseSpecification_frequencyInSeconds :: Lens.Lens' FulfillmentUpdateResponseSpecification Prelude.Natural
+fulfillmentUpdateResponseSpecification_frequencyInSeconds = Lens.lens (\FulfillmentUpdateResponseSpecification' {frequencyInSeconds} -> frequencyInSeconds) (\s@FulfillmentUpdateResponseSpecification' {} a -> s {frequencyInSeconds = a} :: FulfillmentUpdateResponseSpecification)
+
+-- | One to 5 message groups that contain update messages. Amazon Lex chooses
+-- one of the messages to play to the user.
+fulfillmentUpdateResponseSpecification_messageGroups :: Lens.Lens' FulfillmentUpdateResponseSpecification (Prelude.NonEmpty MessageGroup)
+fulfillmentUpdateResponseSpecification_messageGroups = Lens.lens (\FulfillmentUpdateResponseSpecification' {messageGroups} -> messageGroups) (\s@FulfillmentUpdateResponseSpecification' {} a -> s {messageGroups = a} :: FulfillmentUpdateResponseSpecification) Prelude.. Lens.coerced
+
+instance
+  Data.FromJSON
+    FulfillmentUpdateResponseSpecification
+  where
+  parseJSON =
+    Data.withObject
+      "FulfillmentUpdateResponseSpecification"
+      ( \x ->
+          FulfillmentUpdateResponseSpecification'
+            Prelude.<$> (x Data..:? "allowInterrupt")
+            Prelude.<*> (x Data..: "frequencyInSeconds")
+            Prelude.<*> (x Data..: "messageGroups")
+      )
+
+instance
+  Prelude.Hashable
+    FulfillmentUpdateResponseSpecification
+  where
+  hashWithSalt
+    _salt
+    FulfillmentUpdateResponseSpecification' {..} =
+      _salt
+        `Prelude.hashWithSalt` allowInterrupt
+        `Prelude.hashWithSalt` frequencyInSeconds
+        `Prelude.hashWithSalt` messageGroups
+
+instance
+  Prelude.NFData
+    FulfillmentUpdateResponseSpecification
+  where
+  rnf FulfillmentUpdateResponseSpecification' {..} =
+    Prelude.rnf allowInterrupt
+      `Prelude.seq` Prelude.rnf frequencyInSeconds
+      `Prelude.seq` Prelude.rnf messageGroups
+
+instance
+  Data.ToJSON
+    FulfillmentUpdateResponseSpecification
+  where
+  toJSON FulfillmentUpdateResponseSpecification' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("allowInterrupt" Data..=)
+              Prelude.<$> allowInterrupt,
+            Prelude.Just
+              ("frequencyInSeconds" Data..= frequencyInSeconds),
+            Prelude.Just
+              ("messageGroups" Data..= messageGroups)
+          ]
+      )
diff --git a/gen/Amazonka/LexV2Models/Types/FulfillmentUpdatesSpecification.hs b/gen/Amazonka/LexV2Models/Types/FulfillmentUpdatesSpecification.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/Types/FulfillmentUpdatesSpecification.hs
@@ -0,0 +1,159 @@
+{-# 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.LexV2Models.Types.FulfillmentUpdatesSpecification
+-- 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.LexV2Models.Types.FulfillmentUpdatesSpecification where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LexV2Models.Types.FulfillmentStartResponseSpecification
+import Amazonka.LexV2Models.Types.FulfillmentUpdateResponseSpecification
+import qualified Amazonka.Prelude as Prelude
+
+-- | Provides information for updating the user on the progress of fulfilling
+-- an intent.
+--
+-- /See:/ 'newFulfillmentUpdatesSpecification' smart constructor.
+data FulfillmentUpdatesSpecification = FulfillmentUpdatesSpecification'
+  { -- | Provides configuration information for the message sent to users when
+    -- the fulfillment Lambda functions starts running.
+    startResponse :: Prelude.Maybe FulfillmentStartResponseSpecification,
+    -- | The length of time that the fulfillment Lambda function should run
+    -- before it times out.
+    timeoutInSeconds :: Prelude.Maybe Prelude.Natural,
+    -- | Provides configuration information for messages sent periodically to the
+    -- user while the fulfillment Lambda function is running.
+    updateResponse :: Prelude.Maybe FulfillmentUpdateResponseSpecification,
+    -- | Determines whether fulfillment updates are sent to the user. When this
+    -- field is true, updates are sent.
+    --
+    -- If the @active@ field is set to true, the @startResponse@,
+    -- @updateResponse@, and @timeoutInSeconds@ fields are required.
+    active :: Prelude.Bool
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'FulfillmentUpdatesSpecification' 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:
+--
+-- 'startResponse', 'fulfillmentUpdatesSpecification_startResponse' - Provides configuration information for the message sent to users when
+-- the fulfillment Lambda functions starts running.
+--
+-- 'timeoutInSeconds', 'fulfillmentUpdatesSpecification_timeoutInSeconds' - The length of time that the fulfillment Lambda function should run
+-- before it times out.
+--
+-- 'updateResponse', 'fulfillmentUpdatesSpecification_updateResponse' - Provides configuration information for messages sent periodically to the
+-- user while the fulfillment Lambda function is running.
+--
+-- 'active', 'fulfillmentUpdatesSpecification_active' - Determines whether fulfillment updates are sent to the user. When this
+-- field is true, updates are sent.
+--
+-- If the @active@ field is set to true, the @startResponse@,
+-- @updateResponse@, and @timeoutInSeconds@ fields are required.
+newFulfillmentUpdatesSpecification ::
+  -- | 'active'
+  Prelude.Bool ->
+  FulfillmentUpdatesSpecification
+newFulfillmentUpdatesSpecification pActive_ =
+  FulfillmentUpdatesSpecification'
+    { startResponse =
+        Prelude.Nothing,
+      timeoutInSeconds = Prelude.Nothing,
+      updateResponse = Prelude.Nothing,
+      active = pActive_
+    }
+
+-- | Provides configuration information for the message sent to users when
+-- the fulfillment Lambda functions starts running.
+fulfillmentUpdatesSpecification_startResponse :: Lens.Lens' FulfillmentUpdatesSpecification (Prelude.Maybe FulfillmentStartResponseSpecification)
+fulfillmentUpdatesSpecification_startResponse = Lens.lens (\FulfillmentUpdatesSpecification' {startResponse} -> startResponse) (\s@FulfillmentUpdatesSpecification' {} a -> s {startResponse = a} :: FulfillmentUpdatesSpecification)
+
+-- | The length of time that the fulfillment Lambda function should run
+-- before it times out.
+fulfillmentUpdatesSpecification_timeoutInSeconds :: Lens.Lens' FulfillmentUpdatesSpecification (Prelude.Maybe Prelude.Natural)
+fulfillmentUpdatesSpecification_timeoutInSeconds = Lens.lens (\FulfillmentUpdatesSpecification' {timeoutInSeconds} -> timeoutInSeconds) (\s@FulfillmentUpdatesSpecification' {} a -> s {timeoutInSeconds = a} :: FulfillmentUpdatesSpecification)
+
+-- | Provides configuration information for messages sent periodically to the
+-- user while the fulfillment Lambda function is running.
+fulfillmentUpdatesSpecification_updateResponse :: Lens.Lens' FulfillmentUpdatesSpecification (Prelude.Maybe FulfillmentUpdateResponseSpecification)
+fulfillmentUpdatesSpecification_updateResponse = Lens.lens (\FulfillmentUpdatesSpecification' {updateResponse} -> updateResponse) (\s@FulfillmentUpdatesSpecification' {} a -> s {updateResponse = a} :: FulfillmentUpdatesSpecification)
+
+-- | Determines whether fulfillment updates are sent to the user. When this
+-- field is true, updates are sent.
+--
+-- If the @active@ field is set to true, the @startResponse@,
+-- @updateResponse@, and @timeoutInSeconds@ fields are required.
+fulfillmentUpdatesSpecification_active :: Lens.Lens' FulfillmentUpdatesSpecification Prelude.Bool
+fulfillmentUpdatesSpecification_active = Lens.lens (\FulfillmentUpdatesSpecification' {active} -> active) (\s@FulfillmentUpdatesSpecification' {} a -> s {active = a} :: FulfillmentUpdatesSpecification)
+
+instance
+  Data.FromJSON
+    FulfillmentUpdatesSpecification
+  where
+  parseJSON =
+    Data.withObject
+      "FulfillmentUpdatesSpecification"
+      ( \x ->
+          FulfillmentUpdatesSpecification'
+            Prelude.<$> (x Data..:? "startResponse")
+            Prelude.<*> (x Data..:? "timeoutInSeconds")
+            Prelude.<*> (x Data..:? "updateResponse")
+            Prelude.<*> (x Data..: "active")
+      )
+
+instance
+  Prelude.Hashable
+    FulfillmentUpdatesSpecification
+  where
+  hashWithSalt
+    _salt
+    FulfillmentUpdatesSpecification' {..} =
+      _salt
+        `Prelude.hashWithSalt` startResponse
+        `Prelude.hashWithSalt` timeoutInSeconds
+        `Prelude.hashWithSalt` updateResponse
+        `Prelude.hashWithSalt` active
+
+instance
+  Prelude.NFData
+    FulfillmentUpdatesSpecification
+  where
+  rnf FulfillmentUpdatesSpecification' {..} =
+    Prelude.rnf startResponse
+      `Prelude.seq` Prelude.rnf timeoutInSeconds
+      `Prelude.seq` Prelude.rnf updateResponse
+      `Prelude.seq` Prelude.rnf active
+
+instance Data.ToJSON FulfillmentUpdatesSpecification where
+  toJSON FulfillmentUpdatesSpecification' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("startResponse" Data..=) Prelude.<$> startResponse,
+            ("timeoutInSeconds" Data..=)
+              Prelude.<$> timeoutInSeconds,
+            ("updateResponse" Data..=)
+              Prelude.<$> updateResponse,
+            Prelude.Just ("active" Data..= active)
+          ]
+      )
diff --git a/gen/Amazonka/LexV2Models/Types/GrammarSlotTypeSetting.hs b/gen/Amazonka/LexV2Models/Types/GrammarSlotTypeSetting.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/Types/GrammarSlotTypeSetting.hs
@@ -0,0 +1,76 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.LexV2Models.Types.GrammarSlotTypeSetting
+-- 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.LexV2Models.Types.GrammarSlotTypeSetting where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LexV2Models.Types.GrammarSlotTypeSource
+import qualified Amazonka.Prelude as Prelude
+
+-- | Settings requried for a slot type based on a grammar that you provide.
+--
+-- /See:/ 'newGrammarSlotTypeSetting' smart constructor.
+data GrammarSlotTypeSetting = GrammarSlotTypeSetting'
+  { -- | The source of the grammar used to create the slot type.
+    source :: Prelude.Maybe GrammarSlotTypeSource
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GrammarSlotTypeSetting' 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:
+--
+-- 'source', 'grammarSlotTypeSetting_source' - The source of the grammar used to create the slot type.
+newGrammarSlotTypeSetting ::
+  GrammarSlotTypeSetting
+newGrammarSlotTypeSetting =
+  GrammarSlotTypeSetting' {source = Prelude.Nothing}
+
+-- | The source of the grammar used to create the slot type.
+grammarSlotTypeSetting_source :: Lens.Lens' GrammarSlotTypeSetting (Prelude.Maybe GrammarSlotTypeSource)
+grammarSlotTypeSetting_source = Lens.lens (\GrammarSlotTypeSetting' {source} -> source) (\s@GrammarSlotTypeSetting' {} a -> s {source = a} :: GrammarSlotTypeSetting)
+
+instance Data.FromJSON GrammarSlotTypeSetting where
+  parseJSON =
+    Data.withObject
+      "GrammarSlotTypeSetting"
+      ( \x ->
+          GrammarSlotTypeSetting'
+            Prelude.<$> (x Data..:? "source")
+      )
+
+instance Prelude.Hashable GrammarSlotTypeSetting where
+  hashWithSalt _salt GrammarSlotTypeSetting' {..} =
+    _salt `Prelude.hashWithSalt` source
+
+instance Prelude.NFData GrammarSlotTypeSetting where
+  rnf GrammarSlotTypeSetting' {..} = Prelude.rnf source
+
+instance Data.ToJSON GrammarSlotTypeSetting where
+  toJSON GrammarSlotTypeSetting' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [("source" Data..=) Prelude.<$> source]
+      )
diff --git a/gen/Amazonka/LexV2Models/Types/GrammarSlotTypeSource.hs b/gen/Amazonka/LexV2Models/Types/GrammarSlotTypeSource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/Types/GrammarSlotTypeSource.hs
@@ -0,0 +1,114 @@
+{-# 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.LexV2Models.Types.GrammarSlotTypeSource
+-- 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.LexV2Models.Types.GrammarSlotTypeSource 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
+
+-- | Describes the Amazon S3 bucket name and location for the grammar that is
+-- the source for the slot type.
+--
+-- /See:/ 'newGrammarSlotTypeSource' smart constructor.
+data GrammarSlotTypeSource = GrammarSlotTypeSource'
+  { -- | The Amazon KMS key required to decrypt the contents of the grammar, if
+    -- any.
+    kmsKeyArn :: Prelude.Maybe Prelude.Text,
+    -- | The name of the S3 bucket that contains the grammar source.
+    s3BucketName :: Prelude.Text,
+    -- | The path to the grammar in the S3 bucket.
+    s3ObjectKey :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GrammarSlotTypeSource' 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:
+--
+-- 'kmsKeyArn', 'grammarSlotTypeSource_kmsKeyArn' - The Amazon KMS key required to decrypt the contents of the grammar, if
+-- any.
+--
+-- 's3BucketName', 'grammarSlotTypeSource_s3BucketName' - The name of the S3 bucket that contains the grammar source.
+--
+-- 's3ObjectKey', 'grammarSlotTypeSource_s3ObjectKey' - The path to the grammar in the S3 bucket.
+newGrammarSlotTypeSource ::
+  -- | 's3BucketName'
+  Prelude.Text ->
+  -- | 's3ObjectKey'
+  Prelude.Text ->
+  GrammarSlotTypeSource
+newGrammarSlotTypeSource pS3BucketName_ pS3ObjectKey_ =
+  GrammarSlotTypeSource'
+    { kmsKeyArn = Prelude.Nothing,
+      s3BucketName = pS3BucketName_,
+      s3ObjectKey = pS3ObjectKey_
+    }
+
+-- | The Amazon KMS key required to decrypt the contents of the grammar, if
+-- any.
+grammarSlotTypeSource_kmsKeyArn :: Lens.Lens' GrammarSlotTypeSource (Prelude.Maybe Prelude.Text)
+grammarSlotTypeSource_kmsKeyArn = Lens.lens (\GrammarSlotTypeSource' {kmsKeyArn} -> kmsKeyArn) (\s@GrammarSlotTypeSource' {} a -> s {kmsKeyArn = a} :: GrammarSlotTypeSource)
+
+-- | The name of the S3 bucket that contains the grammar source.
+grammarSlotTypeSource_s3BucketName :: Lens.Lens' GrammarSlotTypeSource Prelude.Text
+grammarSlotTypeSource_s3BucketName = Lens.lens (\GrammarSlotTypeSource' {s3BucketName} -> s3BucketName) (\s@GrammarSlotTypeSource' {} a -> s {s3BucketName = a} :: GrammarSlotTypeSource)
+
+-- | The path to the grammar in the S3 bucket.
+grammarSlotTypeSource_s3ObjectKey :: Lens.Lens' GrammarSlotTypeSource Prelude.Text
+grammarSlotTypeSource_s3ObjectKey = Lens.lens (\GrammarSlotTypeSource' {s3ObjectKey} -> s3ObjectKey) (\s@GrammarSlotTypeSource' {} a -> s {s3ObjectKey = a} :: GrammarSlotTypeSource)
+
+instance Data.FromJSON GrammarSlotTypeSource where
+  parseJSON =
+    Data.withObject
+      "GrammarSlotTypeSource"
+      ( \x ->
+          GrammarSlotTypeSource'
+            Prelude.<$> (x Data..:? "kmsKeyArn")
+            Prelude.<*> (x Data..: "s3BucketName")
+            Prelude.<*> (x Data..: "s3ObjectKey")
+      )
+
+instance Prelude.Hashable GrammarSlotTypeSource where
+  hashWithSalt _salt GrammarSlotTypeSource' {..} =
+    _salt
+      `Prelude.hashWithSalt` kmsKeyArn
+      `Prelude.hashWithSalt` s3BucketName
+      `Prelude.hashWithSalt` s3ObjectKey
+
+instance Prelude.NFData GrammarSlotTypeSource where
+  rnf GrammarSlotTypeSource' {..} =
+    Prelude.rnf kmsKeyArn
+      `Prelude.seq` Prelude.rnf s3BucketName
+      `Prelude.seq` Prelude.rnf s3ObjectKey
+
+instance Data.ToJSON GrammarSlotTypeSource where
+  toJSON GrammarSlotTypeSource' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("kmsKeyArn" Data..=) Prelude.<$> kmsKeyArn,
+            Prelude.Just ("s3BucketName" Data..= s3BucketName),
+            Prelude.Just ("s3ObjectKey" Data..= s3ObjectKey)
+          ]
+      )
diff --git a/gen/Amazonka/LexV2Models/Types/ImageResponseCard.hs b/gen/Amazonka/LexV2Models/Types/ImageResponseCard.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/Types/ImageResponseCard.hs
@@ -0,0 +1,144 @@
+{-# 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.LexV2Models.Types.ImageResponseCard
+-- 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.LexV2Models.Types.ImageResponseCard where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LexV2Models.Types.Button
+import qualified Amazonka.Prelude as Prelude
+
+-- | A card that is shown to the user by a messaging platform. You define the
+-- contents of the card, the card is displayed by the platform.
+--
+-- When you use a response card, the response from the user is constrained
+-- to the text associated with a button on the card.
+--
+-- /See:/ 'newImageResponseCard' smart constructor.
+data ImageResponseCard = ImageResponseCard'
+  { -- | A list of buttons that should be displayed on the response card. The
+    -- arrangement of the buttons is determined by the platform that displays
+    -- the button.
+    buttons :: Prelude.Maybe [Button],
+    -- | The URL of an image to display on the response card. The image URL must
+    -- be publicly available so that the platform displaying the response card
+    -- has access to the image.
+    imageUrl :: Prelude.Maybe Prelude.Text,
+    -- | The subtitle to display on the response card. The format of the subtitle
+    -- is determined by the platform displaying the response card.
+    subtitle :: Prelude.Maybe Prelude.Text,
+    -- | The title to display on the response card. The format of the title is
+    -- determined by the platform displaying the response card.
+    title :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ImageResponseCard' 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:
+--
+-- 'buttons', 'imageResponseCard_buttons' - A list of buttons that should be displayed on the response card. The
+-- arrangement of the buttons is determined by the platform that displays
+-- the button.
+--
+-- 'imageUrl', 'imageResponseCard_imageUrl' - The URL of an image to display on the response card. The image URL must
+-- be publicly available so that the platform displaying the response card
+-- has access to the image.
+--
+-- 'subtitle', 'imageResponseCard_subtitle' - The subtitle to display on the response card. The format of the subtitle
+-- is determined by the platform displaying the response card.
+--
+-- 'title', 'imageResponseCard_title' - The title to display on the response card. The format of the title is
+-- determined by the platform displaying the response card.
+newImageResponseCard ::
+  -- | 'title'
+  Prelude.Text ->
+  ImageResponseCard
+newImageResponseCard pTitle_ =
+  ImageResponseCard'
+    { buttons = Prelude.Nothing,
+      imageUrl = Prelude.Nothing,
+      subtitle = Prelude.Nothing,
+      title = pTitle_
+    }
+
+-- | A list of buttons that should be displayed on the response card. The
+-- arrangement of the buttons is determined by the platform that displays
+-- the button.
+imageResponseCard_buttons :: Lens.Lens' ImageResponseCard (Prelude.Maybe [Button])
+imageResponseCard_buttons = Lens.lens (\ImageResponseCard' {buttons} -> buttons) (\s@ImageResponseCard' {} a -> s {buttons = a} :: ImageResponseCard) Prelude.. Lens.mapping Lens.coerced
+
+-- | The URL of an image to display on the response card. The image URL must
+-- be publicly available so that the platform displaying the response card
+-- has access to the image.
+imageResponseCard_imageUrl :: Lens.Lens' ImageResponseCard (Prelude.Maybe Prelude.Text)
+imageResponseCard_imageUrl = Lens.lens (\ImageResponseCard' {imageUrl} -> imageUrl) (\s@ImageResponseCard' {} a -> s {imageUrl = a} :: ImageResponseCard)
+
+-- | The subtitle to display on the response card. The format of the subtitle
+-- is determined by the platform displaying the response card.
+imageResponseCard_subtitle :: Lens.Lens' ImageResponseCard (Prelude.Maybe Prelude.Text)
+imageResponseCard_subtitle = Lens.lens (\ImageResponseCard' {subtitle} -> subtitle) (\s@ImageResponseCard' {} a -> s {subtitle = a} :: ImageResponseCard)
+
+-- | The title to display on the response card. The format of the title is
+-- determined by the platform displaying the response card.
+imageResponseCard_title :: Lens.Lens' ImageResponseCard Prelude.Text
+imageResponseCard_title = Lens.lens (\ImageResponseCard' {title} -> title) (\s@ImageResponseCard' {} a -> s {title = a} :: ImageResponseCard)
+
+instance Data.FromJSON ImageResponseCard where
+  parseJSON =
+    Data.withObject
+      "ImageResponseCard"
+      ( \x ->
+          ImageResponseCard'
+            Prelude.<$> (x Data..:? "buttons" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "imageUrl")
+            Prelude.<*> (x Data..:? "subtitle")
+            Prelude.<*> (x Data..: "title")
+      )
+
+instance Prelude.Hashable ImageResponseCard where
+  hashWithSalt _salt ImageResponseCard' {..} =
+    _salt
+      `Prelude.hashWithSalt` buttons
+      `Prelude.hashWithSalt` imageUrl
+      `Prelude.hashWithSalt` subtitle
+      `Prelude.hashWithSalt` title
+
+instance Prelude.NFData ImageResponseCard where
+  rnf ImageResponseCard' {..} =
+    Prelude.rnf buttons
+      `Prelude.seq` Prelude.rnf imageUrl
+      `Prelude.seq` Prelude.rnf subtitle
+      `Prelude.seq` Prelude.rnf title
+
+instance Data.ToJSON ImageResponseCard where
+  toJSON ImageResponseCard' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("buttons" Data..=) Prelude.<$> buttons,
+            ("imageUrl" Data..=) Prelude.<$> imageUrl,
+            ("subtitle" Data..=) Prelude.<$> subtitle,
+            Prelude.Just ("title" Data..= title)
+          ]
+      )
diff --git a/gen/Amazonka/LexV2Models/Types/ImportExportFileFormat.hs b/gen/Amazonka/LexV2Models/Types/ImportExportFileFormat.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/Types/ImportExportFileFormat.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.LexV2Models.Types.ImportExportFileFormat
+-- 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.LexV2Models.Types.ImportExportFileFormat
+  ( ImportExportFileFormat
+      ( ..,
+        ImportExportFileFormat_LexJson,
+        ImportExportFileFormat_TSV
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype ImportExportFileFormat = ImportExportFileFormat'
+  { fromImportExportFileFormat ::
+      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 ImportExportFileFormat_LexJson :: ImportExportFileFormat
+pattern ImportExportFileFormat_LexJson = ImportExportFileFormat' "LexJson"
+
+pattern ImportExportFileFormat_TSV :: ImportExportFileFormat
+pattern ImportExportFileFormat_TSV = ImportExportFileFormat' "TSV"
+
+{-# COMPLETE
+  ImportExportFileFormat_LexJson,
+  ImportExportFileFormat_TSV,
+  ImportExportFileFormat'
+  #-}
diff --git a/gen/Amazonka/LexV2Models/Types/ImportFilter.hs b/gen/Amazonka/LexV2Models/Types/ImportFilter.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/Types/ImportFilter.hs
@@ -0,0 +1,117 @@
+{-# 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.LexV2Models.Types.ImportFilter
+-- 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.LexV2Models.Types.ImportFilter where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LexV2Models.Types.ImportFilterName
+import Amazonka.LexV2Models.Types.ImportFilterOperator
+import qualified Amazonka.Prelude as Prelude
+
+-- | Filters the response from the
+-- <https://docs.aws.amazon.com/lexv2/latest/dg/API_ListImports.html ListImports>
+-- operation.
+--
+-- /See:/ 'newImportFilter' smart constructor.
+data ImportFilter = ImportFilter'
+  { -- | The name of the field to use for filtering.
+    name :: ImportFilterName,
+    -- | The values to use to filter the response. The values must be @Bot@,
+    -- @BotLocale@, or @CustomVocabulary@.
+    values :: Prelude.NonEmpty Prelude.Text,
+    -- | The operator to use for the filter. Specify EQ when the @ListImports@
+    -- operation should return only resource types that equal the specified
+    -- value. Specify CO when the @ListImports@ operation should return
+    -- resource types that contain the specified value.
+    operator :: ImportFilterOperator
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ImportFilter' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'name', 'importFilter_name' - The name of the field to use for filtering.
+--
+-- 'values', 'importFilter_values' - The values to use to filter the response. The values must be @Bot@,
+-- @BotLocale@, or @CustomVocabulary@.
+--
+-- 'operator', 'importFilter_operator' - The operator to use for the filter. Specify EQ when the @ListImports@
+-- operation should return only resource types that equal the specified
+-- value. Specify CO when the @ListImports@ operation should return
+-- resource types that contain the specified value.
+newImportFilter ::
+  -- | 'name'
+  ImportFilterName ->
+  -- | 'values'
+  Prelude.NonEmpty Prelude.Text ->
+  -- | 'operator'
+  ImportFilterOperator ->
+  ImportFilter
+newImportFilter pName_ pValues_ pOperator_ =
+  ImportFilter'
+    { name = pName_,
+      values = Lens.coerced Lens.# pValues_,
+      operator = pOperator_
+    }
+
+-- | The name of the field to use for filtering.
+importFilter_name :: Lens.Lens' ImportFilter ImportFilterName
+importFilter_name = Lens.lens (\ImportFilter' {name} -> name) (\s@ImportFilter' {} a -> s {name = a} :: ImportFilter)
+
+-- | The values to use to filter the response. The values must be @Bot@,
+-- @BotLocale@, or @CustomVocabulary@.
+importFilter_values :: Lens.Lens' ImportFilter (Prelude.NonEmpty Prelude.Text)
+importFilter_values = Lens.lens (\ImportFilter' {values} -> values) (\s@ImportFilter' {} a -> s {values = a} :: ImportFilter) Prelude.. Lens.coerced
+
+-- | The operator to use for the filter. Specify EQ when the @ListImports@
+-- operation should return only resource types that equal the specified
+-- value. Specify CO when the @ListImports@ operation should return
+-- resource types that contain the specified value.
+importFilter_operator :: Lens.Lens' ImportFilter ImportFilterOperator
+importFilter_operator = Lens.lens (\ImportFilter' {operator} -> operator) (\s@ImportFilter' {} a -> s {operator = a} :: ImportFilter)
+
+instance Prelude.Hashable ImportFilter where
+  hashWithSalt _salt ImportFilter' {..} =
+    _salt
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` values
+      `Prelude.hashWithSalt` operator
+
+instance Prelude.NFData ImportFilter where
+  rnf ImportFilter' {..} =
+    Prelude.rnf name
+      `Prelude.seq` Prelude.rnf values
+      `Prelude.seq` Prelude.rnf operator
+
+instance Data.ToJSON ImportFilter where
+  toJSON ImportFilter' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("name" Data..= name),
+            Prelude.Just ("values" Data..= values),
+            Prelude.Just ("operator" Data..= operator)
+          ]
+      )
diff --git a/gen/Amazonka/LexV2Models/Types/ImportFilterName.hs b/gen/Amazonka/LexV2Models/Types/ImportFilterName.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/Types/ImportFilterName.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.LexV2Models.Types.ImportFilterName
+-- 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.LexV2Models.Types.ImportFilterName
+  ( ImportFilterName
+      ( ..,
+        ImportFilterName_ImportResourceType
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype ImportFilterName = ImportFilterName'
+  { fromImportFilterName ::
+      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 ImportFilterName_ImportResourceType :: ImportFilterName
+pattern ImportFilterName_ImportResourceType = ImportFilterName' "ImportResourceType"
+
+{-# COMPLETE
+  ImportFilterName_ImportResourceType,
+  ImportFilterName'
+  #-}
diff --git a/gen/Amazonka/LexV2Models/Types/ImportFilterOperator.hs b/gen/Amazonka/LexV2Models/Types/ImportFilterOperator.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/Types/ImportFilterOperator.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.LexV2Models.Types.ImportFilterOperator
+-- 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.LexV2Models.Types.ImportFilterOperator
+  ( ImportFilterOperator
+      ( ..,
+        ImportFilterOperator_CO,
+        ImportFilterOperator_EQ
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype ImportFilterOperator = ImportFilterOperator'
+  { fromImportFilterOperator ::
+      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 ImportFilterOperator_CO :: ImportFilterOperator
+pattern ImportFilterOperator_CO = ImportFilterOperator' "CO"
+
+pattern ImportFilterOperator_EQ :: ImportFilterOperator
+pattern ImportFilterOperator_EQ = ImportFilterOperator' "EQ"
+
+{-# COMPLETE
+  ImportFilterOperator_CO,
+  ImportFilterOperator_EQ,
+  ImportFilterOperator'
+  #-}
diff --git a/gen/Amazonka/LexV2Models/Types/ImportResourceSpecification.hs b/gen/Amazonka/LexV2Models/Types/ImportResourceSpecification.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/Types/ImportResourceSpecification.hs
@@ -0,0 +1,115 @@
+{-# 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.LexV2Models.Types.ImportResourceSpecification
+-- 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.LexV2Models.Types.ImportResourceSpecification where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LexV2Models.Types.BotImportSpecification
+import Amazonka.LexV2Models.Types.BotLocaleImportSpecification
+import Amazonka.LexV2Models.Types.CustomVocabularyImportSpecification
+import qualified Amazonka.Prelude as Prelude
+
+-- | Provides information about the bot or bot locale that you want to
+-- import. You can specify the @botImportSpecification@ or the
+-- @botLocaleImportSpecification@, but not both.
+--
+-- /See:/ 'newImportResourceSpecification' smart constructor.
+data ImportResourceSpecification = ImportResourceSpecification'
+  { -- | Parameters for importing a bot.
+    botImportSpecification :: Prelude.Maybe BotImportSpecification,
+    -- | Parameters for importing a bot locale.
+    botLocaleImportSpecification :: Prelude.Maybe BotLocaleImportSpecification,
+    customVocabularyImportSpecification :: Prelude.Maybe CustomVocabularyImportSpecification
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ImportResourceSpecification' 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:
+--
+-- 'botImportSpecification', 'importResourceSpecification_botImportSpecification' - Parameters for importing a bot.
+--
+-- 'botLocaleImportSpecification', 'importResourceSpecification_botLocaleImportSpecification' - Parameters for importing a bot locale.
+--
+-- 'customVocabularyImportSpecification', 'importResourceSpecification_customVocabularyImportSpecification' - Undocumented member.
+newImportResourceSpecification ::
+  ImportResourceSpecification
+newImportResourceSpecification =
+  ImportResourceSpecification'
+    { botImportSpecification =
+        Prelude.Nothing,
+      botLocaleImportSpecification = Prelude.Nothing,
+      customVocabularyImportSpecification =
+        Prelude.Nothing
+    }
+
+-- | Parameters for importing a bot.
+importResourceSpecification_botImportSpecification :: Lens.Lens' ImportResourceSpecification (Prelude.Maybe BotImportSpecification)
+importResourceSpecification_botImportSpecification = Lens.lens (\ImportResourceSpecification' {botImportSpecification} -> botImportSpecification) (\s@ImportResourceSpecification' {} a -> s {botImportSpecification = a} :: ImportResourceSpecification)
+
+-- | Parameters for importing a bot locale.
+importResourceSpecification_botLocaleImportSpecification :: Lens.Lens' ImportResourceSpecification (Prelude.Maybe BotLocaleImportSpecification)
+importResourceSpecification_botLocaleImportSpecification = Lens.lens (\ImportResourceSpecification' {botLocaleImportSpecification} -> botLocaleImportSpecification) (\s@ImportResourceSpecification' {} a -> s {botLocaleImportSpecification = a} :: ImportResourceSpecification)
+
+-- | Undocumented member.
+importResourceSpecification_customVocabularyImportSpecification :: Lens.Lens' ImportResourceSpecification (Prelude.Maybe CustomVocabularyImportSpecification)
+importResourceSpecification_customVocabularyImportSpecification = Lens.lens (\ImportResourceSpecification' {customVocabularyImportSpecification} -> customVocabularyImportSpecification) (\s@ImportResourceSpecification' {} a -> s {customVocabularyImportSpecification = a} :: ImportResourceSpecification)
+
+instance Data.FromJSON ImportResourceSpecification where
+  parseJSON =
+    Data.withObject
+      "ImportResourceSpecification"
+      ( \x ->
+          ImportResourceSpecification'
+            Prelude.<$> (x Data..:? "botImportSpecification")
+            Prelude.<*> (x Data..:? "botLocaleImportSpecification")
+            Prelude.<*> (x Data..:? "customVocabularyImportSpecification")
+      )
+
+instance Prelude.Hashable ImportResourceSpecification where
+  hashWithSalt _salt ImportResourceSpecification' {..} =
+    _salt
+      `Prelude.hashWithSalt` botImportSpecification
+      `Prelude.hashWithSalt` botLocaleImportSpecification
+      `Prelude.hashWithSalt` customVocabularyImportSpecification
+
+instance Prelude.NFData ImportResourceSpecification where
+  rnf ImportResourceSpecification' {..} =
+    Prelude.rnf botImportSpecification
+      `Prelude.seq` Prelude.rnf botLocaleImportSpecification
+      `Prelude.seq` Prelude.rnf customVocabularyImportSpecification
+
+instance Data.ToJSON ImportResourceSpecification where
+  toJSON ImportResourceSpecification' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("botImportSpecification" Data..=)
+              Prelude.<$> botImportSpecification,
+            ("botLocaleImportSpecification" Data..=)
+              Prelude.<$> botLocaleImportSpecification,
+            ("customVocabularyImportSpecification" Data..=)
+              Prelude.<$> customVocabularyImportSpecification
+          ]
+      )
diff --git a/gen/Amazonka/LexV2Models/Types/ImportResourceType.hs b/gen/Amazonka/LexV2Models/Types/ImportResourceType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/Types/ImportResourceType.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.LexV2Models.Types.ImportResourceType
+-- 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.LexV2Models.Types.ImportResourceType
+  ( ImportResourceType
+      ( ..,
+        ImportResourceType_Bot,
+        ImportResourceType_BotLocale,
+        ImportResourceType_CustomVocabulary
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype ImportResourceType = ImportResourceType'
+  { fromImportResourceType ::
+      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 ImportResourceType_Bot :: ImportResourceType
+pattern ImportResourceType_Bot = ImportResourceType' "Bot"
+
+pattern ImportResourceType_BotLocale :: ImportResourceType
+pattern ImportResourceType_BotLocale = ImportResourceType' "BotLocale"
+
+pattern ImportResourceType_CustomVocabulary :: ImportResourceType
+pattern ImportResourceType_CustomVocabulary = ImportResourceType' "CustomVocabulary"
+
+{-# COMPLETE
+  ImportResourceType_Bot,
+  ImportResourceType_BotLocale,
+  ImportResourceType_CustomVocabulary,
+  ImportResourceType'
+  #-}
diff --git a/gen/Amazonka/LexV2Models/Types/ImportSortAttribute.hs b/gen/Amazonka/LexV2Models/Types/ImportSortAttribute.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/Types/ImportSortAttribute.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.LexV2Models.Types.ImportSortAttribute
+-- 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.LexV2Models.Types.ImportSortAttribute
+  ( ImportSortAttribute
+      ( ..,
+        ImportSortAttribute_LastUpdatedDateTime
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype ImportSortAttribute = ImportSortAttribute'
+  { fromImportSortAttribute ::
+      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 ImportSortAttribute_LastUpdatedDateTime :: ImportSortAttribute
+pattern ImportSortAttribute_LastUpdatedDateTime = ImportSortAttribute' "LastUpdatedDateTime"
+
+{-# COMPLETE
+  ImportSortAttribute_LastUpdatedDateTime,
+  ImportSortAttribute'
+  #-}
diff --git a/gen/Amazonka/LexV2Models/Types/ImportSortBy.hs b/gen/Amazonka/LexV2Models/Types/ImportSortBy.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/Types/ImportSortBy.hs
@@ -0,0 +1,89 @@
+{-# 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.LexV2Models.Types.ImportSortBy
+-- 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.LexV2Models.Types.ImportSortBy where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LexV2Models.Types.ImportSortAttribute
+import Amazonka.LexV2Models.Types.SortOrder
+import qualified Amazonka.Prelude as Prelude
+
+-- | Provides information for sorting a list of imports.
+--
+-- /See:/ 'newImportSortBy' smart constructor.
+data ImportSortBy = ImportSortBy'
+  { -- | The export field to use for sorting.
+    attribute :: ImportSortAttribute,
+    -- | The order to sort the list.
+    order :: SortOrder
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ImportSortBy' 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:
+--
+-- 'attribute', 'importSortBy_attribute' - The export field to use for sorting.
+--
+-- 'order', 'importSortBy_order' - The order to sort the list.
+newImportSortBy ::
+  -- | 'attribute'
+  ImportSortAttribute ->
+  -- | 'order'
+  SortOrder ->
+  ImportSortBy
+newImportSortBy pAttribute_ pOrder_ =
+  ImportSortBy'
+    { attribute = pAttribute_,
+      order = pOrder_
+    }
+
+-- | The export field to use for sorting.
+importSortBy_attribute :: Lens.Lens' ImportSortBy ImportSortAttribute
+importSortBy_attribute = Lens.lens (\ImportSortBy' {attribute} -> attribute) (\s@ImportSortBy' {} a -> s {attribute = a} :: ImportSortBy)
+
+-- | The order to sort the list.
+importSortBy_order :: Lens.Lens' ImportSortBy SortOrder
+importSortBy_order = Lens.lens (\ImportSortBy' {order} -> order) (\s@ImportSortBy' {} a -> s {order = a} :: ImportSortBy)
+
+instance Prelude.Hashable ImportSortBy where
+  hashWithSalt _salt ImportSortBy' {..} =
+    _salt
+      `Prelude.hashWithSalt` attribute
+      `Prelude.hashWithSalt` order
+
+instance Prelude.NFData ImportSortBy where
+  rnf ImportSortBy' {..} =
+    Prelude.rnf attribute
+      `Prelude.seq` Prelude.rnf order
+
+instance Data.ToJSON ImportSortBy where
+  toJSON ImportSortBy' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("attribute" Data..= attribute),
+            Prelude.Just ("order" Data..= order)
+          ]
+      )
diff --git a/gen/Amazonka/LexV2Models/Types/ImportStatus.hs b/gen/Amazonka/LexV2Models/Types/ImportStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/Types/ImportStatus.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.LexV2Models.Types.ImportStatus
+-- 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.LexV2Models.Types.ImportStatus
+  ( ImportStatus
+      ( ..,
+        ImportStatus_Completed,
+        ImportStatus_Deleting,
+        ImportStatus_Failed,
+        ImportStatus_InProgress
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype ImportStatus = ImportStatus'
+  { fromImportStatus ::
+      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 ImportStatus_Completed :: ImportStatus
+pattern ImportStatus_Completed = ImportStatus' "Completed"
+
+pattern ImportStatus_Deleting :: ImportStatus
+pattern ImportStatus_Deleting = ImportStatus' "Deleting"
+
+pattern ImportStatus_Failed :: ImportStatus
+pattern ImportStatus_Failed = ImportStatus' "Failed"
+
+pattern ImportStatus_InProgress :: ImportStatus
+pattern ImportStatus_InProgress = ImportStatus' "InProgress"
+
+{-# COMPLETE
+  ImportStatus_Completed,
+  ImportStatus_Deleting,
+  ImportStatus_Failed,
+  ImportStatus_InProgress,
+  ImportStatus'
+  #-}
diff --git a/gen/Amazonka/LexV2Models/Types/ImportSummary.hs b/gen/Amazonka/LexV2Models/Types/ImportSummary.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/Types/ImportSummary.hs
@@ -0,0 +1,165 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.LexV2Models.Types.ImportSummary
+-- 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.LexV2Models.Types.ImportSummary where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LexV2Models.Types.ImportResourceType
+import Amazonka.LexV2Models.Types.ImportStatus
+import Amazonka.LexV2Models.Types.MergeStrategy
+import qualified Amazonka.Prelude as Prelude
+
+-- | Provides summary information about an import in an import list.
+--
+-- /See:/ 'newImportSummary' smart constructor.
+data ImportSummary = ImportSummary'
+  { -- | The date and time that the import was created.
+    creationDateTime :: Prelude.Maybe Data.POSIX,
+    -- | The unique identifier that Amazon Lex assigned to the import.
+    importId :: Prelude.Maybe Prelude.Text,
+    -- | The status of the resource. When the status is @Completed@ the resource
+    -- is ready to build.
+    importStatus :: Prelude.Maybe ImportStatus,
+    -- | The unique identifier that Amazon Lex assigned to the imported resource.
+    importedResourceId :: Prelude.Maybe Prelude.Text,
+    -- | The name that you gave the imported resource.
+    importedResourceName :: Prelude.Maybe Prelude.Text,
+    -- | The type of resource that was imported.
+    importedResourceType :: Prelude.Maybe ImportResourceType,
+    -- | The date and time that the import was last updated.
+    lastUpdatedDateTime :: Prelude.Maybe Data.POSIX,
+    -- | The strategy used to merge existing bot or bot locale definitions with
+    -- the imported definition.
+    mergeStrategy :: Prelude.Maybe MergeStrategy
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ImportSummary' 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:
+--
+-- 'creationDateTime', 'importSummary_creationDateTime' - The date and time that the import was created.
+--
+-- 'importId', 'importSummary_importId' - The unique identifier that Amazon Lex assigned to the import.
+--
+-- 'importStatus', 'importSummary_importStatus' - The status of the resource. When the status is @Completed@ the resource
+-- is ready to build.
+--
+-- 'importedResourceId', 'importSummary_importedResourceId' - The unique identifier that Amazon Lex assigned to the imported resource.
+--
+-- 'importedResourceName', 'importSummary_importedResourceName' - The name that you gave the imported resource.
+--
+-- 'importedResourceType', 'importSummary_importedResourceType' - The type of resource that was imported.
+--
+-- 'lastUpdatedDateTime', 'importSummary_lastUpdatedDateTime' - The date and time that the import was last updated.
+--
+-- 'mergeStrategy', 'importSummary_mergeStrategy' - The strategy used to merge existing bot or bot locale definitions with
+-- the imported definition.
+newImportSummary ::
+  ImportSummary
+newImportSummary =
+  ImportSummary'
+    { creationDateTime = Prelude.Nothing,
+      importId = Prelude.Nothing,
+      importStatus = Prelude.Nothing,
+      importedResourceId = Prelude.Nothing,
+      importedResourceName = Prelude.Nothing,
+      importedResourceType = Prelude.Nothing,
+      lastUpdatedDateTime = Prelude.Nothing,
+      mergeStrategy = Prelude.Nothing
+    }
+
+-- | The date and time that the import was created.
+importSummary_creationDateTime :: Lens.Lens' ImportSummary (Prelude.Maybe Prelude.UTCTime)
+importSummary_creationDateTime = Lens.lens (\ImportSummary' {creationDateTime} -> creationDateTime) (\s@ImportSummary' {} a -> s {creationDateTime = a} :: ImportSummary) Prelude.. Lens.mapping Data._Time
+
+-- | The unique identifier that Amazon Lex assigned to the import.
+importSummary_importId :: Lens.Lens' ImportSummary (Prelude.Maybe Prelude.Text)
+importSummary_importId = Lens.lens (\ImportSummary' {importId} -> importId) (\s@ImportSummary' {} a -> s {importId = a} :: ImportSummary)
+
+-- | The status of the resource. When the status is @Completed@ the resource
+-- is ready to build.
+importSummary_importStatus :: Lens.Lens' ImportSummary (Prelude.Maybe ImportStatus)
+importSummary_importStatus = Lens.lens (\ImportSummary' {importStatus} -> importStatus) (\s@ImportSummary' {} a -> s {importStatus = a} :: ImportSummary)
+
+-- | The unique identifier that Amazon Lex assigned to the imported resource.
+importSummary_importedResourceId :: Lens.Lens' ImportSummary (Prelude.Maybe Prelude.Text)
+importSummary_importedResourceId = Lens.lens (\ImportSummary' {importedResourceId} -> importedResourceId) (\s@ImportSummary' {} a -> s {importedResourceId = a} :: ImportSummary)
+
+-- | The name that you gave the imported resource.
+importSummary_importedResourceName :: Lens.Lens' ImportSummary (Prelude.Maybe Prelude.Text)
+importSummary_importedResourceName = Lens.lens (\ImportSummary' {importedResourceName} -> importedResourceName) (\s@ImportSummary' {} a -> s {importedResourceName = a} :: ImportSummary)
+
+-- | The type of resource that was imported.
+importSummary_importedResourceType :: Lens.Lens' ImportSummary (Prelude.Maybe ImportResourceType)
+importSummary_importedResourceType = Lens.lens (\ImportSummary' {importedResourceType} -> importedResourceType) (\s@ImportSummary' {} a -> s {importedResourceType = a} :: ImportSummary)
+
+-- | The date and time that the import was last updated.
+importSummary_lastUpdatedDateTime :: Lens.Lens' ImportSummary (Prelude.Maybe Prelude.UTCTime)
+importSummary_lastUpdatedDateTime = Lens.lens (\ImportSummary' {lastUpdatedDateTime} -> lastUpdatedDateTime) (\s@ImportSummary' {} a -> s {lastUpdatedDateTime = a} :: ImportSummary) Prelude.. Lens.mapping Data._Time
+
+-- | The strategy used to merge existing bot or bot locale definitions with
+-- the imported definition.
+importSummary_mergeStrategy :: Lens.Lens' ImportSummary (Prelude.Maybe MergeStrategy)
+importSummary_mergeStrategy = Lens.lens (\ImportSummary' {mergeStrategy} -> mergeStrategy) (\s@ImportSummary' {} a -> s {mergeStrategy = a} :: ImportSummary)
+
+instance Data.FromJSON ImportSummary where
+  parseJSON =
+    Data.withObject
+      "ImportSummary"
+      ( \x ->
+          ImportSummary'
+            Prelude.<$> (x Data..:? "creationDateTime")
+            Prelude.<*> (x Data..:? "importId")
+            Prelude.<*> (x Data..:? "importStatus")
+            Prelude.<*> (x Data..:? "importedResourceId")
+            Prelude.<*> (x Data..:? "importedResourceName")
+            Prelude.<*> (x Data..:? "importedResourceType")
+            Prelude.<*> (x Data..:? "lastUpdatedDateTime")
+            Prelude.<*> (x Data..:? "mergeStrategy")
+      )
+
+instance Prelude.Hashable ImportSummary where
+  hashWithSalt _salt ImportSummary' {..} =
+    _salt
+      `Prelude.hashWithSalt` creationDateTime
+      `Prelude.hashWithSalt` importId
+      `Prelude.hashWithSalt` importStatus
+      `Prelude.hashWithSalt` importedResourceId
+      `Prelude.hashWithSalt` importedResourceName
+      `Prelude.hashWithSalt` importedResourceType
+      `Prelude.hashWithSalt` lastUpdatedDateTime
+      `Prelude.hashWithSalt` mergeStrategy
+
+instance Prelude.NFData ImportSummary where
+  rnf ImportSummary' {..} =
+    Prelude.rnf creationDateTime
+      `Prelude.seq` Prelude.rnf importId
+      `Prelude.seq` Prelude.rnf importStatus
+      `Prelude.seq` Prelude.rnf importedResourceId
+      `Prelude.seq` Prelude.rnf importedResourceName
+      `Prelude.seq` Prelude.rnf importedResourceType
+      `Prelude.seq` Prelude.rnf lastUpdatedDateTime
+      `Prelude.seq` Prelude.rnf mergeStrategy
diff --git a/gen/Amazonka/LexV2Models/Types/InitialResponseSetting.hs b/gen/Amazonka/LexV2Models/Types/InitialResponseSetting.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/Types/InitialResponseSetting.hs
@@ -0,0 +1,122 @@
+{-# 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.LexV2Models.Types.InitialResponseSetting
+-- 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.LexV2Models.Types.InitialResponseSetting where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LexV2Models.Types.ConditionalSpecification
+import Amazonka.LexV2Models.Types.DialogCodeHookInvocationSetting
+import Amazonka.LexV2Models.Types.DialogState
+import Amazonka.LexV2Models.Types.ResponseSpecification
+import qualified Amazonka.Prelude as Prelude
+
+-- | Configuration setting for a response sent to the user before Amazon Lex
+-- starts eliciting slots.
+--
+-- /See:/ 'newInitialResponseSetting' smart constructor.
+data InitialResponseSetting = InitialResponseSetting'
+  { codeHook :: Prelude.Maybe DialogCodeHookInvocationSetting,
+    conditional :: Prelude.Maybe ConditionalSpecification,
+    initialResponse :: Prelude.Maybe ResponseSpecification,
+    -- | The next step in the conversation.
+    nextStep :: Prelude.Maybe DialogState
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'InitialResponseSetting' 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:
+--
+-- 'codeHook', 'initialResponseSetting_codeHook' - Undocumented member.
+--
+-- 'conditional', 'initialResponseSetting_conditional' - Undocumented member.
+--
+-- 'initialResponse', 'initialResponseSetting_initialResponse' - Undocumented member.
+--
+-- 'nextStep', 'initialResponseSetting_nextStep' - The next step in the conversation.
+newInitialResponseSetting ::
+  InitialResponseSetting
+newInitialResponseSetting =
+  InitialResponseSetting'
+    { codeHook = Prelude.Nothing,
+      conditional = Prelude.Nothing,
+      initialResponse = Prelude.Nothing,
+      nextStep = Prelude.Nothing
+    }
+
+-- | Undocumented member.
+initialResponseSetting_codeHook :: Lens.Lens' InitialResponseSetting (Prelude.Maybe DialogCodeHookInvocationSetting)
+initialResponseSetting_codeHook = Lens.lens (\InitialResponseSetting' {codeHook} -> codeHook) (\s@InitialResponseSetting' {} a -> s {codeHook = a} :: InitialResponseSetting)
+
+-- | Undocumented member.
+initialResponseSetting_conditional :: Lens.Lens' InitialResponseSetting (Prelude.Maybe ConditionalSpecification)
+initialResponseSetting_conditional = Lens.lens (\InitialResponseSetting' {conditional} -> conditional) (\s@InitialResponseSetting' {} a -> s {conditional = a} :: InitialResponseSetting)
+
+-- | Undocumented member.
+initialResponseSetting_initialResponse :: Lens.Lens' InitialResponseSetting (Prelude.Maybe ResponseSpecification)
+initialResponseSetting_initialResponse = Lens.lens (\InitialResponseSetting' {initialResponse} -> initialResponse) (\s@InitialResponseSetting' {} a -> s {initialResponse = a} :: InitialResponseSetting)
+
+-- | The next step in the conversation.
+initialResponseSetting_nextStep :: Lens.Lens' InitialResponseSetting (Prelude.Maybe DialogState)
+initialResponseSetting_nextStep = Lens.lens (\InitialResponseSetting' {nextStep} -> nextStep) (\s@InitialResponseSetting' {} a -> s {nextStep = a} :: InitialResponseSetting)
+
+instance Data.FromJSON InitialResponseSetting where
+  parseJSON =
+    Data.withObject
+      "InitialResponseSetting"
+      ( \x ->
+          InitialResponseSetting'
+            Prelude.<$> (x Data..:? "codeHook")
+            Prelude.<*> (x Data..:? "conditional")
+            Prelude.<*> (x Data..:? "initialResponse")
+            Prelude.<*> (x Data..:? "nextStep")
+      )
+
+instance Prelude.Hashable InitialResponseSetting where
+  hashWithSalt _salt InitialResponseSetting' {..} =
+    _salt
+      `Prelude.hashWithSalt` codeHook
+      `Prelude.hashWithSalt` conditional
+      `Prelude.hashWithSalt` initialResponse
+      `Prelude.hashWithSalt` nextStep
+
+instance Prelude.NFData InitialResponseSetting where
+  rnf InitialResponseSetting' {..} =
+    Prelude.rnf codeHook
+      `Prelude.seq` Prelude.rnf conditional
+      `Prelude.seq` Prelude.rnf initialResponse
+      `Prelude.seq` Prelude.rnf nextStep
+
+instance Data.ToJSON InitialResponseSetting where
+  toJSON InitialResponseSetting' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("codeHook" Data..=) Prelude.<$> codeHook,
+            ("conditional" Data..=) Prelude.<$> conditional,
+            ("initialResponse" Data..=)
+              Prelude.<$> initialResponse,
+            ("nextStep" Data..=) Prelude.<$> nextStep
+          ]
+      )
diff --git a/gen/Amazonka/LexV2Models/Types/InputContext.hs b/gen/Amazonka/LexV2Models/Types/InputContext.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/Types/InputContext.hs
@@ -0,0 +1,74 @@
+{-# 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.LexV2Models.Types.InputContext
+-- 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.LexV2Models.Types.InputContext 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 name of a context that must be active for an intent to be selected
+-- by Amazon Lex.
+--
+-- /See:/ 'newInputContext' smart constructor.
+data InputContext = InputContext'
+  { -- | The name of the context.
+    name :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'InputContext' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'name', 'inputContext_name' - The name of the context.
+newInputContext ::
+  -- | 'name'
+  Prelude.Text ->
+  InputContext
+newInputContext pName_ = InputContext' {name = pName_}
+
+-- | The name of the context.
+inputContext_name :: Lens.Lens' InputContext Prelude.Text
+inputContext_name = Lens.lens (\InputContext' {name} -> name) (\s@InputContext' {} a -> s {name = a} :: InputContext)
+
+instance Data.FromJSON InputContext where
+  parseJSON =
+    Data.withObject
+      "InputContext"
+      (\x -> InputContext' Prelude.<$> (x Data..: "name"))
+
+instance Prelude.Hashable InputContext where
+  hashWithSalt _salt InputContext' {..} =
+    _salt `Prelude.hashWithSalt` name
+
+instance Prelude.NFData InputContext where
+  rnf InputContext' {..} = Prelude.rnf name
+
+instance Data.ToJSON InputContext where
+  toJSON InputContext' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("name" Data..= name)]
+      )
diff --git a/gen/Amazonka/LexV2Models/Types/IntentClosingSetting.hs b/gen/Amazonka/LexV2Models/Types/IntentClosingSetting.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/Types/IntentClosingSetting.hs
@@ -0,0 +1,142 @@
+{-# 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.LexV2Models.Types.IntentClosingSetting
+-- 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.LexV2Models.Types.IntentClosingSetting where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LexV2Models.Types.ConditionalSpecification
+import Amazonka.LexV2Models.Types.DialogState
+import Amazonka.LexV2Models.Types.ResponseSpecification
+import qualified Amazonka.Prelude as Prelude
+
+-- | Provides a statement the Amazon Lex conveys to the user when the intent
+-- is successfully fulfilled.
+--
+-- /See:/ 'newIntentClosingSetting' smart constructor.
+data IntentClosingSetting = IntentClosingSetting'
+  { -- | Specifies whether an intent\'s closing response is used. When this field
+    -- is false, the closing response isn\'t sent to the user. If the @active@
+    -- field isn\'t specified, the default is true.
+    active :: Prelude.Maybe Prelude.Bool,
+    -- | The response that Amazon Lex sends to the user when the intent is
+    -- complete.
+    closingResponse :: Prelude.Maybe ResponseSpecification,
+    -- | A list of conditional branches associated with the intent\'s closing
+    -- response. These branches are executed when the @nextStep@ attribute is
+    -- set to @EvalutateConditional@.
+    conditional :: Prelude.Maybe ConditionalSpecification,
+    -- | Specifies the next step that the bot executes after playing the
+    -- intent\'s closing response.
+    nextStep :: Prelude.Maybe DialogState
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'IntentClosingSetting' 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:
+--
+-- 'active', 'intentClosingSetting_active' - Specifies whether an intent\'s closing response is used. When this field
+-- is false, the closing response isn\'t sent to the user. If the @active@
+-- field isn\'t specified, the default is true.
+--
+-- 'closingResponse', 'intentClosingSetting_closingResponse' - The response that Amazon Lex sends to the user when the intent is
+-- complete.
+--
+-- 'conditional', 'intentClosingSetting_conditional' - A list of conditional branches associated with the intent\'s closing
+-- response. These branches are executed when the @nextStep@ attribute is
+-- set to @EvalutateConditional@.
+--
+-- 'nextStep', 'intentClosingSetting_nextStep' - Specifies the next step that the bot executes after playing the
+-- intent\'s closing response.
+newIntentClosingSetting ::
+  IntentClosingSetting
+newIntentClosingSetting =
+  IntentClosingSetting'
+    { active = Prelude.Nothing,
+      closingResponse = Prelude.Nothing,
+      conditional = Prelude.Nothing,
+      nextStep = Prelude.Nothing
+    }
+
+-- | Specifies whether an intent\'s closing response is used. When this field
+-- is false, the closing response isn\'t sent to the user. If the @active@
+-- field isn\'t specified, the default is true.
+intentClosingSetting_active :: Lens.Lens' IntentClosingSetting (Prelude.Maybe Prelude.Bool)
+intentClosingSetting_active = Lens.lens (\IntentClosingSetting' {active} -> active) (\s@IntentClosingSetting' {} a -> s {active = a} :: IntentClosingSetting)
+
+-- | The response that Amazon Lex sends to the user when the intent is
+-- complete.
+intentClosingSetting_closingResponse :: Lens.Lens' IntentClosingSetting (Prelude.Maybe ResponseSpecification)
+intentClosingSetting_closingResponse = Lens.lens (\IntentClosingSetting' {closingResponse} -> closingResponse) (\s@IntentClosingSetting' {} a -> s {closingResponse = a} :: IntentClosingSetting)
+
+-- | A list of conditional branches associated with the intent\'s closing
+-- response. These branches are executed when the @nextStep@ attribute is
+-- set to @EvalutateConditional@.
+intentClosingSetting_conditional :: Lens.Lens' IntentClosingSetting (Prelude.Maybe ConditionalSpecification)
+intentClosingSetting_conditional = Lens.lens (\IntentClosingSetting' {conditional} -> conditional) (\s@IntentClosingSetting' {} a -> s {conditional = a} :: IntentClosingSetting)
+
+-- | Specifies the next step that the bot executes after playing the
+-- intent\'s closing response.
+intentClosingSetting_nextStep :: Lens.Lens' IntentClosingSetting (Prelude.Maybe DialogState)
+intentClosingSetting_nextStep = Lens.lens (\IntentClosingSetting' {nextStep} -> nextStep) (\s@IntentClosingSetting' {} a -> s {nextStep = a} :: IntentClosingSetting)
+
+instance Data.FromJSON IntentClosingSetting where
+  parseJSON =
+    Data.withObject
+      "IntentClosingSetting"
+      ( \x ->
+          IntentClosingSetting'
+            Prelude.<$> (x Data..:? "active")
+            Prelude.<*> (x Data..:? "closingResponse")
+            Prelude.<*> (x Data..:? "conditional")
+            Prelude.<*> (x Data..:? "nextStep")
+      )
+
+instance Prelude.Hashable IntentClosingSetting where
+  hashWithSalt _salt IntentClosingSetting' {..} =
+    _salt
+      `Prelude.hashWithSalt` active
+      `Prelude.hashWithSalt` closingResponse
+      `Prelude.hashWithSalt` conditional
+      `Prelude.hashWithSalt` nextStep
+
+instance Prelude.NFData IntentClosingSetting where
+  rnf IntentClosingSetting' {..} =
+    Prelude.rnf active
+      `Prelude.seq` Prelude.rnf closingResponse
+      `Prelude.seq` Prelude.rnf conditional
+      `Prelude.seq` Prelude.rnf nextStep
+
+instance Data.ToJSON IntentClosingSetting where
+  toJSON IntentClosingSetting' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("active" Data..=) Prelude.<$> active,
+            ("closingResponse" Data..=)
+              Prelude.<$> closingResponse,
+            ("conditional" Data..=) Prelude.<$> conditional,
+            ("nextStep" Data..=) Prelude.<$> nextStep
+          ]
+      )
diff --git a/gen/Amazonka/LexV2Models/Types/IntentConfirmationSetting.hs b/gen/Amazonka/LexV2Models/Types/IntentConfirmationSetting.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/Types/IntentConfirmationSetting.hs
@@ -0,0 +1,311 @@
+{-# 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.LexV2Models.Types.IntentConfirmationSetting
+-- 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.LexV2Models.Types.IntentConfirmationSetting where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LexV2Models.Types.ConditionalSpecification
+import Amazonka.LexV2Models.Types.DialogCodeHookInvocationSetting
+import Amazonka.LexV2Models.Types.DialogState
+import Amazonka.LexV2Models.Types.ElicitationCodeHookInvocationSetting
+import Amazonka.LexV2Models.Types.PromptSpecification
+import Amazonka.LexV2Models.Types.ResponseSpecification
+import qualified Amazonka.Prelude as Prelude
+
+-- | Provides a prompt for making sure that the user is ready for the intent
+-- to be fulfilled.
+--
+-- /See:/ 'newIntentConfirmationSetting' smart constructor.
+data IntentConfirmationSetting = IntentConfirmationSetting'
+  { -- | Specifies whether the intent\'s confirmation is sent to the user. When
+    -- this field is false, confirmation and declination responses aren\'t
+    -- sent. If the @active@ field isn\'t specified, the default is true.
+    active :: Prelude.Maybe Prelude.Bool,
+    -- | The @DialogCodeHookInvocationSetting@ object associated with intent\'s
+    -- confirmation step. The dialog code hook is triggered based on these
+    -- invocation settings when the confirmation next step or declination next
+    -- step or failure next step is @InvokeDialogCodeHook@.
+    codeHook :: Prelude.Maybe DialogCodeHookInvocationSetting,
+    -- | A list of conditional branches to evaluate after the intent is closed.
+    confirmationConditional :: Prelude.Maybe ConditionalSpecification,
+    -- | Specifies the next step that the bot executes when the customer confirms
+    -- the intent.
+    confirmationNextStep :: Prelude.Maybe DialogState,
+    confirmationResponse :: Prelude.Maybe ResponseSpecification,
+    -- | A list of conditional branches to evaluate after the intent is declined.
+    declinationConditional :: Prelude.Maybe ConditionalSpecification,
+    -- | Specifies the next step that the bot executes when the customer declines
+    -- the intent.
+    declinationNextStep :: Prelude.Maybe DialogState,
+    -- | When the user answers \"no\" to the question defined in
+    -- @promptSpecification@, Amazon Lex responds with this response to
+    -- acknowledge that the intent was canceled.
+    declinationResponse :: Prelude.Maybe ResponseSpecification,
+    -- | The @DialogCodeHookInvocationSetting@ used when the code hook is invoked
+    -- during confirmation prompt retries.
+    elicitationCodeHook :: Prelude.Maybe ElicitationCodeHookInvocationSetting,
+    failureConditional :: Prelude.Maybe ConditionalSpecification,
+    -- | The next step to take in the conversation if the confirmation step
+    -- fails.
+    failureNextStep :: Prelude.Maybe DialogState,
+    failureResponse :: Prelude.Maybe ResponseSpecification,
+    -- | Prompts the user to confirm the intent. This question should have a yes
+    -- or no answer.
+    --
+    -- Amazon Lex uses this prompt to ensure that the user acknowledges that
+    -- the intent is ready for fulfillment. For example, with the @OrderPizza@
+    -- intent, you might want to confirm that the order is correct before
+    -- placing it. For other intents, such as intents that simply respond to
+    -- user questions, you might not need to ask the user for confirmation
+    -- before providing the information.
+    promptSpecification :: PromptSpecification
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'IntentConfirmationSetting' 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:
+--
+-- 'active', 'intentConfirmationSetting_active' - Specifies whether the intent\'s confirmation is sent to the user. When
+-- this field is false, confirmation and declination responses aren\'t
+-- sent. If the @active@ field isn\'t specified, the default is true.
+--
+-- 'codeHook', 'intentConfirmationSetting_codeHook' - The @DialogCodeHookInvocationSetting@ object associated with intent\'s
+-- confirmation step. The dialog code hook is triggered based on these
+-- invocation settings when the confirmation next step or declination next
+-- step or failure next step is @InvokeDialogCodeHook@.
+--
+-- 'confirmationConditional', 'intentConfirmationSetting_confirmationConditional' - A list of conditional branches to evaluate after the intent is closed.
+--
+-- 'confirmationNextStep', 'intentConfirmationSetting_confirmationNextStep' - Specifies the next step that the bot executes when the customer confirms
+-- the intent.
+--
+-- 'confirmationResponse', 'intentConfirmationSetting_confirmationResponse' - Undocumented member.
+--
+-- 'declinationConditional', 'intentConfirmationSetting_declinationConditional' - A list of conditional branches to evaluate after the intent is declined.
+--
+-- 'declinationNextStep', 'intentConfirmationSetting_declinationNextStep' - Specifies the next step that the bot executes when the customer declines
+-- the intent.
+--
+-- 'declinationResponse', 'intentConfirmationSetting_declinationResponse' - When the user answers \"no\" to the question defined in
+-- @promptSpecification@, Amazon Lex responds with this response to
+-- acknowledge that the intent was canceled.
+--
+-- 'elicitationCodeHook', 'intentConfirmationSetting_elicitationCodeHook' - The @DialogCodeHookInvocationSetting@ used when the code hook is invoked
+-- during confirmation prompt retries.
+--
+-- 'failureConditional', 'intentConfirmationSetting_failureConditional' - Undocumented member.
+--
+-- 'failureNextStep', 'intentConfirmationSetting_failureNextStep' - The next step to take in the conversation if the confirmation step
+-- fails.
+--
+-- 'failureResponse', 'intentConfirmationSetting_failureResponse' - Undocumented member.
+--
+-- 'promptSpecification', 'intentConfirmationSetting_promptSpecification' - Prompts the user to confirm the intent. This question should have a yes
+-- or no answer.
+--
+-- Amazon Lex uses this prompt to ensure that the user acknowledges that
+-- the intent is ready for fulfillment. For example, with the @OrderPizza@
+-- intent, you might want to confirm that the order is correct before
+-- placing it. For other intents, such as intents that simply respond to
+-- user questions, you might not need to ask the user for confirmation
+-- before providing the information.
+newIntentConfirmationSetting ::
+  -- | 'promptSpecification'
+  PromptSpecification ->
+  IntentConfirmationSetting
+newIntentConfirmationSetting pPromptSpecification_ =
+  IntentConfirmationSetting'
+    { active =
+        Prelude.Nothing,
+      codeHook = Prelude.Nothing,
+      confirmationConditional = Prelude.Nothing,
+      confirmationNextStep = Prelude.Nothing,
+      confirmationResponse = Prelude.Nothing,
+      declinationConditional = Prelude.Nothing,
+      declinationNextStep = Prelude.Nothing,
+      declinationResponse = Prelude.Nothing,
+      elicitationCodeHook = Prelude.Nothing,
+      failureConditional = Prelude.Nothing,
+      failureNextStep = Prelude.Nothing,
+      failureResponse = Prelude.Nothing,
+      promptSpecification = pPromptSpecification_
+    }
+
+-- | Specifies whether the intent\'s confirmation is sent to the user. When
+-- this field is false, confirmation and declination responses aren\'t
+-- sent. If the @active@ field isn\'t specified, the default is true.
+intentConfirmationSetting_active :: Lens.Lens' IntentConfirmationSetting (Prelude.Maybe Prelude.Bool)
+intentConfirmationSetting_active = Lens.lens (\IntentConfirmationSetting' {active} -> active) (\s@IntentConfirmationSetting' {} a -> s {active = a} :: IntentConfirmationSetting)
+
+-- | The @DialogCodeHookInvocationSetting@ object associated with intent\'s
+-- confirmation step. The dialog code hook is triggered based on these
+-- invocation settings when the confirmation next step or declination next
+-- step or failure next step is @InvokeDialogCodeHook@.
+intentConfirmationSetting_codeHook :: Lens.Lens' IntentConfirmationSetting (Prelude.Maybe DialogCodeHookInvocationSetting)
+intentConfirmationSetting_codeHook = Lens.lens (\IntentConfirmationSetting' {codeHook} -> codeHook) (\s@IntentConfirmationSetting' {} a -> s {codeHook = a} :: IntentConfirmationSetting)
+
+-- | A list of conditional branches to evaluate after the intent is closed.
+intentConfirmationSetting_confirmationConditional :: Lens.Lens' IntentConfirmationSetting (Prelude.Maybe ConditionalSpecification)
+intentConfirmationSetting_confirmationConditional = Lens.lens (\IntentConfirmationSetting' {confirmationConditional} -> confirmationConditional) (\s@IntentConfirmationSetting' {} a -> s {confirmationConditional = a} :: IntentConfirmationSetting)
+
+-- | Specifies the next step that the bot executes when the customer confirms
+-- the intent.
+intentConfirmationSetting_confirmationNextStep :: Lens.Lens' IntentConfirmationSetting (Prelude.Maybe DialogState)
+intentConfirmationSetting_confirmationNextStep = Lens.lens (\IntentConfirmationSetting' {confirmationNextStep} -> confirmationNextStep) (\s@IntentConfirmationSetting' {} a -> s {confirmationNextStep = a} :: IntentConfirmationSetting)
+
+-- | Undocumented member.
+intentConfirmationSetting_confirmationResponse :: Lens.Lens' IntentConfirmationSetting (Prelude.Maybe ResponseSpecification)
+intentConfirmationSetting_confirmationResponse = Lens.lens (\IntentConfirmationSetting' {confirmationResponse} -> confirmationResponse) (\s@IntentConfirmationSetting' {} a -> s {confirmationResponse = a} :: IntentConfirmationSetting)
+
+-- | A list of conditional branches to evaluate after the intent is declined.
+intentConfirmationSetting_declinationConditional :: Lens.Lens' IntentConfirmationSetting (Prelude.Maybe ConditionalSpecification)
+intentConfirmationSetting_declinationConditional = Lens.lens (\IntentConfirmationSetting' {declinationConditional} -> declinationConditional) (\s@IntentConfirmationSetting' {} a -> s {declinationConditional = a} :: IntentConfirmationSetting)
+
+-- | Specifies the next step that the bot executes when the customer declines
+-- the intent.
+intentConfirmationSetting_declinationNextStep :: Lens.Lens' IntentConfirmationSetting (Prelude.Maybe DialogState)
+intentConfirmationSetting_declinationNextStep = Lens.lens (\IntentConfirmationSetting' {declinationNextStep} -> declinationNextStep) (\s@IntentConfirmationSetting' {} a -> s {declinationNextStep = a} :: IntentConfirmationSetting)
+
+-- | When the user answers \"no\" to the question defined in
+-- @promptSpecification@, Amazon Lex responds with this response to
+-- acknowledge that the intent was canceled.
+intentConfirmationSetting_declinationResponse :: Lens.Lens' IntentConfirmationSetting (Prelude.Maybe ResponseSpecification)
+intentConfirmationSetting_declinationResponse = Lens.lens (\IntentConfirmationSetting' {declinationResponse} -> declinationResponse) (\s@IntentConfirmationSetting' {} a -> s {declinationResponse = a} :: IntentConfirmationSetting)
+
+-- | The @DialogCodeHookInvocationSetting@ used when the code hook is invoked
+-- during confirmation prompt retries.
+intentConfirmationSetting_elicitationCodeHook :: Lens.Lens' IntentConfirmationSetting (Prelude.Maybe ElicitationCodeHookInvocationSetting)
+intentConfirmationSetting_elicitationCodeHook = Lens.lens (\IntentConfirmationSetting' {elicitationCodeHook} -> elicitationCodeHook) (\s@IntentConfirmationSetting' {} a -> s {elicitationCodeHook = a} :: IntentConfirmationSetting)
+
+-- | Undocumented member.
+intentConfirmationSetting_failureConditional :: Lens.Lens' IntentConfirmationSetting (Prelude.Maybe ConditionalSpecification)
+intentConfirmationSetting_failureConditional = Lens.lens (\IntentConfirmationSetting' {failureConditional} -> failureConditional) (\s@IntentConfirmationSetting' {} a -> s {failureConditional = a} :: IntentConfirmationSetting)
+
+-- | The next step to take in the conversation if the confirmation step
+-- fails.
+intentConfirmationSetting_failureNextStep :: Lens.Lens' IntentConfirmationSetting (Prelude.Maybe DialogState)
+intentConfirmationSetting_failureNextStep = Lens.lens (\IntentConfirmationSetting' {failureNextStep} -> failureNextStep) (\s@IntentConfirmationSetting' {} a -> s {failureNextStep = a} :: IntentConfirmationSetting)
+
+-- | Undocumented member.
+intentConfirmationSetting_failureResponse :: Lens.Lens' IntentConfirmationSetting (Prelude.Maybe ResponseSpecification)
+intentConfirmationSetting_failureResponse = Lens.lens (\IntentConfirmationSetting' {failureResponse} -> failureResponse) (\s@IntentConfirmationSetting' {} a -> s {failureResponse = a} :: IntentConfirmationSetting)
+
+-- | Prompts the user to confirm the intent. This question should have a yes
+-- or no answer.
+--
+-- Amazon Lex uses this prompt to ensure that the user acknowledges that
+-- the intent is ready for fulfillment. For example, with the @OrderPizza@
+-- intent, you might want to confirm that the order is correct before
+-- placing it. For other intents, such as intents that simply respond to
+-- user questions, you might not need to ask the user for confirmation
+-- before providing the information.
+intentConfirmationSetting_promptSpecification :: Lens.Lens' IntentConfirmationSetting PromptSpecification
+intentConfirmationSetting_promptSpecification = Lens.lens (\IntentConfirmationSetting' {promptSpecification} -> promptSpecification) (\s@IntentConfirmationSetting' {} a -> s {promptSpecification = a} :: IntentConfirmationSetting)
+
+instance Data.FromJSON IntentConfirmationSetting where
+  parseJSON =
+    Data.withObject
+      "IntentConfirmationSetting"
+      ( \x ->
+          IntentConfirmationSetting'
+            Prelude.<$> (x Data..:? "active")
+            Prelude.<*> (x Data..:? "codeHook")
+            Prelude.<*> (x Data..:? "confirmationConditional")
+            Prelude.<*> (x Data..:? "confirmationNextStep")
+            Prelude.<*> (x Data..:? "confirmationResponse")
+            Prelude.<*> (x Data..:? "declinationConditional")
+            Prelude.<*> (x Data..:? "declinationNextStep")
+            Prelude.<*> (x Data..:? "declinationResponse")
+            Prelude.<*> (x Data..:? "elicitationCodeHook")
+            Prelude.<*> (x Data..:? "failureConditional")
+            Prelude.<*> (x Data..:? "failureNextStep")
+            Prelude.<*> (x Data..:? "failureResponse")
+            Prelude.<*> (x Data..: "promptSpecification")
+      )
+
+instance Prelude.Hashable IntentConfirmationSetting where
+  hashWithSalt _salt IntentConfirmationSetting' {..} =
+    _salt
+      `Prelude.hashWithSalt` active
+      `Prelude.hashWithSalt` codeHook
+      `Prelude.hashWithSalt` confirmationConditional
+      `Prelude.hashWithSalt` confirmationNextStep
+      `Prelude.hashWithSalt` confirmationResponse
+      `Prelude.hashWithSalt` declinationConditional
+      `Prelude.hashWithSalt` declinationNextStep
+      `Prelude.hashWithSalt` declinationResponse
+      `Prelude.hashWithSalt` elicitationCodeHook
+      `Prelude.hashWithSalt` failureConditional
+      `Prelude.hashWithSalt` failureNextStep
+      `Prelude.hashWithSalt` failureResponse
+      `Prelude.hashWithSalt` promptSpecification
+
+instance Prelude.NFData IntentConfirmationSetting where
+  rnf IntentConfirmationSetting' {..} =
+    Prelude.rnf active
+      `Prelude.seq` Prelude.rnf codeHook
+      `Prelude.seq` Prelude.rnf confirmationConditional
+      `Prelude.seq` Prelude.rnf confirmationNextStep
+      `Prelude.seq` Prelude.rnf confirmationResponse
+      `Prelude.seq` Prelude.rnf declinationConditional
+      `Prelude.seq` Prelude.rnf declinationNextStep
+      `Prelude.seq` Prelude.rnf declinationResponse
+      `Prelude.seq` Prelude.rnf elicitationCodeHook
+      `Prelude.seq` Prelude.rnf failureConditional
+      `Prelude.seq` Prelude.rnf failureNextStep
+      `Prelude.seq` Prelude.rnf failureResponse
+      `Prelude.seq` Prelude.rnf promptSpecification
+
+instance Data.ToJSON IntentConfirmationSetting where
+  toJSON IntentConfirmationSetting' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("active" Data..=) Prelude.<$> active,
+            ("codeHook" Data..=) Prelude.<$> codeHook,
+            ("confirmationConditional" Data..=)
+              Prelude.<$> confirmationConditional,
+            ("confirmationNextStep" Data..=)
+              Prelude.<$> confirmationNextStep,
+            ("confirmationResponse" Data..=)
+              Prelude.<$> confirmationResponse,
+            ("declinationConditional" Data..=)
+              Prelude.<$> declinationConditional,
+            ("declinationNextStep" Data..=)
+              Prelude.<$> declinationNextStep,
+            ("declinationResponse" Data..=)
+              Prelude.<$> declinationResponse,
+            ("elicitationCodeHook" Data..=)
+              Prelude.<$> elicitationCodeHook,
+            ("failureConditional" Data..=)
+              Prelude.<$> failureConditional,
+            ("failureNextStep" Data..=)
+              Prelude.<$> failureNextStep,
+            ("failureResponse" Data..=)
+              Prelude.<$> failureResponse,
+            Prelude.Just
+              ("promptSpecification" Data..= promptSpecification)
+          ]
+      )
diff --git a/gen/Amazonka/LexV2Models/Types/IntentFilter.hs b/gen/Amazonka/LexV2Models/Types/IntentFilter.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/Types/IntentFilter.hs
@@ -0,0 +1,112 @@
+{-# 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.LexV2Models.Types.IntentFilter
+-- 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.LexV2Models.Types.IntentFilter where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LexV2Models.Types.IntentFilterName
+import Amazonka.LexV2Models.Types.IntentFilterOperator
+import qualified Amazonka.Prelude as Prelude
+
+-- | Filters the response from the @ListIntents@ operation.
+--
+-- /See:/ 'newIntentFilter' smart constructor.
+data IntentFilter = IntentFilter'
+  { -- | The name of the field to use for the filter.
+    name :: IntentFilterName,
+    -- | The value to use for the filter.
+    values :: Prelude.NonEmpty Prelude.Text,
+    -- | The operator to use for the filter. Specify @EQ@ when the @ListIntents@
+    -- operation should return only aliases that equal the specified value.
+    -- Specify @CO@ when the @ListIntents@ operation should return aliases that
+    -- contain the specified value.
+    operator :: IntentFilterOperator
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'IntentFilter' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'name', 'intentFilter_name' - The name of the field to use for the filter.
+--
+-- 'values', 'intentFilter_values' - The value to use for the filter.
+--
+-- 'operator', 'intentFilter_operator' - The operator to use for the filter. Specify @EQ@ when the @ListIntents@
+-- operation should return only aliases that equal the specified value.
+-- Specify @CO@ when the @ListIntents@ operation should return aliases that
+-- contain the specified value.
+newIntentFilter ::
+  -- | 'name'
+  IntentFilterName ->
+  -- | 'values'
+  Prelude.NonEmpty Prelude.Text ->
+  -- | 'operator'
+  IntentFilterOperator ->
+  IntentFilter
+newIntentFilter pName_ pValues_ pOperator_ =
+  IntentFilter'
+    { name = pName_,
+      values = Lens.coerced Lens.# pValues_,
+      operator = pOperator_
+    }
+
+-- | The name of the field to use for the filter.
+intentFilter_name :: Lens.Lens' IntentFilter IntentFilterName
+intentFilter_name = Lens.lens (\IntentFilter' {name} -> name) (\s@IntentFilter' {} a -> s {name = a} :: IntentFilter)
+
+-- | The value to use for the filter.
+intentFilter_values :: Lens.Lens' IntentFilter (Prelude.NonEmpty Prelude.Text)
+intentFilter_values = Lens.lens (\IntentFilter' {values} -> values) (\s@IntentFilter' {} a -> s {values = a} :: IntentFilter) Prelude.. Lens.coerced
+
+-- | The operator to use for the filter. Specify @EQ@ when the @ListIntents@
+-- operation should return only aliases that equal the specified value.
+-- Specify @CO@ when the @ListIntents@ operation should return aliases that
+-- contain the specified value.
+intentFilter_operator :: Lens.Lens' IntentFilter IntentFilterOperator
+intentFilter_operator = Lens.lens (\IntentFilter' {operator} -> operator) (\s@IntentFilter' {} a -> s {operator = a} :: IntentFilter)
+
+instance Prelude.Hashable IntentFilter where
+  hashWithSalt _salt IntentFilter' {..} =
+    _salt
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` values
+      `Prelude.hashWithSalt` operator
+
+instance Prelude.NFData IntentFilter where
+  rnf IntentFilter' {..} =
+    Prelude.rnf name
+      `Prelude.seq` Prelude.rnf values
+      `Prelude.seq` Prelude.rnf operator
+
+instance Data.ToJSON IntentFilter where
+  toJSON IntentFilter' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("name" Data..= name),
+            Prelude.Just ("values" Data..= values),
+            Prelude.Just ("operator" Data..= operator)
+          ]
+      )
diff --git a/gen/Amazonka/LexV2Models/Types/IntentFilterName.hs b/gen/Amazonka/LexV2Models/Types/IntentFilterName.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/Types/IntentFilterName.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.LexV2Models.Types.IntentFilterName
+-- 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.LexV2Models.Types.IntentFilterName
+  ( IntentFilterName
+      ( ..,
+        IntentFilterName_IntentName
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype IntentFilterName = IntentFilterName'
+  { fromIntentFilterName ::
+      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 IntentFilterName_IntentName :: IntentFilterName
+pattern IntentFilterName_IntentName = IntentFilterName' "IntentName"
+
+{-# COMPLETE
+  IntentFilterName_IntentName,
+  IntentFilterName'
+  #-}
diff --git a/gen/Amazonka/LexV2Models/Types/IntentFilterOperator.hs b/gen/Amazonka/LexV2Models/Types/IntentFilterOperator.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/Types/IntentFilterOperator.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.LexV2Models.Types.IntentFilterOperator
+-- 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.LexV2Models.Types.IntentFilterOperator
+  ( IntentFilterOperator
+      ( ..,
+        IntentFilterOperator_CO,
+        IntentFilterOperator_EQ
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype IntentFilterOperator = IntentFilterOperator'
+  { fromIntentFilterOperator ::
+      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 IntentFilterOperator_CO :: IntentFilterOperator
+pattern IntentFilterOperator_CO = IntentFilterOperator' "CO"
+
+pattern IntentFilterOperator_EQ :: IntentFilterOperator
+pattern IntentFilterOperator_EQ = IntentFilterOperator' "EQ"
+
+{-# COMPLETE
+  IntentFilterOperator_CO,
+  IntentFilterOperator_EQ,
+  IntentFilterOperator'
+  #-}
diff --git a/gen/Amazonka/LexV2Models/Types/IntentOverride.hs b/gen/Amazonka/LexV2Models/Types/IntentOverride.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/Types/IntentOverride.hs
@@ -0,0 +1,99 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.LexV2Models.Types.IntentOverride
+-- 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.LexV2Models.Types.IntentOverride where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LexV2Models.Types.SlotValueOverride
+import qualified Amazonka.Prelude as Prelude
+
+-- | Override settings to configure the intent state.
+--
+-- /See:/ 'newIntentOverride' smart constructor.
+data IntentOverride = IntentOverride'
+  { -- | The name of the intent. Only required when you\'re switching intents.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | A map of all of the slot value overrides for the intent. The name of the
+    -- slot maps to the value of the slot. Slots that are not included in the
+    -- map aren\'t overridden.,
+    slots :: Prelude.Maybe (Prelude.HashMap Prelude.Text SlotValueOverride)
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'IntentOverride' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'name', 'intentOverride_name' - The name of the intent. Only required when you\'re switching intents.
+--
+-- 'slots', 'intentOverride_slots' - A map of all of the slot value overrides for the intent. The name of the
+-- slot maps to the value of the slot. Slots that are not included in the
+-- map aren\'t overridden.,
+newIntentOverride ::
+  IntentOverride
+newIntentOverride =
+  IntentOverride'
+    { name = Prelude.Nothing,
+      slots = Prelude.Nothing
+    }
+
+-- | The name of the intent. Only required when you\'re switching intents.
+intentOverride_name :: Lens.Lens' IntentOverride (Prelude.Maybe Prelude.Text)
+intentOverride_name = Lens.lens (\IntentOverride' {name} -> name) (\s@IntentOverride' {} a -> s {name = a} :: IntentOverride)
+
+-- | A map of all of the slot value overrides for the intent. The name of the
+-- slot maps to the value of the slot. Slots that are not included in the
+-- map aren\'t overridden.,
+intentOverride_slots :: Lens.Lens' IntentOverride (Prelude.Maybe (Prelude.HashMap Prelude.Text SlotValueOverride))
+intentOverride_slots = Lens.lens (\IntentOverride' {slots} -> slots) (\s@IntentOverride' {} a -> s {slots = a} :: IntentOverride) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromJSON IntentOverride where
+  parseJSON =
+    Data.withObject
+      "IntentOverride"
+      ( \x ->
+          IntentOverride'
+            Prelude.<$> (x Data..:? "name")
+            Prelude.<*> (x Data..:? "slots" Data..!= Prelude.mempty)
+      )
+
+instance Prelude.Hashable IntentOverride where
+  hashWithSalt _salt IntentOverride' {..} =
+    _salt
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` slots
+
+instance Prelude.NFData IntentOverride where
+  rnf IntentOverride' {..} =
+    Prelude.rnf name `Prelude.seq` Prelude.rnf slots
+
+instance Data.ToJSON IntentOverride where
+  toJSON IntentOverride' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("name" Data..=) Prelude.<$> name,
+            ("slots" Data..=) Prelude.<$> slots
+          ]
+      )
diff --git a/gen/Amazonka/LexV2Models/Types/IntentSortAttribute.hs b/gen/Amazonka/LexV2Models/Types/IntentSortAttribute.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/Types/IntentSortAttribute.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.LexV2Models.Types.IntentSortAttribute
+-- 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.LexV2Models.Types.IntentSortAttribute
+  ( IntentSortAttribute
+      ( ..,
+        IntentSortAttribute_IntentName,
+        IntentSortAttribute_LastUpdatedDateTime
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype IntentSortAttribute = IntentSortAttribute'
+  { fromIntentSortAttribute ::
+      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 IntentSortAttribute_IntentName :: IntentSortAttribute
+pattern IntentSortAttribute_IntentName = IntentSortAttribute' "IntentName"
+
+pattern IntentSortAttribute_LastUpdatedDateTime :: IntentSortAttribute
+pattern IntentSortAttribute_LastUpdatedDateTime = IntentSortAttribute' "LastUpdatedDateTime"
+
+{-# COMPLETE
+  IntentSortAttribute_IntentName,
+  IntentSortAttribute_LastUpdatedDateTime,
+  IntentSortAttribute'
+  #-}
diff --git a/gen/Amazonka/LexV2Models/Types/IntentSortBy.hs b/gen/Amazonka/LexV2Models/Types/IntentSortBy.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/Types/IntentSortBy.hs
@@ -0,0 +1,89 @@
+{-# 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.LexV2Models.Types.IntentSortBy
+-- 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.LexV2Models.Types.IntentSortBy where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LexV2Models.Types.IntentSortAttribute
+import Amazonka.LexV2Models.Types.SortOrder
+import qualified Amazonka.Prelude as Prelude
+
+-- | Specifies attributes for sorting a list of intents.
+--
+-- /See:/ 'newIntentSortBy' smart constructor.
+data IntentSortBy = IntentSortBy'
+  { -- | The attribute to use to sort the list of intents.
+    attribute :: IntentSortAttribute,
+    -- | The order to sort the list. You can choose ascending or descending.
+    order :: SortOrder
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'IntentSortBy' 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:
+--
+-- 'attribute', 'intentSortBy_attribute' - The attribute to use to sort the list of intents.
+--
+-- 'order', 'intentSortBy_order' - The order to sort the list. You can choose ascending or descending.
+newIntentSortBy ::
+  -- | 'attribute'
+  IntentSortAttribute ->
+  -- | 'order'
+  SortOrder ->
+  IntentSortBy
+newIntentSortBy pAttribute_ pOrder_ =
+  IntentSortBy'
+    { attribute = pAttribute_,
+      order = pOrder_
+    }
+
+-- | The attribute to use to sort the list of intents.
+intentSortBy_attribute :: Lens.Lens' IntentSortBy IntentSortAttribute
+intentSortBy_attribute = Lens.lens (\IntentSortBy' {attribute} -> attribute) (\s@IntentSortBy' {} a -> s {attribute = a} :: IntentSortBy)
+
+-- | The order to sort the list. You can choose ascending or descending.
+intentSortBy_order :: Lens.Lens' IntentSortBy SortOrder
+intentSortBy_order = Lens.lens (\IntentSortBy' {order} -> order) (\s@IntentSortBy' {} a -> s {order = a} :: IntentSortBy)
+
+instance Prelude.Hashable IntentSortBy where
+  hashWithSalt _salt IntentSortBy' {..} =
+    _salt
+      `Prelude.hashWithSalt` attribute
+      `Prelude.hashWithSalt` order
+
+instance Prelude.NFData IntentSortBy where
+  rnf IntentSortBy' {..} =
+    Prelude.rnf attribute
+      `Prelude.seq` Prelude.rnf order
+
+instance Data.ToJSON IntentSortBy where
+  toJSON IntentSortBy' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("attribute" Data..= attribute),
+            Prelude.Just ("order" Data..= order)
+          ]
+      )
diff --git a/gen/Amazonka/LexV2Models/Types/IntentStatistics.hs b/gen/Amazonka/LexV2Models/Types/IntentStatistics.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/Types/IntentStatistics.hs
@@ -0,0 +1,76 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.LexV2Models.Types.IntentStatistics
+-- 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.LexV2Models.Types.IntentStatistics 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 object that contains the statistical summary of recommended intents
+-- associated with the bot recommendation.
+--
+-- /See:/ 'newIntentStatistics' smart constructor.
+data IntentStatistics = IntentStatistics'
+  { -- | The number of recommended intents associated with the bot
+    -- recommendation.
+    discoveredIntentCount :: Prelude.Maybe Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'IntentStatistics' 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:
+--
+-- 'discoveredIntentCount', 'intentStatistics_discoveredIntentCount' - The number of recommended intents associated with the bot
+-- recommendation.
+newIntentStatistics ::
+  IntentStatistics
+newIntentStatistics =
+  IntentStatistics'
+    { discoveredIntentCount =
+        Prelude.Nothing
+    }
+
+-- | The number of recommended intents associated with the bot
+-- recommendation.
+intentStatistics_discoveredIntentCount :: Lens.Lens' IntentStatistics (Prelude.Maybe Prelude.Int)
+intentStatistics_discoveredIntentCount = Lens.lens (\IntentStatistics' {discoveredIntentCount} -> discoveredIntentCount) (\s@IntentStatistics' {} a -> s {discoveredIntentCount = a} :: IntentStatistics)
+
+instance Data.FromJSON IntentStatistics where
+  parseJSON =
+    Data.withObject
+      "IntentStatistics"
+      ( \x ->
+          IntentStatistics'
+            Prelude.<$> (x Data..:? "discoveredIntentCount")
+      )
+
+instance Prelude.Hashable IntentStatistics where
+  hashWithSalt _salt IntentStatistics' {..} =
+    _salt `Prelude.hashWithSalt` discoveredIntentCount
+
+instance Prelude.NFData IntentStatistics where
+  rnf IntentStatistics' {..} =
+    Prelude.rnf discoveredIntentCount
diff --git a/gen/Amazonka/LexV2Models/Types/IntentSummary.hs b/gen/Amazonka/LexV2Models/Types/IntentSummary.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/Types/IntentSummary.hs
@@ -0,0 +1,159 @@
+{-# 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.LexV2Models.Types.IntentSummary
+-- 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.LexV2Models.Types.IntentSummary where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LexV2Models.Types.InputContext
+import Amazonka.LexV2Models.Types.OutputContext
+import qualified Amazonka.Prelude as Prelude
+
+-- | Summary information about an intent returned by the @ListIntents@
+-- operation.
+--
+-- /See:/ 'newIntentSummary' smart constructor.
+data IntentSummary = IntentSummary'
+  { -- | The description of the intent.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The input contexts that must be active for this intent to be considered
+    -- for recognition.
+    inputContexts :: Prelude.Maybe [InputContext],
+    -- | The unique identifier assigned to the intent. Use this ID to get
+    -- detailed information about the intent with the @DescribeIntent@
+    -- operation.
+    intentId :: Prelude.Maybe Prelude.Text,
+    -- | The name of the intent.
+    intentName :: Prelude.Maybe Prelude.Text,
+    -- | The timestamp of the date and time that the intent was last updated.
+    lastUpdatedDateTime :: Prelude.Maybe Data.POSIX,
+    -- | The output contexts that are activated when this intent is fulfilled.
+    outputContexts :: Prelude.Maybe [OutputContext],
+    -- | If this intent is derived from a built-in intent, the name of the parent
+    -- intent.
+    parentIntentSignature :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'IntentSummary' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'description', 'intentSummary_description' - The description of the intent.
+--
+-- 'inputContexts', 'intentSummary_inputContexts' - The input contexts that must be active for this intent to be considered
+-- for recognition.
+--
+-- 'intentId', 'intentSummary_intentId' - The unique identifier assigned to the intent. Use this ID to get
+-- detailed information about the intent with the @DescribeIntent@
+-- operation.
+--
+-- 'intentName', 'intentSummary_intentName' - The name of the intent.
+--
+-- 'lastUpdatedDateTime', 'intentSummary_lastUpdatedDateTime' - The timestamp of the date and time that the intent was last updated.
+--
+-- 'outputContexts', 'intentSummary_outputContexts' - The output contexts that are activated when this intent is fulfilled.
+--
+-- 'parentIntentSignature', 'intentSummary_parentIntentSignature' - If this intent is derived from a built-in intent, the name of the parent
+-- intent.
+newIntentSummary ::
+  IntentSummary
+newIntentSummary =
+  IntentSummary'
+    { description = Prelude.Nothing,
+      inputContexts = Prelude.Nothing,
+      intentId = Prelude.Nothing,
+      intentName = Prelude.Nothing,
+      lastUpdatedDateTime = Prelude.Nothing,
+      outputContexts = Prelude.Nothing,
+      parentIntentSignature = Prelude.Nothing
+    }
+
+-- | The description of the intent.
+intentSummary_description :: Lens.Lens' IntentSummary (Prelude.Maybe Prelude.Text)
+intentSummary_description = Lens.lens (\IntentSummary' {description} -> description) (\s@IntentSummary' {} a -> s {description = a} :: IntentSummary)
+
+-- | The input contexts that must be active for this intent to be considered
+-- for recognition.
+intentSummary_inputContexts :: Lens.Lens' IntentSummary (Prelude.Maybe [InputContext])
+intentSummary_inputContexts = Lens.lens (\IntentSummary' {inputContexts} -> inputContexts) (\s@IntentSummary' {} a -> s {inputContexts = a} :: IntentSummary) Prelude.. Lens.mapping Lens.coerced
+
+-- | The unique identifier assigned to the intent. Use this ID to get
+-- detailed information about the intent with the @DescribeIntent@
+-- operation.
+intentSummary_intentId :: Lens.Lens' IntentSummary (Prelude.Maybe Prelude.Text)
+intentSummary_intentId = Lens.lens (\IntentSummary' {intentId} -> intentId) (\s@IntentSummary' {} a -> s {intentId = a} :: IntentSummary)
+
+-- | The name of the intent.
+intentSummary_intentName :: Lens.Lens' IntentSummary (Prelude.Maybe Prelude.Text)
+intentSummary_intentName = Lens.lens (\IntentSummary' {intentName} -> intentName) (\s@IntentSummary' {} a -> s {intentName = a} :: IntentSummary)
+
+-- | The timestamp of the date and time that the intent was last updated.
+intentSummary_lastUpdatedDateTime :: Lens.Lens' IntentSummary (Prelude.Maybe Prelude.UTCTime)
+intentSummary_lastUpdatedDateTime = Lens.lens (\IntentSummary' {lastUpdatedDateTime} -> lastUpdatedDateTime) (\s@IntentSummary' {} a -> s {lastUpdatedDateTime = a} :: IntentSummary) Prelude.. Lens.mapping Data._Time
+
+-- | The output contexts that are activated when this intent is fulfilled.
+intentSummary_outputContexts :: Lens.Lens' IntentSummary (Prelude.Maybe [OutputContext])
+intentSummary_outputContexts = Lens.lens (\IntentSummary' {outputContexts} -> outputContexts) (\s@IntentSummary' {} a -> s {outputContexts = a} :: IntentSummary) Prelude.. Lens.mapping Lens.coerced
+
+-- | If this intent is derived from a built-in intent, the name of the parent
+-- intent.
+intentSummary_parentIntentSignature :: Lens.Lens' IntentSummary (Prelude.Maybe Prelude.Text)
+intentSummary_parentIntentSignature = Lens.lens (\IntentSummary' {parentIntentSignature} -> parentIntentSignature) (\s@IntentSummary' {} a -> s {parentIntentSignature = a} :: IntentSummary)
+
+instance Data.FromJSON IntentSummary where
+  parseJSON =
+    Data.withObject
+      "IntentSummary"
+      ( \x ->
+          IntentSummary'
+            Prelude.<$> (x Data..:? "description")
+            Prelude.<*> (x Data..:? "inputContexts" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "intentId")
+            Prelude.<*> (x Data..:? "intentName")
+            Prelude.<*> (x Data..:? "lastUpdatedDateTime")
+            Prelude.<*> (x Data..:? "outputContexts" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "parentIntentSignature")
+      )
+
+instance Prelude.Hashable IntentSummary where
+  hashWithSalt _salt IntentSummary' {..} =
+    _salt
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` inputContexts
+      `Prelude.hashWithSalt` intentId
+      `Prelude.hashWithSalt` intentName
+      `Prelude.hashWithSalt` lastUpdatedDateTime
+      `Prelude.hashWithSalt` outputContexts
+      `Prelude.hashWithSalt` parentIntentSignature
+
+instance Prelude.NFData IntentSummary where
+  rnf IntentSummary' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf inputContexts
+      `Prelude.seq` Prelude.rnf intentId
+      `Prelude.seq` Prelude.rnf intentName
+      `Prelude.seq` Prelude.rnf lastUpdatedDateTime
+      `Prelude.seq` Prelude.rnf outputContexts
+      `Prelude.seq` Prelude.rnf parentIntentSignature
diff --git a/gen/Amazonka/LexV2Models/Types/KendraConfiguration.hs b/gen/Amazonka/LexV2Models/Types/KendraConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/Types/KendraConfiguration.hs
@@ -0,0 +1,132 @@
+{-# 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.LexV2Models.Types.KendraConfiguration
+-- 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.LexV2Models.Types.KendraConfiguration 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
+
+-- | Provides configuration information for the AMAZON.KendraSearchIntent
+-- intent. When you use this intent, Amazon Lex searches the specified
+-- Amazon Kendra index and returns documents from the index that match the
+-- user\'s utterance.
+--
+-- /See:/ 'newKendraConfiguration' smart constructor.
+data KendraConfiguration = KendraConfiguration'
+  { -- | A query filter that Amazon Lex sends to Amazon Kendra to filter the
+    -- response from a query. The filter is in the format defined by Amazon
+    -- Kendra. For more information, see
+    -- <https://docs.aws.amazon.com/kendra/latest/dg/filtering.html Filtering queries>.
+    queryFilterString :: Prelude.Maybe Prelude.Text,
+    -- | Determines whether the AMAZON.KendraSearchIntent intent uses a custom
+    -- query string to query the Amazon Kendra index.
+    queryFilterStringEnabled :: Prelude.Maybe Prelude.Bool,
+    -- | The Amazon Resource Name (ARN) of the Amazon Kendra index that you want
+    -- the AMAZON.KendraSearchIntent intent to search. The index must be in the
+    -- same account and Region as the Amazon Lex bot.
+    kendraIndex :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'KendraConfiguration' 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:
+--
+-- 'queryFilterString', 'kendraConfiguration_queryFilterString' - A query filter that Amazon Lex sends to Amazon Kendra to filter the
+-- response from a query. The filter is in the format defined by Amazon
+-- Kendra. For more information, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/filtering.html Filtering queries>.
+--
+-- 'queryFilterStringEnabled', 'kendraConfiguration_queryFilterStringEnabled' - Determines whether the AMAZON.KendraSearchIntent intent uses a custom
+-- query string to query the Amazon Kendra index.
+--
+-- 'kendraIndex', 'kendraConfiguration_kendraIndex' - The Amazon Resource Name (ARN) of the Amazon Kendra index that you want
+-- the AMAZON.KendraSearchIntent intent to search. The index must be in the
+-- same account and Region as the Amazon Lex bot.
+newKendraConfiguration ::
+  -- | 'kendraIndex'
+  Prelude.Text ->
+  KendraConfiguration
+newKendraConfiguration pKendraIndex_ =
+  KendraConfiguration'
+    { queryFilterString =
+        Prelude.Nothing,
+      queryFilterStringEnabled = Prelude.Nothing,
+      kendraIndex = pKendraIndex_
+    }
+
+-- | A query filter that Amazon Lex sends to Amazon Kendra to filter the
+-- response from a query. The filter is in the format defined by Amazon
+-- Kendra. For more information, see
+-- <https://docs.aws.amazon.com/kendra/latest/dg/filtering.html Filtering queries>.
+kendraConfiguration_queryFilterString :: Lens.Lens' KendraConfiguration (Prelude.Maybe Prelude.Text)
+kendraConfiguration_queryFilterString = Lens.lens (\KendraConfiguration' {queryFilterString} -> queryFilterString) (\s@KendraConfiguration' {} a -> s {queryFilterString = a} :: KendraConfiguration)
+
+-- | Determines whether the AMAZON.KendraSearchIntent intent uses a custom
+-- query string to query the Amazon Kendra index.
+kendraConfiguration_queryFilterStringEnabled :: Lens.Lens' KendraConfiguration (Prelude.Maybe Prelude.Bool)
+kendraConfiguration_queryFilterStringEnabled = Lens.lens (\KendraConfiguration' {queryFilterStringEnabled} -> queryFilterStringEnabled) (\s@KendraConfiguration' {} a -> s {queryFilterStringEnabled = a} :: KendraConfiguration)
+
+-- | The Amazon Resource Name (ARN) of the Amazon Kendra index that you want
+-- the AMAZON.KendraSearchIntent intent to search. The index must be in the
+-- same account and Region as the Amazon Lex bot.
+kendraConfiguration_kendraIndex :: Lens.Lens' KendraConfiguration Prelude.Text
+kendraConfiguration_kendraIndex = Lens.lens (\KendraConfiguration' {kendraIndex} -> kendraIndex) (\s@KendraConfiguration' {} a -> s {kendraIndex = a} :: KendraConfiguration)
+
+instance Data.FromJSON KendraConfiguration where
+  parseJSON =
+    Data.withObject
+      "KendraConfiguration"
+      ( \x ->
+          KendraConfiguration'
+            Prelude.<$> (x Data..:? "queryFilterString")
+            Prelude.<*> (x Data..:? "queryFilterStringEnabled")
+            Prelude.<*> (x Data..: "kendraIndex")
+      )
+
+instance Prelude.Hashable KendraConfiguration where
+  hashWithSalt _salt KendraConfiguration' {..} =
+    _salt
+      `Prelude.hashWithSalt` queryFilterString
+      `Prelude.hashWithSalt` queryFilterStringEnabled
+      `Prelude.hashWithSalt` kendraIndex
+
+instance Prelude.NFData KendraConfiguration where
+  rnf KendraConfiguration' {..} =
+    Prelude.rnf queryFilterString
+      `Prelude.seq` Prelude.rnf queryFilterStringEnabled
+      `Prelude.seq` Prelude.rnf kendraIndex
+
+instance Data.ToJSON KendraConfiguration where
+  toJSON KendraConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("queryFilterString" Data..=)
+              Prelude.<$> queryFilterString,
+            ("queryFilterStringEnabled" Data..=)
+              Prelude.<$> queryFilterStringEnabled,
+            Prelude.Just ("kendraIndex" Data..= kendraIndex)
+          ]
+      )
diff --git a/gen/Amazonka/LexV2Models/Types/LambdaCodeHook.hs b/gen/Amazonka/LexV2Models/Types/LambdaCodeHook.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/Types/LambdaCodeHook.hs
@@ -0,0 +1,107 @@
+{-# 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.LexV2Models.Types.LambdaCodeHook
+-- 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.LexV2Models.Types.LambdaCodeHook 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
+
+-- | Specifies a Lambda function that verifies requests to a bot or fulfills
+-- the user\'s request to a bot.
+--
+-- /See:/ 'newLambdaCodeHook' smart constructor.
+data LambdaCodeHook = LambdaCodeHook'
+  { -- | The Amazon Resource Name (ARN) of the Lambda function.
+    lambdaARN :: Prelude.Text,
+    -- | The version of the request-response that you want Amazon Lex to use to
+    -- invoke your Lambda function.
+    codeHookInterfaceVersion :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'LambdaCodeHook' 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:
+--
+-- 'lambdaARN', 'lambdaCodeHook_lambdaARN' - The Amazon Resource Name (ARN) of the Lambda function.
+--
+-- 'codeHookInterfaceVersion', 'lambdaCodeHook_codeHookInterfaceVersion' - The version of the request-response that you want Amazon Lex to use to
+-- invoke your Lambda function.
+newLambdaCodeHook ::
+  -- | 'lambdaARN'
+  Prelude.Text ->
+  -- | 'codeHookInterfaceVersion'
+  Prelude.Text ->
+  LambdaCodeHook
+newLambdaCodeHook
+  pLambdaARN_
+  pCodeHookInterfaceVersion_ =
+    LambdaCodeHook'
+      { lambdaARN = pLambdaARN_,
+        codeHookInterfaceVersion =
+          pCodeHookInterfaceVersion_
+      }
+
+-- | The Amazon Resource Name (ARN) of the Lambda function.
+lambdaCodeHook_lambdaARN :: Lens.Lens' LambdaCodeHook Prelude.Text
+lambdaCodeHook_lambdaARN = Lens.lens (\LambdaCodeHook' {lambdaARN} -> lambdaARN) (\s@LambdaCodeHook' {} a -> s {lambdaARN = a} :: LambdaCodeHook)
+
+-- | The version of the request-response that you want Amazon Lex to use to
+-- invoke your Lambda function.
+lambdaCodeHook_codeHookInterfaceVersion :: Lens.Lens' LambdaCodeHook Prelude.Text
+lambdaCodeHook_codeHookInterfaceVersion = Lens.lens (\LambdaCodeHook' {codeHookInterfaceVersion} -> codeHookInterfaceVersion) (\s@LambdaCodeHook' {} a -> s {codeHookInterfaceVersion = a} :: LambdaCodeHook)
+
+instance Data.FromJSON LambdaCodeHook where
+  parseJSON =
+    Data.withObject
+      "LambdaCodeHook"
+      ( \x ->
+          LambdaCodeHook'
+            Prelude.<$> (x Data..: "lambdaARN")
+            Prelude.<*> (x Data..: "codeHookInterfaceVersion")
+      )
+
+instance Prelude.Hashable LambdaCodeHook where
+  hashWithSalt _salt LambdaCodeHook' {..} =
+    _salt
+      `Prelude.hashWithSalt` lambdaARN
+      `Prelude.hashWithSalt` codeHookInterfaceVersion
+
+instance Prelude.NFData LambdaCodeHook where
+  rnf LambdaCodeHook' {..} =
+    Prelude.rnf lambdaARN
+      `Prelude.seq` Prelude.rnf codeHookInterfaceVersion
+
+instance Data.ToJSON LambdaCodeHook where
+  toJSON LambdaCodeHook' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("lambdaARN" Data..= lambdaARN),
+            Prelude.Just
+              ( "codeHookInterfaceVersion"
+                  Data..= codeHookInterfaceVersion
+              )
+          ]
+      )
diff --git a/gen/Amazonka/LexV2Models/Types/LexTranscriptFilter.hs b/gen/Amazonka/LexV2Models/Types/LexTranscriptFilter.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/Types/LexTranscriptFilter.hs
@@ -0,0 +1,89 @@
+{-# 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.LexV2Models.Types.LexTranscriptFilter
+-- 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.LexV2Models.Types.LexTranscriptFilter where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LexV2Models.Types.DateRangeFilter
+import qualified Amazonka.Prelude as Prelude
+
+-- | The object that contains transcript filter details that are associated
+-- with a bot recommendation.
+--
+-- /See:/ 'newLexTranscriptFilter' smart constructor.
+data LexTranscriptFilter = LexTranscriptFilter'
+  { -- | The object that contains a date range filter that will be applied to the
+    -- transcript. Specify this object if you want Amazon Lex to only read the
+    -- files that are within the date range.
+    dateRangeFilter :: Prelude.Maybe DateRangeFilter
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'LexTranscriptFilter' 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:
+--
+-- 'dateRangeFilter', 'lexTranscriptFilter_dateRangeFilter' - The object that contains a date range filter that will be applied to the
+-- transcript. Specify this object if you want Amazon Lex to only read the
+-- files that are within the date range.
+newLexTranscriptFilter ::
+  LexTranscriptFilter
+newLexTranscriptFilter =
+  LexTranscriptFilter'
+    { dateRangeFilter =
+        Prelude.Nothing
+    }
+
+-- | The object that contains a date range filter that will be applied to the
+-- transcript. Specify this object if you want Amazon Lex to only read the
+-- files that are within the date range.
+lexTranscriptFilter_dateRangeFilter :: Lens.Lens' LexTranscriptFilter (Prelude.Maybe DateRangeFilter)
+lexTranscriptFilter_dateRangeFilter = Lens.lens (\LexTranscriptFilter' {dateRangeFilter} -> dateRangeFilter) (\s@LexTranscriptFilter' {} a -> s {dateRangeFilter = a} :: LexTranscriptFilter)
+
+instance Data.FromJSON LexTranscriptFilter where
+  parseJSON =
+    Data.withObject
+      "LexTranscriptFilter"
+      ( \x ->
+          LexTranscriptFilter'
+            Prelude.<$> (x Data..:? "dateRangeFilter")
+      )
+
+instance Prelude.Hashable LexTranscriptFilter where
+  hashWithSalt _salt LexTranscriptFilter' {..} =
+    _salt `Prelude.hashWithSalt` dateRangeFilter
+
+instance Prelude.NFData LexTranscriptFilter where
+  rnf LexTranscriptFilter' {..} =
+    Prelude.rnf dateRangeFilter
+
+instance Data.ToJSON LexTranscriptFilter where
+  toJSON LexTranscriptFilter' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("dateRangeFilter" Data..=)
+              Prelude.<$> dateRangeFilter
+          ]
+      )
diff --git a/gen/Amazonka/LexV2Models/Types/MergeStrategy.hs b/gen/Amazonka/LexV2Models/Types/MergeStrategy.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/Types/MergeStrategy.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.LexV2Models.Types.MergeStrategy
+-- 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.LexV2Models.Types.MergeStrategy
+  ( MergeStrategy
+      ( ..,
+        MergeStrategy_Append,
+        MergeStrategy_FailOnConflict,
+        MergeStrategy_Overwrite
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype MergeStrategy = MergeStrategy'
+  { fromMergeStrategy ::
+      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 MergeStrategy_Append :: MergeStrategy
+pattern MergeStrategy_Append = MergeStrategy' "Append"
+
+pattern MergeStrategy_FailOnConflict :: MergeStrategy
+pattern MergeStrategy_FailOnConflict = MergeStrategy' "FailOnConflict"
+
+pattern MergeStrategy_Overwrite :: MergeStrategy
+pattern MergeStrategy_Overwrite = MergeStrategy' "Overwrite"
+
+{-# COMPLETE
+  MergeStrategy_Append,
+  MergeStrategy_FailOnConflict,
+  MergeStrategy_Overwrite,
+  MergeStrategy'
+  #-}
diff --git a/gen/Amazonka/LexV2Models/Types/Message.hs b/gen/Amazonka/LexV2Models/Types/Message.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/Types/Message.hs
@@ -0,0 +1,128 @@
+{-# 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.LexV2Models.Types.Message
+-- 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.LexV2Models.Types.Message where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LexV2Models.Types.CustomPayload
+import Amazonka.LexV2Models.Types.ImageResponseCard
+import Amazonka.LexV2Models.Types.PlainTextMessage
+import Amazonka.LexV2Models.Types.SSMLMessage
+import qualified Amazonka.Prelude as Prelude
+
+-- | The object that provides message text and it\'s type.
+--
+-- /See:/ 'newMessage' smart constructor.
+data Message = Message'
+  { -- | A message in a custom format defined by the client application.
+    customPayload :: Prelude.Maybe CustomPayload,
+    -- | A message that defines a response card that the client application can
+    -- show to the user.
+    imageResponseCard :: Prelude.Maybe ImageResponseCard,
+    -- | A message in plain text format.
+    plainTextMessage :: Prelude.Maybe PlainTextMessage,
+    -- | A message in Speech Synthesis Markup Language (SSML).
+    ssmlMessage :: Prelude.Maybe SSMLMessage
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Message' 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:
+--
+-- 'customPayload', 'message_customPayload' - A message in a custom format defined by the client application.
+--
+-- 'imageResponseCard', 'message_imageResponseCard' - A message that defines a response card that the client application can
+-- show to the user.
+--
+-- 'plainTextMessage', 'message_plainTextMessage' - A message in plain text format.
+--
+-- 'ssmlMessage', 'message_ssmlMessage' - A message in Speech Synthesis Markup Language (SSML).
+newMessage ::
+  Message
+newMessage =
+  Message'
+    { customPayload = Prelude.Nothing,
+      imageResponseCard = Prelude.Nothing,
+      plainTextMessage = Prelude.Nothing,
+      ssmlMessage = Prelude.Nothing
+    }
+
+-- | A message in a custom format defined by the client application.
+message_customPayload :: Lens.Lens' Message (Prelude.Maybe CustomPayload)
+message_customPayload = Lens.lens (\Message' {customPayload} -> customPayload) (\s@Message' {} a -> s {customPayload = a} :: Message)
+
+-- | A message that defines a response card that the client application can
+-- show to the user.
+message_imageResponseCard :: Lens.Lens' Message (Prelude.Maybe ImageResponseCard)
+message_imageResponseCard = Lens.lens (\Message' {imageResponseCard} -> imageResponseCard) (\s@Message' {} a -> s {imageResponseCard = a} :: Message)
+
+-- | A message in plain text format.
+message_plainTextMessage :: Lens.Lens' Message (Prelude.Maybe PlainTextMessage)
+message_plainTextMessage = Lens.lens (\Message' {plainTextMessage} -> plainTextMessage) (\s@Message' {} a -> s {plainTextMessage = a} :: Message)
+
+-- | A message in Speech Synthesis Markup Language (SSML).
+message_ssmlMessage :: Lens.Lens' Message (Prelude.Maybe SSMLMessage)
+message_ssmlMessage = Lens.lens (\Message' {ssmlMessage} -> ssmlMessage) (\s@Message' {} a -> s {ssmlMessage = a} :: Message)
+
+instance Data.FromJSON Message where
+  parseJSON =
+    Data.withObject
+      "Message"
+      ( \x ->
+          Message'
+            Prelude.<$> (x Data..:? "customPayload")
+            Prelude.<*> (x Data..:? "imageResponseCard")
+            Prelude.<*> (x Data..:? "plainTextMessage")
+            Prelude.<*> (x Data..:? "ssmlMessage")
+      )
+
+instance Prelude.Hashable Message where
+  hashWithSalt _salt Message' {..} =
+    _salt
+      `Prelude.hashWithSalt` customPayload
+      `Prelude.hashWithSalt` imageResponseCard
+      `Prelude.hashWithSalt` plainTextMessage
+      `Prelude.hashWithSalt` ssmlMessage
+
+instance Prelude.NFData Message where
+  rnf Message' {..} =
+    Prelude.rnf customPayload
+      `Prelude.seq` Prelude.rnf imageResponseCard
+      `Prelude.seq` Prelude.rnf plainTextMessage
+      `Prelude.seq` Prelude.rnf ssmlMessage
+
+instance Data.ToJSON Message where
+  toJSON Message' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("customPayload" Data..=) Prelude.<$> customPayload,
+            ("imageResponseCard" Data..=)
+              Prelude.<$> imageResponseCard,
+            ("plainTextMessage" Data..=)
+              Prelude.<$> plainTextMessage,
+            ("ssmlMessage" Data..=) Prelude.<$> ssmlMessage
+          ]
+      )
diff --git a/gen/Amazonka/LexV2Models/Types/MessageGroup.hs b/gen/Amazonka/LexV2Models/Types/MessageGroup.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/Types/MessageGroup.hs
@@ -0,0 +1,102 @@
+{-# 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.LexV2Models.Types.MessageGroup
+-- 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.LexV2Models.Types.MessageGroup where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LexV2Models.Types.Message
+import qualified Amazonka.Prelude as Prelude
+
+-- | Provides one or more messages that Amazon Lex should send to the user.
+--
+-- /See:/ 'newMessageGroup' smart constructor.
+data MessageGroup = MessageGroup'
+  { -- | Message variations to send to the user. When variations are defined,
+    -- Amazon Lex chooses the primary message or one of the variations to send
+    -- to the user.
+    variations :: Prelude.Maybe [Message],
+    -- | The primary message that Amazon Lex should send to the user.
+    message :: Message
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'MessageGroup' 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:
+--
+-- 'variations', 'messageGroup_variations' - Message variations to send to the user. When variations are defined,
+-- Amazon Lex chooses the primary message or one of the variations to send
+-- to the user.
+--
+-- 'message', 'messageGroup_message' - The primary message that Amazon Lex should send to the user.
+newMessageGroup ::
+  -- | 'message'
+  Message ->
+  MessageGroup
+newMessageGroup pMessage_ =
+  MessageGroup'
+    { variations = Prelude.Nothing,
+      message = pMessage_
+    }
+
+-- | Message variations to send to the user. When variations are defined,
+-- Amazon Lex chooses the primary message or one of the variations to send
+-- to the user.
+messageGroup_variations :: Lens.Lens' MessageGroup (Prelude.Maybe [Message])
+messageGroup_variations = Lens.lens (\MessageGroup' {variations} -> variations) (\s@MessageGroup' {} a -> s {variations = a} :: MessageGroup) Prelude.. Lens.mapping Lens.coerced
+
+-- | The primary message that Amazon Lex should send to the user.
+messageGroup_message :: Lens.Lens' MessageGroup Message
+messageGroup_message = Lens.lens (\MessageGroup' {message} -> message) (\s@MessageGroup' {} a -> s {message = a} :: MessageGroup)
+
+instance Data.FromJSON MessageGroup where
+  parseJSON =
+    Data.withObject
+      "MessageGroup"
+      ( \x ->
+          MessageGroup'
+            Prelude.<$> (x Data..:? "variations" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..: "message")
+      )
+
+instance Prelude.Hashable MessageGroup where
+  hashWithSalt _salt MessageGroup' {..} =
+    _salt
+      `Prelude.hashWithSalt` variations
+      `Prelude.hashWithSalt` message
+
+instance Prelude.NFData MessageGroup where
+  rnf MessageGroup' {..} =
+    Prelude.rnf variations
+      `Prelude.seq` Prelude.rnf message
+
+instance Data.ToJSON MessageGroup where
+  toJSON MessageGroup' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("variations" Data..=) Prelude.<$> variations,
+            Prelude.Just ("message" Data..= message)
+          ]
+      )
diff --git a/gen/Amazonka/LexV2Models/Types/MessageSelectionStrategy.hs b/gen/Amazonka/LexV2Models/Types/MessageSelectionStrategy.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/Types/MessageSelectionStrategy.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.LexV2Models.Types.MessageSelectionStrategy
+-- 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.LexV2Models.Types.MessageSelectionStrategy
+  ( MessageSelectionStrategy
+      ( ..,
+        MessageSelectionStrategy_Ordered,
+        MessageSelectionStrategy_Random
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype MessageSelectionStrategy = MessageSelectionStrategy'
+  { fromMessageSelectionStrategy ::
+      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 MessageSelectionStrategy_Ordered :: MessageSelectionStrategy
+pattern MessageSelectionStrategy_Ordered = MessageSelectionStrategy' "Ordered"
+
+pattern MessageSelectionStrategy_Random :: MessageSelectionStrategy
+pattern MessageSelectionStrategy_Random = MessageSelectionStrategy' "Random"
+
+{-# COMPLETE
+  MessageSelectionStrategy_Ordered,
+  MessageSelectionStrategy_Random,
+  MessageSelectionStrategy'
+  #-}
diff --git a/gen/Amazonka/LexV2Models/Types/MultipleValuesSetting.hs b/gen/Amazonka/LexV2Models/Types/MultipleValuesSetting.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/Types/MultipleValuesSetting.hs
@@ -0,0 +1,105 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.LexV2Models.Types.MultipleValuesSetting
+-- 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.LexV2Models.Types.MultipleValuesSetting 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
+
+-- | Indicates whether a slot can return multiple values.
+--
+-- /See:/ 'newMultipleValuesSetting' smart constructor.
+data MultipleValuesSetting = MultipleValuesSetting'
+  { -- | Indicates whether a slot can return multiple values. When @true@, the
+    -- slot may return more than one value in a response. When @false@, the
+    -- slot returns only a single value.
+    --
+    -- Multi-value slots are only available in the en-US locale. If you set
+    -- this value to @true@ in any other locale, Amazon Lex throws a
+    -- @ValidationException@.
+    --
+    -- If the @allowMutlipleValues@ is not set, the default value is @false@.
+    allowMultipleValues :: Prelude.Maybe Prelude.Bool
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'MultipleValuesSetting' 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:
+--
+-- 'allowMultipleValues', 'multipleValuesSetting_allowMultipleValues' - Indicates whether a slot can return multiple values. When @true@, the
+-- slot may return more than one value in a response. When @false@, the
+-- slot returns only a single value.
+--
+-- Multi-value slots are only available in the en-US locale. If you set
+-- this value to @true@ in any other locale, Amazon Lex throws a
+-- @ValidationException@.
+--
+-- If the @allowMutlipleValues@ is not set, the default value is @false@.
+newMultipleValuesSetting ::
+  MultipleValuesSetting
+newMultipleValuesSetting =
+  MultipleValuesSetting'
+    { allowMultipleValues =
+        Prelude.Nothing
+    }
+
+-- | Indicates whether a slot can return multiple values. When @true@, the
+-- slot may return more than one value in a response. When @false@, the
+-- slot returns only a single value.
+--
+-- Multi-value slots are only available in the en-US locale. If you set
+-- this value to @true@ in any other locale, Amazon Lex throws a
+-- @ValidationException@.
+--
+-- If the @allowMutlipleValues@ is not set, the default value is @false@.
+multipleValuesSetting_allowMultipleValues :: Lens.Lens' MultipleValuesSetting (Prelude.Maybe Prelude.Bool)
+multipleValuesSetting_allowMultipleValues = Lens.lens (\MultipleValuesSetting' {allowMultipleValues} -> allowMultipleValues) (\s@MultipleValuesSetting' {} a -> s {allowMultipleValues = a} :: MultipleValuesSetting)
+
+instance Data.FromJSON MultipleValuesSetting where
+  parseJSON =
+    Data.withObject
+      "MultipleValuesSetting"
+      ( \x ->
+          MultipleValuesSetting'
+            Prelude.<$> (x Data..:? "allowMultipleValues")
+      )
+
+instance Prelude.Hashable MultipleValuesSetting where
+  hashWithSalt _salt MultipleValuesSetting' {..} =
+    _salt `Prelude.hashWithSalt` allowMultipleValues
+
+instance Prelude.NFData MultipleValuesSetting where
+  rnf MultipleValuesSetting' {..} =
+    Prelude.rnf allowMultipleValues
+
+instance Data.ToJSON MultipleValuesSetting where
+  toJSON MultipleValuesSetting' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("allowMultipleValues" Data..=)
+              Prelude.<$> allowMultipleValues
+          ]
+      )
diff --git a/gen/Amazonka/LexV2Models/Types/NewCustomVocabularyItem.hs b/gen/Amazonka/LexV2Models/Types/NewCustomVocabularyItem.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/Types/NewCustomVocabularyItem.hs
@@ -0,0 +1,107 @@
+{-# 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.LexV2Models.Types.NewCustomVocabularyItem
+-- 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.LexV2Models.Types.NewCustomVocabularyItem 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 new custom vocabulary item from the custom vocabulary list.
+--
+-- /See:/ 'newNewCustomVocabularyItem' smart constructor.
+data NewCustomVocabularyItem = NewCustomVocabularyItem'
+  { -- | The display as value assigned to the new custom vocabulary item from the
+    -- custom vocabulary list.
+    displayAs :: Prelude.Maybe Prelude.Text,
+    -- | The weight assigned to the new custom vocabulary item from the custom
+    -- vocabulary list.
+    weight :: Prelude.Maybe Prelude.Natural,
+    -- | The unique phrase for the new custom vocabulary item from the custom
+    -- vocabulary list.
+    phrase :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'NewCustomVocabularyItem' 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:
+--
+-- 'displayAs', 'newCustomVocabularyItem_displayAs' - The display as value assigned to the new custom vocabulary item from the
+-- custom vocabulary list.
+--
+-- 'weight', 'newCustomVocabularyItem_weight' - The weight assigned to the new custom vocabulary item from the custom
+-- vocabulary list.
+--
+-- 'phrase', 'newCustomVocabularyItem_phrase' - The unique phrase for the new custom vocabulary item from the custom
+-- vocabulary list.
+newNewCustomVocabularyItem ::
+  -- | 'phrase'
+  Prelude.Text ->
+  NewCustomVocabularyItem
+newNewCustomVocabularyItem pPhrase_ =
+  NewCustomVocabularyItem'
+    { displayAs =
+        Prelude.Nothing,
+      weight = Prelude.Nothing,
+      phrase = pPhrase_
+    }
+
+-- | The display as value assigned to the new custom vocabulary item from the
+-- custom vocabulary list.
+newCustomVocabularyItem_displayAs :: Lens.Lens' NewCustomVocabularyItem (Prelude.Maybe Prelude.Text)
+newCustomVocabularyItem_displayAs = Lens.lens (\NewCustomVocabularyItem' {displayAs} -> displayAs) (\s@NewCustomVocabularyItem' {} a -> s {displayAs = a} :: NewCustomVocabularyItem)
+
+-- | The weight assigned to the new custom vocabulary item from the custom
+-- vocabulary list.
+newCustomVocabularyItem_weight :: Lens.Lens' NewCustomVocabularyItem (Prelude.Maybe Prelude.Natural)
+newCustomVocabularyItem_weight = Lens.lens (\NewCustomVocabularyItem' {weight} -> weight) (\s@NewCustomVocabularyItem' {} a -> s {weight = a} :: NewCustomVocabularyItem)
+
+-- | The unique phrase for the new custom vocabulary item from the custom
+-- vocabulary list.
+newCustomVocabularyItem_phrase :: Lens.Lens' NewCustomVocabularyItem Prelude.Text
+newCustomVocabularyItem_phrase = Lens.lens (\NewCustomVocabularyItem' {phrase} -> phrase) (\s@NewCustomVocabularyItem' {} a -> s {phrase = a} :: NewCustomVocabularyItem)
+
+instance Prelude.Hashable NewCustomVocabularyItem where
+  hashWithSalt _salt NewCustomVocabularyItem' {..} =
+    _salt
+      `Prelude.hashWithSalt` displayAs
+      `Prelude.hashWithSalt` weight
+      `Prelude.hashWithSalt` phrase
+
+instance Prelude.NFData NewCustomVocabularyItem where
+  rnf NewCustomVocabularyItem' {..} =
+    Prelude.rnf displayAs
+      `Prelude.seq` Prelude.rnf weight
+      `Prelude.seq` Prelude.rnf phrase
+
+instance Data.ToJSON NewCustomVocabularyItem where
+  toJSON NewCustomVocabularyItem' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("displayAs" Data..=) Prelude.<$> displayAs,
+            ("weight" Data..=) Prelude.<$> weight,
+            Prelude.Just ("phrase" Data..= phrase)
+          ]
+      )
diff --git a/gen/Amazonka/LexV2Models/Types/ObfuscationSetting.hs b/gen/Amazonka/LexV2Models/Types/ObfuscationSetting.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/Types/ObfuscationSetting.hs
@@ -0,0 +1,89 @@
+{-# 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.LexV2Models.Types.ObfuscationSetting
+-- 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.LexV2Models.Types.ObfuscationSetting where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LexV2Models.Types.ObfuscationSettingType
+import qualified Amazonka.Prelude as Prelude
+
+-- | Determines whether Amazon Lex obscures slot values in conversation logs.
+--
+-- /See:/ 'newObfuscationSetting' smart constructor.
+data ObfuscationSetting = ObfuscationSetting'
+  { -- | Value that determines whether Amazon Lex obscures slot values in
+    -- conversation logs. The default is to obscure the values.
+    obfuscationSettingType :: ObfuscationSettingType
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ObfuscationSetting' 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:
+--
+-- 'obfuscationSettingType', 'obfuscationSetting_obfuscationSettingType' - Value that determines whether Amazon Lex obscures slot values in
+-- conversation logs. The default is to obscure the values.
+newObfuscationSetting ::
+  -- | 'obfuscationSettingType'
+  ObfuscationSettingType ->
+  ObfuscationSetting
+newObfuscationSetting pObfuscationSettingType_ =
+  ObfuscationSetting'
+    { obfuscationSettingType =
+        pObfuscationSettingType_
+    }
+
+-- | Value that determines whether Amazon Lex obscures slot values in
+-- conversation logs. The default is to obscure the values.
+obfuscationSetting_obfuscationSettingType :: Lens.Lens' ObfuscationSetting ObfuscationSettingType
+obfuscationSetting_obfuscationSettingType = Lens.lens (\ObfuscationSetting' {obfuscationSettingType} -> obfuscationSettingType) (\s@ObfuscationSetting' {} a -> s {obfuscationSettingType = a} :: ObfuscationSetting)
+
+instance Data.FromJSON ObfuscationSetting where
+  parseJSON =
+    Data.withObject
+      "ObfuscationSetting"
+      ( \x ->
+          ObfuscationSetting'
+            Prelude.<$> (x Data..: "obfuscationSettingType")
+      )
+
+instance Prelude.Hashable ObfuscationSetting where
+  hashWithSalt _salt ObfuscationSetting' {..} =
+    _salt `Prelude.hashWithSalt` obfuscationSettingType
+
+instance Prelude.NFData ObfuscationSetting where
+  rnf ObfuscationSetting' {..} =
+    Prelude.rnf obfuscationSettingType
+
+instance Data.ToJSON ObfuscationSetting where
+  toJSON ObfuscationSetting' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ( "obfuscationSettingType"
+                  Data..= obfuscationSettingType
+              )
+          ]
+      )
diff --git a/gen/Amazonka/LexV2Models/Types/ObfuscationSettingType.hs b/gen/Amazonka/LexV2Models/Types/ObfuscationSettingType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/Types/ObfuscationSettingType.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.LexV2Models.Types.ObfuscationSettingType
+-- 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.LexV2Models.Types.ObfuscationSettingType
+  ( ObfuscationSettingType
+      ( ..,
+        ObfuscationSettingType_DefaultObfuscation,
+        ObfuscationSettingType_None
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype ObfuscationSettingType = ObfuscationSettingType'
+  { fromObfuscationSettingType ::
+      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 ObfuscationSettingType_DefaultObfuscation :: ObfuscationSettingType
+pattern ObfuscationSettingType_DefaultObfuscation = ObfuscationSettingType' "DefaultObfuscation"
+
+pattern ObfuscationSettingType_None :: ObfuscationSettingType
+pattern ObfuscationSettingType_None = ObfuscationSettingType' "None"
+
+{-# COMPLETE
+  ObfuscationSettingType_DefaultObfuscation,
+  ObfuscationSettingType_None,
+  ObfuscationSettingType'
+  #-}
diff --git a/gen/Amazonka/LexV2Models/Types/OutputContext.hs b/gen/Amazonka/LexV2Models/Types/OutputContext.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/Types/OutputContext.hs
@@ -0,0 +1,129 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.LexV2Models.Types.OutputContext
+-- 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.LexV2Models.Types.OutputContext 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
+
+-- | Describes a session context that is activated when an intent is
+-- fulfilled.
+--
+-- /See:/ 'newOutputContext' smart constructor.
+data OutputContext = OutputContext'
+  { -- | The name of the output context.
+    name :: Prelude.Text,
+    -- | The amount of time, in seconds, that the output context should remain
+    -- active. The time is figured from the first time the context is sent to
+    -- the user.
+    timeToLiveInSeconds :: Prelude.Natural,
+    -- | The number of conversation turns that the output context should remain
+    -- active. The number of turns is counted from the first time that the
+    -- context is sent to the user.
+    turnsToLive :: Prelude.Natural
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'OutputContext' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'name', 'outputContext_name' - The name of the output context.
+--
+-- 'timeToLiveInSeconds', 'outputContext_timeToLiveInSeconds' - The amount of time, in seconds, that the output context should remain
+-- active. The time is figured from the first time the context is sent to
+-- the user.
+--
+-- 'turnsToLive', 'outputContext_turnsToLive' - The number of conversation turns that the output context should remain
+-- active. The number of turns is counted from the first time that the
+-- context is sent to the user.
+newOutputContext ::
+  -- | 'name'
+  Prelude.Text ->
+  -- | 'timeToLiveInSeconds'
+  Prelude.Natural ->
+  -- | 'turnsToLive'
+  Prelude.Natural ->
+  OutputContext
+newOutputContext
+  pName_
+  pTimeToLiveInSeconds_
+  pTurnsToLive_ =
+    OutputContext'
+      { name = pName_,
+        timeToLiveInSeconds = pTimeToLiveInSeconds_,
+        turnsToLive = pTurnsToLive_
+      }
+
+-- | The name of the output context.
+outputContext_name :: Lens.Lens' OutputContext Prelude.Text
+outputContext_name = Lens.lens (\OutputContext' {name} -> name) (\s@OutputContext' {} a -> s {name = a} :: OutputContext)
+
+-- | The amount of time, in seconds, that the output context should remain
+-- active. The time is figured from the first time the context is sent to
+-- the user.
+outputContext_timeToLiveInSeconds :: Lens.Lens' OutputContext Prelude.Natural
+outputContext_timeToLiveInSeconds = Lens.lens (\OutputContext' {timeToLiveInSeconds} -> timeToLiveInSeconds) (\s@OutputContext' {} a -> s {timeToLiveInSeconds = a} :: OutputContext)
+
+-- | The number of conversation turns that the output context should remain
+-- active. The number of turns is counted from the first time that the
+-- context is sent to the user.
+outputContext_turnsToLive :: Lens.Lens' OutputContext Prelude.Natural
+outputContext_turnsToLive = Lens.lens (\OutputContext' {turnsToLive} -> turnsToLive) (\s@OutputContext' {} a -> s {turnsToLive = a} :: OutputContext)
+
+instance Data.FromJSON OutputContext where
+  parseJSON =
+    Data.withObject
+      "OutputContext"
+      ( \x ->
+          OutputContext'
+            Prelude.<$> (x Data..: "name")
+            Prelude.<*> (x Data..: "timeToLiveInSeconds")
+            Prelude.<*> (x Data..: "turnsToLive")
+      )
+
+instance Prelude.Hashable OutputContext where
+  hashWithSalt _salt OutputContext' {..} =
+    _salt
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` timeToLiveInSeconds
+      `Prelude.hashWithSalt` turnsToLive
+
+instance Prelude.NFData OutputContext where
+  rnf OutputContext' {..} =
+    Prelude.rnf name
+      `Prelude.seq` Prelude.rnf timeToLiveInSeconds
+      `Prelude.seq` Prelude.rnf turnsToLive
+
+instance Data.ToJSON OutputContext where
+  toJSON OutputContext' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("name" Data..= name),
+            Prelude.Just
+              ("timeToLiveInSeconds" Data..= timeToLiveInSeconds),
+            Prelude.Just ("turnsToLive" Data..= turnsToLive)
+          ]
+      )
diff --git a/gen/Amazonka/LexV2Models/Types/PathFormat.hs b/gen/Amazonka/LexV2Models/Types/PathFormat.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/Types/PathFormat.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.LexV2Models.Types.PathFormat
+-- 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.LexV2Models.Types.PathFormat 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 object that contains a path format that will be applied when Amazon
+-- Lex reads the transcript file in the bucket you provide. Specify this
+-- object if you only want Lex to read a subset of files in your Amazon S3
+-- bucket.
+--
+-- /See:/ 'newPathFormat' smart constructor.
+data PathFormat = PathFormat'
+  { -- | A list of Amazon S3 prefixes that points to sub-folders in the Amazon S3
+    -- bucket. Specify this list if you only want Lex to read the files under
+    -- this set of sub-folders.
+    objectPrefixes :: Prelude.Maybe (Prelude.NonEmpty Prelude.Text)
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PathFormat' 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:
+--
+-- 'objectPrefixes', 'pathFormat_objectPrefixes' - A list of Amazon S3 prefixes that points to sub-folders in the Amazon S3
+-- bucket. Specify this list if you only want Lex to read the files under
+-- this set of sub-folders.
+newPathFormat ::
+  PathFormat
+newPathFormat =
+  PathFormat' {objectPrefixes = Prelude.Nothing}
+
+-- | A list of Amazon S3 prefixes that points to sub-folders in the Amazon S3
+-- bucket. Specify this list if you only want Lex to read the files under
+-- this set of sub-folders.
+pathFormat_objectPrefixes :: Lens.Lens' PathFormat (Prelude.Maybe (Prelude.NonEmpty Prelude.Text))
+pathFormat_objectPrefixes = Lens.lens (\PathFormat' {objectPrefixes} -> objectPrefixes) (\s@PathFormat' {} a -> s {objectPrefixes = a} :: PathFormat) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromJSON PathFormat where
+  parseJSON =
+    Data.withObject
+      "PathFormat"
+      ( \x ->
+          PathFormat'
+            Prelude.<$> (x Data..:? "objectPrefixes")
+      )
+
+instance Prelude.Hashable PathFormat where
+  hashWithSalt _salt PathFormat' {..} =
+    _salt `Prelude.hashWithSalt` objectPrefixes
+
+instance Prelude.NFData PathFormat where
+  rnf PathFormat' {..} = Prelude.rnf objectPrefixes
+
+instance Data.ToJSON PathFormat where
+  toJSON PathFormat' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("objectPrefixes" Data..=)
+              Prelude.<$> objectPrefixes
+          ]
+      )
diff --git a/gen/Amazonka/LexV2Models/Types/PlainTextMessage.hs b/gen/Amazonka/LexV2Models/Types/PlainTextMessage.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/Types/PlainTextMessage.hs
@@ -0,0 +1,76 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.LexV2Models.Types.PlainTextMessage
+-- 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.LexV2Models.Types.PlainTextMessage 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
+
+-- | Defines an ASCII text message to send to the user.
+--
+-- /See:/ 'newPlainTextMessage' smart constructor.
+data PlainTextMessage = PlainTextMessage'
+  { -- | The message to send to the user.
+    value :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PlainTextMessage' 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:
+--
+-- 'value', 'plainTextMessage_value' - The message to send to the user.
+newPlainTextMessage ::
+  -- | 'value'
+  Prelude.Text ->
+  PlainTextMessage
+newPlainTextMessage pValue_ =
+  PlainTextMessage' {value = pValue_}
+
+-- | The message to send to the user.
+plainTextMessage_value :: Lens.Lens' PlainTextMessage Prelude.Text
+plainTextMessage_value = Lens.lens (\PlainTextMessage' {value} -> value) (\s@PlainTextMessage' {} a -> s {value = a} :: PlainTextMessage)
+
+instance Data.FromJSON PlainTextMessage where
+  parseJSON =
+    Data.withObject
+      "PlainTextMessage"
+      ( \x ->
+          PlainTextMessage' Prelude.<$> (x Data..: "value")
+      )
+
+instance Prelude.Hashable PlainTextMessage where
+  hashWithSalt _salt PlainTextMessage' {..} =
+    _salt `Prelude.hashWithSalt` value
+
+instance Prelude.NFData PlainTextMessage where
+  rnf PlainTextMessage' {..} = Prelude.rnf value
+
+instance Data.ToJSON PlainTextMessage where
+  toJSON PlainTextMessage' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("value" Data..= value)]
+      )
diff --git a/gen/Amazonka/LexV2Models/Types/PostDialogCodeHookInvocationSpecification.hs b/gen/Amazonka/LexV2Models/Types/PostDialogCodeHookInvocationSpecification.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/Types/PostDialogCodeHookInvocationSpecification.hs
@@ -0,0 +1,234 @@
+{-# 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.LexV2Models.Types.PostDialogCodeHookInvocationSpecification
+-- 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.LexV2Models.Types.PostDialogCodeHookInvocationSpecification where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LexV2Models.Types.ConditionalSpecification
+import Amazonka.LexV2Models.Types.DialogState
+import Amazonka.LexV2Models.Types.ResponseSpecification
+import qualified Amazonka.Prelude as Prelude
+
+-- | Specifies next steps to run after the dialog code hook finishes.
+--
+-- /See:/ 'newPostDialogCodeHookInvocationSpecification' smart constructor.
+data PostDialogCodeHookInvocationSpecification = PostDialogCodeHookInvocationSpecification'
+  { -- | A list of conditional branches to evaluate after the dialog code hook
+    -- throws an exception or returns with the @State@ field of the @Intent@
+    -- object set to @Failed@.
+    failureConditional :: Prelude.Maybe ConditionalSpecification,
+    -- | Specifies the next step the bot runs after the dialog code hook throws
+    -- an exception or returns with the @State@ field of the @Intent@ object
+    -- set to @Failed@.
+    failureNextStep :: Prelude.Maybe DialogState,
+    failureResponse :: Prelude.Maybe ResponseSpecification,
+    -- | A list of conditional branches to evaluate after the dialog code hook
+    -- finishes successfully.
+    successConditional :: Prelude.Maybe ConditionalSpecification,
+    -- | Specifics the next step the bot runs after the dialog code hook finishes
+    -- successfully.
+    successNextStep :: Prelude.Maybe DialogState,
+    successResponse :: Prelude.Maybe ResponseSpecification,
+    -- | A list of conditional branches to evaluate if the code hook times out.
+    timeoutConditional :: Prelude.Maybe ConditionalSpecification,
+    -- | Specifies the next step that the bot runs when the code hook times out.
+    timeoutNextStep :: Prelude.Maybe DialogState,
+    timeoutResponse :: Prelude.Maybe ResponseSpecification
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PostDialogCodeHookInvocationSpecification' 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:
+--
+-- 'failureConditional', 'postDialogCodeHookInvocationSpecification_failureConditional' - A list of conditional branches to evaluate after the dialog code hook
+-- throws an exception or returns with the @State@ field of the @Intent@
+-- object set to @Failed@.
+--
+-- 'failureNextStep', 'postDialogCodeHookInvocationSpecification_failureNextStep' - Specifies the next step the bot runs after the dialog code hook throws
+-- an exception or returns with the @State@ field of the @Intent@ object
+-- set to @Failed@.
+--
+-- 'failureResponse', 'postDialogCodeHookInvocationSpecification_failureResponse' - Undocumented member.
+--
+-- 'successConditional', 'postDialogCodeHookInvocationSpecification_successConditional' - A list of conditional branches to evaluate after the dialog code hook
+-- finishes successfully.
+--
+-- 'successNextStep', 'postDialogCodeHookInvocationSpecification_successNextStep' - Specifics the next step the bot runs after the dialog code hook finishes
+-- successfully.
+--
+-- 'successResponse', 'postDialogCodeHookInvocationSpecification_successResponse' - Undocumented member.
+--
+-- 'timeoutConditional', 'postDialogCodeHookInvocationSpecification_timeoutConditional' - A list of conditional branches to evaluate if the code hook times out.
+--
+-- 'timeoutNextStep', 'postDialogCodeHookInvocationSpecification_timeoutNextStep' - Specifies the next step that the bot runs when the code hook times out.
+--
+-- 'timeoutResponse', 'postDialogCodeHookInvocationSpecification_timeoutResponse' - Undocumented member.
+newPostDialogCodeHookInvocationSpecification ::
+  PostDialogCodeHookInvocationSpecification
+newPostDialogCodeHookInvocationSpecification =
+  PostDialogCodeHookInvocationSpecification'
+    { failureConditional =
+        Prelude.Nothing,
+      failureNextStep =
+        Prelude.Nothing,
+      failureResponse =
+        Prelude.Nothing,
+      successConditional =
+        Prelude.Nothing,
+      successNextStep =
+        Prelude.Nothing,
+      successResponse =
+        Prelude.Nothing,
+      timeoutConditional =
+        Prelude.Nothing,
+      timeoutNextStep =
+        Prelude.Nothing,
+      timeoutResponse =
+        Prelude.Nothing
+    }
+
+-- | A list of conditional branches to evaluate after the dialog code hook
+-- throws an exception or returns with the @State@ field of the @Intent@
+-- object set to @Failed@.
+postDialogCodeHookInvocationSpecification_failureConditional :: Lens.Lens' PostDialogCodeHookInvocationSpecification (Prelude.Maybe ConditionalSpecification)
+postDialogCodeHookInvocationSpecification_failureConditional = Lens.lens (\PostDialogCodeHookInvocationSpecification' {failureConditional} -> failureConditional) (\s@PostDialogCodeHookInvocationSpecification' {} a -> s {failureConditional = a} :: PostDialogCodeHookInvocationSpecification)
+
+-- | Specifies the next step the bot runs after the dialog code hook throws
+-- an exception or returns with the @State@ field of the @Intent@ object
+-- set to @Failed@.
+postDialogCodeHookInvocationSpecification_failureNextStep :: Lens.Lens' PostDialogCodeHookInvocationSpecification (Prelude.Maybe DialogState)
+postDialogCodeHookInvocationSpecification_failureNextStep = Lens.lens (\PostDialogCodeHookInvocationSpecification' {failureNextStep} -> failureNextStep) (\s@PostDialogCodeHookInvocationSpecification' {} a -> s {failureNextStep = a} :: PostDialogCodeHookInvocationSpecification)
+
+-- | Undocumented member.
+postDialogCodeHookInvocationSpecification_failureResponse :: Lens.Lens' PostDialogCodeHookInvocationSpecification (Prelude.Maybe ResponseSpecification)
+postDialogCodeHookInvocationSpecification_failureResponse = Lens.lens (\PostDialogCodeHookInvocationSpecification' {failureResponse} -> failureResponse) (\s@PostDialogCodeHookInvocationSpecification' {} a -> s {failureResponse = a} :: PostDialogCodeHookInvocationSpecification)
+
+-- | A list of conditional branches to evaluate after the dialog code hook
+-- finishes successfully.
+postDialogCodeHookInvocationSpecification_successConditional :: Lens.Lens' PostDialogCodeHookInvocationSpecification (Prelude.Maybe ConditionalSpecification)
+postDialogCodeHookInvocationSpecification_successConditional = Lens.lens (\PostDialogCodeHookInvocationSpecification' {successConditional} -> successConditional) (\s@PostDialogCodeHookInvocationSpecification' {} a -> s {successConditional = a} :: PostDialogCodeHookInvocationSpecification)
+
+-- | Specifics the next step the bot runs after the dialog code hook finishes
+-- successfully.
+postDialogCodeHookInvocationSpecification_successNextStep :: Lens.Lens' PostDialogCodeHookInvocationSpecification (Prelude.Maybe DialogState)
+postDialogCodeHookInvocationSpecification_successNextStep = Lens.lens (\PostDialogCodeHookInvocationSpecification' {successNextStep} -> successNextStep) (\s@PostDialogCodeHookInvocationSpecification' {} a -> s {successNextStep = a} :: PostDialogCodeHookInvocationSpecification)
+
+-- | Undocumented member.
+postDialogCodeHookInvocationSpecification_successResponse :: Lens.Lens' PostDialogCodeHookInvocationSpecification (Prelude.Maybe ResponseSpecification)
+postDialogCodeHookInvocationSpecification_successResponse = Lens.lens (\PostDialogCodeHookInvocationSpecification' {successResponse} -> successResponse) (\s@PostDialogCodeHookInvocationSpecification' {} a -> s {successResponse = a} :: PostDialogCodeHookInvocationSpecification)
+
+-- | A list of conditional branches to evaluate if the code hook times out.
+postDialogCodeHookInvocationSpecification_timeoutConditional :: Lens.Lens' PostDialogCodeHookInvocationSpecification (Prelude.Maybe ConditionalSpecification)
+postDialogCodeHookInvocationSpecification_timeoutConditional = Lens.lens (\PostDialogCodeHookInvocationSpecification' {timeoutConditional} -> timeoutConditional) (\s@PostDialogCodeHookInvocationSpecification' {} a -> s {timeoutConditional = a} :: PostDialogCodeHookInvocationSpecification)
+
+-- | Specifies the next step that the bot runs when the code hook times out.
+postDialogCodeHookInvocationSpecification_timeoutNextStep :: Lens.Lens' PostDialogCodeHookInvocationSpecification (Prelude.Maybe DialogState)
+postDialogCodeHookInvocationSpecification_timeoutNextStep = Lens.lens (\PostDialogCodeHookInvocationSpecification' {timeoutNextStep} -> timeoutNextStep) (\s@PostDialogCodeHookInvocationSpecification' {} a -> s {timeoutNextStep = a} :: PostDialogCodeHookInvocationSpecification)
+
+-- | Undocumented member.
+postDialogCodeHookInvocationSpecification_timeoutResponse :: Lens.Lens' PostDialogCodeHookInvocationSpecification (Prelude.Maybe ResponseSpecification)
+postDialogCodeHookInvocationSpecification_timeoutResponse = Lens.lens (\PostDialogCodeHookInvocationSpecification' {timeoutResponse} -> timeoutResponse) (\s@PostDialogCodeHookInvocationSpecification' {} a -> s {timeoutResponse = a} :: PostDialogCodeHookInvocationSpecification)
+
+instance
+  Data.FromJSON
+    PostDialogCodeHookInvocationSpecification
+  where
+  parseJSON =
+    Data.withObject
+      "PostDialogCodeHookInvocationSpecification"
+      ( \x ->
+          PostDialogCodeHookInvocationSpecification'
+            Prelude.<$> (x Data..:? "failureConditional")
+            Prelude.<*> (x Data..:? "failureNextStep")
+            Prelude.<*> (x Data..:? "failureResponse")
+            Prelude.<*> (x Data..:? "successConditional")
+            Prelude.<*> (x Data..:? "successNextStep")
+            Prelude.<*> (x Data..:? "successResponse")
+            Prelude.<*> (x Data..:? "timeoutConditional")
+            Prelude.<*> (x Data..:? "timeoutNextStep")
+            Prelude.<*> (x Data..:? "timeoutResponse")
+      )
+
+instance
+  Prelude.Hashable
+    PostDialogCodeHookInvocationSpecification
+  where
+  hashWithSalt
+    _salt
+    PostDialogCodeHookInvocationSpecification' {..} =
+      _salt
+        `Prelude.hashWithSalt` failureConditional
+        `Prelude.hashWithSalt` failureNextStep
+        `Prelude.hashWithSalt` failureResponse
+        `Prelude.hashWithSalt` successConditional
+        `Prelude.hashWithSalt` successNextStep
+        `Prelude.hashWithSalt` successResponse
+        `Prelude.hashWithSalt` timeoutConditional
+        `Prelude.hashWithSalt` timeoutNextStep
+        `Prelude.hashWithSalt` timeoutResponse
+
+instance
+  Prelude.NFData
+    PostDialogCodeHookInvocationSpecification
+  where
+  rnf PostDialogCodeHookInvocationSpecification' {..} =
+    Prelude.rnf failureConditional
+      `Prelude.seq` Prelude.rnf failureNextStep
+      `Prelude.seq` Prelude.rnf failureResponse
+      `Prelude.seq` Prelude.rnf successConditional
+      `Prelude.seq` Prelude.rnf successNextStep
+      `Prelude.seq` Prelude.rnf successResponse
+      `Prelude.seq` Prelude.rnf timeoutConditional
+      `Prelude.seq` Prelude.rnf timeoutNextStep
+      `Prelude.seq` Prelude.rnf timeoutResponse
+
+instance
+  Data.ToJSON
+    PostDialogCodeHookInvocationSpecification
+  where
+  toJSON PostDialogCodeHookInvocationSpecification' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("failureConditional" Data..=)
+              Prelude.<$> failureConditional,
+            ("failureNextStep" Data..=)
+              Prelude.<$> failureNextStep,
+            ("failureResponse" Data..=)
+              Prelude.<$> failureResponse,
+            ("successConditional" Data..=)
+              Prelude.<$> successConditional,
+            ("successNextStep" Data..=)
+              Prelude.<$> successNextStep,
+            ("successResponse" Data..=)
+              Prelude.<$> successResponse,
+            ("timeoutConditional" Data..=)
+              Prelude.<$> timeoutConditional,
+            ("timeoutNextStep" Data..=)
+              Prelude.<$> timeoutNextStep,
+            ("timeoutResponse" Data..=)
+              Prelude.<$> timeoutResponse
+          ]
+      )
diff --git a/gen/Amazonka/LexV2Models/Types/PostFulfillmentStatusSpecification.hs b/gen/Amazonka/LexV2Models/Types/PostFulfillmentStatusSpecification.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/Types/PostFulfillmentStatusSpecification.hs
@@ -0,0 +1,234 @@
+{-# 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.LexV2Models.Types.PostFulfillmentStatusSpecification
+-- 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.LexV2Models.Types.PostFulfillmentStatusSpecification where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LexV2Models.Types.ConditionalSpecification
+import Amazonka.LexV2Models.Types.DialogState
+import Amazonka.LexV2Models.Types.ResponseSpecification
+import qualified Amazonka.Prelude as Prelude
+
+-- | Provides a setting that determines whether the post-fulfillment response
+-- is sent to the user. For more information, see
+-- <https://docs.aws.amazon.com/lexv2/latest/dg/streaming-progress.html#progress-complete>
+--
+-- /See:/ 'newPostFulfillmentStatusSpecification' smart constructor.
+data PostFulfillmentStatusSpecification = PostFulfillmentStatusSpecification'
+  { -- | A list of conditional branches to evaluate after the fulfillment code
+    -- hook throws an exception or returns with the @State@ field of the
+    -- @Intent@ object set to @Failed@.
+    failureConditional :: Prelude.Maybe ConditionalSpecification,
+    -- | Specifies the next step the bot runs after the fulfillment code hook
+    -- throws an exception or returns with the @State@ field of the @Intent@
+    -- object set to @Failed@.
+    failureNextStep :: Prelude.Maybe DialogState,
+    failureResponse :: Prelude.Maybe ResponseSpecification,
+    -- | A list of conditional branches to evaluate after the fulfillment code
+    -- hook finishes successfully.
+    successConditional :: Prelude.Maybe ConditionalSpecification,
+    -- | Specifies the next step in the conversation that Amazon Lex invokes when
+    -- the fulfillment code hook completes successfully.
+    successNextStep :: Prelude.Maybe DialogState,
+    successResponse :: Prelude.Maybe ResponseSpecification,
+    -- | A list of conditional branches to evaluate if the fulfillment code hook
+    -- times out.
+    timeoutConditional :: Prelude.Maybe ConditionalSpecification,
+    -- | Specifies the next step that the bot runs when the fulfillment code hook
+    -- times out.
+    timeoutNextStep :: Prelude.Maybe DialogState,
+    timeoutResponse :: Prelude.Maybe ResponseSpecification
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PostFulfillmentStatusSpecification' 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:
+--
+-- 'failureConditional', 'postFulfillmentStatusSpecification_failureConditional' - A list of conditional branches to evaluate after the fulfillment code
+-- hook throws an exception or returns with the @State@ field of the
+-- @Intent@ object set to @Failed@.
+--
+-- 'failureNextStep', 'postFulfillmentStatusSpecification_failureNextStep' - Specifies the next step the bot runs after the fulfillment code hook
+-- throws an exception or returns with the @State@ field of the @Intent@
+-- object set to @Failed@.
+--
+-- 'failureResponse', 'postFulfillmentStatusSpecification_failureResponse' - Undocumented member.
+--
+-- 'successConditional', 'postFulfillmentStatusSpecification_successConditional' - A list of conditional branches to evaluate after the fulfillment code
+-- hook finishes successfully.
+--
+-- 'successNextStep', 'postFulfillmentStatusSpecification_successNextStep' - Specifies the next step in the conversation that Amazon Lex invokes when
+-- the fulfillment code hook completes successfully.
+--
+-- 'successResponse', 'postFulfillmentStatusSpecification_successResponse' - Undocumented member.
+--
+-- 'timeoutConditional', 'postFulfillmentStatusSpecification_timeoutConditional' - A list of conditional branches to evaluate if the fulfillment code hook
+-- times out.
+--
+-- 'timeoutNextStep', 'postFulfillmentStatusSpecification_timeoutNextStep' - Specifies the next step that the bot runs when the fulfillment code hook
+-- times out.
+--
+-- 'timeoutResponse', 'postFulfillmentStatusSpecification_timeoutResponse' - Undocumented member.
+newPostFulfillmentStatusSpecification ::
+  PostFulfillmentStatusSpecification
+newPostFulfillmentStatusSpecification =
+  PostFulfillmentStatusSpecification'
+    { failureConditional =
+        Prelude.Nothing,
+      failureNextStep = Prelude.Nothing,
+      failureResponse = Prelude.Nothing,
+      successConditional = Prelude.Nothing,
+      successNextStep = Prelude.Nothing,
+      successResponse = Prelude.Nothing,
+      timeoutConditional = Prelude.Nothing,
+      timeoutNextStep = Prelude.Nothing,
+      timeoutResponse = Prelude.Nothing
+    }
+
+-- | A list of conditional branches to evaluate after the fulfillment code
+-- hook throws an exception or returns with the @State@ field of the
+-- @Intent@ object set to @Failed@.
+postFulfillmentStatusSpecification_failureConditional :: Lens.Lens' PostFulfillmentStatusSpecification (Prelude.Maybe ConditionalSpecification)
+postFulfillmentStatusSpecification_failureConditional = Lens.lens (\PostFulfillmentStatusSpecification' {failureConditional} -> failureConditional) (\s@PostFulfillmentStatusSpecification' {} a -> s {failureConditional = a} :: PostFulfillmentStatusSpecification)
+
+-- | Specifies the next step the bot runs after the fulfillment code hook
+-- throws an exception or returns with the @State@ field of the @Intent@
+-- object set to @Failed@.
+postFulfillmentStatusSpecification_failureNextStep :: Lens.Lens' PostFulfillmentStatusSpecification (Prelude.Maybe DialogState)
+postFulfillmentStatusSpecification_failureNextStep = Lens.lens (\PostFulfillmentStatusSpecification' {failureNextStep} -> failureNextStep) (\s@PostFulfillmentStatusSpecification' {} a -> s {failureNextStep = a} :: PostFulfillmentStatusSpecification)
+
+-- | Undocumented member.
+postFulfillmentStatusSpecification_failureResponse :: Lens.Lens' PostFulfillmentStatusSpecification (Prelude.Maybe ResponseSpecification)
+postFulfillmentStatusSpecification_failureResponse = Lens.lens (\PostFulfillmentStatusSpecification' {failureResponse} -> failureResponse) (\s@PostFulfillmentStatusSpecification' {} a -> s {failureResponse = a} :: PostFulfillmentStatusSpecification)
+
+-- | A list of conditional branches to evaluate after the fulfillment code
+-- hook finishes successfully.
+postFulfillmentStatusSpecification_successConditional :: Lens.Lens' PostFulfillmentStatusSpecification (Prelude.Maybe ConditionalSpecification)
+postFulfillmentStatusSpecification_successConditional = Lens.lens (\PostFulfillmentStatusSpecification' {successConditional} -> successConditional) (\s@PostFulfillmentStatusSpecification' {} a -> s {successConditional = a} :: PostFulfillmentStatusSpecification)
+
+-- | Specifies the next step in the conversation that Amazon Lex invokes when
+-- the fulfillment code hook completes successfully.
+postFulfillmentStatusSpecification_successNextStep :: Lens.Lens' PostFulfillmentStatusSpecification (Prelude.Maybe DialogState)
+postFulfillmentStatusSpecification_successNextStep = Lens.lens (\PostFulfillmentStatusSpecification' {successNextStep} -> successNextStep) (\s@PostFulfillmentStatusSpecification' {} a -> s {successNextStep = a} :: PostFulfillmentStatusSpecification)
+
+-- | Undocumented member.
+postFulfillmentStatusSpecification_successResponse :: Lens.Lens' PostFulfillmentStatusSpecification (Prelude.Maybe ResponseSpecification)
+postFulfillmentStatusSpecification_successResponse = Lens.lens (\PostFulfillmentStatusSpecification' {successResponse} -> successResponse) (\s@PostFulfillmentStatusSpecification' {} a -> s {successResponse = a} :: PostFulfillmentStatusSpecification)
+
+-- | A list of conditional branches to evaluate if the fulfillment code hook
+-- times out.
+postFulfillmentStatusSpecification_timeoutConditional :: Lens.Lens' PostFulfillmentStatusSpecification (Prelude.Maybe ConditionalSpecification)
+postFulfillmentStatusSpecification_timeoutConditional = Lens.lens (\PostFulfillmentStatusSpecification' {timeoutConditional} -> timeoutConditional) (\s@PostFulfillmentStatusSpecification' {} a -> s {timeoutConditional = a} :: PostFulfillmentStatusSpecification)
+
+-- | Specifies the next step that the bot runs when the fulfillment code hook
+-- times out.
+postFulfillmentStatusSpecification_timeoutNextStep :: Lens.Lens' PostFulfillmentStatusSpecification (Prelude.Maybe DialogState)
+postFulfillmentStatusSpecification_timeoutNextStep = Lens.lens (\PostFulfillmentStatusSpecification' {timeoutNextStep} -> timeoutNextStep) (\s@PostFulfillmentStatusSpecification' {} a -> s {timeoutNextStep = a} :: PostFulfillmentStatusSpecification)
+
+-- | Undocumented member.
+postFulfillmentStatusSpecification_timeoutResponse :: Lens.Lens' PostFulfillmentStatusSpecification (Prelude.Maybe ResponseSpecification)
+postFulfillmentStatusSpecification_timeoutResponse = Lens.lens (\PostFulfillmentStatusSpecification' {timeoutResponse} -> timeoutResponse) (\s@PostFulfillmentStatusSpecification' {} a -> s {timeoutResponse = a} :: PostFulfillmentStatusSpecification)
+
+instance
+  Data.FromJSON
+    PostFulfillmentStatusSpecification
+  where
+  parseJSON =
+    Data.withObject
+      "PostFulfillmentStatusSpecification"
+      ( \x ->
+          PostFulfillmentStatusSpecification'
+            Prelude.<$> (x Data..:? "failureConditional")
+            Prelude.<*> (x Data..:? "failureNextStep")
+            Prelude.<*> (x Data..:? "failureResponse")
+            Prelude.<*> (x Data..:? "successConditional")
+            Prelude.<*> (x Data..:? "successNextStep")
+            Prelude.<*> (x Data..:? "successResponse")
+            Prelude.<*> (x Data..:? "timeoutConditional")
+            Prelude.<*> (x Data..:? "timeoutNextStep")
+            Prelude.<*> (x Data..:? "timeoutResponse")
+      )
+
+instance
+  Prelude.Hashable
+    PostFulfillmentStatusSpecification
+  where
+  hashWithSalt
+    _salt
+    PostFulfillmentStatusSpecification' {..} =
+      _salt
+        `Prelude.hashWithSalt` failureConditional
+        `Prelude.hashWithSalt` failureNextStep
+        `Prelude.hashWithSalt` failureResponse
+        `Prelude.hashWithSalt` successConditional
+        `Prelude.hashWithSalt` successNextStep
+        `Prelude.hashWithSalt` successResponse
+        `Prelude.hashWithSalt` timeoutConditional
+        `Prelude.hashWithSalt` timeoutNextStep
+        `Prelude.hashWithSalt` timeoutResponse
+
+instance
+  Prelude.NFData
+    PostFulfillmentStatusSpecification
+  where
+  rnf PostFulfillmentStatusSpecification' {..} =
+    Prelude.rnf failureConditional
+      `Prelude.seq` Prelude.rnf failureNextStep
+      `Prelude.seq` Prelude.rnf failureResponse
+      `Prelude.seq` Prelude.rnf successConditional
+      `Prelude.seq` Prelude.rnf successNextStep
+      `Prelude.seq` Prelude.rnf successResponse
+      `Prelude.seq` Prelude.rnf timeoutConditional
+      `Prelude.seq` Prelude.rnf timeoutNextStep
+      `Prelude.seq` Prelude.rnf timeoutResponse
+
+instance
+  Data.ToJSON
+    PostFulfillmentStatusSpecification
+  where
+  toJSON PostFulfillmentStatusSpecification' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("failureConditional" Data..=)
+              Prelude.<$> failureConditional,
+            ("failureNextStep" Data..=)
+              Prelude.<$> failureNextStep,
+            ("failureResponse" Data..=)
+              Prelude.<$> failureResponse,
+            ("successConditional" Data..=)
+              Prelude.<$> successConditional,
+            ("successNextStep" Data..=)
+              Prelude.<$> successNextStep,
+            ("successResponse" Data..=)
+              Prelude.<$> successResponse,
+            ("timeoutConditional" Data..=)
+              Prelude.<$> timeoutConditional,
+            ("timeoutNextStep" Data..=)
+              Prelude.<$> timeoutNextStep,
+            ("timeoutResponse" Data..=)
+              Prelude.<$> timeoutResponse
+          ]
+      )
diff --git a/gen/Amazonka/LexV2Models/Types/Principal.hs b/gen/Amazonka/LexV2Models/Types/Principal.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/Types/Principal.hs
@@ -0,0 +1,89 @@
+{-# 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.LexV2Models.Types.Principal
+-- 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.LexV2Models.Types.Principal 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 IAM principal that you allowing or denying access to an Amazon Lex
+-- action. You must provide a @service@ or an @arn@, but not both in the
+-- same statement. For more information, see
+-- <https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_principal.html AWS JSON policy elements: Principal>
+-- .
+--
+-- /See:/ 'newPrincipal' smart constructor.
+data Principal = Principal'
+  { -- | The Amazon Resource Name (ARN) of the principal.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | The name of the AWS service that should allowed or denied access to an
+    -- Amazon Lex action.
+    service :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Principal' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'arn', 'principal_arn' - The Amazon Resource Name (ARN) of the principal.
+--
+-- 'service', 'principal_service' - The name of the AWS service that should allowed or denied access to an
+-- Amazon Lex action.
+newPrincipal ::
+  Principal
+newPrincipal =
+  Principal'
+    { arn = Prelude.Nothing,
+      service = Prelude.Nothing
+    }
+
+-- | The Amazon Resource Name (ARN) of the principal.
+principal_arn :: Lens.Lens' Principal (Prelude.Maybe Prelude.Text)
+principal_arn = Lens.lens (\Principal' {arn} -> arn) (\s@Principal' {} a -> s {arn = a} :: Principal)
+
+-- | The name of the AWS service that should allowed or denied access to an
+-- Amazon Lex action.
+principal_service :: Lens.Lens' Principal (Prelude.Maybe Prelude.Text)
+principal_service = Lens.lens (\Principal' {service} -> service) (\s@Principal' {} a -> s {service = a} :: Principal)
+
+instance Prelude.Hashable Principal where
+  hashWithSalt _salt Principal' {..} =
+    _salt
+      `Prelude.hashWithSalt` arn
+      `Prelude.hashWithSalt` service
+
+instance Prelude.NFData Principal where
+  rnf Principal' {..} =
+    Prelude.rnf arn `Prelude.seq` Prelude.rnf service
+
+instance Data.ToJSON Principal where
+  toJSON Principal' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("arn" Data..=) Prelude.<$> arn,
+            ("service" Data..=) Prelude.<$> service
+          ]
+      )
diff --git a/gen/Amazonka/LexV2Models/Types/PromptAttempt.hs b/gen/Amazonka/LexV2Models/Types/PromptAttempt.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/Types/PromptAttempt.hs
@@ -0,0 +1,92 @@
+{-# 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.LexV2Models.Types.PromptAttempt
+-- 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.LexV2Models.Types.PromptAttempt
+  ( PromptAttempt
+      ( ..,
+        PromptAttempt_Initial,
+        PromptAttempt_Retry1,
+        PromptAttempt_Retry2,
+        PromptAttempt_Retry3,
+        PromptAttempt_Retry4,
+        PromptAttempt_Retry5
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | The attempt name of attempts of a prompt.
+newtype PromptAttempt = PromptAttempt'
+  { fromPromptAttempt ::
+      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 PromptAttempt_Initial :: PromptAttempt
+pattern PromptAttempt_Initial = PromptAttempt' "Initial"
+
+pattern PromptAttempt_Retry1 :: PromptAttempt
+pattern PromptAttempt_Retry1 = PromptAttempt' "Retry1"
+
+pattern PromptAttempt_Retry2 :: PromptAttempt
+pattern PromptAttempt_Retry2 = PromptAttempt' "Retry2"
+
+pattern PromptAttempt_Retry3 :: PromptAttempt
+pattern PromptAttempt_Retry3 = PromptAttempt' "Retry3"
+
+pattern PromptAttempt_Retry4 :: PromptAttempt
+pattern PromptAttempt_Retry4 = PromptAttempt' "Retry4"
+
+pattern PromptAttempt_Retry5 :: PromptAttempt
+pattern PromptAttempt_Retry5 = PromptAttempt' "Retry5"
+
+{-# COMPLETE
+  PromptAttempt_Initial,
+  PromptAttempt_Retry1,
+  PromptAttempt_Retry2,
+  PromptAttempt_Retry3,
+  PromptAttempt_Retry4,
+  PromptAttempt_Retry5,
+  PromptAttempt'
+  #-}
diff --git a/gen/Amazonka/LexV2Models/Types/PromptAttemptSpecification.hs b/gen/Amazonka/LexV2Models/Types/PromptAttemptSpecification.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/Types/PromptAttemptSpecification.hs
@@ -0,0 +1,133 @@
+{-# 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.LexV2Models.Types.PromptAttemptSpecification
+-- 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.LexV2Models.Types.PromptAttemptSpecification where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LexV2Models.Types.AllowedInputTypes
+import Amazonka.LexV2Models.Types.AudioAndDTMFInputSpecification
+import Amazonka.LexV2Models.Types.TextInputSpecification
+import qualified Amazonka.Prelude as Prelude
+
+-- | Specifies the settings on a prompt attempt.
+--
+-- /See:/ 'newPromptAttemptSpecification' smart constructor.
+data PromptAttemptSpecification = PromptAttemptSpecification'
+  { -- | Indicates whether the user can interrupt a speech prompt attempt from
+    -- the bot.
+    allowInterrupt :: Prelude.Maybe Prelude.Bool,
+    -- | Specifies the settings on audio and DTMF input.
+    audioAndDTMFInputSpecification :: Prelude.Maybe AudioAndDTMFInputSpecification,
+    -- | Specifies the settings on text input.
+    textInputSpecification :: Prelude.Maybe TextInputSpecification,
+    -- | Indicates the allowed input types of the prompt attempt.
+    allowedInputTypes :: AllowedInputTypes
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PromptAttemptSpecification' 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:
+--
+-- 'allowInterrupt', 'promptAttemptSpecification_allowInterrupt' - Indicates whether the user can interrupt a speech prompt attempt from
+-- the bot.
+--
+-- 'audioAndDTMFInputSpecification', 'promptAttemptSpecification_audioAndDTMFInputSpecification' - Specifies the settings on audio and DTMF input.
+--
+-- 'textInputSpecification', 'promptAttemptSpecification_textInputSpecification' - Specifies the settings on text input.
+--
+-- 'allowedInputTypes', 'promptAttemptSpecification_allowedInputTypes' - Indicates the allowed input types of the prompt attempt.
+newPromptAttemptSpecification ::
+  -- | 'allowedInputTypes'
+  AllowedInputTypes ->
+  PromptAttemptSpecification
+newPromptAttemptSpecification pAllowedInputTypes_ =
+  PromptAttemptSpecification'
+    { allowInterrupt =
+        Prelude.Nothing,
+      audioAndDTMFInputSpecification =
+        Prelude.Nothing,
+      textInputSpecification = Prelude.Nothing,
+      allowedInputTypes = pAllowedInputTypes_
+    }
+
+-- | Indicates whether the user can interrupt a speech prompt attempt from
+-- the bot.
+promptAttemptSpecification_allowInterrupt :: Lens.Lens' PromptAttemptSpecification (Prelude.Maybe Prelude.Bool)
+promptAttemptSpecification_allowInterrupt = Lens.lens (\PromptAttemptSpecification' {allowInterrupt} -> allowInterrupt) (\s@PromptAttemptSpecification' {} a -> s {allowInterrupt = a} :: PromptAttemptSpecification)
+
+-- | Specifies the settings on audio and DTMF input.
+promptAttemptSpecification_audioAndDTMFInputSpecification :: Lens.Lens' PromptAttemptSpecification (Prelude.Maybe AudioAndDTMFInputSpecification)
+promptAttemptSpecification_audioAndDTMFInputSpecification = Lens.lens (\PromptAttemptSpecification' {audioAndDTMFInputSpecification} -> audioAndDTMFInputSpecification) (\s@PromptAttemptSpecification' {} a -> s {audioAndDTMFInputSpecification = a} :: PromptAttemptSpecification)
+
+-- | Specifies the settings on text input.
+promptAttemptSpecification_textInputSpecification :: Lens.Lens' PromptAttemptSpecification (Prelude.Maybe TextInputSpecification)
+promptAttemptSpecification_textInputSpecification = Lens.lens (\PromptAttemptSpecification' {textInputSpecification} -> textInputSpecification) (\s@PromptAttemptSpecification' {} a -> s {textInputSpecification = a} :: PromptAttemptSpecification)
+
+-- | Indicates the allowed input types of the prompt attempt.
+promptAttemptSpecification_allowedInputTypes :: Lens.Lens' PromptAttemptSpecification AllowedInputTypes
+promptAttemptSpecification_allowedInputTypes = Lens.lens (\PromptAttemptSpecification' {allowedInputTypes} -> allowedInputTypes) (\s@PromptAttemptSpecification' {} a -> s {allowedInputTypes = a} :: PromptAttemptSpecification)
+
+instance Data.FromJSON PromptAttemptSpecification where
+  parseJSON =
+    Data.withObject
+      "PromptAttemptSpecification"
+      ( \x ->
+          PromptAttemptSpecification'
+            Prelude.<$> (x Data..:? "allowInterrupt")
+            Prelude.<*> (x Data..:? "audioAndDTMFInputSpecification")
+            Prelude.<*> (x Data..:? "textInputSpecification")
+            Prelude.<*> (x Data..: "allowedInputTypes")
+      )
+
+instance Prelude.Hashable PromptAttemptSpecification where
+  hashWithSalt _salt PromptAttemptSpecification' {..} =
+    _salt
+      `Prelude.hashWithSalt` allowInterrupt
+      `Prelude.hashWithSalt` audioAndDTMFInputSpecification
+      `Prelude.hashWithSalt` textInputSpecification
+      `Prelude.hashWithSalt` allowedInputTypes
+
+instance Prelude.NFData PromptAttemptSpecification where
+  rnf PromptAttemptSpecification' {..} =
+    Prelude.rnf allowInterrupt
+      `Prelude.seq` Prelude.rnf audioAndDTMFInputSpecification
+      `Prelude.seq` Prelude.rnf textInputSpecification
+      `Prelude.seq` Prelude.rnf allowedInputTypes
+
+instance Data.ToJSON PromptAttemptSpecification where
+  toJSON PromptAttemptSpecification' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("allowInterrupt" Data..=)
+              Prelude.<$> allowInterrupt,
+            ("audioAndDTMFInputSpecification" Data..=)
+              Prelude.<$> audioAndDTMFInputSpecification,
+            ("textInputSpecification" Data..=)
+              Prelude.<$> textInputSpecification,
+            Prelude.Just
+              ("allowedInputTypes" Data..= allowedInputTypes)
+          ]
+      )
diff --git a/gen/Amazonka/LexV2Models/Types/PromptSpecification.hs b/gen/Amazonka/LexV2Models/Types/PromptSpecification.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/Types/PromptSpecification.hs
@@ -0,0 +1,154 @@
+{-# 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.LexV2Models.Types.PromptSpecification
+-- 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.LexV2Models.Types.PromptSpecification where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LexV2Models.Types.MessageGroup
+import Amazonka.LexV2Models.Types.MessageSelectionStrategy
+import Amazonka.LexV2Models.Types.PromptAttempt
+import Amazonka.LexV2Models.Types.PromptAttemptSpecification
+import qualified Amazonka.Prelude as Prelude
+
+-- | Specifies a list of message groups that Amazon Lex sends to a user to
+-- elicit a response.
+--
+-- /See:/ 'newPromptSpecification' smart constructor.
+data PromptSpecification = PromptSpecification'
+  { -- | Indicates whether the user can interrupt a speech prompt from the bot.
+    allowInterrupt :: Prelude.Maybe Prelude.Bool,
+    -- | Indicates how a message is selected from a message group among retries.
+    messageSelectionStrategy :: Prelude.Maybe MessageSelectionStrategy,
+    -- | Specifies the advanced settings on each attempt of the prompt.
+    promptAttemptsSpecification :: Prelude.Maybe (Prelude.HashMap PromptAttempt PromptAttemptSpecification),
+    -- | A collection of messages that Amazon Lex can send to the user. Amazon
+    -- Lex chooses the actual message to send at runtime.
+    messageGroups :: Prelude.NonEmpty MessageGroup,
+    -- | The maximum number of times the bot tries to elicit a response from the
+    -- user using this prompt.
+    maxRetries :: Prelude.Natural
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PromptSpecification' 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:
+--
+-- 'allowInterrupt', 'promptSpecification_allowInterrupt' - Indicates whether the user can interrupt a speech prompt from the bot.
+--
+-- 'messageSelectionStrategy', 'promptSpecification_messageSelectionStrategy' - Indicates how a message is selected from a message group among retries.
+--
+-- 'promptAttemptsSpecification', 'promptSpecification_promptAttemptsSpecification' - Specifies the advanced settings on each attempt of the prompt.
+--
+-- 'messageGroups', 'promptSpecification_messageGroups' - A collection of messages that Amazon Lex can send to the user. Amazon
+-- Lex chooses the actual message to send at runtime.
+--
+-- 'maxRetries', 'promptSpecification_maxRetries' - The maximum number of times the bot tries to elicit a response from the
+-- user using this prompt.
+newPromptSpecification ::
+  -- | 'messageGroups'
+  Prelude.NonEmpty MessageGroup ->
+  -- | 'maxRetries'
+  Prelude.Natural ->
+  PromptSpecification
+newPromptSpecification pMessageGroups_ pMaxRetries_ =
+  PromptSpecification'
+    { allowInterrupt =
+        Prelude.Nothing,
+      messageSelectionStrategy = Prelude.Nothing,
+      promptAttemptsSpecification = Prelude.Nothing,
+      messageGroups = Lens.coerced Lens.# pMessageGroups_,
+      maxRetries = pMaxRetries_
+    }
+
+-- | Indicates whether the user can interrupt a speech prompt from the bot.
+promptSpecification_allowInterrupt :: Lens.Lens' PromptSpecification (Prelude.Maybe Prelude.Bool)
+promptSpecification_allowInterrupt = Lens.lens (\PromptSpecification' {allowInterrupt} -> allowInterrupt) (\s@PromptSpecification' {} a -> s {allowInterrupt = a} :: PromptSpecification)
+
+-- | Indicates how a message is selected from a message group among retries.
+promptSpecification_messageSelectionStrategy :: Lens.Lens' PromptSpecification (Prelude.Maybe MessageSelectionStrategy)
+promptSpecification_messageSelectionStrategy = Lens.lens (\PromptSpecification' {messageSelectionStrategy} -> messageSelectionStrategy) (\s@PromptSpecification' {} a -> s {messageSelectionStrategy = a} :: PromptSpecification)
+
+-- | Specifies the advanced settings on each attempt of the prompt.
+promptSpecification_promptAttemptsSpecification :: Lens.Lens' PromptSpecification (Prelude.Maybe (Prelude.HashMap PromptAttempt PromptAttemptSpecification))
+promptSpecification_promptAttemptsSpecification = Lens.lens (\PromptSpecification' {promptAttemptsSpecification} -> promptAttemptsSpecification) (\s@PromptSpecification' {} a -> s {promptAttemptsSpecification = a} :: PromptSpecification) Prelude.. Lens.mapping Lens.coerced
+
+-- | A collection of messages that Amazon Lex can send to the user. Amazon
+-- Lex chooses the actual message to send at runtime.
+promptSpecification_messageGroups :: Lens.Lens' PromptSpecification (Prelude.NonEmpty MessageGroup)
+promptSpecification_messageGroups = Lens.lens (\PromptSpecification' {messageGroups} -> messageGroups) (\s@PromptSpecification' {} a -> s {messageGroups = a} :: PromptSpecification) Prelude.. Lens.coerced
+
+-- | The maximum number of times the bot tries to elicit a response from the
+-- user using this prompt.
+promptSpecification_maxRetries :: Lens.Lens' PromptSpecification Prelude.Natural
+promptSpecification_maxRetries = Lens.lens (\PromptSpecification' {maxRetries} -> maxRetries) (\s@PromptSpecification' {} a -> s {maxRetries = a} :: PromptSpecification)
+
+instance Data.FromJSON PromptSpecification where
+  parseJSON =
+    Data.withObject
+      "PromptSpecification"
+      ( \x ->
+          PromptSpecification'
+            Prelude.<$> (x Data..:? "allowInterrupt")
+            Prelude.<*> (x Data..:? "messageSelectionStrategy")
+            Prelude.<*> ( x
+                            Data..:? "promptAttemptsSpecification"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> (x Data..: "messageGroups")
+            Prelude.<*> (x Data..: "maxRetries")
+      )
+
+instance Prelude.Hashable PromptSpecification where
+  hashWithSalt _salt PromptSpecification' {..} =
+    _salt
+      `Prelude.hashWithSalt` allowInterrupt
+      `Prelude.hashWithSalt` messageSelectionStrategy
+      `Prelude.hashWithSalt` promptAttemptsSpecification
+      `Prelude.hashWithSalt` messageGroups
+      `Prelude.hashWithSalt` maxRetries
+
+instance Prelude.NFData PromptSpecification where
+  rnf PromptSpecification' {..} =
+    Prelude.rnf allowInterrupt
+      `Prelude.seq` Prelude.rnf messageSelectionStrategy
+      `Prelude.seq` Prelude.rnf promptAttemptsSpecification
+      `Prelude.seq` Prelude.rnf messageGroups
+      `Prelude.seq` Prelude.rnf maxRetries
+
+instance Data.ToJSON PromptSpecification where
+  toJSON PromptSpecification' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("allowInterrupt" Data..=)
+              Prelude.<$> allowInterrupt,
+            ("messageSelectionStrategy" Data..=)
+              Prelude.<$> messageSelectionStrategy,
+            ("promptAttemptsSpecification" Data..=)
+              Prelude.<$> promptAttemptsSpecification,
+            Prelude.Just ("messageGroups" Data..= messageGroups),
+            Prelude.Just ("maxRetries" Data..= maxRetries)
+          ]
+      )
diff --git a/gen/Amazonka/LexV2Models/Types/RecommendedIntentSummary.hs b/gen/Amazonka/LexV2Models/Types/RecommendedIntentSummary.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/Types/RecommendedIntentSummary.hs
@@ -0,0 +1,103 @@
+{-# 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.LexV2Models.Types.RecommendedIntentSummary
+-- 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.LexV2Models.Types.RecommendedIntentSummary where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | An object that contains a summary of a recommended intent.
+--
+-- /See:/ 'newRecommendedIntentSummary' smart constructor.
+data RecommendedIntentSummary = RecommendedIntentSummary'
+  { -- | The unique identifier of a recommended intent associated with the bot
+    -- recommendation.
+    intentId :: Prelude.Maybe Prelude.Text,
+    -- | The name of a recommended intent associated with the bot recommendation.
+    intentName :: Prelude.Maybe Prelude.Text,
+    -- | The count of sample utterances of a recommended intent that is
+    -- associated with a bot recommendation.
+    sampleUtterancesCount :: Prelude.Maybe Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'RecommendedIntentSummary' 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:
+--
+-- 'intentId', 'recommendedIntentSummary_intentId' - The unique identifier of a recommended intent associated with the bot
+-- recommendation.
+--
+-- 'intentName', 'recommendedIntentSummary_intentName' - The name of a recommended intent associated with the bot recommendation.
+--
+-- 'sampleUtterancesCount', 'recommendedIntentSummary_sampleUtterancesCount' - The count of sample utterances of a recommended intent that is
+-- associated with a bot recommendation.
+newRecommendedIntentSummary ::
+  RecommendedIntentSummary
+newRecommendedIntentSummary =
+  RecommendedIntentSummary'
+    { intentId =
+        Prelude.Nothing,
+      intentName = Prelude.Nothing,
+      sampleUtterancesCount = Prelude.Nothing
+    }
+
+-- | The unique identifier of a recommended intent associated with the bot
+-- recommendation.
+recommendedIntentSummary_intentId :: Lens.Lens' RecommendedIntentSummary (Prelude.Maybe Prelude.Text)
+recommendedIntentSummary_intentId = Lens.lens (\RecommendedIntentSummary' {intentId} -> intentId) (\s@RecommendedIntentSummary' {} a -> s {intentId = a} :: RecommendedIntentSummary)
+
+-- | The name of a recommended intent associated with the bot recommendation.
+recommendedIntentSummary_intentName :: Lens.Lens' RecommendedIntentSummary (Prelude.Maybe Prelude.Text)
+recommendedIntentSummary_intentName = Lens.lens (\RecommendedIntentSummary' {intentName} -> intentName) (\s@RecommendedIntentSummary' {} a -> s {intentName = a} :: RecommendedIntentSummary)
+
+-- | The count of sample utterances of a recommended intent that is
+-- associated with a bot recommendation.
+recommendedIntentSummary_sampleUtterancesCount :: Lens.Lens' RecommendedIntentSummary (Prelude.Maybe Prelude.Int)
+recommendedIntentSummary_sampleUtterancesCount = Lens.lens (\RecommendedIntentSummary' {sampleUtterancesCount} -> sampleUtterancesCount) (\s@RecommendedIntentSummary' {} a -> s {sampleUtterancesCount = a} :: RecommendedIntentSummary)
+
+instance Data.FromJSON RecommendedIntentSummary where
+  parseJSON =
+    Data.withObject
+      "RecommendedIntentSummary"
+      ( \x ->
+          RecommendedIntentSummary'
+            Prelude.<$> (x Data..:? "intentId")
+            Prelude.<*> (x Data..:? "intentName")
+            Prelude.<*> (x Data..:? "sampleUtterancesCount")
+      )
+
+instance Prelude.Hashable RecommendedIntentSummary where
+  hashWithSalt _salt RecommendedIntentSummary' {..} =
+    _salt
+      `Prelude.hashWithSalt` intentId
+      `Prelude.hashWithSalt` intentName
+      `Prelude.hashWithSalt` sampleUtterancesCount
+
+instance Prelude.NFData RecommendedIntentSummary where
+  rnf RecommendedIntentSummary' {..} =
+    Prelude.rnf intentId
+      `Prelude.seq` Prelude.rnf intentName
+      `Prelude.seq` Prelude.rnf sampleUtterancesCount
diff --git a/gen/Amazonka/LexV2Models/Types/RelativeAggregationDuration.hs b/gen/Amazonka/LexV2Models/Types/RelativeAggregationDuration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/Types/RelativeAggregationDuration.hs
@@ -0,0 +1,141 @@
+{-# 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.LexV2Models.Types.RelativeAggregationDuration
+-- 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.LexV2Models.Types.RelativeAggregationDuration where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LexV2Models.Types.TimeDimension
+import qualified Amazonka.Prelude as Prelude
+
+-- | Specifies the time window that utterance statistics are returned for.
+-- The time window is always relative to the last time that the that
+-- utterances were aggregated. For example, if the
+-- @ListAggregatedUtterances@ operation is called at 1600, the time window
+-- is set to 1 hour, and the last refresh time was 1530, only utterances
+-- made between 1430 and 1530 are returned.
+--
+-- You can choose the time window that statistics should be returned for.
+--
+-- -   __Hours__ - You can request utterance statistics for 1, 3, 6, 12, or
+--     24 hour time windows. Statistics are refreshed every half hour for 1
+--     hour time windows, and hourly for the other time windows.
+--
+-- -   __Days__ - You can request utterance statistics for 3 days.
+--     Statistics are refreshed every 6 hours.
+--
+-- -   __Weeks__ - You can see statistics for one or two weeks. Statistics
+--     are refreshed every 12 hours for one week time windows, and once per
+--     day for two week time windows.
+--
+-- /See:/ 'newRelativeAggregationDuration' smart constructor.
+data RelativeAggregationDuration = RelativeAggregationDuration'
+  { -- | The type of time period that the @timeValue@ field represents.
+    timeDimension :: TimeDimension,
+    -- | The period of the time window to gather statistics for. The valid value
+    -- depends on the setting of the @timeDimension@ field.
+    --
+    -- -   @Hours@ - 1\/3\/6\/12\/24
+    --
+    -- -   @Days@ - 3
+    --
+    -- -   @Weeks@ - 1\/2
+    timeValue :: Prelude.Natural
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'RelativeAggregationDuration' 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:
+--
+-- 'timeDimension', 'relativeAggregationDuration_timeDimension' - The type of time period that the @timeValue@ field represents.
+--
+-- 'timeValue', 'relativeAggregationDuration_timeValue' - The period of the time window to gather statistics for. The valid value
+-- depends on the setting of the @timeDimension@ field.
+--
+-- -   @Hours@ - 1\/3\/6\/12\/24
+--
+-- -   @Days@ - 3
+--
+-- -   @Weeks@ - 1\/2
+newRelativeAggregationDuration ::
+  -- | 'timeDimension'
+  TimeDimension ->
+  -- | 'timeValue'
+  Prelude.Natural ->
+  RelativeAggregationDuration
+newRelativeAggregationDuration
+  pTimeDimension_
+  pTimeValue_ =
+    RelativeAggregationDuration'
+      { timeDimension =
+          pTimeDimension_,
+        timeValue = pTimeValue_
+      }
+
+-- | The type of time period that the @timeValue@ field represents.
+relativeAggregationDuration_timeDimension :: Lens.Lens' RelativeAggregationDuration TimeDimension
+relativeAggregationDuration_timeDimension = Lens.lens (\RelativeAggregationDuration' {timeDimension} -> timeDimension) (\s@RelativeAggregationDuration' {} a -> s {timeDimension = a} :: RelativeAggregationDuration)
+
+-- | The period of the time window to gather statistics for. The valid value
+-- depends on the setting of the @timeDimension@ field.
+--
+-- -   @Hours@ - 1\/3\/6\/12\/24
+--
+-- -   @Days@ - 3
+--
+-- -   @Weeks@ - 1\/2
+relativeAggregationDuration_timeValue :: Lens.Lens' RelativeAggregationDuration Prelude.Natural
+relativeAggregationDuration_timeValue = Lens.lens (\RelativeAggregationDuration' {timeValue} -> timeValue) (\s@RelativeAggregationDuration' {} a -> s {timeValue = a} :: RelativeAggregationDuration)
+
+instance Data.FromJSON RelativeAggregationDuration where
+  parseJSON =
+    Data.withObject
+      "RelativeAggregationDuration"
+      ( \x ->
+          RelativeAggregationDuration'
+            Prelude.<$> (x Data..: "timeDimension")
+            Prelude.<*> (x Data..: "timeValue")
+      )
+
+instance Prelude.Hashable RelativeAggregationDuration where
+  hashWithSalt _salt RelativeAggregationDuration' {..} =
+    _salt
+      `Prelude.hashWithSalt` timeDimension
+      `Prelude.hashWithSalt` timeValue
+
+instance Prelude.NFData RelativeAggregationDuration where
+  rnf RelativeAggregationDuration' {..} =
+    Prelude.rnf timeDimension
+      `Prelude.seq` Prelude.rnf timeValue
+
+instance Data.ToJSON RelativeAggregationDuration where
+  toJSON RelativeAggregationDuration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ("timeDimension" Data..= timeDimension),
+            Prelude.Just ("timeValue" Data..= timeValue)
+          ]
+      )
diff --git a/gen/Amazonka/LexV2Models/Types/ResponseSpecification.hs b/gen/Amazonka/LexV2Models/Types/ResponseSpecification.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/Types/ResponseSpecification.hs
@@ -0,0 +1,106 @@
+{-# 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.LexV2Models.Types.ResponseSpecification
+-- 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.LexV2Models.Types.ResponseSpecification where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LexV2Models.Types.MessageGroup
+import qualified Amazonka.Prelude as Prelude
+
+-- | Specifies a list of message groups that Amazon Lex uses to respond the
+-- user input.
+--
+-- /See:/ 'newResponseSpecification' smart constructor.
+data ResponseSpecification = ResponseSpecification'
+  { -- | Indicates whether the user can interrupt a speech response from Amazon
+    -- Lex.
+    allowInterrupt :: Prelude.Maybe Prelude.Bool,
+    -- | A collection of responses that Amazon Lex can send to the user. Amazon
+    -- Lex chooses the actual response to send at runtime.
+    messageGroups :: Prelude.NonEmpty MessageGroup
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ResponseSpecification' 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:
+--
+-- 'allowInterrupt', 'responseSpecification_allowInterrupt' - Indicates whether the user can interrupt a speech response from Amazon
+-- Lex.
+--
+-- 'messageGroups', 'responseSpecification_messageGroups' - A collection of responses that Amazon Lex can send to the user. Amazon
+-- Lex chooses the actual response to send at runtime.
+newResponseSpecification ::
+  -- | 'messageGroups'
+  Prelude.NonEmpty MessageGroup ->
+  ResponseSpecification
+newResponseSpecification pMessageGroups_ =
+  ResponseSpecification'
+    { allowInterrupt =
+        Prelude.Nothing,
+      messageGroups = Lens.coerced Lens.# pMessageGroups_
+    }
+
+-- | Indicates whether the user can interrupt a speech response from Amazon
+-- Lex.
+responseSpecification_allowInterrupt :: Lens.Lens' ResponseSpecification (Prelude.Maybe Prelude.Bool)
+responseSpecification_allowInterrupt = Lens.lens (\ResponseSpecification' {allowInterrupt} -> allowInterrupt) (\s@ResponseSpecification' {} a -> s {allowInterrupt = a} :: ResponseSpecification)
+
+-- | A collection of responses that Amazon Lex can send to the user. Amazon
+-- Lex chooses the actual response to send at runtime.
+responseSpecification_messageGroups :: Lens.Lens' ResponseSpecification (Prelude.NonEmpty MessageGroup)
+responseSpecification_messageGroups = Lens.lens (\ResponseSpecification' {messageGroups} -> messageGroups) (\s@ResponseSpecification' {} a -> s {messageGroups = a} :: ResponseSpecification) Prelude.. Lens.coerced
+
+instance Data.FromJSON ResponseSpecification where
+  parseJSON =
+    Data.withObject
+      "ResponseSpecification"
+      ( \x ->
+          ResponseSpecification'
+            Prelude.<$> (x Data..:? "allowInterrupt")
+            Prelude.<*> (x Data..: "messageGroups")
+      )
+
+instance Prelude.Hashable ResponseSpecification where
+  hashWithSalt _salt ResponseSpecification' {..} =
+    _salt
+      `Prelude.hashWithSalt` allowInterrupt
+      `Prelude.hashWithSalt` messageGroups
+
+instance Prelude.NFData ResponseSpecification where
+  rnf ResponseSpecification' {..} =
+    Prelude.rnf allowInterrupt
+      `Prelude.seq` Prelude.rnf messageGroups
+
+instance Data.ToJSON ResponseSpecification where
+  toJSON ResponseSpecification' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("allowInterrupt" Data..=)
+              Prelude.<$> allowInterrupt,
+            Prelude.Just
+              ("messageGroups" Data..= messageGroups)
+          ]
+      )
diff --git a/gen/Amazonka/LexV2Models/Types/S3BucketLogDestination.hs b/gen/Amazonka/LexV2Models/Types/S3BucketLogDestination.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/Types/S3BucketLogDestination.hs
@@ -0,0 +1,117 @@
+{-# 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.LexV2Models.Types.S3BucketLogDestination
+-- 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.LexV2Models.Types.S3BucketLogDestination 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
+
+-- | Specifies an Amazon S3 bucket for logging audio conversations
+--
+-- /See:/ 'newS3BucketLogDestination' smart constructor.
+data S3BucketLogDestination = S3BucketLogDestination'
+  { -- | The Amazon Resource Name (ARN) of an AWS Key Management Service (KMS)
+    -- key for encrypting audio log files stored in an S3 bucket.
+    kmsKeyArn :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of an Amazon S3 bucket where audio log
+    -- files are stored.
+    s3BucketArn :: Prelude.Text,
+    -- | The S3 prefix to assign to audio log files.
+    logPrefix :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'S3BucketLogDestination' 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:
+--
+-- 'kmsKeyArn', 's3BucketLogDestination_kmsKeyArn' - The Amazon Resource Name (ARN) of an AWS Key Management Service (KMS)
+-- key for encrypting audio log files stored in an S3 bucket.
+--
+-- 's3BucketArn', 's3BucketLogDestination_s3BucketArn' - The Amazon Resource Name (ARN) of an Amazon S3 bucket where audio log
+-- files are stored.
+--
+-- 'logPrefix', 's3BucketLogDestination_logPrefix' - The S3 prefix to assign to audio log files.
+newS3BucketLogDestination ::
+  -- | 's3BucketArn'
+  Prelude.Text ->
+  -- | 'logPrefix'
+  Prelude.Text ->
+  S3BucketLogDestination
+newS3BucketLogDestination pS3BucketArn_ pLogPrefix_ =
+  S3BucketLogDestination'
+    { kmsKeyArn =
+        Prelude.Nothing,
+      s3BucketArn = pS3BucketArn_,
+      logPrefix = pLogPrefix_
+    }
+
+-- | The Amazon Resource Name (ARN) of an AWS Key Management Service (KMS)
+-- key for encrypting audio log files stored in an S3 bucket.
+s3BucketLogDestination_kmsKeyArn :: Lens.Lens' S3BucketLogDestination (Prelude.Maybe Prelude.Text)
+s3BucketLogDestination_kmsKeyArn = Lens.lens (\S3BucketLogDestination' {kmsKeyArn} -> kmsKeyArn) (\s@S3BucketLogDestination' {} a -> s {kmsKeyArn = a} :: S3BucketLogDestination)
+
+-- | The Amazon Resource Name (ARN) of an Amazon S3 bucket where audio log
+-- files are stored.
+s3BucketLogDestination_s3BucketArn :: Lens.Lens' S3BucketLogDestination Prelude.Text
+s3BucketLogDestination_s3BucketArn = Lens.lens (\S3BucketLogDestination' {s3BucketArn} -> s3BucketArn) (\s@S3BucketLogDestination' {} a -> s {s3BucketArn = a} :: S3BucketLogDestination)
+
+-- | The S3 prefix to assign to audio log files.
+s3BucketLogDestination_logPrefix :: Lens.Lens' S3BucketLogDestination Prelude.Text
+s3BucketLogDestination_logPrefix = Lens.lens (\S3BucketLogDestination' {logPrefix} -> logPrefix) (\s@S3BucketLogDestination' {} a -> s {logPrefix = a} :: S3BucketLogDestination)
+
+instance Data.FromJSON S3BucketLogDestination where
+  parseJSON =
+    Data.withObject
+      "S3BucketLogDestination"
+      ( \x ->
+          S3BucketLogDestination'
+            Prelude.<$> (x Data..:? "kmsKeyArn")
+            Prelude.<*> (x Data..: "s3BucketArn")
+            Prelude.<*> (x Data..: "logPrefix")
+      )
+
+instance Prelude.Hashable S3BucketLogDestination where
+  hashWithSalt _salt S3BucketLogDestination' {..} =
+    _salt
+      `Prelude.hashWithSalt` kmsKeyArn
+      `Prelude.hashWithSalt` s3BucketArn
+      `Prelude.hashWithSalt` logPrefix
+
+instance Prelude.NFData S3BucketLogDestination where
+  rnf S3BucketLogDestination' {..} =
+    Prelude.rnf kmsKeyArn
+      `Prelude.seq` Prelude.rnf s3BucketArn
+      `Prelude.seq` Prelude.rnf logPrefix
+
+instance Data.ToJSON S3BucketLogDestination where
+  toJSON S3BucketLogDestination' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("kmsKeyArn" Data..=) Prelude.<$> kmsKeyArn,
+            Prelude.Just ("s3BucketArn" Data..= s3BucketArn),
+            Prelude.Just ("logPrefix" Data..= logPrefix)
+          ]
+      )
diff --git a/gen/Amazonka/LexV2Models/Types/S3BucketTranscriptSource.hs b/gen/Amazonka/LexV2Models/Types/S3BucketTranscriptSource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/Types/S3BucketTranscriptSource.hs
@@ -0,0 +1,175 @@
+{-# 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.LexV2Models.Types.S3BucketTranscriptSource
+-- 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.LexV2Models.Types.S3BucketTranscriptSource where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LexV2Models.Types.PathFormat
+import Amazonka.LexV2Models.Types.TranscriptFilter
+import Amazonka.LexV2Models.Types.TranscriptFormat
+import qualified Amazonka.Prelude as Prelude
+
+-- | The object representing the Amazon S3 bucket containing the transcript,
+-- as well as the associated metadata.
+--
+-- /See:/ 'newS3BucketTranscriptSource' smart constructor.
+data S3BucketTranscriptSource = S3BucketTranscriptSource'
+  { -- | The ARN of the KMS key that customer use to encrypt their Amazon S3
+    -- bucket. Only use this field if your bucket is encrypted using a customer
+    -- managed KMS key.
+    kmsKeyArn :: Prelude.Maybe Prelude.Text,
+    -- | The object that contains a path format that will be applied when Amazon
+    -- Lex reads the transcript file in the bucket you provide. Specify this
+    -- object if you only want Lex to read a subset of files in your Amazon S3
+    -- bucket.
+    pathFormat :: Prelude.Maybe PathFormat,
+    -- | The object that contains the filter which will be applied when Amazon
+    -- Lex reads through the Amazon S3 bucket. Specify this object if you want
+    -- Amazon Lex to read only a subset of the Amazon S3 bucket based on the
+    -- filter you provide.
+    transcriptFilter :: Prelude.Maybe TranscriptFilter,
+    -- | The name of the bucket containing the transcript and the associated
+    -- metadata.
+    s3BucketName :: Prelude.Text,
+    -- | The format of the transcript content. Currently, Genie only supports the
+    -- Amazon Lex transcript format.
+    transcriptFormat :: TranscriptFormat
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'S3BucketTranscriptSource' 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:
+--
+-- 'kmsKeyArn', 's3BucketTranscriptSource_kmsKeyArn' - The ARN of the KMS key that customer use to encrypt their Amazon S3
+-- bucket. Only use this field if your bucket is encrypted using a customer
+-- managed KMS key.
+--
+-- 'pathFormat', 's3BucketTranscriptSource_pathFormat' - The object that contains a path format that will be applied when Amazon
+-- Lex reads the transcript file in the bucket you provide. Specify this
+-- object if you only want Lex to read a subset of files in your Amazon S3
+-- bucket.
+--
+-- 'transcriptFilter', 's3BucketTranscriptSource_transcriptFilter' - The object that contains the filter which will be applied when Amazon
+-- Lex reads through the Amazon S3 bucket. Specify this object if you want
+-- Amazon Lex to read only a subset of the Amazon S3 bucket based on the
+-- filter you provide.
+--
+-- 's3BucketName', 's3BucketTranscriptSource_s3BucketName' - The name of the bucket containing the transcript and the associated
+-- metadata.
+--
+-- 'transcriptFormat', 's3BucketTranscriptSource_transcriptFormat' - The format of the transcript content. Currently, Genie only supports the
+-- Amazon Lex transcript format.
+newS3BucketTranscriptSource ::
+  -- | 's3BucketName'
+  Prelude.Text ->
+  -- | 'transcriptFormat'
+  TranscriptFormat ->
+  S3BucketTranscriptSource
+newS3BucketTranscriptSource
+  pS3BucketName_
+  pTranscriptFormat_ =
+    S3BucketTranscriptSource'
+      { kmsKeyArn =
+          Prelude.Nothing,
+        pathFormat = Prelude.Nothing,
+        transcriptFilter = Prelude.Nothing,
+        s3BucketName = pS3BucketName_,
+        transcriptFormat = pTranscriptFormat_
+      }
+
+-- | The ARN of the KMS key that customer use to encrypt their Amazon S3
+-- bucket. Only use this field if your bucket is encrypted using a customer
+-- managed KMS key.
+s3BucketTranscriptSource_kmsKeyArn :: Lens.Lens' S3BucketTranscriptSource (Prelude.Maybe Prelude.Text)
+s3BucketTranscriptSource_kmsKeyArn = Lens.lens (\S3BucketTranscriptSource' {kmsKeyArn} -> kmsKeyArn) (\s@S3BucketTranscriptSource' {} a -> s {kmsKeyArn = a} :: S3BucketTranscriptSource)
+
+-- | The object that contains a path format that will be applied when Amazon
+-- Lex reads the transcript file in the bucket you provide. Specify this
+-- object if you only want Lex to read a subset of files in your Amazon S3
+-- bucket.
+s3BucketTranscriptSource_pathFormat :: Lens.Lens' S3BucketTranscriptSource (Prelude.Maybe PathFormat)
+s3BucketTranscriptSource_pathFormat = Lens.lens (\S3BucketTranscriptSource' {pathFormat} -> pathFormat) (\s@S3BucketTranscriptSource' {} a -> s {pathFormat = a} :: S3BucketTranscriptSource)
+
+-- | The object that contains the filter which will be applied when Amazon
+-- Lex reads through the Amazon S3 bucket. Specify this object if you want
+-- Amazon Lex to read only a subset of the Amazon S3 bucket based on the
+-- filter you provide.
+s3BucketTranscriptSource_transcriptFilter :: Lens.Lens' S3BucketTranscriptSource (Prelude.Maybe TranscriptFilter)
+s3BucketTranscriptSource_transcriptFilter = Lens.lens (\S3BucketTranscriptSource' {transcriptFilter} -> transcriptFilter) (\s@S3BucketTranscriptSource' {} a -> s {transcriptFilter = a} :: S3BucketTranscriptSource)
+
+-- | The name of the bucket containing the transcript and the associated
+-- metadata.
+s3BucketTranscriptSource_s3BucketName :: Lens.Lens' S3BucketTranscriptSource Prelude.Text
+s3BucketTranscriptSource_s3BucketName = Lens.lens (\S3BucketTranscriptSource' {s3BucketName} -> s3BucketName) (\s@S3BucketTranscriptSource' {} a -> s {s3BucketName = a} :: S3BucketTranscriptSource)
+
+-- | The format of the transcript content. Currently, Genie only supports the
+-- Amazon Lex transcript format.
+s3BucketTranscriptSource_transcriptFormat :: Lens.Lens' S3BucketTranscriptSource TranscriptFormat
+s3BucketTranscriptSource_transcriptFormat = Lens.lens (\S3BucketTranscriptSource' {transcriptFormat} -> transcriptFormat) (\s@S3BucketTranscriptSource' {} a -> s {transcriptFormat = a} :: S3BucketTranscriptSource)
+
+instance Data.FromJSON S3BucketTranscriptSource where
+  parseJSON =
+    Data.withObject
+      "S3BucketTranscriptSource"
+      ( \x ->
+          S3BucketTranscriptSource'
+            Prelude.<$> (x Data..:? "kmsKeyArn")
+            Prelude.<*> (x Data..:? "pathFormat")
+            Prelude.<*> (x Data..:? "transcriptFilter")
+            Prelude.<*> (x Data..: "s3BucketName")
+            Prelude.<*> (x Data..: "transcriptFormat")
+      )
+
+instance Prelude.Hashable S3BucketTranscriptSource where
+  hashWithSalt _salt S3BucketTranscriptSource' {..} =
+    _salt
+      `Prelude.hashWithSalt` kmsKeyArn
+      `Prelude.hashWithSalt` pathFormat
+      `Prelude.hashWithSalt` transcriptFilter
+      `Prelude.hashWithSalt` s3BucketName
+      `Prelude.hashWithSalt` transcriptFormat
+
+instance Prelude.NFData S3BucketTranscriptSource where
+  rnf S3BucketTranscriptSource' {..} =
+    Prelude.rnf kmsKeyArn
+      `Prelude.seq` Prelude.rnf pathFormat
+      `Prelude.seq` Prelude.rnf transcriptFilter
+      `Prelude.seq` Prelude.rnf s3BucketName
+      `Prelude.seq` Prelude.rnf transcriptFormat
+
+instance Data.ToJSON S3BucketTranscriptSource where
+  toJSON S3BucketTranscriptSource' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("kmsKeyArn" Data..=) Prelude.<$> kmsKeyArn,
+            ("pathFormat" Data..=) Prelude.<$> pathFormat,
+            ("transcriptFilter" Data..=)
+              Prelude.<$> transcriptFilter,
+            Prelude.Just ("s3BucketName" Data..= s3BucketName),
+            Prelude.Just
+              ("transcriptFormat" Data..= transcriptFormat)
+          ]
+      )
diff --git a/gen/Amazonka/LexV2Models/Types/SSMLMessage.hs b/gen/Amazonka/LexV2Models/Types/SSMLMessage.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/Types/SSMLMessage.hs
@@ -0,0 +1,74 @@
+{-# 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.LexV2Models.Types.SSMLMessage
+-- 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.LexV2Models.Types.SSMLMessage 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
+
+-- | Defines a Speech Synthesis Markup Language (SSML) prompt.
+--
+-- /See:/ 'newSSMLMessage' smart constructor.
+data SSMLMessage = SSMLMessage'
+  { -- | The SSML text that defines the prompt.
+    value :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SSMLMessage' 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:
+--
+-- 'value', 'sSMLMessage_value' - The SSML text that defines the prompt.
+newSSMLMessage ::
+  -- | 'value'
+  Prelude.Text ->
+  SSMLMessage
+newSSMLMessage pValue_ =
+  SSMLMessage' {value = pValue_}
+
+-- | The SSML text that defines the prompt.
+sSMLMessage_value :: Lens.Lens' SSMLMessage Prelude.Text
+sSMLMessage_value = Lens.lens (\SSMLMessage' {value} -> value) (\s@SSMLMessage' {} a -> s {value = a} :: SSMLMessage)
+
+instance Data.FromJSON SSMLMessage where
+  parseJSON =
+    Data.withObject
+      "SSMLMessage"
+      (\x -> SSMLMessage' Prelude.<$> (x Data..: "value"))
+
+instance Prelude.Hashable SSMLMessage where
+  hashWithSalt _salt SSMLMessage' {..} =
+    _salt `Prelude.hashWithSalt` value
+
+instance Prelude.NFData SSMLMessage where
+  rnf SSMLMessage' {..} = Prelude.rnf value
+
+instance Data.ToJSON SSMLMessage where
+  toJSON SSMLMessage' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("value" Data..= value)]
+      )
diff --git a/gen/Amazonka/LexV2Models/Types/SampleUtterance.hs b/gen/Amazonka/LexV2Models/Types/SampleUtterance.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/Types/SampleUtterance.hs
@@ -0,0 +1,80 @@
+{-# 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.LexV2Models.Types.SampleUtterance
+-- 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.LexV2Models.Types.SampleUtterance 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 sample utterance that invokes an intent or respond to a slot
+-- elicitation prompt.
+--
+-- /See:/ 'newSampleUtterance' smart constructor.
+data SampleUtterance = SampleUtterance'
+  { -- | The sample utterance that Amazon Lex uses to build its machine-learning
+    -- model to recognize intents.
+    utterance :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SampleUtterance' 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:
+--
+-- 'utterance', 'sampleUtterance_utterance' - The sample utterance that Amazon Lex uses to build its machine-learning
+-- model to recognize intents.
+newSampleUtterance ::
+  -- | 'utterance'
+  Prelude.Text ->
+  SampleUtterance
+newSampleUtterance pUtterance_ =
+  SampleUtterance' {utterance = pUtterance_}
+
+-- | The sample utterance that Amazon Lex uses to build its machine-learning
+-- model to recognize intents.
+sampleUtterance_utterance :: Lens.Lens' SampleUtterance Prelude.Text
+sampleUtterance_utterance = Lens.lens (\SampleUtterance' {utterance} -> utterance) (\s@SampleUtterance' {} a -> s {utterance = a} :: SampleUtterance)
+
+instance Data.FromJSON SampleUtterance where
+  parseJSON =
+    Data.withObject
+      "SampleUtterance"
+      ( \x ->
+          SampleUtterance' Prelude.<$> (x Data..: "utterance")
+      )
+
+instance Prelude.Hashable SampleUtterance where
+  hashWithSalt _salt SampleUtterance' {..} =
+    _salt `Prelude.hashWithSalt` utterance
+
+instance Prelude.NFData SampleUtterance where
+  rnf SampleUtterance' {..} = Prelude.rnf utterance
+
+instance Data.ToJSON SampleUtterance where
+  toJSON SampleUtterance' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("utterance" Data..= utterance)]
+      )
diff --git a/gen/Amazonka/LexV2Models/Types/SampleValue.hs b/gen/Amazonka/LexV2Models/Types/SampleValue.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/Types/SampleValue.hs
@@ -0,0 +1,74 @@
+{-# 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.LexV2Models.Types.SampleValue
+-- 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.LexV2Models.Types.SampleValue 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
+
+-- | Defines one of the values for a slot type.
+--
+-- /See:/ 'newSampleValue' smart constructor.
+data SampleValue = SampleValue'
+  { -- | The value that can be used for a slot type.
+    value :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SampleValue' 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:
+--
+-- 'value', 'sampleValue_value' - The value that can be used for a slot type.
+newSampleValue ::
+  -- | 'value'
+  Prelude.Text ->
+  SampleValue
+newSampleValue pValue_ =
+  SampleValue' {value = pValue_}
+
+-- | The value that can be used for a slot type.
+sampleValue_value :: Lens.Lens' SampleValue Prelude.Text
+sampleValue_value = Lens.lens (\SampleValue' {value} -> value) (\s@SampleValue' {} a -> s {value = a} :: SampleValue)
+
+instance Data.FromJSON SampleValue where
+  parseJSON =
+    Data.withObject
+      "SampleValue"
+      (\x -> SampleValue' Prelude.<$> (x Data..: "value"))
+
+instance Prelude.Hashable SampleValue where
+  hashWithSalt _salt SampleValue' {..} =
+    _salt `Prelude.hashWithSalt` value
+
+instance Prelude.NFData SampleValue where
+  rnf SampleValue' {..} = Prelude.rnf value
+
+instance Data.ToJSON SampleValue where
+  toJSON SampleValue' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("value" Data..= value)]
+      )
diff --git a/gen/Amazonka/LexV2Models/Types/SearchOrder.hs b/gen/Amazonka/LexV2Models/Types/SearchOrder.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/Types/SearchOrder.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.LexV2Models.Types.SearchOrder
+-- 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.LexV2Models.Types.SearchOrder
+  ( SearchOrder
+      ( ..,
+        SearchOrder_Ascending,
+        SearchOrder_Descending
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype SearchOrder = SearchOrder'
+  { fromSearchOrder ::
+      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 SearchOrder_Ascending :: SearchOrder
+pattern SearchOrder_Ascending = SearchOrder' "Ascending"
+
+pattern SearchOrder_Descending :: SearchOrder
+pattern SearchOrder_Descending = SearchOrder' "Descending"
+
+{-# COMPLETE
+  SearchOrder_Ascending,
+  SearchOrder_Descending,
+  SearchOrder'
+  #-}
diff --git a/gen/Amazonka/LexV2Models/Types/SentimentAnalysisSettings.hs b/gen/Amazonka/LexV2Models/Types/SentimentAnalysisSettings.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/Types/SentimentAnalysisSettings.hs
@@ -0,0 +1,87 @@
+{-# 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.LexV2Models.Types.SentimentAnalysisSettings
+-- 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.LexV2Models.Types.SentimentAnalysisSettings 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
+
+-- | Determines whether Amazon Lex will use Amazon Comprehend to detect the
+-- sentiment of user utterances.
+--
+-- /See:/ 'newSentimentAnalysisSettings' smart constructor.
+data SentimentAnalysisSettings = SentimentAnalysisSettings'
+  { -- | Sets whether Amazon Lex uses Amazon Comprehend to detect the sentiment
+    -- of user utterances.
+    detectSentiment :: Prelude.Bool
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SentimentAnalysisSettings' 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:
+--
+-- 'detectSentiment', 'sentimentAnalysisSettings_detectSentiment' - Sets whether Amazon Lex uses Amazon Comprehend to detect the sentiment
+-- of user utterances.
+newSentimentAnalysisSettings ::
+  -- | 'detectSentiment'
+  Prelude.Bool ->
+  SentimentAnalysisSettings
+newSentimentAnalysisSettings pDetectSentiment_ =
+  SentimentAnalysisSettings'
+    { detectSentiment =
+        pDetectSentiment_
+    }
+
+-- | Sets whether Amazon Lex uses Amazon Comprehend to detect the sentiment
+-- of user utterances.
+sentimentAnalysisSettings_detectSentiment :: Lens.Lens' SentimentAnalysisSettings Prelude.Bool
+sentimentAnalysisSettings_detectSentiment = Lens.lens (\SentimentAnalysisSettings' {detectSentiment} -> detectSentiment) (\s@SentimentAnalysisSettings' {} a -> s {detectSentiment = a} :: SentimentAnalysisSettings)
+
+instance Data.FromJSON SentimentAnalysisSettings where
+  parseJSON =
+    Data.withObject
+      "SentimentAnalysisSettings"
+      ( \x ->
+          SentimentAnalysisSettings'
+            Prelude.<$> (x Data..: "detectSentiment")
+      )
+
+instance Prelude.Hashable SentimentAnalysisSettings where
+  hashWithSalt _salt SentimentAnalysisSettings' {..} =
+    _salt `Prelude.hashWithSalt` detectSentiment
+
+instance Prelude.NFData SentimentAnalysisSettings where
+  rnf SentimentAnalysisSettings' {..} =
+    Prelude.rnf detectSentiment
+
+instance Data.ToJSON SentimentAnalysisSettings where
+  toJSON SentimentAnalysisSettings' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ("detectSentiment" Data..= detectSentiment)
+          ]
+      )
diff --git a/gen/Amazonka/LexV2Models/Types/SlotCaptureSetting.hs b/gen/Amazonka/LexV2Models/Types/SlotCaptureSetting.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/Types/SlotCaptureSetting.hs
@@ -0,0 +1,195 @@
+{-# 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.LexV2Models.Types.SlotCaptureSetting
+-- 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.LexV2Models.Types.SlotCaptureSetting where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LexV2Models.Types.ConditionalSpecification
+import Amazonka.LexV2Models.Types.DialogCodeHookInvocationSetting
+import Amazonka.LexV2Models.Types.DialogState
+import Amazonka.LexV2Models.Types.ElicitationCodeHookInvocationSetting
+import Amazonka.LexV2Models.Types.ResponseSpecification
+import qualified Amazonka.Prelude as Prelude
+
+-- | Settings used when Amazon Lex successfully captures a slot value from a
+-- user.
+--
+-- /See:/ 'newSlotCaptureSetting' smart constructor.
+data SlotCaptureSetting = SlotCaptureSetting'
+  { -- | A list of conditional branches to evaluate after the slot value is
+    -- captured.
+    captureConditional :: Prelude.Maybe ConditionalSpecification,
+    -- | Specifies the next step that the bot runs when the slot value is
+    -- captured before the code hook times out.
+    captureNextStep :: Prelude.Maybe DialogState,
+    captureResponse :: Prelude.Maybe ResponseSpecification,
+    -- | Code hook called after Amazon Lex successfully captures a slot value.
+    codeHook :: Prelude.Maybe DialogCodeHookInvocationSetting,
+    -- | Code hook called when Amazon Lex doesn\'t capture a slot value.
+    elicitationCodeHook :: Prelude.Maybe ElicitationCodeHookInvocationSetting,
+    -- | A list of conditional branches to evaluate when the slot value isn\'t
+    -- captured.
+    failureConditional :: Prelude.Maybe ConditionalSpecification,
+    -- | Specifies the next step that the bot runs when the slot value code is
+    -- not recognized.
+    failureNextStep :: Prelude.Maybe DialogState,
+    failureResponse :: Prelude.Maybe ResponseSpecification
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SlotCaptureSetting' 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:
+--
+-- 'captureConditional', 'slotCaptureSetting_captureConditional' - A list of conditional branches to evaluate after the slot value is
+-- captured.
+--
+-- 'captureNextStep', 'slotCaptureSetting_captureNextStep' - Specifies the next step that the bot runs when the slot value is
+-- captured before the code hook times out.
+--
+-- 'captureResponse', 'slotCaptureSetting_captureResponse' - Undocumented member.
+--
+-- 'codeHook', 'slotCaptureSetting_codeHook' - Code hook called after Amazon Lex successfully captures a slot value.
+--
+-- 'elicitationCodeHook', 'slotCaptureSetting_elicitationCodeHook' - Code hook called when Amazon Lex doesn\'t capture a slot value.
+--
+-- 'failureConditional', 'slotCaptureSetting_failureConditional' - A list of conditional branches to evaluate when the slot value isn\'t
+-- captured.
+--
+-- 'failureNextStep', 'slotCaptureSetting_failureNextStep' - Specifies the next step that the bot runs when the slot value code is
+-- not recognized.
+--
+-- 'failureResponse', 'slotCaptureSetting_failureResponse' - Undocumented member.
+newSlotCaptureSetting ::
+  SlotCaptureSetting
+newSlotCaptureSetting =
+  SlotCaptureSetting'
+    { captureConditional =
+        Prelude.Nothing,
+      captureNextStep = Prelude.Nothing,
+      captureResponse = Prelude.Nothing,
+      codeHook = Prelude.Nothing,
+      elicitationCodeHook = Prelude.Nothing,
+      failureConditional = Prelude.Nothing,
+      failureNextStep = Prelude.Nothing,
+      failureResponse = Prelude.Nothing
+    }
+
+-- | A list of conditional branches to evaluate after the slot value is
+-- captured.
+slotCaptureSetting_captureConditional :: Lens.Lens' SlotCaptureSetting (Prelude.Maybe ConditionalSpecification)
+slotCaptureSetting_captureConditional = Lens.lens (\SlotCaptureSetting' {captureConditional} -> captureConditional) (\s@SlotCaptureSetting' {} a -> s {captureConditional = a} :: SlotCaptureSetting)
+
+-- | Specifies the next step that the bot runs when the slot value is
+-- captured before the code hook times out.
+slotCaptureSetting_captureNextStep :: Lens.Lens' SlotCaptureSetting (Prelude.Maybe DialogState)
+slotCaptureSetting_captureNextStep = Lens.lens (\SlotCaptureSetting' {captureNextStep} -> captureNextStep) (\s@SlotCaptureSetting' {} a -> s {captureNextStep = a} :: SlotCaptureSetting)
+
+-- | Undocumented member.
+slotCaptureSetting_captureResponse :: Lens.Lens' SlotCaptureSetting (Prelude.Maybe ResponseSpecification)
+slotCaptureSetting_captureResponse = Lens.lens (\SlotCaptureSetting' {captureResponse} -> captureResponse) (\s@SlotCaptureSetting' {} a -> s {captureResponse = a} :: SlotCaptureSetting)
+
+-- | Code hook called after Amazon Lex successfully captures a slot value.
+slotCaptureSetting_codeHook :: Lens.Lens' SlotCaptureSetting (Prelude.Maybe DialogCodeHookInvocationSetting)
+slotCaptureSetting_codeHook = Lens.lens (\SlotCaptureSetting' {codeHook} -> codeHook) (\s@SlotCaptureSetting' {} a -> s {codeHook = a} :: SlotCaptureSetting)
+
+-- | Code hook called when Amazon Lex doesn\'t capture a slot value.
+slotCaptureSetting_elicitationCodeHook :: Lens.Lens' SlotCaptureSetting (Prelude.Maybe ElicitationCodeHookInvocationSetting)
+slotCaptureSetting_elicitationCodeHook = Lens.lens (\SlotCaptureSetting' {elicitationCodeHook} -> elicitationCodeHook) (\s@SlotCaptureSetting' {} a -> s {elicitationCodeHook = a} :: SlotCaptureSetting)
+
+-- | A list of conditional branches to evaluate when the slot value isn\'t
+-- captured.
+slotCaptureSetting_failureConditional :: Lens.Lens' SlotCaptureSetting (Prelude.Maybe ConditionalSpecification)
+slotCaptureSetting_failureConditional = Lens.lens (\SlotCaptureSetting' {failureConditional} -> failureConditional) (\s@SlotCaptureSetting' {} a -> s {failureConditional = a} :: SlotCaptureSetting)
+
+-- | Specifies the next step that the bot runs when the slot value code is
+-- not recognized.
+slotCaptureSetting_failureNextStep :: Lens.Lens' SlotCaptureSetting (Prelude.Maybe DialogState)
+slotCaptureSetting_failureNextStep = Lens.lens (\SlotCaptureSetting' {failureNextStep} -> failureNextStep) (\s@SlotCaptureSetting' {} a -> s {failureNextStep = a} :: SlotCaptureSetting)
+
+-- | Undocumented member.
+slotCaptureSetting_failureResponse :: Lens.Lens' SlotCaptureSetting (Prelude.Maybe ResponseSpecification)
+slotCaptureSetting_failureResponse = Lens.lens (\SlotCaptureSetting' {failureResponse} -> failureResponse) (\s@SlotCaptureSetting' {} a -> s {failureResponse = a} :: SlotCaptureSetting)
+
+instance Data.FromJSON SlotCaptureSetting where
+  parseJSON =
+    Data.withObject
+      "SlotCaptureSetting"
+      ( \x ->
+          SlotCaptureSetting'
+            Prelude.<$> (x Data..:? "captureConditional")
+            Prelude.<*> (x Data..:? "captureNextStep")
+            Prelude.<*> (x Data..:? "captureResponse")
+            Prelude.<*> (x Data..:? "codeHook")
+            Prelude.<*> (x Data..:? "elicitationCodeHook")
+            Prelude.<*> (x Data..:? "failureConditional")
+            Prelude.<*> (x Data..:? "failureNextStep")
+            Prelude.<*> (x Data..:? "failureResponse")
+      )
+
+instance Prelude.Hashable SlotCaptureSetting where
+  hashWithSalt _salt SlotCaptureSetting' {..} =
+    _salt
+      `Prelude.hashWithSalt` captureConditional
+      `Prelude.hashWithSalt` captureNextStep
+      `Prelude.hashWithSalt` captureResponse
+      `Prelude.hashWithSalt` codeHook
+      `Prelude.hashWithSalt` elicitationCodeHook
+      `Prelude.hashWithSalt` failureConditional
+      `Prelude.hashWithSalt` failureNextStep
+      `Prelude.hashWithSalt` failureResponse
+
+instance Prelude.NFData SlotCaptureSetting where
+  rnf SlotCaptureSetting' {..} =
+    Prelude.rnf captureConditional
+      `Prelude.seq` Prelude.rnf captureNextStep
+      `Prelude.seq` Prelude.rnf captureResponse
+      `Prelude.seq` Prelude.rnf codeHook
+      `Prelude.seq` Prelude.rnf elicitationCodeHook
+      `Prelude.seq` Prelude.rnf failureConditional
+      `Prelude.seq` Prelude.rnf failureNextStep
+      `Prelude.seq` Prelude.rnf failureResponse
+
+instance Data.ToJSON SlotCaptureSetting where
+  toJSON SlotCaptureSetting' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("captureConditional" Data..=)
+              Prelude.<$> captureConditional,
+            ("captureNextStep" Data..=)
+              Prelude.<$> captureNextStep,
+            ("captureResponse" Data..=)
+              Prelude.<$> captureResponse,
+            ("codeHook" Data..=) Prelude.<$> codeHook,
+            ("elicitationCodeHook" Data..=)
+              Prelude.<$> elicitationCodeHook,
+            ("failureConditional" Data..=)
+              Prelude.<$> failureConditional,
+            ("failureNextStep" Data..=)
+              Prelude.<$> failureNextStep,
+            ("failureResponse" Data..=)
+              Prelude.<$> failureResponse
+          ]
+      )
diff --git a/gen/Amazonka/LexV2Models/Types/SlotConstraint.hs b/gen/Amazonka/LexV2Models/Types/SlotConstraint.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/Types/SlotConstraint.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.LexV2Models.Types.SlotConstraint
+-- 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.LexV2Models.Types.SlotConstraint
+  ( SlotConstraint
+      ( ..,
+        SlotConstraint_Optional,
+        SlotConstraint_Required
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype SlotConstraint = SlotConstraint'
+  { fromSlotConstraint ::
+      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 SlotConstraint_Optional :: SlotConstraint
+pattern SlotConstraint_Optional = SlotConstraint' "Optional"
+
+pattern SlotConstraint_Required :: SlotConstraint
+pattern SlotConstraint_Required = SlotConstraint' "Required"
+
+{-# COMPLETE
+  SlotConstraint_Optional,
+  SlotConstraint_Required,
+  SlotConstraint'
+  #-}
diff --git a/gen/Amazonka/LexV2Models/Types/SlotDefaultValue.hs b/gen/Amazonka/LexV2Models/Types/SlotDefaultValue.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/Types/SlotDefaultValue.hs
@@ -0,0 +1,81 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.LexV2Models.Types.SlotDefaultValue
+-- 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.LexV2Models.Types.SlotDefaultValue 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
+
+-- | Specifies the default value to use when a user doesn\'t provide a value
+-- for a slot.
+--
+-- /See:/ 'newSlotDefaultValue' smart constructor.
+data SlotDefaultValue = SlotDefaultValue'
+  { -- | The default value to use when a user doesn\'t provide a value for a
+    -- slot.
+    defaultValue :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SlotDefaultValue' 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:
+--
+-- 'defaultValue', 'slotDefaultValue_defaultValue' - The default value to use when a user doesn\'t provide a value for a
+-- slot.
+newSlotDefaultValue ::
+  -- | 'defaultValue'
+  Prelude.Text ->
+  SlotDefaultValue
+newSlotDefaultValue pDefaultValue_ =
+  SlotDefaultValue' {defaultValue = pDefaultValue_}
+
+-- | The default value to use when a user doesn\'t provide a value for a
+-- slot.
+slotDefaultValue_defaultValue :: Lens.Lens' SlotDefaultValue Prelude.Text
+slotDefaultValue_defaultValue = Lens.lens (\SlotDefaultValue' {defaultValue} -> defaultValue) (\s@SlotDefaultValue' {} a -> s {defaultValue = a} :: SlotDefaultValue)
+
+instance Data.FromJSON SlotDefaultValue where
+  parseJSON =
+    Data.withObject
+      "SlotDefaultValue"
+      ( \x ->
+          SlotDefaultValue'
+            Prelude.<$> (x Data..: "defaultValue")
+      )
+
+instance Prelude.Hashable SlotDefaultValue where
+  hashWithSalt _salt SlotDefaultValue' {..} =
+    _salt `Prelude.hashWithSalt` defaultValue
+
+instance Prelude.NFData SlotDefaultValue where
+  rnf SlotDefaultValue' {..} = Prelude.rnf defaultValue
+
+instance Data.ToJSON SlotDefaultValue where
+  toJSON SlotDefaultValue' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("defaultValue" Data..= defaultValue)]
+      )
diff --git a/gen/Amazonka/LexV2Models/Types/SlotDefaultValueSpecification.hs b/gen/Amazonka/LexV2Models/Types/SlotDefaultValueSpecification.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/Types/SlotDefaultValueSpecification.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.LexV2Models.Types.SlotDefaultValueSpecification
+-- 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.LexV2Models.Types.SlotDefaultValueSpecification where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LexV2Models.Types.SlotDefaultValue
+import qualified Amazonka.Prelude as Prelude
+
+-- | Defines a list of values that Amazon Lex should use as the default value
+-- for a slot.
+--
+-- /See:/ 'newSlotDefaultValueSpecification' smart constructor.
+data SlotDefaultValueSpecification = SlotDefaultValueSpecification'
+  { -- | A list of default values. Amazon Lex chooses the default value to use in
+    -- the order that they are presented in the list.
+    defaultValueList :: [SlotDefaultValue]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SlotDefaultValueSpecification' 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:
+--
+-- 'defaultValueList', 'slotDefaultValueSpecification_defaultValueList' - A list of default values. Amazon Lex chooses the default value to use in
+-- the order that they are presented in the list.
+newSlotDefaultValueSpecification ::
+  SlotDefaultValueSpecification
+newSlotDefaultValueSpecification =
+  SlotDefaultValueSpecification'
+    { defaultValueList =
+        Prelude.mempty
+    }
+
+-- | A list of default values. Amazon Lex chooses the default value to use in
+-- the order that they are presented in the list.
+slotDefaultValueSpecification_defaultValueList :: Lens.Lens' SlotDefaultValueSpecification [SlotDefaultValue]
+slotDefaultValueSpecification_defaultValueList = Lens.lens (\SlotDefaultValueSpecification' {defaultValueList} -> defaultValueList) (\s@SlotDefaultValueSpecification' {} a -> s {defaultValueList = a} :: SlotDefaultValueSpecification) Prelude.. Lens.coerced
+
+instance Data.FromJSON SlotDefaultValueSpecification where
+  parseJSON =
+    Data.withObject
+      "SlotDefaultValueSpecification"
+      ( \x ->
+          SlotDefaultValueSpecification'
+            Prelude.<$> ( x
+                            Data..:? "defaultValueList"
+                            Data..!= Prelude.mempty
+                        )
+      )
+
+instance
+  Prelude.Hashable
+    SlotDefaultValueSpecification
+  where
+  hashWithSalt _salt SlotDefaultValueSpecification' {..} =
+    _salt `Prelude.hashWithSalt` defaultValueList
+
+instance Prelude.NFData SlotDefaultValueSpecification where
+  rnf SlotDefaultValueSpecification' {..} =
+    Prelude.rnf defaultValueList
+
+instance Data.ToJSON SlotDefaultValueSpecification where
+  toJSON SlotDefaultValueSpecification' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ("defaultValueList" Data..= defaultValueList)
+          ]
+      )
diff --git a/gen/Amazonka/LexV2Models/Types/SlotFilter.hs b/gen/Amazonka/LexV2Models/Types/SlotFilter.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/Types/SlotFilter.hs
@@ -0,0 +1,112 @@
+{-# 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.LexV2Models.Types.SlotFilter
+-- 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.LexV2Models.Types.SlotFilter where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LexV2Models.Types.SlotFilterName
+import Amazonka.LexV2Models.Types.SlotFilterOperator
+import qualified Amazonka.Prelude as Prelude
+
+-- | Filters the response from the @ListSlots@ operation.
+--
+-- /See:/ 'newSlotFilter' smart constructor.
+data SlotFilter = SlotFilter'
+  { -- | The name of the field to use for filtering.
+    name :: SlotFilterName,
+    -- | The value to use to filter the response.
+    values :: Prelude.NonEmpty Prelude.Text,
+    -- | The operator to use for the filter. Specify @EQ@ when the @ListSlots@
+    -- operation should return only aliases that equal the specified value.
+    -- Specify @CO@ when the @ListSlots@ operation should return aliases that
+    -- contain the specified value.
+    operator :: SlotFilterOperator
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SlotFilter' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'name', 'slotFilter_name' - The name of the field to use for filtering.
+--
+-- 'values', 'slotFilter_values' - The value to use to filter the response.
+--
+-- 'operator', 'slotFilter_operator' - The operator to use for the filter. Specify @EQ@ when the @ListSlots@
+-- operation should return only aliases that equal the specified value.
+-- Specify @CO@ when the @ListSlots@ operation should return aliases that
+-- contain the specified value.
+newSlotFilter ::
+  -- | 'name'
+  SlotFilterName ->
+  -- | 'values'
+  Prelude.NonEmpty Prelude.Text ->
+  -- | 'operator'
+  SlotFilterOperator ->
+  SlotFilter
+newSlotFilter pName_ pValues_ pOperator_ =
+  SlotFilter'
+    { name = pName_,
+      values = Lens.coerced Lens.# pValues_,
+      operator = pOperator_
+    }
+
+-- | The name of the field to use for filtering.
+slotFilter_name :: Lens.Lens' SlotFilter SlotFilterName
+slotFilter_name = Lens.lens (\SlotFilter' {name} -> name) (\s@SlotFilter' {} a -> s {name = a} :: SlotFilter)
+
+-- | The value to use to filter the response.
+slotFilter_values :: Lens.Lens' SlotFilter (Prelude.NonEmpty Prelude.Text)
+slotFilter_values = Lens.lens (\SlotFilter' {values} -> values) (\s@SlotFilter' {} a -> s {values = a} :: SlotFilter) Prelude.. Lens.coerced
+
+-- | The operator to use for the filter. Specify @EQ@ when the @ListSlots@
+-- operation should return only aliases that equal the specified value.
+-- Specify @CO@ when the @ListSlots@ operation should return aliases that
+-- contain the specified value.
+slotFilter_operator :: Lens.Lens' SlotFilter SlotFilterOperator
+slotFilter_operator = Lens.lens (\SlotFilter' {operator} -> operator) (\s@SlotFilter' {} a -> s {operator = a} :: SlotFilter)
+
+instance Prelude.Hashable SlotFilter where
+  hashWithSalt _salt SlotFilter' {..} =
+    _salt
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` values
+      `Prelude.hashWithSalt` operator
+
+instance Prelude.NFData SlotFilter where
+  rnf SlotFilter' {..} =
+    Prelude.rnf name
+      `Prelude.seq` Prelude.rnf values
+      `Prelude.seq` Prelude.rnf operator
+
+instance Data.ToJSON SlotFilter where
+  toJSON SlotFilter' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("name" Data..= name),
+            Prelude.Just ("values" Data..= values),
+            Prelude.Just ("operator" Data..= operator)
+          ]
+      )
diff --git a/gen/Amazonka/LexV2Models/Types/SlotFilterName.hs b/gen/Amazonka/LexV2Models/Types/SlotFilterName.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/Types/SlotFilterName.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.LexV2Models.Types.SlotFilterName
+-- 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.LexV2Models.Types.SlotFilterName
+  ( SlotFilterName
+      ( ..,
+        SlotFilterName_SlotName
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype SlotFilterName = SlotFilterName'
+  { fromSlotFilterName ::
+      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 SlotFilterName_SlotName :: SlotFilterName
+pattern SlotFilterName_SlotName = SlotFilterName' "SlotName"
+
+{-# COMPLETE
+  SlotFilterName_SlotName,
+  SlotFilterName'
+  #-}
diff --git a/gen/Amazonka/LexV2Models/Types/SlotFilterOperator.hs b/gen/Amazonka/LexV2Models/Types/SlotFilterOperator.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/Types/SlotFilterOperator.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.LexV2Models.Types.SlotFilterOperator
+-- 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.LexV2Models.Types.SlotFilterOperator
+  ( SlotFilterOperator
+      ( ..,
+        SlotFilterOperator_CO,
+        SlotFilterOperator_EQ
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype SlotFilterOperator = SlotFilterOperator'
+  { fromSlotFilterOperator ::
+      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 SlotFilterOperator_CO :: SlotFilterOperator
+pattern SlotFilterOperator_CO = SlotFilterOperator' "CO"
+
+pattern SlotFilterOperator_EQ :: SlotFilterOperator
+pattern SlotFilterOperator_EQ = SlotFilterOperator' "EQ"
+
+{-# COMPLETE
+  SlotFilterOperator_CO,
+  SlotFilterOperator_EQ,
+  SlotFilterOperator'
+  #-}
diff --git a/gen/Amazonka/LexV2Models/Types/SlotPriority.hs b/gen/Amazonka/LexV2Models/Types/SlotPriority.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/Types/SlotPriority.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.LexV2Models.Types.SlotPriority
+-- 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.LexV2Models.Types.SlotPriority 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
+
+-- | Sets the priority that Amazon Lex should use when eliciting slot values
+-- from a user.
+--
+-- /See:/ 'newSlotPriority' smart constructor.
+data SlotPriority = SlotPriority'
+  { -- | The priority that a slot should be elicited.
+    priority :: Prelude.Natural,
+    -- | The unique identifier of the slot.
+    slotId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SlotPriority' 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:
+--
+-- 'priority', 'slotPriority_priority' - The priority that a slot should be elicited.
+--
+-- 'slotId', 'slotPriority_slotId' - The unique identifier of the slot.
+newSlotPriority ::
+  -- | 'priority'
+  Prelude.Natural ->
+  -- | 'slotId'
+  Prelude.Text ->
+  SlotPriority
+newSlotPriority pPriority_ pSlotId_ =
+  SlotPriority'
+    { priority = pPriority_,
+      slotId = pSlotId_
+    }
+
+-- | The priority that a slot should be elicited.
+slotPriority_priority :: Lens.Lens' SlotPriority Prelude.Natural
+slotPriority_priority = Lens.lens (\SlotPriority' {priority} -> priority) (\s@SlotPriority' {} a -> s {priority = a} :: SlotPriority)
+
+-- | The unique identifier of the slot.
+slotPriority_slotId :: Lens.Lens' SlotPriority Prelude.Text
+slotPriority_slotId = Lens.lens (\SlotPriority' {slotId} -> slotId) (\s@SlotPriority' {} a -> s {slotId = a} :: SlotPriority)
+
+instance Data.FromJSON SlotPriority where
+  parseJSON =
+    Data.withObject
+      "SlotPriority"
+      ( \x ->
+          SlotPriority'
+            Prelude.<$> (x Data..: "priority")
+            Prelude.<*> (x Data..: "slotId")
+      )
+
+instance Prelude.Hashable SlotPriority where
+  hashWithSalt _salt SlotPriority' {..} =
+    _salt
+      `Prelude.hashWithSalt` priority
+      `Prelude.hashWithSalt` slotId
+
+instance Prelude.NFData SlotPriority where
+  rnf SlotPriority' {..} =
+    Prelude.rnf priority
+      `Prelude.seq` Prelude.rnf slotId
+
+instance Data.ToJSON SlotPriority where
+  toJSON SlotPriority' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("priority" Data..= priority),
+            Prelude.Just ("slotId" Data..= slotId)
+          ]
+      )
diff --git a/gen/Amazonka/LexV2Models/Types/SlotShape.hs b/gen/Amazonka/LexV2Models/Types/SlotShape.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/Types/SlotShape.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.LexV2Models.Types.SlotShape
+-- 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.LexV2Models.Types.SlotShape
+  ( SlotShape
+      ( ..,
+        SlotShape_List,
+        SlotShape_Scalar
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype SlotShape = SlotShape'
+  { fromSlotShape ::
+      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 SlotShape_List :: SlotShape
+pattern SlotShape_List = SlotShape' "List"
+
+pattern SlotShape_Scalar :: SlotShape
+pattern SlotShape_Scalar = SlotShape' "Scalar"
+
+{-# COMPLETE
+  SlotShape_List,
+  SlotShape_Scalar,
+  SlotShape'
+  #-}
diff --git a/gen/Amazonka/LexV2Models/Types/SlotSortAttribute.hs b/gen/Amazonka/LexV2Models/Types/SlotSortAttribute.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/Types/SlotSortAttribute.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.LexV2Models.Types.SlotSortAttribute
+-- 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.LexV2Models.Types.SlotSortAttribute
+  ( SlotSortAttribute
+      ( ..,
+        SlotSortAttribute_LastUpdatedDateTime,
+        SlotSortAttribute_SlotName
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype SlotSortAttribute = SlotSortAttribute'
+  { fromSlotSortAttribute ::
+      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 SlotSortAttribute_LastUpdatedDateTime :: SlotSortAttribute
+pattern SlotSortAttribute_LastUpdatedDateTime = SlotSortAttribute' "LastUpdatedDateTime"
+
+pattern SlotSortAttribute_SlotName :: SlotSortAttribute
+pattern SlotSortAttribute_SlotName = SlotSortAttribute' "SlotName"
+
+{-# COMPLETE
+  SlotSortAttribute_LastUpdatedDateTime,
+  SlotSortAttribute_SlotName,
+  SlotSortAttribute'
+  #-}
diff --git a/gen/Amazonka/LexV2Models/Types/SlotSortBy.hs b/gen/Amazonka/LexV2Models/Types/SlotSortBy.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/Types/SlotSortBy.hs
@@ -0,0 +1,89 @@
+{-# 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.LexV2Models.Types.SlotSortBy
+-- 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.LexV2Models.Types.SlotSortBy where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LexV2Models.Types.SlotSortAttribute
+import Amazonka.LexV2Models.Types.SortOrder
+import qualified Amazonka.Prelude as Prelude
+
+-- | Specifies attributes for sorting a list of bots.
+--
+-- /See:/ 'newSlotSortBy' smart constructor.
+data SlotSortBy = SlotSortBy'
+  { -- | The attribute to use to sort the list.
+    attribute :: SlotSortAttribute,
+    -- | The order to sort the list. You can choose ascending or descending.
+    order :: SortOrder
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SlotSortBy' 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:
+--
+-- 'attribute', 'slotSortBy_attribute' - The attribute to use to sort the list.
+--
+-- 'order', 'slotSortBy_order' - The order to sort the list. You can choose ascending or descending.
+newSlotSortBy ::
+  -- | 'attribute'
+  SlotSortAttribute ->
+  -- | 'order'
+  SortOrder ->
+  SlotSortBy
+newSlotSortBy pAttribute_ pOrder_ =
+  SlotSortBy'
+    { attribute = pAttribute_,
+      order = pOrder_
+    }
+
+-- | The attribute to use to sort the list.
+slotSortBy_attribute :: Lens.Lens' SlotSortBy SlotSortAttribute
+slotSortBy_attribute = Lens.lens (\SlotSortBy' {attribute} -> attribute) (\s@SlotSortBy' {} a -> s {attribute = a} :: SlotSortBy)
+
+-- | The order to sort the list. You can choose ascending or descending.
+slotSortBy_order :: Lens.Lens' SlotSortBy SortOrder
+slotSortBy_order = Lens.lens (\SlotSortBy' {order} -> order) (\s@SlotSortBy' {} a -> s {order = a} :: SlotSortBy)
+
+instance Prelude.Hashable SlotSortBy where
+  hashWithSalt _salt SlotSortBy' {..} =
+    _salt
+      `Prelude.hashWithSalt` attribute
+      `Prelude.hashWithSalt` order
+
+instance Prelude.NFData SlotSortBy where
+  rnf SlotSortBy' {..} =
+    Prelude.rnf attribute
+      `Prelude.seq` Prelude.rnf order
+
+instance Data.ToJSON SlotSortBy where
+  toJSON SlotSortBy' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("attribute" Data..= attribute),
+            Prelude.Just ("order" Data..= order)
+          ]
+      )
diff --git a/gen/Amazonka/LexV2Models/Types/SlotSummary.hs b/gen/Amazonka/LexV2Models/Types/SlotSummary.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/Types/SlotSummary.hs
@@ -0,0 +1,154 @@
+{-# 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.LexV2Models.Types.SlotSummary
+-- 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.LexV2Models.Types.SlotSummary where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LexV2Models.Types.PromptSpecification
+import Amazonka.LexV2Models.Types.SlotConstraint
+import qualified Amazonka.Prelude as Prelude
+
+-- | Summary information about a slot, a value that the bot elicits from the
+-- user.
+--
+-- /See:/ 'newSlotSummary' smart constructor.
+data SlotSummary = SlotSummary'
+  { -- | The description of the slot.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The timestamp of the last date and time that the slot was updated.
+    lastUpdatedDateTime :: Prelude.Maybe Data.POSIX,
+    -- | Whether the slot is required or optional. An intent is complete when all
+    -- required slots are filled.
+    slotConstraint :: Prelude.Maybe SlotConstraint,
+    -- | The unique identifier of the slot.
+    slotId :: Prelude.Maybe Prelude.Text,
+    -- | The name given to the slot.
+    slotName :: Prelude.Maybe Prelude.Text,
+    -- | The unique identifier for the slot type that defines the values for the
+    -- slot.
+    slotTypeId :: Prelude.Maybe Prelude.Text,
+    -- | Prompts that are sent to the user to elicit a value for the slot.
+    valueElicitationPromptSpecification :: Prelude.Maybe PromptSpecification
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SlotSummary' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'description', 'slotSummary_description' - The description of the slot.
+--
+-- 'lastUpdatedDateTime', 'slotSummary_lastUpdatedDateTime' - The timestamp of the last date and time that the slot was updated.
+--
+-- 'slotConstraint', 'slotSummary_slotConstraint' - Whether the slot is required or optional. An intent is complete when all
+-- required slots are filled.
+--
+-- 'slotId', 'slotSummary_slotId' - The unique identifier of the slot.
+--
+-- 'slotName', 'slotSummary_slotName' - The name given to the slot.
+--
+-- 'slotTypeId', 'slotSummary_slotTypeId' - The unique identifier for the slot type that defines the values for the
+-- slot.
+--
+-- 'valueElicitationPromptSpecification', 'slotSummary_valueElicitationPromptSpecification' - Prompts that are sent to the user to elicit a value for the slot.
+newSlotSummary ::
+  SlotSummary
+newSlotSummary =
+  SlotSummary'
+    { description = Prelude.Nothing,
+      lastUpdatedDateTime = Prelude.Nothing,
+      slotConstraint = Prelude.Nothing,
+      slotId = Prelude.Nothing,
+      slotName = Prelude.Nothing,
+      slotTypeId = Prelude.Nothing,
+      valueElicitationPromptSpecification =
+        Prelude.Nothing
+    }
+
+-- | The description of the slot.
+slotSummary_description :: Lens.Lens' SlotSummary (Prelude.Maybe Prelude.Text)
+slotSummary_description = Lens.lens (\SlotSummary' {description} -> description) (\s@SlotSummary' {} a -> s {description = a} :: SlotSummary)
+
+-- | The timestamp of the last date and time that the slot was updated.
+slotSummary_lastUpdatedDateTime :: Lens.Lens' SlotSummary (Prelude.Maybe Prelude.UTCTime)
+slotSummary_lastUpdatedDateTime = Lens.lens (\SlotSummary' {lastUpdatedDateTime} -> lastUpdatedDateTime) (\s@SlotSummary' {} a -> s {lastUpdatedDateTime = a} :: SlotSummary) Prelude.. Lens.mapping Data._Time
+
+-- | Whether the slot is required or optional. An intent is complete when all
+-- required slots are filled.
+slotSummary_slotConstraint :: Lens.Lens' SlotSummary (Prelude.Maybe SlotConstraint)
+slotSummary_slotConstraint = Lens.lens (\SlotSummary' {slotConstraint} -> slotConstraint) (\s@SlotSummary' {} a -> s {slotConstraint = a} :: SlotSummary)
+
+-- | The unique identifier of the slot.
+slotSummary_slotId :: Lens.Lens' SlotSummary (Prelude.Maybe Prelude.Text)
+slotSummary_slotId = Lens.lens (\SlotSummary' {slotId} -> slotId) (\s@SlotSummary' {} a -> s {slotId = a} :: SlotSummary)
+
+-- | The name given to the slot.
+slotSummary_slotName :: Lens.Lens' SlotSummary (Prelude.Maybe Prelude.Text)
+slotSummary_slotName = Lens.lens (\SlotSummary' {slotName} -> slotName) (\s@SlotSummary' {} a -> s {slotName = a} :: SlotSummary)
+
+-- | The unique identifier for the slot type that defines the values for the
+-- slot.
+slotSummary_slotTypeId :: Lens.Lens' SlotSummary (Prelude.Maybe Prelude.Text)
+slotSummary_slotTypeId = Lens.lens (\SlotSummary' {slotTypeId} -> slotTypeId) (\s@SlotSummary' {} a -> s {slotTypeId = a} :: SlotSummary)
+
+-- | Prompts that are sent to the user to elicit a value for the slot.
+slotSummary_valueElicitationPromptSpecification :: Lens.Lens' SlotSummary (Prelude.Maybe PromptSpecification)
+slotSummary_valueElicitationPromptSpecification = Lens.lens (\SlotSummary' {valueElicitationPromptSpecification} -> valueElicitationPromptSpecification) (\s@SlotSummary' {} a -> s {valueElicitationPromptSpecification = a} :: SlotSummary)
+
+instance Data.FromJSON SlotSummary where
+  parseJSON =
+    Data.withObject
+      "SlotSummary"
+      ( \x ->
+          SlotSummary'
+            Prelude.<$> (x Data..:? "description")
+            Prelude.<*> (x Data..:? "lastUpdatedDateTime")
+            Prelude.<*> (x Data..:? "slotConstraint")
+            Prelude.<*> (x Data..:? "slotId")
+            Prelude.<*> (x Data..:? "slotName")
+            Prelude.<*> (x Data..:? "slotTypeId")
+            Prelude.<*> (x Data..:? "valueElicitationPromptSpecification")
+      )
+
+instance Prelude.Hashable SlotSummary where
+  hashWithSalt _salt SlotSummary' {..} =
+    _salt
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` lastUpdatedDateTime
+      `Prelude.hashWithSalt` slotConstraint
+      `Prelude.hashWithSalt` slotId
+      `Prelude.hashWithSalt` slotName
+      `Prelude.hashWithSalt` slotTypeId
+      `Prelude.hashWithSalt` valueElicitationPromptSpecification
+
+instance Prelude.NFData SlotSummary where
+  rnf SlotSummary' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf lastUpdatedDateTime
+      `Prelude.seq` Prelude.rnf slotConstraint
+      `Prelude.seq` Prelude.rnf slotId
+      `Prelude.seq` Prelude.rnf slotName
+      `Prelude.seq` Prelude.rnf slotTypeId
+      `Prelude.seq` Prelude.rnf valueElicitationPromptSpecification
diff --git a/gen/Amazonka/LexV2Models/Types/SlotTypeCategory.hs b/gen/Amazonka/LexV2Models/Types/SlotTypeCategory.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/Types/SlotTypeCategory.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.LexV2Models.Types.SlotTypeCategory
+-- 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.LexV2Models.Types.SlotTypeCategory
+  ( SlotTypeCategory
+      ( ..,
+        SlotTypeCategory_Composite,
+        SlotTypeCategory_Custom,
+        SlotTypeCategory_Extended,
+        SlotTypeCategory_ExternalGrammar
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype SlotTypeCategory = SlotTypeCategory'
+  { fromSlotTypeCategory ::
+      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 SlotTypeCategory_Composite :: SlotTypeCategory
+pattern SlotTypeCategory_Composite = SlotTypeCategory' "Composite"
+
+pattern SlotTypeCategory_Custom :: SlotTypeCategory
+pattern SlotTypeCategory_Custom = SlotTypeCategory' "Custom"
+
+pattern SlotTypeCategory_Extended :: SlotTypeCategory
+pattern SlotTypeCategory_Extended = SlotTypeCategory' "Extended"
+
+pattern SlotTypeCategory_ExternalGrammar :: SlotTypeCategory
+pattern SlotTypeCategory_ExternalGrammar = SlotTypeCategory' "ExternalGrammar"
+
+{-# COMPLETE
+  SlotTypeCategory_Composite,
+  SlotTypeCategory_Custom,
+  SlotTypeCategory_Extended,
+  SlotTypeCategory_ExternalGrammar,
+  SlotTypeCategory'
+  #-}
diff --git a/gen/Amazonka/LexV2Models/Types/SlotTypeFilter.hs b/gen/Amazonka/LexV2Models/Types/SlotTypeFilter.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/Types/SlotTypeFilter.hs
@@ -0,0 +1,112 @@
+{-# 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.LexV2Models.Types.SlotTypeFilter
+-- 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.LexV2Models.Types.SlotTypeFilter where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LexV2Models.Types.SlotTypeFilterName
+import Amazonka.LexV2Models.Types.SlotTypeFilterOperator
+import qualified Amazonka.Prelude as Prelude
+
+-- | Filters the response from the @ListSlotTypes@ operation.
+--
+-- /See:/ 'newSlotTypeFilter' smart constructor.
+data SlotTypeFilter = SlotTypeFilter'
+  { -- | The name of the field to use for filtering.
+    name :: SlotTypeFilterName,
+    -- | The value to use to filter the response.
+    values :: Prelude.NonEmpty Prelude.Text,
+    -- | The operator to use for the filter. Specify @EQ@ when the
+    -- @ListSlotTypes@ operation should return only aliases that equal the
+    -- specified value. Specify @CO@ when the @ListSlotTypes@ operation should
+    -- return aliases that contain the specified value.
+    operator :: SlotTypeFilterOperator
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SlotTypeFilter' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'name', 'slotTypeFilter_name' - The name of the field to use for filtering.
+--
+-- 'values', 'slotTypeFilter_values' - The value to use to filter the response.
+--
+-- 'operator', 'slotTypeFilter_operator' - The operator to use for the filter. Specify @EQ@ when the
+-- @ListSlotTypes@ operation should return only aliases that equal the
+-- specified value. Specify @CO@ when the @ListSlotTypes@ operation should
+-- return aliases that contain the specified value.
+newSlotTypeFilter ::
+  -- | 'name'
+  SlotTypeFilterName ->
+  -- | 'values'
+  Prelude.NonEmpty Prelude.Text ->
+  -- | 'operator'
+  SlotTypeFilterOperator ->
+  SlotTypeFilter
+newSlotTypeFilter pName_ pValues_ pOperator_ =
+  SlotTypeFilter'
+    { name = pName_,
+      values = Lens.coerced Lens.# pValues_,
+      operator = pOperator_
+    }
+
+-- | The name of the field to use for filtering.
+slotTypeFilter_name :: Lens.Lens' SlotTypeFilter SlotTypeFilterName
+slotTypeFilter_name = Lens.lens (\SlotTypeFilter' {name} -> name) (\s@SlotTypeFilter' {} a -> s {name = a} :: SlotTypeFilter)
+
+-- | The value to use to filter the response.
+slotTypeFilter_values :: Lens.Lens' SlotTypeFilter (Prelude.NonEmpty Prelude.Text)
+slotTypeFilter_values = Lens.lens (\SlotTypeFilter' {values} -> values) (\s@SlotTypeFilter' {} a -> s {values = a} :: SlotTypeFilter) Prelude.. Lens.coerced
+
+-- | The operator to use for the filter. Specify @EQ@ when the
+-- @ListSlotTypes@ operation should return only aliases that equal the
+-- specified value. Specify @CO@ when the @ListSlotTypes@ operation should
+-- return aliases that contain the specified value.
+slotTypeFilter_operator :: Lens.Lens' SlotTypeFilter SlotTypeFilterOperator
+slotTypeFilter_operator = Lens.lens (\SlotTypeFilter' {operator} -> operator) (\s@SlotTypeFilter' {} a -> s {operator = a} :: SlotTypeFilter)
+
+instance Prelude.Hashable SlotTypeFilter where
+  hashWithSalt _salt SlotTypeFilter' {..} =
+    _salt
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` values
+      `Prelude.hashWithSalt` operator
+
+instance Prelude.NFData SlotTypeFilter where
+  rnf SlotTypeFilter' {..} =
+    Prelude.rnf name
+      `Prelude.seq` Prelude.rnf values
+      `Prelude.seq` Prelude.rnf operator
+
+instance Data.ToJSON SlotTypeFilter where
+  toJSON SlotTypeFilter' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("name" Data..= name),
+            Prelude.Just ("values" Data..= values),
+            Prelude.Just ("operator" Data..= operator)
+          ]
+      )
diff --git a/gen/Amazonka/LexV2Models/Types/SlotTypeFilterName.hs b/gen/Amazonka/LexV2Models/Types/SlotTypeFilterName.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/Types/SlotTypeFilterName.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.LexV2Models.Types.SlotTypeFilterName
+-- 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.LexV2Models.Types.SlotTypeFilterName
+  ( SlotTypeFilterName
+      ( ..,
+        SlotTypeFilterName_ExternalSourceType,
+        SlotTypeFilterName_SlotTypeName
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype SlotTypeFilterName = SlotTypeFilterName'
+  { fromSlotTypeFilterName ::
+      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 SlotTypeFilterName_ExternalSourceType :: SlotTypeFilterName
+pattern SlotTypeFilterName_ExternalSourceType = SlotTypeFilterName' "ExternalSourceType"
+
+pattern SlotTypeFilterName_SlotTypeName :: SlotTypeFilterName
+pattern SlotTypeFilterName_SlotTypeName = SlotTypeFilterName' "SlotTypeName"
+
+{-# COMPLETE
+  SlotTypeFilterName_ExternalSourceType,
+  SlotTypeFilterName_SlotTypeName,
+  SlotTypeFilterName'
+  #-}
diff --git a/gen/Amazonka/LexV2Models/Types/SlotTypeFilterOperator.hs b/gen/Amazonka/LexV2Models/Types/SlotTypeFilterOperator.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/Types/SlotTypeFilterOperator.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.LexV2Models.Types.SlotTypeFilterOperator
+-- 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.LexV2Models.Types.SlotTypeFilterOperator
+  ( SlotTypeFilterOperator
+      ( ..,
+        SlotTypeFilterOperator_CO,
+        SlotTypeFilterOperator_EQ
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype SlotTypeFilterOperator = SlotTypeFilterOperator'
+  { fromSlotTypeFilterOperator ::
+      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 SlotTypeFilterOperator_CO :: SlotTypeFilterOperator
+pattern SlotTypeFilterOperator_CO = SlotTypeFilterOperator' "CO"
+
+pattern SlotTypeFilterOperator_EQ :: SlotTypeFilterOperator
+pattern SlotTypeFilterOperator_EQ = SlotTypeFilterOperator' "EQ"
+
+{-# COMPLETE
+  SlotTypeFilterOperator_CO,
+  SlotTypeFilterOperator_EQ,
+  SlotTypeFilterOperator'
+  #-}
diff --git a/gen/Amazonka/LexV2Models/Types/SlotTypeSortAttribute.hs b/gen/Amazonka/LexV2Models/Types/SlotTypeSortAttribute.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/Types/SlotTypeSortAttribute.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.LexV2Models.Types.SlotTypeSortAttribute
+-- 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.LexV2Models.Types.SlotTypeSortAttribute
+  ( SlotTypeSortAttribute
+      ( ..,
+        SlotTypeSortAttribute_LastUpdatedDateTime,
+        SlotTypeSortAttribute_SlotTypeName
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype SlotTypeSortAttribute = SlotTypeSortAttribute'
+  { fromSlotTypeSortAttribute ::
+      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 SlotTypeSortAttribute_LastUpdatedDateTime :: SlotTypeSortAttribute
+pattern SlotTypeSortAttribute_LastUpdatedDateTime = SlotTypeSortAttribute' "LastUpdatedDateTime"
+
+pattern SlotTypeSortAttribute_SlotTypeName :: SlotTypeSortAttribute
+pattern SlotTypeSortAttribute_SlotTypeName = SlotTypeSortAttribute' "SlotTypeName"
+
+{-# COMPLETE
+  SlotTypeSortAttribute_LastUpdatedDateTime,
+  SlotTypeSortAttribute_SlotTypeName,
+  SlotTypeSortAttribute'
+  #-}
diff --git a/gen/Amazonka/LexV2Models/Types/SlotTypeSortBy.hs b/gen/Amazonka/LexV2Models/Types/SlotTypeSortBy.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/Types/SlotTypeSortBy.hs
@@ -0,0 +1,89 @@
+{-# 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.LexV2Models.Types.SlotTypeSortBy
+-- 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.LexV2Models.Types.SlotTypeSortBy where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LexV2Models.Types.SlotTypeSortAttribute
+import Amazonka.LexV2Models.Types.SortOrder
+import qualified Amazonka.Prelude as Prelude
+
+-- | Specifies attributes for sorting a list of slot types.
+--
+-- /See:/ 'newSlotTypeSortBy' smart constructor.
+data SlotTypeSortBy = SlotTypeSortBy'
+  { -- | The attribute to use to sort the list of slot types.
+    attribute :: SlotTypeSortAttribute,
+    -- | The order to sort the list. You can say ascending or descending.
+    order :: SortOrder
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SlotTypeSortBy' 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:
+--
+-- 'attribute', 'slotTypeSortBy_attribute' - The attribute to use to sort the list of slot types.
+--
+-- 'order', 'slotTypeSortBy_order' - The order to sort the list. You can say ascending or descending.
+newSlotTypeSortBy ::
+  -- | 'attribute'
+  SlotTypeSortAttribute ->
+  -- | 'order'
+  SortOrder ->
+  SlotTypeSortBy
+newSlotTypeSortBy pAttribute_ pOrder_ =
+  SlotTypeSortBy'
+    { attribute = pAttribute_,
+      order = pOrder_
+    }
+
+-- | The attribute to use to sort the list of slot types.
+slotTypeSortBy_attribute :: Lens.Lens' SlotTypeSortBy SlotTypeSortAttribute
+slotTypeSortBy_attribute = Lens.lens (\SlotTypeSortBy' {attribute} -> attribute) (\s@SlotTypeSortBy' {} a -> s {attribute = a} :: SlotTypeSortBy)
+
+-- | The order to sort the list. You can say ascending or descending.
+slotTypeSortBy_order :: Lens.Lens' SlotTypeSortBy SortOrder
+slotTypeSortBy_order = Lens.lens (\SlotTypeSortBy' {order} -> order) (\s@SlotTypeSortBy' {} a -> s {order = a} :: SlotTypeSortBy)
+
+instance Prelude.Hashable SlotTypeSortBy where
+  hashWithSalt _salt SlotTypeSortBy' {..} =
+    _salt
+      `Prelude.hashWithSalt` attribute
+      `Prelude.hashWithSalt` order
+
+instance Prelude.NFData SlotTypeSortBy where
+  rnf SlotTypeSortBy' {..} =
+    Prelude.rnf attribute
+      `Prelude.seq` Prelude.rnf order
+
+instance Data.ToJSON SlotTypeSortBy where
+  toJSON SlotTypeSortBy' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("attribute" Data..= attribute),
+            Prelude.Just ("order" Data..= order)
+          ]
+      )
diff --git a/gen/Amazonka/LexV2Models/Types/SlotTypeStatistics.hs b/gen/Amazonka/LexV2Models/Types/SlotTypeStatistics.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/Types/SlotTypeStatistics.hs
@@ -0,0 +1,77 @@
+{-# 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.LexV2Models.Types.SlotTypeStatistics
+-- 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.LexV2Models.Types.SlotTypeStatistics 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 object that contains the statistical summary of the recommended slot
+-- type associated with the bot recommendation.
+--
+-- /See:/ 'newSlotTypeStatistics' smart constructor.
+data SlotTypeStatistics = SlotTypeStatistics'
+  { -- | The number of recommended slot types associated with the bot
+    -- recommendation.
+    discoveredSlotTypeCount :: Prelude.Maybe Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SlotTypeStatistics' 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:
+--
+-- 'discoveredSlotTypeCount', 'slotTypeStatistics_discoveredSlotTypeCount' - The number of recommended slot types associated with the bot
+-- recommendation.
+newSlotTypeStatistics ::
+  SlotTypeStatistics
+newSlotTypeStatistics =
+  SlotTypeStatistics'
+    { discoveredSlotTypeCount =
+        Prelude.Nothing
+    }
+
+-- | The number of recommended slot types associated with the bot
+-- recommendation.
+slotTypeStatistics_discoveredSlotTypeCount :: Lens.Lens' SlotTypeStatistics (Prelude.Maybe Prelude.Int)
+slotTypeStatistics_discoveredSlotTypeCount = Lens.lens (\SlotTypeStatistics' {discoveredSlotTypeCount} -> discoveredSlotTypeCount) (\s@SlotTypeStatistics' {} a -> s {discoveredSlotTypeCount = a} :: SlotTypeStatistics)
+
+instance Data.FromJSON SlotTypeStatistics where
+  parseJSON =
+    Data.withObject
+      "SlotTypeStatistics"
+      ( \x ->
+          SlotTypeStatistics'
+            Prelude.<$> (x Data..:? "discoveredSlotTypeCount")
+      )
+
+instance Prelude.Hashable SlotTypeStatistics where
+  hashWithSalt _salt SlotTypeStatistics' {..} =
+    _salt
+      `Prelude.hashWithSalt` discoveredSlotTypeCount
+
+instance Prelude.NFData SlotTypeStatistics where
+  rnf SlotTypeStatistics' {..} =
+    Prelude.rnf discoveredSlotTypeCount
diff --git a/gen/Amazonka/LexV2Models/Types/SlotTypeSummary.hs b/gen/Amazonka/LexV2Models/Types/SlotTypeSummary.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/Types/SlotTypeSummary.hs
@@ -0,0 +1,172 @@
+{-# 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.LexV2Models.Types.SlotTypeSummary
+-- 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.LexV2Models.Types.SlotTypeSummary where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LexV2Models.Types.SlotTypeCategory
+import qualified Amazonka.Prelude as Prelude
+
+-- | Provides summary information about a slot type.
+--
+-- /See:/ 'newSlotTypeSummary' smart constructor.
+data SlotTypeSummary = SlotTypeSummary'
+  { -- | The description of the slot type.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | A timestamp of the date and time that the slot type was last updated.
+    lastUpdatedDateTime :: Prelude.Maybe Data.POSIX,
+    -- | If the slot type is derived from a built-on slot type, the name of the
+    -- parent slot type.
+    parentSlotTypeSignature :: Prelude.Maybe Prelude.Text,
+    -- | Indicates the type of the slot type.
+    --
+    -- -   @Custom@ - A slot type that you created using custom values. For
+    --     more information, see
+    --     <https://docs.aws.amazon.com/lexv2/latest/dg/custom-slot-types.html Creating custom slot types>.
+    --
+    -- -   @Extended@ - A slot type created by extending the
+    --     AMAZON.AlphaNumeric built-in slot type. For more information, see
+    --     <https://docs.aws.amazon.com/lexv2/latest/dg/built-in-slot-alphanumerice.html AMAZON.AlphaNumeric>.
+    --
+    -- -   @ExternalGrammar@ - A slot type using a custom GRXML grammar to
+    --     define values. For more information, see
+    --     <https://docs.aws.amazon.com/lexv2/latest/dg/building-grxml.html Using a custom grammar slot type>.
+    slotTypeCategory :: Prelude.Maybe SlotTypeCategory,
+    -- | The unique identifier assigned to the slot type.
+    slotTypeId :: Prelude.Maybe Prelude.Text,
+    -- | The name of the slot type.
+    slotTypeName :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SlotTypeSummary' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'description', 'slotTypeSummary_description' - The description of the slot type.
+--
+-- 'lastUpdatedDateTime', 'slotTypeSummary_lastUpdatedDateTime' - A timestamp of the date and time that the slot type was last updated.
+--
+-- 'parentSlotTypeSignature', 'slotTypeSummary_parentSlotTypeSignature' - If the slot type is derived from a built-on slot type, the name of the
+-- parent slot type.
+--
+-- 'slotTypeCategory', 'slotTypeSummary_slotTypeCategory' - Indicates the type of the slot type.
+--
+-- -   @Custom@ - A slot type that you created using custom values. For
+--     more information, see
+--     <https://docs.aws.amazon.com/lexv2/latest/dg/custom-slot-types.html Creating custom slot types>.
+--
+-- -   @Extended@ - A slot type created by extending the
+--     AMAZON.AlphaNumeric built-in slot type. For more information, see
+--     <https://docs.aws.amazon.com/lexv2/latest/dg/built-in-slot-alphanumerice.html AMAZON.AlphaNumeric>.
+--
+-- -   @ExternalGrammar@ - A slot type using a custom GRXML grammar to
+--     define values. For more information, see
+--     <https://docs.aws.amazon.com/lexv2/latest/dg/building-grxml.html Using a custom grammar slot type>.
+--
+-- 'slotTypeId', 'slotTypeSummary_slotTypeId' - The unique identifier assigned to the slot type.
+--
+-- 'slotTypeName', 'slotTypeSummary_slotTypeName' - The name of the slot type.
+newSlotTypeSummary ::
+  SlotTypeSummary
+newSlotTypeSummary =
+  SlotTypeSummary'
+    { description = Prelude.Nothing,
+      lastUpdatedDateTime = Prelude.Nothing,
+      parentSlotTypeSignature = Prelude.Nothing,
+      slotTypeCategory = Prelude.Nothing,
+      slotTypeId = Prelude.Nothing,
+      slotTypeName = Prelude.Nothing
+    }
+
+-- | The description of the slot type.
+slotTypeSummary_description :: Lens.Lens' SlotTypeSummary (Prelude.Maybe Prelude.Text)
+slotTypeSummary_description = Lens.lens (\SlotTypeSummary' {description} -> description) (\s@SlotTypeSummary' {} a -> s {description = a} :: SlotTypeSummary)
+
+-- | A timestamp of the date and time that the slot type was last updated.
+slotTypeSummary_lastUpdatedDateTime :: Lens.Lens' SlotTypeSummary (Prelude.Maybe Prelude.UTCTime)
+slotTypeSummary_lastUpdatedDateTime = Lens.lens (\SlotTypeSummary' {lastUpdatedDateTime} -> lastUpdatedDateTime) (\s@SlotTypeSummary' {} a -> s {lastUpdatedDateTime = a} :: SlotTypeSummary) Prelude.. Lens.mapping Data._Time
+
+-- | If the slot type is derived from a built-on slot type, the name of the
+-- parent slot type.
+slotTypeSummary_parentSlotTypeSignature :: Lens.Lens' SlotTypeSummary (Prelude.Maybe Prelude.Text)
+slotTypeSummary_parentSlotTypeSignature = Lens.lens (\SlotTypeSummary' {parentSlotTypeSignature} -> parentSlotTypeSignature) (\s@SlotTypeSummary' {} a -> s {parentSlotTypeSignature = a} :: SlotTypeSummary)
+
+-- | Indicates the type of the slot type.
+--
+-- -   @Custom@ - A slot type that you created using custom values. For
+--     more information, see
+--     <https://docs.aws.amazon.com/lexv2/latest/dg/custom-slot-types.html Creating custom slot types>.
+--
+-- -   @Extended@ - A slot type created by extending the
+--     AMAZON.AlphaNumeric built-in slot type. For more information, see
+--     <https://docs.aws.amazon.com/lexv2/latest/dg/built-in-slot-alphanumerice.html AMAZON.AlphaNumeric>.
+--
+-- -   @ExternalGrammar@ - A slot type using a custom GRXML grammar to
+--     define values. For more information, see
+--     <https://docs.aws.amazon.com/lexv2/latest/dg/building-grxml.html Using a custom grammar slot type>.
+slotTypeSummary_slotTypeCategory :: Lens.Lens' SlotTypeSummary (Prelude.Maybe SlotTypeCategory)
+slotTypeSummary_slotTypeCategory = Lens.lens (\SlotTypeSummary' {slotTypeCategory} -> slotTypeCategory) (\s@SlotTypeSummary' {} a -> s {slotTypeCategory = a} :: SlotTypeSummary)
+
+-- | The unique identifier assigned to the slot type.
+slotTypeSummary_slotTypeId :: Lens.Lens' SlotTypeSummary (Prelude.Maybe Prelude.Text)
+slotTypeSummary_slotTypeId = Lens.lens (\SlotTypeSummary' {slotTypeId} -> slotTypeId) (\s@SlotTypeSummary' {} a -> s {slotTypeId = a} :: SlotTypeSummary)
+
+-- | The name of the slot type.
+slotTypeSummary_slotTypeName :: Lens.Lens' SlotTypeSummary (Prelude.Maybe Prelude.Text)
+slotTypeSummary_slotTypeName = Lens.lens (\SlotTypeSummary' {slotTypeName} -> slotTypeName) (\s@SlotTypeSummary' {} a -> s {slotTypeName = a} :: SlotTypeSummary)
+
+instance Data.FromJSON SlotTypeSummary where
+  parseJSON =
+    Data.withObject
+      "SlotTypeSummary"
+      ( \x ->
+          SlotTypeSummary'
+            Prelude.<$> (x Data..:? "description")
+            Prelude.<*> (x Data..:? "lastUpdatedDateTime")
+            Prelude.<*> (x Data..:? "parentSlotTypeSignature")
+            Prelude.<*> (x Data..:? "slotTypeCategory")
+            Prelude.<*> (x Data..:? "slotTypeId")
+            Prelude.<*> (x Data..:? "slotTypeName")
+      )
+
+instance Prelude.Hashable SlotTypeSummary where
+  hashWithSalt _salt SlotTypeSummary' {..} =
+    _salt
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` lastUpdatedDateTime
+      `Prelude.hashWithSalt` parentSlotTypeSignature
+      `Prelude.hashWithSalt` slotTypeCategory
+      `Prelude.hashWithSalt` slotTypeId
+      `Prelude.hashWithSalt` slotTypeName
+
+instance Prelude.NFData SlotTypeSummary where
+  rnf SlotTypeSummary' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf lastUpdatedDateTime
+      `Prelude.seq` Prelude.rnf parentSlotTypeSignature
+      `Prelude.seq` Prelude.rnf slotTypeCategory
+      `Prelude.seq` Prelude.rnf slotTypeId
+      `Prelude.seq` Prelude.rnf slotTypeName
diff --git a/gen/Amazonka/LexV2Models/Types/SlotTypeValue.hs b/gen/Amazonka/LexV2Models/Types/SlotTypeValue.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/Types/SlotTypeValue.hs
@@ -0,0 +1,95 @@
+{-# 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.LexV2Models.Types.SlotTypeValue
+-- 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.LexV2Models.Types.SlotTypeValue where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LexV2Models.Types.SampleValue
+import qualified Amazonka.Prelude as Prelude
+
+-- | Each slot type can have a set of values. Each @SlotTypeValue@ represents
+-- a value that the slot type can take.
+--
+-- /See:/ 'newSlotTypeValue' smart constructor.
+data SlotTypeValue = SlotTypeValue'
+  { -- | The value of the slot type entry.
+    sampleValue :: Prelude.Maybe SampleValue,
+    -- | Additional values related to the slot type entry.
+    synonyms :: Prelude.Maybe (Prelude.NonEmpty SampleValue)
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SlotTypeValue' 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:
+--
+-- 'sampleValue', 'slotTypeValue_sampleValue' - The value of the slot type entry.
+--
+-- 'synonyms', 'slotTypeValue_synonyms' - Additional values related to the slot type entry.
+newSlotTypeValue ::
+  SlotTypeValue
+newSlotTypeValue =
+  SlotTypeValue'
+    { sampleValue = Prelude.Nothing,
+      synonyms = Prelude.Nothing
+    }
+
+-- | The value of the slot type entry.
+slotTypeValue_sampleValue :: Lens.Lens' SlotTypeValue (Prelude.Maybe SampleValue)
+slotTypeValue_sampleValue = Lens.lens (\SlotTypeValue' {sampleValue} -> sampleValue) (\s@SlotTypeValue' {} a -> s {sampleValue = a} :: SlotTypeValue)
+
+-- | Additional values related to the slot type entry.
+slotTypeValue_synonyms :: Lens.Lens' SlotTypeValue (Prelude.Maybe (Prelude.NonEmpty SampleValue))
+slotTypeValue_synonyms = Lens.lens (\SlotTypeValue' {synonyms} -> synonyms) (\s@SlotTypeValue' {} a -> s {synonyms = a} :: SlotTypeValue) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromJSON SlotTypeValue where
+  parseJSON =
+    Data.withObject
+      "SlotTypeValue"
+      ( \x ->
+          SlotTypeValue'
+            Prelude.<$> (x Data..:? "sampleValue")
+            Prelude.<*> (x Data..:? "synonyms")
+      )
+
+instance Prelude.Hashable SlotTypeValue where
+  hashWithSalt _salt SlotTypeValue' {..} =
+    _salt
+      `Prelude.hashWithSalt` sampleValue
+      `Prelude.hashWithSalt` synonyms
+
+instance Prelude.NFData SlotTypeValue where
+  rnf SlotTypeValue' {..} =
+    Prelude.rnf sampleValue
+      `Prelude.seq` Prelude.rnf synonyms
+
+instance Data.ToJSON SlotTypeValue where
+  toJSON SlotTypeValue' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("sampleValue" Data..=) Prelude.<$> sampleValue,
+            ("synonyms" Data..=) Prelude.<$> synonyms
+          ]
+      )
diff --git a/gen/Amazonka/LexV2Models/Types/SlotValue.hs b/gen/Amazonka/LexV2Models/Types/SlotValue.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/Types/SlotValue.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.LexV2Models.Types.SlotValue
+-- 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.LexV2Models.Types.SlotValue 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 value to set in a slot.
+--
+-- /See:/ 'newSlotValue' smart constructor.
+data SlotValue = SlotValue'
+  { -- | The value that Amazon Lex determines for the slot. The actual value
+    -- depends on the setting of the value selection strategy for the bot. You
+    -- can choose to use the value entered by the user, or you can have Amazon
+    -- Lex choose the first value in the @resolvedValues@ list.
+    interpretedValue :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SlotValue' 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:
+--
+-- 'interpretedValue', 'slotValue_interpretedValue' - The value that Amazon Lex determines for the slot. The actual value
+-- depends on the setting of the value selection strategy for the bot. You
+-- can choose to use the value entered by the user, or you can have Amazon
+-- Lex choose the first value in the @resolvedValues@ list.
+newSlotValue ::
+  SlotValue
+newSlotValue =
+  SlotValue' {interpretedValue = Prelude.Nothing}
+
+-- | The value that Amazon Lex determines for the slot. The actual value
+-- depends on the setting of the value selection strategy for the bot. You
+-- can choose to use the value entered by the user, or you can have Amazon
+-- Lex choose the first value in the @resolvedValues@ list.
+slotValue_interpretedValue :: Lens.Lens' SlotValue (Prelude.Maybe Prelude.Text)
+slotValue_interpretedValue = Lens.lens (\SlotValue' {interpretedValue} -> interpretedValue) (\s@SlotValue' {} a -> s {interpretedValue = a} :: SlotValue)
+
+instance Data.FromJSON SlotValue where
+  parseJSON =
+    Data.withObject
+      "SlotValue"
+      ( \x ->
+          SlotValue'
+            Prelude.<$> (x Data..:? "interpretedValue")
+      )
+
+instance Prelude.Hashable SlotValue where
+  hashWithSalt _salt SlotValue' {..} =
+    _salt `Prelude.hashWithSalt` interpretedValue
+
+instance Prelude.NFData SlotValue where
+  rnf SlotValue' {..} = Prelude.rnf interpretedValue
+
+instance Data.ToJSON SlotValue where
+  toJSON SlotValue' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("interpretedValue" Data..=)
+              Prelude.<$> interpretedValue
+          ]
+      )
diff --git a/gen/Amazonka/LexV2Models/Types/SlotValueElicitationSetting.hs b/gen/Amazonka/LexV2Models/Types/SlotValueElicitationSetting.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/Types/SlotValueElicitationSetting.hs
@@ -0,0 +1,181 @@
+{-# 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.LexV2Models.Types.SlotValueElicitationSetting
+-- 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.LexV2Models.Types.SlotValueElicitationSetting where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LexV2Models.Types.PromptSpecification
+import Amazonka.LexV2Models.Types.SampleUtterance
+import Amazonka.LexV2Models.Types.SlotCaptureSetting
+import Amazonka.LexV2Models.Types.SlotConstraint
+import Amazonka.LexV2Models.Types.SlotDefaultValueSpecification
+import Amazonka.LexV2Models.Types.WaitAndContinueSpecification
+import qualified Amazonka.Prelude as Prelude
+
+-- | Specifies the elicitation setting details for constituent sub slots of a
+-- composite slot.
+--
+-- /See:/ 'newSlotValueElicitationSetting' smart constructor.
+data SlotValueElicitationSetting = SlotValueElicitationSetting'
+  { -- | A list of default values for a slot. Default values are used when Amazon
+    -- Lex hasn\'t determined a value for a slot. You can specify default
+    -- values from context variables, session attributes, and defined values.
+    defaultValueSpecification :: Prelude.Maybe SlotDefaultValueSpecification,
+    -- | The prompt that Amazon Lex uses to elicit the slot value from the user.
+    promptSpecification :: Prelude.Maybe PromptSpecification,
+    -- | If you know a specific pattern that users might respond to an Amazon Lex
+    -- request for a slot value, you can provide those utterances to improve
+    -- accuracy. This is optional. In most cases, Amazon Lex is capable of
+    -- understanding user utterances.
+    sampleUtterances :: Prelude.Maybe [SampleUtterance],
+    -- | Specifies the settings that Amazon Lex uses when a slot value is
+    -- successfully entered by a user.
+    slotCaptureSetting :: Prelude.Maybe SlotCaptureSetting,
+    waitAndContinueSpecification :: Prelude.Maybe WaitAndContinueSpecification,
+    -- | Specifies whether the slot is required or optional.
+    slotConstraint :: SlotConstraint
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SlotValueElicitationSetting' 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:
+--
+-- 'defaultValueSpecification', 'slotValueElicitationSetting_defaultValueSpecification' - A list of default values for a slot. Default values are used when Amazon
+-- Lex hasn\'t determined a value for a slot. You can specify default
+-- values from context variables, session attributes, and defined values.
+--
+-- 'promptSpecification', 'slotValueElicitationSetting_promptSpecification' - The prompt that Amazon Lex uses to elicit the slot value from the user.
+--
+-- 'sampleUtterances', 'slotValueElicitationSetting_sampleUtterances' - If you know a specific pattern that users might respond to an Amazon Lex
+-- request for a slot value, you can provide those utterances to improve
+-- accuracy. This is optional. In most cases, Amazon Lex is capable of
+-- understanding user utterances.
+--
+-- 'slotCaptureSetting', 'slotValueElicitationSetting_slotCaptureSetting' - Specifies the settings that Amazon Lex uses when a slot value is
+-- successfully entered by a user.
+--
+-- 'waitAndContinueSpecification', 'slotValueElicitationSetting_waitAndContinueSpecification' - Undocumented member.
+--
+-- 'slotConstraint', 'slotValueElicitationSetting_slotConstraint' - Specifies whether the slot is required or optional.
+newSlotValueElicitationSetting ::
+  -- | 'slotConstraint'
+  SlotConstraint ->
+  SlotValueElicitationSetting
+newSlotValueElicitationSetting pSlotConstraint_ =
+  SlotValueElicitationSetting'
+    { defaultValueSpecification =
+        Prelude.Nothing,
+      promptSpecification = Prelude.Nothing,
+      sampleUtterances = Prelude.Nothing,
+      slotCaptureSetting = Prelude.Nothing,
+      waitAndContinueSpecification = Prelude.Nothing,
+      slotConstraint = pSlotConstraint_
+    }
+
+-- | A list of default values for a slot. Default values are used when Amazon
+-- Lex hasn\'t determined a value for a slot. You can specify default
+-- values from context variables, session attributes, and defined values.
+slotValueElicitationSetting_defaultValueSpecification :: Lens.Lens' SlotValueElicitationSetting (Prelude.Maybe SlotDefaultValueSpecification)
+slotValueElicitationSetting_defaultValueSpecification = Lens.lens (\SlotValueElicitationSetting' {defaultValueSpecification} -> defaultValueSpecification) (\s@SlotValueElicitationSetting' {} a -> s {defaultValueSpecification = a} :: SlotValueElicitationSetting)
+
+-- | The prompt that Amazon Lex uses to elicit the slot value from the user.
+slotValueElicitationSetting_promptSpecification :: Lens.Lens' SlotValueElicitationSetting (Prelude.Maybe PromptSpecification)
+slotValueElicitationSetting_promptSpecification = Lens.lens (\SlotValueElicitationSetting' {promptSpecification} -> promptSpecification) (\s@SlotValueElicitationSetting' {} a -> s {promptSpecification = a} :: SlotValueElicitationSetting)
+
+-- | If you know a specific pattern that users might respond to an Amazon Lex
+-- request for a slot value, you can provide those utterances to improve
+-- accuracy. This is optional. In most cases, Amazon Lex is capable of
+-- understanding user utterances.
+slotValueElicitationSetting_sampleUtterances :: Lens.Lens' SlotValueElicitationSetting (Prelude.Maybe [SampleUtterance])
+slotValueElicitationSetting_sampleUtterances = Lens.lens (\SlotValueElicitationSetting' {sampleUtterances} -> sampleUtterances) (\s@SlotValueElicitationSetting' {} a -> s {sampleUtterances = a} :: SlotValueElicitationSetting) Prelude.. Lens.mapping Lens.coerced
+
+-- | Specifies the settings that Amazon Lex uses when a slot value is
+-- successfully entered by a user.
+slotValueElicitationSetting_slotCaptureSetting :: Lens.Lens' SlotValueElicitationSetting (Prelude.Maybe SlotCaptureSetting)
+slotValueElicitationSetting_slotCaptureSetting = Lens.lens (\SlotValueElicitationSetting' {slotCaptureSetting} -> slotCaptureSetting) (\s@SlotValueElicitationSetting' {} a -> s {slotCaptureSetting = a} :: SlotValueElicitationSetting)
+
+-- | Undocumented member.
+slotValueElicitationSetting_waitAndContinueSpecification :: Lens.Lens' SlotValueElicitationSetting (Prelude.Maybe WaitAndContinueSpecification)
+slotValueElicitationSetting_waitAndContinueSpecification = Lens.lens (\SlotValueElicitationSetting' {waitAndContinueSpecification} -> waitAndContinueSpecification) (\s@SlotValueElicitationSetting' {} a -> s {waitAndContinueSpecification = a} :: SlotValueElicitationSetting)
+
+-- | Specifies whether the slot is required or optional.
+slotValueElicitationSetting_slotConstraint :: Lens.Lens' SlotValueElicitationSetting SlotConstraint
+slotValueElicitationSetting_slotConstraint = Lens.lens (\SlotValueElicitationSetting' {slotConstraint} -> slotConstraint) (\s@SlotValueElicitationSetting' {} a -> s {slotConstraint = a} :: SlotValueElicitationSetting)
+
+instance Data.FromJSON SlotValueElicitationSetting where
+  parseJSON =
+    Data.withObject
+      "SlotValueElicitationSetting"
+      ( \x ->
+          SlotValueElicitationSetting'
+            Prelude.<$> (x Data..:? "defaultValueSpecification")
+            Prelude.<*> (x Data..:? "promptSpecification")
+            Prelude.<*> ( x
+                            Data..:? "sampleUtterances"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> (x Data..:? "slotCaptureSetting")
+            Prelude.<*> (x Data..:? "waitAndContinueSpecification")
+            Prelude.<*> (x Data..: "slotConstraint")
+      )
+
+instance Prelude.Hashable SlotValueElicitationSetting where
+  hashWithSalt _salt SlotValueElicitationSetting' {..} =
+    _salt
+      `Prelude.hashWithSalt` defaultValueSpecification
+      `Prelude.hashWithSalt` promptSpecification
+      `Prelude.hashWithSalt` sampleUtterances
+      `Prelude.hashWithSalt` slotCaptureSetting
+      `Prelude.hashWithSalt` waitAndContinueSpecification
+      `Prelude.hashWithSalt` slotConstraint
+
+instance Prelude.NFData SlotValueElicitationSetting where
+  rnf SlotValueElicitationSetting' {..} =
+    Prelude.rnf defaultValueSpecification
+      `Prelude.seq` Prelude.rnf promptSpecification
+      `Prelude.seq` Prelude.rnf sampleUtterances
+      `Prelude.seq` Prelude.rnf slotCaptureSetting
+      `Prelude.seq` Prelude.rnf waitAndContinueSpecification
+      `Prelude.seq` Prelude.rnf slotConstraint
+
+instance Data.ToJSON SlotValueElicitationSetting where
+  toJSON SlotValueElicitationSetting' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("defaultValueSpecification" Data..=)
+              Prelude.<$> defaultValueSpecification,
+            ("promptSpecification" Data..=)
+              Prelude.<$> promptSpecification,
+            ("sampleUtterances" Data..=)
+              Prelude.<$> sampleUtterances,
+            ("slotCaptureSetting" Data..=)
+              Prelude.<$> slotCaptureSetting,
+            ("waitAndContinueSpecification" Data..=)
+              Prelude.<$> waitAndContinueSpecification,
+            Prelude.Just
+              ("slotConstraint" Data..= slotConstraint)
+          ]
+      )
diff --git a/gen/Amazonka/LexV2Models/Types/SlotValueOverride.hs b/gen/Amazonka/LexV2Models/Types/SlotValueOverride.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/Types/SlotValueOverride.hs
@@ -0,0 +1,121 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.LexV2Models.Types.SlotValueOverride
+-- 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.LexV2Models.Types.SlotValueOverride where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LexV2Models.Types.SlotShape
+import Amazonka.LexV2Models.Types.SlotValue
+import qualified Amazonka.Prelude as Prelude
+
+-- | The slot values that Amazon Lex uses when it sets slot values in a
+-- dialog step.
+--
+-- /See:/ 'newSlotValueOverride' smart constructor.
+data SlotValueOverride = SlotValueOverride'
+  { -- | When the shape value is @List@, it indicates that the @values@ field
+    -- contains a list of slot values. When the value is @Scalar@, it indicates
+    -- that the @value@ field contains a single value.
+    shape :: Prelude.Maybe SlotShape,
+    -- | The current value of the slot.
+    value :: Prelude.Maybe SlotValue,
+    -- | A list of one or more values that the user provided for the slot. For
+    -- example, for a slot that elicits pizza toppings, the values might be
+    -- \"pepperoni\" and \"pineapple.\"
+    values :: Prelude.Maybe [SlotValueOverride]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SlotValueOverride' 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:
+--
+-- 'shape', 'slotValueOverride_shape' - When the shape value is @List@, it indicates that the @values@ field
+-- contains a list of slot values. When the value is @Scalar@, it indicates
+-- that the @value@ field contains a single value.
+--
+-- 'value', 'slotValueOverride_value' - The current value of the slot.
+--
+-- 'values', 'slotValueOverride_values' - A list of one or more values that the user provided for the slot. For
+-- example, for a slot that elicits pizza toppings, the values might be
+-- \"pepperoni\" and \"pineapple.\"
+newSlotValueOverride ::
+  SlotValueOverride
+newSlotValueOverride =
+  SlotValueOverride'
+    { shape = Prelude.Nothing,
+      value = Prelude.Nothing,
+      values = Prelude.Nothing
+    }
+
+-- | When the shape value is @List@, it indicates that the @values@ field
+-- contains a list of slot values. When the value is @Scalar@, it indicates
+-- that the @value@ field contains a single value.
+slotValueOverride_shape :: Lens.Lens' SlotValueOverride (Prelude.Maybe SlotShape)
+slotValueOverride_shape = Lens.lens (\SlotValueOverride' {shape} -> shape) (\s@SlotValueOverride' {} a -> s {shape = a} :: SlotValueOverride)
+
+-- | The current value of the slot.
+slotValueOverride_value :: Lens.Lens' SlotValueOverride (Prelude.Maybe SlotValue)
+slotValueOverride_value = Lens.lens (\SlotValueOverride' {value} -> value) (\s@SlotValueOverride' {} a -> s {value = a} :: SlotValueOverride)
+
+-- | A list of one or more values that the user provided for the slot. For
+-- example, for a slot that elicits pizza toppings, the values might be
+-- \"pepperoni\" and \"pineapple.\"
+slotValueOverride_values :: Lens.Lens' SlotValueOverride (Prelude.Maybe [SlotValueOverride])
+slotValueOverride_values = Lens.lens (\SlotValueOverride' {values} -> values) (\s@SlotValueOverride' {} a -> s {values = a} :: SlotValueOverride) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromJSON SlotValueOverride where
+  parseJSON =
+    Data.withObject
+      "SlotValueOverride"
+      ( \x ->
+          SlotValueOverride'
+            Prelude.<$> (x Data..:? "shape")
+            Prelude.<*> (x Data..:? "value")
+            Prelude.<*> (x Data..:? "values" Data..!= Prelude.mempty)
+      )
+
+instance Prelude.Hashable SlotValueOverride where
+  hashWithSalt _salt SlotValueOverride' {..} =
+    _salt
+      `Prelude.hashWithSalt` shape
+      `Prelude.hashWithSalt` value
+      `Prelude.hashWithSalt` values
+
+instance Prelude.NFData SlotValueOverride where
+  rnf SlotValueOverride' {..} =
+    Prelude.rnf shape
+      `Prelude.seq` Prelude.rnf value
+      `Prelude.seq` Prelude.rnf values
+
+instance Data.ToJSON SlotValueOverride where
+  toJSON SlotValueOverride' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("shape" Data..=) Prelude.<$> shape,
+            ("value" Data..=) Prelude.<$> value,
+            ("values" Data..=) Prelude.<$> values
+          ]
+      )
diff --git a/gen/Amazonka/LexV2Models/Types/SlotValueRegexFilter.hs b/gen/Amazonka/LexV2Models/Types/SlotValueRegexFilter.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/Types/SlotValueRegexFilter.hs
@@ -0,0 +1,131 @@
+{-# 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.LexV2Models.Types.SlotValueRegexFilter
+-- 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.LexV2Models.Types.SlotValueRegexFilter 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
+
+-- | Provides a regular expression used to validate the value of a slot.
+--
+-- /See:/ 'newSlotValueRegexFilter' smart constructor.
+data SlotValueRegexFilter = SlotValueRegexFilter'
+  { -- | A regular expression used to validate the value of a slot.
+    --
+    -- Use a standard regular expression. Amazon Lex supports the following
+    -- characters in the regular expression:
+    --
+    -- -   A-Z, a-z
+    --
+    -- -   0-9
+    --
+    -- -   Unicode characters (\"\\ u\<Unicode>\")
+    --
+    -- Represent Unicode characters with four digits, for example \"\\u0041\"
+    -- or \"\\u005A\".
+    --
+    -- The following regular expression operators are not supported:
+    --
+    -- -   Infinite repeaters: *, +, or {x,} with no upper bound.
+    --
+    -- -   Wild card (.)
+    pattern' :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SlotValueRegexFilter' 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:
+--
+-- 'pattern'', 'slotValueRegexFilter_pattern' - A regular expression used to validate the value of a slot.
+--
+-- Use a standard regular expression. Amazon Lex supports the following
+-- characters in the regular expression:
+--
+-- -   A-Z, a-z
+--
+-- -   0-9
+--
+-- -   Unicode characters (\"\\ u\<Unicode>\")
+--
+-- Represent Unicode characters with four digits, for example \"\\u0041\"
+-- or \"\\u005A\".
+--
+-- The following regular expression operators are not supported:
+--
+-- -   Infinite repeaters: *, +, or {x,} with no upper bound.
+--
+-- -   Wild card (.)
+newSlotValueRegexFilter ::
+  -- | 'pattern''
+  Prelude.Text ->
+  SlotValueRegexFilter
+newSlotValueRegexFilter pPattern_ =
+  SlotValueRegexFilter' {pattern' = pPattern_}
+
+-- | A regular expression used to validate the value of a slot.
+--
+-- Use a standard regular expression. Amazon Lex supports the following
+-- characters in the regular expression:
+--
+-- -   A-Z, a-z
+--
+-- -   0-9
+--
+-- -   Unicode characters (\"\\ u\<Unicode>\")
+--
+-- Represent Unicode characters with four digits, for example \"\\u0041\"
+-- or \"\\u005A\".
+--
+-- The following regular expression operators are not supported:
+--
+-- -   Infinite repeaters: *, +, or {x,} with no upper bound.
+--
+-- -   Wild card (.)
+slotValueRegexFilter_pattern :: Lens.Lens' SlotValueRegexFilter Prelude.Text
+slotValueRegexFilter_pattern = Lens.lens (\SlotValueRegexFilter' {pattern'} -> pattern') (\s@SlotValueRegexFilter' {} a -> s {pattern' = a} :: SlotValueRegexFilter)
+
+instance Data.FromJSON SlotValueRegexFilter where
+  parseJSON =
+    Data.withObject
+      "SlotValueRegexFilter"
+      ( \x ->
+          SlotValueRegexFilter'
+            Prelude.<$> (x Data..: "pattern")
+      )
+
+instance Prelude.Hashable SlotValueRegexFilter where
+  hashWithSalt _salt SlotValueRegexFilter' {..} =
+    _salt `Prelude.hashWithSalt` pattern'
+
+instance Prelude.NFData SlotValueRegexFilter where
+  rnf SlotValueRegexFilter' {..} = Prelude.rnf pattern'
+
+instance Data.ToJSON SlotValueRegexFilter where
+  toJSON SlotValueRegexFilter' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("pattern" Data..= pattern')]
+      )
diff --git a/gen/Amazonka/LexV2Models/Types/SlotValueResolutionStrategy.hs b/gen/Amazonka/LexV2Models/Types/SlotValueResolutionStrategy.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/Types/SlotValueResolutionStrategy.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.LexV2Models.Types.SlotValueResolutionStrategy
+-- 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.LexV2Models.Types.SlotValueResolutionStrategy
+  ( SlotValueResolutionStrategy
+      ( ..,
+        SlotValueResolutionStrategy_Concatenation,
+        SlotValueResolutionStrategy_OriginalValue,
+        SlotValueResolutionStrategy_TopResolution
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype SlotValueResolutionStrategy = SlotValueResolutionStrategy'
+  { fromSlotValueResolutionStrategy ::
+      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 SlotValueResolutionStrategy_Concatenation :: SlotValueResolutionStrategy
+pattern SlotValueResolutionStrategy_Concatenation = SlotValueResolutionStrategy' "Concatenation"
+
+pattern SlotValueResolutionStrategy_OriginalValue :: SlotValueResolutionStrategy
+pattern SlotValueResolutionStrategy_OriginalValue = SlotValueResolutionStrategy' "OriginalValue"
+
+pattern SlotValueResolutionStrategy_TopResolution :: SlotValueResolutionStrategy
+pattern SlotValueResolutionStrategy_TopResolution = SlotValueResolutionStrategy' "TopResolution"
+
+{-# COMPLETE
+  SlotValueResolutionStrategy_Concatenation,
+  SlotValueResolutionStrategy_OriginalValue,
+  SlotValueResolutionStrategy_TopResolution,
+  SlotValueResolutionStrategy'
+  #-}
diff --git a/gen/Amazonka/LexV2Models/Types/SlotValueSelectionSetting.hs b/gen/Amazonka/LexV2Models/Types/SlotValueSelectionSetting.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/Types/SlotValueSelectionSetting.hs
@@ -0,0 +1,150 @@
+{-# 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.LexV2Models.Types.SlotValueSelectionSetting
+-- 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.LexV2Models.Types.SlotValueSelectionSetting where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LexV2Models.Types.AdvancedRecognitionSetting
+import Amazonka.LexV2Models.Types.SlotValueRegexFilter
+import Amazonka.LexV2Models.Types.SlotValueResolutionStrategy
+import qualified Amazonka.Prelude as Prelude
+
+-- | Contains settings used by Amazon Lex to select a slot value.
+--
+-- /See:/ 'newSlotValueSelectionSetting' smart constructor.
+data SlotValueSelectionSetting = SlotValueSelectionSetting'
+  { -- | Provides settings that enable advanced recognition settings for slot
+    -- values.
+    advancedRecognitionSetting :: Prelude.Maybe AdvancedRecognitionSetting,
+    -- | A regular expression used to validate the value of a slot.
+    regexFilter :: Prelude.Maybe SlotValueRegexFilter,
+    -- | Determines the slot resolution strategy that Amazon Lex uses to return
+    -- slot type values. The field can be set to one of the following values:
+    --
+    -- -   OriginalValue - Returns the value entered by the user, if the user
+    --     value is similar to the slot value.
+    --
+    -- -   TopResolution - If there is a resolution list for the slot, return
+    --     the first value in the resolution list as the slot type value. If
+    --     there is no resolution list, null is returned.
+    --
+    -- If you don\'t specify the valueSelectionStrategy, the default is
+    -- OriginalValue.
+    resolutionStrategy :: SlotValueResolutionStrategy
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SlotValueSelectionSetting' 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:
+--
+-- 'advancedRecognitionSetting', 'slotValueSelectionSetting_advancedRecognitionSetting' - Provides settings that enable advanced recognition settings for slot
+-- values.
+--
+-- 'regexFilter', 'slotValueSelectionSetting_regexFilter' - A regular expression used to validate the value of a slot.
+--
+-- 'resolutionStrategy', 'slotValueSelectionSetting_resolutionStrategy' - Determines the slot resolution strategy that Amazon Lex uses to return
+-- slot type values. The field can be set to one of the following values:
+--
+-- -   OriginalValue - Returns the value entered by the user, if the user
+--     value is similar to the slot value.
+--
+-- -   TopResolution - If there is a resolution list for the slot, return
+--     the first value in the resolution list as the slot type value. If
+--     there is no resolution list, null is returned.
+--
+-- If you don\'t specify the valueSelectionStrategy, the default is
+-- OriginalValue.
+newSlotValueSelectionSetting ::
+  -- | 'resolutionStrategy'
+  SlotValueResolutionStrategy ->
+  SlotValueSelectionSetting
+newSlotValueSelectionSetting pResolutionStrategy_ =
+  SlotValueSelectionSetting'
+    { advancedRecognitionSetting =
+        Prelude.Nothing,
+      regexFilter = Prelude.Nothing,
+      resolutionStrategy = pResolutionStrategy_
+    }
+
+-- | Provides settings that enable advanced recognition settings for slot
+-- values.
+slotValueSelectionSetting_advancedRecognitionSetting :: Lens.Lens' SlotValueSelectionSetting (Prelude.Maybe AdvancedRecognitionSetting)
+slotValueSelectionSetting_advancedRecognitionSetting = Lens.lens (\SlotValueSelectionSetting' {advancedRecognitionSetting} -> advancedRecognitionSetting) (\s@SlotValueSelectionSetting' {} a -> s {advancedRecognitionSetting = a} :: SlotValueSelectionSetting)
+
+-- | A regular expression used to validate the value of a slot.
+slotValueSelectionSetting_regexFilter :: Lens.Lens' SlotValueSelectionSetting (Prelude.Maybe SlotValueRegexFilter)
+slotValueSelectionSetting_regexFilter = Lens.lens (\SlotValueSelectionSetting' {regexFilter} -> regexFilter) (\s@SlotValueSelectionSetting' {} a -> s {regexFilter = a} :: SlotValueSelectionSetting)
+
+-- | Determines the slot resolution strategy that Amazon Lex uses to return
+-- slot type values. The field can be set to one of the following values:
+--
+-- -   OriginalValue - Returns the value entered by the user, if the user
+--     value is similar to the slot value.
+--
+-- -   TopResolution - If there is a resolution list for the slot, return
+--     the first value in the resolution list as the slot type value. If
+--     there is no resolution list, null is returned.
+--
+-- If you don\'t specify the valueSelectionStrategy, the default is
+-- OriginalValue.
+slotValueSelectionSetting_resolutionStrategy :: Lens.Lens' SlotValueSelectionSetting SlotValueResolutionStrategy
+slotValueSelectionSetting_resolutionStrategy = Lens.lens (\SlotValueSelectionSetting' {resolutionStrategy} -> resolutionStrategy) (\s@SlotValueSelectionSetting' {} a -> s {resolutionStrategy = a} :: SlotValueSelectionSetting)
+
+instance Data.FromJSON SlotValueSelectionSetting where
+  parseJSON =
+    Data.withObject
+      "SlotValueSelectionSetting"
+      ( \x ->
+          SlotValueSelectionSetting'
+            Prelude.<$> (x Data..:? "advancedRecognitionSetting")
+            Prelude.<*> (x Data..:? "regexFilter")
+            Prelude.<*> (x Data..: "resolutionStrategy")
+      )
+
+instance Prelude.Hashable SlotValueSelectionSetting where
+  hashWithSalt _salt SlotValueSelectionSetting' {..} =
+    _salt
+      `Prelude.hashWithSalt` advancedRecognitionSetting
+      `Prelude.hashWithSalt` regexFilter
+      `Prelude.hashWithSalt` resolutionStrategy
+
+instance Prelude.NFData SlotValueSelectionSetting where
+  rnf SlotValueSelectionSetting' {..} =
+    Prelude.rnf advancedRecognitionSetting
+      `Prelude.seq` Prelude.rnf regexFilter
+      `Prelude.seq` Prelude.rnf resolutionStrategy
+
+instance Data.ToJSON SlotValueSelectionSetting where
+  toJSON SlotValueSelectionSetting' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("advancedRecognitionSetting" Data..=)
+              Prelude.<$> advancedRecognitionSetting,
+            ("regexFilter" Data..=) Prelude.<$> regexFilter,
+            Prelude.Just
+              ("resolutionStrategy" Data..= resolutionStrategy)
+          ]
+      )
diff --git a/gen/Amazonka/LexV2Models/Types/SortOrder.hs b/gen/Amazonka/LexV2Models/Types/SortOrder.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/Types/SortOrder.hs
@@ -0,0 +1,71 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.LexV2Models.Types.SortOrder
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.LexV2Models.Types.SortOrder
+  ( SortOrder
+      ( ..,
+        SortOrder_Ascending,
+        SortOrder_Descending
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype SortOrder = SortOrder'
+  { fromSortOrder ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern SortOrder_Ascending :: SortOrder
+pattern SortOrder_Ascending = SortOrder' "Ascending"
+
+pattern SortOrder_Descending :: SortOrder
+pattern SortOrder_Descending = SortOrder' "Descending"
+
+{-# COMPLETE
+  SortOrder_Ascending,
+  SortOrder_Descending,
+  SortOrder'
+  #-}
diff --git a/gen/Amazonka/LexV2Models/Types/Specifications.hs b/gen/Amazonka/LexV2Models/Types/Specifications.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/Types/Specifications.hs
@@ -0,0 +1,106 @@
+{-# 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.LexV2Models.Types.Specifications
+-- 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.LexV2Models.Types.Specifications where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LexV2Models.Types.SubSlotValueElicitationSetting
+import qualified Amazonka.Prelude as Prelude
+
+-- | Subslot specifications.
+--
+-- /See:/ 'newSpecifications' smart constructor.
+data Specifications = Specifications'
+  { -- | The unique identifier assigned to the slot type.
+    slotTypeId :: Prelude.Text,
+    -- | Specifies the elicitation setting details for constituent sub slots of a
+    -- composite slot.
+    valueElicitationSetting :: SubSlotValueElicitationSetting
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Specifications' 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:
+--
+-- 'slotTypeId', 'specifications_slotTypeId' - The unique identifier assigned to the slot type.
+--
+-- 'valueElicitationSetting', 'specifications_valueElicitationSetting' - Specifies the elicitation setting details for constituent sub slots of a
+-- composite slot.
+newSpecifications ::
+  -- | 'slotTypeId'
+  Prelude.Text ->
+  -- | 'valueElicitationSetting'
+  SubSlotValueElicitationSetting ->
+  Specifications
+newSpecifications
+  pSlotTypeId_
+  pValueElicitationSetting_ =
+    Specifications'
+      { slotTypeId = pSlotTypeId_,
+        valueElicitationSetting = pValueElicitationSetting_
+      }
+
+-- | The unique identifier assigned to the slot type.
+specifications_slotTypeId :: Lens.Lens' Specifications Prelude.Text
+specifications_slotTypeId = Lens.lens (\Specifications' {slotTypeId} -> slotTypeId) (\s@Specifications' {} a -> s {slotTypeId = a} :: Specifications)
+
+-- | Specifies the elicitation setting details for constituent sub slots of a
+-- composite slot.
+specifications_valueElicitationSetting :: Lens.Lens' Specifications SubSlotValueElicitationSetting
+specifications_valueElicitationSetting = Lens.lens (\Specifications' {valueElicitationSetting} -> valueElicitationSetting) (\s@Specifications' {} a -> s {valueElicitationSetting = a} :: Specifications)
+
+instance Data.FromJSON Specifications where
+  parseJSON =
+    Data.withObject
+      "Specifications"
+      ( \x ->
+          Specifications'
+            Prelude.<$> (x Data..: "slotTypeId")
+            Prelude.<*> (x Data..: "valueElicitationSetting")
+      )
+
+instance Prelude.Hashable Specifications where
+  hashWithSalt _salt Specifications' {..} =
+    _salt
+      `Prelude.hashWithSalt` slotTypeId
+      `Prelude.hashWithSalt` valueElicitationSetting
+
+instance Prelude.NFData Specifications where
+  rnf Specifications' {..} =
+    Prelude.rnf slotTypeId
+      `Prelude.seq` Prelude.rnf valueElicitationSetting
+
+instance Data.ToJSON Specifications where
+  toJSON Specifications' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("slotTypeId" Data..= slotTypeId),
+            Prelude.Just
+              ( "valueElicitationSetting"
+                  Data..= valueElicitationSetting
+              )
+          ]
+      )
diff --git a/gen/Amazonka/LexV2Models/Types/StillWaitingResponseSpecification.hs b/gen/Amazonka/LexV2Models/Types/StillWaitingResponseSpecification.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/Types/StillWaitingResponseSpecification.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.LexV2Models.Types.StillWaitingResponseSpecification
+-- 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.LexV2Models.Types.StillWaitingResponseSpecification where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LexV2Models.Types.MessageGroup
+import qualified Amazonka.Prelude as Prelude
+
+-- | Defines the messages that Amazon Lex sends to a user to remind them that
+-- the bot is waiting for a response.
+--
+-- /See:/ 'newStillWaitingResponseSpecification' smart constructor.
+data StillWaitingResponseSpecification = StillWaitingResponseSpecification'
+  { -- | Indicates that the user can interrupt the response by speaking while the
+    -- message is being played.
+    allowInterrupt :: Prelude.Maybe Prelude.Bool,
+    -- | One or more message groups, each containing one or more messages, that
+    -- define the prompts that Amazon Lex sends to the user.
+    messageGroups :: Prelude.NonEmpty MessageGroup,
+    -- | How often a message should be sent to the user. Minimum of 1 second,
+    -- maximum of 5 minutes.
+    frequencyInSeconds :: Prelude.Natural,
+    -- | If Amazon Lex waits longer than this length of time for a response, it
+    -- will stop sending messages.
+    timeoutInSeconds :: Prelude.Natural
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StillWaitingResponseSpecification' 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:
+--
+-- 'allowInterrupt', 'stillWaitingResponseSpecification_allowInterrupt' - Indicates that the user can interrupt the response by speaking while the
+-- message is being played.
+--
+-- 'messageGroups', 'stillWaitingResponseSpecification_messageGroups' - One or more message groups, each containing one or more messages, that
+-- define the prompts that Amazon Lex sends to the user.
+--
+-- 'frequencyInSeconds', 'stillWaitingResponseSpecification_frequencyInSeconds' - How often a message should be sent to the user. Minimum of 1 second,
+-- maximum of 5 minutes.
+--
+-- 'timeoutInSeconds', 'stillWaitingResponseSpecification_timeoutInSeconds' - If Amazon Lex waits longer than this length of time for a response, it
+-- will stop sending messages.
+newStillWaitingResponseSpecification ::
+  -- | 'messageGroups'
+  Prelude.NonEmpty MessageGroup ->
+  -- | 'frequencyInSeconds'
+  Prelude.Natural ->
+  -- | 'timeoutInSeconds'
+  Prelude.Natural ->
+  StillWaitingResponseSpecification
+newStillWaitingResponseSpecification
+  pMessageGroups_
+  pFrequencyInSeconds_
+  pTimeoutInSeconds_ =
+    StillWaitingResponseSpecification'
+      { allowInterrupt =
+          Prelude.Nothing,
+        messageGroups =
+          Lens.coerced Lens.# pMessageGroups_,
+        frequencyInSeconds =
+          pFrequencyInSeconds_,
+        timeoutInSeconds = pTimeoutInSeconds_
+      }
+
+-- | Indicates that the user can interrupt the response by speaking while the
+-- message is being played.
+stillWaitingResponseSpecification_allowInterrupt :: Lens.Lens' StillWaitingResponseSpecification (Prelude.Maybe Prelude.Bool)
+stillWaitingResponseSpecification_allowInterrupt = Lens.lens (\StillWaitingResponseSpecification' {allowInterrupt} -> allowInterrupt) (\s@StillWaitingResponseSpecification' {} a -> s {allowInterrupt = a} :: StillWaitingResponseSpecification)
+
+-- | One or more message groups, each containing one or more messages, that
+-- define the prompts that Amazon Lex sends to the user.
+stillWaitingResponseSpecification_messageGroups :: Lens.Lens' StillWaitingResponseSpecification (Prelude.NonEmpty MessageGroup)
+stillWaitingResponseSpecification_messageGroups = Lens.lens (\StillWaitingResponseSpecification' {messageGroups} -> messageGroups) (\s@StillWaitingResponseSpecification' {} a -> s {messageGroups = a} :: StillWaitingResponseSpecification) Prelude.. Lens.coerced
+
+-- | How often a message should be sent to the user. Minimum of 1 second,
+-- maximum of 5 minutes.
+stillWaitingResponseSpecification_frequencyInSeconds :: Lens.Lens' StillWaitingResponseSpecification Prelude.Natural
+stillWaitingResponseSpecification_frequencyInSeconds = Lens.lens (\StillWaitingResponseSpecification' {frequencyInSeconds} -> frequencyInSeconds) (\s@StillWaitingResponseSpecification' {} a -> s {frequencyInSeconds = a} :: StillWaitingResponseSpecification)
+
+-- | If Amazon Lex waits longer than this length of time for a response, it
+-- will stop sending messages.
+stillWaitingResponseSpecification_timeoutInSeconds :: Lens.Lens' StillWaitingResponseSpecification Prelude.Natural
+stillWaitingResponseSpecification_timeoutInSeconds = Lens.lens (\StillWaitingResponseSpecification' {timeoutInSeconds} -> timeoutInSeconds) (\s@StillWaitingResponseSpecification' {} a -> s {timeoutInSeconds = a} :: StillWaitingResponseSpecification)
+
+instance
+  Data.FromJSON
+    StillWaitingResponseSpecification
+  where
+  parseJSON =
+    Data.withObject
+      "StillWaitingResponseSpecification"
+      ( \x ->
+          StillWaitingResponseSpecification'
+            Prelude.<$> (x Data..:? "allowInterrupt")
+            Prelude.<*> (x Data..: "messageGroups")
+            Prelude.<*> (x Data..: "frequencyInSeconds")
+            Prelude.<*> (x Data..: "timeoutInSeconds")
+      )
+
+instance
+  Prelude.Hashable
+    StillWaitingResponseSpecification
+  where
+  hashWithSalt
+    _salt
+    StillWaitingResponseSpecification' {..} =
+      _salt
+        `Prelude.hashWithSalt` allowInterrupt
+        `Prelude.hashWithSalt` messageGroups
+        `Prelude.hashWithSalt` frequencyInSeconds
+        `Prelude.hashWithSalt` timeoutInSeconds
+
+instance
+  Prelude.NFData
+    StillWaitingResponseSpecification
+  where
+  rnf StillWaitingResponseSpecification' {..} =
+    Prelude.rnf allowInterrupt
+      `Prelude.seq` Prelude.rnf messageGroups
+      `Prelude.seq` Prelude.rnf frequencyInSeconds
+      `Prelude.seq` Prelude.rnf timeoutInSeconds
+
+instance
+  Data.ToJSON
+    StillWaitingResponseSpecification
+  where
+  toJSON StillWaitingResponseSpecification' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("allowInterrupt" Data..=)
+              Prelude.<$> allowInterrupt,
+            Prelude.Just ("messageGroups" Data..= messageGroups),
+            Prelude.Just
+              ("frequencyInSeconds" Data..= frequencyInSeconds),
+            Prelude.Just
+              ("timeoutInSeconds" Data..= timeoutInSeconds)
+          ]
+      )
diff --git a/gen/Amazonka/LexV2Models/Types/SubSlotSetting.hs b/gen/Amazonka/LexV2Models/Types/SubSlotSetting.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/Types/SubSlotSetting.hs
@@ -0,0 +1,102 @@
+{-# 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.LexV2Models.Types.SubSlotSetting
+-- 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.LexV2Models.Types.SubSlotSetting where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LexV2Models.Types.Specifications
+import qualified Amazonka.Prelude as Prelude
+
+-- | Specifications for the constituent sub slots and the expression for the
+-- composite slot.
+--
+-- /See:/ 'newSubSlotSetting' smart constructor.
+data SubSlotSetting = SubSlotSetting'
+  { -- | The expression text for defining the constituent sub slots in the
+    -- composite slot using logical AND and OR operators.
+    expression :: Prelude.Maybe Prelude.Text,
+    -- | Specifications for the constituent sub slots of a composite slot.
+    slotSpecifications :: Prelude.Maybe (Prelude.HashMap Prelude.Text Specifications)
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SubSlotSetting' 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:
+--
+-- 'expression', 'subSlotSetting_expression' - The expression text for defining the constituent sub slots in the
+-- composite slot using logical AND and OR operators.
+--
+-- 'slotSpecifications', 'subSlotSetting_slotSpecifications' - Specifications for the constituent sub slots of a composite slot.
+newSubSlotSetting ::
+  SubSlotSetting
+newSubSlotSetting =
+  SubSlotSetting'
+    { expression = Prelude.Nothing,
+      slotSpecifications = Prelude.Nothing
+    }
+
+-- | The expression text for defining the constituent sub slots in the
+-- composite slot using logical AND and OR operators.
+subSlotSetting_expression :: Lens.Lens' SubSlotSetting (Prelude.Maybe Prelude.Text)
+subSlotSetting_expression = Lens.lens (\SubSlotSetting' {expression} -> expression) (\s@SubSlotSetting' {} a -> s {expression = a} :: SubSlotSetting)
+
+-- | Specifications for the constituent sub slots of a composite slot.
+subSlotSetting_slotSpecifications :: Lens.Lens' SubSlotSetting (Prelude.Maybe (Prelude.HashMap Prelude.Text Specifications))
+subSlotSetting_slotSpecifications = Lens.lens (\SubSlotSetting' {slotSpecifications} -> slotSpecifications) (\s@SubSlotSetting' {} a -> s {slotSpecifications = a} :: SubSlotSetting) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromJSON SubSlotSetting where
+  parseJSON =
+    Data.withObject
+      "SubSlotSetting"
+      ( \x ->
+          SubSlotSetting'
+            Prelude.<$> (x Data..:? "expression")
+            Prelude.<*> ( x
+                            Data..:? "slotSpecifications"
+                            Data..!= Prelude.mempty
+                        )
+      )
+
+instance Prelude.Hashable SubSlotSetting where
+  hashWithSalt _salt SubSlotSetting' {..} =
+    _salt
+      `Prelude.hashWithSalt` expression
+      `Prelude.hashWithSalt` slotSpecifications
+
+instance Prelude.NFData SubSlotSetting where
+  rnf SubSlotSetting' {..} =
+    Prelude.rnf expression
+      `Prelude.seq` Prelude.rnf slotSpecifications
+
+instance Data.ToJSON SubSlotSetting where
+  toJSON SubSlotSetting' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("expression" Data..=) Prelude.<$> expression,
+            ("slotSpecifications" Data..=)
+              Prelude.<$> slotSpecifications
+          ]
+      )
diff --git a/gen/Amazonka/LexV2Models/Types/SubSlotTypeComposition.hs b/gen/Amazonka/LexV2Models/Types/SubSlotTypeComposition.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/Types/SubSlotTypeComposition.hs
@@ -0,0 +1,100 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.LexV2Models.Types.SubSlotTypeComposition
+-- 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.LexV2Models.Types.SubSlotTypeComposition 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
+
+-- | Subslot type composition.
+--
+-- /See:/ 'newSubSlotTypeComposition' smart constructor.
+data SubSlotTypeComposition = SubSlotTypeComposition'
+  { -- | Name of a constituent sub slot inside a composite slot.
+    name :: Prelude.Text,
+    -- | The unique identifier assigned to a slot type. This refers to either a
+    -- built-in slot type or the unique slotTypeId of a custom slot type.
+    slotTypeId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SubSlotTypeComposition' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'name', 'subSlotTypeComposition_name' - Name of a constituent sub slot inside a composite slot.
+--
+-- 'slotTypeId', 'subSlotTypeComposition_slotTypeId' - The unique identifier assigned to a slot type. This refers to either a
+-- built-in slot type or the unique slotTypeId of a custom slot type.
+newSubSlotTypeComposition ::
+  -- | 'name'
+  Prelude.Text ->
+  -- | 'slotTypeId'
+  Prelude.Text ->
+  SubSlotTypeComposition
+newSubSlotTypeComposition pName_ pSlotTypeId_ =
+  SubSlotTypeComposition'
+    { name = pName_,
+      slotTypeId = pSlotTypeId_
+    }
+
+-- | Name of a constituent sub slot inside a composite slot.
+subSlotTypeComposition_name :: Lens.Lens' SubSlotTypeComposition Prelude.Text
+subSlotTypeComposition_name = Lens.lens (\SubSlotTypeComposition' {name} -> name) (\s@SubSlotTypeComposition' {} a -> s {name = a} :: SubSlotTypeComposition)
+
+-- | The unique identifier assigned to a slot type. This refers to either a
+-- built-in slot type or the unique slotTypeId of a custom slot type.
+subSlotTypeComposition_slotTypeId :: Lens.Lens' SubSlotTypeComposition Prelude.Text
+subSlotTypeComposition_slotTypeId = Lens.lens (\SubSlotTypeComposition' {slotTypeId} -> slotTypeId) (\s@SubSlotTypeComposition' {} a -> s {slotTypeId = a} :: SubSlotTypeComposition)
+
+instance Data.FromJSON SubSlotTypeComposition where
+  parseJSON =
+    Data.withObject
+      "SubSlotTypeComposition"
+      ( \x ->
+          SubSlotTypeComposition'
+            Prelude.<$> (x Data..: "name")
+            Prelude.<*> (x Data..: "slotTypeId")
+      )
+
+instance Prelude.Hashable SubSlotTypeComposition where
+  hashWithSalt _salt SubSlotTypeComposition' {..} =
+    _salt
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` slotTypeId
+
+instance Prelude.NFData SubSlotTypeComposition where
+  rnf SubSlotTypeComposition' {..} =
+    Prelude.rnf name
+      `Prelude.seq` Prelude.rnf slotTypeId
+
+instance Data.ToJSON SubSlotTypeComposition where
+  toJSON SubSlotTypeComposition' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("name" Data..= name),
+            Prelude.Just ("slotTypeId" Data..= slotTypeId)
+          ]
+      )
diff --git a/gen/Amazonka/LexV2Models/Types/SubSlotValueElicitationSetting.hs b/gen/Amazonka/LexV2Models/Types/SubSlotValueElicitationSetting.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/Types/SubSlotValueElicitationSetting.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.LexV2Models.Types.SubSlotValueElicitationSetting
+-- 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.LexV2Models.Types.SubSlotValueElicitationSetting where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LexV2Models.Types.PromptSpecification
+import Amazonka.LexV2Models.Types.SampleUtterance
+import Amazonka.LexV2Models.Types.SlotDefaultValueSpecification
+import Amazonka.LexV2Models.Types.WaitAndContinueSpecification
+import qualified Amazonka.Prelude as Prelude
+
+-- | Subslot elicitation settings.
+--
+-- @DefaultValueSpecification@ is a list of default values for a
+-- constituent sub slot in a composite slot. Default values are used when
+-- Amazon Lex hasn\'t determined a value for a slot. You can specify
+-- default values from context variables, session attributes, and defined
+-- values. This is similar to @DefaultValueSpecification@ for slots.
+--
+-- @PromptSpecification@ is the prompt that Amazon Lex uses to elicit the
+-- sub slot value from the user. This is similar to @PromptSpecification@
+-- for slots.
+--
+-- /See:/ 'newSubSlotValueElicitationSetting' smart constructor.
+data SubSlotValueElicitationSetting = SubSlotValueElicitationSetting'
+  { defaultValueSpecification :: Prelude.Maybe SlotDefaultValueSpecification,
+    -- | If you know a specific pattern that users might respond to an Amazon Lex
+    -- request for a sub slot value, you can provide those utterances to
+    -- improve accuracy. This is optional. In most cases Amazon Lex is capable
+    -- of understanding user utterances. This is similar to @SampleUtterances@
+    -- for slots.
+    sampleUtterances :: Prelude.Maybe [SampleUtterance],
+    waitAndContinueSpecification :: Prelude.Maybe WaitAndContinueSpecification,
+    promptSpecification :: PromptSpecification
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SubSlotValueElicitationSetting' 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:
+--
+-- 'defaultValueSpecification', 'subSlotValueElicitationSetting_defaultValueSpecification' - Undocumented member.
+--
+-- 'sampleUtterances', 'subSlotValueElicitationSetting_sampleUtterances' - If you know a specific pattern that users might respond to an Amazon Lex
+-- request for a sub slot value, you can provide those utterances to
+-- improve accuracy. This is optional. In most cases Amazon Lex is capable
+-- of understanding user utterances. This is similar to @SampleUtterances@
+-- for slots.
+--
+-- 'waitAndContinueSpecification', 'subSlotValueElicitationSetting_waitAndContinueSpecification' - Undocumented member.
+--
+-- 'promptSpecification', 'subSlotValueElicitationSetting_promptSpecification' - Undocumented member.
+newSubSlotValueElicitationSetting ::
+  -- | 'promptSpecification'
+  PromptSpecification ->
+  SubSlotValueElicitationSetting
+newSubSlotValueElicitationSetting
+  pPromptSpecification_ =
+    SubSlotValueElicitationSetting'
+      { defaultValueSpecification =
+          Prelude.Nothing,
+        sampleUtterances = Prelude.Nothing,
+        waitAndContinueSpecification =
+          Prelude.Nothing,
+        promptSpecification = pPromptSpecification_
+      }
+
+-- | Undocumented member.
+subSlotValueElicitationSetting_defaultValueSpecification :: Lens.Lens' SubSlotValueElicitationSetting (Prelude.Maybe SlotDefaultValueSpecification)
+subSlotValueElicitationSetting_defaultValueSpecification = Lens.lens (\SubSlotValueElicitationSetting' {defaultValueSpecification} -> defaultValueSpecification) (\s@SubSlotValueElicitationSetting' {} a -> s {defaultValueSpecification = a} :: SubSlotValueElicitationSetting)
+
+-- | If you know a specific pattern that users might respond to an Amazon Lex
+-- request for a sub slot value, you can provide those utterances to
+-- improve accuracy. This is optional. In most cases Amazon Lex is capable
+-- of understanding user utterances. This is similar to @SampleUtterances@
+-- for slots.
+subSlotValueElicitationSetting_sampleUtterances :: Lens.Lens' SubSlotValueElicitationSetting (Prelude.Maybe [SampleUtterance])
+subSlotValueElicitationSetting_sampleUtterances = Lens.lens (\SubSlotValueElicitationSetting' {sampleUtterances} -> sampleUtterances) (\s@SubSlotValueElicitationSetting' {} a -> s {sampleUtterances = a} :: SubSlotValueElicitationSetting) Prelude.. Lens.mapping Lens.coerced
+
+-- | Undocumented member.
+subSlotValueElicitationSetting_waitAndContinueSpecification :: Lens.Lens' SubSlotValueElicitationSetting (Prelude.Maybe WaitAndContinueSpecification)
+subSlotValueElicitationSetting_waitAndContinueSpecification = Lens.lens (\SubSlotValueElicitationSetting' {waitAndContinueSpecification} -> waitAndContinueSpecification) (\s@SubSlotValueElicitationSetting' {} a -> s {waitAndContinueSpecification = a} :: SubSlotValueElicitationSetting)
+
+-- | Undocumented member.
+subSlotValueElicitationSetting_promptSpecification :: Lens.Lens' SubSlotValueElicitationSetting PromptSpecification
+subSlotValueElicitationSetting_promptSpecification = Lens.lens (\SubSlotValueElicitationSetting' {promptSpecification} -> promptSpecification) (\s@SubSlotValueElicitationSetting' {} a -> s {promptSpecification = a} :: SubSlotValueElicitationSetting)
+
+instance Data.FromJSON SubSlotValueElicitationSetting where
+  parseJSON =
+    Data.withObject
+      "SubSlotValueElicitationSetting"
+      ( \x ->
+          SubSlotValueElicitationSetting'
+            Prelude.<$> (x Data..:? "defaultValueSpecification")
+            Prelude.<*> ( x
+                            Data..:? "sampleUtterances"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> (x Data..:? "waitAndContinueSpecification")
+            Prelude.<*> (x Data..: "promptSpecification")
+      )
+
+instance
+  Prelude.Hashable
+    SubSlotValueElicitationSetting
+  where
+  hashWithSalt
+    _salt
+    SubSlotValueElicitationSetting' {..} =
+      _salt
+        `Prelude.hashWithSalt` defaultValueSpecification
+        `Prelude.hashWithSalt` sampleUtterances
+        `Prelude.hashWithSalt` waitAndContinueSpecification
+        `Prelude.hashWithSalt` promptSpecification
+
+instance
+  Prelude.NFData
+    SubSlotValueElicitationSetting
+  where
+  rnf SubSlotValueElicitationSetting' {..} =
+    Prelude.rnf defaultValueSpecification
+      `Prelude.seq` Prelude.rnf sampleUtterances
+      `Prelude.seq` Prelude.rnf waitAndContinueSpecification
+      `Prelude.seq` Prelude.rnf promptSpecification
+
+instance Data.ToJSON SubSlotValueElicitationSetting where
+  toJSON SubSlotValueElicitationSetting' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("defaultValueSpecification" Data..=)
+              Prelude.<$> defaultValueSpecification,
+            ("sampleUtterances" Data..=)
+              Prelude.<$> sampleUtterances,
+            ("waitAndContinueSpecification" Data..=)
+              Prelude.<$> waitAndContinueSpecification,
+            Prelude.Just
+              ("promptSpecification" Data..= promptSpecification)
+          ]
+      )
diff --git a/gen/Amazonka/LexV2Models/Types/TextInputSpecification.hs b/gen/Amazonka/LexV2Models/Types/TextInputSpecification.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/Types/TextInputSpecification.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.LexV2Models.Types.TextInputSpecification
+-- 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.LexV2Models.Types.TextInputSpecification 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
+
+-- | Specifies the text input specifications.
+--
+-- /See:/ 'newTextInputSpecification' smart constructor.
+data TextInputSpecification = TextInputSpecification'
+  { -- | Time for which a bot waits before re-prompting a customer for text
+    -- input.
+    startTimeoutMs :: Prelude.Natural
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TextInputSpecification' 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:
+--
+-- 'startTimeoutMs', 'textInputSpecification_startTimeoutMs' - Time for which a bot waits before re-prompting a customer for text
+-- input.
+newTextInputSpecification ::
+  -- | 'startTimeoutMs'
+  Prelude.Natural ->
+  TextInputSpecification
+newTextInputSpecification pStartTimeoutMs_ =
+  TextInputSpecification'
+    { startTimeoutMs =
+        pStartTimeoutMs_
+    }
+
+-- | Time for which a bot waits before re-prompting a customer for text
+-- input.
+textInputSpecification_startTimeoutMs :: Lens.Lens' TextInputSpecification Prelude.Natural
+textInputSpecification_startTimeoutMs = Lens.lens (\TextInputSpecification' {startTimeoutMs} -> startTimeoutMs) (\s@TextInputSpecification' {} a -> s {startTimeoutMs = a} :: TextInputSpecification)
+
+instance Data.FromJSON TextInputSpecification where
+  parseJSON =
+    Data.withObject
+      "TextInputSpecification"
+      ( \x ->
+          TextInputSpecification'
+            Prelude.<$> (x Data..: "startTimeoutMs")
+      )
+
+instance Prelude.Hashable TextInputSpecification where
+  hashWithSalt _salt TextInputSpecification' {..} =
+    _salt `Prelude.hashWithSalt` startTimeoutMs
+
+instance Prelude.NFData TextInputSpecification where
+  rnf TextInputSpecification' {..} =
+    Prelude.rnf startTimeoutMs
+
+instance Data.ToJSON TextInputSpecification where
+  toJSON TextInputSpecification' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ("startTimeoutMs" Data..= startTimeoutMs)
+          ]
+      )
diff --git a/gen/Amazonka/LexV2Models/Types/TextLogDestination.hs b/gen/Amazonka/LexV2Models/Types/TextLogDestination.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/Types/TextLogDestination.hs
@@ -0,0 +1,82 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.LexV2Models.Types.TextLogDestination
+-- 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.LexV2Models.Types.TextLogDestination where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LexV2Models.Types.CloudWatchLogGroupLogDestination
+import qualified Amazonka.Prelude as Prelude
+
+-- | Defines the Amazon CloudWatch Logs destination log group for
+-- conversation text logs.
+--
+-- /See:/ 'newTextLogDestination' smart constructor.
+data TextLogDestination = TextLogDestination'
+  { -- | Defines the Amazon CloudWatch Logs log group where text and metadata
+    -- logs are delivered.
+    cloudWatch :: CloudWatchLogGroupLogDestination
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TextLogDestination' 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:
+--
+-- 'cloudWatch', 'textLogDestination_cloudWatch' - Defines the Amazon CloudWatch Logs log group where text and metadata
+-- logs are delivered.
+newTextLogDestination ::
+  -- | 'cloudWatch'
+  CloudWatchLogGroupLogDestination ->
+  TextLogDestination
+newTextLogDestination pCloudWatch_ =
+  TextLogDestination' {cloudWatch = pCloudWatch_}
+
+-- | Defines the Amazon CloudWatch Logs log group where text and metadata
+-- logs are delivered.
+textLogDestination_cloudWatch :: Lens.Lens' TextLogDestination CloudWatchLogGroupLogDestination
+textLogDestination_cloudWatch = Lens.lens (\TextLogDestination' {cloudWatch} -> cloudWatch) (\s@TextLogDestination' {} a -> s {cloudWatch = a} :: TextLogDestination)
+
+instance Data.FromJSON TextLogDestination where
+  parseJSON =
+    Data.withObject
+      "TextLogDestination"
+      ( \x ->
+          TextLogDestination'
+            Prelude.<$> (x Data..: "cloudWatch")
+      )
+
+instance Prelude.Hashable TextLogDestination where
+  hashWithSalt _salt TextLogDestination' {..} =
+    _salt `Prelude.hashWithSalt` cloudWatch
+
+instance Prelude.NFData TextLogDestination where
+  rnf TextLogDestination' {..} = Prelude.rnf cloudWatch
+
+instance Data.ToJSON TextLogDestination where
+  toJSON TextLogDestination' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("cloudWatch" Data..= cloudWatch)]
+      )
diff --git a/gen/Amazonka/LexV2Models/Types/TextLogSetting.hs b/gen/Amazonka/LexV2Models/Types/TextLogSetting.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/Types/TextLogSetting.hs
@@ -0,0 +1,97 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.LexV2Models.Types.TextLogSetting
+-- 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.LexV2Models.Types.TextLogSetting where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LexV2Models.Types.TextLogDestination
+import qualified Amazonka.Prelude as Prelude
+
+-- | Defines settings to enable text conversation logs.
+--
+-- /See:/ 'newTextLogSetting' smart constructor.
+data TextLogSetting = TextLogSetting'
+  { -- | Determines whether conversation logs should be stored for an alias.
+    enabled :: Prelude.Bool,
+    destination :: TextLogDestination
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TextLogSetting' 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:
+--
+-- 'enabled', 'textLogSetting_enabled' - Determines whether conversation logs should be stored for an alias.
+--
+-- 'destination', 'textLogSetting_destination' - Undocumented member.
+newTextLogSetting ::
+  -- | 'enabled'
+  Prelude.Bool ->
+  -- | 'destination'
+  TextLogDestination ->
+  TextLogSetting
+newTextLogSetting pEnabled_ pDestination_ =
+  TextLogSetting'
+    { enabled = pEnabled_,
+      destination = pDestination_
+    }
+
+-- | Determines whether conversation logs should be stored for an alias.
+textLogSetting_enabled :: Lens.Lens' TextLogSetting Prelude.Bool
+textLogSetting_enabled = Lens.lens (\TextLogSetting' {enabled} -> enabled) (\s@TextLogSetting' {} a -> s {enabled = a} :: TextLogSetting)
+
+-- | Undocumented member.
+textLogSetting_destination :: Lens.Lens' TextLogSetting TextLogDestination
+textLogSetting_destination = Lens.lens (\TextLogSetting' {destination} -> destination) (\s@TextLogSetting' {} a -> s {destination = a} :: TextLogSetting)
+
+instance Data.FromJSON TextLogSetting where
+  parseJSON =
+    Data.withObject
+      "TextLogSetting"
+      ( \x ->
+          TextLogSetting'
+            Prelude.<$> (x Data..: "enabled")
+            Prelude.<*> (x Data..: "destination")
+      )
+
+instance Prelude.Hashable TextLogSetting where
+  hashWithSalt _salt TextLogSetting' {..} =
+    _salt
+      `Prelude.hashWithSalt` enabled
+      `Prelude.hashWithSalt` destination
+
+instance Prelude.NFData TextLogSetting where
+  rnf TextLogSetting' {..} =
+    Prelude.rnf enabled
+      `Prelude.seq` Prelude.rnf destination
+
+instance Data.ToJSON TextLogSetting where
+  toJSON TextLogSetting' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("enabled" Data..= enabled),
+            Prelude.Just ("destination" Data..= destination)
+          ]
+      )
diff --git a/gen/Amazonka/LexV2Models/Types/TimeDimension.hs b/gen/Amazonka/LexV2Models/Types/TimeDimension.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/Types/TimeDimension.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.LexV2Models.Types.TimeDimension
+-- 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.LexV2Models.Types.TimeDimension
+  ( TimeDimension
+      ( ..,
+        TimeDimension_Days,
+        TimeDimension_Hours,
+        TimeDimension_Weeks
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype TimeDimension = TimeDimension'
+  { fromTimeDimension ::
+      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 TimeDimension_Days :: TimeDimension
+pattern TimeDimension_Days = TimeDimension' "Days"
+
+pattern TimeDimension_Hours :: TimeDimension
+pattern TimeDimension_Hours = TimeDimension' "Hours"
+
+pattern TimeDimension_Weeks :: TimeDimension
+pattern TimeDimension_Weeks = TimeDimension' "Weeks"
+
+{-# COMPLETE
+  TimeDimension_Days,
+  TimeDimension_Hours,
+  TimeDimension_Weeks,
+  TimeDimension'
+  #-}
diff --git a/gen/Amazonka/LexV2Models/Types/TranscriptFilter.hs b/gen/Amazonka/LexV2Models/Types/TranscriptFilter.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/Types/TranscriptFilter.hs
@@ -0,0 +1,89 @@
+{-# 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.LexV2Models.Types.TranscriptFilter
+-- 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.LexV2Models.Types.TranscriptFilter where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LexV2Models.Types.LexTranscriptFilter
+import qualified Amazonka.Prelude as Prelude
+
+-- | The object representing the filter that Amazon Lex will use to select
+-- the appropriate transcript.
+--
+-- /See:/ 'newTranscriptFilter' smart constructor.
+data TranscriptFilter = TranscriptFilter'
+  { -- | The object representing the filter that Amazon Lex will use to select
+    -- the appropriate transcript when the transcript format is the Amazon Lex
+    -- format.
+    lexTranscriptFilter :: Prelude.Maybe LexTranscriptFilter
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TranscriptFilter' 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:
+--
+-- 'lexTranscriptFilter', 'transcriptFilter_lexTranscriptFilter' - The object representing the filter that Amazon Lex will use to select
+-- the appropriate transcript when the transcript format is the Amazon Lex
+-- format.
+newTranscriptFilter ::
+  TranscriptFilter
+newTranscriptFilter =
+  TranscriptFilter'
+    { lexTranscriptFilter =
+        Prelude.Nothing
+    }
+
+-- | The object representing the filter that Amazon Lex will use to select
+-- the appropriate transcript when the transcript format is the Amazon Lex
+-- format.
+transcriptFilter_lexTranscriptFilter :: Lens.Lens' TranscriptFilter (Prelude.Maybe LexTranscriptFilter)
+transcriptFilter_lexTranscriptFilter = Lens.lens (\TranscriptFilter' {lexTranscriptFilter} -> lexTranscriptFilter) (\s@TranscriptFilter' {} a -> s {lexTranscriptFilter = a} :: TranscriptFilter)
+
+instance Data.FromJSON TranscriptFilter where
+  parseJSON =
+    Data.withObject
+      "TranscriptFilter"
+      ( \x ->
+          TranscriptFilter'
+            Prelude.<$> (x Data..:? "lexTranscriptFilter")
+      )
+
+instance Prelude.Hashable TranscriptFilter where
+  hashWithSalt _salt TranscriptFilter' {..} =
+    _salt `Prelude.hashWithSalt` lexTranscriptFilter
+
+instance Prelude.NFData TranscriptFilter where
+  rnf TranscriptFilter' {..} =
+    Prelude.rnf lexTranscriptFilter
+
+instance Data.ToJSON TranscriptFilter where
+  toJSON TranscriptFilter' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("lexTranscriptFilter" Data..=)
+              Prelude.<$> lexTranscriptFilter
+          ]
+      )
diff --git a/gen/Amazonka/LexV2Models/Types/TranscriptFormat.hs b/gen/Amazonka/LexV2Models/Types/TranscriptFormat.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/Types/TranscriptFormat.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.LexV2Models.Types.TranscriptFormat
+-- 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.LexV2Models.Types.TranscriptFormat
+  ( TranscriptFormat
+      ( ..,
+        TranscriptFormat_Lex
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype TranscriptFormat = TranscriptFormat'
+  { fromTranscriptFormat ::
+      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 TranscriptFormat_Lex :: TranscriptFormat
+pattern TranscriptFormat_Lex = TranscriptFormat' "Lex"
+
+{-# COMPLETE
+  TranscriptFormat_Lex,
+  TranscriptFormat'
+  #-}
diff --git a/gen/Amazonka/LexV2Models/Types/TranscriptSourceSetting.hs b/gen/Amazonka/LexV2Models/Types/TranscriptSourceSetting.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/Types/TranscriptSourceSetting.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.LexV2Models.Types.TranscriptSourceSetting
+-- 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.LexV2Models.Types.TranscriptSourceSetting where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LexV2Models.Types.S3BucketTranscriptSource
+import qualified Amazonka.Prelude as Prelude
+
+-- | Indicates the setting of the location where the transcript is stored.
+--
+-- /See:/ 'newTranscriptSourceSetting' smart constructor.
+data TranscriptSourceSetting = TranscriptSourceSetting'
+  { -- | Indicates the setting of the Amazon S3 bucket where the transcript is
+    -- stored.
+    s3BucketTranscriptSource :: Prelude.Maybe S3BucketTranscriptSource
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TranscriptSourceSetting' 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:
+--
+-- 's3BucketTranscriptSource', 'transcriptSourceSetting_s3BucketTranscriptSource' - Indicates the setting of the Amazon S3 bucket where the transcript is
+-- stored.
+newTranscriptSourceSetting ::
+  TranscriptSourceSetting
+newTranscriptSourceSetting =
+  TranscriptSourceSetting'
+    { s3BucketTranscriptSource =
+        Prelude.Nothing
+    }
+
+-- | Indicates the setting of the Amazon S3 bucket where the transcript is
+-- stored.
+transcriptSourceSetting_s3BucketTranscriptSource :: Lens.Lens' TranscriptSourceSetting (Prelude.Maybe S3BucketTranscriptSource)
+transcriptSourceSetting_s3BucketTranscriptSource = Lens.lens (\TranscriptSourceSetting' {s3BucketTranscriptSource} -> s3BucketTranscriptSource) (\s@TranscriptSourceSetting' {} a -> s {s3BucketTranscriptSource = a} :: TranscriptSourceSetting)
+
+instance Data.FromJSON TranscriptSourceSetting where
+  parseJSON =
+    Data.withObject
+      "TranscriptSourceSetting"
+      ( \x ->
+          TranscriptSourceSetting'
+            Prelude.<$> (x Data..:? "s3BucketTranscriptSource")
+      )
+
+instance Prelude.Hashable TranscriptSourceSetting where
+  hashWithSalt _salt TranscriptSourceSetting' {..} =
+    _salt
+      `Prelude.hashWithSalt` s3BucketTranscriptSource
+
+instance Prelude.NFData TranscriptSourceSetting where
+  rnf TranscriptSourceSetting' {..} =
+    Prelude.rnf s3BucketTranscriptSource
+
+instance Data.ToJSON TranscriptSourceSetting where
+  toJSON TranscriptSourceSetting' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("s3BucketTranscriptSource" Data..=)
+              Prelude.<$> s3BucketTranscriptSource
+          ]
+      )
diff --git a/gen/Amazonka/LexV2Models/Types/UtteranceAggregationDuration.hs b/gen/Amazonka/LexV2Models/Types/UtteranceAggregationDuration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/Types/UtteranceAggregationDuration.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.LexV2Models.Types.UtteranceAggregationDuration
+-- 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.LexV2Models.Types.UtteranceAggregationDuration where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LexV2Models.Types.RelativeAggregationDuration
+import qualified Amazonka.Prelude as Prelude
+
+-- | Provides parameters for setting the time window and duration for
+-- aggregating utterance data.
+--
+-- /See:/ 'newUtteranceAggregationDuration' smart constructor.
+data UtteranceAggregationDuration = UtteranceAggregationDuration'
+  { -- | The desired time window for aggregating utterances.
+    relativeAggregationDuration :: RelativeAggregationDuration
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UtteranceAggregationDuration' 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:
+--
+-- 'relativeAggregationDuration', 'utteranceAggregationDuration_relativeAggregationDuration' - The desired time window for aggregating utterances.
+newUtteranceAggregationDuration ::
+  -- | 'relativeAggregationDuration'
+  RelativeAggregationDuration ->
+  UtteranceAggregationDuration
+newUtteranceAggregationDuration
+  pRelativeAggregationDuration_ =
+    UtteranceAggregationDuration'
+      { relativeAggregationDuration =
+          pRelativeAggregationDuration_
+      }
+
+-- | The desired time window for aggregating utterances.
+utteranceAggregationDuration_relativeAggregationDuration :: Lens.Lens' UtteranceAggregationDuration RelativeAggregationDuration
+utteranceAggregationDuration_relativeAggregationDuration = Lens.lens (\UtteranceAggregationDuration' {relativeAggregationDuration} -> relativeAggregationDuration) (\s@UtteranceAggregationDuration' {} a -> s {relativeAggregationDuration = a} :: UtteranceAggregationDuration)
+
+instance Data.FromJSON UtteranceAggregationDuration where
+  parseJSON =
+    Data.withObject
+      "UtteranceAggregationDuration"
+      ( \x ->
+          UtteranceAggregationDuration'
+            Prelude.<$> (x Data..: "relativeAggregationDuration")
+      )
+
+instance
+  Prelude.Hashable
+    UtteranceAggregationDuration
+  where
+  hashWithSalt _salt UtteranceAggregationDuration' {..} =
+    _salt
+      `Prelude.hashWithSalt` relativeAggregationDuration
+
+instance Prelude.NFData UtteranceAggregationDuration where
+  rnf UtteranceAggregationDuration' {..} =
+    Prelude.rnf relativeAggregationDuration
+
+instance Data.ToJSON UtteranceAggregationDuration where
+  toJSON UtteranceAggregationDuration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ( "relativeAggregationDuration"
+                  Data..= relativeAggregationDuration
+              )
+          ]
+      )
diff --git a/gen/Amazonka/LexV2Models/Types/VoiceEngine.hs b/gen/Amazonka/LexV2Models/Types/VoiceEngine.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/Types/VoiceEngine.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.LexV2Models.Types.VoiceEngine
+-- 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.LexV2Models.Types.VoiceEngine
+  ( VoiceEngine
+      ( ..,
+        VoiceEngine_Neural,
+        VoiceEngine_Standard
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype VoiceEngine = VoiceEngine'
+  { fromVoiceEngine ::
+      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 VoiceEngine_Neural :: VoiceEngine
+pattern VoiceEngine_Neural = VoiceEngine' "neural"
+
+pattern VoiceEngine_Standard :: VoiceEngine
+pattern VoiceEngine_Standard = VoiceEngine' "standard"
+
+{-# COMPLETE
+  VoiceEngine_Neural,
+  VoiceEngine_Standard,
+  VoiceEngine'
+  #-}
diff --git a/gen/Amazonka/LexV2Models/Types/VoiceSettings.hs b/gen/Amazonka/LexV2Models/Types/VoiceSettings.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/Types/VoiceSettings.hs
@@ -0,0 +1,112 @@
+{-# 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.LexV2Models.Types.VoiceSettings
+-- 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.LexV2Models.Types.VoiceSettings where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LexV2Models.Types.VoiceEngine
+import qualified Amazonka.Prelude as Prelude
+
+-- | Defines settings for using an Amazon Polly voice to communicate with a
+-- user.
+--
+-- /See:/ 'newVoiceSettings' smart constructor.
+data VoiceSettings = VoiceSettings'
+  { -- | Indicates the type of Amazon Polly voice that Amazon Lex should use for
+    -- voice interaction with the user. For more information, see the
+    -- <https://docs.aws.amazon.com/polly/latest/dg/API_SynthesizeSpeech.html#polly-SynthesizeSpeech-request-Engine engine parameter of the SynthesizeSpeech operation>
+    -- in the /Amazon Polly developer guide/.
+    --
+    -- If you do not specify a value, the default is @standard@.
+    engine :: Prelude.Maybe VoiceEngine,
+    -- | The identifier of the Amazon Polly voice to use.
+    voiceId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'VoiceSettings' 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:
+--
+-- 'engine', 'voiceSettings_engine' - Indicates the type of Amazon Polly voice that Amazon Lex should use for
+-- voice interaction with the user. For more information, see the
+-- <https://docs.aws.amazon.com/polly/latest/dg/API_SynthesizeSpeech.html#polly-SynthesizeSpeech-request-Engine engine parameter of the SynthesizeSpeech operation>
+-- in the /Amazon Polly developer guide/.
+--
+-- If you do not specify a value, the default is @standard@.
+--
+-- 'voiceId', 'voiceSettings_voiceId' - The identifier of the Amazon Polly voice to use.
+newVoiceSettings ::
+  -- | 'voiceId'
+  Prelude.Text ->
+  VoiceSettings
+newVoiceSettings pVoiceId_ =
+  VoiceSettings'
+    { engine = Prelude.Nothing,
+      voiceId = pVoiceId_
+    }
+
+-- | Indicates the type of Amazon Polly voice that Amazon Lex should use for
+-- voice interaction with the user. For more information, see the
+-- <https://docs.aws.amazon.com/polly/latest/dg/API_SynthesizeSpeech.html#polly-SynthesizeSpeech-request-Engine engine parameter of the SynthesizeSpeech operation>
+-- in the /Amazon Polly developer guide/.
+--
+-- If you do not specify a value, the default is @standard@.
+voiceSettings_engine :: Lens.Lens' VoiceSettings (Prelude.Maybe VoiceEngine)
+voiceSettings_engine = Lens.lens (\VoiceSettings' {engine} -> engine) (\s@VoiceSettings' {} a -> s {engine = a} :: VoiceSettings)
+
+-- | The identifier of the Amazon Polly voice to use.
+voiceSettings_voiceId :: Lens.Lens' VoiceSettings Prelude.Text
+voiceSettings_voiceId = Lens.lens (\VoiceSettings' {voiceId} -> voiceId) (\s@VoiceSettings' {} a -> s {voiceId = a} :: VoiceSettings)
+
+instance Data.FromJSON VoiceSettings where
+  parseJSON =
+    Data.withObject
+      "VoiceSettings"
+      ( \x ->
+          VoiceSettings'
+            Prelude.<$> (x Data..:? "engine")
+            Prelude.<*> (x Data..: "voiceId")
+      )
+
+instance Prelude.Hashable VoiceSettings where
+  hashWithSalt _salt VoiceSettings' {..} =
+    _salt
+      `Prelude.hashWithSalt` engine
+      `Prelude.hashWithSalt` voiceId
+
+instance Prelude.NFData VoiceSettings where
+  rnf VoiceSettings' {..} =
+    Prelude.rnf engine
+      `Prelude.seq` Prelude.rnf voiceId
+
+instance Data.ToJSON VoiceSettings where
+  toJSON VoiceSettings' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("engine" Data..=) Prelude.<$> engine,
+            Prelude.Just ("voiceId" Data..= voiceId)
+          ]
+      )
diff --git a/gen/Amazonka/LexV2Models/Types/WaitAndContinueSpecification.hs b/gen/Amazonka/LexV2Models/Types/WaitAndContinueSpecification.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/Types/WaitAndContinueSpecification.hs
@@ -0,0 +1,150 @@
+{-# 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.LexV2Models.Types.WaitAndContinueSpecification
+-- 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.LexV2Models.Types.WaitAndContinueSpecification where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LexV2Models.Types.ResponseSpecification
+import Amazonka.LexV2Models.Types.StillWaitingResponseSpecification
+import qualified Amazonka.Prelude as Prelude
+
+-- | Specifies the prompts that Amazon Lex uses while a bot is waiting for
+-- customer input.
+--
+-- /See:/ 'newWaitAndContinueSpecification' smart constructor.
+data WaitAndContinueSpecification = WaitAndContinueSpecification'
+  { -- | Specifies whether the bot will wait for a user to respond. When this
+    -- field is false, wait and continue responses for a slot aren\'t used. If
+    -- the @active@ field isn\'t specified, the default is true.
+    active :: Prelude.Maybe Prelude.Bool,
+    -- | A response that Amazon Lex sends periodically to the user to indicate
+    -- that the bot is still waiting for input from the user.
+    stillWaitingResponse :: Prelude.Maybe StillWaitingResponseSpecification,
+    -- | The response that Amazon Lex sends to indicate that the bot is waiting
+    -- for the conversation to continue.
+    waitingResponse :: ResponseSpecification,
+    -- | The response that Amazon Lex sends to indicate that the bot is ready to
+    -- continue the conversation.
+    continueResponse :: ResponseSpecification
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'WaitAndContinueSpecification' 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:
+--
+-- 'active', 'waitAndContinueSpecification_active' - Specifies whether the bot will wait for a user to respond. When this
+-- field is false, wait and continue responses for a slot aren\'t used. If
+-- the @active@ field isn\'t specified, the default is true.
+--
+-- 'stillWaitingResponse', 'waitAndContinueSpecification_stillWaitingResponse' - A response that Amazon Lex sends periodically to the user to indicate
+-- that the bot is still waiting for input from the user.
+--
+-- 'waitingResponse', 'waitAndContinueSpecification_waitingResponse' - The response that Amazon Lex sends to indicate that the bot is waiting
+-- for the conversation to continue.
+--
+-- 'continueResponse', 'waitAndContinueSpecification_continueResponse' - The response that Amazon Lex sends to indicate that the bot is ready to
+-- continue the conversation.
+newWaitAndContinueSpecification ::
+  -- | 'waitingResponse'
+  ResponseSpecification ->
+  -- | 'continueResponse'
+  ResponseSpecification ->
+  WaitAndContinueSpecification
+newWaitAndContinueSpecification
+  pWaitingResponse_
+  pContinueResponse_ =
+    WaitAndContinueSpecification'
+      { active =
+          Prelude.Nothing,
+        stillWaitingResponse = Prelude.Nothing,
+        waitingResponse = pWaitingResponse_,
+        continueResponse = pContinueResponse_
+      }
+
+-- | Specifies whether the bot will wait for a user to respond. When this
+-- field is false, wait and continue responses for a slot aren\'t used. If
+-- the @active@ field isn\'t specified, the default is true.
+waitAndContinueSpecification_active :: Lens.Lens' WaitAndContinueSpecification (Prelude.Maybe Prelude.Bool)
+waitAndContinueSpecification_active = Lens.lens (\WaitAndContinueSpecification' {active} -> active) (\s@WaitAndContinueSpecification' {} a -> s {active = a} :: WaitAndContinueSpecification)
+
+-- | A response that Amazon Lex sends periodically to the user to indicate
+-- that the bot is still waiting for input from the user.
+waitAndContinueSpecification_stillWaitingResponse :: Lens.Lens' WaitAndContinueSpecification (Prelude.Maybe StillWaitingResponseSpecification)
+waitAndContinueSpecification_stillWaitingResponse = Lens.lens (\WaitAndContinueSpecification' {stillWaitingResponse} -> stillWaitingResponse) (\s@WaitAndContinueSpecification' {} a -> s {stillWaitingResponse = a} :: WaitAndContinueSpecification)
+
+-- | The response that Amazon Lex sends to indicate that the bot is waiting
+-- for the conversation to continue.
+waitAndContinueSpecification_waitingResponse :: Lens.Lens' WaitAndContinueSpecification ResponseSpecification
+waitAndContinueSpecification_waitingResponse = Lens.lens (\WaitAndContinueSpecification' {waitingResponse} -> waitingResponse) (\s@WaitAndContinueSpecification' {} a -> s {waitingResponse = a} :: WaitAndContinueSpecification)
+
+-- | The response that Amazon Lex sends to indicate that the bot is ready to
+-- continue the conversation.
+waitAndContinueSpecification_continueResponse :: Lens.Lens' WaitAndContinueSpecification ResponseSpecification
+waitAndContinueSpecification_continueResponse = Lens.lens (\WaitAndContinueSpecification' {continueResponse} -> continueResponse) (\s@WaitAndContinueSpecification' {} a -> s {continueResponse = a} :: WaitAndContinueSpecification)
+
+instance Data.FromJSON WaitAndContinueSpecification where
+  parseJSON =
+    Data.withObject
+      "WaitAndContinueSpecification"
+      ( \x ->
+          WaitAndContinueSpecification'
+            Prelude.<$> (x Data..:? "active")
+            Prelude.<*> (x Data..:? "stillWaitingResponse")
+            Prelude.<*> (x Data..: "waitingResponse")
+            Prelude.<*> (x Data..: "continueResponse")
+      )
+
+instance
+  Prelude.Hashable
+    WaitAndContinueSpecification
+  where
+  hashWithSalt _salt WaitAndContinueSpecification' {..} =
+    _salt
+      `Prelude.hashWithSalt` active
+      `Prelude.hashWithSalt` stillWaitingResponse
+      `Prelude.hashWithSalt` waitingResponse
+      `Prelude.hashWithSalt` continueResponse
+
+instance Prelude.NFData WaitAndContinueSpecification where
+  rnf WaitAndContinueSpecification' {..} =
+    Prelude.rnf active
+      `Prelude.seq` Prelude.rnf stillWaitingResponse
+      `Prelude.seq` Prelude.rnf waitingResponse
+      `Prelude.seq` Prelude.rnf continueResponse
+
+instance Data.ToJSON WaitAndContinueSpecification where
+  toJSON WaitAndContinueSpecification' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("active" Data..=) Prelude.<$> active,
+            ("stillWaitingResponse" Data..=)
+              Prelude.<$> stillWaitingResponse,
+            Prelude.Just
+              ("waitingResponse" Data..= waitingResponse),
+            Prelude.Just
+              ("continueResponse" Data..= continueResponse)
+          ]
+      )
diff --git a/gen/Amazonka/LexV2Models/UntagResource.hs b/gen/Amazonka/LexV2Models/UntagResource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/UntagResource.hs
@@ -0,0 +1,164 @@
+{-# 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.LexV2Models.UntagResource
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Removes tags from a bot, bot alias, or bot channel.
+module Amazonka.LexV2Models.UntagResource
+  ( -- * Creating a Request
+    UntagResource (..),
+    newUntagResource,
+
+    -- * Request Lenses
+    untagResource_resourceARN,
+    untagResource_tagKeys,
+
+    -- * Destructuring the Response
+    UntagResourceResponse (..),
+    newUntagResourceResponse,
+
+    -- * Response Lenses
+    untagResourceResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LexV2Models.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUntagResource' smart constructor.
+data UntagResource = UntagResource'
+  { -- | The Amazon Resource Name (ARN) of the resource to remove the tags from.
+    resourceARN :: Prelude.Text,
+    -- | A list of tag keys to remove from the resource. If a tag key does not
+    -- exist on the resource, it is ignored.
+    tagKeys :: [Prelude.Text]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UntagResource' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'resourceARN', 'untagResource_resourceARN' - The Amazon Resource Name (ARN) of the resource to remove the tags from.
+--
+-- 'tagKeys', 'untagResource_tagKeys' - A list of tag keys to remove from the resource. If a tag key does not
+-- exist on the resource, it is ignored.
+newUntagResource ::
+  -- | 'resourceARN'
+  Prelude.Text ->
+  UntagResource
+newUntagResource pResourceARN_ =
+  UntagResource'
+    { resourceARN = pResourceARN_,
+      tagKeys = Prelude.mempty
+    }
+
+-- | The Amazon Resource Name (ARN) of the resource to remove the tags from.
+untagResource_resourceARN :: Lens.Lens' UntagResource Prelude.Text
+untagResource_resourceARN = Lens.lens (\UntagResource' {resourceARN} -> resourceARN) (\s@UntagResource' {} a -> s {resourceARN = a} :: UntagResource)
+
+-- | A list of tag keys to remove from the resource. If a tag key does not
+-- exist on the resource, it is ignored.
+untagResource_tagKeys :: Lens.Lens' UntagResource [Prelude.Text]
+untagResource_tagKeys = Lens.lens (\UntagResource' {tagKeys} -> tagKeys) (\s@UntagResource' {} a -> s {tagKeys = a} :: UntagResource) Prelude.. Lens.coerced
+
+instance Core.AWSRequest UntagResource where
+  type
+    AWSResponse UntagResource =
+      UntagResourceResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          UntagResourceResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UntagResource where
+  hashWithSalt _salt UntagResource' {..} =
+    _salt
+      `Prelude.hashWithSalt` resourceARN
+      `Prelude.hashWithSalt` tagKeys
+
+instance Prelude.NFData UntagResource where
+  rnf UntagResource' {..} =
+    Prelude.rnf resourceARN
+      `Prelude.seq` Prelude.rnf tagKeys
+
+instance Data.ToHeaders UntagResource where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath UntagResource where
+  toPath UntagResource' {..} =
+    Prelude.mconcat ["/tags/", Data.toBS resourceARN]
+
+instance Data.ToQuery UntagResource where
+  toQuery UntagResource' {..} =
+    Prelude.mconcat
+      ["tagKeys" Data.=: Data.toQueryList "member" tagKeys]
+
+-- | /See:/ 'newUntagResourceResponse' smart constructor.
+data UntagResourceResponse = UntagResourceResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UntagResourceResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'untagResourceResponse_httpStatus' - The response's http status code.
+newUntagResourceResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UntagResourceResponse
+newUntagResourceResponse pHttpStatus_ =
+  UntagResourceResponse' {httpStatus = pHttpStatus_}
+
+-- | The response's http status code.
+untagResourceResponse_httpStatus :: Lens.Lens' UntagResourceResponse Prelude.Int
+untagResourceResponse_httpStatus = Lens.lens (\UntagResourceResponse' {httpStatus} -> httpStatus) (\s@UntagResourceResponse' {} a -> s {httpStatus = a} :: UntagResourceResponse)
+
+instance Prelude.NFData UntagResourceResponse where
+  rnf UntagResourceResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/LexV2Models/UpdateBot.hs b/gen/Amazonka/LexV2Models/UpdateBot.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/UpdateBot.hs
@@ -0,0 +1,394 @@
+{-# 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.LexV2Models.UpdateBot
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Updates the configuration of an existing bot.
+module Amazonka.LexV2Models.UpdateBot
+  ( -- * Creating a Request
+    UpdateBot (..),
+    newUpdateBot,
+
+    -- * Request Lenses
+    updateBot_description,
+    updateBot_botId,
+    updateBot_botName,
+    updateBot_roleArn,
+    updateBot_dataPrivacy,
+    updateBot_idleSessionTTLInSeconds,
+
+    -- * Destructuring the Response
+    UpdateBotResponse (..),
+    newUpdateBotResponse,
+
+    -- * Response Lenses
+    updateBotResponse_botId,
+    updateBotResponse_botName,
+    updateBotResponse_botStatus,
+    updateBotResponse_creationDateTime,
+    updateBotResponse_dataPrivacy,
+    updateBotResponse_description,
+    updateBotResponse_idleSessionTTLInSeconds,
+    updateBotResponse_lastUpdatedDateTime,
+    updateBotResponse_roleArn,
+    updateBotResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LexV2Models.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUpdateBot' smart constructor.
+data UpdateBot = UpdateBot'
+  { -- | A description of the bot.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The unique identifier of the bot to update. This identifier is returned
+    -- by the
+    -- <https://docs.aws.amazon.com/lexv2/latest/dg/API_CreateBot.html CreateBot>
+    -- operation.
+    botId :: Prelude.Text,
+    -- | The new name of the bot. The name must be unique in the account that
+    -- creates the bot.
+    botName :: Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of an IAM role that has permissions to
+    -- access the bot.
+    roleArn :: Prelude.Text,
+    -- | Provides information on additional privacy protections Amazon Lex should
+    -- use with the bot\'s data.
+    dataPrivacy :: DataPrivacy,
+    -- | The time, in seconds, that Amazon Lex should keep information about a
+    -- user\'s conversation with the bot.
+    --
+    -- A user interaction remains active for the amount of time specified. If
+    -- no conversation occurs during this time, the session expires and Amazon
+    -- Lex deletes any data provided before the timeout.
+    --
+    -- You can specify between 60 (1 minute) and 86,400 (24 hours) seconds.
+    idleSessionTTLInSeconds :: Prelude.Natural
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateBot' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'description', 'updateBot_description' - A description of the bot.
+--
+-- 'botId', 'updateBot_botId' - The unique identifier of the bot to update. This identifier is returned
+-- by the
+-- <https://docs.aws.amazon.com/lexv2/latest/dg/API_CreateBot.html CreateBot>
+-- operation.
+--
+-- 'botName', 'updateBot_botName' - The new name of the bot. The name must be unique in the account that
+-- creates the bot.
+--
+-- 'roleArn', 'updateBot_roleArn' - The Amazon Resource Name (ARN) of an IAM role that has permissions to
+-- access the bot.
+--
+-- 'dataPrivacy', 'updateBot_dataPrivacy' - Provides information on additional privacy protections Amazon Lex should
+-- use with the bot\'s data.
+--
+-- 'idleSessionTTLInSeconds', 'updateBot_idleSessionTTLInSeconds' - The time, in seconds, that Amazon Lex should keep information about a
+-- user\'s conversation with the bot.
+--
+-- A user interaction remains active for the amount of time specified. If
+-- no conversation occurs during this time, the session expires and Amazon
+-- Lex deletes any data provided before the timeout.
+--
+-- You can specify between 60 (1 minute) and 86,400 (24 hours) seconds.
+newUpdateBot ::
+  -- | 'botId'
+  Prelude.Text ->
+  -- | 'botName'
+  Prelude.Text ->
+  -- | 'roleArn'
+  Prelude.Text ->
+  -- | 'dataPrivacy'
+  DataPrivacy ->
+  -- | 'idleSessionTTLInSeconds'
+  Prelude.Natural ->
+  UpdateBot
+newUpdateBot
+  pBotId_
+  pBotName_
+  pRoleArn_
+  pDataPrivacy_
+  pIdleSessionTTLInSeconds_ =
+    UpdateBot'
+      { description = Prelude.Nothing,
+        botId = pBotId_,
+        botName = pBotName_,
+        roleArn = pRoleArn_,
+        dataPrivacy = pDataPrivacy_,
+        idleSessionTTLInSeconds = pIdleSessionTTLInSeconds_
+      }
+
+-- | A description of the bot.
+updateBot_description :: Lens.Lens' UpdateBot (Prelude.Maybe Prelude.Text)
+updateBot_description = Lens.lens (\UpdateBot' {description} -> description) (\s@UpdateBot' {} a -> s {description = a} :: UpdateBot)
+
+-- | The unique identifier of the bot to update. This identifier is returned
+-- by the
+-- <https://docs.aws.amazon.com/lexv2/latest/dg/API_CreateBot.html CreateBot>
+-- operation.
+updateBot_botId :: Lens.Lens' UpdateBot Prelude.Text
+updateBot_botId = Lens.lens (\UpdateBot' {botId} -> botId) (\s@UpdateBot' {} a -> s {botId = a} :: UpdateBot)
+
+-- | The new name of the bot. The name must be unique in the account that
+-- creates the bot.
+updateBot_botName :: Lens.Lens' UpdateBot Prelude.Text
+updateBot_botName = Lens.lens (\UpdateBot' {botName} -> botName) (\s@UpdateBot' {} a -> s {botName = a} :: UpdateBot)
+
+-- | The Amazon Resource Name (ARN) of an IAM role that has permissions to
+-- access the bot.
+updateBot_roleArn :: Lens.Lens' UpdateBot Prelude.Text
+updateBot_roleArn = Lens.lens (\UpdateBot' {roleArn} -> roleArn) (\s@UpdateBot' {} a -> s {roleArn = a} :: UpdateBot)
+
+-- | Provides information on additional privacy protections Amazon Lex should
+-- use with the bot\'s data.
+updateBot_dataPrivacy :: Lens.Lens' UpdateBot DataPrivacy
+updateBot_dataPrivacy = Lens.lens (\UpdateBot' {dataPrivacy} -> dataPrivacy) (\s@UpdateBot' {} a -> s {dataPrivacy = a} :: UpdateBot)
+
+-- | The time, in seconds, that Amazon Lex should keep information about a
+-- user\'s conversation with the bot.
+--
+-- A user interaction remains active for the amount of time specified. If
+-- no conversation occurs during this time, the session expires and Amazon
+-- Lex deletes any data provided before the timeout.
+--
+-- You can specify between 60 (1 minute) and 86,400 (24 hours) seconds.
+updateBot_idleSessionTTLInSeconds :: Lens.Lens' UpdateBot Prelude.Natural
+updateBot_idleSessionTTLInSeconds = Lens.lens (\UpdateBot' {idleSessionTTLInSeconds} -> idleSessionTTLInSeconds) (\s@UpdateBot' {} a -> s {idleSessionTTLInSeconds = a} :: UpdateBot)
+
+instance Core.AWSRequest UpdateBot where
+  type AWSResponse UpdateBot = UpdateBotResponse
+  request overrides =
+    Request.putJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          UpdateBotResponse'
+            Prelude.<$> (x Data..?> "botId")
+            Prelude.<*> (x Data..?> "botName")
+            Prelude.<*> (x Data..?> "botStatus")
+            Prelude.<*> (x Data..?> "creationDateTime")
+            Prelude.<*> (x Data..?> "dataPrivacy")
+            Prelude.<*> (x Data..?> "description")
+            Prelude.<*> (x Data..?> "idleSessionTTLInSeconds")
+            Prelude.<*> (x Data..?> "lastUpdatedDateTime")
+            Prelude.<*> (x Data..?> "roleArn")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UpdateBot where
+  hashWithSalt _salt UpdateBot' {..} =
+    _salt
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` botId
+      `Prelude.hashWithSalt` botName
+      `Prelude.hashWithSalt` roleArn
+      `Prelude.hashWithSalt` dataPrivacy
+      `Prelude.hashWithSalt` idleSessionTTLInSeconds
+
+instance Prelude.NFData UpdateBot where
+  rnf UpdateBot' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf botId
+      `Prelude.seq` Prelude.rnf botName
+      `Prelude.seq` Prelude.rnf roleArn
+      `Prelude.seq` Prelude.rnf dataPrivacy
+      `Prelude.seq` Prelude.rnf idleSessionTTLInSeconds
+
+instance Data.ToHeaders UpdateBot where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateBot where
+  toJSON UpdateBot' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("description" Data..=) Prelude.<$> description,
+            Prelude.Just ("botName" Data..= botName),
+            Prelude.Just ("roleArn" Data..= roleArn),
+            Prelude.Just ("dataPrivacy" Data..= dataPrivacy),
+            Prelude.Just
+              ( "idleSessionTTLInSeconds"
+                  Data..= idleSessionTTLInSeconds
+              )
+          ]
+      )
+
+instance Data.ToPath UpdateBot where
+  toPath UpdateBot' {..} =
+    Prelude.mconcat ["/bots/", Data.toBS botId, "/"]
+
+instance Data.ToQuery UpdateBot where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateBotResponse' smart constructor.
+data UpdateBotResponse = UpdateBotResponse'
+  { -- | The unique identifier of the bot that was updated.
+    botId :: Prelude.Maybe Prelude.Text,
+    -- | The name of the bot after the update.
+    botName :: Prelude.Maybe Prelude.Text,
+    -- | Shows the current status of the bot. The bot is first in the @Creating@
+    -- status. Once the bot is read for use, it changes to the @Available@
+    -- status. After the bot is created, you can use the @DRAFT@ version of the
+    -- bot.
+    botStatus :: Prelude.Maybe BotStatus,
+    -- | A timestamp of the date and time that the bot was created.
+    creationDateTime :: Prelude.Maybe Data.POSIX,
+    -- | The data privacy settings for the bot after the update.
+    dataPrivacy :: Prelude.Maybe DataPrivacy,
+    -- | The description of the bot after the update.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The session timeout, in seconds, for the bot after the update.
+    idleSessionTTLInSeconds :: Prelude.Maybe Prelude.Natural,
+    -- | A timestamp of the date and time that the bot was last updated.
+    lastUpdatedDateTime :: Prelude.Maybe Data.POSIX,
+    -- | The Amazon Resource Name (ARN) of the IAM role used by the bot after the
+    -- update.
+    roleArn :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateBotResponse' 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:
+--
+-- 'botId', 'updateBotResponse_botId' - The unique identifier of the bot that was updated.
+--
+-- 'botName', 'updateBotResponse_botName' - The name of the bot after the update.
+--
+-- 'botStatus', 'updateBotResponse_botStatus' - Shows the current status of the bot. The bot is first in the @Creating@
+-- status. Once the bot is read for use, it changes to the @Available@
+-- status. After the bot is created, you can use the @DRAFT@ version of the
+-- bot.
+--
+-- 'creationDateTime', 'updateBotResponse_creationDateTime' - A timestamp of the date and time that the bot was created.
+--
+-- 'dataPrivacy', 'updateBotResponse_dataPrivacy' - The data privacy settings for the bot after the update.
+--
+-- 'description', 'updateBotResponse_description' - The description of the bot after the update.
+--
+-- 'idleSessionTTLInSeconds', 'updateBotResponse_idleSessionTTLInSeconds' - The session timeout, in seconds, for the bot after the update.
+--
+-- 'lastUpdatedDateTime', 'updateBotResponse_lastUpdatedDateTime' - A timestamp of the date and time that the bot was last updated.
+--
+-- 'roleArn', 'updateBotResponse_roleArn' - The Amazon Resource Name (ARN) of the IAM role used by the bot after the
+-- update.
+--
+-- 'httpStatus', 'updateBotResponse_httpStatus' - The response's http status code.
+newUpdateBotResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UpdateBotResponse
+newUpdateBotResponse pHttpStatus_ =
+  UpdateBotResponse'
+    { botId = Prelude.Nothing,
+      botName = Prelude.Nothing,
+      botStatus = Prelude.Nothing,
+      creationDateTime = Prelude.Nothing,
+      dataPrivacy = Prelude.Nothing,
+      description = Prelude.Nothing,
+      idleSessionTTLInSeconds = Prelude.Nothing,
+      lastUpdatedDateTime = Prelude.Nothing,
+      roleArn = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The unique identifier of the bot that was updated.
+updateBotResponse_botId :: Lens.Lens' UpdateBotResponse (Prelude.Maybe Prelude.Text)
+updateBotResponse_botId = Lens.lens (\UpdateBotResponse' {botId} -> botId) (\s@UpdateBotResponse' {} a -> s {botId = a} :: UpdateBotResponse)
+
+-- | The name of the bot after the update.
+updateBotResponse_botName :: Lens.Lens' UpdateBotResponse (Prelude.Maybe Prelude.Text)
+updateBotResponse_botName = Lens.lens (\UpdateBotResponse' {botName} -> botName) (\s@UpdateBotResponse' {} a -> s {botName = a} :: UpdateBotResponse)
+
+-- | Shows the current status of the bot. The bot is first in the @Creating@
+-- status. Once the bot is read for use, it changes to the @Available@
+-- status. After the bot is created, you can use the @DRAFT@ version of the
+-- bot.
+updateBotResponse_botStatus :: Lens.Lens' UpdateBotResponse (Prelude.Maybe BotStatus)
+updateBotResponse_botStatus = Lens.lens (\UpdateBotResponse' {botStatus} -> botStatus) (\s@UpdateBotResponse' {} a -> s {botStatus = a} :: UpdateBotResponse)
+
+-- | A timestamp of the date and time that the bot was created.
+updateBotResponse_creationDateTime :: Lens.Lens' UpdateBotResponse (Prelude.Maybe Prelude.UTCTime)
+updateBotResponse_creationDateTime = Lens.lens (\UpdateBotResponse' {creationDateTime} -> creationDateTime) (\s@UpdateBotResponse' {} a -> s {creationDateTime = a} :: UpdateBotResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The data privacy settings for the bot after the update.
+updateBotResponse_dataPrivacy :: Lens.Lens' UpdateBotResponse (Prelude.Maybe DataPrivacy)
+updateBotResponse_dataPrivacy = Lens.lens (\UpdateBotResponse' {dataPrivacy} -> dataPrivacy) (\s@UpdateBotResponse' {} a -> s {dataPrivacy = a} :: UpdateBotResponse)
+
+-- | The description of the bot after the update.
+updateBotResponse_description :: Lens.Lens' UpdateBotResponse (Prelude.Maybe Prelude.Text)
+updateBotResponse_description = Lens.lens (\UpdateBotResponse' {description} -> description) (\s@UpdateBotResponse' {} a -> s {description = a} :: UpdateBotResponse)
+
+-- | The session timeout, in seconds, for the bot after the update.
+updateBotResponse_idleSessionTTLInSeconds :: Lens.Lens' UpdateBotResponse (Prelude.Maybe Prelude.Natural)
+updateBotResponse_idleSessionTTLInSeconds = Lens.lens (\UpdateBotResponse' {idleSessionTTLInSeconds} -> idleSessionTTLInSeconds) (\s@UpdateBotResponse' {} a -> s {idleSessionTTLInSeconds = a} :: UpdateBotResponse)
+
+-- | A timestamp of the date and time that the bot was last updated.
+updateBotResponse_lastUpdatedDateTime :: Lens.Lens' UpdateBotResponse (Prelude.Maybe Prelude.UTCTime)
+updateBotResponse_lastUpdatedDateTime = Lens.lens (\UpdateBotResponse' {lastUpdatedDateTime} -> lastUpdatedDateTime) (\s@UpdateBotResponse' {} a -> s {lastUpdatedDateTime = a} :: UpdateBotResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The Amazon Resource Name (ARN) of the IAM role used by the bot after the
+-- update.
+updateBotResponse_roleArn :: Lens.Lens' UpdateBotResponse (Prelude.Maybe Prelude.Text)
+updateBotResponse_roleArn = Lens.lens (\UpdateBotResponse' {roleArn} -> roleArn) (\s@UpdateBotResponse' {} a -> s {roleArn = a} :: UpdateBotResponse)
+
+-- | The response's http status code.
+updateBotResponse_httpStatus :: Lens.Lens' UpdateBotResponse Prelude.Int
+updateBotResponse_httpStatus = Lens.lens (\UpdateBotResponse' {httpStatus} -> httpStatus) (\s@UpdateBotResponse' {} a -> s {httpStatus = a} :: UpdateBotResponse)
+
+instance Prelude.NFData UpdateBotResponse where
+  rnf UpdateBotResponse' {..} =
+    Prelude.rnf botId
+      `Prelude.seq` Prelude.rnf botName
+      `Prelude.seq` Prelude.rnf botStatus
+      `Prelude.seq` Prelude.rnf creationDateTime
+      `Prelude.seq` Prelude.rnf dataPrivacy
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf idleSessionTTLInSeconds
+      `Prelude.seq` Prelude.rnf lastUpdatedDateTime
+      `Prelude.seq` Prelude.rnf roleArn
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/LexV2Models/UpdateBotAlias.hs b/gen/Amazonka/LexV2Models/UpdateBotAlias.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/UpdateBotAlias.hs
@@ -0,0 +1,403 @@
+{-# 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.LexV2Models.UpdateBotAlias
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Updates the configuration of an existing bot alias.
+module Amazonka.LexV2Models.UpdateBotAlias
+  ( -- * Creating a Request
+    UpdateBotAlias (..),
+    newUpdateBotAlias,
+
+    -- * Request Lenses
+    updateBotAlias_botAliasLocaleSettings,
+    updateBotAlias_botVersion,
+    updateBotAlias_conversationLogSettings,
+    updateBotAlias_description,
+    updateBotAlias_sentimentAnalysisSettings,
+    updateBotAlias_botAliasId,
+    updateBotAlias_botAliasName,
+    updateBotAlias_botId,
+
+    -- * Destructuring the Response
+    UpdateBotAliasResponse (..),
+    newUpdateBotAliasResponse,
+
+    -- * Response Lenses
+    updateBotAliasResponse_botAliasId,
+    updateBotAliasResponse_botAliasLocaleSettings,
+    updateBotAliasResponse_botAliasName,
+    updateBotAliasResponse_botAliasStatus,
+    updateBotAliasResponse_botId,
+    updateBotAliasResponse_botVersion,
+    updateBotAliasResponse_conversationLogSettings,
+    updateBotAliasResponse_creationDateTime,
+    updateBotAliasResponse_description,
+    updateBotAliasResponse_lastUpdatedDateTime,
+    updateBotAliasResponse_sentimentAnalysisSettings,
+    updateBotAliasResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LexV2Models.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUpdateBotAlias' smart constructor.
+data UpdateBotAlias = UpdateBotAlias'
+  { -- | The new Lambda functions to use in each locale for the bot alias.
+    botAliasLocaleSettings :: Prelude.Maybe (Prelude.HashMap Prelude.Text BotAliasLocaleSettings),
+    -- | The new bot version to assign to the bot alias.
+    botVersion :: Prelude.Maybe Prelude.Text,
+    -- | The new settings for storing conversation logs in Amazon CloudWatch Logs
+    -- and Amazon S3 buckets.
+    conversationLogSettings :: Prelude.Maybe ConversationLogSettings,
+    -- | The new description to assign to the bot alias.
+    description :: Prelude.Maybe Prelude.Text,
+    sentimentAnalysisSettings :: Prelude.Maybe SentimentAnalysisSettings,
+    -- | The unique identifier of the bot alias.
+    botAliasId :: Prelude.Text,
+    -- | The new name to assign to the bot alias.
+    botAliasName :: Prelude.Text,
+    -- | The identifier of the bot with the updated alias.
+    botId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateBotAlias' 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:
+--
+-- 'botAliasLocaleSettings', 'updateBotAlias_botAliasLocaleSettings' - The new Lambda functions to use in each locale for the bot alias.
+--
+-- 'botVersion', 'updateBotAlias_botVersion' - The new bot version to assign to the bot alias.
+--
+-- 'conversationLogSettings', 'updateBotAlias_conversationLogSettings' - The new settings for storing conversation logs in Amazon CloudWatch Logs
+-- and Amazon S3 buckets.
+--
+-- 'description', 'updateBotAlias_description' - The new description to assign to the bot alias.
+--
+-- 'sentimentAnalysisSettings', 'updateBotAlias_sentimentAnalysisSettings' - Undocumented member.
+--
+-- 'botAliasId', 'updateBotAlias_botAliasId' - The unique identifier of the bot alias.
+--
+-- 'botAliasName', 'updateBotAlias_botAliasName' - The new name to assign to the bot alias.
+--
+-- 'botId', 'updateBotAlias_botId' - The identifier of the bot with the updated alias.
+newUpdateBotAlias ::
+  -- | 'botAliasId'
+  Prelude.Text ->
+  -- | 'botAliasName'
+  Prelude.Text ->
+  -- | 'botId'
+  Prelude.Text ->
+  UpdateBotAlias
+newUpdateBotAlias pBotAliasId_ pBotAliasName_ pBotId_ =
+  UpdateBotAlias'
+    { botAliasLocaleSettings =
+        Prelude.Nothing,
+      botVersion = Prelude.Nothing,
+      conversationLogSettings = Prelude.Nothing,
+      description = Prelude.Nothing,
+      sentimentAnalysisSettings = Prelude.Nothing,
+      botAliasId = pBotAliasId_,
+      botAliasName = pBotAliasName_,
+      botId = pBotId_
+    }
+
+-- | The new Lambda functions to use in each locale for the bot alias.
+updateBotAlias_botAliasLocaleSettings :: Lens.Lens' UpdateBotAlias (Prelude.Maybe (Prelude.HashMap Prelude.Text BotAliasLocaleSettings))
+updateBotAlias_botAliasLocaleSettings = Lens.lens (\UpdateBotAlias' {botAliasLocaleSettings} -> botAliasLocaleSettings) (\s@UpdateBotAlias' {} a -> s {botAliasLocaleSettings = a} :: UpdateBotAlias) Prelude.. Lens.mapping Lens.coerced
+
+-- | The new bot version to assign to the bot alias.
+updateBotAlias_botVersion :: Lens.Lens' UpdateBotAlias (Prelude.Maybe Prelude.Text)
+updateBotAlias_botVersion = Lens.lens (\UpdateBotAlias' {botVersion} -> botVersion) (\s@UpdateBotAlias' {} a -> s {botVersion = a} :: UpdateBotAlias)
+
+-- | The new settings for storing conversation logs in Amazon CloudWatch Logs
+-- and Amazon S3 buckets.
+updateBotAlias_conversationLogSettings :: Lens.Lens' UpdateBotAlias (Prelude.Maybe ConversationLogSettings)
+updateBotAlias_conversationLogSettings = Lens.lens (\UpdateBotAlias' {conversationLogSettings} -> conversationLogSettings) (\s@UpdateBotAlias' {} a -> s {conversationLogSettings = a} :: UpdateBotAlias)
+
+-- | The new description to assign to the bot alias.
+updateBotAlias_description :: Lens.Lens' UpdateBotAlias (Prelude.Maybe Prelude.Text)
+updateBotAlias_description = Lens.lens (\UpdateBotAlias' {description} -> description) (\s@UpdateBotAlias' {} a -> s {description = a} :: UpdateBotAlias)
+
+-- | Undocumented member.
+updateBotAlias_sentimentAnalysisSettings :: Lens.Lens' UpdateBotAlias (Prelude.Maybe SentimentAnalysisSettings)
+updateBotAlias_sentimentAnalysisSettings = Lens.lens (\UpdateBotAlias' {sentimentAnalysisSettings} -> sentimentAnalysisSettings) (\s@UpdateBotAlias' {} a -> s {sentimentAnalysisSettings = a} :: UpdateBotAlias)
+
+-- | The unique identifier of the bot alias.
+updateBotAlias_botAliasId :: Lens.Lens' UpdateBotAlias Prelude.Text
+updateBotAlias_botAliasId = Lens.lens (\UpdateBotAlias' {botAliasId} -> botAliasId) (\s@UpdateBotAlias' {} a -> s {botAliasId = a} :: UpdateBotAlias)
+
+-- | The new name to assign to the bot alias.
+updateBotAlias_botAliasName :: Lens.Lens' UpdateBotAlias Prelude.Text
+updateBotAlias_botAliasName = Lens.lens (\UpdateBotAlias' {botAliasName} -> botAliasName) (\s@UpdateBotAlias' {} a -> s {botAliasName = a} :: UpdateBotAlias)
+
+-- | The identifier of the bot with the updated alias.
+updateBotAlias_botId :: Lens.Lens' UpdateBotAlias Prelude.Text
+updateBotAlias_botId = Lens.lens (\UpdateBotAlias' {botId} -> botId) (\s@UpdateBotAlias' {} a -> s {botId = a} :: UpdateBotAlias)
+
+instance Core.AWSRequest UpdateBotAlias where
+  type
+    AWSResponse UpdateBotAlias =
+      UpdateBotAliasResponse
+  request overrides =
+    Request.putJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          UpdateBotAliasResponse'
+            Prelude.<$> (x Data..?> "botAliasId")
+            Prelude.<*> ( x
+                            Data..?> "botAliasLocaleSettings"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (x Data..?> "botAliasName")
+            Prelude.<*> (x Data..?> "botAliasStatus")
+            Prelude.<*> (x Data..?> "botId")
+            Prelude.<*> (x Data..?> "botVersion")
+            Prelude.<*> (x Data..?> "conversationLogSettings")
+            Prelude.<*> (x Data..?> "creationDateTime")
+            Prelude.<*> (x Data..?> "description")
+            Prelude.<*> (x Data..?> "lastUpdatedDateTime")
+            Prelude.<*> (x Data..?> "sentimentAnalysisSettings")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UpdateBotAlias where
+  hashWithSalt _salt UpdateBotAlias' {..} =
+    _salt
+      `Prelude.hashWithSalt` botAliasLocaleSettings
+      `Prelude.hashWithSalt` botVersion
+      `Prelude.hashWithSalt` conversationLogSettings
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` sentimentAnalysisSettings
+      `Prelude.hashWithSalt` botAliasId
+      `Prelude.hashWithSalt` botAliasName
+      `Prelude.hashWithSalt` botId
+
+instance Prelude.NFData UpdateBotAlias where
+  rnf UpdateBotAlias' {..} =
+    Prelude.rnf botAliasLocaleSettings
+      `Prelude.seq` Prelude.rnf botVersion
+      `Prelude.seq` Prelude.rnf conversationLogSettings
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf sentimentAnalysisSettings
+      `Prelude.seq` Prelude.rnf botAliasId
+      `Prelude.seq` Prelude.rnf botAliasName
+      `Prelude.seq` Prelude.rnf botId
+
+instance Data.ToHeaders UpdateBotAlias where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateBotAlias where
+  toJSON UpdateBotAlias' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("botAliasLocaleSettings" Data..=)
+              Prelude.<$> botAliasLocaleSettings,
+            ("botVersion" Data..=) Prelude.<$> botVersion,
+            ("conversationLogSettings" Data..=)
+              Prelude.<$> conversationLogSettings,
+            ("description" Data..=) Prelude.<$> description,
+            ("sentimentAnalysisSettings" Data..=)
+              Prelude.<$> sentimentAnalysisSettings,
+            Prelude.Just ("botAliasName" Data..= botAliasName)
+          ]
+      )
+
+instance Data.ToPath UpdateBotAlias where
+  toPath UpdateBotAlias' {..} =
+    Prelude.mconcat
+      [ "/bots/",
+        Data.toBS botId,
+        "/botaliases/",
+        Data.toBS botAliasId,
+        "/"
+      ]
+
+instance Data.ToQuery UpdateBotAlias where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateBotAliasResponse' smart constructor.
+data UpdateBotAliasResponse = UpdateBotAliasResponse'
+  { -- | The identifier of the updated bot alias.
+    botAliasId :: Prelude.Maybe Prelude.Text,
+    -- | The updated Lambda functions to use in each locale for the bot alias.
+    botAliasLocaleSettings :: Prelude.Maybe (Prelude.HashMap Prelude.Text BotAliasLocaleSettings),
+    -- | The updated name of the bot alias.
+    botAliasName :: Prelude.Maybe Prelude.Text,
+    -- | The current status of the bot alias. When the status is @Available@ the
+    -- alias is ready for use.
+    botAliasStatus :: Prelude.Maybe BotAliasStatus,
+    -- | The identifier of the bot with the updated alias.
+    botId :: Prelude.Maybe Prelude.Text,
+    -- | The updated version of the bot that the alias points to.
+    botVersion :: Prelude.Maybe Prelude.Text,
+    -- | The updated settings for storing conversation logs in Amazon CloudWatch
+    -- Logs and Amazon S3 buckets.
+    conversationLogSettings :: Prelude.Maybe ConversationLogSettings,
+    -- | A timestamp of the date and time that the bot was created.
+    creationDateTime :: Prelude.Maybe Data.POSIX,
+    -- | The updated description of the bot alias.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | A timestamp of the date and time that the bot was last updated.
+    lastUpdatedDateTime :: Prelude.Maybe Data.POSIX,
+    sentimentAnalysisSettings :: Prelude.Maybe SentimentAnalysisSettings,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateBotAliasResponse' 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:
+--
+-- 'botAliasId', 'updateBotAliasResponse_botAliasId' - The identifier of the updated bot alias.
+--
+-- 'botAliasLocaleSettings', 'updateBotAliasResponse_botAliasLocaleSettings' - The updated Lambda functions to use in each locale for the bot alias.
+--
+-- 'botAliasName', 'updateBotAliasResponse_botAliasName' - The updated name of the bot alias.
+--
+-- 'botAliasStatus', 'updateBotAliasResponse_botAliasStatus' - The current status of the bot alias. When the status is @Available@ the
+-- alias is ready for use.
+--
+-- 'botId', 'updateBotAliasResponse_botId' - The identifier of the bot with the updated alias.
+--
+-- 'botVersion', 'updateBotAliasResponse_botVersion' - The updated version of the bot that the alias points to.
+--
+-- 'conversationLogSettings', 'updateBotAliasResponse_conversationLogSettings' - The updated settings for storing conversation logs in Amazon CloudWatch
+-- Logs and Amazon S3 buckets.
+--
+-- 'creationDateTime', 'updateBotAliasResponse_creationDateTime' - A timestamp of the date and time that the bot was created.
+--
+-- 'description', 'updateBotAliasResponse_description' - The updated description of the bot alias.
+--
+-- 'lastUpdatedDateTime', 'updateBotAliasResponse_lastUpdatedDateTime' - A timestamp of the date and time that the bot was last updated.
+--
+-- 'sentimentAnalysisSettings', 'updateBotAliasResponse_sentimentAnalysisSettings' - Undocumented member.
+--
+-- 'httpStatus', 'updateBotAliasResponse_httpStatus' - The response's http status code.
+newUpdateBotAliasResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UpdateBotAliasResponse
+newUpdateBotAliasResponse pHttpStatus_ =
+  UpdateBotAliasResponse'
+    { botAliasId =
+        Prelude.Nothing,
+      botAliasLocaleSettings = Prelude.Nothing,
+      botAliasName = Prelude.Nothing,
+      botAliasStatus = Prelude.Nothing,
+      botId = Prelude.Nothing,
+      botVersion = Prelude.Nothing,
+      conversationLogSettings = Prelude.Nothing,
+      creationDateTime = Prelude.Nothing,
+      description = Prelude.Nothing,
+      lastUpdatedDateTime = Prelude.Nothing,
+      sentimentAnalysisSettings = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The identifier of the updated bot alias.
+updateBotAliasResponse_botAliasId :: Lens.Lens' UpdateBotAliasResponse (Prelude.Maybe Prelude.Text)
+updateBotAliasResponse_botAliasId = Lens.lens (\UpdateBotAliasResponse' {botAliasId} -> botAliasId) (\s@UpdateBotAliasResponse' {} a -> s {botAliasId = a} :: UpdateBotAliasResponse)
+
+-- | The updated Lambda functions to use in each locale for the bot alias.
+updateBotAliasResponse_botAliasLocaleSettings :: Lens.Lens' UpdateBotAliasResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text BotAliasLocaleSettings))
+updateBotAliasResponse_botAliasLocaleSettings = Lens.lens (\UpdateBotAliasResponse' {botAliasLocaleSettings} -> botAliasLocaleSettings) (\s@UpdateBotAliasResponse' {} a -> s {botAliasLocaleSettings = a} :: UpdateBotAliasResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The updated name of the bot alias.
+updateBotAliasResponse_botAliasName :: Lens.Lens' UpdateBotAliasResponse (Prelude.Maybe Prelude.Text)
+updateBotAliasResponse_botAliasName = Lens.lens (\UpdateBotAliasResponse' {botAliasName} -> botAliasName) (\s@UpdateBotAliasResponse' {} a -> s {botAliasName = a} :: UpdateBotAliasResponse)
+
+-- | The current status of the bot alias. When the status is @Available@ the
+-- alias is ready for use.
+updateBotAliasResponse_botAliasStatus :: Lens.Lens' UpdateBotAliasResponse (Prelude.Maybe BotAliasStatus)
+updateBotAliasResponse_botAliasStatus = Lens.lens (\UpdateBotAliasResponse' {botAliasStatus} -> botAliasStatus) (\s@UpdateBotAliasResponse' {} a -> s {botAliasStatus = a} :: UpdateBotAliasResponse)
+
+-- | The identifier of the bot with the updated alias.
+updateBotAliasResponse_botId :: Lens.Lens' UpdateBotAliasResponse (Prelude.Maybe Prelude.Text)
+updateBotAliasResponse_botId = Lens.lens (\UpdateBotAliasResponse' {botId} -> botId) (\s@UpdateBotAliasResponse' {} a -> s {botId = a} :: UpdateBotAliasResponse)
+
+-- | The updated version of the bot that the alias points to.
+updateBotAliasResponse_botVersion :: Lens.Lens' UpdateBotAliasResponse (Prelude.Maybe Prelude.Text)
+updateBotAliasResponse_botVersion = Lens.lens (\UpdateBotAliasResponse' {botVersion} -> botVersion) (\s@UpdateBotAliasResponse' {} a -> s {botVersion = a} :: UpdateBotAliasResponse)
+
+-- | The updated settings for storing conversation logs in Amazon CloudWatch
+-- Logs and Amazon S3 buckets.
+updateBotAliasResponse_conversationLogSettings :: Lens.Lens' UpdateBotAliasResponse (Prelude.Maybe ConversationLogSettings)
+updateBotAliasResponse_conversationLogSettings = Lens.lens (\UpdateBotAliasResponse' {conversationLogSettings} -> conversationLogSettings) (\s@UpdateBotAliasResponse' {} a -> s {conversationLogSettings = a} :: UpdateBotAliasResponse)
+
+-- | A timestamp of the date and time that the bot was created.
+updateBotAliasResponse_creationDateTime :: Lens.Lens' UpdateBotAliasResponse (Prelude.Maybe Prelude.UTCTime)
+updateBotAliasResponse_creationDateTime = Lens.lens (\UpdateBotAliasResponse' {creationDateTime} -> creationDateTime) (\s@UpdateBotAliasResponse' {} a -> s {creationDateTime = a} :: UpdateBotAliasResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The updated description of the bot alias.
+updateBotAliasResponse_description :: Lens.Lens' UpdateBotAliasResponse (Prelude.Maybe Prelude.Text)
+updateBotAliasResponse_description = Lens.lens (\UpdateBotAliasResponse' {description} -> description) (\s@UpdateBotAliasResponse' {} a -> s {description = a} :: UpdateBotAliasResponse)
+
+-- | A timestamp of the date and time that the bot was last updated.
+updateBotAliasResponse_lastUpdatedDateTime :: Lens.Lens' UpdateBotAliasResponse (Prelude.Maybe Prelude.UTCTime)
+updateBotAliasResponse_lastUpdatedDateTime = Lens.lens (\UpdateBotAliasResponse' {lastUpdatedDateTime} -> lastUpdatedDateTime) (\s@UpdateBotAliasResponse' {} a -> s {lastUpdatedDateTime = a} :: UpdateBotAliasResponse) Prelude.. Lens.mapping Data._Time
+
+-- | Undocumented member.
+updateBotAliasResponse_sentimentAnalysisSettings :: Lens.Lens' UpdateBotAliasResponse (Prelude.Maybe SentimentAnalysisSettings)
+updateBotAliasResponse_sentimentAnalysisSettings = Lens.lens (\UpdateBotAliasResponse' {sentimentAnalysisSettings} -> sentimentAnalysisSettings) (\s@UpdateBotAliasResponse' {} a -> s {sentimentAnalysisSettings = a} :: UpdateBotAliasResponse)
+
+-- | The response's http status code.
+updateBotAliasResponse_httpStatus :: Lens.Lens' UpdateBotAliasResponse Prelude.Int
+updateBotAliasResponse_httpStatus = Lens.lens (\UpdateBotAliasResponse' {httpStatus} -> httpStatus) (\s@UpdateBotAliasResponse' {} a -> s {httpStatus = a} :: UpdateBotAliasResponse)
+
+instance Prelude.NFData UpdateBotAliasResponse where
+  rnf UpdateBotAliasResponse' {..} =
+    Prelude.rnf botAliasId
+      `Prelude.seq` Prelude.rnf botAliasLocaleSettings
+      `Prelude.seq` Prelude.rnf botAliasName
+      `Prelude.seq` Prelude.rnf botAliasStatus
+      `Prelude.seq` Prelude.rnf botId
+      `Prelude.seq` Prelude.rnf botVersion
+      `Prelude.seq` Prelude.rnf conversationLogSettings
+      `Prelude.seq` Prelude.rnf creationDateTime
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf lastUpdatedDateTime
+      `Prelude.seq` Prelude.rnf sentimentAnalysisSettings
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/LexV2Models/UpdateBotLocale.hs b/gen/Amazonka/LexV2Models/UpdateBotLocale.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/UpdateBotLocale.hs
@@ -0,0 +1,424 @@
+{-# 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.LexV2Models.UpdateBotLocale
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Updates the settings that a bot has for a specific locale.
+module Amazonka.LexV2Models.UpdateBotLocale
+  ( -- * Creating a Request
+    UpdateBotLocale (..),
+    newUpdateBotLocale,
+
+    -- * Request Lenses
+    updateBotLocale_description,
+    updateBotLocale_voiceSettings,
+    updateBotLocale_botId,
+    updateBotLocale_botVersion,
+    updateBotLocale_localeId,
+    updateBotLocale_nluIntentConfidenceThreshold,
+
+    -- * Destructuring the Response
+    UpdateBotLocaleResponse (..),
+    newUpdateBotLocaleResponse,
+
+    -- * Response Lenses
+    updateBotLocaleResponse_botId,
+    updateBotLocaleResponse_botLocaleStatus,
+    updateBotLocaleResponse_botVersion,
+    updateBotLocaleResponse_creationDateTime,
+    updateBotLocaleResponse_description,
+    updateBotLocaleResponse_failureReasons,
+    updateBotLocaleResponse_lastUpdatedDateTime,
+    updateBotLocaleResponse_localeId,
+    updateBotLocaleResponse_localeName,
+    updateBotLocaleResponse_nluIntentConfidenceThreshold,
+    updateBotLocaleResponse_recommendedActions,
+    updateBotLocaleResponse_voiceSettings,
+    updateBotLocaleResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LexV2Models.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUpdateBotLocale' smart constructor.
+data UpdateBotLocale = UpdateBotLocale'
+  { -- | The new description of the locale.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The new Amazon Polly voice Amazon Lex should use for voice interaction
+    -- with the user.
+    voiceSettings :: Prelude.Maybe VoiceSettings,
+    -- | The unique identifier of the bot that contains the locale.
+    botId :: Prelude.Text,
+    -- | The version of the bot that contains the locale to be updated. The
+    -- version can only be the @DRAFT@ version.
+    botVersion :: Prelude.Text,
+    -- | The identifier of the language and locale to update. The string must
+    -- match one of the supported locales. For more information, see
+    -- <https://docs.aws.amazon.com/lexv2/latest/dg/how-languages.html Supported languages>.
+    localeId :: Prelude.Text,
+    -- | The new confidence threshold where Amazon Lex inserts the
+    -- @AMAZON.FallbackIntent@ and @AMAZON.KendraSearchIntent@ intents in the
+    -- list of possible intents for an utterance.
+    nluIntentConfidenceThreshold :: Prelude.Double
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateBotLocale' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'description', 'updateBotLocale_description' - The new description of the locale.
+--
+-- 'voiceSettings', 'updateBotLocale_voiceSettings' - The new Amazon Polly voice Amazon Lex should use for voice interaction
+-- with the user.
+--
+-- 'botId', 'updateBotLocale_botId' - The unique identifier of the bot that contains the locale.
+--
+-- 'botVersion', 'updateBotLocale_botVersion' - The version of the bot that contains the locale to be updated. The
+-- version can only be the @DRAFT@ version.
+--
+-- 'localeId', 'updateBotLocale_localeId' - The identifier of the language and locale to update. The string must
+-- match one of the supported locales. For more information, see
+-- <https://docs.aws.amazon.com/lexv2/latest/dg/how-languages.html Supported languages>.
+--
+-- 'nluIntentConfidenceThreshold', 'updateBotLocale_nluIntentConfidenceThreshold' - The new confidence threshold where Amazon Lex inserts the
+-- @AMAZON.FallbackIntent@ and @AMAZON.KendraSearchIntent@ intents in the
+-- list of possible intents for an utterance.
+newUpdateBotLocale ::
+  -- | 'botId'
+  Prelude.Text ->
+  -- | 'botVersion'
+  Prelude.Text ->
+  -- | 'localeId'
+  Prelude.Text ->
+  -- | 'nluIntentConfidenceThreshold'
+  Prelude.Double ->
+  UpdateBotLocale
+newUpdateBotLocale
+  pBotId_
+  pBotVersion_
+  pLocaleId_
+  pNluIntentConfidenceThreshold_ =
+    UpdateBotLocale'
+      { description = Prelude.Nothing,
+        voiceSettings = Prelude.Nothing,
+        botId = pBotId_,
+        botVersion = pBotVersion_,
+        localeId = pLocaleId_,
+        nluIntentConfidenceThreshold =
+          pNluIntentConfidenceThreshold_
+      }
+
+-- | The new description of the locale.
+updateBotLocale_description :: Lens.Lens' UpdateBotLocale (Prelude.Maybe Prelude.Text)
+updateBotLocale_description = Lens.lens (\UpdateBotLocale' {description} -> description) (\s@UpdateBotLocale' {} a -> s {description = a} :: UpdateBotLocale)
+
+-- | The new Amazon Polly voice Amazon Lex should use for voice interaction
+-- with the user.
+updateBotLocale_voiceSettings :: Lens.Lens' UpdateBotLocale (Prelude.Maybe VoiceSettings)
+updateBotLocale_voiceSettings = Lens.lens (\UpdateBotLocale' {voiceSettings} -> voiceSettings) (\s@UpdateBotLocale' {} a -> s {voiceSettings = a} :: UpdateBotLocale)
+
+-- | The unique identifier of the bot that contains the locale.
+updateBotLocale_botId :: Lens.Lens' UpdateBotLocale Prelude.Text
+updateBotLocale_botId = Lens.lens (\UpdateBotLocale' {botId} -> botId) (\s@UpdateBotLocale' {} a -> s {botId = a} :: UpdateBotLocale)
+
+-- | The version of the bot that contains the locale to be updated. The
+-- version can only be the @DRAFT@ version.
+updateBotLocale_botVersion :: Lens.Lens' UpdateBotLocale Prelude.Text
+updateBotLocale_botVersion = Lens.lens (\UpdateBotLocale' {botVersion} -> botVersion) (\s@UpdateBotLocale' {} a -> s {botVersion = a} :: UpdateBotLocale)
+
+-- | The identifier of the language and locale to update. The string must
+-- match one of the supported locales. For more information, see
+-- <https://docs.aws.amazon.com/lexv2/latest/dg/how-languages.html Supported languages>.
+updateBotLocale_localeId :: Lens.Lens' UpdateBotLocale Prelude.Text
+updateBotLocale_localeId = Lens.lens (\UpdateBotLocale' {localeId} -> localeId) (\s@UpdateBotLocale' {} a -> s {localeId = a} :: UpdateBotLocale)
+
+-- | The new confidence threshold where Amazon Lex inserts the
+-- @AMAZON.FallbackIntent@ and @AMAZON.KendraSearchIntent@ intents in the
+-- list of possible intents for an utterance.
+updateBotLocale_nluIntentConfidenceThreshold :: Lens.Lens' UpdateBotLocale Prelude.Double
+updateBotLocale_nluIntentConfidenceThreshold = Lens.lens (\UpdateBotLocale' {nluIntentConfidenceThreshold} -> nluIntentConfidenceThreshold) (\s@UpdateBotLocale' {} a -> s {nluIntentConfidenceThreshold = a} :: UpdateBotLocale)
+
+instance Core.AWSRequest UpdateBotLocale where
+  type
+    AWSResponse UpdateBotLocale =
+      UpdateBotLocaleResponse
+  request overrides =
+    Request.putJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          UpdateBotLocaleResponse'
+            Prelude.<$> (x Data..?> "botId")
+            Prelude.<*> (x Data..?> "botLocaleStatus")
+            Prelude.<*> (x Data..?> "botVersion")
+            Prelude.<*> (x Data..?> "creationDateTime")
+            Prelude.<*> (x Data..?> "description")
+            Prelude.<*> (x Data..?> "failureReasons" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "lastUpdatedDateTime")
+            Prelude.<*> (x Data..?> "localeId")
+            Prelude.<*> (x Data..?> "localeName")
+            Prelude.<*> (x Data..?> "nluIntentConfidenceThreshold")
+            Prelude.<*> ( x
+                            Data..?> "recommendedActions"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (x Data..?> "voiceSettings")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UpdateBotLocale where
+  hashWithSalt _salt UpdateBotLocale' {..} =
+    _salt
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` voiceSettings
+      `Prelude.hashWithSalt` botId
+      `Prelude.hashWithSalt` botVersion
+      `Prelude.hashWithSalt` localeId
+      `Prelude.hashWithSalt` nluIntentConfidenceThreshold
+
+instance Prelude.NFData UpdateBotLocale where
+  rnf UpdateBotLocale' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf voiceSettings
+      `Prelude.seq` Prelude.rnf botId
+      `Prelude.seq` Prelude.rnf botVersion
+      `Prelude.seq` Prelude.rnf localeId
+      `Prelude.seq` Prelude.rnf nluIntentConfidenceThreshold
+
+instance Data.ToHeaders UpdateBotLocale where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateBotLocale where
+  toJSON UpdateBotLocale' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("description" Data..=) Prelude.<$> description,
+            ("voiceSettings" Data..=) Prelude.<$> voiceSettings,
+            Prelude.Just
+              ( "nluIntentConfidenceThreshold"
+                  Data..= nluIntentConfidenceThreshold
+              )
+          ]
+      )
+
+instance Data.ToPath UpdateBotLocale where
+  toPath UpdateBotLocale' {..} =
+    Prelude.mconcat
+      [ "/bots/",
+        Data.toBS botId,
+        "/botversions/",
+        Data.toBS botVersion,
+        "/botlocales/",
+        Data.toBS localeId,
+        "/"
+      ]
+
+instance Data.ToQuery UpdateBotLocale where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateBotLocaleResponse' smart constructor.
+data UpdateBotLocaleResponse = UpdateBotLocaleResponse'
+  { -- | The identifier of the bot that contains the updated locale.
+    botId :: Prelude.Maybe Prelude.Text,
+    -- | The current status of the locale. When the bot status is @Built@ the
+    -- locale is ready for use.
+    botLocaleStatus :: Prelude.Maybe BotLocaleStatus,
+    -- | The version of the bot that contains the updated locale.
+    botVersion :: Prelude.Maybe Prelude.Text,
+    -- | A timestamp of the date and time that the locale was created.
+    creationDateTime :: Prelude.Maybe Data.POSIX,
+    -- | The updated description of the locale.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | If the @botLocaleStatus@ is @Failed@, the @failureReasons@ field lists
+    -- the errors that occurred while building the bot.
+    failureReasons :: Prelude.Maybe [Prelude.Text],
+    -- | A timestamp of the date and time that the locale was last updated.
+    lastUpdatedDateTime :: Prelude.Maybe Data.POSIX,
+    -- | The language and locale of the updated bot locale.
+    localeId :: Prelude.Maybe Prelude.Text,
+    -- | The updated locale name for the locale.
+    localeName :: Prelude.Maybe Prelude.Text,
+    -- | The updated confidence threshold for inserting the
+    -- @AMAZON.FallbackIntent@ and @AMAZON.KendraSearchIntent@ intents in the
+    -- list of possible intents for an utterance.
+    nluIntentConfidenceThreshold :: Prelude.Maybe Prelude.Double,
+    -- | Recommended actions to take to resolve an error in the @failureReasons@
+    -- field.
+    recommendedActions :: Prelude.Maybe [Prelude.Text],
+    -- | The updated Amazon Polly voice to use for voice interaction with the
+    -- user.
+    voiceSettings :: Prelude.Maybe VoiceSettings,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateBotLocaleResponse' 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:
+--
+-- 'botId', 'updateBotLocaleResponse_botId' - The identifier of the bot that contains the updated locale.
+--
+-- 'botLocaleStatus', 'updateBotLocaleResponse_botLocaleStatus' - The current status of the locale. When the bot status is @Built@ the
+-- locale is ready for use.
+--
+-- 'botVersion', 'updateBotLocaleResponse_botVersion' - The version of the bot that contains the updated locale.
+--
+-- 'creationDateTime', 'updateBotLocaleResponse_creationDateTime' - A timestamp of the date and time that the locale was created.
+--
+-- 'description', 'updateBotLocaleResponse_description' - The updated description of the locale.
+--
+-- 'failureReasons', 'updateBotLocaleResponse_failureReasons' - If the @botLocaleStatus@ is @Failed@, the @failureReasons@ field lists
+-- the errors that occurred while building the bot.
+--
+-- 'lastUpdatedDateTime', 'updateBotLocaleResponse_lastUpdatedDateTime' - A timestamp of the date and time that the locale was last updated.
+--
+-- 'localeId', 'updateBotLocaleResponse_localeId' - The language and locale of the updated bot locale.
+--
+-- 'localeName', 'updateBotLocaleResponse_localeName' - The updated locale name for the locale.
+--
+-- 'nluIntentConfidenceThreshold', 'updateBotLocaleResponse_nluIntentConfidenceThreshold' - The updated confidence threshold for inserting the
+-- @AMAZON.FallbackIntent@ and @AMAZON.KendraSearchIntent@ intents in the
+-- list of possible intents for an utterance.
+--
+-- 'recommendedActions', 'updateBotLocaleResponse_recommendedActions' - Recommended actions to take to resolve an error in the @failureReasons@
+-- field.
+--
+-- 'voiceSettings', 'updateBotLocaleResponse_voiceSettings' - The updated Amazon Polly voice to use for voice interaction with the
+-- user.
+--
+-- 'httpStatus', 'updateBotLocaleResponse_httpStatus' - The response's http status code.
+newUpdateBotLocaleResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UpdateBotLocaleResponse
+newUpdateBotLocaleResponse pHttpStatus_ =
+  UpdateBotLocaleResponse'
+    { botId = Prelude.Nothing,
+      botLocaleStatus = Prelude.Nothing,
+      botVersion = Prelude.Nothing,
+      creationDateTime = Prelude.Nothing,
+      description = Prelude.Nothing,
+      failureReasons = Prelude.Nothing,
+      lastUpdatedDateTime = Prelude.Nothing,
+      localeId = Prelude.Nothing,
+      localeName = Prelude.Nothing,
+      nluIntentConfidenceThreshold = Prelude.Nothing,
+      recommendedActions = Prelude.Nothing,
+      voiceSettings = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The identifier of the bot that contains the updated locale.
+updateBotLocaleResponse_botId :: Lens.Lens' UpdateBotLocaleResponse (Prelude.Maybe Prelude.Text)
+updateBotLocaleResponse_botId = Lens.lens (\UpdateBotLocaleResponse' {botId} -> botId) (\s@UpdateBotLocaleResponse' {} a -> s {botId = a} :: UpdateBotLocaleResponse)
+
+-- | The current status of the locale. When the bot status is @Built@ the
+-- locale is ready for use.
+updateBotLocaleResponse_botLocaleStatus :: Lens.Lens' UpdateBotLocaleResponse (Prelude.Maybe BotLocaleStatus)
+updateBotLocaleResponse_botLocaleStatus = Lens.lens (\UpdateBotLocaleResponse' {botLocaleStatus} -> botLocaleStatus) (\s@UpdateBotLocaleResponse' {} a -> s {botLocaleStatus = a} :: UpdateBotLocaleResponse)
+
+-- | The version of the bot that contains the updated locale.
+updateBotLocaleResponse_botVersion :: Lens.Lens' UpdateBotLocaleResponse (Prelude.Maybe Prelude.Text)
+updateBotLocaleResponse_botVersion = Lens.lens (\UpdateBotLocaleResponse' {botVersion} -> botVersion) (\s@UpdateBotLocaleResponse' {} a -> s {botVersion = a} :: UpdateBotLocaleResponse)
+
+-- | A timestamp of the date and time that the locale was created.
+updateBotLocaleResponse_creationDateTime :: Lens.Lens' UpdateBotLocaleResponse (Prelude.Maybe Prelude.UTCTime)
+updateBotLocaleResponse_creationDateTime = Lens.lens (\UpdateBotLocaleResponse' {creationDateTime} -> creationDateTime) (\s@UpdateBotLocaleResponse' {} a -> s {creationDateTime = a} :: UpdateBotLocaleResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The updated description of the locale.
+updateBotLocaleResponse_description :: Lens.Lens' UpdateBotLocaleResponse (Prelude.Maybe Prelude.Text)
+updateBotLocaleResponse_description = Lens.lens (\UpdateBotLocaleResponse' {description} -> description) (\s@UpdateBotLocaleResponse' {} a -> s {description = a} :: UpdateBotLocaleResponse)
+
+-- | If the @botLocaleStatus@ is @Failed@, the @failureReasons@ field lists
+-- the errors that occurred while building the bot.
+updateBotLocaleResponse_failureReasons :: Lens.Lens' UpdateBotLocaleResponse (Prelude.Maybe [Prelude.Text])
+updateBotLocaleResponse_failureReasons = Lens.lens (\UpdateBotLocaleResponse' {failureReasons} -> failureReasons) (\s@UpdateBotLocaleResponse' {} a -> s {failureReasons = a} :: UpdateBotLocaleResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | A timestamp of the date and time that the locale was last updated.
+updateBotLocaleResponse_lastUpdatedDateTime :: Lens.Lens' UpdateBotLocaleResponse (Prelude.Maybe Prelude.UTCTime)
+updateBotLocaleResponse_lastUpdatedDateTime = Lens.lens (\UpdateBotLocaleResponse' {lastUpdatedDateTime} -> lastUpdatedDateTime) (\s@UpdateBotLocaleResponse' {} a -> s {lastUpdatedDateTime = a} :: UpdateBotLocaleResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The language and locale of the updated bot locale.
+updateBotLocaleResponse_localeId :: Lens.Lens' UpdateBotLocaleResponse (Prelude.Maybe Prelude.Text)
+updateBotLocaleResponse_localeId = Lens.lens (\UpdateBotLocaleResponse' {localeId} -> localeId) (\s@UpdateBotLocaleResponse' {} a -> s {localeId = a} :: UpdateBotLocaleResponse)
+
+-- | The updated locale name for the locale.
+updateBotLocaleResponse_localeName :: Lens.Lens' UpdateBotLocaleResponse (Prelude.Maybe Prelude.Text)
+updateBotLocaleResponse_localeName = Lens.lens (\UpdateBotLocaleResponse' {localeName} -> localeName) (\s@UpdateBotLocaleResponse' {} a -> s {localeName = a} :: UpdateBotLocaleResponse)
+
+-- | The updated confidence threshold for inserting the
+-- @AMAZON.FallbackIntent@ and @AMAZON.KendraSearchIntent@ intents in the
+-- list of possible intents for an utterance.
+updateBotLocaleResponse_nluIntentConfidenceThreshold :: Lens.Lens' UpdateBotLocaleResponse (Prelude.Maybe Prelude.Double)
+updateBotLocaleResponse_nluIntentConfidenceThreshold = Lens.lens (\UpdateBotLocaleResponse' {nluIntentConfidenceThreshold} -> nluIntentConfidenceThreshold) (\s@UpdateBotLocaleResponse' {} a -> s {nluIntentConfidenceThreshold = a} :: UpdateBotLocaleResponse)
+
+-- | Recommended actions to take to resolve an error in the @failureReasons@
+-- field.
+updateBotLocaleResponse_recommendedActions :: Lens.Lens' UpdateBotLocaleResponse (Prelude.Maybe [Prelude.Text])
+updateBotLocaleResponse_recommendedActions = Lens.lens (\UpdateBotLocaleResponse' {recommendedActions} -> recommendedActions) (\s@UpdateBotLocaleResponse' {} a -> s {recommendedActions = a} :: UpdateBotLocaleResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The updated Amazon Polly voice to use for voice interaction with the
+-- user.
+updateBotLocaleResponse_voiceSettings :: Lens.Lens' UpdateBotLocaleResponse (Prelude.Maybe VoiceSettings)
+updateBotLocaleResponse_voiceSettings = Lens.lens (\UpdateBotLocaleResponse' {voiceSettings} -> voiceSettings) (\s@UpdateBotLocaleResponse' {} a -> s {voiceSettings = a} :: UpdateBotLocaleResponse)
+
+-- | The response's http status code.
+updateBotLocaleResponse_httpStatus :: Lens.Lens' UpdateBotLocaleResponse Prelude.Int
+updateBotLocaleResponse_httpStatus = Lens.lens (\UpdateBotLocaleResponse' {httpStatus} -> httpStatus) (\s@UpdateBotLocaleResponse' {} a -> s {httpStatus = a} :: UpdateBotLocaleResponse)
+
+instance Prelude.NFData UpdateBotLocaleResponse where
+  rnf UpdateBotLocaleResponse' {..} =
+    Prelude.rnf botId
+      `Prelude.seq` Prelude.rnf botLocaleStatus
+      `Prelude.seq` Prelude.rnf botVersion
+      `Prelude.seq` Prelude.rnf creationDateTime
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf failureReasons
+      `Prelude.seq` Prelude.rnf lastUpdatedDateTime
+      `Prelude.seq` Prelude.rnf localeId
+      `Prelude.seq` Prelude.rnf localeName
+      `Prelude.seq` Prelude.rnf nluIntentConfidenceThreshold
+      `Prelude.seq` Prelude.rnf recommendedActions
+      `Prelude.seq` Prelude.rnf voiceSettings
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/LexV2Models/UpdateBotRecommendation.hs b/gen/Amazonka/LexV2Models/UpdateBotRecommendation.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/UpdateBotRecommendation.hs
@@ -0,0 +1,398 @@
+{-# 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.LexV2Models.UpdateBotRecommendation
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Updates an existing bot recommendation request.
+module Amazonka.LexV2Models.UpdateBotRecommendation
+  ( -- * Creating a Request
+    UpdateBotRecommendation (..),
+    newUpdateBotRecommendation,
+
+    -- * Request Lenses
+    updateBotRecommendation_botId,
+    updateBotRecommendation_botVersion,
+    updateBotRecommendation_localeId,
+    updateBotRecommendation_botRecommendationId,
+    updateBotRecommendation_encryptionSetting,
+
+    -- * Destructuring the Response
+    UpdateBotRecommendationResponse (..),
+    newUpdateBotRecommendationResponse,
+
+    -- * Response Lenses
+    updateBotRecommendationResponse_botId,
+    updateBotRecommendationResponse_botRecommendationId,
+    updateBotRecommendationResponse_botRecommendationStatus,
+    updateBotRecommendationResponse_botVersion,
+    updateBotRecommendationResponse_creationDateTime,
+    updateBotRecommendationResponse_encryptionSetting,
+    updateBotRecommendationResponse_lastUpdatedDateTime,
+    updateBotRecommendationResponse_localeId,
+    updateBotRecommendationResponse_transcriptSourceSetting,
+    updateBotRecommendationResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LexV2Models.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUpdateBotRecommendation' smart constructor.
+data UpdateBotRecommendation = UpdateBotRecommendation'
+  { -- | The unique identifier of the bot containing the bot recommendation to be
+    -- updated.
+    botId :: Prelude.Text,
+    -- | The version of the bot containing the bot recommendation to be updated.
+    botVersion :: Prelude.Text,
+    -- | The identifier of the language and locale of the bot recommendation to
+    -- update. The string must match one of the supported locales. For more
+    -- information, see
+    -- <https://docs.aws.amazon.com/lexv2/latest/dg/how-languages.html Supported languages>
+    localeId :: Prelude.Text,
+    -- | The unique identifier of the bot recommendation to be updated.
+    botRecommendationId :: Prelude.Text,
+    -- | The object representing the passwords that will be used to encrypt the
+    -- data related to the bot recommendation results, as well as the KMS key
+    -- ARN used to encrypt the associated metadata.
+    encryptionSetting :: EncryptionSetting
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateBotRecommendation' 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:
+--
+-- 'botId', 'updateBotRecommendation_botId' - The unique identifier of the bot containing the bot recommendation to be
+-- updated.
+--
+-- 'botVersion', 'updateBotRecommendation_botVersion' - The version of the bot containing the bot recommendation to be updated.
+--
+-- 'localeId', 'updateBotRecommendation_localeId' - The identifier of the language and locale of the bot recommendation to
+-- update. The string must match one of the supported locales. For more
+-- information, see
+-- <https://docs.aws.amazon.com/lexv2/latest/dg/how-languages.html Supported languages>
+--
+-- 'botRecommendationId', 'updateBotRecommendation_botRecommendationId' - The unique identifier of the bot recommendation to be updated.
+--
+-- 'encryptionSetting', 'updateBotRecommendation_encryptionSetting' - The object representing the passwords that will be used to encrypt the
+-- data related to the bot recommendation results, as well as the KMS key
+-- ARN used to encrypt the associated metadata.
+newUpdateBotRecommendation ::
+  -- | 'botId'
+  Prelude.Text ->
+  -- | 'botVersion'
+  Prelude.Text ->
+  -- | 'localeId'
+  Prelude.Text ->
+  -- | 'botRecommendationId'
+  Prelude.Text ->
+  -- | 'encryptionSetting'
+  EncryptionSetting ->
+  UpdateBotRecommendation
+newUpdateBotRecommendation
+  pBotId_
+  pBotVersion_
+  pLocaleId_
+  pBotRecommendationId_
+  pEncryptionSetting_ =
+    UpdateBotRecommendation'
+      { botId = pBotId_,
+        botVersion = pBotVersion_,
+        localeId = pLocaleId_,
+        botRecommendationId = pBotRecommendationId_,
+        encryptionSetting = pEncryptionSetting_
+      }
+
+-- | The unique identifier of the bot containing the bot recommendation to be
+-- updated.
+updateBotRecommendation_botId :: Lens.Lens' UpdateBotRecommendation Prelude.Text
+updateBotRecommendation_botId = Lens.lens (\UpdateBotRecommendation' {botId} -> botId) (\s@UpdateBotRecommendation' {} a -> s {botId = a} :: UpdateBotRecommendation)
+
+-- | The version of the bot containing the bot recommendation to be updated.
+updateBotRecommendation_botVersion :: Lens.Lens' UpdateBotRecommendation Prelude.Text
+updateBotRecommendation_botVersion = Lens.lens (\UpdateBotRecommendation' {botVersion} -> botVersion) (\s@UpdateBotRecommendation' {} a -> s {botVersion = a} :: UpdateBotRecommendation)
+
+-- | The identifier of the language and locale of the bot recommendation to
+-- update. The string must match one of the supported locales. For more
+-- information, see
+-- <https://docs.aws.amazon.com/lexv2/latest/dg/how-languages.html Supported languages>
+updateBotRecommendation_localeId :: Lens.Lens' UpdateBotRecommendation Prelude.Text
+updateBotRecommendation_localeId = Lens.lens (\UpdateBotRecommendation' {localeId} -> localeId) (\s@UpdateBotRecommendation' {} a -> s {localeId = a} :: UpdateBotRecommendation)
+
+-- | The unique identifier of the bot recommendation to be updated.
+updateBotRecommendation_botRecommendationId :: Lens.Lens' UpdateBotRecommendation Prelude.Text
+updateBotRecommendation_botRecommendationId = Lens.lens (\UpdateBotRecommendation' {botRecommendationId} -> botRecommendationId) (\s@UpdateBotRecommendation' {} a -> s {botRecommendationId = a} :: UpdateBotRecommendation)
+
+-- | The object representing the passwords that will be used to encrypt the
+-- data related to the bot recommendation results, as well as the KMS key
+-- ARN used to encrypt the associated metadata.
+updateBotRecommendation_encryptionSetting :: Lens.Lens' UpdateBotRecommendation EncryptionSetting
+updateBotRecommendation_encryptionSetting = Lens.lens (\UpdateBotRecommendation' {encryptionSetting} -> encryptionSetting) (\s@UpdateBotRecommendation' {} a -> s {encryptionSetting = a} :: UpdateBotRecommendation)
+
+instance Core.AWSRequest UpdateBotRecommendation where
+  type
+    AWSResponse UpdateBotRecommendation =
+      UpdateBotRecommendationResponse
+  request overrides =
+    Request.putJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          UpdateBotRecommendationResponse'
+            Prelude.<$> (x Data..?> "botId")
+            Prelude.<*> (x Data..?> "botRecommendationId")
+            Prelude.<*> (x Data..?> "botRecommendationStatus")
+            Prelude.<*> (x Data..?> "botVersion")
+            Prelude.<*> (x Data..?> "creationDateTime")
+            Prelude.<*> (x Data..?> "encryptionSetting")
+            Prelude.<*> (x Data..?> "lastUpdatedDateTime")
+            Prelude.<*> (x Data..?> "localeId")
+            Prelude.<*> (x Data..?> "transcriptSourceSetting")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UpdateBotRecommendation where
+  hashWithSalt _salt UpdateBotRecommendation' {..} =
+    _salt
+      `Prelude.hashWithSalt` botId
+      `Prelude.hashWithSalt` botVersion
+      `Prelude.hashWithSalt` localeId
+      `Prelude.hashWithSalt` botRecommendationId
+      `Prelude.hashWithSalt` encryptionSetting
+
+instance Prelude.NFData UpdateBotRecommendation where
+  rnf UpdateBotRecommendation' {..} =
+    Prelude.rnf botId
+      `Prelude.seq` Prelude.rnf botVersion
+      `Prelude.seq` Prelude.rnf localeId
+      `Prelude.seq` Prelude.rnf botRecommendationId
+      `Prelude.seq` Prelude.rnf encryptionSetting
+
+instance Data.ToHeaders UpdateBotRecommendation where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateBotRecommendation where
+  toJSON UpdateBotRecommendation' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ("encryptionSetting" Data..= encryptionSetting)
+          ]
+      )
+
+instance Data.ToPath UpdateBotRecommendation where
+  toPath UpdateBotRecommendation' {..} =
+    Prelude.mconcat
+      [ "/bots/",
+        Data.toBS botId,
+        "/botversions/",
+        Data.toBS botVersion,
+        "/botlocales/",
+        Data.toBS localeId,
+        "/botrecommendations/",
+        Data.toBS botRecommendationId,
+        "/"
+      ]
+
+instance Data.ToQuery UpdateBotRecommendation where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateBotRecommendationResponse' smart constructor.
+data UpdateBotRecommendationResponse = UpdateBotRecommendationResponse'
+  { -- | The unique identifier of the bot containing the bot recommendation that
+    -- has been updated.
+    botId :: Prelude.Maybe Prelude.Text,
+    -- | The unique identifier of the bot recommendation to be updated.
+    botRecommendationId :: Prelude.Maybe Prelude.Text,
+    -- | The status of the bot recommendation.
+    --
+    -- If the status is Failed, then the reasons for the failure are listed in
+    -- the failureReasons field.
+    botRecommendationStatus :: Prelude.Maybe BotRecommendationStatus,
+    -- | The version of the bot containing the bot recommendation that has been
+    -- updated.
+    botVersion :: Prelude.Maybe Prelude.Text,
+    -- | A timestamp of the date and time that the bot recommendation was
+    -- created.
+    creationDateTime :: Prelude.Maybe Data.POSIX,
+    -- | The object representing the passwords that were used to encrypt the data
+    -- related to the bot recommendation results, as well as the KMS key ARN
+    -- used to encrypt the associated metadata.
+    encryptionSetting :: Prelude.Maybe EncryptionSetting,
+    -- | A timestamp of the date and time that the bot recommendation was last
+    -- updated.
+    lastUpdatedDateTime :: Prelude.Maybe Data.POSIX,
+    -- | The identifier of the language and locale of the bot recommendation to
+    -- update. The string must match one of the supported locales. For more
+    -- information, see
+    -- <https://docs.aws.amazon.com/lexv2/latest/dg/how-languages.html Supported languages>
+    localeId :: Prelude.Maybe Prelude.Text,
+    -- | The object representing the Amazon S3 bucket containing the transcript,
+    -- as well as the associated metadata.
+    transcriptSourceSetting :: Prelude.Maybe TranscriptSourceSetting,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateBotRecommendationResponse' 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:
+--
+-- 'botId', 'updateBotRecommendationResponse_botId' - The unique identifier of the bot containing the bot recommendation that
+-- has been updated.
+--
+-- 'botRecommendationId', 'updateBotRecommendationResponse_botRecommendationId' - The unique identifier of the bot recommendation to be updated.
+--
+-- 'botRecommendationStatus', 'updateBotRecommendationResponse_botRecommendationStatus' - The status of the bot recommendation.
+--
+-- If the status is Failed, then the reasons for the failure are listed in
+-- the failureReasons field.
+--
+-- 'botVersion', 'updateBotRecommendationResponse_botVersion' - The version of the bot containing the bot recommendation that has been
+-- updated.
+--
+-- 'creationDateTime', 'updateBotRecommendationResponse_creationDateTime' - A timestamp of the date and time that the bot recommendation was
+-- created.
+--
+-- 'encryptionSetting', 'updateBotRecommendationResponse_encryptionSetting' - The object representing the passwords that were used to encrypt the data
+-- related to the bot recommendation results, as well as the KMS key ARN
+-- used to encrypt the associated metadata.
+--
+-- 'lastUpdatedDateTime', 'updateBotRecommendationResponse_lastUpdatedDateTime' - A timestamp of the date and time that the bot recommendation was last
+-- updated.
+--
+-- 'localeId', 'updateBotRecommendationResponse_localeId' - The identifier of the language and locale of the bot recommendation to
+-- update. The string must match one of the supported locales. For more
+-- information, see
+-- <https://docs.aws.amazon.com/lexv2/latest/dg/how-languages.html Supported languages>
+--
+-- 'transcriptSourceSetting', 'updateBotRecommendationResponse_transcriptSourceSetting' - The object representing the Amazon S3 bucket containing the transcript,
+-- as well as the associated metadata.
+--
+-- 'httpStatus', 'updateBotRecommendationResponse_httpStatus' - The response's http status code.
+newUpdateBotRecommendationResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UpdateBotRecommendationResponse
+newUpdateBotRecommendationResponse pHttpStatus_ =
+  UpdateBotRecommendationResponse'
+    { botId =
+        Prelude.Nothing,
+      botRecommendationId = Prelude.Nothing,
+      botRecommendationStatus = Prelude.Nothing,
+      botVersion = Prelude.Nothing,
+      creationDateTime = Prelude.Nothing,
+      encryptionSetting = Prelude.Nothing,
+      lastUpdatedDateTime = Prelude.Nothing,
+      localeId = Prelude.Nothing,
+      transcriptSourceSetting = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The unique identifier of the bot containing the bot recommendation that
+-- has been updated.
+updateBotRecommendationResponse_botId :: Lens.Lens' UpdateBotRecommendationResponse (Prelude.Maybe Prelude.Text)
+updateBotRecommendationResponse_botId = Lens.lens (\UpdateBotRecommendationResponse' {botId} -> botId) (\s@UpdateBotRecommendationResponse' {} a -> s {botId = a} :: UpdateBotRecommendationResponse)
+
+-- | The unique identifier of the bot recommendation to be updated.
+updateBotRecommendationResponse_botRecommendationId :: Lens.Lens' UpdateBotRecommendationResponse (Prelude.Maybe Prelude.Text)
+updateBotRecommendationResponse_botRecommendationId = Lens.lens (\UpdateBotRecommendationResponse' {botRecommendationId} -> botRecommendationId) (\s@UpdateBotRecommendationResponse' {} a -> s {botRecommendationId = a} :: UpdateBotRecommendationResponse)
+
+-- | The status of the bot recommendation.
+--
+-- If the status is Failed, then the reasons for the failure are listed in
+-- the failureReasons field.
+updateBotRecommendationResponse_botRecommendationStatus :: Lens.Lens' UpdateBotRecommendationResponse (Prelude.Maybe BotRecommendationStatus)
+updateBotRecommendationResponse_botRecommendationStatus = Lens.lens (\UpdateBotRecommendationResponse' {botRecommendationStatus} -> botRecommendationStatus) (\s@UpdateBotRecommendationResponse' {} a -> s {botRecommendationStatus = a} :: UpdateBotRecommendationResponse)
+
+-- | The version of the bot containing the bot recommendation that has been
+-- updated.
+updateBotRecommendationResponse_botVersion :: Lens.Lens' UpdateBotRecommendationResponse (Prelude.Maybe Prelude.Text)
+updateBotRecommendationResponse_botVersion = Lens.lens (\UpdateBotRecommendationResponse' {botVersion} -> botVersion) (\s@UpdateBotRecommendationResponse' {} a -> s {botVersion = a} :: UpdateBotRecommendationResponse)
+
+-- | A timestamp of the date and time that the bot recommendation was
+-- created.
+updateBotRecommendationResponse_creationDateTime :: Lens.Lens' UpdateBotRecommendationResponse (Prelude.Maybe Prelude.UTCTime)
+updateBotRecommendationResponse_creationDateTime = Lens.lens (\UpdateBotRecommendationResponse' {creationDateTime} -> creationDateTime) (\s@UpdateBotRecommendationResponse' {} a -> s {creationDateTime = a} :: UpdateBotRecommendationResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The object representing the passwords that were used to encrypt the data
+-- related to the bot recommendation results, as well as the KMS key ARN
+-- used to encrypt the associated metadata.
+updateBotRecommendationResponse_encryptionSetting :: Lens.Lens' UpdateBotRecommendationResponse (Prelude.Maybe EncryptionSetting)
+updateBotRecommendationResponse_encryptionSetting = Lens.lens (\UpdateBotRecommendationResponse' {encryptionSetting} -> encryptionSetting) (\s@UpdateBotRecommendationResponse' {} a -> s {encryptionSetting = a} :: UpdateBotRecommendationResponse)
+
+-- | A timestamp of the date and time that the bot recommendation was last
+-- updated.
+updateBotRecommendationResponse_lastUpdatedDateTime :: Lens.Lens' UpdateBotRecommendationResponse (Prelude.Maybe Prelude.UTCTime)
+updateBotRecommendationResponse_lastUpdatedDateTime = Lens.lens (\UpdateBotRecommendationResponse' {lastUpdatedDateTime} -> lastUpdatedDateTime) (\s@UpdateBotRecommendationResponse' {} a -> s {lastUpdatedDateTime = a} :: UpdateBotRecommendationResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The identifier of the language and locale of the bot recommendation to
+-- update. The string must match one of the supported locales. For more
+-- information, see
+-- <https://docs.aws.amazon.com/lexv2/latest/dg/how-languages.html Supported languages>
+updateBotRecommendationResponse_localeId :: Lens.Lens' UpdateBotRecommendationResponse (Prelude.Maybe Prelude.Text)
+updateBotRecommendationResponse_localeId = Lens.lens (\UpdateBotRecommendationResponse' {localeId} -> localeId) (\s@UpdateBotRecommendationResponse' {} a -> s {localeId = a} :: UpdateBotRecommendationResponse)
+
+-- | The object representing the Amazon S3 bucket containing the transcript,
+-- as well as the associated metadata.
+updateBotRecommendationResponse_transcriptSourceSetting :: Lens.Lens' UpdateBotRecommendationResponse (Prelude.Maybe TranscriptSourceSetting)
+updateBotRecommendationResponse_transcriptSourceSetting = Lens.lens (\UpdateBotRecommendationResponse' {transcriptSourceSetting} -> transcriptSourceSetting) (\s@UpdateBotRecommendationResponse' {} a -> s {transcriptSourceSetting = a} :: UpdateBotRecommendationResponse)
+
+-- | The response's http status code.
+updateBotRecommendationResponse_httpStatus :: Lens.Lens' UpdateBotRecommendationResponse Prelude.Int
+updateBotRecommendationResponse_httpStatus = Lens.lens (\UpdateBotRecommendationResponse' {httpStatus} -> httpStatus) (\s@UpdateBotRecommendationResponse' {} a -> s {httpStatus = a} :: UpdateBotRecommendationResponse)
+
+instance
+  Prelude.NFData
+    UpdateBotRecommendationResponse
+  where
+  rnf UpdateBotRecommendationResponse' {..} =
+    Prelude.rnf botId
+      `Prelude.seq` Prelude.rnf botRecommendationId
+      `Prelude.seq` Prelude.rnf botRecommendationStatus
+      `Prelude.seq` Prelude.rnf botVersion
+      `Prelude.seq` Prelude.rnf creationDateTime
+      `Prelude.seq` Prelude.rnf encryptionSetting
+      `Prelude.seq` Prelude.rnf lastUpdatedDateTime
+      `Prelude.seq` Prelude.rnf localeId
+      `Prelude.seq` Prelude.rnf transcriptSourceSetting
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/LexV2Models/UpdateExport.hs b/gen/Amazonka/LexV2Models/UpdateExport.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/UpdateExport.hs
@@ -0,0 +1,258 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.LexV2Models.UpdateExport
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Updates the password used to protect an export zip archive.
+--
+-- The password is not required. If you don\'t supply a password, Amazon
+-- Lex generates a zip file that is not protected by a password. This is
+-- the archive that is available at the pre-signed S3 URL provided by the
+-- <https://docs.aws.amazon.com/lexv2/latest/dg/API_DescribeExport.html DescribeExport>
+-- operation.
+module Amazonka.LexV2Models.UpdateExport
+  ( -- * Creating a Request
+    UpdateExport (..),
+    newUpdateExport,
+
+    -- * Request Lenses
+    updateExport_filePassword,
+    updateExport_exportId,
+
+    -- * Destructuring the Response
+    UpdateExportResponse (..),
+    newUpdateExportResponse,
+
+    -- * Response Lenses
+    updateExportResponse_creationDateTime,
+    updateExportResponse_exportId,
+    updateExportResponse_exportStatus,
+    updateExportResponse_fileFormat,
+    updateExportResponse_lastUpdatedDateTime,
+    updateExportResponse_resourceSpecification,
+    updateExportResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LexV2Models.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUpdateExport' smart constructor.
+data UpdateExport = UpdateExport'
+  { -- | The new password to use to encrypt the export zip archive.
+    filePassword :: Prelude.Maybe (Data.Sensitive Prelude.Text),
+    -- | The unique identifier Amazon Lex assigned to the export.
+    exportId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateExport' 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:
+--
+-- 'filePassword', 'updateExport_filePassword' - The new password to use to encrypt the export zip archive.
+--
+-- 'exportId', 'updateExport_exportId' - The unique identifier Amazon Lex assigned to the export.
+newUpdateExport ::
+  -- | 'exportId'
+  Prelude.Text ->
+  UpdateExport
+newUpdateExport pExportId_ =
+  UpdateExport'
+    { filePassword = Prelude.Nothing,
+      exportId = pExportId_
+    }
+
+-- | The new password to use to encrypt the export zip archive.
+updateExport_filePassword :: Lens.Lens' UpdateExport (Prelude.Maybe Prelude.Text)
+updateExport_filePassword = Lens.lens (\UpdateExport' {filePassword} -> filePassword) (\s@UpdateExport' {} a -> s {filePassword = a} :: UpdateExport) Prelude.. Lens.mapping Data._Sensitive
+
+-- | The unique identifier Amazon Lex assigned to the export.
+updateExport_exportId :: Lens.Lens' UpdateExport Prelude.Text
+updateExport_exportId = Lens.lens (\UpdateExport' {exportId} -> exportId) (\s@UpdateExport' {} a -> s {exportId = a} :: UpdateExport)
+
+instance Core.AWSRequest UpdateExport where
+  type AWSResponse UpdateExport = UpdateExportResponse
+  request overrides =
+    Request.putJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          UpdateExportResponse'
+            Prelude.<$> (x Data..?> "creationDateTime")
+            Prelude.<*> (x Data..?> "exportId")
+            Prelude.<*> (x Data..?> "exportStatus")
+            Prelude.<*> (x Data..?> "fileFormat")
+            Prelude.<*> (x Data..?> "lastUpdatedDateTime")
+            Prelude.<*> (x Data..?> "resourceSpecification")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UpdateExport where
+  hashWithSalt _salt UpdateExport' {..} =
+    _salt
+      `Prelude.hashWithSalt` filePassword
+      `Prelude.hashWithSalt` exportId
+
+instance Prelude.NFData UpdateExport where
+  rnf UpdateExport' {..} =
+    Prelude.rnf filePassword
+      `Prelude.seq` Prelude.rnf exportId
+
+instance Data.ToHeaders UpdateExport where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateExport where
+  toJSON UpdateExport' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [("filePassword" Data..=) Prelude.<$> filePassword]
+      )
+
+instance Data.ToPath UpdateExport where
+  toPath UpdateExport' {..} =
+    Prelude.mconcat
+      ["/exports/", Data.toBS exportId, "/"]
+
+instance Data.ToQuery UpdateExport where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateExportResponse' smart constructor.
+data UpdateExportResponse = UpdateExportResponse'
+  { -- | The date and time that the export was created.
+    creationDateTime :: Prelude.Maybe Data.POSIX,
+    -- | The unique identifier Amazon Lex assigned to the export.
+    exportId :: Prelude.Maybe Prelude.Text,
+    -- | The status of the export. When the status is @Completed@ the export
+    -- archive is available for download.
+    exportStatus :: Prelude.Maybe ExportStatus,
+    -- | The file format used for the files that define the resource. The @TSV@
+    -- format is required to export a custom vocabulary only; otherwise use
+    -- @LexJson@ format.
+    fileFormat :: Prelude.Maybe ImportExportFileFormat,
+    -- | The date and time that the export was last updated.
+    lastUpdatedDateTime :: Prelude.Maybe Data.POSIX,
+    -- | A description of the type of resource that was exported, either a bot or
+    -- a bot locale.
+    resourceSpecification :: Prelude.Maybe ExportResourceSpecification,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateExportResponse' 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:
+--
+-- 'creationDateTime', 'updateExportResponse_creationDateTime' - The date and time that the export was created.
+--
+-- 'exportId', 'updateExportResponse_exportId' - The unique identifier Amazon Lex assigned to the export.
+--
+-- 'exportStatus', 'updateExportResponse_exportStatus' - The status of the export. When the status is @Completed@ the export
+-- archive is available for download.
+--
+-- 'fileFormat', 'updateExportResponse_fileFormat' - The file format used for the files that define the resource. The @TSV@
+-- format is required to export a custom vocabulary only; otherwise use
+-- @LexJson@ format.
+--
+-- 'lastUpdatedDateTime', 'updateExportResponse_lastUpdatedDateTime' - The date and time that the export was last updated.
+--
+-- 'resourceSpecification', 'updateExportResponse_resourceSpecification' - A description of the type of resource that was exported, either a bot or
+-- a bot locale.
+--
+-- 'httpStatus', 'updateExportResponse_httpStatus' - The response's http status code.
+newUpdateExportResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UpdateExportResponse
+newUpdateExportResponse pHttpStatus_ =
+  UpdateExportResponse'
+    { creationDateTime =
+        Prelude.Nothing,
+      exportId = Prelude.Nothing,
+      exportStatus = Prelude.Nothing,
+      fileFormat = Prelude.Nothing,
+      lastUpdatedDateTime = Prelude.Nothing,
+      resourceSpecification = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The date and time that the export was created.
+updateExportResponse_creationDateTime :: Lens.Lens' UpdateExportResponse (Prelude.Maybe Prelude.UTCTime)
+updateExportResponse_creationDateTime = Lens.lens (\UpdateExportResponse' {creationDateTime} -> creationDateTime) (\s@UpdateExportResponse' {} a -> s {creationDateTime = a} :: UpdateExportResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The unique identifier Amazon Lex assigned to the export.
+updateExportResponse_exportId :: Lens.Lens' UpdateExportResponse (Prelude.Maybe Prelude.Text)
+updateExportResponse_exportId = Lens.lens (\UpdateExportResponse' {exportId} -> exportId) (\s@UpdateExportResponse' {} a -> s {exportId = a} :: UpdateExportResponse)
+
+-- | The status of the export. When the status is @Completed@ the export
+-- archive is available for download.
+updateExportResponse_exportStatus :: Lens.Lens' UpdateExportResponse (Prelude.Maybe ExportStatus)
+updateExportResponse_exportStatus = Lens.lens (\UpdateExportResponse' {exportStatus} -> exportStatus) (\s@UpdateExportResponse' {} a -> s {exportStatus = a} :: UpdateExportResponse)
+
+-- | The file format used for the files that define the resource. The @TSV@
+-- format is required to export a custom vocabulary only; otherwise use
+-- @LexJson@ format.
+updateExportResponse_fileFormat :: Lens.Lens' UpdateExportResponse (Prelude.Maybe ImportExportFileFormat)
+updateExportResponse_fileFormat = Lens.lens (\UpdateExportResponse' {fileFormat} -> fileFormat) (\s@UpdateExportResponse' {} a -> s {fileFormat = a} :: UpdateExportResponse)
+
+-- | The date and time that the export was last updated.
+updateExportResponse_lastUpdatedDateTime :: Lens.Lens' UpdateExportResponse (Prelude.Maybe Prelude.UTCTime)
+updateExportResponse_lastUpdatedDateTime = Lens.lens (\UpdateExportResponse' {lastUpdatedDateTime} -> lastUpdatedDateTime) (\s@UpdateExportResponse' {} a -> s {lastUpdatedDateTime = a} :: UpdateExportResponse) Prelude.. Lens.mapping Data._Time
+
+-- | A description of the type of resource that was exported, either a bot or
+-- a bot locale.
+updateExportResponse_resourceSpecification :: Lens.Lens' UpdateExportResponse (Prelude.Maybe ExportResourceSpecification)
+updateExportResponse_resourceSpecification = Lens.lens (\UpdateExportResponse' {resourceSpecification} -> resourceSpecification) (\s@UpdateExportResponse' {} a -> s {resourceSpecification = a} :: UpdateExportResponse)
+
+-- | The response's http status code.
+updateExportResponse_httpStatus :: Lens.Lens' UpdateExportResponse Prelude.Int
+updateExportResponse_httpStatus = Lens.lens (\UpdateExportResponse' {httpStatus} -> httpStatus) (\s@UpdateExportResponse' {} a -> s {httpStatus = a} :: UpdateExportResponse)
+
+instance Prelude.NFData UpdateExportResponse where
+  rnf UpdateExportResponse' {..} =
+    Prelude.rnf creationDateTime
+      `Prelude.seq` Prelude.rnf exportId
+      `Prelude.seq` Prelude.rnf exportStatus
+      `Prelude.seq` Prelude.rnf fileFormat
+      `Prelude.seq` Prelude.rnf lastUpdatedDateTime
+      `Prelude.seq` Prelude.rnf resourceSpecification
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/LexV2Models/UpdateIntent.hs b/gen/Amazonka/LexV2Models/UpdateIntent.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/UpdateIntent.hs
@@ -0,0 +1,676 @@
+{-# 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.LexV2Models.UpdateIntent
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Updates the settings for an intent.
+module Amazonka.LexV2Models.UpdateIntent
+  ( -- * Creating a Request
+    UpdateIntent (..),
+    newUpdateIntent,
+
+    -- * Request Lenses
+    updateIntent_description,
+    updateIntent_dialogCodeHook,
+    updateIntent_fulfillmentCodeHook,
+    updateIntent_initialResponseSetting,
+    updateIntent_inputContexts,
+    updateIntent_intentClosingSetting,
+    updateIntent_intentConfirmationSetting,
+    updateIntent_kendraConfiguration,
+    updateIntent_outputContexts,
+    updateIntent_parentIntentSignature,
+    updateIntent_sampleUtterances,
+    updateIntent_slotPriorities,
+    updateIntent_intentId,
+    updateIntent_intentName,
+    updateIntent_botId,
+    updateIntent_botVersion,
+    updateIntent_localeId,
+
+    -- * Destructuring the Response
+    UpdateIntentResponse (..),
+    newUpdateIntentResponse,
+
+    -- * Response Lenses
+    updateIntentResponse_botId,
+    updateIntentResponse_botVersion,
+    updateIntentResponse_creationDateTime,
+    updateIntentResponse_description,
+    updateIntentResponse_dialogCodeHook,
+    updateIntentResponse_fulfillmentCodeHook,
+    updateIntentResponse_initialResponseSetting,
+    updateIntentResponse_inputContexts,
+    updateIntentResponse_intentClosingSetting,
+    updateIntentResponse_intentConfirmationSetting,
+    updateIntentResponse_intentId,
+    updateIntentResponse_intentName,
+    updateIntentResponse_kendraConfiguration,
+    updateIntentResponse_lastUpdatedDateTime,
+    updateIntentResponse_localeId,
+    updateIntentResponse_outputContexts,
+    updateIntentResponse_parentIntentSignature,
+    updateIntentResponse_sampleUtterances,
+    updateIntentResponse_slotPriorities,
+    updateIntentResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LexV2Models.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUpdateIntent' smart constructor.
+data UpdateIntent = UpdateIntent'
+  { -- | The new description of the intent.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The new Lambda function to use between each turn of the conversation
+    -- with the bot.
+    dialogCodeHook :: Prelude.Maybe DialogCodeHookSettings,
+    -- | The new Lambda function to call when all of the intents required slots
+    -- are provided and the intent is ready for fulfillment.
+    fulfillmentCodeHook :: Prelude.Maybe FulfillmentCodeHookSettings,
+    initialResponseSetting :: Prelude.Maybe InitialResponseSetting,
+    -- | A new list of contexts that must be active in order for Amazon Lex to
+    -- consider the intent.
+    inputContexts :: Prelude.Maybe [InputContext],
+    -- | The new response that Amazon Lex sends the user when the intent is
+    -- closed.
+    intentClosingSetting :: Prelude.Maybe IntentClosingSetting,
+    -- | New prompts that Amazon Lex sends to the user to confirm the completion
+    -- of an intent.
+    intentConfirmationSetting :: Prelude.Maybe IntentConfirmationSetting,
+    -- | New configuration settings for connecting to an Amazon Kendra index.
+    kendraConfiguration :: Prelude.Maybe KendraConfiguration,
+    -- | A new list of contexts that Amazon Lex activates when the intent is
+    -- fulfilled.
+    outputContexts :: Prelude.Maybe [OutputContext],
+    -- | The signature of the new built-in intent to use as the parent of this
+    -- intent.
+    parentIntentSignature :: Prelude.Maybe Prelude.Text,
+    -- | New utterances used to invoke the intent.
+    sampleUtterances :: Prelude.Maybe [SampleUtterance],
+    -- | A new list of slots and their priorities that are contained by the
+    -- intent.
+    slotPriorities :: Prelude.Maybe [SlotPriority],
+    -- | The unique identifier of the intent to update.
+    intentId :: Prelude.Text,
+    -- | The new name for the intent.
+    intentName :: Prelude.Text,
+    -- | The identifier of the bot that contains the intent.
+    botId :: Prelude.Text,
+    -- | The version of the bot that contains the intent. Must be @DRAFT@.
+    botVersion :: Prelude.Text,
+    -- | The identifier of the language and locale where this intent is used. The
+    -- string must match one of the supported locales. For more information,
+    -- see
+    -- <https://docs.aws.amazon.com/lexv2/latest/dg/how-languages.html Supported languages>.
+    localeId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateIntent' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'description', 'updateIntent_description' - The new description of the intent.
+--
+-- 'dialogCodeHook', 'updateIntent_dialogCodeHook' - The new Lambda function to use between each turn of the conversation
+-- with the bot.
+--
+-- 'fulfillmentCodeHook', 'updateIntent_fulfillmentCodeHook' - The new Lambda function to call when all of the intents required slots
+-- are provided and the intent is ready for fulfillment.
+--
+-- 'initialResponseSetting', 'updateIntent_initialResponseSetting' -
+--
+-- 'inputContexts', 'updateIntent_inputContexts' - A new list of contexts that must be active in order for Amazon Lex to
+-- consider the intent.
+--
+-- 'intentClosingSetting', 'updateIntent_intentClosingSetting' - The new response that Amazon Lex sends the user when the intent is
+-- closed.
+--
+-- 'intentConfirmationSetting', 'updateIntent_intentConfirmationSetting' - New prompts that Amazon Lex sends to the user to confirm the completion
+-- of an intent.
+--
+-- 'kendraConfiguration', 'updateIntent_kendraConfiguration' - New configuration settings for connecting to an Amazon Kendra index.
+--
+-- 'outputContexts', 'updateIntent_outputContexts' - A new list of contexts that Amazon Lex activates when the intent is
+-- fulfilled.
+--
+-- 'parentIntentSignature', 'updateIntent_parentIntentSignature' - The signature of the new built-in intent to use as the parent of this
+-- intent.
+--
+-- 'sampleUtterances', 'updateIntent_sampleUtterances' - New utterances used to invoke the intent.
+--
+-- 'slotPriorities', 'updateIntent_slotPriorities' - A new list of slots and their priorities that are contained by the
+-- intent.
+--
+-- 'intentId', 'updateIntent_intentId' - The unique identifier of the intent to update.
+--
+-- 'intentName', 'updateIntent_intentName' - The new name for the intent.
+--
+-- 'botId', 'updateIntent_botId' - The identifier of the bot that contains the intent.
+--
+-- 'botVersion', 'updateIntent_botVersion' - The version of the bot that contains the intent. Must be @DRAFT@.
+--
+-- 'localeId', 'updateIntent_localeId' - The identifier of the language and locale where this intent is used. The
+-- string must match one of the supported locales. For more information,
+-- see
+-- <https://docs.aws.amazon.com/lexv2/latest/dg/how-languages.html Supported languages>.
+newUpdateIntent ::
+  -- | 'intentId'
+  Prelude.Text ->
+  -- | 'intentName'
+  Prelude.Text ->
+  -- | 'botId'
+  Prelude.Text ->
+  -- | 'botVersion'
+  Prelude.Text ->
+  -- | 'localeId'
+  Prelude.Text ->
+  UpdateIntent
+newUpdateIntent
+  pIntentId_
+  pIntentName_
+  pBotId_
+  pBotVersion_
+  pLocaleId_ =
+    UpdateIntent'
+      { description = Prelude.Nothing,
+        dialogCodeHook = Prelude.Nothing,
+        fulfillmentCodeHook = Prelude.Nothing,
+        initialResponseSetting = Prelude.Nothing,
+        inputContexts = Prelude.Nothing,
+        intentClosingSetting = Prelude.Nothing,
+        intentConfirmationSetting = Prelude.Nothing,
+        kendraConfiguration = Prelude.Nothing,
+        outputContexts = Prelude.Nothing,
+        parentIntentSignature = Prelude.Nothing,
+        sampleUtterances = Prelude.Nothing,
+        slotPriorities = Prelude.Nothing,
+        intentId = pIntentId_,
+        intentName = pIntentName_,
+        botId = pBotId_,
+        botVersion = pBotVersion_,
+        localeId = pLocaleId_
+      }
+
+-- | The new description of the intent.
+updateIntent_description :: Lens.Lens' UpdateIntent (Prelude.Maybe Prelude.Text)
+updateIntent_description = Lens.lens (\UpdateIntent' {description} -> description) (\s@UpdateIntent' {} a -> s {description = a} :: UpdateIntent)
+
+-- | The new Lambda function to use between each turn of the conversation
+-- with the bot.
+updateIntent_dialogCodeHook :: Lens.Lens' UpdateIntent (Prelude.Maybe DialogCodeHookSettings)
+updateIntent_dialogCodeHook = Lens.lens (\UpdateIntent' {dialogCodeHook} -> dialogCodeHook) (\s@UpdateIntent' {} a -> s {dialogCodeHook = a} :: UpdateIntent)
+
+-- | The new Lambda function to call when all of the intents required slots
+-- are provided and the intent is ready for fulfillment.
+updateIntent_fulfillmentCodeHook :: Lens.Lens' UpdateIntent (Prelude.Maybe FulfillmentCodeHookSettings)
+updateIntent_fulfillmentCodeHook = Lens.lens (\UpdateIntent' {fulfillmentCodeHook} -> fulfillmentCodeHook) (\s@UpdateIntent' {} a -> s {fulfillmentCodeHook = a} :: UpdateIntent)
+
+updateIntent_initialResponseSetting :: Lens.Lens' UpdateIntent (Prelude.Maybe InitialResponseSetting)
+updateIntent_initialResponseSetting = Lens.lens (\UpdateIntent' {initialResponseSetting} -> initialResponseSetting) (\s@UpdateIntent' {} a -> s {initialResponseSetting = a} :: UpdateIntent)
+
+-- | A new list of contexts that must be active in order for Amazon Lex to
+-- consider the intent.
+updateIntent_inputContexts :: Lens.Lens' UpdateIntent (Prelude.Maybe [InputContext])
+updateIntent_inputContexts = Lens.lens (\UpdateIntent' {inputContexts} -> inputContexts) (\s@UpdateIntent' {} a -> s {inputContexts = a} :: UpdateIntent) Prelude.. Lens.mapping Lens.coerced
+
+-- | The new response that Amazon Lex sends the user when the intent is
+-- closed.
+updateIntent_intentClosingSetting :: Lens.Lens' UpdateIntent (Prelude.Maybe IntentClosingSetting)
+updateIntent_intentClosingSetting = Lens.lens (\UpdateIntent' {intentClosingSetting} -> intentClosingSetting) (\s@UpdateIntent' {} a -> s {intentClosingSetting = a} :: UpdateIntent)
+
+-- | New prompts that Amazon Lex sends to the user to confirm the completion
+-- of an intent.
+updateIntent_intentConfirmationSetting :: Lens.Lens' UpdateIntent (Prelude.Maybe IntentConfirmationSetting)
+updateIntent_intentConfirmationSetting = Lens.lens (\UpdateIntent' {intentConfirmationSetting} -> intentConfirmationSetting) (\s@UpdateIntent' {} a -> s {intentConfirmationSetting = a} :: UpdateIntent)
+
+-- | New configuration settings for connecting to an Amazon Kendra index.
+updateIntent_kendraConfiguration :: Lens.Lens' UpdateIntent (Prelude.Maybe KendraConfiguration)
+updateIntent_kendraConfiguration = Lens.lens (\UpdateIntent' {kendraConfiguration} -> kendraConfiguration) (\s@UpdateIntent' {} a -> s {kendraConfiguration = a} :: UpdateIntent)
+
+-- | A new list of contexts that Amazon Lex activates when the intent is
+-- fulfilled.
+updateIntent_outputContexts :: Lens.Lens' UpdateIntent (Prelude.Maybe [OutputContext])
+updateIntent_outputContexts = Lens.lens (\UpdateIntent' {outputContexts} -> outputContexts) (\s@UpdateIntent' {} a -> s {outputContexts = a} :: UpdateIntent) Prelude.. Lens.mapping Lens.coerced
+
+-- | The signature of the new built-in intent to use as the parent of this
+-- intent.
+updateIntent_parentIntentSignature :: Lens.Lens' UpdateIntent (Prelude.Maybe Prelude.Text)
+updateIntent_parentIntentSignature = Lens.lens (\UpdateIntent' {parentIntentSignature} -> parentIntentSignature) (\s@UpdateIntent' {} a -> s {parentIntentSignature = a} :: UpdateIntent)
+
+-- | New utterances used to invoke the intent.
+updateIntent_sampleUtterances :: Lens.Lens' UpdateIntent (Prelude.Maybe [SampleUtterance])
+updateIntent_sampleUtterances = Lens.lens (\UpdateIntent' {sampleUtterances} -> sampleUtterances) (\s@UpdateIntent' {} a -> s {sampleUtterances = a} :: UpdateIntent) Prelude.. Lens.mapping Lens.coerced
+
+-- | A new list of slots and their priorities that are contained by the
+-- intent.
+updateIntent_slotPriorities :: Lens.Lens' UpdateIntent (Prelude.Maybe [SlotPriority])
+updateIntent_slotPriorities = Lens.lens (\UpdateIntent' {slotPriorities} -> slotPriorities) (\s@UpdateIntent' {} a -> s {slotPriorities = a} :: UpdateIntent) Prelude.. Lens.mapping Lens.coerced
+
+-- | The unique identifier of the intent to update.
+updateIntent_intentId :: Lens.Lens' UpdateIntent Prelude.Text
+updateIntent_intentId = Lens.lens (\UpdateIntent' {intentId} -> intentId) (\s@UpdateIntent' {} a -> s {intentId = a} :: UpdateIntent)
+
+-- | The new name for the intent.
+updateIntent_intentName :: Lens.Lens' UpdateIntent Prelude.Text
+updateIntent_intentName = Lens.lens (\UpdateIntent' {intentName} -> intentName) (\s@UpdateIntent' {} a -> s {intentName = a} :: UpdateIntent)
+
+-- | The identifier of the bot that contains the intent.
+updateIntent_botId :: Lens.Lens' UpdateIntent Prelude.Text
+updateIntent_botId = Lens.lens (\UpdateIntent' {botId} -> botId) (\s@UpdateIntent' {} a -> s {botId = a} :: UpdateIntent)
+
+-- | The version of the bot that contains the intent. Must be @DRAFT@.
+updateIntent_botVersion :: Lens.Lens' UpdateIntent Prelude.Text
+updateIntent_botVersion = Lens.lens (\UpdateIntent' {botVersion} -> botVersion) (\s@UpdateIntent' {} a -> s {botVersion = a} :: UpdateIntent)
+
+-- | The identifier of the language and locale where this intent is used. The
+-- string must match one of the supported locales. For more information,
+-- see
+-- <https://docs.aws.amazon.com/lexv2/latest/dg/how-languages.html Supported languages>.
+updateIntent_localeId :: Lens.Lens' UpdateIntent Prelude.Text
+updateIntent_localeId = Lens.lens (\UpdateIntent' {localeId} -> localeId) (\s@UpdateIntent' {} a -> s {localeId = a} :: UpdateIntent)
+
+instance Core.AWSRequest UpdateIntent where
+  type AWSResponse UpdateIntent = UpdateIntentResponse
+  request overrides =
+    Request.putJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          UpdateIntentResponse'
+            Prelude.<$> (x Data..?> "botId")
+            Prelude.<*> (x Data..?> "botVersion")
+            Prelude.<*> (x Data..?> "creationDateTime")
+            Prelude.<*> (x Data..?> "description")
+            Prelude.<*> (x Data..?> "dialogCodeHook")
+            Prelude.<*> (x Data..?> "fulfillmentCodeHook")
+            Prelude.<*> (x Data..?> "initialResponseSetting")
+            Prelude.<*> (x Data..?> "inputContexts" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "intentClosingSetting")
+            Prelude.<*> (x Data..?> "intentConfirmationSetting")
+            Prelude.<*> (x Data..?> "intentId")
+            Prelude.<*> (x Data..?> "intentName")
+            Prelude.<*> (x Data..?> "kendraConfiguration")
+            Prelude.<*> (x Data..?> "lastUpdatedDateTime")
+            Prelude.<*> (x Data..?> "localeId")
+            Prelude.<*> (x Data..?> "outputContexts" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "parentIntentSignature")
+            Prelude.<*> ( x
+                            Data..?> "sampleUtterances"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (x Data..?> "slotPriorities" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UpdateIntent where
+  hashWithSalt _salt UpdateIntent' {..} =
+    _salt
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` dialogCodeHook
+      `Prelude.hashWithSalt` fulfillmentCodeHook
+      `Prelude.hashWithSalt` initialResponseSetting
+      `Prelude.hashWithSalt` inputContexts
+      `Prelude.hashWithSalt` intentClosingSetting
+      `Prelude.hashWithSalt` intentConfirmationSetting
+      `Prelude.hashWithSalt` kendraConfiguration
+      `Prelude.hashWithSalt` outputContexts
+      `Prelude.hashWithSalt` parentIntentSignature
+      `Prelude.hashWithSalt` sampleUtterances
+      `Prelude.hashWithSalt` slotPriorities
+      `Prelude.hashWithSalt` intentId
+      `Prelude.hashWithSalt` intentName
+      `Prelude.hashWithSalt` botId
+      `Prelude.hashWithSalt` botVersion
+      `Prelude.hashWithSalt` localeId
+
+instance Prelude.NFData UpdateIntent where
+  rnf UpdateIntent' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf dialogCodeHook
+      `Prelude.seq` Prelude.rnf fulfillmentCodeHook
+      `Prelude.seq` Prelude.rnf initialResponseSetting
+      `Prelude.seq` Prelude.rnf inputContexts
+      `Prelude.seq` Prelude.rnf intentClosingSetting
+      `Prelude.seq` Prelude.rnf intentConfirmationSetting
+      `Prelude.seq` Prelude.rnf kendraConfiguration
+      `Prelude.seq` Prelude.rnf outputContexts
+      `Prelude.seq` Prelude.rnf parentIntentSignature
+      `Prelude.seq` Prelude.rnf sampleUtterances
+      `Prelude.seq` Prelude.rnf slotPriorities
+      `Prelude.seq` Prelude.rnf intentId
+      `Prelude.seq` Prelude.rnf intentName
+      `Prelude.seq` Prelude.rnf botId
+      `Prelude.seq` Prelude.rnf botVersion
+      `Prelude.seq` Prelude.rnf localeId
+
+instance Data.ToHeaders UpdateIntent where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateIntent where
+  toJSON UpdateIntent' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("description" Data..=) Prelude.<$> description,
+            ("dialogCodeHook" Data..=)
+              Prelude.<$> dialogCodeHook,
+            ("fulfillmentCodeHook" Data..=)
+              Prelude.<$> fulfillmentCodeHook,
+            ("initialResponseSetting" Data..=)
+              Prelude.<$> initialResponseSetting,
+            ("inputContexts" Data..=) Prelude.<$> inputContexts,
+            ("intentClosingSetting" Data..=)
+              Prelude.<$> intentClosingSetting,
+            ("intentConfirmationSetting" Data..=)
+              Prelude.<$> intentConfirmationSetting,
+            ("kendraConfiguration" Data..=)
+              Prelude.<$> kendraConfiguration,
+            ("outputContexts" Data..=)
+              Prelude.<$> outputContexts,
+            ("parentIntentSignature" Data..=)
+              Prelude.<$> parentIntentSignature,
+            ("sampleUtterances" Data..=)
+              Prelude.<$> sampleUtterances,
+            ("slotPriorities" Data..=)
+              Prelude.<$> slotPriorities,
+            Prelude.Just ("intentName" Data..= intentName)
+          ]
+      )
+
+instance Data.ToPath UpdateIntent where
+  toPath UpdateIntent' {..} =
+    Prelude.mconcat
+      [ "/bots/",
+        Data.toBS botId,
+        "/botversions/",
+        Data.toBS botVersion,
+        "/botlocales/",
+        Data.toBS localeId,
+        "/intents/",
+        Data.toBS intentId,
+        "/"
+      ]
+
+instance Data.ToQuery UpdateIntent where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateIntentResponse' smart constructor.
+data UpdateIntentResponse = UpdateIntentResponse'
+  { -- | The identifier of the bot that contains the intent.
+    botId :: Prelude.Maybe Prelude.Text,
+    -- | The version of the bot that contains the intent. Will always be @DRAFT@.
+    botVersion :: Prelude.Maybe Prelude.Text,
+    -- | A timestamp of when the intent was created.
+    creationDateTime :: Prelude.Maybe Data.POSIX,
+    -- | The updated description of the intent.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The updated Lambda function called during each turn of the conversation
+    -- with the user.
+    dialogCodeHook :: Prelude.Maybe DialogCodeHookSettings,
+    -- | The updated Lambda function called when the intent is ready for
+    -- fulfillment.
+    fulfillmentCodeHook :: Prelude.Maybe FulfillmentCodeHookSettings,
+    initialResponseSetting :: Prelude.Maybe InitialResponseSetting,
+    -- | The updated list of contexts that must be active for the intent to be
+    -- considered by Amazon Lex.
+    inputContexts :: Prelude.Maybe [InputContext],
+    -- | The updated response that Amazon Lex sends the user when the intent is
+    -- closed.
+    intentClosingSetting :: Prelude.Maybe IntentClosingSetting,
+    -- | The updated prompts that Amazon Lex sends to the user to confirm the
+    -- completion of an intent.
+    intentConfirmationSetting :: Prelude.Maybe IntentConfirmationSetting,
+    -- | The identifier of the intent that was updated.
+    intentId :: Prelude.Maybe Prelude.Text,
+    -- | The updated name of the intent.
+    intentName :: Prelude.Maybe Prelude.Text,
+    -- | The updated configuration for connecting to an Amazon Kendra index with
+    -- the @AMAZON.KendraSearchIntent@ intent.
+    kendraConfiguration :: Prelude.Maybe KendraConfiguration,
+    -- | A timestamp of the last time that the intent was modified.
+    lastUpdatedDateTime :: Prelude.Maybe Data.POSIX,
+    -- | The updated language and locale of the intent.
+    localeId :: Prelude.Maybe Prelude.Text,
+    -- | The updated list of contexts that Amazon Lex activates when the intent
+    -- is fulfilled.
+    outputContexts :: Prelude.Maybe [OutputContext],
+    -- | The updated built-in intent that is the parent of this intent.
+    parentIntentSignature :: Prelude.Maybe Prelude.Text,
+    -- | The updated list of sample utterances for the intent.
+    sampleUtterances :: Prelude.Maybe [SampleUtterance],
+    -- | The updated list of slots and their priorities that are elicited from
+    -- the user for the intent.
+    slotPriorities :: Prelude.Maybe [SlotPriority],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateIntentResponse' 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:
+--
+-- 'botId', 'updateIntentResponse_botId' - The identifier of the bot that contains the intent.
+--
+-- 'botVersion', 'updateIntentResponse_botVersion' - The version of the bot that contains the intent. Will always be @DRAFT@.
+--
+-- 'creationDateTime', 'updateIntentResponse_creationDateTime' - A timestamp of when the intent was created.
+--
+-- 'description', 'updateIntentResponse_description' - The updated description of the intent.
+--
+-- 'dialogCodeHook', 'updateIntentResponse_dialogCodeHook' - The updated Lambda function called during each turn of the conversation
+-- with the user.
+--
+-- 'fulfillmentCodeHook', 'updateIntentResponse_fulfillmentCodeHook' - The updated Lambda function called when the intent is ready for
+-- fulfillment.
+--
+-- 'initialResponseSetting', 'updateIntentResponse_initialResponseSetting' -
+--
+-- 'inputContexts', 'updateIntentResponse_inputContexts' - The updated list of contexts that must be active for the intent to be
+-- considered by Amazon Lex.
+--
+-- 'intentClosingSetting', 'updateIntentResponse_intentClosingSetting' - The updated response that Amazon Lex sends the user when the intent is
+-- closed.
+--
+-- 'intentConfirmationSetting', 'updateIntentResponse_intentConfirmationSetting' - The updated prompts that Amazon Lex sends to the user to confirm the
+-- completion of an intent.
+--
+-- 'intentId', 'updateIntentResponse_intentId' - The identifier of the intent that was updated.
+--
+-- 'intentName', 'updateIntentResponse_intentName' - The updated name of the intent.
+--
+-- 'kendraConfiguration', 'updateIntentResponse_kendraConfiguration' - The updated configuration for connecting to an Amazon Kendra index with
+-- the @AMAZON.KendraSearchIntent@ intent.
+--
+-- 'lastUpdatedDateTime', 'updateIntentResponse_lastUpdatedDateTime' - A timestamp of the last time that the intent was modified.
+--
+-- 'localeId', 'updateIntentResponse_localeId' - The updated language and locale of the intent.
+--
+-- 'outputContexts', 'updateIntentResponse_outputContexts' - The updated list of contexts that Amazon Lex activates when the intent
+-- is fulfilled.
+--
+-- 'parentIntentSignature', 'updateIntentResponse_parentIntentSignature' - The updated built-in intent that is the parent of this intent.
+--
+-- 'sampleUtterances', 'updateIntentResponse_sampleUtterances' - The updated list of sample utterances for the intent.
+--
+-- 'slotPriorities', 'updateIntentResponse_slotPriorities' - The updated list of slots and their priorities that are elicited from
+-- the user for the intent.
+--
+-- 'httpStatus', 'updateIntentResponse_httpStatus' - The response's http status code.
+newUpdateIntentResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UpdateIntentResponse
+newUpdateIntentResponse pHttpStatus_ =
+  UpdateIntentResponse'
+    { botId = Prelude.Nothing,
+      botVersion = Prelude.Nothing,
+      creationDateTime = Prelude.Nothing,
+      description = Prelude.Nothing,
+      dialogCodeHook = Prelude.Nothing,
+      fulfillmentCodeHook = Prelude.Nothing,
+      initialResponseSetting = Prelude.Nothing,
+      inputContexts = Prelude.Nothing,
+      intentClosingSetting = Prelude.Nothing,
+      intentConfirmationSetting = Prelude.Nothing,
+      intentId = Prelude.Nothing,
+      intentName = Prelude.Nothing,
+      kendraConfiguration = Prelude.Nothing,
+      lastUpdatedDateTime = Prelude.Nothing,
+      localeId = Prelude.Nothing,
+      outputContexts = Prelude.Nothing,
+      parentIntentSignature = Prelude.Nothing,
+      sampleUtterances = Prelude.Nothing,
+      slotPriorities = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The identifier of the bot that contains the intent.
+updateIntentResponse_botId :: Lens.Lens' UpdateIntentResponse (Prelude.Maybe Prelude.Text)
+updateIntentResponse_botId = Lens.lens (\UpdateIntentResponse' {botId} -> botId) (\s@UpdateIntentResponse' {} a -> s {botId = a} :: UpdateIntentResponse)
+
+-- | The version of the bot that contains the intent. Will always be @DRAFT@.
+updateIntentResponse_botVersion :: Lens.Lens' UpdateIntentResponse (Prelude.Maybe Prelude.Text)
+updateIntentResponse_botVersion = Lens.lens (\UpdateIntentResponse' {botVersion} -> botVersion) (\s@UpdateIntentResponse' {} a -> s {botVersion = a} :: UpdateIntentResponse)
+
+-- | A timestamp of when the intent was created.
+updateIntentResponse_creationDateTime :: Lens.Lens' UpdateIntentResponse (Prelude.Maybe Prelude.UTCTime)
+updateIntentResponse_creationDateTime = Lens.lens (\UpdateIntentResponse' {creationDateTime} -> creationDateTime) (\s@UpdateIntentResponse' {} a -> s {creationDateTime = a} :: UpdateIntentResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The updated description of the intent.
+updateIntentResponse_description :: Lens.Lens' UpdateIntentResponse (Prelude.Maybe Prelude.Text)
+updateIntentResponse_description = Lens.lens (\UpdateIntentResponse' {description} -> description) (\s@UpdateIntentResponse' {} a -> s {description = a} :: UpdateIntentResponse)
+
+-- | The updated Lambda function called during each turn of the conversation
+-- with the user.
+updateIntentResponse_dialogCodeHook :: Lens.Lens' UpdateIntentResponse (Prelude.Maybe DialogCodeHookSettings)
+updateIntentResponse_dialogCodeHook = Lens.lens (\UpdateIntentResponse' {dialogCodeHook} -> dialogCodeHook) (\s@UpdateIntentResponse' {} a -> s {dialogCodeHook = a} :: UpdateIntentResponse)
+
+-- | The updated Lambda function called when the intent is ready for
+-- fulfillment.
+updateIntentResponse_fulfillmentCodeHook :: Lens.Lens' UpdateIntentResponse (Prelude.Maybe FulfillmentCodeHookSettings)
+updateIntentResponse_fulfillmentCodeHook = Lens.lens (\UpdateIntentResponse' {fulfillmentCodeHook} -> fulfillmentCodeHook) (\s@UpdateIntentResponse' {} a -> s {fulfillmentCodeHook = a} :: UpdateIntentResponse)
+
+updateIntentResponse_initialResponseSetting :: Lens.Lens' UpdateIntentResponse (Prelude.Maybe InitialResponseSetting)
+updateIntentResponse_initialResponseSetting = Lens.lens (\UpdateIntentResponse' {initialResponseSetting} -> initialResponseSetting) (\s@UpdateIntentResponse' {} a -> s {initialResponseSetting = a} :: UpdateIntentResponse)
+
+-- | The updated list of contexts that must be active for the intent to be
+-- considered by Amazon Lex.
+updateIntentResponse_inputContexts :: Lens.Lens' UpdateIntentResponse (Prelude.Maybe [InputContext])
+updateIntentResponse_inputContexts = Lens.lens (\UpdateIntentResponse' {inputContexts} -> inputContexts) (\s@UpdateIntentResponse' {} a -> s {inputContexts = a} :: UpdateIntentResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The updated response that Amazon Lex sends the user when the intent is
+-- closed.
+updateIntentResponse_intentClosingSetting :: Lens.Lens' UpdateIntentResponse (Prelude.Maybe IntentClosingSetting)
+updateIntentResponse_intentClosingSetting = Lens.lens (\UpdateIntentResponse' {intentClosingSetting} -> intentClosingSetting) (\s@UpdateIntentResponse' {} a -> s {intentClosingSetting = a} :: UpdateIntentResponse)
+
+-- | The updated prompts that Amazon Lex sends to the user to confirm the
+-- completion of an intent.
+updateIntentResponse_intentConfirmationSetting :: Lens.Lens' UpdateIntentResponse (Prelude.Maybe IntentConfirmationSetting)
+updateIntentResponse_intentConfirmationSetting = Lens.lens (\UpdateIntentResponse' {intentConfirmationSetting} -> intentConfirmationSetting) (\s@UpdateIntentResponse' {} a -> s {intentConfirmationSetting = a} :: UpdateIntentResponse)
+
+-- | The identifier of the intent that was updated.
+updateIntentResponse_intentId :: Lens.Lens' UpdateIntentResponse (Prelude.Maybe Prelude.Text)
+updateIntentResponse_intentId = Lens.lens (\UpdateIntentResponse' {intentId} -> intentId) (\s@UpdateIntentResponse' {} a -> s {intentId = a} :: UpdateIntentResponse)
+
+-- | The updated name of the intent.
+updateIntentResponse_intentName :: Lens.Lens' UpdateIntentResponse (Prelude.Maybe Prelude.Text)
+updateIntentResponse_intentName = Lens.lens (\UpdateIntentResponse' {intentName} -> intentName) (\s@UpdateIntentResponse' {} a -> s {intentName = a} :: UpdateIntentResponse)
+
+-- | The updated configuration for connecting to an Amazon Kendra index with
+-- the @AMAZON.KendraSearchIntent@ intent.
+updateIntentResponse_kendraConfiguration :: Lens.Lens' UpdateIntentResponse (Prelude.Maybe KendraConfiguration)
+updateIntentResponse_kendraConfiguration = Lens.lens (\UpdateIntentResponse' {kendraConfiguration} -> kendraConfiguration) (\s@UpdateIntentResponse' {} a -> s {kendraConfiguration = a} :: UpdateIntentResponse)
+
+-- | A timestamp of the last time that the intent was modified.
+updateIntentResponse_lastUpdatedDateTime :: Lens.Lens' UpdateIntentResponse (Prelude.Maybe Prelude.UTCTime)
+updateIntentResponse_lastUpdatedDateTime = Lens.lens (\UpdateIntentResponse' {lastUpdatedDateTime} -> lastUpdatedDateTime) (\s@UpdateIntentResponse' {} a -> s {lastUpdatedDateTime = a} :: UpdateIntentResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The updated language and locale of the intent.
+updateIntentResponse_localeId :: Lens.Lens' UpdateIntentResponse (Prelude.Maybe Prelude.Text)
+updateIntentResponse_localeId = Lens.lens (\UpdateIntentResponse' {localeId} -> localeId) (\s@UpdateIntentResponse' {} a -> s {localeId = a} :: UpdateIntentResponse)
+
+-- | The updated list of contexts that Amazon Lex activates when the intent
+-- is fulfilled.
+updateIntentResponse_outputContexts :: Lens.Lens' UpdateIntentResponse (Prelude.Maybe [OutputContext])
+updateIntentResponse_outputContexts = Lens.lens (\UpdateIntentResponse' {outputContexts} -> outputContexts) (\s@UpdateIntentResponse' {} a -> s {outputContexts = a} :: UpdateIntentResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The updated built-in intent that is the parent of this intent.
+updateIntentResponse_parentIntentSignature :: Lens.Lens' UpdateIntentResponse (Prelude.Maybe Prelude.Text)
+updateIntentResponse_parentIntentSignature = Lens.lens (\UpdateIntentResponse' {parentIntentSignature} -> parentIntentSignature) (\s@UpdateIntentResponse' {} a -> s {parentIntentSignature = a} :: UpdateIntentResponse)
+
+-- | The updated list of sample utterances for the intent.
+updateIntentResponse_sampleUtterances :: Lens.Lens' UpdateIntentResponse (Prelude.Maybe [SampleUtterance])
+updateIntentResponse_sampleUtterances = Lens.lens (\UpdateIntentResponse' {sampleUtterances} -> sampleUtterances) (\s@UpdateIntentResponse' {} a -> s {sampleUtterances = a} :: UpdateIntentResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The updated list of slots and their priorities that are elicited from
+-- the user for the intent.
+updateIntentResponse_slotPriorities :: Lens.Lens' UpdateIntentResponse (Prelude.Maybe [SlotPriority])
+updateIntentResponse_slotPriorities = Lens.lens (\UpdateIntentResponse' {slotPriorities} -> slotPriorities) (\s@UpdateIntentResponse' {} a -> s {slotPriorities = a} :: UpdateIntentResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+updateIntentResponse_httpStatus :: Lens.Lens' UpdateIntentResponse Prelude.Int
+updateIntentResponse_httpStatus = Lens.lens (\UpdateIntentResponse' {httpStatus} -> httpStatus) (\s@UpdateIntentResponse' {} a -> s {httpStatus = a} :: UpdateIntentResponse)
+
+instance Prelude.NFData UpdateIntentResponse where
+  rnf UpdateIntentResponse' {..} =
+    Prelude.rnf botId
+      `Prelude.seq` Prelude.rnf botVersion
+      `Prelude.seq` Prelude.rnf creationDateTime
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf dialogCodeHook
+      `Prelude.seq` Prelude.rnf fulfillmentCodeHook
+      `Prelude.seq` Prelude.rnf initialResponseSetting
+      `Prelude.seq` Prelude.rnf inputContexts
+      `Prelude.seq` Prelude.rnf intentClosingSetting
+      `Prelude.seq` Prelude.rnf intentConfirmationSetting
+      `Prelude.seq` Prelude.rnf intentId
+      `Prelude.seq` Prelude.rnf intentName
+      `Prelude.seq` Prelude.rnf kendraConfiguration
+      `Prelude.seq` Prelude.rnf lastUpdatedDateTime
+      `Prelude.seq` Prelude.rnf localeId
+      `Prelude.seq` Prelude.rnf outputContexts
+      `Prelude.seq` Prelude.rnf parentIntentSignature
+      `Prelude.seq` Prelude.rnf sampleUtterances
+      `Prelude.seq` Prelude.rnf slotPriorities
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/LexV2Models/UpdateResourcePolicy.hs b/gen/Amazonka/LexV2Models/UpdateResourcePolicy.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/UpdateResourcePolicy.hs
@@ -0,0 +1,263 @@
+{-# 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.LexV2Models.UpdateResourcePolicy
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Replaces the existing resource policy for a bot or bot alias with a new
+-- one. If the policy doesn\'t exist, Amazon Lex returns an exception.
+module Amazonka.LexV2Models.UpdateResourcePolicy
+  ( -- * Creating a Request
+    UpdateResourcePolicy (..),
+    newUpdateResourcePolicy,
+
+    -- * Request Lenses
+    updateResourcePolicy_expectedRevisionId,
+    updateResourcePolicy_resourceArn,
+    updateResourcePolicy_policy,
+
+    -- * Destructuring the Response
+    UpdateResourcePolicyResponse (..),
+    newUpdateResourcePolicyResponse,
+
+    -- * Response Lenses
+    updateResourcePolicyResponse_resourceArn,
+    updateResourcePolicyResponse_revisionId,
+    updateResourcePolicyResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LexV2Models.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUpdateResourcePolicy' smart constructor.
+data UpdateResourcePolicy = UpdateResourcePolicy'
+  { -- | The identifier of the revision of the policy to update. If this revision
+    -- ID doesn\'t match the current revision ID, Amazon Lex throws an
+    -- exception.
+    --
+    -- If you don\'t specify a revision, Amazon Lex overwrites the contents of
+    -- the policy with the new values.
+    expectedRevisionId :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the bot or bot alias that the resource
+    -- policy is attached to.
+    resourceArn :: Prelude.Text,
+    -- | A resource policy to add to the resource. The policy is a JSON structure
+    -- that contains one or more statements that define the policy. The policy
+    -- must follow the IAM syntax. For more information about the contents of a
+    -- JSON policy document, see
+    -- <https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies.html IAM JSON policy reference>
+    -- .
+    --
+    -- If the policy isn\'t valid, Amazon Lex returns a validation exception.
+    policy :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateResourcePolicy' 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:
+--
+-- 'expectedRevisionId', 'updateResourcePolicy_expectedRevisionId' - The identifier of the revision of the policy to update. If this revision
+-- ID doesn\'t match the current revision ID, Amazon Lex throws an
+-- exception.
+--
+-- If you don\'t specify a revision, Amazon Lex overwrites the contents of
+-- the policy with the new values.
+--
+-- 'resourceArn', 'updateResourcePolicy_resourceArn' - The Amazon Resource Name (ARN) of the bot or bot alias that the resource
+-- policy is attached to.
+--
+-- 'policy', 'updateResourcePolicy_policy' - A resource policy to add to the resource. The policy is a JSON structure
+-- that contains one or more statements that define the policy. The policy
+-- must follow the IAM syntax. For more information about the contents of a
+-- JSON policy document, see
+-- <https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies.html IAM JSON policy reference>
+-- .
+--
+-- If the policy isn\'t valid, Amazon Lex returns a validation exception.
+newUpdateResourcePolicy ::
+  -- | 'resourceArn'
+  Prelude.Text ->
+  -- | 'policy'
+  Prelude.Text ->
+  UpdateResourcePolicy
+newUpdateResourcePolicy pResourceArn_ pPolicy_ =
+  UpdateResourcePolicy'
+    { expectedRevisionId =
+        Prelude.Nothing,
+      resourceArn = pResourceArn_,
+      policy = pPolicy_
+    }
+
+-- | The identifier of the revision of the policy to update. If this revision
+-- ID doesn\'t match the current revision ID, Amazon Lex throws an
+-- exception.
+--
+-- If you don\'t specify a revision, Amazon Lex overwrites the contents of
+-- the policy with the new values.
+updateResourcePolicy_expectedRevisionId :: Lens.Lens' UpdateResourcePolicy (Prelude.Maybe Prelude.Text)
+updateResourcePolicy_expectedRevisionId = Lens.lens (\UpdateResourcePolicy' {expectedRevisionId} -> expectedRevisionId) (\s@UpdateResourcePolicy' {} a -> s {expectedRevisionId = a} :: UpdateResourcePolicy)
+
+-- | The Amazon Resource Name (ARN) of the bot or bot alias that the resource
+-- policy is attached to.
+updateResourcePolicy_resourceArn :: Lens.Lens' UpdateResourcePolicy Prelude.Text
+updateResourcePolicy_resourceArn = Lens.lens (\UpdateResourcePolicy' {resourceArn} -> resourceArn) (\s@UpdateResourcePolicy' {} a -> s {resourceArn = a} :: UpdateResourcePolicy)
+
+-- | A resource policy to add to the resource. The policy is a JSON structure
+-- that contains one or more statements that define the policy. The policy
+-- must follow the IAM syntax. For more information about the contents of a
+-- JSON policy document, see
+-- <https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies.html IAM JSON policy reference>
+-- .
+--
+-- If the policy isn\'t valid, Amazon Lex returns a validation exception.
+updateResourcePolicy_policy :: Lens.Lens' UpdateResourcePolicy Prelude.Text
+updateResourcePolicy_policy = Lens.lens (\UpdateResourcePolicy' {policy} -> policy) (\s@UpdateResourcePolicy' {} a -> s {policy = a} :: UpdateResourcePolicy)
+
+instance Core.AWSRequest UpdateResourcePolicy where
+  type
+    AWSResponse UpdateResourcePolicy =
+      UpdateResourcePolicyResponse
+  request overrides =
+    Request.putJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          UpdateResourcePolicyResponse'
+            Prelude.<$> (x Data..?> "resourceArn")
+            Prelude.<*> (x Data..?> "revisionId")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UpdateResourcePolicy where
+  hashWithSalt _salt UpdateResourcePolicy' {..} =
+    _salt
+      `Prelude.hashWithSalt` expectedRevisionId
+      `Prelude.hashWithSalt` resourceArn
+      `Prelude.hashWithSalt` policy
+
+instance Prelude.NFData UpdateResourcePolicy where
+  rnf UpdateResourcePolicy' {..} =
+    Prelude.rnf expectedRevisionId
+      `Prelude.seq` Prelude.rnf resourceArn
+      `Prelude.seq` Prelude.rnf policy
+
+instance Data.ToHeaders UpdateResourcePolicy where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateResourcePolicy where
+  toJSON UpdateResourcePolicy' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("policy" Data..= policy)]
+      )
+
+instance Data.ToPath UpdateResourcePolicy where
+  toPath UpdateResourcePolicy' {..} =
+    Prelude.mconcat
+      ["/policy/", Data.toBS resourceArn, "/"]
+
+instance Data.ToQuery UpdateResourcePolicy where
+  toQuery UpdateResourcePolicy' {..} =
+    Prelude.mconcat
+      ["expectedRevisionId" Data.=: expectedRevisionId]
+
+-- | /See:/ 'newUpdateResourcePolicyResponse' smart constructor.
+data UpdateResourcePolicyResponse = UpdateResourcePolicyResponse'
+  { -- | The Amazon Resource Name (ARN) of the bot or bot alias that the resource
+    -- policy is attached to.
+    resourceArn :: Prelude.Maybe Prelude.Text,
+    -- | The current revision of the resource policy. Use the revision ID to make
+    -- sure that you are updating the most current version of a resource policy
+    -- when you add a policy statement to a resource, delete a resource, or
+    -- update a resource.
+    revisionId :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateResourcePolicyResponse' 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', 'updateResourcePolicyResponse_resourceArn' - The Amazon Resource Name (ARN) of the bot or bot alias that the resource
+-- policy is attached to.
+--
+-- 'revisionId', 'updateResourcePolicyResponse_revisionId' - The current revision of the resource policy. Use the revision ID to make
+-- sure that you are updating the most current version of a resource policy
+-- when you add a policy statement to a resource, delete a resource, or
+-- update a resource.
+--
+-- 'httpStatus', 'updateResourcePolicyResponse_httpStatus' - The response's http status code.
+newUpdateResourcePolicyResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UpdateResourcePolicyResponse
+newUpdateResourcePolicyResponse pHttpStatus_ =
+  UpdateResourcePolicyResponse'
+    { resourceArn =
+        Prelude.Nothing,
+      revisionId = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The Amazon Resource Name (ARN) of the bot or bot alias that the resource
+-- policy is attached to.
+updateResourcePolicyResponse_resourceArn :: Lens.Lens' UpdateResourcePolicyResponse (Prelude.Maybe Prelude.Text)
+updateResourcePolicyResponse_resourceArn = Lens.lens (\UpdateResourcePolicyResponse' {resourceArn} -> resourceArn) (\s@UpdateResourcePolicyResponse' {} a -> s {resourceArn = a} :: UpdateResourcePolicyResponse)
+
+-- | The current revision of the resource policy. Use the revision ID to make
+-- sure that you are updating the most current version of a resource policy
+-- when you add a policy statement to a resource, delete a resource, or
+-- update a resource.
+updateResourcePolicyResponse_revisionId :: Lens.Lens' UpdateResourcePolicyResponse (Prelude.Maybe Prelude.Text)
+updateResourcePolicyResponse_revisionId = Lens.lens (\UpdateResourcePolicyResponse' {revisionId} -> revisionId) (\s@UpdateResourcePolicyResponse' {} a -> s {revisionId = a} :: UpdateResourcePolicyResponse)
+
+-- | The response's http status code.
+updateResourcePolicyResponse_httpStatus :: Lens.Lens' UpdateResourcePolicyResponse Prelude.Int
+updateResourcePolicyResponse_httpStatus = Lens.lens (\UpdateResourcePolicyResponse' {httpStatus} -> httpStatus) (\s@UpdateResourcePolicyResponse' {} a -> s {httpStatus = a} :: UpdateResourcePolicyResponse)
+
+instance Prelude.NFData UpdateResourcePolicyResponse where
+  rnf UpdateResourcePolicyResponse' {..} =
+    Prelude.rnf resourceArn
+      `Prelude.seq` Prelude.rnf revisionId
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/LexV2Models/UpdateSlot.hs b/gen/Amazonka/LexV2Models/UpdateSlot.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/UpdateSlot.hs
@@ -0,0 +1,546 @@
+{-# 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.LexV2Models.UpdateSlot
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Updates the settings for a slot.
+module Amazonka.LexV2Models.UpdateSlot
+  ( -- * Creating a Request
+    UpdateSlot (..),
+    newUpdateSlot,
+
+    -- * Request Lenses
+    updateSlot_description,
+    updateSlot_multipleValuesSetting,
+    updateSlot_obfuscationSetting,
+    updateSlot_slotTypeId,
+    updateSlot_subSlotSetting,
+    updateSlot_slotId,
+    updateSlot_slotName,
+    updateSlot_valueElicitationSetting,
+    updateSlot_botId,
+    updateSlot_botVersion,
+    updateSlot_localeId,
+    updateSlot_intentId,
+
+    -- * Destructuring the Response
+    UpdateSlotResponse (..),
+    newUpdateSlotResponse,
+
+    -- * Response Lenses
+    updateSlotResponse_botId,
+    updateSlotResponse_botVersion,
+    updateSlotResponse_creationDateTime,
+    updateSlotResponse_description,
+    updateSlotResponse_intentId,
+    updateSlotResponse_lastUpdatedDateTime,
+    updateSlotResponse_localeId,
+    updateSlotResponse_multipleValuesSetting,
+    updateSlotResponse_obfuscationSetting,
+    updateSlotResponse_slotId,
+    updateSlotResponse_slotName,
+    updateSlotResponse_slotTypeId,
+    updateSlotResponse_subSlotSetting,
+    updateSlotResponse_valueElicitationSetting,
+    updateSlotResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LexV2Models.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUpdateSlot' smart constructor.
+data UpdateSlot = UpdateSlot'
+  { -- | The new description for the slot.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | Determines whether the slot accepts multiple values in one response.
+    -- Multiple value slots are only available in the en-US locale. If you set
+    -- this value to @true@ in any other locale, Amazon Lex throws a
+    -- @ValidationException@.
+    --
+    -- If the @multipleValuesSetting@ is not set, the default value is @false@.
+    multipleValuesSetting :: Prelude.Maybe MultipleValuesSetting,
+    -- | New settings that determine how slot values are formatted in Amazon
+    -- CloudWatch logs.
+    obfuscationSetting :: Prelude.Maybe ObfuscationSetting,
+    -- | The unique identifier of the new slot type to associate with this slot.
+    slotTypeId :: Prelude.Maybe Prelude.Text,
+    -- | Specifications for the constituent sub slots and the expression for the
+    -- composite slot.
+    subSlotSetting :: Prelude.Maybe SubSlotSetting,
+    -- | The unique identifier for the slot to update.
+    slotId :: Prelude.Text,
+    -- | The new name for the slot.
+    slotName :: Prelude.Text,
+    -- | A new set of prompts that Amazon Lex sends to the user to elicit a
+    -- response the provides a value for the slot.
+    valueElicitationSetting :: SlotValueElicitationSetting,
+    -- | The unique identifier of the bot that contains the slot.
+    botId :: Prelude.Text,
+    -- | The version of the bot that contains the slot. Must always be @DRAFT@.
+    botVersion :: Prelude.Text,
+    -- | The identifier of the language and locale that contains the slot. The
+    -- string must match one of the supported locales. For more information,
+    -- see
+    -- <https://docs.aws.amazon.com/lexv2/latest/dg/how-languages.html Supported languages>.
+    localeId :: Prelude.Text,
+    -- | The identifier of the intent that contains the slot.
+    intentId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateSlot' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'description', 'updateSlot_description' - The new description for the slot.
+--
+-- 'multipleValuesSetting', 'updateSlot_multipleValuesSetting' - Determines whether the slot accepts multiple values in one response.
+-- Multiple value slots are only available in the en-US locale. If you set
+-- this value to @true@ in any other locale, Amazon Lex throws a
+-- @ValidationException@.
+--
+-- If the @multipleValuesSetting@ is not set, the default value is @false@.
+--
+-- 'obfuscationSetting', 'updateSlot_obfuscationSetting' - New settings that determine how slot values are formatted in Amazon
+-- CloudWatch logs.
+--
+-- 'slotTypeId', 'updateSlot_slotTypeId' - The unique identifier of the new slot type to associate with this slot.
+--
+-- 'subSlotSetting', 'updateSlot_subSlotSetting' - Specifications for the constituent sub slots and the expression for the
+-- composite slot.
+--
+-- 'slotId', 'updateSlot_slotId' - The unique identifier for the slot to update.
+--
+-- 'slotName', 'updateSlot_slotName' - The new name for the slot.
+--
+-- 'valueElicitationSetting', 'updateSlot_valueElicitationSetting' - A new set of prompts that Amazon Lex sends to the user to elicit a
+-- response the provides a value for the slot.
+--
+-- 'botId', 'updateSlot_botId' - The unique identifier of the bot that contains the slot.
+--
+-- 'botVersion', 'updateSlot_botVersion' - The version of the bot that contains the slot. Must always be @DRAFT@.
+--
+-- 'localeId', 'updateSlot_localeId' - The identifier of the language and locale that contains the slot. The
+-- string must match one of the supported locales. For more information,
+-- see
+-- <https://docs.aws.amazon.com/lexv2/latest/dg/how-languages.html Supported languages>.
+--
+-- 'intentId', 'updateSlot_intentId' - The identifier of the intent that contains the slot.
+newUpdateSlot ::
+  -- | 'slotId'
+  Prelude.Text ->
+  -- | 'slotName'
+  Prelude.Text ->
+  -- | 'valueElicitationSetting'
+  SlotValueElicitationSetting ->
+  -- | 'botId'
+  Prelude.Text ->
+  -- | 'botVersion'
+  Prelude.Text ->
+  -- | 'localeId'
+  Prelude.Text ->
+  -- | 'intentId'
+  Prelude.Text ->
+  UpdateSlot
+newUpdateSlot
+  pSlotId_
+  pSlotName_
+  pValueElicitationSetting_
+  pBotId_
+  pBotVersion_
+  pLocaleId_
+  pIntentId_ =
+    UpdateSlot'
+      { description = Prelude.Nothing,
+        multipleValuesSetting = Prelude.Nothing,
+        obfuscationSetting = Prelude.Nothing,
+        slotTypeId = Prelude.Nothing,
+        subSlotSetting = Prelude.Nothing,
+        slotId = pSlotId_,
+        slotName = pSlotName_,
+        valueElicitationSetting = pValueElicitationSetting_,
+        botId = pBotId_,
+        botVersion = pBotVersion_,
+        localeId = pLocaleId_,
+        intentId = pIntentId_
+      }
+
+-- | The new description for the slot.
+updateSlot_description :: Lens.Lens' UpdateSlot (Prelude.Maybe Prelude.Text)
+updateSlot_description = Lens.lens (\UpdateSlot' {description} -> description) (\s@UpdateSlot' {} a -> s {description = a} :: UpdateSlot)
+
+-- | Determines whether the slot accepts multiple values in one response.
+-- Multiple value slots are only available in the en-US locale. If you set
+-- this value to @true@ in any other locale, Amazon Lex throws a
+-- @ValidationException@.
+--
+-- If the @multipleValuesSetting@ is not set, the default value is @false@.
+updateSlot_multipleValuesSetting :: Lens.Lens' UpdateSlot (Prelude.Maybe MultipleValuesSetting)
+updateSlot_multipleValuesSetting = Lens.lens (\UpdateSlot' {multipleValuesSetting} -> multipleValuesSetting) (\s@UpdateSlot' {} a -> s {multipleValuesSetting = a} :: UpdateSlot)
+
+-- | New settings that determine how slot values are formatted in Amazon
+-- CloudWatch logs.
+updateSlot_obfuscationSetting :: Lens.Lens' UpdateSlot (Prelude.Maybe ObfuscationSetting)
+updateSlot_obfuscationSetting = Lens.lens (\UpdateSlot' {obfuscationSetting} -> obfuscationSetting) (\s@UpdateSlot' {} a -> s {obfuscationSetting = a} :: UpdateSlot)
+
+-- | The unique identifier of the new slot type to associate with this slot.
+updateSlot_slotTypeId :: Lens.Lens' UpdateSlot (Prelude.Maybe Prelude.Text)
+updateSlot_slotTypeId = Lens.lens (\UpdateSlot' {slotTypeId} -> slotTypeId) (\s@UpdateSlot' {} a -> s {slotTypeId = a} :: UpdateSlot)
+
+-- | Specifications for the constituent sub slots and the expression for the
+-- composite slot.
+updateSlot_subSlotSetting :: Lens.Lens' UpdateSlot (Prelude.Maybe SubSlotSetting)
+updateSlot_subSlotSetting = Lens.lens (\UpdateSlot' {subSlotSetting} -> subSlotSetting) (\s@UpdateSlot' {} a -> s {subSlotSetting = a} :: UpdateSlot)
+
+-- | The unique identifier for the slot to update.
+updateSlot_slotId :: Lens.Lens' UpdateSlot Prelude.Text
+updateSlot_slotId = Lens.lens (\UpdateSlot' {slotId} -> slotId) (\s@UpdateSlot' {} a -> s {slotId = a} :: UpdateSlot)
+
+-- | The new name for the slot.
+updateSlot_slotName :: Lens.Lens' UpdateSlot Prelude.Text
+updateSlot_slotName = Lens.lens (\UpdateSlot' {slotName} -> slotName) (\s@UpdateSlot' {} a -> s {slotName = a} :: UpdateSlot)
+
+-- | A new set of prompts that Amazon Lex sends to the user to elicit a
+-- response the provides a value for the slot.
+updateSlot_valueElicitationSetting :: Lens.Lens' UpdateSlot SlotValueElicitationSetting
+updateSlot_valueElicitationSetting = Lens.lens (\UpdateSlot' {valueElicitationSetting} -> valueElicitationSetting) (\s@UpdateSlot' {} a -> s {valueElicitationSetting = a} :: UpdateSlot)
+
+-- | The unique identifier of the bot that contains the slot.
+updateSlot_botId :: Lens.Lens' UpdateSlot Prelude.Text
+updateSlot_botId = Lens.lens (\UpdateSlot' {botId} -> botId) (\s@UpdateSlot' {} a -> s {botId = a} :: UpdateSlot)
+
+-- | The version of the bot that contains the slot. Must always be @DRAFT@.
+updateSlot_botVersion :: Lens.Lens' UpdateSlot Prelude.Text
+updateSlot_botVersion = Lens.lens (\UpdateSlot' {botVersion} -> botVersion) (\s@UpdateSlot' {} a -> s {botVersion = a} :: UpdateSlot)
+
+-- | The identifier of the language and locale that contains the slot. The
+-- string must match one of the supported locales. For more information,
+-- see
+-- <https://docs.aws.amazon.com/lexv2/latest/dg/how-languages.html Supported languages>.
+updateSlot_localeId :: Lens.Lens' UpdateSlot Prelude.Text
+updateSlot_localeId = Lens.lens (\UpdateSlot' {localeId} -> localeId) (\s@UpdateSlot' {} a -> s {localeId = a} :: UpdateSlot)
+
+-- | The identifier of the intent that contains the slot.
+updateSlot_intentId :: Lens.Lens' UpdateSlot Prelude.Text
+updateSlot_intentId = Lens.lens (\UpdateSlot' {intentId} -> intentId) (\s@UpdateSlot' {} a -> s {intentId = a} :: UpdateSlot)
+
+instance Core.AWSRequest UpdateSlot where
+  type AWSResponse UpdateSlot = UpdateSlotResponse
+  request overrides =
+    Request.putJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          UpdateSlotResponse'
+            Prelude.<$> (x Data..?> "botId")
+            Prelude.<*> (x Data..?> "botVersion")
+            Prelude.<*> (x Data..?> "creationDateTime")
+            Prelude.<*> (x Data..?> "description")
+            Prelude.<*> (x Data..?> "intentId")
+            Prelude.<*> (x Data..?> "lastUpdatedDateTime")
+            Prelude.<*> (x Data..?> "localeId")
+            Prelude.<*> (x Data..?> "multipleValuesSetting")
+            Prelude.<*> (x Data..?> "obfuscationSetting")
+            Prelude.<*> (x Data..?> "slotId")
+            Prelude.<*> (x Data..?> "slotName")
+            Prelude.<*> (x Data..?> "slotTypeId")
+            Prelude.<*> (x Data..?> "subSlotSetting")
+            Prelude.<*> (x Data..?> "valueElicitationSetting")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UpdateSlot where
+  hashWithSalt _salt UpdateSlot' {..} =
+    _salt
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` multipleValuesSetting
+      `Prelude.hashWithSalt` obfuscationSetting
+      `Prelude.hashWithSalt` slotTypeId
+      `Prelude.hashWithSalt` subSlotSetting
+      `Prelude.hashWithSalt` slotId
+      `Prelude.hashWithSalt` slotName
+      `Prelude.hashWithSalt` valueElicitationSetting
+      `Prelude.hashWithSalt` botId
+      `Prelude.hashWithSalt` botVersion
+      `Prelude.hashWithSalt` localeId
+      `Prelude.hashWithSalt` intentId
+
+instance Prelude.NFData UpdateSlot where
+  rnf UpdateSlot' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf multipleValuesSetting
+      `Prelude.seq` Prelude.rnf obfuscationSetting
+      `Prelude.seq` Prelude.rnf slotTypeId
+      `Prelude.seq` Prelude.rnf subSlotSetting
+      `Prelude.seq` Prelude.rnf slotId
+      `Prelude.seq` Prelude.rnf slotName
+      `Prelude.seq` Prelude.rnf valueElicitationSetting
+      `Prelude.seq` Prelude.rnf botId
+      `Prelude.seq` Prelude.rnf botVersion
+      `Prelude.seq` Prelude.rnf localeId
+      `Prelude.seq` Prelude.rnf intentId
+
+instance Data.ToHeaders UpdateSlot where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateSlot where
+  toJSON UpdateSlot' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("description" Data..=) Prelude.<$> description,
+            ("multipleValuesSetting" Data..=)
+              Prelude.<$> multipleValuesSetting,
+            ("obfuscationSetting" Data..=)
+              Prelude.<$> obfuscationSetting,
+            ("slotTypeId" Data..=) Prelude.<$> slotTypeId,
+            ("subSlotSetting" Data..=)
+              Prelude.<$> subSlotSetting,
+            Prelude.Just ("slotName" Data..= slotName),
+            Prelude.Just
+              ( "valueElicitationSetting"
+                  Data..= valueElicitationSetting
+              )
+          ]
+      )
+
+instance Data.ToPath UpdateSlot where
+  toPath UpdateSlot' {..} =
+    Prelude.mconcat
+      [ "/bots/",
+        Data.toBS botId,
+        "/botversions/",
+        Data.toBS botVersion,
+        "/botlocales/",
+        Data.toBS localeId,
+        "/intents/",
+        Data.toBS intentId,
+        "/slots/",
+        Data.toBS slotId,
+        "/"
+      ]
+
+instance Data.ToQuery UpdateSlot where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateSlotResponse' smart constructor.
+data UpdateSlotResponse = UpdateSlotResponse'
+  { -- | The identifier of the bot that contains the slot.
+    botId :: Prelude.Maybe Prelude.Text,
+    -- | The identifier of the slot version that contains the slot. Will always
+    -- be @DRAFT@.
+    botVersion :: Prelude.Maybe Prelude.Text,
+    -- | The timestamp of the date and time that the slot was created.
+    creationDateTime :: Prelude.Maybe Data.POSIX,
+    -- | The updated description of the bot.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The intent that contains the slot.
+    intentId :: Prelude.Maybe Prelude.Text,
+    -- | The timestamp of the date and time that the slot was last updated.
+    lastUpdatedDateTime :: Prelude.Maybe Data.POSIX,
+    -- | The locale that contains the slot.
+    localeId :: Prelude.Maybe Prelude.Text,
+    -- | Indicates whether the slot accepts multiple values in one response.
+    multipleValuesSetting :: Prelude.Maybe MultipleValuesSetting,
+    -- | The updated setting that determines whether the slot value is obfuscated
+    -- in the Amazon CloudWatch logs.
+    obfuscationSetting :: Prelude.Maybe ObfuscationSetting,
+    -- | The unique identifier of the slot that was updated.
+    slotId :: Prelude.Maybe Prelude.Text,
+    -- | The updated name of the slot.
+    slotName :: Prelude.Maybe Prelude.Text,
+    -- | The updated identifier of the slot type that provides values for the
+    -- slot.
+    slotTypeId :: Prelude.Maybe Prelude.Text,
+    -- | Specifications for the constituent sub slots and the expression for the
+    -- composite slot.
+    subSlotSetting :: Prelude.Maybe SubSlotSetting,
+    -- | The updated prompts that Amazon Lex sends to the user to elicit a
+    -- response that provides a value for the slot.
+    valueElicitationSetting :: Prelude.Maybe SlotValueElicitationSetting,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateSlotResponse' 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:
+--
+-- 'botId', 'updateSlotResponse_botId' - The identifier of the bot that contains the slot.
+--
+-- 'botVersion', 'updateSlotResponse_botVersion' - The identifier of the slot version that contains the slot. Will always
+-- be @DRAFT@.
+--
+-- 'creationDateTime', 'updateSlotResponse_creationDateTime' - The timestamp of the date and time that the slot was created.
+--
+-- 'description', 'updateSlotResponse_description' - The updated description of the bot.
+--
+-- 'intentId', 'updateSlotResponse_intentId' - The intent that contains the slot.
+--
+-- 'lastUpdatedDateTime', 'updateSlotResponse_lastUpdatedDateTime' - The timestamp of the date and time that the slot was last updated.
+--
+-- 'localeId', 'updateSlotResponse_localeId' - The locale that contains the slot.
+--
+-- 'multipleValuesSetting', 'updateSlotResponse_multipleValuesSetting' - Indicates whether the slot accepts multiple values in one response.
+--
+-- 'obfuscationSetting', 'updateSlotResponse_obfuscationSetting' - The updated setting that determines whether the slot value is obfuscated
+-- in the Amazon CloudWatch logs.
+--
+-- 'slotId', 'updateSlotResponse_slotId' - The unique identifier of the slot that was updated.
+--
+-- 'slotName', 'updateSlotResponse_slotName' - The updated name of the slot.
+--
+-- 'slotTypeId', 'updateSlotResponse_slotTypeId' - The updated identifier of the slot type that provides values for the
+-- slot.
+--
+-- 'subSlotSetting', 'updateSlotResponse_subSlotSetting' - Specifications for the constituent sub slots and the expression for the
+-- composite slot.
+--
+-- 'valueElicitationSetting', 'updateSlotResponse_valueElicitationSetting' - The updated prompts that Amazon Lex sends to the user to elicit a
+-- response that provides a value for the slot.
+--
+-- 'httpStatus', 'updateSlotResponse_httpStatus' - The response's http status code.
+newUpdateSlotResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UpdateSlotResponse
+newUpdateSlotResponse pHttpStatus_ =
+  UpdateSlotResponse'
+    { botId = Prelude.Nothing,
+      botVersion = Prelude.Nothing,
+      creationDateTime = Prelude.Nothing,
+      description = Prelude.Nothing,
+      intentId = Prelude.Nothing,
+      lastUpdatedDateTime = Prelude.Nothing,
+      localeId = Prelude.Nothing,
+      multipleValuesSetting = Prelude.Nothing,
+      obfuscationSetting = Prelude.Nothing,
+      slotId = Prelude.Nothing,
+      slotName = Prelude.Nothing,
+      slotTypeId = Prelude.Nothing,
+      subSlotSetting = Prelude.Nothing,
+      valueElicitationSetting = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The identifier of the bot that contains the slot.
+updateSlotResponse_botId :: Lens.Lens' UpdateSlotResponse (Prelude.Maybe Prelude.Text)
+updateSlotResponse_botId = Lens.lens (\UpdateSlotResponse' {botId} -> botId) (\s@UpdateSlotResponse' {} a -> s {botId = a} :: UpdateSlotResponse)
+
+-- | The identifier of the slot version that contains the slot. Will always
+-- be @DRAFT@.
+updateSlotResponse_botVersion :: Lens.Lens' UpdateSlotResponse (Prelude.Maybe Prelude.Text)
+updateSlotResponse_botVersion = Lens.lens (\UpdateSlotResponse' {botVersion} -> botVersion) (\s@UpdateSlotResponse' {} a -> s {botVersion = a} :: UpdateSlotResponse)
+
+-- | The timestamp of the date and time that the slot was created.
+updateSlotResponse_creationDateTime :: Lens.Lens' UpdateSlotResponse (Prelude.Maybe Prelude.UTCTime)
+updateSlotResponse_creationDateTime = Lens.lens (\UpdateSlotResponse' {creationDateTime} -> creationDateTime) (\s@UpdateSlotResponse' {} a -> s {creationDateTime = a} :: UpdateSlotResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The updated description of the bot.
+updateSlotResponse_description :: Lens.Lens' UpdateSlotResponse (Prelude.Maybe Prelude.Text)
+updateSlotResponse_description = Lens.lens (\UpdateSlotResponse' {description} -> description) (\s@UpdateSlotResponse' {} a -> s {description = a} :: UpdateSlotResponse)
+
+-- | The intent that contains the slot.
+updateSlotResponse_intentId :: Lens.Lens' UpdateSlotResponse (Prelude.Maybe Prelude.Text)
+updateSlotResponse_intentId = Lens.lens (\UpdateSlotResponse' {intentId} -> intentId) (\s@UpdateSlotResponse' {} a -> s {intentId = a} :: UpdateSlotResponse)
+
+-- | The timestamp of the date and time that the slot was last updated.
+updateSlotResponse_lastUpdatedDateTime :: Lens.Lens' UpdateSlotResponse (Prelude.Maybe Prelude.UTCTime)
+updateSlotResponse_lastUpdatedDateTime = Lens.lens (\UpdateSlotResponse' {lastUpdatedDateTime} -> lastUpdatedDateTime) (\s@UpdateSlotResponse' {} a -> s {lastUpdatedDateTime = a} :: UpdateSlotResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The locale that contains the slot.
+updateSlotResponse_localeId :: Lens.Lens' UpdateSlotResponse (Prelude.Maybe Prelude.Text)
+updateSlotResponse_localeId = Lens.lens (\UpdateSlotResponse' {localeId} -> localeId) (\s@UpdateSlotResponse' {} a -> s {localeId = a} :: UpdateSlotResponse)
+
+-- | Indicates whether the slot accepts multiple values in one response.
+updateSlotResponse_multipleValuesSetting :: Lens.Lens' UpdateSlotResponse (Prelude.Maybe MultipleValuesSetting)
+updateSlotResponse_multipleValuesSetting = Lens.lens (\UpdateSlotResponse' {multipleValuesSetting} -> multipleValuesSetting) (\s@UpdateSlotResponse' {} a -> s {multipleValuesSetting = a} :: UpdateSlotResponse)
+
+-- | The updated setting that determines whether the slot value is obfuscated
+-- in the Amazon CloudWatch logs.
+updateSlotResponse_obfuscationSetting :: Lens.Lens' UpdateSlotResponse (Prelude.Maybe ObfuscationSetting)
+updateSlotResponse_obfuscationSetting = Lens.lens (\UpdateSlotResponse' {obfuscationSetting} -> obfuscationSetting) (\s@UpdateSlotResponse' {} a -> s {obfuscationSetting = a} :: UpdateSlotResponse)
+
+-- | The unique identifier of the slot that was updated.
+updateSlotResponse_slotId :: Lens.Lens' UpdateSlotResponse (Prelude.Maybe Prelude.Text)
+updateSlotResponse_slotId = Lens.lens (\UpdateSlotResponse' {slotId} -> slotId) (\s@UpdateSlotResponse' {} a -> s {slotId = a} :: UpdateSlotResponse)
+
+-- | The updated name of the slot.
+updateSlotResponse_slotName :: Lens.Lens' UpdateSlotResponse (Prelude.Maybe Prelude.Text)
+updateSlotResponse_slotName = Lens.lens (\UpdateSlotResponse' {slotName} -> slotName) (\s@UpdateSlotResponse' {} a -> s {slotName = a} :: UpdateSlotResponse)
+
+-- | The updated identifier of the slot type that provides values for the
+-- slot.
+updateSlotResponse_slotTypeId :: Lens.Lens' UpdateSlotResponse (Prelude.Maybe Prelude.Text)
+updateSlotResponse_slotTypeId = Lens.lens (\UpdateSlotResponse' {slotTypeId} -> slotTypeId) (\s@UpdateSlotResponse' {} a -> s {slotTypeId = a} :: UpdateSlotResponse)
+
+-- | Specifications for the constituent sub slots and the expression for the
+-- composite slot.
+updateSlotResponse_subSlotSetting :: Lens.Lens' UpdateSlotResponse (Prelude.Maybe SubSlotSetting)
+updateSlotResponse_subSlotSetting = Lens.lens (\UpdateSlotResponse' {subSlotSetting} -> subSlotSetting) (\s@UpdateSlotResponse' {} a -> s {subSlotSetting = a} :: UpdateSlotResponse)
+
+-- | The updated prompts that Amazon Lex sends to the user to elicit a
+-- response that provides a value for the slot.
+updateSlotResponse_valueElicitationSetting :: Lens.Lens' UpdateSlotResponse (Prelude.Maybe SlotValueElicitationSetting)
+updateSlotResponse_valueElicitationSetting = Lens.lens (\UpdateSlotResponse' {valueElicitationSetting} -> valueElicitationSetting) (\s@UpdateSlotResponse' {} a -> s {valueElicitationSetting = a} :: UpdateSlotResponse)
+
+-- | The response's http status code.
+updateSlotResponse_httpStatus :: Lens.Lens' UpdateSlotResponse Prelude.Int
+updateSlotResponse_httpStatus = Lens.lens (\UpdateSlotResponse' {httpStatus} -> httpStatus) (\s@UpdateSlotResponse' {} a -> s {httpStatus = a} :: UpdateSlotResponse)
+
+instance Prelude.NFData UpdateSlotResponse where
+  rnf UpdateSlotResponse' {..} =
+    Prelude.rnf botId
+      `Prelude.seq` Prelude.rnf botVersion
+      `Prelude.seq` Prelude.rnf creationDateTime
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf intentId
+      `Prelude.seq` Prelude.rnf lastUpdatedDateTime
+      `Prelude.seq` Prelude.rnf localeId
+      `Prelude.seq` Prelude.rnf multipleValuesSetting
+      `Prelude.seq` Prelude.rnf obfuscationSetting
+      `Prelude.seq` Prelude.rnf slotId
+      `Prelude.seq` Prelude.rnf slotName
+      `Prelude.seq` Prelude.rnf slotTypeId
+      `Prelude.seq` Prelude.rnf subSlotSetting
+      `Prelude.seq` Prelude.rnf valueElicitationSetting
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/LexV2Models/UpdateSlotType.hs b/gen/Amazonka/LexV2Models/UpdateSlotType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/UpdateSlotType.hs
@@ -0,0 +1,493 @@
+{-# 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.LexV2Models.UpdateSlotType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Updates the configuration of an existing slot type.
+module Amazonka.LexV2Models.UpdateSlotType
+  ( -- * Creating a Request
+    UpdateSlotType (..),
+    newUpdateSlotType,
+
+    -- * Request Lenses
+    updateSlotType_compositeSlotTypeSetting,
+    updateSlotType_description,
+    updateSlotType_externalSourceSetting,
+    updateSlotType_parentSlotTypeSignature,
+    updateSlotType_slotTypeValues,
+    updateSlotType_valueSelectionSetting,
+    updateSlotType_slotTypeId,
+    updateSlotType_slotTypeName,
+    updateSlotType_botId,
+    updateSlotType_botVersion,
+    updateSlotType_localeId,
+
+    -- * Destructuring the Response
+    UpdateSlotTypeResponse (..),
+    newUpdateSlotTypeResponse,
+
+    -- * Response Lenses
+    updateSlotTypeResponse_botId,
+    updateSlotTypeResponse_botVersion,
+    updateSlotTypeResponse_compositeSlotTypeSetting,
+    updateSlotTypeResponse_creationDateTime,
+    updateSlotTypeResponse_description,
+    updateSlotTypeResponse_externalSourceSetting,
+    updateSlotTypeResponse_lastUpdatedDateTime,
+    updateSlotTypeResponse_localeId,
+    updateSlotTypeResponse_parentSlotTypeSignature,
+    updateSlotTypeResponse_slotTypeId,
+    updateSlotTypeResponse_slotTypeName,
+    updateSlotTypeResponse_slotTypeValues,
+    updateSlotTypeResponse_valueSelectionSetting,
+    updateSlotTypeResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LexV2Models.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUpdateSlotType' smart constructor.
+data UpdateSlotType = UpdateSlotType'
+  { -- | Specifications for a composite slot type.
+    compositeSlotTypeSetting :: Prelude.Maybe CompositeSlotTypeSetting,
+    -- | The new description of the slot type.
+    description :: Prelude.Maybe Prelude.Text,
+    externalSourceSetting :: Prelude.Maybe ExternalSourceSetting,
+    -- | The new built-in slot type that should be used as the parent of this
+    -- slot type.
+    parentSlotTypeSignature :: Prelude.Maybe Prelude.Text,
+    -- | A new list of values and their optional synonyms that define the values
+    -- that the slot type can take.
+    slotTypeValues :: Prelude.Maybe (Prelude.NonEmpty SlotTypeValue),
+    -- | The strategy that Amazon Lex should use when deciding on a value from
+    -- the list of slot type values.
+    valueSelectionSetting :: Prelude.Maybe SlotValueSelectionSetting,
+    -- | The unique identifier of the slot type to update.
+    slotTypeId :: Prelude.Text,
+    -- | The new name of the slot type.
+    slotTypeName :: Prelude.Text,
+    -- | The identifier of the bot that contains the slot type.
+    botId :: Prelude.Text,
+    -- | The version of the bot that contains the slot type. Must be @DRAFT@.
+    botVersion :: Prelude.Text,
+    -- | The identifier of the language and locale that contains the slot type.
+    -- The string must match one of the supported locales. For more
+    -- information, see
+    -- <https://docs.aws.amazon.com/lexv2/latest/dg/how-languages.html Supported languages>.
+    localeId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateSlotType' 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:
+--
+-- 'compositeSlotTypeSetting', 'updateSlotType_compositeSlotTypeSetting' - Specifications for a composite slot type.
+--
+-- 'description', 'updateSlotType_description' - The new description of the slot type.
+--
+-- 'externalSourceSetting', 'updateSlotType_externalSourceSetting' - Undocumented member.
+--
+-- 'parentSlotTypeSignature', 'updateSlotType_parentSlotTypeSignature' - The new built-in slot type that should be used as the parent of this
+-- slot type.
+--
+-- 'slotTypeValues', 'updateSlotType_slotTypeValues' - A new list of values and their optional synonyms that define the values
+-- that the slot type can take.
+--
+-- 'valueSelectionSetting', 'updateSlotType_valueSelectionSetting' - The strategy that Amazon Lex should use when deciding on a value from
+-- the list of slot type values.
+--
+-- 'slotTypeId', 'updateSlotType_slotTypeId' - The unique identifier of the slot type to update.
+--
+-- 'slotTypeName', 'updateSlotType_slotTypeName' - The new name of the slot type.
+--
+-- 'botId', 'updateSlotType_botId' - The identifier of the bot that contains the slot type.
+--
+-- 'botVersion', 'updateSlotType_botVersion' - The version of the bot that contains the slot type. Must be @DRAFT@.
+--
+-- 'localeId', 'updateSlotType_localeId' - The identifier of the language and locale that contains the slot type.
+-- The string must match one of the supported locales. For more
+-- information, see
+-- <https://docs.aws.amazon.com/lexv2/latest/dg/how-languages.html Supported languages>.
+newUpdateSlotType ::
+  -- | 'slotTypeId'
+  Prelude.Text ->
+  -- | 'slotTypeName'
+  Prelude.Text ->
+  -- | 'botId'
+  Prelude.Text ->
+  -- | 'botVersion'
+  Prelude.Text ->
+  -- | 'localeId'
+  Prelude.Text ->
+  UpdateSlotType
+newUpdateSlotType
+  pSlotTypeId_
+  pSlotTypeName_
+  pBotId_
+  pBotVersion_
+  pLocaleId_ =
+    UpdateSlotType'
+      { compositeSlotTypeSetting =
+          Prelude.Nothing,
+        description = Prelude.Nothing,
+        externalSourceSetting = Prelude.Nothing,
+        parentSlotTypeSignature = Prelude.Nothing,
+        slotTypeValues = Prelude.Nothing,
+        valueSelectionSetting = Prelude.Nothing,
+        slotTypeId = pSlotTypeId_,
+        slotTypeName = pSlotTypeName_,
+        botId = pBotId_,
+        botVersion = pBotVersion_,
+        localeId = pLocaleId_
+      }
+
+-- | Specifications for a composite slot type.
+updateSlotType_compositeSlotTypeSetting :: Lens.Lens' UpdateSlotType (Prelude.Maybe CompositeSlotTypeSetting)
+updateSlotType_compositeSlotTypeSetting = Lens.lens (\UpdateSlotType' {compositeSlotTypeSetting} -> compositeSlotTypeSetting) (\s@UpdateSlotType' {} a -> s {compositeSlotTypeSetting = a} :: UpdateSlotType)
+
+-- | The new description of the slot type.
+updateSlotType_description :: Lens.Lens' UpdateSlotType (Prelude.Maybe Prelude.Text)
+updateSlotType_description = Lens.lens (\UpdateSlotType' {description} -> description) (\s@UpdateSlotType' {} a -> s {description = a} :: UpdateSlotType)
+
+-- | Undocumented member.
+updateSlotType_externalSourceSetting :: Lens.Lens' UpdateSlotType (Prelude.Maybe ExternalSourceSetting)
+updateSlotType_externalSourceSetting = Lens.lens (\UpdateSlotType' {externalSourceSetting} -> externalSourceSetting) (\s@UpdateSlotType' {} a -> s {externalSourceSetting = a} :: UpdateSlotType)
+
+-- | The new built-in slot type that should be used as the parent of this
+-- slot type.
+updateSlotType_parentSlotTypeSignature :: Lens.Lens' UpdateSlotType (Prelude.Maybe Prelude.Text)
+updateSlotType_parentSlotTypeSignature = Lens.lens (\UpdateSlotType' {parentSlotTypeSignature} -> parentSlotTypeSignature) (\s@UpdateSlotType' {} a -> s {parentSlotTypeSignature = a} :: UpdateSlotType)
+
+-- | A new list of values and their optional synonyms that define the values
+-- that the slot type can take.
+updateSlotType_slotTypeValues :: Lens.Lens' UpdateSlotType (Prelude.Maybe (Prelude.NonEmpty SlotTypeValue))
+updateSlotType_slotTypeValues = Lens.lens (\UpdateSlotType' {slotTypeValues} -> slotTypeValues) (\s@UpdateSlotType' {} a -> s {slotTypeValues = a} :: UpdateSlotType) Prelude.. Lens.mapping Lens.coerced
+
+-- | The strategy that Amazon Lex should use when deciding on a value from
+-- the list of slot type values.
+updateSlotType_valueSelectionSetting :: Lens.Lens' UpdateSlotType (Prelude.Maybe SlotValueSelectionSetting)
+updateSlotType_valueSelectionSetting = Lens.lens (\UpdateSlotType' {valueSelectionSetting} -> valueSelectionSetting) (\s@UpdateSlotType' {} a -> s {valueSelectionSetting = a} :: UpdateSlotType)
+
+-- | The unique identifier of the slot type to update.
+updateSlotType_slotTypeId :: Lens.Lens' UpdateSlotType Prelude.Text
+updateSlotType_slotTypeId = Lens.lens (\UpdateSlotType' {slotTypeId} -> slotTypeId) (\s@UpdateSlotType' {} a -> s {slotTypeId = a} :: UpdateSlotType)
+
+-- | The new name of the slot type.
+updateSlotType_slotTypeName :: Lens.Lens' UpdateSlotType Prelude.Text
+updateSlotType_slotTypeName = Lens.lens (\UpdateSlotType' {slotTypeName} -> slotTypeName) (\s@UpdateSlotType' {} a -> s {slotTypeName = a} :: UpdateSlotType)
+
+-- | The identifier of the bot that contains the slot type.
+updateSlotType_botId :: Lens.Lens' UpdateSlotType Prelude.Text
+updateSlotType_botId = Lens.lens (\UpdateSlotType' {botId} -> botId) (\s@UpdateSlotType' {} a -> s {botId = a} :: UpdateSlotType)
+
+-- | The version of the bot that contains the slot type. Must be @DRAFT@.
+updateSlotType_botVersion :: Lens.Lens' UpdateSlotType Prelude.Text
+updateSlotType_botVersion = Lens.lens (\UpdateSlotType' {botVersion} -> botVersion) (\s@UpdateSlotType' {} a -> s {botVersion = a} :: UpdateSlotType)
+
+-- | The identifier of the language and locale that contains the slot type.
+-- The string must match one of the supported locales. For more
+-- information, see
+-- <https://docs.aws.amazon.com/lexv2/latest/dg/how-languages.html Supported languages>.
+updateSlotType_localeId :: Lens.Lens' UpdateSlotType Prelude.Text
+updateSlotType_localeId = Lens.lens (\UpdateSlotType' {localeId} -> localeId) (\s@UpdateSlotType' {} a -> s {localeId = a} :: UpdateSlotType)
+
+instance Core.AWSRequest UpdateSlotType where
+  type
+    AWSResponse UpdateSlotType =
+      UpdateSlotTypeResponse
+  request overrides =
+    Request.putJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          UpdateSlotTypeResponse'
+            Prelude.<$> (x Data..?> "botId")
+            Prelude.<*> (x Data..?> "botVersion")
+            Prelude.<*> (x Data..?> "compositeSlotTypeSetting")
+            Prelude.<*> (x Data..?> "creationDateTime")
+            Prelude.<*> (x Data..?> "description")
+            Prelude.<*> (x Data..?> "externalSourceSetting")
+            Prelude.<*> (x Data..?> "lastUpdatedDateTime")
+            Prelude.<*> (x Data..?> "localeId")
+            Prelude.<*> (x Data..?> "parentSlotTypeSignature")
+            Prelude.<*> (x Data..?> "slotTypeId")
+            Prelude.<*> (x Data..?> "slotTypeName")
+            Prelude.<*> (x Data..?> "slotTypeValues")
+            Prelude.<*> (x Data..?> "valueSelectionSetting")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UpdateSlotType where
+  hashWithSalt _salt UpdateSlotType' {..} =
+    _salt
+      `Prelude.hashWithSalt` compositeSlotTypeSetting
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` externalSourceSetting
+      `Prelude.hashWithSalt` parentSlotTypeSignature
+      `Prelude.hashWithSalt` slotTypeValues
+      `Prelude.hashWithSalt` valueSelectionSetting
+      `Prelude.hashWithSalt` slotTypeId
+      `Prelude.hashWithSalt` slotTypeName
+      `Prelude.hashWithSalt` botId
+      `Prelude.hashWithSalt` botVersion
+      `Prelude.hashWithSalt` localeId
+
+instance Prelude.NFData UpdateSlotType where
+  rnf UpdateSlotType' {..} =
+    Prelude.rnf compositeSlotTypeSetting
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf externalSourceSetting
+      `Prelude.seq` Prelude.rnf parentSlotTypeSignature
+      `Prelude.seq` Prelude.rnf slotTypeValues
+      `Prelude.seq` Prelude.rnf valueSelectionSetting
+      `Prelude.seq` Prelude.rnf slotTypeId
+      `Prelude.seq` Prelude.rnf slotTypeName
+      `Prelude.seq` Prelude.rnf botId
+      `Prelude.seq` Prelude.rnf botVersion
+      `Prelude.seq` Prelude.rnf localeId
+
+instance Data.ToHeaders UpdateSlotType where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateSlotType where
+  toJSON UpdateSlotType' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("compositeSlotTypeSetting" Data..=)
+              Prelude.<$> compositeSlotTypeSetting,
+            ("description" Data..=) Prelude.<$> description,
+            ("externalSourceSetting" Data..=)
+              Prelude.<$> externalSourceSetting,
+            ("parentSlotTypeSignature" Data..=)
+              Prelude.<$> parentSlotTypeSignature,
+            ("slotTypeValues" Data..=)
+              Prelude.<$> slotTypeValues,
+            ("valueSelectionSetting" Data..=)
+              Prelude.<$> valueSelectionSetting,
+            Prelude.Just ("slotTypeName" Data..= slotTypeName)
+          ]
+      )
+
+instance Data.ToPath UpdateSlotType where
+  toPath UpdateSlotType' {..} =
+    Prelude.mconcat
+      [ "/bots/",
+        Data.toBS botId,
+        "/botversions/",
+        Data.toBS botVersion,
+        "/botlocales/",
+        Data.toBS localeId,
+        "/slottypes/",
+        Data.toBS slotTypeId,
+        "/"
+      ]
+
+instance Data.ToQuery UpdateSlotType where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateSlotTypeResponse' smart constructor.
+data UpdateSlotTypeResponse = UpdateSlotTypeResponse'
+  { -- | The identifier of the bot that contains the slot type.
+    botId :: Prelude.Maybe Prelude.Text,
+    -- | The version of the bot that contains the slot type. This is always
+    -- @DRAFT@.
+    botVersion :: Prelude.Maybe Prelude.Text,
+    -- | Specifications for a composite slot type.
+    compositeSlotTypeSetting :: Prelude.Maybe CompositeSlotTypeSetting,
+    -- | The timestamp of the date and time that the slot type was created.
+    creationDateTime :: Prelude.Maybe Data.POSIX,
+    -- | The updated description of the slot type.
+    description :: Prelude.Maybe Prelude.Text,
+    externalSourceSetting :: Prelude.Maybe ExternalSourceSetting,
+    -- | A timestamp of the date and time that the slot type was last updated.
+    lastUpdatedDateTime :: Prelude.Maybe Data.POSIX,
+    -- | The language and locale of the updated slot type.
+    localeId :: Prelude.Maybe Prelude.Text,
+    -- | The updated signature of the built-in slot type that is the parent of
+    -- this slot type.
+    parentSlotTypeSignature :: Prelude.Maybe Prelude.Text,
+    -- | The unique identifier of the updated slot type.
+    slotTypeId :: Prelude.Maybe Prelude.Text,
+    -- | The updated name of the slot type.
+    slotTypeName :: Prelude.Maybe Prelude.Text,
+    -- | The updated values that the slot type provides.
+    slotTypeValues :: Prelude.Maybe (Prelude.NonEmpty SlotTypeValue),
+    -- | The updated strategy that Amazon Lex uses to determine which value to
+    -- select from the slot type.
+    valueSelectionSetting :: Prelude.Maybe SlotValueSelectionSetting,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateSlotTypeResponse' 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:
+--
+-- 'botId', 'updateSlotTypeResponse_botId' - The identifier of the bot that contains the slot type.
+--
+-- 'botVersion', 'updateSlotTypeResponse_botVersion' - The version of the bot that contains the slot type. This is always
+-- @DRAFT@.
+--
+-- 'compositeSlotTypeSetting', 'updateSlotTypeResponse_compositeSlotTypeSetting' - Specifications for a composite slot type.
+--
+-- 'creationDateTime', 'updateSlotTypeResponse_creationDateTime' - The timestamp of the date and time that the slot type was created.
+--
+-- 'description', 'updateSlotTypeResponse_description' - The updated description of the slot type.
+--
+-- 'externalSourceSetting', 'updateSlotTypeResponse_externalSourceSetting' - Undocumented member.
+--
+-- 'lastUpdatedDateTime', 'updateSlotTypeResponse_lastUpdatedDateTime' - A timestamp of the date and time that the slot type was last updated.
+--
+-- 'localeId', 'updateSlotTypeResponse_localeId' - The language and locale of the updated slot type.
+--
+-- 'parentSlotTypeSignature', 'updateSlotTypeResponse_parentSlotTypeSignature' - The updated signature of the built-in slot type that is the parent of
+-- this slot type.
+--
+-- 'slotTypeId', 'updateSlotTypeResponse_slotTypeId' - The unique identifier of the updated slot type.
+--
+-- 'slotTypeName', 'updateSlotTypeResponse_slotTypeName' - The updated name of the slot type.
+--
+-- 'slotTypeValues', 'updateSlotTypeResponse_slotTypeValues' - The updated values that the slot type provides.
+--
+-- 'valueSelectionSetting', 'updateSlotTypeResponse_valueSelectionSetting' - The updated strategy that Amazon Lex uses to determine which value to
+-- select from the slot type.
+--
+-- 'httpStatus', 'updateSlotTypeResponse_httpStatus' - The response's http status code.
+newUpdateSlotTypeResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UpdateSlotTypeResponse
+newUpdateSlotTypeResponse pHttpStatus_ =
+  UpdateSlotTypeResponse'
+    { botId = Prelude.Nothing,
+      botVersion = Prelude.Nothing,
+      compositeSlotTypeSetting = Prelude.Nothing,
+      creationDateTime = Prelude.Nothing,
+      description = Prelude.Nothing,
+      externalSourceSetting = Prelude.Nothing,
+      lastUpdatedDateTime = Prelude.Nothing,
+      localeId = Prelude.Nothing,
+      parentSlotTypeSignature = Prelude.Nothing,
+      slotTypeId = Prelude.Nothing,
+      slotTypeName = Prelude.Nothing,
+      slotTypeValues = Prelude.Nothing,
+      valueSelectionSetting = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The identifier of the bot that contains the slot type.
+updateSlotTypeResponse_botId :: Lens.Lens' UpdateSlotTypeResponse (Prelude.Maybe Prelude.Text)
+updateSlotTypeResponse_botId = Lens.lens (\UpdateSlotTypeResponse' {botId} -> botId) (\s@UpdateSlotTypeResponse' {} a -> s {botId = a} :: UpdateSlotTypeResponse)
+
+-- | The version of the bot that contains the slot type. This is always
+-- @DRAFT@.
+updateSlotTypeResponse_botVersion :: Lens.Lens' UpdateSlotTypeResponse (Prelude.Maybe Prelude.Text)
+updateSlotTypeResponse_botVersion = Lens.lens (\UpdateSlotTypeResponse' {botVersion} -> botVersion) (\s@UpdateSlotTypeResponse' {} a -> s {botVersion = a} :: UpdateSlotTypeResponse)
+
+-- | Specifications for a composite slot type.
+updateSlotTypeResponse_compositeSlotTypeSetting :: Lens.Lens' UpdateSlotTypeResponse (Prelude.Maybe CompositeSlotTypeSetting)
+updateSlotTypeResponse_compositeSlotTypeSetting = Lens.lens (\UpdateSlotTypeResponse' {compositeSlotTypeSetting} -> compositeSlotTypeSetting) (\s@UpdateSlotTypeResponse' {} a -> s {compositeSlotTypeSetting = a} :: UpdateSlotTypeResponse)
+
+-- | The timestamp of the date and time that the slot type was created.
+updateSlotTypeResponse_creationDateTime :: Lens.Lens' UpdateSlotTypeResponse (Prelude.Maybe Prelude.UTCTime)
+updateSlotTypeResponse_creationDateTime = Lens.lens (\UpdateSlotTypeResponse' {creationDateTime} -> creationDateTime) (\s@UpdateSlotTypeResponse' {} a -> s {creationDateTime = a} :: UpdateSlotTypeResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The updated description of the slot type.
+updateSlotTypeResponse_description :: Lens.Lens' UpdateSlotTypeResponse (Prelude.Maybe Prelude.Text)
+updateSlotTypeResponse_description = Lens.lens (\UpdateSlotTypeResponse' {description} -> description) (\s@UpdateSlotTypeResponse' {} a -> s {description = a} :: UpdateSlotTypeResponse)
+
+-- | Undocumented member.
+updateSlotTypeResponse_externalSourceSetting :: Lens.Lens' UpdateSlotTypeResponse (Prelude.Maybe ExternalSourceSetting)
+updateSlotTypeResponse_externalSourceSetting = Lens.lens (\UpdateSlotTypeResponse' {externalSourceSetting} -> externalSourceSetting) (\s@UpdateSlotTypeResponse' {} a -> s {externalSourceSetting = a} :: UpdateSlotTypeResponse)
+
+-- | A timestamp of the date and time that the slot type was last updated.
+updateSlotTypeResponse_lastUpdatedDateTime :: Lens.Lens' UpdateSlotTypeResponse (Prelude.Maybe Prelude.UTCTime)
+updateSlotTypeResponse_lastUpdatedDateTime = Lens.lens (\UpdateSlotTypeResponse' {lastUpdatedDateTime} -> lastUpdatedDateTime) (\s@UpdateSlotTypeResponse' {} a -> s {lastUpdatedDateTime = a} :: UpdateSlotTypeResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The language and locale of the updated slot type.
+updateSlotTypeResponse_localeId :: Lens.Lens' UpdateSlotTypeResponse (Prelude.Maybe Prelude.Text)
+updateSlotTypeResponse_localeId = Lens.lens (\UpdateSlotTypeResponse' {localeId} -> localeId) (\s@UpdateSlotTypeResponse' {} a -> s {localeId = a} :: UpdateSlotTypeResponse)
+
+-- | The updated signature of the built-in slot type that is the parent of
+-- this slot type.
+updateSlotTypeResponse_parentSlotTypeSignature :: Lens.Lens' UpdateSlotTypeResponse (Prelude.Maybe Prelude.Text)
+updateSlotTypeResponse_parentSlotTypeSignature = Lens.lens (\UpdateSlotTypeResponse' {parentSlotTypeSignature} -> parentSlotTypeSignature) (\s@UpdateSlotTypeResponse' {} a -> s {parentSlotTypeSignature = a} :: UpdateSlotTypeResponse)
+
+-- | The unique identifier of the updated slot type.
+updateSlotTypeResponse_slotTypeId :: Lens.Lens' UpdateSlotTypeResponse (Prelude.Maybe Prelude.Text)
+updateSlotTypeResponse_slotTypeId = Lens.lens (\UpdateSlotTypeResponse' {slotTypeId} -> slotTypeId) (\s@UpdateSlotTypeResponse' {} a -> s {slotTypeId = a} :: UpdateSlotTypeResponse)
+
+-- | The updated name of the slot type.
+updateSlotTypeResponse_slotTypeName :: Lens.Lens' UpdateSlotTypeResponse (Prelude.Maybe Prelude.Text)
+updateSlotTypeResponse_slotTypeName = Lens.lens (\UpdateSlotTypeResponse' {slotTypeName} -> slotTypeName) (\s@UpdateSlotTypeResponse' {} a -> s {slotTypeName = a} :: UpdateSlotTypeResponse)
+
+-- | The updated values that the slot type provides.
+updateSlotTypeResponse_slotTypeValues :: Lens.Lens' UpdateSlotTypeResponse (Prelude.Maybe (Prelude.NonEmpty SlotTypeValue))
+updateSlotTypeResponse_slotTypeValues = Lens.lens (\UpdateSlotTypeResponse' {slotTypeValues} -> slotTypeValues) (\s@UpdateSlotTypeResponse' {} a -> s {slotTypeValues = a} :: UpdateSlotTypeResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The updated strategy that Amazon Lex uses to determine which value to
+-- select from the slot type.
+updateSlotTypeResponse_valueSelectionSetting :: Lens.Lens' UpdateSlotTypeResponse (Prelude.Maybe SlotValueSelectionSetting)
+updateSlotTypeResponse_valueSelectionSetting = Lens.lens (\UpdateSlotTypeResponse' {valueSelectionSetting} -> valueSelectionSetting) (\s@UpdateSlotTypeResponse' {} a -> s {valueSelectionSetting = a} :: UpdateSlotTypeResponse)
+
+-- | The response's http status code.
+updateSlotTypeResponse_httpStatus :: Lens.Lens' UpdateSlotTypeResponse Prelude.Int
+updateSlotTypeResponse_httpStatus = Lens.lens (\UpdateSlotTypeResponse' {httpStatus} -> httpStatus) (\s@UpdateSlotTypeResponse' {} a -> s {httpStatus = a} :: UpdateSlotTypeResponse)
+
+instance Prelude.NFData UpdateSlotTypeResponse where
+  rnf UpdateSlotTypeResponse' {..} =
+    Prelude.rnf botId
+      `Prelude.seq` Prelude.rnf botVersion
+      `Prelude.seq` Prelude.rnf compositeSlotTypeSetting
+      `Prelude.seq` Prelude.rnf creationDateTime
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf externalSourceSetting
+      `Prelude.seq` Prelude.rnf lastUpdatedDateTime
+      `Prelude.seq` Prelude.rnf localeId
+      `Prelude.seq` Prelude.rnf parentSlotTypeSignature
+      `Prelude.seq` Prelude.rnf slotTypeId
+      `Prelude.seq` Prelude.rnf slotTypeName
+      `Prelude.seq` Prelude.rnf slotTypeValues
+      `Prelude.seq` Prelude.rnf valueSelectionSetting
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/LexV2Models/Waiters.hs b/gen/Amazonka/LexV2Models/Waiters.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/LexV2Models/Waiters.hs
@@ -0,0 +1,330 @@
+{-# 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.LexV2Models.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.LexV2Models.Waiters where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.LexV2Models.DescribeBot
+import Amazonka.LexV2Models.DescribeBotAlias
+import Amazonka.LexV2Models.DescribeBotLocale
+import Amazonka.LexV2Models.DescribeBotVersion
+import Amazonka.LexV2Models.DescribeExport
+import Amazonka.LexV2Models.DescribeImport
+import Amazonka.LexV2Models.Lens
+import Amazonka.LexV2Models.Types
+import qualified Amazonka.Prelude as Prelude
+
+-- | Polls 'Amazonka.LexV2Models.DescribeBotAlias' every 10 seconds until a successful state is reached. An error is returned after 35 failed checks.
+newBotAliasAvailable :: Core.Wait DescribeBotAlias
+newBotAliasAvailable =
+  Core.Wait
+    { Core.name = "BotAliasAvailable",
+      Core.attempts = 35,
+      Core.delay = 10,
+      Core.acceptors =
+        [ Core.matchAll
+            "Available"
+            Core.AcceptSuccess
+            ( describeBotAliasResponse_botAliasStatus
+                Prelude.. Lens._Just
+                Prelude.. Lens.to Data.toTextCI
+            ),
+          Core.matchAll
+            "Failed"
+            Core.AcceptFailure
+            ( describeBotAliasResponse_botAliasStatus
+                Prelude.. Lens._Just
+                Prelude.. Lens.to Data.toTextCI
+            ),
+          Core.matchAll
+            "Deleting"
+            Core.AcceptFailure
+            ( describeBotAliasResponse_botAliasStatus
+                Prelude.. Lens._Just
+                Prelude.. Lens.to Data.toTextCI
+            )
+        ]
+    }
+
+-- | Polls 'Amazonka.LexV2Models.DescribeBot' every 10 seconds until a successful state is reached. An error is returned after 35 failed checks.
+newBotAvailable :: Core.Wait DescribeBot
+newBotAvailable =
+  Core.Wait
+    { Core.name = "BotAvailable",
+      Core.attempts = 35,
+      Core.delay = 10,
+      Core.acceptors =
+        [ Core.matchAll
+            "Available"
+            Core.AcceptSuccess
+            ( describeBotResponse_botStatus
+                Prelude.. Lens._Just
+                Prelude.. Lens.to Data.toTextCI
+            ),
+          Core.matchAll
+            "Deleting"
+            Core.AcceptFailure
+            ( describeBotResponse_botStatus
+                Prelude.. Lens._Just
+                Prelude.. Lens.to Data.toTextCI
+            ),
+          Core.matchAll
+            "Failed"
+            Core.AcceptFailure
+            ( describeBotResponse_botStatus
+                Prelude.. Lens._Just
+                Prelude.. Lens.to Data.toTextCI
+            ),
+          Core.matchAll
+            "Inactive"
+            Core.AcceptFailure
+            ( describeBotResponse_botStatus
+                Prelude.. Lens._Just
+                Prelude.. Lens.to Data.toTextCI
+            )
+        ]
+    }
+
+-- | Polls 'Amazonka.LexV2Models.DescribeExport' every 10 seconds until a successful state is reached. An error is returned after 35 failed checks.
+newBotExportCompleted :: Core.Wait DescribeExport
+newBotExportCompleted =
+  Core.Wait
+    { Core.name = "BotExportCompleted",
+      Core.attempts = 35,
+      Core.delay = 10,
+      Core.acceptors =
+        [ Core.matchAll
+            "Completed"
+            Core.AcceptSuccess
+            ( describeExportResponse_exportStatus
+                Prelude.. Lens._Just
+                Prelude.. Lens.to Data.toTextCI
+            ),
+          Core.matchAll
+            "Deleting"
+            Core.AcceptFailure
+            ( describeExportResponse_exportStatus
+                Prelude.. Lens._Just
+                Prelude.. Lens.to Data.toTextCI
+            ),
+          Core.matchAll
+            "Failed"
+            Core.AcceptFailure
+            ( describeExportResponse_exportStatus
+                Prelude.. Lens._Just
+                Prelude.. Lens.to Data.toTextCI
+            )
+        ]
+    }
+
+-- | Polls 'Amazonka.LexV2Models.DescribeImport' every 10 seconds until a successful state is reached. An error is returned after 35 failed checks.
+newBotImportCompleted :: Core.Wait DescribeImport
+newBotImportCompleted =
+  Core.Wait
+    { Core.name = "BotImportCompleted",
+      Core.attempts = 35,
+      Core.delay = 10,
+      Core.acceptors =
+        [ Core.matchAll
+            "Completed"
+            Core.AcceptSuccess
+            ( describeImportResponse_importStatus
+                Prelude.. Lens._Just
+                Prelude.. Lens.to Data.toTextCI
+            ),
+          Core.matchAll
+            "Deleting"
+            Core.AcceptFailure
+            ( describeImportResponse_importStatus
+                Prelude.. Lens._Just
+                Prelude.. Lens.to Data.toTextCI
+            ),
+          Core.matchAll
+            "Failed"
+            Core.AcceptFailure
+            ( describeImportResponse_importStatus
+                Prelude.. Lens._Just
+                Prelude.. Lens.to Data.toTextCI
+            )
+        ]
+    }
+
+-- | Polls 'Amazonka.LexV2Models.DescribeBotLocale' every 10 seconds until a successful state is reached. An error is returned after 35 failed checks.
+newBotLocaleBuilt :: Core.Wait DescribeBotLocale
+newBotLocaleBuilt =
+  Core.Wait
+    { Core.name = "BotLocaleBuilt",
+      Core.attempts = 35,
+      Core.delay = 10,
+      Core.acceptors =
+        [ Core.matchAll
+            "Built"
+            Core.AcceptSuccess
+            ( describeBotLocaleResponse_botLocaleStatus
+                Prelude.. Lens._Just
+                Prelude.. Lens.to Data.toTextCI
+            ),
+          Core.matchAll
+            "Deleting"
+            Core.AcceptFailure
+            ( describeBotLocaleResponse_botLocaleStatus
+                Prelude.. Lens._Just
+                Prelude.. Lens.to Data.toTextCI
+            ),
+          Core.matchAll
+            "Failed"
+            Core.AcceptFailure
+            ( describeBotLocaleResponse_botLocaleStatus
+                Prelude.. Lens._Just
+                Prelude.. Lens.to Data.toTextCI
+            ),
+          Core.matchAll
+            "NotBuilt"
+            Core.AcceptFailure
+            ( describeBotLocaleResponse_botLocaleStatus
+                Prelude.. Lens._Just
+                Prelude.. Lens.to Data.toTextCI
+            )
+        ]
+    }
+
+-- | Polls 'Amazonka.LexV2Models.DescribeBotLocale' every 10 seconds until a successful state is reached. An error is returned after 35 failed checks.
+newBotLocaleCreated :: Core.Wait DescribeBotLocale
+newBotLocaleCreated =
+  Core.Wait
+    { Core.name = "BotLocaleCreated",
+      Core.attempts = 35,
+      Core.delay = 10,
+      Core.acceptors =
+        [ Core.matchAll
+            "Built"
+            Core.AcceptSuccess
+            ( describeBotLocaleResponse_botLocaleStatus
+                Prelude.. Lens._Just
+                Prelude.. Lens.to Data.toTextCI
+            ),
+          Core.matchAll
+            "ReadyExpressTesting"
+            Core.AcceptSuccess
+            ( describeBotLocaleResponse_botLocaleStatus
+                Prelude.. Lens._Just
+                Prelude.. Lens.to Data.toTextCI
+            ),
+          Core.matchAll
+            "NotBuilt"
+            Core.AcceptSuccess
+            ( describeBotLocaleResponse_botLocaleStatus
+                Prelude.. Lens._Just
+                Prelude.. Lens.to Data.toTextCI
+            ),
+          Core.matchAll
+            "Deleting"
+            Core.AcceptFailure
+            ( describeBotLocaleResponse_botLocaleStatus
+                Prelude.. Lens._Just
+                Prelude.. Lens.to Data.toTextCI
+            ),
+          Core.matchAll
+            "Failed"
+            Core.AcceptFailure
+            ( describeBotLocaleResponse_botLocaleStatus
+                Prelude.. Lens._Just
+                Prelude.. Lens.to Data.toTextCI
+            )
+        ]
+    }
+
+-- | Polls 'Amazonka.LexV2Models.DescribeBotLocale' every 10 seconds until a successful state is reached. An error is returned after 35 failed checks.
+newBotLocaleExpressTestingAvailable :: Core.Wait DescribeBotLocale
+newBotLocaleExpressTestingAvailable =
+  Core.Wait
+    { Core.name =
+        "BotLocaleExpressTestingAvailable",
+      Core.attempts = 35,
+      Core.delay = 10,
+      Core.acceptors =
+        [ Core.matchAll
+            "Built"
+            Core.AcceptSuccess
+            ( describeBotLocaleResponse_botLocaleStatus
+                Prelude.. Lens._Just
+                Prelude.. Lens.to Data.toTextCI
+            ),
+          Core.matchAll
+            "ReadyExpressTesting"
+            Core.AcceptSuccess
+            ( describeBotLocaleResponse_botLocaleStatus
+                Prelude.. Lens._Just
+                Prelude.. Lens.to Data.toTextCI
+            ),
+          Core.matchAll
+            "Deleting"
+            Core.AcceptFailure
+            ( describeBotLocaleResponse_botLocaleStatus
+                Prelude.. Lens._Just
+                Prelude.. Lens.to Data.toTextCI
+            ),
+          Core.matchAll
+            "Failed"
+            Core.AcceptFailure
+            ( describeBotLocaleResponse_botLocaleStatus
+                Prelude.. Lens._Just
+                Prelude.. Lens.to Data.toTextCI
+            ),
+          Core.matchAll
+            "NotBuilt"
+            Core.AcceptFailure
+            ( describeBotLocaleResponse_botLocaleStatus
+                Prelude.. Lens._Just
+                Prelude.. Lens.to Data.toTextCI
+            )
+        ]
+    }
+
+-- | Polls 'Amazonka.LexV2Models.DescribeBotVersion' every 10 seconds until a successful state is reached. An error is returned after 35 failed checks.
+newBotVersionAvailable :: Core.Wait DescribeBotVersion
+newBotVersionAvailable =
+  Core.Wait
+    { Core.name = "BotVersionAvailable",
+      Core.attempts = 35,
+      Core.delay = 10,
+      Core.acceptors =
+        [ Core.matchAll
+            "Available"
+            Core.AcceptSuccess
+            ( describeBotVersionResponse_botStatus
+                Prelude.. Lens._Just
+                Prelude.. Lens.to Data.toTextCI
+            ),
+          Core.matchAll
+            "Deleting"
+            Core.AcceptFailure
+            ( describeBotVersionResponse_botStatus
+                Prelude.. Lens._Just
+                Prelude.. Lens.to Data.toTextCI
+            ),
+          Core.matchAll
+            "Failed"
+            Core.AcceptFailure
+            ( describeBotVersionResponse_botStatus
+                Prelude.. Lens._Just
+                Prelude.. Lens.to Data.toTextCI
+            ),
+          Core.matchStatus 404 Core.AcceptRetry
+        ]
+    }
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.LexV2Models
+import Test.Amazonka.LexV2Models.Internal
+import Test.Tasty
+
+main :: IO ()
+main =
+  defaultMain $
+    testGroup
+      "LexV2Models"
+      [ testGroup "tests" tests,
+        testGroup "fixtures" fixtures
+      ]
diff --git a/test/Test/Amazonka/Gen/LexV2Models.hs b/test/Test/Amazonka/Gen/LexV2Models.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/Gen/LexV2Models.hs
@@ -0,0 +1,1458 @@
+{-# 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.LexV2Models
+-- 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.LexV2Models where
+
+import Amazonka.LexV2Models
+import qualified Data.Proxy as Proxy
+import Test.Amazonka.Fixture
+import Test.Amazonka.LexV2Models.Internal
+import Test.Amazonka.Prelude
+import Test.Tasty
+
+-- Auto-generated: the actual test selection needs to be manually placed into
+-- the top-level so that real test data can be incrementally added.
+--
+-- This commented snippet is what the entire set should look like:
+
+-- fixtures :: TestTree
+-- fixtures =
+--     [ testGroup "request"
+--         [ requestBatchCreateCustomVocabularyItem $
+--             newBatchCreateCustomVocabularyItem
+--
+--         , requestBatchDeleteCustomVocabularyItem $
+--             newBatchDeleteCustomVocabularyItem
+--
+--         , requestBatchUpdateCustomVocabularyItem $
+--             newBatchUpdateCustomVocabularyItem
+--
+--         , requestBuildBotLocale $
+--             newBuildBotLocale
+--
+--         , requestCreateBot $
+--             newCreateBot
+--
+--         , requestCreateBotAlias $
+--             newCreateBotAlias
+--
+--         , requestCreateBotLocale $
+--             newCreateBotLocale
+--
+--         , requestCreateBotVersion $
+--             newCreateBotVersion
+--
+--         , requestCreateExport $
+--             newCreateExport
+--
+--         , requestCreateIntent $
+--             newCreateIntent
+--
+--         , requestCreateResourcePolicy $
+--             newCreateResourcePolicy
+--
+--         , requestCreateResourcePolicyStatement $
+--             newCreateResourcePolicyStatement
+--
+--         , requestCreateSlot $
+--             newCreateSlot
+--
+--         , requestCreateSlotType $
+--             newCreateSlotType
+--
+--         , requestCreateUploadUrl $
+--             newCreateUploadUrl
+--
+--         , requestDeleteBot $
+--             newDeleteBot
+--
+--         , requestDeleteBotAlias $
+--             newDeleteBotAlias
+--
+--         , requestDeleteBotLocale $
+--             newDeleteBotLocale
+--
+--         , requestDeleteBotVersion $
+--             newDeleteBotVersion
+--
+--         , requestDeleteCustomVocabulary $
+--             newDeleteCustomVocabulary
+--
+--         , requestDeleteExport $
+--             newDeleteExport
+--
+--         , requestDeleteImport $
+--             newDeleteImport
+--
+--         , requestDeleteIntent $
+--             newDeleteIntent
+--
+--         , requestDeleteResourcePolicy $
+--             newDeleteResourcePolicy
+--
+--         , requestDeleteResourcePolicyStatement $
+--             newDeleteResourcePolicyStatement
+--
+--         , requestDeleteSlot $
+--             newDeleteSlot
+--
+--         , requestDeleteSlotType $
+--             newDeleteSlotType
+--
+--         , requestDeleteUtterances $
+--             newDeleteUtterances
+--
+--         , requestDescribeBot $
+--             newDescribeBot
+--
+--         , requestDescribeBotAlias $
+--             newDescribeBotAlias
+--
+--         , requestDescribeBotLocale $
+--             newDescribeBotLocale
+--
+--         , requestDescribeBotRecommendation $
+--             newDescribeBotRecommendation
+--
+--         , requestDescribeBotVersion $
+--             newDescribeBotVersion
+--
+--         , requestDescribeCustomVocabularyMetadata $
+--             newDescribeCustomVocabularyMetadata
+--
+--         , requestDescribeExport $
+--             newDescribeExport
+--
+--         , requestDescribeImport $
+--             newDescribeImport
+--
+--         , requestDescribeIntent $
+--             newDescribeIntent
+--
+--         , requestDescribeResourcePolicy $
+--             newDescribeResourcePolicy
+--
+--         , requestDescribeSlot $
+--             newDescribeSlot
+--
+--         , requestDescribeSlotType $
+--             newDescribeSlotType
+--
+--         , requestListAggregatedUtterances $
+--             newListAggregatedUtterances
+--
+--         , requestListBotAliases $
+--             newListBotAliases
+--
+--         , requestListBotLocales $
+--             newListBotLocales
+--
+--         , requestListBotRecommendations $
+--             newListBotRecommendations
+--
+--         , requestListBotVersions $
+--             newListBotVersions
+--
+--         , requestListBots $
+--             newListBots
+--
+--         , requestListBuiltInIntents $
+--             newListBuiltInIntents
+--
+--         , requestListBuiltInSlotTypes $
+--             newListBuiltInSlotTypes
+--
+--         , requestListCustomVocabularyItems $
+--             newListCustomVocabularyItems
+--
+--         , requestListExports $
+--             newListExports
+--
+--         , requestListImports $
+--             newListImports
+--
+--         , requestListIntents $
+--             newListIntents
+--
+--         , requestListRecommendedIntents $
+--             newListRecommendedIntents
+--
+--         , requestListSlotTypes $
+--             newListSlotTypes
+--
+--         , requestListSlots $
+--             newListSlots
+--
+--         , requestListTagsForResource $
+--             newListTagsForResource
+--
+--         , requestSearchAssociatedTranscripts $
+--             newSearchAssociatedTranscripts
+--
+--         , requestStartBotRecommendation $
+--             newStartBotRecommendation
+--
+--         , requestStartImport $
+--             newStartImport
+--
+--         , requestStopBotRecommendation $
+--             newStopBotRecommendation
+--
+--         , requestTagResource $
+--             newTagResource
+--
+--         , requestUntagResource $
+--             newUntagResource
+--
+--         , requestUpdateBot $
+--             newUpdateBot
+--
+--         , requestUpdateBotAlias $
+--             newUpdateBotAlias
+--
+--         , requestUpdateBotLocale $
+--             newUpdateBotLocale
+--
+--         , requestUpdateBotRecommendation $
+--             newUpdateBotRecommendation
+--
+--         , requestUpdateExport $
+--             newUpdateExport
+--
+--         , requestUpdateIntent $
+--             newUpdateIntent
+--
+--         , requestUpdateResourcePolicy $
+--             newUpdateResourcePolicy
+--
+--         , requestUpdateSlot $
+--             newUpdateSlot
+--
+--         , requestUpdateSlotType $
+--             newUpdateSlotType
+--
+--           ]
+
+--     , testGroup "response"
+--         [ responseBatchCreateCustomVocabularyItem $
+--             newBatchCreateCustomVocabularyItemResponse
+--
+--         , responseBatchDeleteCustomVocabularyItem $
+--             newBatchDeleteCustomVocabularyItemResponse
+--
+--         , responseBatchUpdateCustomVocabularyItem $
+--             newBatchUpdateCustomVocabularyItemResponse
+--
+--         , responseBuildBotLocale $
+--             newBuildBotLocaleResponse
+--
+--         , responseCreateBot $
+--             newCreateBotResponse
+--
+--         , responseCreateBotAlias $
+--             newCreateBotAliasResponse
+--
+--         , responseCreateBotLocale $
+--             newCreateBotLocaleResponse
+--
+--         , responseCreateBotVersion $
+--             newCreateBotVersionResponse
+--
+--         , responseCreateExport $
+--             newCreateExportResponse
+--
+--         , responseCreateIntent $
+--             newCreateIntentResponse
+--
+--         , responseCreateResourcePolicy $
+--             newCreateResourcePolicyResponse
+--
+--         , responseCreateResourcePolicyStatement $
+--             newCreateResourcePolicyStatementResponse
+--
+--         , responseCreateSlot $
+--             newCreateSlotResponse
+--
+--         , responseCreateSlotType $
+--             newCreateSlotTypeResponse
+--
+--         , responseCreateUploadUrl $
+--             newCreateUploadUrlResponse
+--
+--         , responseDeleteBot $
+--             newDeleteBotResponse
+--
+--         , responseDeleteBotAlias $
+--             newDeleteBotAliasResponse
+--
+--         , responseDeleteBotLocale $
+--             newDeleteBotLocaleResponse
+--
+--         , responseDeleteBotVersion $
+--             newDeleteBotVersionResponse
+--
+--         , responseDeleteCustomVocabulary $
+--             newDeleteCustomVocabularyResponse
+--
+--         , responseDeleteExport $
+--             newDeleteExportResponse
+--
+--         , responseDeleteImport $
+--             newDeleteImportResponse
+--
+--         , responseDeleteIntent $
+--             newDeleteIntentResponse
+--
+--         , responseDeleteResourcePolicy $
+--             newDeleteResourcePolicyResponse
+--
+--         , responseDeleteResourcePolicyStatement $
+--             newDeleteResourcePolicyStatementResponse
+--
+--         , responseDeleteSlot $
+--             newDeleteSlotResponse
+--
+--         , responseDeleteSlotType $
+--             newDeleteSlotTypeResponse
+--
+--         , responseDeleteUtterances $
+--             newDeleteUtterancesResponse
+--
+--         , responseDescribeBot $
+--             newDescribeBotResponse
+--
+--         , responseDescribeBotAlias $
+--             newDescribeBotAliasResponse
+--
+--         , responseDescribeBotLocale $
+--             newDescribeBotLocaleResponse
+--
+--         , responseDescribeBotRecommendation $
+--             newDescribeBotRecommendationResponse
+--
+--         , responseDescribeBotVersion $
+--             newDescribeBotVersionResponse
+--
+--         , responseDescribeCustomVocabularyMetadata $
+--             newDescribeCustomVocabularyMetadataResponse
+--
+--         , responseDescribeExport $
+--             newDescribeExportResponse
+--
+--         , responseDescribeImport $
+--             newDescribeImportResponse
+--
+--         , responseDescribeIntent $
+--             newDescribeIntentResponse
+--
+--         , responseDescribeResourcePolicy $
+--             newDescribeResourcePolicyResponse
+--
+--         , responseDescribeSlot $
+--             newDescribeSlotResponse
+--
+--         , responseDescribeSlotType $
+--             newDescribeSlotTypeResponse
+--
+--         , responseListAggregatedUtterances $
+--             newListAggregatedUtterancesResponse
+--
+--         , responseListBotAliases $
+--             newListBotAliasesResponse
+--
+--         , responseListBotLocales $
+--             newListBotLocalesResponse
+--
+--         , responseListBotRecommendations $
+--             newListBotRecommendationsResponse
+--
+--         , responseListBotVersions $
+--             newListBotVersionsResponse
+--
+--         , responseListBots $
+--             newListBotsResponse
+--
+--         , responseListBuiltInIntents $
+--             newListBuiltInIntentsResponse
+--
+--         , responseListBuiltInSlotTypes $
+--             newListBuiltInSlotTypesResponse
+--
+--         , responseListCustomVocabularyItems $
+--             newListCustomVocabularyItemsResponse
+--
+--         , responseListExports $
+--             newListExportsResponse
+--
+--         , responseListImports $
+--             newListImportsResponse
+--
+--         , responseListIntents $
+--             newListIntentsResponse
+--
+--         , responseListRecommendedIntents $
+--             newListRecommendedIntentsResponse
+--
+--         , responseListSlotTypes $
+--             newListSlotTypesResponse
+--
+--         , responseListSlots $
+--             newListSlotsResponse
+--
+--         , responseListTagsForResource $
+--             newListTagsForResourceResponse
+--
+--         , responseSearchAssociatedTranscripts $
+--             newSearchAssociatedTranscriptsResponse
+--
+--         , responseStartBotRecommendation $
+--             newStartBotRecommendationResponse
+--
+--         , responseStartImport $
+--             newStartImportResponse
+--
+--         , responseStopBotRecommendation $
+--             newStopBotRecommendationResponse
+--
+--         , responseTagResource $
+--             newTagResourceResponse
+--
+--         , responseUntagResource $
+--             newUntagResourceResponse
+--
+--         , responseUpdateBot $
+--             newUpdateBotResponse
+--
+--         , responseUpdateBotAlias $
+--             newUpdateBotAliasResponse
+--
+--         , responseUpdateBotLocale $
+--             newUpdateBotLocaleResponse
+--
+--         , responseUpdateBotRecommendation $
+--             newUpdateBotRecommendationResponse
+--
+--         , responseUpdateExport $
+--             newUpdateExportResponse
+--
+--         , responseUpdateIntent $
+--             newUpdateIntentResponse
+--
+--         , responseUpdateResourcePolicy $
+--             newUpdateResourcePolicyResponse
+--
+--         , responseUpdateSlot $
+--             newUpdateSlotResponse
+--
+--         , responseUpdateSlotType $
+--             newUpdateSlotTypeResponse
+--
+--           ]
+--     ]
+
+-- Requests
+
+requestBatchCreateCustomVocabularyItem :: BatchCreateCustomVocabularyItem -> TestTree
+requestBatchCreateCustomVocabularyItem =
+  req
+    "BatchCreateCustomVocabularyItem"
+    "fixture/BatchCreateCustomVocabularyItem.yaml"
+
+requestBatchDeleteCustomVocabularyItem :: BatchDeleteCustomVocabularyItem -> TestTree
+requestBatchDeleteCustomVocabularyItem =
+  req
+    "BatchDeleteCustomVocabularyItem"
+    "fixture/BatchDeleteCustomVocabularyItem.yaml"
+
+requestBatchUpdateCustomVocabularyItem :: BatchUpdateCustomVocabularyItem -> TestTree
+requestBatchUpdateCustomVocabularyItem =
+  req
+    "BatchUpdateCustomVocabularyItem"
+    "fixture/BatchUpdateCustomVocabularyItem.yaml"
+
+requestBuildBotLocale :: BuildBotLocale -> TestTree
+requestBuildBotLocale =
+  req
+    "BuildBotLocale"
+    "fixture/BuildBotLocale.yaml"
+
+requestCreateBot :: CreateBot -> TestTree
+requestCreateBot =
+  req
+    "CreateBot"
+    "fixture/CreateBot.yaml"
+
+requestCreateBotAlias :: CreateBotAlias -> TestTree
+requestCreateBotAlias =
+  req
+    "CreateBotAlias"
+    "fixture/CreateBotAlias.yaml"
+
+requestCreateBotLocale :: CreateBotLocale -> TestTree
+requestCreateBotLocale =
+  req
+    "CreateBotLocale"
+    "fixture/CreateBotLocale.yaml"
+
+requestCreateBotVersion :: CreateBotVersion -> TestTree
+requestCreateBotVersion =
+  req
+    "CreateBotVersion"
+    "fixture/CreateBotVersion.yaml"
+
+requestCreateExport :: CreateExport -> TestTree
+requestCreateExport =
+  req
+    "CreateExport"
+    "fixture/CreateExport.yaml"
+
+requestCreateIntent :: CreateIntent -> TestTree
+requestCreateIntent =
+  req
+    "CreateIntent"
+    "fixture/CreateIntent.yaml"
+
+requestCreateResourcePolicy :: CreateResourcePolicy -> TestTree
+requestCreateResourcePolicy =
+  req
+    "CreateResourcePolicy"
+    "fixture/CreateResourcePolicy.yaml"
+
+requestCreateResourcePolicyStatement :: CreateResourcePolicyStatement -> TestTree
+requestCreateResourcePolicyStatement =
+  req
+    "CreateResourcePolicyStatement"
+    "fixture/CreateResourcePolicyStatement.yaml"
+
+requestCreateSlot :: CreateSlot -> TestTree
+requestCreateSlot =
+  req
+    "CreateSlot"
+    "fixture/CreateSlot.yaml"
+
+requestCreateSlotType :: CreateSlotType -> TestTree
+requestCreateSlotType =
+  req
+    "CreateSlotType"
+    "fixture/CreateSlotType.yaml"
+
+requestCreateUploadUrl :: CreateUploadUrl -> TestTree
+requestCreateUploadUrl =
+  req
+    "CreateUploadUrl"
+    "fixture/CreateUploadUrl.yaml"
+
+requestDeleteBot :: DeleteBot -> TestTree
+requestDeleteBot =
+  req
+    "DeleteBot"
+    "fixture/DeleteBot.yaml"
+
+requestDeleteBotAlias :: DeleteBotAlias -> TestTree
+requestDeleteBotAlias =
+  req
+    "DeleteBotAlias"
+    "fixture/DeleteBotAlias.yaml"
+
+requestDeleteBotLocale :: DeleteBotLocale -> TestTree
+requestDeleteBotLocale =
+  req
+    "DeleteBotLocale"
+    "fixture/DeleteBotLocale.yaml"
+
+requestDeleteBotVersion :: DeleteBotVersion -> TestTree
+requestDeleteBotVersion =
+  req
+    "DeleteBotVersion"
+    "fixture/DeleteBotVersion.yaml"
+
+requestDeleteCustomVocabulary :: DeleteCustomVocabulary -> TestTree
+requestDeleteCustomVocabulary =
+  req
+    "DeleteCustomVocabulary"
+    "fixture/DeleteCustomVocabulary.yaml"
+
+requestDeleteExport :: DeleteExport -> TestTree
+requestDeleteExport =
+  req
+    "DeleteExport"
+    "fixture/DeleteExport.yaml"
+
+requestDeleteImport :: DeleteImport -> TestTree
+requestDeleteImport =
+  req
+    "DeleteImport"
+    "fixture/DeleteImport.yaml"
+
+requestDeleteIntent :: DeleteIntent -> TestTree
+requestDeleteIntent =
+  req
+    "DeleteIntent"
+    "fixture/DeleteIntent.yaml"
+
+requestDeleteResourcePolicy :: DeleteResourcePolicy -> TestTree
+requestDeleteResourcePolicy =
+  req
+    "DeleteResourcePolicy"
+    "fixture/DeleteResourcePolicy.yaml"
+
+requestDeleteResourcePolicyStatement :: DeleteResourcePolicyStatement -> TestTree
+requestDeleteResourcePolicyStatement =
+  req
+    "DeleteResourcePolicyStatement"
+    "fixture/DeleteResourcePolicyStatement.yaml"
+
+requestDeleteSlot :: DeleteSlot -> TestTree
+requestDeleteSlot =
+  req
+    "DeleteSlot"
+    "fixture/DeleteSlot.yaml"
+
+requestDeleteSlotType :: DeleteSlotType -> TestTree
+requestDeleteSlotType =
+  req
+    "DeleteSlotType"
+    "fixture/DeleteSlotType.yaml"
+
+requestDeleteUtterances :: DeleteUtterances -> TestTree
+requestDeleteUtterances =
+  req
+    "DeleteUtterances"
+    "fixture/DeleteUtterances.yaml"
+
+requestDescribeBot :: DescribeBot -> TestTree
+requestDescribeBot =
+  req
+    "DescribeBot"
+    "fixture/DescribeBot.yaml"
+
+requestDescribeBotAlias :: DescribeBotAlias -> TestTree
+requestDescribeBotAlias =
+  req
+    "DescribeBotAlias"
+    "fixture/DescribeBotAlias.yaml"
+
+requestDescribeBotLocale :: DescribeBotLocale -> TestTree
+requestDescribeBotLocale =
+  req
+    "DescribeBotLocale"
+    "fixture/DescribeBotLocale.yaml"
+
+requestDescribeBotRecommendation :: DescribeBotRecommendation -> TestTree
+requestDescribeBotRecommendation =
+  req
+    "DescribeBotRecommendation"
+    "fixture/DescribeBotRecommendation.yaml"
+
+requestDescribeBotVersion :: DescribeBotVersion -> TestTree
+requestDescribeBotVersion =
+  req
+    "DescribeBotVersion"
+    "fixture/DescribeBotVersion.yaml"
+
+requestDescribeCustomVocabularyMetadata :: DescribeCustomVocabularyMetadata -> TestTree
+requestDescribeCustomVocabularyMetadata =
+  req
+    "DescribeCustomVocabularyMetadata"
+    "fixture/DescribeCustomVocabularyMetadata.yaml"
+
+requestDescribeExport :: DescribeExport -> TestTree
+requestDescribeExport =
+  req
+    "DescribeExport"
+    "fixture/DescribeExport.yaml"
+
+requestDescribeImport :: DescribeImport -> TestTree
+requestDescribeImport =
+  req
+    "DescribeImport"
+    "fixture/DescribeImport.yaml"
+
+requestDescribeIntent :: DescribeIntent -> TestTree
+requestDescribeIntent =
+  req
+    "DescribeIntent"
+    "fixture/DescribeIntent.yaml"
+
+requestDescribeResourcePolicy :: DescribeResourcePolicy -> TestTree
+requestDescribeResourcePolicy =
+  req
+    "DescribeResourcePolicy"
+    "fixture/DescribeResourcePolicy.yaml"
+
+requestDescribeSlot :: DescribeSlot -> TestTree
+requestDescribeSlot =
+  req
+    "DescribeSlot"
+    "fixture/DescribeSlot.yaml"
+
+requestDescribeSlotType :: DescribeSlotType -> TestTree
+requestDescribeSlotType =
+  req
+    "DescribeSlotType"
+    "fixture/DescribeSlotType.yaml"
+
+requestListAggregatedUtterances :: ListAggregatedUtterances -> TestTree
+requestListAggregatedUtterances =
+  req
+    "ListAggregatedUtterances"
+    "fixture/ListAggregatedUtterances.yaml"
+
+requestListBotAliases :: ListBotAliases -> TestTree
+requestListBotAliases =
+  req
+    "ListBotAliases"
+    "fixture/ListBotAliases.yaml"
+
+requestListBotLocales :: ListBotLocales -> TestTree
+requestListBotLocales =
+  req
+    "ListBotLocales"
+    "fixture/ListBotLocales.yaml"
+
+requestListBotRecommendations :: ListBotRecommendations -> TestTree
+requestListBotRecommendations =
+  req
+    "ListBotRecommendations"
+    "fixture/ListBotRecommendations.yaml"
+
+requestListBotVersions :: ListBotVersions -> TestTree
+requestListBotVersions =
+  req
+    "ListBotVersions"
+    "fixture/ListBotVersions.yaml"
+
+requestListBots :: ListBots -> TestTree
+requestListBots =
+  req
+    "ListBots"
+    "fixture/ListBots.yaml"
+
+requestListBuiltInIntents :: ListBuiltInIntents -> TestTree
+requestListBuiltInIntents =
+  req
+    "ListBuiltInIntents"
+    "fixture/ListBuiltInIntents.yaml"
+
+requestListBuiltInSlotTypes :: ListBuiltInSlotTypes -> TestTree
+requestListBuiltInSlotTypes =
+  req
+    "ListBuiltInSlotTypes"
+    "fixture/ListBuiltInSlotTypes.yaml"
+
+requestListCustomVocabularyItems :: ListCustomVocabularyItems -> TestTree
+requestListCustomVocabularyItems =
+  req
+    "ListCustomVocabularyItems"
+    "fixture/ListCustomVocabularyItems.yaml"
+
+requestListExports :: ListExports -> TestTree
+requestListExports =
+  req
+    "ListExports"
+    "fixture/ListExports.yaml"
+
+requestListImports :: ListImports -> TestTree
+requestListImports =
+  req
+    "ListImports"
+    "fixture/ListImports.yaml"
+
+requestListIntents :: ListIntents -> TestTree
+requestListIntents =
+  req
+    "ListIntents"
+    "fixture/ListIntents.yaml"
+
+requestListRecommendedIntents :: ListRecommendedIntents -> TestTree
+requestListRecommendedIntents =
+  req
+    "ListRecommendedIntents"
+    "fixture/ListRecommendedIntents.yaml"
+
+requestListSlotTypes :: ListSlotTypes -> TestTree
+requestListSlotTypes =
+  req
+    "ListSlotTypes"
+    "fixture/ListSlotTypes.yaml"
+
+requestListSlots :: ListSlots -> TestTree
+requestListSlots =
+  req
+    "ListSlots"
+    "fixture/ListSlots.yaml"
+
+requestListTagsForResource :: ListTagsForResource -> TestTree
+requestListTagsForResource =
+  req
+    "ListTagsForResource"
+    "fixture/ListTagsForResource.yaml"
+
+requestSearchAssociatedTranscripts :: SearchAssociatedTranscripts -> TestTree
+requestSearchAssociatedTranscripts =
+  req
+    "SearchAssociatedTranscripts"
+    "fixture/SearchAssociatedTranscripts.yaml"
+
+requestStartBotRecommendation :: StartBotRecommendation -> TestTree
+requestStartBotRecommendation =
+  req
+    "StartBotRecommendation"
+    "fixture/StartBotRecommendation.yaml"
+
+requestStartImport :: StartImport -> TestTree
+requestStartImport =
+  req
+    "StartImport"
+    "fixture/StartImport.yaml"
+
+requestStopBotRecommendation :: StopBotRecommendation -> TestTree
+requestStopBotRecommendation =
+  req
+    "StopBotRecommendation"
+    "fixture/StopBotRecommendation.yaml"
+
+requestTagResource :: TagResource -> TestTree
+requestTagResource =
+  req
+    "TagResource"
+    "fixture/TagResource.yaml"
+
+requestUntagResource :: UntagResource -> TestTree
+requestUntagResource =
+  req
+    "UntagResource"
+    "fixture/UntagResource.yaml"
+
+requestUpdateBot :: UpdateBot -> TestTree
+requestUpdateBot =
+  req
+    "UpdateBot"
+    "fixture/UpdateBot.yaml"
+
+requestUpdateBotAlias :: UpdateBotAlias -> TestTree
+requestUpdateBotAlias =
+  req
+    "UpdateBotAlias"
+    "fixture/UpdateBotAlias.yaml"
+
+requestUpdateBotLocale :: UpdateBotLocale -> TestTree
+requestUpdateBotLocale =
+  req
+    "UpdateBotLocale"
+    "fixture/UpdateBotLocale.yaml"
+
+requestUpdateBotRecommendation :: UpdateBotRecommendation -> TestTree
+requestUpdateBotRecommendation =
+  req
+    "UpdateBotRecommendation"
+    "fixture/UpdateBotRecommendation.yaml"
+
+requestUpdateExport :: UpdateExport -> TestTree
+requestUpdateExport =
+  req
+    "UpdateExport"
+    "fixture/UpdateExport.yaml"
+
+requestUpdateIntent :: UpdateIntent -> TestTree
+requestUpdateIntent =
+  req
+    "UpdateIntent"
+    "fixture/UpdateIntent.yaml"
+
+requestUpdateResourcePolicy :: UpdateResourcePolicy -> TestTree
+requestUpdateResourcePolicy =
+  req
+    "UpdateResourcePolicy"
+    "fixture/UpdateResourcePolicy.yaml"
+
+requestUpdateSlot :: UpdateSlot -> TestTree
+requestUpdateSlot =
+  req
+    "UpdateSlot"
+    "fixture/UpdateSlot.yaml"
+
+requestUpdateSlotType :: UpdateSlotType -> TestTree
+requestUpdateSlotType =
+  req
+    "UpdateSlotType"
+    "fixture/UpdateSlotType.yaml"
+
+-- Responses
+
+responseBatchCreateCustomVocabularyItem :: BatchCreateCustomVocabularyItemResponse -> TestTree
+responseBatchCreateCustomVocabularyItem =
+  res
+    "BatchCreateCustomVocabularyItemResponse"
+    "fixture/BatchCreateCustomVocabularyItemResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy BatchCreateCustomVocabularyItem)
+
+responseBatchDeleteCustomVocabularyItem :: BatchDeleteCustomVocabularyItemResponse -> TestTree
+responseBatchDeleteCustomVocabularyItem =
+  res
+    "BatchDeleteCustomVocabularyItemResponse"
+    "fixture/BatchDeleteCustomVocabularyItemResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy BatchDeleteCustomVocabularyItem)
+
+responseBatchUpdateCustomVocabularyItem :: BatchUpdateCustomVocabularyItemResponse -> TestTree
+responseBatchUpdateCustomVocabularyItem =
+  res
+    "BatchUpdateCustomVocabularyItemResponse"
+    "fixture/BatchUpdateCustomVocabularyItemResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy BatchUpdateCustomVocabularyItem)
+
+responseBuildBotLocale :: BuildBotLocaleResponse -> TestTree
+responseBuildBotLocale =
+  res
+    "BuildBotLocaleResponse"
+    "fixture/BuildBotLocaleResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy BuildBotLocale)
+
+responseCreateBot :: CreateBotResponse -> TestTree
+responseCreateBot =
+  res
+    "CreateBotResponse"
+    "fixture/CreateBotResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateBot)
+
+responseCreateBotAlias :: CreateBotAliasResponse -> TestTree
+responseCreateBotAlias =
+  res
+    "CreateBotAliasResponse"
+    "fixture/CreateBotAliasResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateBotAlias)
+
+responseCreateBotLocale :: CreateBotLocaleResponse -> TestTree
+responseCreateBotLocale =
+  res
+    "CreateBotLocaleResponse"
+    "fixture/CreateBotLocaleResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateBotLocale)
+
+responseCreateBotVersion :: CreateBotVersionResponse -> TestTree
+responseCreateBotVersion =
+  res
+    "CreateBotVersionResponse"
+    "fixture/CreateBotVersionResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateBotVersion)
+
+responseCreateExport :: CreateExportResponse -> TestTree
+responseCreateExport =
+  res
+    "CreateExportResponse"
+    "fixture/CreateExportResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateExport)
+
+responseCreateIntent :: CreateIntentResponse -> TestTree
+responseCreateIntent =
+  res
+    "CreateIntentResponse"
+    "fixture/CreateIntentResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateIntent)
+
+responseCreateResourcePolicy :: CreateResourcePolicyResponse -> TestTree
+responseCreateResourcePolicy =
+  res
+    "CreateResourcePolicyResponse"
+    "fixture/CreateResourcePolicyResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateResourcePolicy)
+
+responseCreateResourcePolicyStatement :: CreateResourcePolicyStatementResponse -> TestTree
+responseCreateResourcePolicyStatement =
+  res
+    "CreateResourcePolicyStatementResponse"
+    "fixture/CreateResourcePolicyStatementResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateResourcePolicyStatement)
+
+responseCreateSlot :: CreateSlotResponse -> TestTree
+responseCreateSlot =
+  res
+    "CreateSlotResponse"
+    "fixture/CreateSlotResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateSlot)
+
+responseCreateSlotType :: CreateSlotTypeResponse -> TestTree
+responseCreateSlotType =
+  res
+    "CreateSlotTypeResponse"
+    "fixture/CreateSlotTypeResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateSlotType)
+
+responseCreateUploadUrl :: CreateUploadUrlResponse -> TestTree
+responseCreateUploadUrl =
+  res
+    "CreateUploadUrlResponse"
+    "fixture/CreateUploadUrlResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateUploadUrl)
+
+responseDeleteBot :: DeleteBotResponse -> TestTree
+responseDeleteBot =
+  res
+    "DeleteBotResponse"
+    "fixture/DeleteBotResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteBot)
+
+responseDeleteBotAlias :: DeleteBotAliasResponse -> TestTree
+responseDeleteBotAlias =
+  res
+    "DeleteBotAliasResponse"
+    "fixture/DeleteBotAliasResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteBotAlias)
+
+responseDeleteBotLocale :: DeleteBotLocaleResponse -> TestTree
+responseDeleteBotLocale =
+  res
+    "DeleteBotLocaleResponse"
+    "fixture/DeleteBotLocaleResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteBotLocale)
+
+responseDeleteBotVersion :: DeleteBotVersionResponse -> TestTree
+responseDeleteBotVersion =
+  res
+    "DeleteBotVersionResponse"
+    "fixture/DeleteBotVersionResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteBotVersion)
+
+responseDeleteCustomVocabulary :: DeleteCustomVocabularyResponse -> TestTree
+responseDeleteCustomVocabulary =
+  res
+    "DeleteCustomVocabularyResponse"
+    "fixture/DeleteCustomVocabularyResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteCustomVocabulary)
+
+responseDeleteExport :: DeleteExportResponse -> TestTree
+responseDeleteExport =
+  res
+    "DeleteExportResponse"
+    "fixture/DeleteExportResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteExport)
+
+responseDeleteImport :: DeleteImportResponse -> TestTree
+responseDeleteImport =
+  res
+    "DeleteImportResponse"
+    "fixture/DeleteImportResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteImport)
+
+responseDeleteIntent :: DeleteIntentResponse -> TestTree
+responseDeleteIntent =
+  res
+    "DeleteIntentResponse"
+    "fixture/DeleteIntentResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteIntent)
+
+responseDeleteResourcePolicy :: DeleteResourcePolicyResponse -> TestTree
+responseDeleteResourcePolicy =
+  res
+    "DeleteResourcePolicyResponse"
+    "fixture/DeleteResourcePolicyResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteResourcePolicy)
+
+responseDeleteResourcePolicyStatement :: DeleteResourcePolicyStatementResponse -> TestTree
+responseDeleteResourcePolicyStatement =
+  res
+    "DeleteResourcePolicyStatementResponse"
+    "fixture/DeleteResourcePolicyStatementResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteResourcePolicyStatement)
+
+responseDeleteSlot :: DeleteSlotResponse -> TestTree
+responseDeleteSlot =
+  res
+    "DeleteSlotResponse"
+    "fixture/DeleteSlotResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteSlot)
+
+responseDeleteSlotType :: DeleteSlotTypeResponse -> TestTree
+responseDeleteSlotType =
+  res
+    "DeleteSlotTypeResponse"
+    "fixture/DeleteSlotTypeResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteSlotType)
+
+responseDeleteUtterances :: DeleteUtterancesResponse -> TestTree
+responseDeleteUtterances =
+  res
+    "DeleteUtterancesResponse"
+    "fixture/DeleteUtterancesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteUtterances)
+
+responseDescribeBot :: DescribeBotResponse -> TestTree
+responseDescribeBot =
+  res
+    "DescribeBotResponse"
+    "fixture/DescribeBotResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeBot)
+
+responseDescribeBotAlias :: DescribeBotAliasResponse -> TestTree
+responseDescribeBotAlias =
+  res
+    "DescribeBotAliasResponse"
+    "fixture/DescribeBotAliasResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeBotAlias)
+
+responseDescribeBotLocale :: DescribeBotLocaleResponse -> TestTree
+responseDescribeBotLocale =
+  res
+    "DescribeBotLocaleResponse"
+    "fixture/DescribeBotLocaleResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeBotLocale)
+
+responseDescribeBotRecommendation :: DescribeBotRecommendationResponse -> TestTree
+responseDescribeBotRecommendation =
+  res
+    "DescribeBotRecommendationResponse"
+    "fixture/DescribeBotRecommendationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeBotRecommendation)
+
+responseDescribeBotVersion :: DescribeBotVersionResponse -> TestTree
+responseDescribeBotVersion =
+  res
+    "DescribeBotVersionResponse"
+    "fixture/DescribeBotVersionResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeBotVersion)
+
+responseDescribeCustomVocabularyMetadata :: DescribeCustomVocabularyMetadataResponse -> TestTree
+responseDescribeCustomVocabularyMetadata =
+  res
+    "DescribeCustomVocabularyMetadataResponse"
+    "fixture/DescribeCustomVocabularyMetadataResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeCustomVocabularyMetadata)
+
+responseDescribeExport :: DescribeExportResponse -> TestTree
+responseDescribeExport =
+  res
+    "DescribeExportResponse"
+    "fixture/DescribeExportResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeExport)
+
+responseDescribeImport :: DescribeImportResponse -> TestTree
+responseDescribeImport =
+  res
+    "DescribeImportResponse"
+    "fixture/DescribeImportResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeImport)
+
+responseDescribeIntent :: DescribeIntentResponse -> TestTree
+responseDescribeIntent =
+  res
+    "DescribeIntentResponse"
+    "fixture/DescribeIntentResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeIntent)
+
+responseDescribeResourcePolicy :: DescribeResourcePolicyResponse -> TestTree
+responseDescribeResourcePolicy =
+  res
+    "DescribeResourcePolicyResponse"
+    "fixture/DescribeResourcePolicyResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeResourcePolicy)
+
+responseDescribeSlot :: DescribeSlotResponse -> TestTree
+responseDescribeSlot =
+  res
+    "DescribeSlotResponse"
+    "fixture/DescribeSlotResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeSlot)
+
+responseDescribeSlotType :: DescribeSlotTypeResponse -> TestTree
+responseDescribeSlotType =
+  res
+    "DescribeSlotTypeResponse"
+    "fixture/DescribeSlotTypeResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeSlotType)
+
+responseListAggregatedUtterances :: ListAggregatedUtterancesResponse -> TestTree
+responseListAggregatedUtterances =
+  res
+    "ListAggregatedUtterancesResponse"
+    "fixture/ListAggregatedUtterancesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListAggregatedUtterances)
+
+responseListBotAliases :: ListBotAliasesResponse -> TestTree
+responseListBotAliases =
+  res
+    "ListBotAliasesResponse"
+    "fixture/ListBotAliasesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListBotAliases)
+
+responseListBotLocales :: ListBotLocalesResponse -> TestTree
+responseListBotLocales =
+  res
+    "ListBotLocalesResponse"
+    "fixture/ListBotLocalesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListBotLocales)
+
+responseListBotRecommendations :: ListBotRecommendationsResponse -> TestTree
+responseListBotRecommendations =
+  res
+    "ListBotRecommendationsResponse"
+    "fixture/ListBotRecommendationsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListBotRecommendations)
+
+responseListBotVersions :: ListBotVersionsResponse -> TestTree
+responseListBotVersions =
+  res
+    "ListBotVersionsResponse"
+    "fixture/ListBotVersionsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListBotVersions)
+
+responseListBots :: ListBotsResponse -> TestTree
+responseListBots =
+  res
+    "ListBotsResponse"
+    "fixture/ListBotsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListBots)
+
+responseListBuiltInIntents :: ListBuiltInIntentsResponse -> TestTree
+responseListBuiltInIntents =
+  res
+    "ListBuiltInIntentsResponse"
+    "fixture/ListBuiltInIntentsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListBuiltInIntents)
+
+responseListBuiltInSlotTypes :: ListBuiltInSlotTypesResponse -> TestTree
+responseListBuiltInSlotTypes =
+  res
+    "ListBuiltInSlotTypesResponse"
+    "fixture/ListBuiltInSlotTypesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListBuiltInSlotTypes)
+
+responseListCustomVocabularyItems :: ListCustomVocabularyItemsResponse -> TestTree
+responseListCustomVocabularyItems =
+  res
+    "ListCustomVocabularyItemsResponse"
+    "fixture/ListCustomVocabularyItemsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListCustomVocabularyItems)
+
+responseListExports :: ListExportsResponse -> TestTree
+responseListExports =
+  res
+    "ListExportsResponse"
+    "fixture/ListExportsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListExports)
+
+responseListImports :: ListImportsResponse -> TestTree
+responseListImports =
+  res
+    "ListImportsResponse"
+    "fixture/ListImportsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListImports)
+
+responseListIntents :: ListIntentsResponse -> TestTree
+responseListIntents =
+  res
+    "ListIntentsResponse"
+    "fixture/ListIntentsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListIntents)
+
+responseListRecommendedIntents :: ListRecommendedIntentsResponse -> TestTree
+responseListRecommendedIntents =
+  res
+    "ListRecommendedIntentsResponse"
+    "fixture/ListRecommendedIntentsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListRecommendedIntents)
+
+responseListSlotTypes :: ListSlotTypesResponse -> TestTree
+responseListSlotTypes =
+  res
+    "ListSlotTypesResponse"
+    "fixture/ListSlotTypesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListSlotTypes)
+
+responseListSlots :: ListSlotsResponse -> TestTree
+responseListSlots =
+  res
+    "ListSlotsResponse"
+    "fixture/ListSlotsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListSlots)
+
+responseListTagsForResource :: ListTagsForResourceResponse -> TestTree
+responseListTagsForResource =
+  res
+    "ListTagsForResourceResponse"
+    "fixture/ListTagsForResourceResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListTagsForResource)
+
+responseSearchAssociatedTranscripts :: SearchAssociatedTranscriptsResponse -> TestTree
+responseSearchAssociatedTranscripts =
+  res
+    "SearchAssociatedTranscriptsResponse"
+    "fixture/SearchAssociatedTranscriptsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy SearchAssociatedTranscripts)
+
+responseStartBotRecommendation :: StartBotRecommendationResponse -> TestTree
+responseStartBotRecommendation =
+  res
+    "StartBotRecommendationResponse"
+    "fixture/StartBotRecommendationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy StartBotRecommendation)
+
+responseStartImport :: StartImportResponse -> TestTree
+responseStartImport =
+  res
+    "StartImportResponse"
+    "fixture/StartImportResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy StartImport)
+
+responseStopBotRecommendation :: StopBotRecommendationResponse -> TestTree
+responseStopBotRecommendation =
+  res
+    "StopBotRecommendationResponse"
+    "fixture/StopBotRecommendationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy StopBotRecommendation)
+
+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)
+
+responseUpdateBot :: UpdateBotResponse -> TestTree
+responseUpdateBot =
+  res
+    "UpdateBotResponse"
+    "fixture/UpdateBotResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateBot)
+
+responseUpdateBotAlias :: UpdateBotAliasResponse -> TestTree
+responseUpdateBotAlias =
+  res
+    "UpdateBotAliasResponse"
+    "fixture/UpdateBotAliasResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateBotAlias)
+
+responseUpdateBotLocale :: UpdateBotLocaleResponse -> TestTree
+responseUpdateBotLocale =
+  res
+    "UpdateBotLocaleResponse"
+    "fixture/UpdateBotLocaleResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateBotLocale)
+
+responseUpdateBotRecommendation :: UpdateBotRecommendationResponse -> TestTree
+responseUpdateBotRecommendation =
+  res
+    "UpdateBotRecommendationResponse"
+    "fixture/UpdateBotRecommendationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateBotRecommendation)
+
+responseUpdateExport :: UpdateExportResponse -> TestTree
+responseUpdateExport =
+  res
+    "UpdateExportResponse"
+    "fixture/UpdateExportResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateExport)
+
+responseUpdateIntent :: UpdateIntentResponse -> TestTree
+responseUpdateIntent =
+  res
+    "UpdateIntentResponse"
+    "fixture/UpdateIntentResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateIntent)
+
+responseUpdateResourcePolicy :: UpdateResourcePolicyResponse -> TestTree
+responseUpdateResourcePolicy =
+  res
+    "UpdateResourcePolicyResponse"
+    "fixture/UpdateResourcePolicyResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateResourcePolicy)
+
+responseUpdateSlot :: UpdateSlotResponse -> TestTree
+responseUpdateSlot =
+  res
+    "UpdateSlotResponse"
+    "fixture/UpdateSlotResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateSlot)
+
+responseUpdateSlotType :: UpdateSlotTypeResponse -> TestTree
+responseUpdateSlotType =
+  res
+    "UpdateSlotTypeResponse"
+    "fixture/UpdateSlotTypeResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateSlotType)
diff --git a/test/Test/Amazonka/LexV2Models.hs b/test/Test/Amazonka/LexV2Models.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/LexV2Models.hs
@@ -0,0 +1,20 @@
+-- |
+-- Module      : Test.Amazonka.LexV2Models
+-- 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.LexV2Models
+  ( tests,
+    fixtures,
+  )
+where
+
+import Test.Tasty (TestTree)
+
+tests :: [TestTree]
+tests = []
+
+fixtures :: [TestTree]
+fixtures = []
diff --git a/test/Test/Amazonka/LexV2Models/Internal.hs b/test/Test/Amazonka/LexV2Models/Internal.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/LexV2Models/Internal.hs
@@ -0,0 +1,8 @@
+-- |
+-- Module      : Test.Amazonka.LexV2Models.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.LexV2Models.Internal where
